我们的小车底盘也需要添加一些功能性的附件,比如车轮、摄像机、激光雷达等,这时候我们就需要joint搭建力学框架和动力学结构。
接下来我们先编写.urdf文件
<robot name="my_third_car">
<!-- The code for the main body -->
<link name="base_link">
<visual>
<geometry>
<cylinder radius="0.5" length="0.3" />
</geometry>
<origin xyz="0 0 0.15" rpy="0 0 0" />
<material name="blue">
<color rgba="0 0 1 0.6" />
</material>
</visual>
</link>
<!-- The code for the camera -->
<link name="camera">
<visual>
<geometry>
<box size="0.02 0.05 0.05" />
</geometry>
<origin xyz="0 0 0.025" rpy="0 0 0" />
<material name="black">
<color rgba="1 1 1 1" />
</material>
</visual>
</link>
<!-- The code for the joint -->
<joint name="camera2base" type="continuous">
<parent link="base_link" />
<child link="camera" />
<origin xyz="0.4 0 0.305" rpy="0 0 0" />
<axis xyz="0 0 1" />
</joint>
</robot>
接下来,对joint的属性和各级子标签进行解释:
joint有两个属性、四个标签。
属性:
第一个属性name用于命名,这个最好取XX2YY,代表从XX to YY 坐标系的转换;
第二个属性type是决定两个坐标系之间的连接方式有以下几种:
continuous:旋转关节,可绕单轴无限旋转;
revolute:旋转关节,有旋转角度限制;
prismatic:滑动关节,沿某一轴线移动,有位置限制;
planer:平面关节,允许在平面正交方向上平移或旋转;
floating:浮动关节,允许进行平移、旋转运动;
fixed:固定关节,不允许运动。
子标签:
第一个子标签是parent,即“父系连杆”,parent link是一个强制属性。
link:是父系连杆的名字,是这个link在机器人结构树中的名字。
第二个子标签是child,即“子系连杆”,child link是一个强制属性。
link:是子系连杆的名字,是这个link在机器人结构树中的名字。
第三个子标签是origin,有子属性xyz记录子系连杆连接在父系连杆的哪个位置;
rpy是子系连杆在各轴线上的偏移弧度。
第四个子标签是axis,是子系连杆绕哪个关节轴运动。
然后我们再编写.launch文件
<launch>
<param name="robot_description" textfile="$(find urdf01_rviz)/urdf/urdf/demo03_joint.urdf" />
<!-- <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" /> -->
<node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" />
<node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" name="joint_state_publisher_gui" />
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf01_rviz)/config/show_my_car.rviz" />
</launch>
PS:launch内第二行和第四行两个是来自同一个包,可之选择一个,第四行的是可以修改子系连杆的运动状态的。
joint_state_publisher负责发布连杆的状态,_gui是发布特殊窗口便于手动调节子系连杆的运动的。
robot_state_publisher是负责发布机器人状态节点的。
-------------------------------------------------------------------------------------
我们也可以利用base_footprint 对机器人坐标设置进行优化
先编写.urdf文件如下
<robot name="my_third_car">
<!-- The code for the main body -->
<link name="base_link">
<visual>
<geometry>
<cylinder radius="0.5" length="0.3" />
</geometry>
<origin xyz="0 0 0.0" rpy="0 0 0" />
<material name="blue">
<color rgba="0 0 1 0.6" />
</material>
</visual>
</link>
<!-- The code for base_footprint -->
<link name="base_footprint">
<visual>
<geometry>
<cylinder radius="0.001" length="0.001" />
</geometry>
</visual>
</link>
<!-- use "joint" code to connect base_link and base_footprint -->
<!-- The code for the camera -->
<link name="camera">
<visual>
<geometry>
<box size="0.02 0.05 0.05" />
</geometry>
<origin xyz="0 0 0.025" rpy="0 0 0" />
<material name="black">
<color rgba="1 1 1 1" />
</material>
</visual>
</link>
<!-- The code for the joint -->
<joint name="camera2base" type="continuous">
<parent link="base_link" />
<child link="camera" />
<origin xyz="0.4 0 0.155" rpy="0 0 0" />
<axis xyz="0 0 1" />
</joint>
<!-- The code for the joint of base_footprint -->
<joint name="link2footprint" type="fixed">
<parent link="base_footprint" />
<child link="base_link" />
<origin xyz="0 0 0.15" rpy="0 0 0" />
</joint>
</robot>
base_footprint实际上就是用一个大小忽略不计的点作为坐标起点,使小车的底盘不是嵌入地面,而是放在地面上,这个base_footprint的特点是他origin的xyz参数中z值为底盘高度的一半。
然后.launch文件我们复制之前写的,另外粘贴一下,修改以下文件名就可以正常roslaunch了。
文章介绍了如何使用ROS的通用机器人描述格式(URDF)来构建机器人的模型,包括创建链接(link)如车轮和相机,以及设置关节(joint)如连续旋转关节。还提到了.launch文件的编写,用于启动和发布机器人状态。此外,通过添加base_footprint链接来优化机器人的坐标设置,确保底盘正确放置在地面上。
1142

被折叠的 条评论
为什么被折叠?



