水域载具 ROS2 接口

针对高保真海洋机器人模块 HoloOcean 的 ROS 2 集成方案。该软件包将 HoloOcean Python API 与 ROS 2 网络连接起来,以 Topic(话题)形式发布传感器数据,并通过 Subscription(订阅)和 Service(服务)接收控制指令。

HoloOcean ROS (0.0.1) 新特性

  • 改进了游戏手柄(joystick)示例
  • 新增多代理(multi-agent)游戏手柄示例
  • 简化了代理指令(弃用 command/control 话题,改用 command/agent
  • 新增传感器旋转指令
  • 修复了少量错误并改进了 Docker 配置
  • 软件包

软件包

软件包 描述
holoocean_main 核心仿真节点:加载场景并施加环境更新节拍
holoocean_interfaces 自定义 ROS 2 消息与服务定义
holoocean_examples 示例节点:操纵杆控制、航点跟踪、深度/航向指令

先决条件

  • ROS 2(已在 Humble 和 Jazzy 版本上测试)
  • HoloOcean Python 软件包 — 源代码 / 文档

注意: 请避免在 ROS 2 和 HoloOcean 中使用 Python 虚拟环境(如 Conda),因为这可能导致运行时及依赖项问题。

安装

Docker(推荐)

请参阅 Docker 开发环境 获取设置说明。提供开发运行时两种配置。

从源码安装

安装 HoloOcean 后,将此仓库克隆到您的 ROS 2 工作空间中:

cd ros2_ws/src
git clone https://github.com/byu-holoocean/holoocean-ros.git
cd ..
source /opt/ros/humble/setup.bash
colcon build
source install/setup.bash

快速入门

ros2 launch holoocean_main holoocean_launch.py

示例

操纵杆控制

使用 Joy_linux 包通过操纵杆控制 HoloOcean 中的代理。

ros2 launch holoocean_examples joy_launch.py

请参阅水域载具示例,获取完整的设置说明、按键映射及配置参考。

Joystick multi-agent control

航点跟踪

根据预设的航点列表控制水面船舶。

ros2 launch holoocean_examples waypoint_launch.py

Waypoint following

深度、航向及速度指令

利用 Fossen 控制器向鱼雷型 AUV 发送深度、航向及速度指令。

ros2 launch holoocean_examples command_launch.py

节点引用:holoocean_node

加载场景 JSON 文件,启动 HoloOcean 环境,并在后台线程中驱动其运行(执行 tick 操作)。

订阅的话题

话题 类型 描述
command/agent AgentCommand 针对所有代理的推进器/执行器指令(对于福森代理,frame_id 设为 body 的消息会被路由至福森的 set_u_control 接口)
command/sensor SensorCommand 传感器配置指令(例如:摄像头旋转)
depth DesiredCommand 自动驾驶模式的深度设定值
heading DesiredCommand 自动驾驶模式的航向设定值
speed DesiredCommand 自动驾驶模式的速度设定值
debug/points visualization_msgs/Marker 在仿真中绘制的调试点

发布的话题

话题 类型 描述
<agent>/<SensorName> varies 每个代理的传感器数据(见下文)
/clock rosgraph_msgs/Clock 模拟时间

传感器话题名称遵循 <agent_name>/<sensor_name> 的格式。如果场景文件中未指定传感器名称,则默认使用传感器类型名称。

服务

服务 类型 描述
reset std_srvs/Trigger 重置模拟环境
control_mode SetControlMode 更改代理的控制模式

参数

参数 类型 默认值 描述
scenario_path string "" 场景 JSON 文件的路径
relative_path bool true 相对于包的共享目录解析 scenario_path
show_viewport bool true 显示虚幻引擎视窗
draw_arrow bool true 在模拟中为每个福森代理绘制一个朝向箭头。
render_quality int -1 渲染质量:0 = 低,1 = 普通,2 = 高。-1 = 默认
publish_commands bool true 将计算出的控制面指令发布回 ROS

记录传感器数据

ros2 bag record /holoocean/auv0/RotationSensor /holoocean/auv0/LocationSensor

有关更多信息,请参阅 ROS 2 bag 文档

注意

  • 模拟时间可能比实际时间(wall time)运行得更快或更慢。请使用 /clock 话题将节点与仿真时间同步

参考