【飞控开发实战·⑲】ROS2无人机开发环境搭建:Jazzy安装、工作空间与hello_drone节点实战

19.1 ROS2 概述

ROS2(Robot Operating System 2)是当前机器人与无人机上层应用开发中广泛使用的开源中间件平台。相比 ROS1,ROS2 在实时性、跨平台支持、通信机制和工程部署能力等方面都有明显提升。对于无人机系统而言,ROS2 主要承担高层任务规划、状态感知、数据记录、仿真验证以及与飞控之间的数据通信等功能。

本章主要完成以下内容:

  • 搭建 ROS2 Jazzy 开发环境;

  • 验证 ROS2 基本通信功能;

  • 安装开发工具 colcon 与 rosdep;

  • 创建 ROS2 工作空间;

  • 创建 Python 功能包 drone_tools;

  • 编写并运行 hello_drone 节点;

  • 测试节点的话题发布与订阅功能。

19.2 ROS2 开发环境安装与验证

19.2.1 使用小鱼 ROS 一键安装

为提高安装效率,本实验采用小鱼 ROS 一键安装方式完成 ROS2 环境部署。通过下载安装脚本并运行,可自动完成 ROS2 软件安装及常用环境配置。

wget https://fishros.com/install -O fishros && . fishros

图19-1 小鱼 ROS 一键安装脚本页面

19.2.2 ROS2 环境检查

ROS2 安装完成后,首先需要检查系统中 ROS2 是否可正常调用。通过加载 Jazzy 环境变量,并运行 ros2 --help 命令,可以查看 ROS2 命令行工具是否可用。

source /opt/ros/jazzy/setup.bash

ros2 --help

当终端能够正确显示 topic、node、service、run、launch 等 ROS2 常用命令时,说明 ROS2 基础环境安装成功。

图19-2 ROS2 命令帮助界面

19.2.3 使用 talker 与 listener 验证通信

为了进一步验证 ROS2 的发布/订阅通信功能,本实验分别运行官方示例节点 talker 和 listener。

终端1:运行发布者 talker

source /opt/ros/jazzy/setup.bash

ros2 run demo_nodes_cpp talker

该节点会持续向外发布字符串消息“Hello World”。

图19-3 talker 节点运行结果

终端2:运行订阅者 listener

source /opt/ros/jazzy/setup.bash

ros2 run demo_nodes_py listener

该节点会接收 talker 节点发送的消息,并在终端中显示“I heard: [Hello World: x]”。

图19-4 listener 节点运行结果

如果 talker 能持续发布消息,listener 能同步接收消息,则说明 ROS2 的基本通信机制工作正常。

19.2.4 开发工具检查

ROS2 开发过程中常用的两个工具分别为 colcon 和 rosdep。colcon 用于编译 ROS2 工作空间,rosdep 用于自动安装功能包依赖。

colcon --help

rosdep --version

若终端能够正确显示 colcon 的帮助信息,并输出 rosdep 版本号,则说明相关开发工具环境正常。

图19-5 colcon 与 rosdep 工具检查结果

19.3 ROS2 工作空间创建与功能包配置

19.3.1 创建 ROS2 工作空间

在 ROS2 中,用户自定义程序通常放置在工作空间中进行统一管理。实验中创建的工作空间名称为 ros2_ws。

mkdir -p ~/ros2_ws/src

cd ~/ros2_ws

colcon build

完成后,工作空间中会自动生成 build、install、log 和 src 等目录,这说明工作空间已创建成功。

图19-6 工作空间创建与初始编译结果

19.3.2 创建 Python 功能包 drone_tools

进入工作空间源码目录后,创建 Python 类型的 ROS2 功能包 drone_tools:

cd ~/ros2_ws/src

ros2 pkg create --build-type ament_python drone_tools --dependencies rclpy std_msgs geometry_msgs

创建完成后,可通过 tree 命令查看其目录结构:

tree ~/ros2_ws/src/drone_tools

功能包中包含 package.xml、setup.py、setup.cfg、resource、drone_tools 和 test 等标准目录与文件,说明 Python 功能包创建成功。

图19-7 drone_tools 功能包目录结构

19.3.3 编写 hello_drone.py 节点程序

在 drone_tools/drone_tools 目录下创建 hello_drone.py 文件,用于编写第一个 ROS2 无人机示例节点。

该节点主要实现以下功能:

  • 发布无人机状态话题 /drone/status;
  • 发布模拟位姿话题 /drone/pose;
  • 订阅控制指令话题 /drone/command;
  • 根据接收到的文字指令输出相应提示信息。

图19-8 hello_drone.py 节点代码编写界面

程序编写完成后,需要赋予执行权限:

chmod +x hello_drone.py

19.3.4 配置 setup.py 入口文件

为了能够通过 ros2 run 直接运行 Python 节点,需要在功能包的 setup.py 中注册入口函数。在 entry_points 中加入:

'hello_drone = drone_tools.hello_drone:main',

该配置表示在终端执行 ros2 run drone_tools hello_drone 时,将自动调用 hello_drone.py 中的 main() 函数。

图19-9 setup.py 入口配置界面

19.3.5 安装依赖并编译功能包

在工作空间根目录中执行以下命令安装依赖:

cd ~/ros2_ws

rosdep install -i --from-paths src --rosdistro jazzy -y

当终端输出“All required rosdeps installed successfully”时,说明功能包依赖安装成功。

图19-10 rosdep 依赖安装成功界面

随后对功能包进行编译:

colcon build --packages-select drone_tools --symlink-install

编译成功后,终端会显示 Starting >>> drone_tools、Finished <<< drone_tools 和 Summary: 1 package finished。

图19-11 drone_tools 功能包编译成功界面

19.3.6 加载工作空间环境

功能包编译完成后,需要重新加载 ROS2 环境以及当前工作空间环境:

source /opt/ros/jazzy/setup.bash

source ~/ros2_ws/install/setup.bash

随后使用以下命令检查功能包是否已被 ROS2 正确识别:

ros2 pkg list | grep drone_tools

若终端输出 drone_tools,则说明该功能包已成功注册到当前 ROS2 环境中。

图19-12 工作空间环境加载与功能包识别结果

19.4 Hello Drone 节点运行与通信测试

19.4.1 运行 hello_drone 节点

在终端中输入:

source /opt/ros/jazzy/setup.bash

source ~/ros2_ws/install/setup.bash

ros2 run drone_tools hello_drone

运行后,节点会周期性输出 Hello Drone 节点已启动、飞控型号 ZP_H743(模拟状态)以及发布状态等信息,说明节点已开始正常工作,并持续发布无人机状态信息。

图19-13 hello_drone 节点运行结果

19.4.2 查看 /drone/pose 话题数据

在另一个终端中输入:

source /opt/ros/jazzy/setup.bash

source ~/ros2_ws/install/setup.bash

ros2 topic echo /drone/pose

终端中会持续输出位姿消息,包括坐标位置 x、y、z 和姿态四元数 x、y、z、w。当前节点持续发布的位姿信息为固定模拟值:位置为 (0.0, 0.0, 0.0),姿态为 (0.0, 0.0, 0.0, 1.0),说明 /drone/pose 话题发布功能正常。

图19-14 /drone/pose 话题查看结果

19.4.3 发送 /drone/command 指令测试

为了验证节点的订阅功能,在终端中分别向 /drone/command 话题发布三条测试命令:

ros2 topic pub --once /drone/command std_msgs/msg/String "{data: 'ARM'}"

ros2 topic pub --once /drone/command std_msgs/msg/String "{data: 'TAKEOFF'}"

ros2 topic pub --once /drone/command std_msgs/msg/String "{data: 'LAND'}"

实验结果表明,发送 ARM、TAKEOFF 和 LAND 后,hello_drone 节点能够分别接收指令,并输出模拟执行解锁、起飞和降落的提示信息,说明节点已经能够正常订阅并处理控制指令。

图19-15 /drone/command 指令发布与接收测试结果

19.4.4 查看节点与话题信息

为进一步验证节点的通信关系,可使用以下命令查看节点和话题信息:

ros2 node info /hello_drone_node

ros2 topic list | grep drone

ros2 topic type /drone/status

实验结果显示,节点 /hello_drone_node 已正常注册;话题列表中成功出现 /drone/command、/drone/pose 和 /drone/status;/drone/status 的消息类型为 std_msgs/msg/String。由此可见,该节点的发布、订阅以及 ROS2 注册信息均正常。

图19-16 节点与话题信息查看结果

19.5 本章小结

本章完成了 ROS2 Jazzy 基础开发环境的搭建与验证,并通过 hello_drone 节点实现了 ROS2 基本通信流程的实践。主要完成内容如下:

  • 采用小鱼 ROS 一键安装方式完成 ROS2 Jazzy 环境部署;

  • 使用 ros2 --help 验证 ROS2 命令行工具可正常使用;

  • 使用 talker 与 listener 示例验证 ROS2 发布/订阅通信功能;

  • 检查 colcon 与 rosdep 工具工作正常;

  • 成功创建 ROS2 工作空间 ros2_ws;

  • 成功创建 Python 功能包 drone_tools;

  • 编写并运行 hello_drone 节点;

  • 实现 /drone/status 和 /drone/pose 的发布;

  • 实现 /drone/command 的订阅与处理;

  • 完成节点信息与话题类型的检查验证。

通过本章实验,已经掌握了 ROS2 的基础开发流程,包括环境搭建、工作空间创建、功能包管理、节点编写以及话题通信测试等内容,为后续 MAVROS2、PX4 桥接和无人机上层控制节点开发打下基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值