ROS从诞生到现在已经发展了很多年了,虽然功能强大,但底层架构的局限性使得缺陷也不少,修修补补越来越难满足时代发展的需求。针对这些缺陷,在下一代的机器人操作系统ROS2.0引入新概念新技术,重新进行架构设计,使得更符合时代发展的需要。官方已经声明neotic将是ROS的最后一个版本,而ROS2.0的发展也日益成熟,未来开发趋势应该是逐步迁移至ROS2.0。鉴于种种,因为原软件框架是基于ROS的,我选择只实现一些基本功能不再进行更多模块的开发。迁移至ROS2.0后,再进行开发。这个我在第一篇博客里也有提到。
原软件框架GitHub地址:
https://github.com/cabinx/cabin_auv_ws
ROS2.0版本Github地址:
GitHub - cabinx/cabin_auv_ros2: Part of cabin auv demo in ros2.0
开发测试平台为Nvidia Jetson Xavier NX,系统为Ubuntu 20.04,Ros版本为 Galactic。
实际上目前只对部分框架进行了迁移,做了点小尝试,基本实现了从手柄控制信号到pwm波信号的各个模块,具体分析见本系类文章的解析。如下红色框图部分:
ROS2.0已经能实现在RTOS开发板上部署,DDS的架构使得可以直接在网络获取所需数据。所以图里的ROS信息转串口发送到下位机stm32上这个模块已经不再需要。这一大好处就是两个不同平台的通信不用再约定各种繁杂的私下通信协议了。同时,虽然没试过,但我认为这部分程序在安装了Galatic的windows或mac平台下也是能编译运行的,开发真正地实现跨平台。
改装需要的时间及资源成本太高,同时仿真平台的迁移也是很大的工程,所以目前并未能进行仿真测试及实机测试。
如果感兴趣测试的话编译(colcon build)后需要接上手柄,运行:
ros2 launch start_auv demo_start.py
可以看到各个熟悉的topic信息:
运行动态调参工具:
ros2 run rqt_reconfigure rqt_reconfigure
还是熟悉的UI:
下位机的嵌入式开发部分我了解得有限,所以在stm32如何部署ros2.0,如何获取pwm波信息,如何下发控制电调的工作并未着手。未来有时间,有条件再进行完善工作,同时作更进一步地开发,比如仿真平台的迁移,添加一些传感器做做算法什么的。