
【ROS2 】小海龟自动画圆从零编写 Python 控制节点 前言在上一篇文章中我们学会了通过键盘和 GUI 控制面板手动控制 ROS2 中的小海龟Turtlesim。但在实际的机器人开发中我们需要的是自动化控制。本文将手把手教你如何使用Python编写一个 ROS2 节点让小海龟自动执行“画圆”的动作。我们将深入理解 ROS2 的话题通信机制Topic并掌握Publisher发布者的编写与配置。️ 一、 环境准备与功能包创建首先我们需要在工作空间Workspace中创建一个专门用于存放 Python 代码的功能包Package。打开终端进入你的工作空间源码目录以ros2_ws为例cd~/ros2_ws/src使用ros2 pkg create命令创建一个名为my_turtle_control的 Python 功能包ros2 pkg create --build-type ament_python my_turtle_control 提示--build-type ament_python指定了构建类型为 Python这对于纯脚本开发的节点来说是最轻量级的选择。 二、 编写控制逻辑代码接下来我们需要编写核心逻辑。为了让小海龟动起来我们需要向/turtle1/cmd_vel话题发布速度指令。1. 创建脚本文件进入功能包的 Python 模块目录cdmy_turtle_control/my_turtle_control使用nano编辑器创建并编辑move_straight.py文件nanomove_straight.py2. 粘贴代码将以下代码复制进去。这段代码定义了一个节点它会持续发送线速度和角速度从而形成圆周运动。importrclpyfromrclpy.nodeimportNodefromgeometry_msgs.msgimportTwistclassDrawCircle(Node):def__init__(self):super().__init__(draw_circle_node)# 创建一个发布者向 /turtle1/cmd_vel 话题发布 geometry_msgs/msg/Twist 消息self.publisher_self.create_publisher(Twist,/turtle1/cmd_vel,10)# 设置定时器每 0.1 秒10Hz调用一次 timer_callbackself.timerself.create_timer(0.1,self.timer_callback)self.get_logger().info(开始画圆节点已启动...)deftimer_callback(self):msgTwist()# 设置线速度 (m/s)msg.linear.x2.0# 设置角速度 (rad/s)这就构成了圆周运动msg.angular.z1.0self.publisher_.publish(msg)defmain(argsNone):rclpy.init(argsargs)nodeDrawCircle()try:rclpy.spin(node)exceptKeyboardInterrupt:passfinally:# 停止时发送速度为0的消息防止海龟停不下来stop_msgTwist()node.publisher_.publish(stop_msg)node.destroy_node()rclpy.shutdown()if__name____main__:main()按Ctrl O保存然后按Ctrl X退出编辑器。⚙️ 三、 配置入口点 (Setup.py)这是新手最容易忽略的一步。在 ROS2 Python 包中必须显式声明哪个文件是可以被ros2 run执行的脚本。回到功能包根目录cd~/ros2_ws/src/my_turtle_control编辑setup.pynanosetup.py找到entry_points字段修改如下注意格式entry_points{console_scripts:[# 格式可执行文件名 包名.模块名:函数名draw_circle my_turtle_control.move_straight:main,],},按Ctrl X保存并退出。 四、 编译与运行1. 编译工作空间回到工作空间根目录进行编译cd~/ros2_ws colcon build --packages-select my_turtle_control2. 加载环境编译完成后必须 source 一下才能识别到新生成的节点sourceinstall/setup.bash3. 启动仿真器 (终端 1)打开第一个终端运行小海龟仿真界面ros2 run turtlesim turtlesim_node4. 启动控制节点 (终端 2)打开第二个终端记得也要 source 环境然后运行你的脚本source~/ros2_ws/install/setup.bash ros2 run my_turtle_control draw_circle此时你应该能看到小海龟开始在屏幕上转圈了 五、 验证与调试为了确认我们的节点确实在发送数据可以打开第三个终端进行验证# 查看当前所有话题ros2 topic list# 实时查看 cmd_vel 话题的数据流ros2 topicecho/turtle1/cmd_vel如果终端疯狂输出linear和angular的数值说明通信链路完全打通。 总结通过本教程你完成了 ROS2 开发的几个关键里程碑创建了标准的 Python 功能包。理解了Twist消息类型线速度角速度。掌握了setup.py中console_scripts的配置方法。成功实现了机器人的开环控制。下一步你可以尝试修改代码中的linear.x和angular.z数值观察海龟运动轨迹的变化或者尝试让它走正方形要是想继续进阶需要我帮你写个“走正方形”的代码吗