前言

上一节教程地址:室外光电仿真教程一 参考教程地址:https://www.guyuehome.com/6463 参考项目地址:点个star呗,都是免费教程

关于运动控制器

官方车模关节名字不同,你其实只需要把我的racecar包里面的racecar_control文件夹拷到你新建的工程下即可,然后修改一下画框内容适配官方车模:

gedit ~/smartcar_ws/src/racecar_control/config/racecar_control.yaml
gedit ~/smartcar_ws/src/racecar_control/config/racecar_control.yaml
gedit ~/smartcar_ws/src/racecar_gazebo/scripts/gazebo_odometry.py
gedit ~/smartcar_ws/src/racecar_gazebo/scripts/gazebo_odometry.py

关于建图

建图的画我尝试了gmapping好像会有点地图建立重叠的问题,推荐两种解决方法可以自己尝试:


  • 1建图的时候修改提高官方车模激光雷达,陀螺仪的发布频率,建图完再改回来,这样也没啥违规的吧.
  • 2尝试使用hector包建图,我试了效果好点.

效果:

关于move_base配置

这个应该没啥难度直接抄我那个项目里的代码就行了,根据racecar_runway_navigation.launch文件里面用到的配置文件去修改对应的yaml文件:

   <rosparam file="$(find racecar_gazebo)/config/costmap_common_params.yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find racecar_gazebo)/config/costmap_common_params.yaml" command="load" ns="local_costmap" />
    <rosparam file="$(find racecar_gazebo)/config/local_costmap_params.yaml" command="load" />
    <rosparam file="$(find racecar_gazebo)/config/global_costmap_params.yaml" command="load" />
    <rosparam file="$(find racecar_gazebo)/config/teb_local_planner_params.yaml" command="load" />

改下这几个文件里的base_link应该就行了.

关于导航

之前公开的代码里面用的是纯路径追踪算法,算法只是追踪全局路径规划的轨迹,所以是没有壁障功能的,要实现壁障也很简单,提供两种思路:


  • 1teb局部路径规划器是配置好的,它发布的速度和方向的话题是默认的/cmd_vel话题,所以你要做的不就是将这个话题转换成阿克曼消息么?
  • 2修改path_pursuit.py脚本,加一个成员变量订阅局部路径规划的消息,优化纯路径追踪算法.

关于定位

定位可以用amcl,但是发布的频率最高10hz有点点慢,amcl的配置网上也有很多教程,我的工程里面是没有配置可用的amcl的,这里推荐大家先去网上搜搜ros机器人中关于这几个常用名字link的含义,最好有个了解:base_link base_footprint map odom,文末也有简单介绍,这里可以看看我的tf树做一个参考吧: 执行命令:

rosrun rqt_tf_tree rqt_tf_tree

amcl粒子云效果:

关于.rviz文件

这种格式的文件是不用手写的,都是rviz软件的配置文件,生成过程写个教程吧: 首先打开空的rviz(默认你已经打开了一个机器人场景):

rosrun rviz rviz

点击左下角的add:

这里我们添加一个机器人模型:

还可以添加对应的话题(如果配置好了amcl会有一个粒子云的话题这里添加他):

目前效果:

这时候rviz配置好了点击左上角save config as就可以保存得到一个.rviz文件了:

关于几个坐标系

世界坐标(map)

该map坐标系是一个世界固定坐标系,其Z轴指向上方。相对于map坐标系的移动平台的姿态,不应该随时间显著移动。map坐标是不连续的,这意味着在map坐标系中移动平台的姿态可以随时发生离散的跳变。 典型的设置中,定位模块基于传感器的监测,不断的重新计算世界坐标中机器人的位姿,从而消除偏差,但是当新的传感器信息到达时可能会跳变。 map坐标系作为长期的全局参考是很有用的,但是跳变使得对于本地传感和执行器来说,其实是一个不好的参考坐标。

里程计坐标系(odom)

odom 坐标系是一个世界固定坐标系。在odom 坐标系中移动平台的位姿可以任意移动,没有任何界限。这种移动使得odom 坐标系不能作为长期的全局参考。然而,在odom 坐标系中的机器人的姿态能够保证是连续的,这意味着在odom 坐标系中的移动平台的姿态总是平滑变化,没有跳变。 在一个典型设置中,odom 坐标系是基于测距源来计算的,如车轮里程计,视觉里程计或惯性测量单元。 odom 坐标系作为一种精确,作为短期的本地参考是很有用的,但偏移使得它不能作为长期参考

该base_link坐标刚性地连接到移动机器人基座。base_link可以安装在基座中的任意方位;对于每个硬件平台,在基座上的不同地方都会提供一个明显的参考点。

可以参考ros问答论坛上一个类似的答案:https://answers.ros.org/question/291600/base_link-vs-base_footprint/ base_link:the coordinate frame called base_link is rigidly attached to the robot root body. base_footprint:The base_footprint is the representation of the robot position on the floor.