5.1.2 ROS2 Installation
如果使用的是 Bianbu ROS 可以跳过该步骤
设置软件源
终端执行下面命令启用进迭时空 ROS2 软件源:
grep -q '^Suites:.*\bnoble-ros\b' /etc/apt/sources.list.d/bianbu.sources || sudo sed -i '0,/^Suites:/s//& noble-ros/' /etc/apt/sources.list.d/bianbu.sources
sudo apt update
安装工具
安装开发工具(推荐)
如需编译 ROS2 功能包或进行二次开发,建议安装开发工具集:
sudo apt update && sudo apt install ros-dev-tools
安装 ROS-Base
基础版包含 ROS 通信库、消息接口、命令行工具等核心组件,不包含 GUI 工具:
sudo apt install ros-humble-ros-base
构建自定义 ROS2 功能包
创建工作空间
mkdir -p ~/ros2_demo_ws/src
加载 ROS2 环境变量
source /opt/ros/humble/setup.zsh
若使用 Bash 终端,请将 setup.zsh
替换为 setup.bash
。
创建 Python 发布/订阅示例包
创建名为 py_pubsub
的功能包:
cd ~/ros2_demo_ws/src
ros2 pkg create --build-type ament_python --license Apache-2.0 py_pubsub
创建成功后,ROS2 将自动生成所需的功能包结构。
编写发布节点
cd ~/ros2_demo_ws/src/py_pubsub/py_pubsub
vim publisher_member_function.py
粘贴如下代码:
import rclpy # 导入 ROS2 Python 客户端库
from rclpy.node import Node # 从 rclpy 中导入 Node 类,用于创建节点
from std_msgs.msg import String # 导入标准的字符串消息类型(std_msgs/String)
# 定义一个继承自 Node 的类,用于创建发布者节点
class MinimalPublisher(Node):
def __init__(self):
super().__init__('minimal_publisher') # 初始化父类,并设置节点名称为 "minimal_publisher"
self.publisher_ = self.create_publisher( # 创建一个发布者,发布 消息类型为 String
String, # 消息类型为 std_msgs/String
'topic', # 主题名称为 "topic"
10 # 队列大小为10,缓冲待发送的消息
)
timer_period = 0.5 # 定时器周期设置为0.5秒
self.timer = self.create_timer( # 创建定时器,每0.5秒调用一次回调函数
timer_period,
self.timer_callback
)
self.i = 0 # 定义一个计数器,用于在消息中加入序号
def timer_callback(self):
msg = String() # 创建一个 String 类型的消息对象
msg.data = 'Hello World: %d' % self.i # 设置消息内容,包含当前计数值
self.publisher_.publish(msg) # 发布消息到 "topic"
self.get_logger().info('Publishing: "%s"' % msg.data) # 在终端输出当前发布的消息内容
self.i += 1 # 计数器递增,用于下一条消息
# main 函数是程序入口点
def main(args=None):
rclpy.init(args=args) # 初始化 rclpy
minimal_publisher = MinimalPublisher() # 创建 MinimalPublisher 节点对象
rclpy.spin(minimal_publisher) # 保持节点运行,监听回调(比如定时器回调)
minimal_publisher.destroy_node() # 节点关闭前,销毁节点资源
rclpy.shutdown() # 关闭 rclpy 系统
# 如果作为主程序运行,则调用 main() 函数
if __name__ == '__main__':
main()
添加依赖项
cd ~/ros2_demo_ws/src/py_pubsub
vim package.xml