基于 Ardusub 的 AUV 设计学习历程(四)—— 仿真与视觉识别实践

        在 AUV 设计学习过程中,仿真与视觉识别是提升系统性能与功能的重要环节。通过仿真,我们可以在虚拟环境中测试和优化 AUV 的行为,而视觉识别则为 AUV 赋予了感知周围环境的能力。

  1. 基于 ROS 搭建简易软件框架实现 ROV 水下目标跟踪
    借助 ROS 与 Gazebo 的强大组合,我们能够为 AUV 构建逼真的实时仿真环境。Gazebo 作为一款出色的三维物理仿真平台,与 ROS 协同工作,可模拟 AUV 在水下的运动、传感器数据以及与环境的交互。以基于 ROS 搭建简易软件框架实现 ROV 水下目标跟踪项目为例(项目地址:https://github.com/cabinx/cabin_auv_simulation ),该项目包含两款 ROV(desistek_saga 与 rexrov2)和两款 AUV(eca_a9 与 lauv_gazebo)的机器人模型。在仿真过程中,我们可以对 AUV 的控制算法、路径规划等进行验证和改进。例如,通过调整控制参数,观察 AUV 在不同水流条件下的稳定性和跟踪精度,从而优化控制策略。同时,uuv_simulator(GitHub - uuvsimulator/uuv_simulator: Gazebo/ROS packages for underwater robotics simulation )也是一个优秀的基于 ROS&GAZEBO 的开源水下机器人仿真项目,为我们提供了丰富的仿真资源和工具。
  2. 仿真中的错误分析与解决
    在进行仿真时,可能会遇到各种错误。比如,报错 “Could not find a package configuration file provided by "Ceres" with any of the following names: CeresConfig.cmake, ceres - config.cmake”,这是由于系统中未安装 Ceres Solver 库。在 Ubuntu/Debian 系统中,可通过以下命令安装:

bash

sudo apt update
sudo apt install libceres - dev

另外,在编译 uuv_simulator 时,针对不同版本的系统和软件,可能会出现以下问题:

  • gazebo11 与 sdformat - 9.2 问题:sdformat 版本升级后,编译器版本支持需相应改动。可能出现 “/usr/include/sdformat - 9.2/sdf/Param.hh:72:57: error: expected constructor, destructor, or type conversion before ‘;’ token template<class T> ParamStreamer(T) -> ParamStreamer<T>; /usr/include/sdformat - 9.2/sdf/Param.hh:83:47: error: ‘variant’ is not a member of ‘std’ ParamStreamer<std::variant<Ts...>> sv)” 错误。解决方法是在 uuv_gazebo_plugins 的 package 目录下的 CMakeLists.txt 中添加对 c++17 的支持:

cmake

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

  • gazebo11 与 Ignition Math 库问题:Ignition Math 库升级到 v6 版本后,部分类命名变动导致编译错误。例如,在 uuv_gazebo_plugins 的 package 中,HydrodynamicModel.cc 中计算 bounding box 调用的类发生了改动,原代码为 ignition::math::Box ,新版本更名为 ignition::math::AxisAlignedBox。需要在 BuoyantObject.hh、BuoyantObject.cc、HydrodynamicModel.cc 中做出相应修正。如在 BuoyantObject.hh 中,将

cpp

public: void SetBoundingBox(const ignition::math::Box &_bBox);
...
protected: ignition::math::Box boundingBox;

修改为

cpp

public: void SetBoundingBox(const ignition::math::AxisAlignedBox &_bBox);
...
protected: ignition::math::AxisAlignedBox boundingBox;

  • ** 错误:[97%] Linking CXX shared library /home/wmc/space/gazebo/uuv/devel/lib/libuuv_gazebo_ros_base_sensor_plugin.so”:在 gazebo_ros_image_sonar.cpp 中出现 “CV_AA’ was not declared in this scope; did you mean ‘CV_AVX’?” 错误。解决方法是定位到 gazebo_ros_image_sonar.cpp,加入头文件 #include <opencv2/imgproc/imgproc_c.h>。

  1. 视觉识别之 yolo 在 AUV 中的应用
    在 AUV 的视觉识别领域,yolo 算法具有广泛应用。以 RK3588 上部署 yolov5 为例(参考:https://blog.csdn.net/qq_53219363/article/details/136732556?ops_request_misc=&request_id=&biz_id=102&utm_term=rk3588%20yolov5&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-6-136732556.142^v101^pc_search_result_base8&spm=1018.2226.3001.4187 ),部署过程涉及一系列步骤,包括环境配置、模型下载与转换、代码编译等。通过 yolov5,AUV 可以识别水下目标,如障碍物、标志物等,为自主导航和任务执行提供关键信息。例如,在水下作业场景中,AUV 利用 yolo 识别出目标物体后,可根据识别结果调整自身位置和姿态,完成抓取、测量等任务。YOLO - V5 源码链接为:Gitee Search ,开发者可根据实际需求对源码进行定制化开发,以适应不同的水下环境和任务要求。
  2. ROS - noetic - USB 相机的标定与双目测距
         为了让 AUV 准确感知周围环境的距离信息,相机标定和双目测距是必不可少的环节。在 ROS - noetic 环境下进行 USB 相机的标定,可通过特定的标定工具和算法,获取相机的内参和外参,从而提高图像测量的准确性。双目测距则利用两个相机的视差信息,计算目标物体与 AUV 之间的距离。这一技术在 AUV 的避障、目标定位等任务中发挥着重要作用。例如,在 AUV 靠近水下结构物时,双目测距可实时提供结构物与 AUV 的距离数据,帮助 AUV 保持安全距离,避免碰撞。相关的标定和测距算法及实现细节,可通过查阅 ROS 官方文档和相关教程进行深入学习和实践。
    仿真与视觉识别技术为 AUV 的设计和开发提供了强大的支持。通过在仿真环境中不断优化和验证,结合先进的视觉识别算法,AUV 能够更好地适应复杂的水下环境,实现更高效、智能的作业任务。在未来的研究和实践中,持续探索和改进这些技术,将进一步推动 AUV 技术的发展和应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值