teb_local_planner ROS下阿克曼转向结构车型导航应用实践

近期开发了一款阿克曼转向结构的小车,在实现导航功能时接触TEB局部规划器(),过程中也遇到了一些问题,这里做个记录和分享
机器人PC
(阿克曼转向底盘,树莓派3B+,mate 18.04,ROS,单线激光雷达)
.04 ROS (虚拟机)
ROS下的导航中local 多数都针对两轮差速结构设计的,阿克曼转向结构由于结构的特点会有最小转向半径的限制,所以常见的local 例如,等在这里都不适用里,这里使用的是
它提供了一种car-like的动力学模型(即有最小转向半径限制),这样他所规划的路径也就符合了阿克曼结构的运动特点了;先跑一遍它所提供的来了体验一下,中内置了差速、全向、类车三种运动模型的Stage仿真测试,跑下来效果还可以,直接上车测试,把中类车结构下的配置文件移植到我的车上,主要修改下面几点:

teb_local_planner  ROS下阿克曼转向结构车型导航应用实践

文章插图
s.yaml中的为实体机器人的实际尺寸信息
s.yaml中的为你机器人的基座标名称
.yaml中的为你机器人的基座标名称width和这个参数默认设置为5.5,这里要吐槽一下,已经见过N次这两个参数被设置成小数了,但是根据的API介绍,这两个值都应该是int型,所以应该设置为整数而非小数 。
接下来要修改rams.yaml中的内容
这里要修改的内容比较多,主要要设置车的速度,角速度,转向半径和车外轮廓安全尺寸,对照着注释和wiki修改应该没什么问题,我在这里踩了两个坑
第一个是tvel这个参数,这个参数的作用是在发布的(/Twist)话题中将Z轴角速度的数值替换为车体的转向角度,个人理解这个纯粹是为了兼容Stage仿真器设置的,有点不伦不类的感觉,我的机器人是可以接受/Twist或者/类型消息,唯独不接受这种奇怪的消息,所以这个参数要设置为False以发布正常的/Twist消息
teb_local_planner  ROS下阿克曼转向结构车型导航应用实践

文章插图
第二是设置这里,这里要好好看看wiki上对于机器人模型的解释,我刚开始是想当然的去设置,测试效果比较差后才老老实实回去看wiki上的说明
改完上面的内容再写一个文件应该就可以正常启动导航了,车跑起来后我发现了一个新问题,终端会连续的弹出如下警告
[ WARN] [1567946341.717090426, 13.700000000]: Control loop missed its desired rate of 5.0000Hz... the loop actually took 1.0000 seconds[ WARN] [1567946341.718131483, 13.700000000]: Map update loop missed its desired rate of 5.0000Hz... the loop actually took 0.7000 seconds
看起来是控制周期的问题,但是5Hz的控制周期已经很低了,所以应该是主机性能太差所不过来了,看来要调整参数降低计算量,在 Wiki的常见问题中就有关于怎么降低计算量的(页面最后一项)
根据我测试,基本只有这几个参数有明显效果
.yaml中的width和
【teb_local_plannerROS下阿克曼转向结构车型导航应用实践】rams.yaml中的或这里说‘或’是因为只有在为True时才有效,更多的信息可以去看下wiki上的内容,一通尝试后警告消失,机器人也可以正常导航运行 。图中黑框中可以明显看到规划出的路径可以明显看出在需要掉头时,是使用了两次带转向半径的转弯而非一次原地转向来实现的 。