ROS进阶:使用URDF和Xacro构建差速轮式呆板人模型

打印 上一主题 下一主题

主题 811|帖子 811|积分 2433

前言

本篇文章先容的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式呆板人模型,并使用URDF的增强版xacro,对呆板人模型文件举行二次优化。
差速轮式呆板人:两轮差速底盘由两个动力轮位于底盘左右两侧,两轮独立控制速率,通过给定差别速率实现底盘转向控制。一般会配有一到两个辅助支持的万向轮。
此次建模,不引入算法,只是把呆板人模型的样子做出来,以是只使用 rivz 举行可视化体现。
呆板人的定义和构成


  • 呆板人定义:呆板人是一种自动化的呆板,所差别的是这种呆板具备一些与人或生物相似的智能本领,如感知本领、规划本领、动作本领和协同本领,是一种具有高级机动性的自动化呆板。目前,自动驾驶汽车也被认为是一种呆板人。
  • 呆板人构成:呆板人通常分为四大部分,即执行机构,驱动系统,传感系统和控制系统。以自动驾驶汽车为例,执行机构就是油门,转向和刹车;驱动系统就是电动机;传感系统就是各种传感器:lidar,radar,camera,uss,imu,GNSS;控制系统就是智驾算法系统:感知,定位,规划和控制。
  • 呆板人四大部分的控制回路,大致如图:


URDF建模套路


  • URDF:Unified Robot Description Format,同一的呆板人描述文件格式。urdf 文件使用 xml 格式。
  • 用 urdf 描述呆板人,套路如下:每个呆板人都是由多个 link(连杆) 和 joint(关节)构成。这里的 link 和joint 很宽泛,形状不一定是杆和轴。比如桌子,桌面和腿都是link,连接处是固定的 joint。
  1. <?xml version="1.0" ?>
  2. <robot name="name of robot">
  3.         <link> ... </link>
  4.         <joint> ... </joint>
  5.         ...
  6. </robot>
复制代码




  • link:描述呆板人某个刚体部分的外观和物理属性。外观包括:尺寸,颜色,形状。物理属性包括:惯性矩阵(inertial matrix)和碰撞参数(collision properties)。在呆板人建模中,每个link 都是一个坐标系。下面是差速轮式呆板人底盘的建模,底盘一般称为 base。
  1.   <link name="base_link">
  2.           // visual 标签就是外观
  3.     <visual>
  4.       // base_link本身是个坐标系,这也是差速轮式机器人各组成部分的根坐标系,一般会把他的坐标原点设置在rviz的中心处
  5.       // origin表示底盘在其base_link坐标系下的原始位置和旋转状态
  6.       // xyz表示底盘质心在base_link坐标系的偏移位置,rpy(roll,pitch,yaw)是底盘绕base_link的x,y,z三个轴的旋转值
  7.       <origin xyz="0 0 0" rpy="0 0 0"/>
  8.       // geometry是物体几何外形
  9.       <geometry>
  10.               // 这里的底盘,用圆柱体表示,length值为高度,radius是半径值
  11.         <cylinder length="0.16" radius="0.2"/>
  12.       </geometry>
  13.       // material是材料,这里指定底盘颜色为红色,rgba是三色+透明度表示法,三色的范围是0~1,而不是0-255
  14.       <material name="red">
  15.         <color rgba="1 0 0 1"/>
  16.       </material>
  17.     </visual>
  18.   </link>
复制代码
这里我们只举行外观建模,因此暂不涉及物理属性配置。

  • joint:描述两个 link 之间的关系,包括运动学和动力学属性,这里暂时只关注运动学属性。通常情况下,两个 link 的关系一般分为六种:
   continuous:旋转关节,可以围绕单轴360度无穷旋转,比如轮子的轴
  revolute:旋转关节,但是有旋转角度的范围限定,比如钟摆
  prismatic:滑动关节,也叫活塞关节,沿某一轴线移动的关节,有位置限定,夸大一维,比如打气筒
  planar:平面关节,允许在平面正交方向上平移或旋转,夸大平面,比如抽屉表里滑动
  floating:浮动关节,允许举行平移和旋转运动,比如人体的肩关节
  fixed:固定关节,比如桌子腿和桌面
  下面是差速轮式呆板人自动轮与底盘的 joint 样例:
  1.   // joint标签就是关节,type表示链接关系
  2.   <joint name="left_wheel_joint" type="continuous">
  3.     // origin表示轮子在base_link坐标系下的偏移和旋转
  4.     <origin xyz="0 0.19 -0.05" rpy="0 0 0" />
  5.     // 根link是底盘,子link是轮子
  6.     <parent link="base_link" />
  7.     <child link="left_wheel_link" />
  8.     // axis描述的轮子相对于其自身坐标系的 y 轴旋转,=
  9.     <axis xyz="0 1 0" />
  10.   </joint>
  11.   
  12.   // 这是轮子link
  13.   <link name="left_wheel_link">
  14.     <visual>
  15.       // 轮子相当于其x轴,旋转90度,也就是立起来
  16.       <origin xyz="0 0 0" rpy="1.5707 0 0"/>
  17.       <geometry>
  18.         <cylinder length="0.06" radius="0.06"/>
  19.       </geometry>
  20.       <material name="white">
  21.         <color rgba="1 1 1 0.9"/>
  22.       </material>
  23.     </visual>
  24.   </link>
复制代码
使用URDF做一个差速轮式呆板人模型


  • 创建 mbot_description 软件包及相关文件
  1. cd ~/catkin_ws/src
  2. catkin_create_pkg mbot_description urdf xacro
  3. cd mbot_description
  4. mkdir -p config doc launch meshes urdf/sensor
  5. touch launch/display_mbot_urdf.launch launch/display_mbot_xacro.launch
  6. touch urdf/mbot_base.urdf urdf/mbot_base.xacro
  7. touch urdf/sensor/camera.xacro urdf/sensor/kinect.xacro urdf/sensor/laser.xacro
复制代码

  • mbot_base.urdf :这是整个mbot建模的文件,包括底盘,两个动力伦,两个万向轮,一个camera,一个kinect(深度相机),一个lidar。
  1. <?xml version="1.0" ?>
  2. <robot name="mbot">
  3.   <link name="base_link">
  4.     <visual>
  5.       <origin xyz="0 0 0" rpy="0 0 0"/>
  6.       <geometry>
  7.         <cylinder length="0.16" radius="0.2"/>
  8.       </geometry>
  9.       <material name="red">
  10.         <color rgba="1 0 0 1"/>
  11.       </material>
  12.     </visual>
  13.   </link>
  14.   <joint name="left_wheel_joint" type="continuous">
  15.     <origin xyz="0 0.19 -0.05" rpy="0 0 0" />
  16.     <parent link="base_link" />
  17.     <child link="left_wheel_link" />
  18.     <axis xyz="0 1 0" />
  19.   </joint>
  20.   <link name="left_wheel_link">
  21.     <visual>
  22.       <origin xyz="0 0 0" rpy="1.5707 0 0"/>
  23.       <geometry>
  24.         <cylinder length="0.06" radius="0.06"/>
  25.       </geometry>
  26.       <material name="white">
  27.         <color rgba="1 1 1 0.9"/>
  28.       </material>
  29.     </visual>
  30.   </link>
  31.   <joint name="right_wheel_joint" type="continuous">
  32.     <origin xyz="0 -0.19 -0.05" rpy="0 0 0" />
  33.     <parent link="base_link" />
  34.     <child link="right_wheel_link" />
  35.     <axis xyz="0 1 0" />
  36.   </joint>
  37.   <link name="right_wheel_link">
  38.     <visual>
  39.       <origin xyz="0 0 0" rpy="1.5707 0 0"/>
  40.       <geometry>
  41.         <cylinder length="0.025" radius="0.06" />
  42.       </geometry>
  43.       <material name="white">
  44.         <color rgba="1 1 1 0.9"/>
  45.       </material>
  46.     </visual>
  47.   </link>
  48.   <joint name="front_caster_joint" type="continuous">
  49.     <origin xyz="0.18 0 -0.095" rpy="0 0 0" />
  50.     <parent link="base_link"/>
  51.     <child link="front_caster_link" />
  52.     <axis xyz="0 1 0" />
  53.   </joint>
  54.   <link name="front_caster_link">
  55.     <visual>
  56.       <origin xyz="0 0 0" rpy="0 0 0" />
  57.       <geometry>
  58.         <sphere radius="0.015" />
  59.       </geometry>
  60.       <material name="white">
  61.         <color rgba="1 1 1 0.9"/>
  62.       </material>
  63.     </visual>
  64.   </link>
  65.   <joint name="back_caster_joint" type="continuous">
  66.     <origin xyz="-0.18 0 -0.095" rpy="0 0 0" />
  67.     <parent link="base_link"/>
  68.     <child link="back_caster_link" />
  69.     <axis xyz="0 1 0" />
  70.   </joint>
  71.   <link name="back_caster_link">
  72.     <visual>
  73.       <origin xyz="0 0 0" rpy="0 0 0" />
  74.       <geometry>
  75.         <sphere radius="0.015" />
  76.       </geometry>
  77.       <material name="white">
  78.         <color rgba="1 1 1 0.9"/>
  79.       </material>
  80.     </visual>
  81.   </link>
  82.   <joint name="camera_joint" type="fixed">
  83.     <origin xyz="-0.17 0 0.1" rpy="0 0 0" />
  84.     <parent link="base_link"/>
  85.     <child link="camera_link" />   
  86.   </joint>
  87.   <link name="camera_link">
  88.     <visual>
  89.       <origin xyz="0 0 0" rpy="0 0 0" />
  90.       <geometry>
  91.         <box size="0.03 0.04 0.04" />
  92.       </geometry>
  93.       <material name="grey">
  94.         <color rgba="0.5 0.5 0.5 1"/>
  95.       </material>
  96.     </visual>
  97.   </link>
  98.   <joint name="stage_joint" type="fixed">
  99.     <origin xyz="0 0 0.14" rpy="0 0 0" />
  100.     <parent link="base_link"/>
  101.     <child link="stage_link" />   
  102.   </joint>
  103.   <link name="stage_link">
  104.     <visual>
  105.       <origin xyz="0 0 0" rpy="0 0 0"/>
  106.       <geometry>
  107.         <cylinder length="0.12" radius="0.1"/>
  108.       </geometry>
  109.       <material name="red">
  110.         <color rgba="1 0 0 1"/>
  111.       </material>
  112.     </visual>
  113.   </link>
  114.   <joint name="laser_joint" type="fixed">
  115.     <origin xyz="0 0 0.085" rpy="0 0 0" />
  116.     <parent link="stage_link"/>
  117.     <child link="laser_link" />   
  118.   </joint>
  119.   <link name="laser_link">
  120.     <visual>
  121.       <origin xyz="0 0 0" rpy="0 0 0" />
  122.       <geometry>
  123.         <cylinder length="0.05" radius="0.05"/>
  124.       </geometry>
  125.       <material name="grey">
  126.         <color rgba="0.5 0.5 0.5 1"/>
  127.       </material>
  128.     </visual>
  129.   </link>
  130.   <joint name="kinect_joint" type="fixed">
  131.     <origin xyz="0.15 0 0.11" rpy="0 0 0" />
  132.     <parent link="base_link"/>
  133.     <child link="kinect_link" />   
  134.   </joint>
  135.   <link name="kinect_link">
  136.     <visual>
  137.       <origin xyz="0 0 0" rpy="0 0 1.5708" />
  138.       <geometry>
  139.         // 使用三维软件导出的模型文件
  140.         <mesh filename="package://mbot_description/meshes/kinect.dae" />
  141.       </geometry>
  142.     </visual>
  143.   </link>
  144. </robot>
复制代码

  • display_mbot_urdf.launch
  1. <launch>
  2.   // 设置ros的全局参数robot_description,指定机器人模型文件
  3.   <param name="robot_description" textfile="$(find mbot_description)/urdf/mbot_base.urdf" />
  4.         <!-- 设置GUI参数,显示关节控制插件 -->
  5.         // 用这个可以控制机器人关节,但本文的demo没看到这个,有点遗憾
  6.         <param name="use_gui" value="true"/>
  7.         <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
  8.         <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
  9.         <!-- 运行robot_state_publisher节点,发布tf  -->
  10.         <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
  11.         // robot_state_publisher结合joint_state_publisher可以实时把机器人各关节和各坐标系关系发布出来,让rviz显示。如果不设置,rviz无法完整加载机器人模型。
  12.         // rviz显示后会生成配置文件,保存后再打开,就不用频繁设置了。
  13.         <!-- 运行rviz可视化界面 -->
  14.         <node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
  15. </launch>
复制代码

  • 使用 urdf_to_graphiz 命令行工具可以把 urdf 文件的内容,以树的样子dump出来,格式是pdf。使用这个可以快速读取 urdf 的 link 和 joint,下图是上面例子的节点树状图。
  1. cd ~/catkin_ws/
  2. urdf_to_graphiz src/mbot_description/urdf/mbot_base.urdf
复制代码




  • 编译和运行
  1. cd ~/catkin_ws/
  2. catkin_make --source src/mbot_description
  3. source devel/setup.bash
  4. roslaunch mbot_description display_mbot_urdf.launch
复制代码






使用xacro优化差速轮式呆板人模型


  • 原始的urdf语法比较简单,导致呆板人模型文件比较冗长啰嗦,比如两个动力轮,两个万向轮的编写就非常重复。ROS 提出了xacro语法,让呆板人模型文件具有可编程本领,比如设置参数,定义宏函数并调用,文件包罗等。下面举行分类举例:设置并调用参数:
  1.    // xacro:property设置参数
  2.   <xacro:property name="M_PI" value="3.1415926" />
  3.   // 引用参数用${}
  4.   <origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
复制代码
设置宏函数并调用:
  1.   // xacro:macro设置宏函数,名字是wheel,参数是prefix 和 reflect
  2.   <xacro:macro name="wheel" params="prefix reflect">
  3.     <joint name="${prefix}_wheel_joint" type="continuous">
  4.       <origin xyz="${wheel_joint_x} ${reflect*wheel_joint_y} ${-wheel_joint_z}" rpy="0 0 0" />
  5.       <parent link="base_link" />
  6.       <child link="${prefix}_wheel_link" />
  7.       <axis xyz="0 1 0" />
  8.     </joint>
  9.     <link name="${prefix}_wheel_link">
  10.       <visual>
  11.         <origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
  12.         <geometry>
  13.           <cylinder length="${wheel_length}" radius="${wheel_radius}"/>
  14.         </geometry>
  15.         <material name="white" />
  16.       </visual>
  17.     </link>
  18.   </xacro:macro>
  19.   // 调用wheel宏函数
  20.   <xacro:wheel prefix="left"  reflect="1"/>  
  21.   <xacro:wheel prefix="right"  reflect="-1"/>  
复制代码
文件包罗
  1.   // xacro:include是文件包含,camera.xacro里面定义了一个宏函数
  2.   <xacro:include filename="$(find mbot_description)/urdf/sensor/camera.xacro" />
  3.   // 调用camera.xacro里面的宏函数
  4.   <xacro:usb_camera joint_x="${camera_joint_x}" joint_y="${camera_joint_y}" joint_z="${camera_joint_z}"/>  
复制代码

  • 这里的几个文件是对上面的mbot_base.urdf的重写,使用xacro,具体语法看上面的解释。mbot_base.xacro
  1. <?xml version="1.0" ?>
  2. <robot name="mbot" xmlns:xacro="http://www.ros.org/wiki/xacro">
  3.   <xacro:property name="M_PI" value="3.1415926" />
  4.   <xacro:property name="wheel_joint_x" value="0" />
  5.   <xacro:property name="wheel_joint_y" value="0.19" />
  6.   <xacro:property name="wheel_joint_z" value="0.05" />
  7.   <xacro:property name="wheel_length" value="0.06" />
  8.   <xacro:property name="wheel_radius" value="0.06" />
  9.   <xacro:property name="caster_joint_x" value="0.18" />
  10.   <xacro:property name="caster_joint_y" value="0" />
  11.   <xacro:property name="caster_joint_z" value="0.095" />  
  12.   <xacro:property name="caster_radius" value="0.015" />
  13.   <xacro:property name="base_length" value="0.16" />
  14.   <xacro:property name="base_radius" value="0.2" />
  15.   <xacro:property name="stage_length" value="0.12" />
  16.   <xacro:property name="stage_radius" value="0.1" />
  17.   <xacro:property name="camera_joint_x" value="0.17" />
  18.   <xacro:property name="camera_joint_y" value="0" />
  19.   <xacro:property name="camera_joint_z" value="0.1" />  
  20.   <xacro:property name="kinect_joint_x" value="0.15" />
  21.   <xacro:property name="kinect_joint_y" value="0" />
  22.   <xacro:property name="kinect_joint_z" value="0.11" />  
  23.   <xacro:property name="laser_joint_x" value="0" />
  24.   <xacro:property name="laser_joint_y" value="0" />
  25.   <xacro:property name="laser_joint_z" value="0.085" />  
  26.   <material name="white">
  27.     <color rgba="1 1 1 0.9"/>
  28.   </material>
  29.   <material name="red">
  30.     <color rgba="1 0 0 1"/>
  31.   </material>
  32.   <material name="grey">
  33.     <color rgba="0.5 0.5 0.5 1"/>
  34.   </material>
  35.   <xacro:macro name="base_stage">
  36.     <link name="base_link">
  37.       <visual>
  38.         <origin xyz="0 0 0" rpy="0 0 0"/>
  39.         <geometry>
  40.           <cylinder length="${base_length}" radius="${base_radius}"/>
  41.         </geometry>
  42.         <material name="red" />
  43.       </visual>
  44.     </link>
  45.     <joint name="stage_joint" type="fixed">
  46.       <origin xyz="0 0 ${(base_length + stage_length)/2}" rpy="0 0 0" />
  47.       <parent link="base_link"/>
  48.       <child link="stage_link" />   
  49.     </joint>
  50.     <link name="stage_link">
  51.       <visual>
  52.         <origin xyz="0 0 0" rpy="0 0 0"/>
  53.         <geometry>
  54.           <cylinder length="${stage_length}" radius="${stage_radius}"/>
  55.         </geometry>
  56.         <material name="red" />
  57.       </visual>
  58.     </link>
  59.   </xacro:macro>
  60.   <xacro:macro name="wheel" params="prefix reflect">
  61.     <joint name="${prefix}_wheel_joint" type="continuous">
  62.       <origin xyz="${wheel_joint_x} ${reflect*wheel_joint_y} ${-wheel_joint_z}" rpy="0 0 0" />
  63.       <parent link="base_link" />
  64.       <child link="${prefix}_wheel_link" />
  65.       <axis xyz="0 1 0" />
  66.     </joint>
  67.     <link name="${prefix}_wheel_link">
  68.       <visual>
  69.         <origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
  70.         <geometry>
  71.           <cylinder length="${wheel_length}" radius="${wheel_radius}"/>
  72.         </geometry>
  73.         <material name="white" />
  74.       </visual>
  75.     </link>
  76.   </xacro:macro>
  77.   <xacro:macro name="caster" params="prefix reflect">
  78.     <joint name="${prefix}_caster_joint" type="continuous">
  79.       <origin xyz="${reflect*caster_joint_x} ${caster_joint_y} ${-caster_joint_z}" rpy="0 0 0" />
  80.       <parent link="base_link"/>
  81.       <child link="${prefix}_caster_link" />
  82.       <axis xyz="0 1 0" />
  83.     </joint>
  84.     <link name="${prefix}_caster_link">
  85.       <visual>
  86.         <origin xyz="0 0 0" rpy="0 0 0" />
  87.         <geometry>
  88.           <sphere radius="${caster_radius}" />
  89.         </geometry>
  90.         <material name="white" />
  91.       </visual>
  92.     </link>
  93.   </xacro:macro>
  94.   <xacro:base_stage />  
  95.   <xacro:wheel prefix="left"  reflect="1"/>  
  96.   <xacro:wheel prefix="right"  reflect="-1"/>  
  97.   <xacro:caster prefix="front"  reflect="1"/>  
  98.   <xacro:caster prefix="back"  reflect="-1"/>  
  99.   <xacro:include filename="$(find mbot_description)/urdf/sensor/camera.xacro" />
  100.   <xacro:usb_camera joint_x="${camera_joint_x}" joint_y="${camera_joint_y}" joint_z="${camera_joint_z}"/>  
  101.   <xacro:include filename="$(find mbot_description)/urdf/sensor/kinect.xacro" />
  102.   <xacro:kinect joint_x="${kinect_joint_x}" joint_y="${kinect_joint_y}" joint_z="${kinect_joint_z}"/>  
  103.   <xacro:include filename="$(find mbot_description)/urdf/sensor/laser.xacro" />
  104.   <xacro:laser joint_x="${laser_joint_x}" joint_y="${laser_joint_y}" joint_z="${laser_joint_z}"/>  
  105. </robot>
复制代码
camera.xacro
  1. <?xml version="1.0" ?>
  2. <robot name="mbot" xmlns:xacro="http://www.ros.org/wiki/xacro">
  3.   <xacro:macro name="usb_camera" params="joint_x joint_y joint_z">
  4.     <joint name="camera_joint" type="fixed">
  5.       <origin xyz="${-joint_x} ${joint_y} ${joint_z}" rpy="0 0 0" />
  6.       <parent link="base_link"/>
  7.       <child link="camera_link" />   
  8.     </joint>
  9.     <link name="camera_link">
  10.       <visual>
  11.         <origin xyz="0 0 0" rpy="0 0 0" />
  12.         <geometry>
  13.           <box size="0.03 0.04 0.04" />
  14.         </geometry>
  15.         <material name="grey" />
  16.       </visual>
  17.     </link>
  18.   </xacro:macro>
  19. </robot>
复制代码
kinect.xacro
  1. <?xml version="1.0" ?>
  2. <robot name="mbot" xmlns:xacro="http://www.ros.org/wiki/xacro">
  3.   <xacro:macro name="kinect" params="joint_x joint_y joint_z">
  4.     <joint name="kinect_joint" type="fixed">
  5.       <origin xyz="${joint_x} ${joint_y} ${joint_z}" rpy="0 0 0" />
  6.       <parent link="base_link"/>
  7.       <child link="kinect_link" />   
  8.     </joint>
  9.     <link name="kinect_link">
  10.       <visual>
  11.         <origin xyz="0 0 0" rpy="0 0 1.5708" />
  12.         <geometry>
  13.           <mesh filename="package://mbot_description/meshes/kinect.dae" />
  14.         </geometry>
  15.       </visual>
  16.     </link>
  17.   </xacro:macro>
  18. </robot>
复制代码
laser.xacro
  1. <?xml version="1.0" ?>
  2. <robot name="mbot" xmlns:xacro="http://www.ros.org/wiki/xacro">
  3.   <xacro:macro name="laser" params="joint_x joint_y joint_z">
  4.     <joint name="laser_joint" type="fixed">
  5.       <origin xyz="${joint_x} ${joint_y} ${joint_z}" rpy="0 0 0" />
  6.       <parent link="stage_link"/>
  7.       <child link="laser_link" />   
  8.     </joint>
  9.     <link name="laser_link">
  10.       <visual>
  11.         <origin xyz="0 0 0" rpy="0 0 0" />
  12.         <geometry>
  13.           <cylinder length="0.05" radius="0.05"/>
  14.         </geometry>
  15.         <material name="grey"/>
  16.       </visual>
  17.     </link>
  18.   </xacro:macro>
  19. </robot>
复制代码

  • display_mbot_xacro.launch
  1. <launch>
  2.         // 引入xacro的解释器,不然无法读取 .xacro文件
  3.         <arg name="model" default="$(find xacro)/xacro '$(find mbot_description)/urdf/mbot_base.xacro'" />
  4.         <param name="robot_description" command="$(arg model)" />
  5.         <!-- 设置GUI参数,显示关节控制插件 -->
  6.         <param name="use_gui" value="true"/>
  7.         <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
  8.         <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
  9.         <!-- 运行robot_state_publisher节点,发布tf  -->
  10.         <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
  11.         <!-- 运行rviz可视化界面 -->
  12.         <node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_xacro.rviz" required="true" />
  13. </launch>
复制代码

  • 运行结果如下,这里体现了坐标系轴





部分配置代码




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表