大家好,我是梦笔生花,我们一起来动手创建一个两轮差速的移动机器人fishbot
。
机器人除了雷达之外,还需要IMU
加速度传感器以及可以驱动的轮子,我们曾介绍过机器人学部分,曾对两差速模型进行过介绍,所以我们还需要再创建两个差速驱动轮和一个支撑轮。
所以接下来梦笔生花将带你一起给机器人添加如下部件和关节:
- IMU传感器部件与关节
- 左轮子部件与关节
- 右轮子部件与关节
- 支撑轮子部件与关节
1.添加IMU传感器
1.1 修改颜色
透明度修改只需要在base_link
中添加material
1.2 添加imu
2.添加右轮
2.1 添加关节
关节名称为right_wheel_link
,我在做ros2小车的时候采用的轮子如下图:
轮子的宽为4cm,直径为6.4cm,几何形状是个圆柱体,所以geometry
配置如下:
需要注意的是,圆柱默认的朝向是向上的
我们可通过origin
的rpy
改变轮子的旋转角度,让其绕x轴
旋转pi/2
,所以origin
的配置为
颜色换黑色,可以得到下面的配置:
2.2 添加joint
我们把左轮子的中心固定在机器人左后方
需要注意的是origin
和axis
值的设置
先看origin
因为base_link的高度是0.12,我们
- z表示child相对parent的z轴上的关系,想将轮子固定在机器人的下表面,所以
origin
的z向下偏移0.12/2=0.06m(向下符号为负) - y表示child相对parent的y轴上的关系,base_link的半径是0.10,所以我们让轮子的y轴向负方向偏移0.10m(向左符号为负)
- x表示child相对parent的x轴上的关系,向后偏移则是x轴向后进行偏移,我们用个差不多的值0.02m(向后符号为负)
再看axis
轮子是会转动的,那应该按照哪个轴转动呢?从上图可以看出是绕着y轴的逆时针方向,所以axis的设置为:
3.添加左轮
左轮就是右轮的映射,不再赘述
4.添加支撑轮
支撑轮子固定在机器人的前方,用个球体,半径用0.016m
,小球的直径为0.032m与左右轮子半径相同,然后向下偏移0.016+0.06=0.076m
,向下值为负,同时把支撑论向前移动一些,选个0.06m
最终结果如下:
5.测试运行
5.1 编译测试
5.2 最终结果
rviz的配置
最终结果
jointstate多出两个滑动条
节点关系
5.3 通过joint_state_gui改变关节tf中关节角度
在JointStatePublisher中,拖动滑动条,观察
rviz2
中tf
的变换joint_states
中的值的变换
可以看到随着进度条拖动,话题中的值和rviz2中机器人关节在同步的旋转,joint_states话题也可以手动发送。
5.4 论如何让车轮着地
虽然显示出了机器人模型,但有一个问题不知道你发现没有,那就是在RVIZ中的机器人轮子是在地面之下的。
原因在于我们fixed-frame选择的是base_link,base_link的位置本来就在left_wheel_link和right_wheel_link只上,那该怎么办呢?
其实很简单,我们增加一个虚拟link和关节,这个关节与base_link相连,位置位于base_link向下刚好到车轮下表面的位置。
来,让我们**给base_link添加一个父link-base_footprint
**,新增的URDF代码如下:
因为是虚拟关节,我们不用对这个link的形状进行描述,joint的origin设置为xyz="0.0 0.0 0.076"
表示关节base_footprint向上0.076就是base_link(觉得不好理解可以看下图)。
保存编译再次运行测试,此时车轮就在地面只上啦~