在 AUV 设计学习中,通信与控制是核心环节。Mavlink 通信协议和 Mavros 工具在其中扮演着关键角色,它们为 AUV 系统的稳定运行与高效控制提供了有力支持。

  1. Mavlink 通信协议简介
    Mavlink 作为一种轻量级的通信协议,专为无人机及相关系统设计。它定义了一系列消息格式和通信规则,实现了系统组件间的可靠数据传输。在 AUV 领域,Mavlink 确保了飞控、传感器、地面站等设备间的信息交互。例如,传感器数据(如 IMU 数据、GPS 数据)可通过 Mavlink 消息准确传输至飞控,飞控也能借助 Mavlink 将控制指令发送给执行机构。其官网(MAVLINK Common Message Set (common.xml) | MAVLink Guide )提供了丰富的文档资源,涵盖协议细节、消息定义及使用案例,是深入学习的重要资料。
  2. STM32 下 mavlink 的使用总结
    在 STM32 开发中应用 mavlink,开发者需深入理解其工作机制。以 ACfly 中 mavlink 的分析为例,要明确如何基于 STM32 实现数据的接收与发送。比如,在接收 T265 的位置信息时,需根据 mavlink 协议解析接收到的消息,提取关键数据。这涉及对协议中消息结构、字段含义的精准把握,通过编写相应代码,实现对特定消息的有效处理,进而为 AUV 的导航与控制提供数据基础。相关教程可参考:Integration of ArduPilot and VIO tracking camera (Part 1): Getting started with the Intel Realsense T265 on Rasberry Pi 3B - Blog - ArduPilot Discourse
  3. Mavros 框架及使用详解
    Mavros 是基于 ROS 的软件包,为与 MAVLink 兼容的通信接口。它极大简化了与 PX4 飞控等设备的通信流程。在 AUV 系统中,Mavros 可将 AUV 作为 ROS 节点运行,方便与其他 ROS 节点协作。其提供的多种 ROS 服务、话题和参数,为控制与监控 AUV 带来便利。例如,通过 /mavros/imu/data 话题可获取 IMU 数据,用于姿态解算;/mavros/setpoint_raw/attitude 话题则可发送姿态控制指令。深入了解 Mavros 框架,需掌握其节点、话题、服务的架构关系,以及如何利用这些组件实现 AUV 的复杂控制逻辑。
  4. Mavros 常用命令解析
    在实际操作中,Mavros 的常用命令发挥着重要作用。比如,使用 rosrun mavros mavsafety arm 命令可使无人机解锁,为起飞做准备;rosrun mavros mavcmd takeoffcur 0 0 5.0 能让无人机起飞到当前位置上方 5 米处。通过 rosrun mavros mavsys mode -c STABILIZE 命令可切换无人机到自稳模式,以满足不同飞行需求。这些命令为快速调试与测试 AUV 提供了便捷途径,开发者需熟练掌握,根据实际场景灵活运用。
  5. Mavros 安装与依赖修复
    Mavros 的安装方式有二进制安装和源码安装。二进制安装(deb)适用于 Ubuntu 的 x86、amd64(x86_64)和 armhf(ARMv7)平台。以 ROS Kinetic 版本为例,可通过 sudo apt-get install ros - kinetic - mavros ros - kinetic - mavros - extras 命令安装,随后运行 install_geographiclib_datasets.sh 脚本安装 GeographicLib 数据集:

bash

wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
./install_geographiclib_datasets.sh

源码安装则方便二次开发。需使用 wstool 和 catkin 工具,步骤如下:

bash

sudo apt-get install python - catkin - tools python - rosinstall - generator - y
# 若为Noetic版本,使用以下命令
# sudo apt install python3 - catkin - tools python3 - rosinstall - generator python3 - osrf - pycommon - y
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin init
wstool init src
rosinstall_generator --rosdistro kinetic mavlink | tee /tmp/mavros.rosinstall
rosinstall_generator --upstream mavros | tee -a /tmp/mavros.rosinstall
# 若需获取所有依赖,添加'--deps'参数
# rosinstall_generator --upstream mavros --deps | tee -a /tmp/mavros.rosinstall
wstool merge -t src /tmp/mavros.rosinstall
wstool update -t src -j4
rosdep install --from - paths src --ignore - src -y
./src/mavros/mavros/scripts/install_geographiclib_datasets.sh
catkin build
source devel/setup.bash

安装过程中若出现依赖问题,可运用 apt - get install -f 命令自动安装缺失的依赖项,在终端输入 sudo apt - get install -f 即可。
6. Mavros 错误分析与解决
在使用 Mavros 时,可能会遇到各种错误。如编译时出现 “Errors << mavros_extras:make /home/auv/catkin_ws/logs/mavros_extras/build.make.003.log” 错误,经分析可能是 mavlink 引起。在 ROS kinetic 版本中,mavlink 的 GPS2_RAW 消息定义不完整,与 ROS noetic 版本的 mavros 不兼容。解决方法是打开~/catkin_ws/src/mavlink/message_definitions/v1.0/common.xml 文件,复制 “GPS_RAW_INT” 消息的<extensions/>部分,替换同文件中 “GPS2_RAW” 的<extensions/>。此外,还可能遇到因环境变量设置不当导致 ROS 无法找到新安装软件包的问题。可在终端执行 source ~/catkin_ws/devel/setup.bash 临时设置环境变量,为方便使用,最好将该命令添加到~/.bashrc 文件中:

bash

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

Mavlink 通信协议和 Mavros 工具在 AUV 设计中具有不可替代的地位。深入学习并掌握它们的原理与使用方法,是实现高效、稳定 AUV 系统的关键。通过不断实践与总结,开发者能更好地利用这些技术解决实际问题,推动 AUV 技术的发展与创新。

基于 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>。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐