真实机器人的RRT自主探索建图

在ros当中使用rrt_exploration来实现自主建图,官方文档(http://wiki.ros.org/rrt_exploration)说得比较清楚,这篇博客简单地讲解一下流程,主要是针对一些容易掉进坑的地方说明一下,给大家排排雷。
安装rrt_exploration功能包请参考上面的官方说明。

本人在树莓派3b+平台(ubantu16.04+kinetic)测试过rrt自主建图,没有问题。附上实验图:真实机器人的RRT自主探索建图_第1张图片
因为我是单机实验,直接使用的是rrt_exploration功能包里面的simple.launch文件,另外还要再自己建立一个文件,这个文件需要包含move_base、gmapping(或者其他建图功能包)。总的来说,需要启动的有move_base、建图、rrt三者。

需要注意的坑点有以下:
1、当你是单机实验的时候,需要注意所有的frame和topic保持统一的格式。例如base_frame=“base_footprint"而不是”/base_footprint",topic前需要加‘/’。所有涉及到tf转换的地方,都需要注意你的frame有没有前缀‘/’。
2、下载的rrt功能包有的文件里头部分的frame有前缀,这个需要与你自身的情况保持一直,自己做修改。可以参考该大神 的文章:https://blog.csdn.net/qq_42145185/article/details/82461072
3、当你需要改变路径规划算法时,需要你的move_base启动包与function.py里面的plan_service的make_plan服务保持一致。
4、需要注意在intel处理器上,char默认有符号,但是在arm处理器上,char默认无符号,可参考:http://blog.sina.com.cn/s/blog_6cf921f30102vd34.html
真实机器人的RRT自主探索建图_第2张图片

作者的一个函数obstacleFree返回了一个char,在这里插入图片描述
之后利用这个char的值来判断是空、边界还是障碍物。这个放在PC上的仿真是没问题的,但是如果在真实机器人上,比如树莓派上,他们使用的处理器是arm架构,char就是一个无符号值,此时永远不会有checking==-1的情况,所有checking==-1都是溢出变成255,也就永远检查不到边界。
这时你可以把检查checking==-1的情况改成checking==255。但更加建议您把char改成其他有符号的类型,如int。

你可能感兴趣的:(SLAM,slam,c++)