本文只是按照个人理解把TARE部署到硬件机器人上,并没有对源码进行相关的解读,代码解读可以参考其他博主的学习笔记。
一、硬件要求
1.1 雷达
我采用的是镭神16线三维激光雷达,这款雷达在淘宝可以搜到,但是价格略贵,雷达淘宝链接:由于雷达价格比较昂贵,大家量力而行!!!
1.2 主控
主控采用的是Jetson Nano的TX板
1.3 底层
底层控制采用stm32f4系列板
1.4 整车套件
整车套件买的是轮趣科技的阿克曼结构机器人,淘宝链接,价格也比较昂贵,量力而行!!买整车套件的好处在于:(1)无需自己写电机驱动(类似pid算法、串口通信之类的)(2)雷达驱动也是现成的 (3)上层与底层的通信是现成的。我们只需要关注自己算法的开发即可
二、环境搭建
这个可以参考CMU开源的网站,网站地址,这里面详细介绍了如何下载源码和搭建环境,这里就不再赘述。
在启动如下命令之后
roslaunch vehicle_simulator system_garage.launch
可以看到如下图所示内容,即代表仿真环境搭建成功,如果有报错则自己安装对应的功能包即可。
这个界面包含了三个部分:1、仿真地图的rviz界面(这里代码作者将gazebo显示关闭了)2、摄像头画面 3、运行时长和调用路径规划的次数
开启这个界面之后,继续运行以下命令
roslaunch tare_planner explore_garage.launch
这里为开启TARE规划器的命令,开启后如下图所示。其中包括了rviz的一个全局地图,然后通过更新局部的way_point来引导机器人移动。
至此,TARE仿真环境完全搭建结束,可以进行自己的开发了。
三、修改话题名
由于在路径
/home/user_name/autonomous_exploration_development_environment/src/vehicle_simulator/launch/system_real_robot.launch
存在TARE团队提供给我们使用的一个可以直接使用在真实机器人上的launch文件,所以我们只需要把雷达的话题名相对应即可。
首先在自己的硬件机器人上开启三维雷达,此时只要能接收到点云数据即可,如下图,这里不需要开启建图!!!
开启之后,用rostopic list查看雷达点云的话题名,比如我的是/point_cloud_raw,然后把这个话题名复制,进入以下路径。
/home/user_name/autonomous_exploration_development_environment/src/loam_interface/launch
找到一个叫loam_interface.launch的文件,文件内容如下:
<launch>
<node pkg="loam_interface" type="loamInterface" name="loamInterface" output="screen" required="true">
<param name="stateEstimationTopic" type="string" value="/integrated_to_init" />
<param name="registeredScanTopic" type="string" value="/velodyne_cloud_registered" />
<param name="flipStateEstimation" type="bool" value="true" />
<param name="flipRegisteredScan" type="bool" value="true" />
<param name="sendTF" type="bool" value="true" />
<param name="reverseTF" type="bool" value="false" />
</node>
</launch>
把第二个参数的值/velodyne_cloud_registered修改为自己雷达的点云话题名,此处例如我自己的为/point_cloud_raw,修改后代码如下,注意第二个参数的值!!
<launch>
<node pkg="loam_interface" type="loamInterface" name="loamInterface" output="screen" required="true">
<param name="stateEstimationTopic" type="string" value="/integrated_to_init" />
<param name="registeredScanTopic" type="string" value="/point_cloud_raw" />
<param name="flipStateEstimation" type="bool" value="true" />
<param name="flipRegisteredScan" type="bool" value="true" />
<param name="sendTF" type="bool" value="true" />
<param name="reverseTF" type="bool" value="false" />
</node>
</launch>
修改成自己雷达的对应话题之后,开启雷达节点,然后开启TARE的节点
roslaunch rplidar rplidar_3d.launch #自己的雷达节点,此处不需要开建图!!
roslaunch vehicle_simulator system_real_robot.launch #开启TARE的节点
然后就可以看到下图的结果,左边为TARE环境的RVIZ视图,右边为自己硬件小车的RVIZ视图。到此,已经将雷达数据传递给了TARE的环境中。
四、TARE规划器
在第三节完成后,还需要开启底层控制节点,因为TARE规划器是需要改变/cmd_vel话题的值,通过串口发送给底层才能控制机器人运动,而底层节点不包含在TARE里,需要自行准备,这里可以参考第一节的整车套件的内容。
开启底层节点后再执行以下代码:
roslaunch tare_planner explore_matterport.launch
这里的launch文件需要根据你的实际测试环境进行修改,如果是室外的话可以试试gexplore_garage.launch,在TARE社区里原作者给出了相关的解释,可以进行参考。开启后机器人则开启了地图探索,但有些可能会出现机器人抖动,或者探索一会就回来了,这些问题目前我也没搞懂为啥,但根据TARE社区原作者给出的解答,可以尝试不同的launch文件适配不同的参数。想要完全达到100%的成功率还需要自己对代码进行修改。
免责声明:由于我目前也只是本科大三阶段,如果按照本文操作之后不成功,还望谅解。如果有一定的ROS基础并能自己跑通gazebo仿真,理解话题之间的通信过程,我相信大部分是可以成功的。如有错误之处请批评指正。
对于零基础的同学,我的建议还是先打好基础,不要越阶挑战TARE,太伤神。
最后对整个流程进行一下梳理:
- 搭建仿真环境
- 开启自己的雷达
- 测试TARE的仿真环境能否收到雷达数据
- 开启底层节点
- 开启TARE规划器