ROS:机器人描述(URDF、XACRO)

ROS:机器人描述(URDFXACRO

Urdf语法详解

Urdf教程:https://wiki.ros.org/urdf/Tutorials/Create%20your%20own%20urdf%20file

 

1.创建一个树型结构

Urdf中采用linkjoint构成树状的结构来描述机器人。

 

首先需要定义一个base_link,在坐标系的原点。

2.添加位置

Urdf中通过orgin标签来定义link所在的位置。

<?xml version="<?xml version="1.0"?>
<robot name="test_robot">
  <link name="base_link" />
  <link name="link2" />
  <link name="link3" />
  <link name="link4" />

 <joint name="joint1" type="continuous">
    <parent link="base_link"/>
    <child link="link2"/>
    <origin xyz="0.3 0 0" rpy="1 0 0" />
  </joint>

 <joint name="joint2" type="continuous">
    <parent link="base_link"/>
    <child link="link3"/>
    <origin xyz="0 0.3 0" rpy="0 1 0" />
  </joint>

 <joint name="joint3" type="continuous">
    <parent link="base_link"/>
    <child link="link4"/>
    <origin xyz="0 0 0.3" rpy="0 0 1" />
  </joint>
</robot>


origin:xyzparent link为原点,child link的三维坐标系位置。

origin:rpy child linkz轴旋转的滚动角(roll),绕y轴方向旋转的俯仰(pitch)角,和绕x轴旋转的偏转(yaw).

图中以base_link为基准,红色为x轴,绿色为y轴,蓝色为z轴。

 

 

3.添加link外观

Deometry定义link形状

Material 定义link材料

Origin 定义link相对于自己原来的位置的变化

 

<link name="base_link">
    <visual>
        <geometry>
          <box size="0.25 .16 .05"/>
        </geometry>
        <origin rpy="0 0 0" xyz="0 0 0"/>
        <material name="blue">
          <color rgba="0 0 .8 1"/>
        </material>
     </visual>
  </link>

 

4.添加限制

Collision标签(碰撞)

Collision的内容与visiual中内容一样。

Axis joint定义旋转轴,例如(0 0 1)为以z轴旋转,(1 1 1)为以向量1 1 1为轴旋转,不指定以x轴旋转。

Limit 标签,限制joint的旋转范围。

<limit lower="-3.14" upper="3.14" effort="150.0" velocity="3.15"/>, 从标签中可以看到上下限以及速度力矩等都是可以指定的.

 

建立一个smartcar模型

1.新建一个smartcar

catkin_create_pkg smartcar  std_msgs rospy roscpp urdf

2.包文件夹下新建urdf文件夹,且在urdf文件夹下新建smartcar.urdf文件

依据上面的语法创建的内容为

<?xml version="1.0"?>
<robot name="test_robot">
  <link name="base_link">
    <visual>
        <geometry>
          <box size="0.25 .16 .05"/>
        </geometry>
        <origin rpy="0 0 0" xyz="0 0 0"/>
        <material name="blue">
          <color rgba="0 0 .8 1"/>
        </material>
     </visual>
  </link>

   <link name="wheel_1">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="red">
        <color rgba="1 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="joint1" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="wheel_1"/>
    <origin rpy="1.5707 0 0" xyz="0.08 0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>

  <link name="wheel_2">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="black">
        <color rgba="0 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="joint2" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="wheel_2"/>
    <origin rpy="1.57075 0  0" xyz="0.08 -0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>

<link name="wheel_3">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="red">
        <color rgba="1 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="joint_3" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="wheel_3"/>
    <origin rpy="1.57075 0 0" xyz="-0.08 0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>

  <link name="wheel_4">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="black">
        <color rgba="0 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="joint_4" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/> 
    <child link="wheel_4"/>
    <origin rpy="1.57075 0 0" xyz="-0.08 -0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>
</robot>


 

检查urdf文件语法:

check_urdf smartcar.urdf

可视化模型:

roslaunch urdf_tutorial display.launch model:=path/to/your/xxx.urdf gui:=true

 

3.新建launch文件夹,且在launch文件夹下新建smartcar_rviz.launch文件

仿照上面的display.launch文件,编辑smartcar_rviz.launch文件

smartcar_rviz.launch

<launch>
    <arg name="model" />
    <arg name="gui" default="False" />
    <arg name="rvizconfig" default="$(find urdf_tutorial)/rviz/urdf.rviz" />
    <param name="robot_description" command="$(find xacro)/xacro.py $(find smartcar_description)/urdf/smartcar.urdf" />
    <param name="use_gui" value="$(arg gui)"/>
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node>
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
    <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" />
</launch>


出来的效果与上一步中可视化的效果相同。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHAO_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值