利用URDF或者Xacro文件,以XML的方式描述小车底盘、camera、laser、Kinect等基本机器人结构,通过Gazebo或Rviz将文件解析为图形化的机器人模型。
其中很多代码可以从网络上找到。主要注意参数和坐标系的设置。例如在Kinect的Xacro文件中,需要修改gazebo reference和frameName这两个参数,而frameName由于在Rviz中点云图出现错位的现象,需要在launch文件中加入<node pkg="tf2_ros" type="static_transform_publisher" name="static_transform_publisher" args="0 0 0 -1.57 0 -1.57 /原来的父关节 /自己定义的名字" />这一行代码,所以frameName应该是自己定义的名字。
下面说说我在此过程中遇到的问题:
1. 轮子有离地间隙,导致用键盘控制时轮子在转,可是却没有往前走,可能是关节之间的偏移量计算有误,或者偏移量正好,需要再减去0.01确保小车和地面接触。
2. 模型倾倒,由于设置的质量不合理,小车的底盘质量要大,越往上质量越小。
3. 编写.xacro文件时,编写xacro宏的时候,没有引用参数params,少写斜杠等等小问题,都会报错。
4. Kinect错位(如上)。
5. 用键盘驱动小车时,确保鼠标在运行rosrun的终端内。
sudo apt-get install ros-melodic-teleop-twist-keyboard(安装)
rosrun teleop_twist_keyboard teleop_twist_keyboard.py(运行)
6. 现在网上大部分驱动的xacro文件都是两轮差速驱动,四轮驱动没有很多讲解,我就选择了skid_steer_drive_controller四轮驱动,结果在路径规划的时候小车总是会自己转圈,改成mecanum_controller麦克纳姆轮驱动之后,问题解决。
7. 定位amcl的launch文件中transform_tolerance设置过小,导致Rviz一直报错,改成1左右就可以。
8. gmapping建图时,由于各种原因,建的图总是与现实有差距,安装GIMP(Ubuntu软件中心)进行修图(和PS差不多),快捷键:画笔N,吸管O。
9. 顺序:建立小车模型-->网上找到move、laser、camera、kinect的.xacro文件-->将上述集成在一个文件中-->编写launch文件,启动Gazebo和Rviz-->建立gmapping的launch文件,用键盘控制小车移动,建图并微调-->保存地图,建立map_server的launch文件-->建立amcl和move_base的launch文件,启动Gazebo和Rviz,进行导航。