利用joint标签为底盘添加可简单活动的附件

文章介绍了如何使用ROS的通用机器人描述格式(URDF)来构建机器人的模型,包括创建链接(link)如车轮和相机,以及设置关节(joint)如连续旋转关节。还提到了.launch文件的编写,用于启动和发布机器人状态。此外,通过添加base_footprint链接来优化机器人的坐标设置,确保底盘正确放置在地面上。

我们的小车底盘也需要添加一些功能性的附件,比如车轮、摄像机、激光雷达等,这时候我们就需要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了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值