基于ROS搭建简易软件框架实现ROV水下目标跟踪(补1)--gazebo仿真

      项目地址:https://github.com/cabinx/cabin_auv_simulation

      鉴于水下机器人调试的复杂性,在仿真环境中对水下机器人进行先期调试能降低调试难度,节约大量的时间成本,提高开发效率。

      对于前文构建的软件框架,如果能在仿真环境中先行验证可行性,大致确定各项参数,然后再进行实际下水测试对参数进行微调,无疑将省事很多。同理,若有新的想法,开发出新的算法模块先在仿真环境中验证,就不需要大费周章地准备实际测试环境,同时也更方便进行debug调试找出问题,不必担心出现破坏机器人硬件的情形。

      Gazebo是一款强大的三维物理仿真平台,与ros联合能为机器人构建实时的仿真环境。这方面的资料和教程非常多,在此就不展开了。

      uuv_simulator(https://github.com/uuvsimulator/uuv_simulator)是一个非常优秀的基于ROS&GAZEBO开源水下机器人仿真项目,能为水下机器人的应用与算法提供一个较为理想的仿真环境进行测试。更详细的内容请仔细研读项目的wiki资料。

      项目的机器人模型有两款ROV:desistek_saga与rexrov2,两款AUV:eca_a9与lauv_gazebo。项目内都提供了链接。同时在RexROV2的项目中《Development and Commissioning of a DP system for ROV SF 30k》一文详细介绍了如何构建水下机器人模型,值得了解一下。

      实际上我在构建bluerov的模型时没做那么细就是了,因为我既不是结构出身的,也没有流体力学分析软件什么的。根据gazebo的需求从solidworks导出bluerov的模型就差不多了。模型不准确实对仿真实验照成了影响,有点遗憾,但也能满足使用需求。测试实际上和真实测试的流程差不多又来了一遍,构建环境和机器人模型,制作仿真环境中的目标数据集,训练识别模型,验证跟踪算法。仿真需要构建模型,而实际测试需要准备机器人硬件。但软件算法代码差不多是一致的。

      从软件框架上看,仿真控制只到了推进器推力这一层,对应框图中的是thruster_controller这一模块,往下的就是电机特性了,看资料时好像这方面好像也能进行仿真,然而这部分我并不关心,毕竟每种类型的电机特性都不同,所以就不花时间在这上面了。thruster_controller代码略微做了改动,添加了向仿真中机器人模型的每个推进器输入推力的模块等。其余代码均未做改动。

      以下是测试的环境图片:

      csdn短视频上传挺麻烦,需要看看测试视频可以到知乎那边:https://zhuanlan.zhihu.com/p/358116719

      在这里要说明的是仿真环境毕竟是虚拟的,水下使用光学相机不可能有这么好的能见度。实际上uuv_simulator里是有水雾设定以模拟水下光的衰减的情况,具体可以阅读其论文。不过此次仿真测试没有使用。

      最后简要说一下怎么安装和测试。

      安装:

mkdir -p xxx/src
cd xxx/src
git clone https://github.com/uuvsimulator/uuv_simulator.git
git clone https://github.com/cabinx/cabin_auv_simulation.git
cd ..
catkin_make

      我个人的系统为ubutu20.04,ROS版本为neotic,Gazebo版本为11.0。所以编译uuv_simulator时出现了一些问题,具体可以参考我早前的文章(https://blog.csdn.net/xiekaikaibing/article/details/111041718)。

      测试:

      1、roslaunch bluerov2h_gazebo bluerov2h_origin.launch

      此步骤为启动gazebo仿真,载入环境模型与机器人模型,注意,此时已经有单目相机图片数据输出,接下来请回顾之前系列文章中的数据集制作及训练部署模型部分。

      2、roslaunch cabin_controllers gazebo_sim.launch
      此步骤为启动各控制模块。

      3、启动darknet_ros

      别忘了载入新训练好的模型。

      4、rosrun rqt_reconfigure rqt_reconfigre

      打开参数面板,调节pid参数,安全区域参数等,具体各参数请回顾之前的系列文章,跟踪开关为面板上的tracking_switch,打勾为启动跟踪,取消为停止跟踪。

      此外,手柄控制模块cabin_teleop也是能在仿真环境中工作的,如何启动和实际环境测试一样。

你可能感兴趣的:(水下机器人,仿真,水下机器人)