在Turtlebot2机器人平台进行SLAM算法实验的技术笔记【一】

一、关于算法移植方面

a.因实际项目需求,我需要把在turtlebot2实验平台上面的建图、定位、路径规划、自主导航算法移植到对应项目的另一个移动底座上,并且上位机也需要更换成另一台笔记本或者工控机

b.首先,我们需要把我们原先笔记本上的整个工作区拷贝到新的上位机上面,由于我们的算法用了很多其他的依赖库,所以在对新上位机的工作区编译之前,需要先下载安装好我们需要的依赖文件。如果在后面运行程序的时候还出现了类似的情况,我们再单独去下载相应的引入文件。

c.安装好依赖文件之后,就要对新上位机上面拷贝过去的程序包重新编译,不然原来编译好的文件会在新的上位机上面出现路径错误。在编译过程中,由于某个程序包抛出了异常,或者是系统环境不一致,又或者是某个程序包出现了问题中断了编译,可能会导致出问题之后的程序包都编译失败,以至于之后再执行我们的算法程序的时候会出现各类问题,解决办法是在出现问题的时候找出出现问题的节点所在程序包,对其单独编译。

d.其次,因移动底座更改,不再是turtlebot2的kuboki底座,所以我们原先的turtlebot2驱动文件也就自然需要替换成新底座的驱动程序(也可称为基控制程序或者底座数据管理程序,是上位机创建的一个程序节点,主要通过话题的发布和订阅利用消息来对底座的进行运动控制和对一些信息的采集,比如move_base把运动指令发布到/cmd_vel,然后底座驱动程序订阅这个话题,得到其中的消息命令,就能顺利移动了;再比如把底座传来的相应消息,如编码器得到的位移和IMU得到的航向角信息,经过一些处理之后传到底座驱动程序,整理成一定的消息格式,再以/odom话题的形式发布出去,供上位机的其他程序节点使用)。

e.替换成新底座的驱动程序之后还不能直接使用,需要比对程序当中配置文件的USB接口信息,观察底座连接的新上位机的哪个接口,ttyUSB0还是ttyUSB1又或是其他,总之需要与实际插入的USB口保持一致,如果不一致,需要修改驱动程序当中的参数配置文件。当然,我们还可以利用其他方法,把这个USB口设置别名,然后再驱动程序当中直接填写别名即可。雷达驱动程序的配置文件类似。

f.由于每个驱动程序提供的一些信息输出不一样,比如有的直接是按/odom的消息格式提供运动学信息,这样也是符合我们gmapping和amlc算法的需求,所以可以直接使用,不会出什么问题,但是有些底座却不一定是输出/odom的消息,比如发布了另一个话题,这个话题可以是把IMU的数据和里程计(odom)中的数据利用卡尔曼滤波糅合在了一起,再以新话题的形式发布出来,这样的话,我们gmapping和amcl算法就不能直接使用驱动输出的信息了,需要做出修改。第一,可以不订阅新话题,还是让驱动程序发布里程计/odom的话题,然后订阅/odom使用。第二,更改我们的算法,把我们订阅接收的话题改成驱动发布的新话题,并且消息格式保持一致即可。

g.在使用新的底座和底座驱动之后,会发现很多我们算法程序去驱动底座运动的时候无法成功,比如我们turtlebot的键盘控制,又或是在自主导航move_base发的运动消息,都无法起作用,原因是我们可能在驱动中订阅的运动话题的名称或者映射与我们算法程序当中运动控制发布的话题名称或映射不一致,比如我算法程序当中明明发布的是/raw_cmd_vel,但是驱动程序当中订阅的却直接是/cmd_vel,不一致,无法联通。解决办法就是把名称或者映射改成一致的信息。


二、未来项目规划

1、研究两种底座驱动程序的区别和写法含义。

2、在已有算法当中加入重定位功能和自主探索地图功能。

3、在路径规划算法当中的避障方面加入机器人回退一些距离以远离障碍物的功能。

4、打造主控程序,包括两个层次,一个层次是以数据流为根据的控制层,比如机器人得到一些指令之后相应的去完成哪些功能,但是在此之前,机器人上面所有的驱动程序和算法程序节点都需要全部开启。一个层次是以业务逻辑为根据的功能层,打造可视化操作界面,根据界面交互来给机器人下达指令和开启功能节点。

你可能感兴趣的:(ROS&SLAM,project,Turtlebot2,ros,slam)