ROS2-PX4学习笔记
前言
做毕设其实是个有点痛苦的过程。
毕竟所有东西都得现学,然后探索,时间又有限。
研究没接触过的新东西,总会失败,没有产出,搞久了人难受。
所以还是写一点东西吧。
我挺想把这个坑做成一个系列的,因为互联网上就没有ROS2 Jazzy和Gazebo Harmonic,再加上PX4-Autopilot无人机的中文教程。
之后上真机的时候,还要琢磨一下树莓派怎么玩。
聊聊ROS2的学习
首先极力推荐https://github.com/MOGI-ROS,一步步指导如何基于ROS2 Jazzy和Gazebo Harmonic,构建一个两轮小车,安装传感器,进行导航。
这个教程的优势在于,它指导我们从零开始,以项目为引领,直接开始上手做项目,学习路径相对较短。而且我暂时也没找到讲ROS2和Gazebo sim的什么讲得好的网上教程。
此外,《ROS2智能机器人开发实践》这本书也值得参考,它对ROS2的各类机制讲的比较多,而且花大篇幅讨论了如何在现实中搓一个小的俩轮机器人出来。
另外,安装ROS2的话,一般需要Ubuntu系统,我推荐大伙整一块外置固态硬盘,PCIE3.0的就行,空间一般不少于1个T,还有硬盘盒一定要整个好的,最好不低于200块。
安装ROS2可以参考这个网站,一键安装工具:https://fishros.org.cn/forum/topic/20/小鱼的一键安装系列
当然,学习了ROS2和Gazebo的机器人应用之后,还得转向无人机。目前我还没研究到这一块,暂时先把PX4的官方文档挂着,等过段时间开搞的时候,再自行总结些内容。
https://docs.px4.io/main/en/ros2/user_guide.html 这个是ROS2 PX4的用户教程,先把这块操作一遍。
接着是ROS2和PX4的通信机制。
https://docs.px4.io/main/en/ros2/px4_ros2_interface_lib.html 这个是PX4和ROS2的控制接口和导航接口。
https://docs.px4.io/main/en/middleware/uxrce_dds.html 这个是PX4和ROS2的DDS桥。
https://docs.px4.io/main/en/ros2/px4_ros2_msg_translation_node.html 这个是PX4和ROS2的消息转换节点。
进度
目前我已经学到用代码搓一个小车的模型,装上单目相机和IMU;能通过脚本启动Gazebo sim模拟和Rviz2,能在ROS2终端用键盘控制小车运动,并能获取小车装的相机实时回传的图像。
下一步,根据教程,我还需要学习安装GPS、激光雷达,然后尝试使用OpenCV进行简单的图像处理。
接着就是Navigation2这个导航包了,也是我毕设最难的部分之一。
导航主要分成3个部分:建图、定位和导航。其中,建图和定位不是我毕设的重点,直接调已有的包就行了。
导航的话,虽然我现在用的是A*算法,已有的规划器,但是后面我必须要自己手搓一个规划器出来,算法上也得升级一轮,这里还没有主意。
这块折腾完之后,就得转向PX4那一块,认认真真看看怎样实现:
- 带有激光雷达的无人机,能成功通过ROS2脚本调用,在Gazebo sim中显示,这个可能不能用make px4_sitl gz_x500,这样做应该就没有跟ROS2的通信了;
- ROS2脚本能实现连接PX4软件包,和我的Navigation2的包,其中激光雷达的信息要从无人机传到Navigation2这边,然后从导航包输出控制信息到无人机,这个是绝对重点;
- 最后模拟要的效果是,我在Rviz上选地图上的一个点,已知未知都行,无人机能边建图边规划,然后导航还得是三维的。(就是三维导航是不是得用Ego-planner?这又是另外的学习路径了,等后面加紧研究)
- 一旦模拟能跑通,我的消息传递和建图定位规划都没问题,就需要上真机。一个是把我的包搞到机载电脑上,二个是无人机和地面站之间的通信,三个是定位需要改成用Lab里面的动捕,这个工作量也很大。而且还有个问题,我真机的飞控板还不知道是什么鬼样,只能祈祷我不用自己写飞控吧。
总之希望能按时完成。