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

来源:互联网 发布:脱脂牛奶 知乎 编辑:程序博客网 时间:2024/04/30 08:55

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>


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