Gazebo 加载xacro文件和URDF文件的方式

2023-05-16

 版权声明:

<--本博客所有内容均为自己在学习工作中的总结、摘录等-- --转载请注明出处-- --如有侵权请联系删除-->  https://blog.csdn.net/xuehuafeiwu123/article/details/71108959


打开Gazebo的方式主要有两种:rosrun 和 roslaunch。

1、启动ROS节点
      启动ROS节点、bring up 机器人的标准工具是roslaunch。打开一个空的Gazebo世界命令如下:

     roslaunch gazebo_ros empty_world.launch
参数:

  • paused 
  • 在暂停状态打开Gazebo (default false)
  • use_sim_time 
  • 节点启动模拟时间,启动主题topic /clock (default true)
  • gui 
  • 启动Gazebo用户接口 (default true)
  • headless 
  • 禁止仿真器调用任何渲染组件。不能在gui:=true (default false)是使用
  • debug 
  • 用gdb (default false)调试模式启动 gzserver (Gazebo Server)

例如:

roslaunch gazebo_ros empty_world.launch paused:=true use_sim_time:=false gui:=true throttled:=false headless:=false debug:=true

2、demo 环境
还有一些demo可以直接使用,它们在包含在gazebo_ros功能包中,包括:

roslaunch gazebo_ros mud_world.launch
roslaunch gazebo_ros shapes_world.launch
roslaunch gazebo_ros rubble_world.launch

注意在mud_world.launch中,加入了一个机械关节,文件如下:

  <!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
<launch>
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
       <arg name="world_name" value="worlds/mud.world"/>

       <!-- Note: the world_name is with respect to GAZEBO_RESOURCE_PATH environmental variable -->
       <arg name="paused" value="false"/>
       <arg name="use_sim_time" value="true"/>
       <arg name="gui" value="true"/>
       <arg name="headless" value="false"/>
       <arg name="debug" value="false"/>
  </include>
</launch>

所有的文件都继承了empty.world,只改变了一个参数:world_name。

3、创建Gazebo ROS Package
    1、建立工作空间

              /home/user/catkin_ws/src
    2、编写sdf文件

文件夹目录如下:

../catkin_ws/src
    /MYROBOT_description
        package.xml
        CMakeLists.txt
        /urdf
            MYROBOT.urdf
        /meshes
            mesh1.dae
            mesh2.dae
            ...
        /materials
        /cad
    /MYROBOT_gazebo
        /launch
            MYROBOT.launch
        /worlds
            MYROBOT.world
        /models
            world_object1.dae
            world_object2.stl
            world_object3.urdf
        /materials
        /plugins

      3、创建通用的 World 文件

创建ROS功能包

创建launch文件夹

创建 YOUROBOT.launch 文件

<launch>
  <!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find MYROBOT_gazebo)/worlds/MYROBOT.world"/>
    <!-- more default parameters can be changed here -->
  </include>
</launch>

创建MYROBOT.world 文件

<?xml version="1.0" ?>
<sdf version="1.4">
  <world name="default">
    <include>
      <uri>model://ground_plane</uri>
    </include>
    <include>
      <uri>model://sun</uri>
    </include>
    <include>
      <uri>model://gas_station</uri>
      <name>gas_station</name>
      <pose>-2.0 7.0 0 0 0 0</pose>
    </include>
  </world>
</sdf>

运行文件

. ~/catkin_ws/devel/setup.bash
roslaunch MYROBOT_gazebo MYROBOT.launch

        4、加载 URDF 模型
如何把自己建立的URDF模型添加到gazebo环境中?

利用 roslaunch,有两种方法:

ROS Service Call Spawn Method
这种方法保持ROS软件包在不同电脑间轻松移植。只要软件包在一个ROS包路径中即可。不过要求编写一个ROS service call脚本。

  • Model Database Method

只要放置在默认的数据库路径中,或者自己建立一个数据库,并把它包含在环境变量中

1、ROS Service Call

利用 pawn_model脚本向 gazebo_ros 节点(在主题中,空间名为”gazebo” )发出服务请求,进而添加 URDF 到 Gazebo 中。

urdf

rosrun gazebo_ros spawn_model -file `rospack find MYROBOT_description`/urdf/MYROBOT.urdf -urdf -x 0 -y 0 -z 1 -model MYROBOT

如果是.xacro,可以转化为 urdf 文件:

xacro

rosrun xacro xacro.py `rospack find pr2_description`/robots/pr2.urdf.xacro -o /tmp/pr2.urdf

查看其关节图:

check_urdf pr2.urdf
urdf_to_graphiz pr2.urdf
cd ~
rosrun tf view_frames
evince frames.pdf

查看 pawn_model的所有参数,可以运行:

rosrun gazebo_ros spawn_model -h
  • 在 launch文件中,可以编写为形如:

urdf

<!-- Spawn a robot into Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-file $(find baxter_description)/urdf/baxter.urdf -urdf -z 1 -model baxter" />

xacro

<!-- Convert an xacro and put on parameter server -->
<param name="robot_description" command="$(find xacro)/xacro.py $(find pr2_description)/robots/pr2.urdf.xacro" />

<!-- Spawn a robot into Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -model pr2" />
  • Model Database

    此种方法需要编辑 sdf 文件,官方的模型都是采用的这种方法。

参考
https://bitbucket.org/osrf/gazebo_models/downloads/ 
http://gazebosim.org 
http://wiki.ros.org/urdf
--------------------- 
作者:飘零过客 
来源:CSDN 
原文:https://blog.csdn.net/xuehuafeiwu123/article/details/71108959 
版权声明:本文为博主原创文章,转载请附上博文链接!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gazebo 加载xacro文件和URDF文件的方式 的相关文章

随机推荐

  • Openwrt二级路由获取IPV6

    由于没有公网IPV4 便研究了一下公网IPV6 网上大部分是将光猫改为桥接 xff0c 然后路由拨号 xff0c 获取公网IPV6地址 xff0c 但目前不想这样做 研究一下 xff0c 二级路由下的IPV6获取 按照网上的说明 xff0c
  • 从RK3399的安卓系统中提取dts

    不久前淘到一块RK3399的板子 xff0c 安卓7 1的系统 xff0c 可是翻遍全网没有任何资料 便想着从系统中提取设备树文件 xff0c 自行适配linux系统 1 系统备份 参考该RK3328系统备份文章 xff0c 安装好驱动 x
  • MATALB 卷积神经网络 图片二分类

    正忙着写论文的时候 xff0c 突然看到她的询问 xff0c 连续两晚失眠 xff0c 有了这个程序 以前没用过神经网络 xff0c 所有代码都是基于别人基础上修改 xff0c 仅限于能实现自己需要的功能 从GitHub找到一个创建用于图像
  • MATLAB调用训练好的卷积神经网络

    上一篇链接 xff1a MATALB 卷积神经网络 图片二分类 上一篇已经介绍了如何对数据通过CNN进行深度学习分类 xff0c 并将训练好的模型保存下来 这里将介绍一下如何调用自己已经训练好的模型进行数据分类 1 加载模型 clear c
  • Unity URP DOTS Pathfinding+Local avoidance

    Unity URP DOTS Pathfinding 43 Local avoidance RVO2的效果还是蛮好的
  • 使用Python+Scrapy爬取并保存QQ群空间帖子

    首先声明 xff0c 在Python和爬虫这方面 xff0c 我是业余的那一卦 xff0c 只是平时玩一玩 xff0c 不能当真的 xff0c 请各位大佬轻拍 虽然爬虫与传统意义上的大数据技术不属于同一类 xff0c 但大概也只能放在大数据
  • SLAM 多点导航功能包发布

    SLAM 多点导航功能包 navi multi goals pub rviz plugin 描述 xff1a 该功能包为SLAM 建图导航提供可发布多个目标点任务的导航方式 要求 必须基于 Autolabor SLAM导航使用 一 安装与配
  • 步进电机学习笔记

    扩充的理论知识 xff1a 步进电机的细分技术实质上一种电子阻尼技术 xff0c 其主要目的是减弱或消除低频振动 不同厂家的细分驱动器精度可能差别很大 xff0c 还取决于细分电流控制精度等因素 细分数越大 xff0c 精度越难控制 xff
  • 错误:AttributeError: module ‘cv2.cv2‘ has no attribute ‘TrackerCSRT_create‘ 解决

    OpenCV目标跟踪运行出错 xff1a AttributeError module cv2 cv2 has no attribute 39 TrackerCSRT create C 问题 xff1a 直接上错误代码 xff1a 上我的代码
  • STM32系列(HAL库) ——使用串口打印的3种方式

    一 前期准备 1 硬件 xff1a STM32C8T6最小系统板USB TTL串口模块ST Link下载器 2 软件 xff1a keil5 IDEcubeMX 二 cubeMX配置 1 配置RCC 选择外部时钟源 2 配置SYS Seri
  • C#多线程编程:线程基础

    原文链接 xff1a https www cnblogs com wyt007 p 9486752 html 创建线程 static void Main string args Thread t 61 new Thread PrintNum
  • ROS 控制Innfos机械臂简单例子

    include lt ros ros h gt include lt image transport image transport h gt include lt sensor msgs image encodings h gt incl
  • 使用CMake和Visual Studio搭建工程并引入OpenCV库

    前言 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 在之前的Windows平台下OpenCV的编译与安装 Mega Li的博客 CSDN博客 nbsp 中介绍了Windows平台中使用CMake编译Open
  • UART通信中流控RTS和CTS的理解

    一 流控 xff0c 顾名思义就是流量控制的意思 目的是协调收发双方 xff0c 使数据不会丢失 如果UART只有RX TX两个信号 xff0c 要流控的话只能是软流控 xff1b 如果有RX xff0c TX xff0c CTS xff0
  • JVM虚拟机栈

    虚拟机栈 每个线程在创建时都会创建一个虚拟机栈 xff0c 其内部保存一个个栈帧 xff0c 对应一次次java方法的调用 xff08 线程私有 xff09 生命周期与线程一致 作用 xff1a 主管java线程的运行 xff0c 保存局部
  • C++之串口通讯

    C 43 43 串口操作 简介代码头文件源码文件 示例创建两个虚拟串口用串口调试助手连接COM2来接数据编写测试代码发送数据结果 总结 简介 串行接口简称串口 xff0c 也称串行通信接口或串行通讯接口 xff08 通常指COM接口 xff
  • 用keil写程序时出现“C(162): error C249: 'DATA': SEGMENT TOO LARGE“的错误

    如果定义的数组不用更改就用 uchar code XX 10 61 根据数据的用处 xff0c 可以有以下几种选择 xff1a data xff1a 直接寻址 的片内RAM区低128B xff08 00H 7FH xff09 bdata x
  • ROS 与 Box Turtle、C Turtle、Indigo Igloo 、Jade Turtle 、Kinetic Kame 、Melodic Morenia、Noetic Ninjemys关系

    如果没有错的话相当于这个些都是ros的版本 xff0c 就是不同时期叫的名字不一样 xff0c 用于区别不同的版本 因为也是初学者 xff0c 都还没入门 xff0c 也是网上找的资料 xff0c 并根据自己的理解写的 xff0c 如果有错
  • C语言——VS编译器下程序运行结果闪退解决方法

    C语言 VS编译器下程序运行结果闪退解决方法 学习C语言的过程中可能会遇到这样的问题 xff0c 程序调试的时候没有错误 xff0c 可是在运行结果的时候会发现程序结果闪退 xff0c 导致看不到结果 在此 xff0c 本文总结对比了几种有
  • Gazebo 加载xacro文件和URDF文件的方式

    版权声明 xff1a lt 本博客所有内容均为自己在学习工作中的总结 摘录等 转载请注明出处 如有侵权请联系删除 gt https blog csdn net xuehuafeiwu123 article details 71108959