首页
关于
Search
1
Golang闭包
10 阅读
2
ROS2(二):第一个自定义 Python 节点从编写到运行
9 阅读
3
Golang并发
7 阅读
4
Golang匿名函数
3 阅读
5
Golang Time包入门
2 阅读
默认分类
编程
ROS
登录
Search
tqtqtq
累计撰写
11
篇文章
累计收到
1
条评论
首页
栏目
默认分类
编程
ROS
页面
关于
搜索到
3
篇与
的结果
2026-03-18
ROS2(二):第一个自定义 Python 节点从编写到运行
ROS2(二):第一个自定义 Python 节点从编写到运行1. 本节目标完成一个“最小可运行”的 ROS2 Python 节点,并理解完整开发流程:在包内编写节点代码在 setup.py 注册可执行入口使用 colcon build 构建source install/setup.bash 加载工作区使用 ros2 run 启动节点2. 为什么要这样做在 ROS2 中,Python 文件“能运行”不代表“能被 ROS2 识别运行”。要让命令 ros2 run <包名> <可执行名> 成立,必须满足:代码文件存在于 Python 包目录setup.py 中 console_scripts 注册了入口映射包已构建并安装到 install/当前终端已加载工作区环境这就是 ROS2 工程化流程和普通 Python 脚本最大的区别。3. 代码放在哪里本节包名:py_pubsub_demo 节点文件位置:src/py_pubsub_demo/py_pubsub_demo/hello_node.py说明:第一个 py_pubsub_demo 是 ROS2 包目录第二个 py_pubsub_demo 是 Python 模块目录4. 最小节点代码结构解析本节节点包含 4 个关键部分:4.1 继承 Nodeclass HelloNode(Node):只有继承 Node,这个类才具有 ROS2 节点能力(日志、定时器、参数等)4.2 给节点命名super().__init__('hello_node')节点名是 ROS 图中的身份标识运行后可通过 ros2 node list 看到 /hello_node4.3 定时器 + 回调self.timer = self.create_timer(1.0, self.timer_callback)每 1 秒调用一次回调函数回调中用日志打印“第几次问候”4.4 标准启动入口 main()rclpy.init() node = HelloNode() rclpy.spin(node) node.destroy_node() rclpy.shutdown()init:初始化 ROS2spin:让节点持续处理回调destroy_node + shutdown:优雅退出5. setup.py 入口注册是关键步骤在 setup.py 里注册:'hello_node = py_pubsub_demo.hello_node:main'含义拆解:左边 hello_node:ros2 run 时使用的可执行名右边 py_pubsub_demo.hello_node:main:模块路径 py_pubsub_demo/hello_node.py调用函数 main没有这一步,ros2 run 找不到自定义节点。6. 标准开发流程(建议记成固定模板)每次写完节点,按以下顺序执行:cd ~/ros2_wssource /opt/ros/jazzy/setup.bashcolcon buildsource install/setup.bashros2 run py_pubsub_demo hello_node这是初学阶段最稳定的流程。7. 本节实际验证结果构建成功后,节点按 1Hz 输出日志:你好 ROS2,第 0 次问候你好 ROS2,第 1 次问候你好 ROS2,第 2 次问候说明以下链路全部成功:代码可执行入口可解析ROS2 节点运行正常定时器回调生效8. 常见错误与定位错误 1:No executable found原因:setup.py 没注册或注册名写错。 检查:console_scripts 是否包含正确映射。错误 2:改了代码但运行还是旧行为原因:改完没重新 build / 没 source install。 修复:重新执行“构建 + source install”。错误 3:colcon: command not found原因:构建工具未安装。 修复:安装 python3-colcon-common-extensions。9. 本节知识点小结本节完成后应能明确:ROS2 Python 节点是一个继承 Node 的类节点常见执行模型是“定时器 + 回调”setup.py 的 console_scripts 决定 ros2 run 能否找到入口ROS2 开发是“写代码 → 注册入口 → 构建 → source → 运行”的工程闭环
2026年03月18日
9 阅读
0 评论
0 点赞
2026-03-18
ROS2(一) :从 0 到 1 理解 Node、Topic、Package 与工作区
ROS2(一) :从 0 到 1 理解 Node、Topic、Package 与工作区1. 适用环境系统:Ubuntu 24.04(WSL2)ROS2:Jazzy Jalisco语言:Python 3.12场景:无实体机器人,先在仿真/命令行环境建立基础2. ROS2 到底是什么ROS2 不是一门编程语言,也不是传统意义上的操作系统,而是机器人软件开发框架。可以把它理解为:通信框架 + 工程组织方式 + 机器人生态工具集初学阶段最关键的是先掌握通信模型。3. 三个最核心概念(入门必会)3.1 Node(节点)节点是最小功能单元。一个节点通常只做一件事。例如:发布传感器数据、接收控制指令、打印日志类比:一个团队成员负责一个岗位职责3.2 Topic(话题)话题是节点之间传输数据的“频道”。发布者向话题发送消息订阅者从话题接收消息类比:群聊频道3.3 Message(消息)消息是话题里传输的数据格式。例如:std_msgs/msg/String含义:发送的是字符串类型数据4. 首次验证通信链路:talker 与 /chatter典型验证路径:启动发布者(talker)查看节点列表查看话题列表查看话题详情(类型、发布者数量、订阅者数量)观察重点:/talker 出现在节点列表,说明节点在运行/chatter 出现在话题列表,说明通信通道已建立Publisher count: 1,说明有发布者在发数据5. 为什么经常要执行 source setup.bashsource /opt/ros/jazzy/setup.bash 的作用是给当前终端加载 ROS2 环境变量。若系统已在 ~/.bashrc 自动配置,可能新终端可直接使用 ros2 命令;但在团队项目、容器环境、CI 环境中,手动 source 仍是高频操作。建议形成习惯:进入新 ROS2 会话先确认环境需要时明确执行 source6. 工作区(Workspace)结构标准 ROS2 工作区通常包含四个目录:src/:源码目录(只在这里写代码)build/:构建中间产物install/:安装结果(运行依赖这里)log/:构建日志核心原则:日常开发主要修改 src/,其他目录由工具自动维护。7. 第一个 Python 包的创建与注册在 src/ 下创建包:包名示例:py_pubsub_demo构建类型:ament_python创建后会自动生成:package.xml:包元信息(名称、版本、依赖)setup.py:Python 安装与入口配置resource/:包索引资源<包名>/__init__.py:Python 包目录test/:模板测试文件构建成功后,可通过包列表命令检索到该包,说明工作区链路已打通。8. 常见问题:colcon: command not found原因:系统未安装构建工具链。 解决:安装 python3-colcon-common-extensions,再执行构建。
2026年03月18日
1 阅读
0 评论
0 点赞
2026-03-17
ROS 2 初识学习笔记
ROS 2 初识学习笔记1. 什么是 ROS 2?ROS (Robot Operating System) 并不是真正意义上的操作系统(如 Linux 或 Windows),而是一个运行在操作系统之上的中间件(Middleware)和软件框架。从后端开发的视角来看,ROS 2 本质上是一个面向机器人的分布式微服务架构。它提供了一套标准化的通信机制、硬件抽象层和一系列工具,让你能把复杂的机器人系统(比如感知、决策、控制)拆解解耦成独立运行的小模块。与 ROS 1 相比,ROS 2 最大的改进是引入了 DDS (Data Distribution Service) 协议,实现了真正的去中心化(移除了单点故障的 Master 节点),并提升了实时性和安全性。2. 核心通信机制 (重点)ROS 2 的核心在于各个模块之间如何交换数据。理解以下四个概念是掌握 ROS 2 的关键:2.1 节点 (Node)定义:ROS 2 中最小的执行单元。一个节点负责执行一个具体的任务(例如:读取激光雷达数据、控制电机转动)。特性:节点之间是互相独立的进程,可以运行在同一台机器上,也可以跨网络运行在不同的机器上。类比:一个 Node 就相当于一个独立的 Go 微服务实例或一个 Java Spring Boot 应用。2.2 话题 (Topic)通信模式:发布/订阅 (Publish / Subscribe)。特点:单向、异步、多对多。数据流是连续的,发布者只管发,不关心谁在听;订阅者只管收,不关心谁在发。适用场景:高频、连续的数据流(如摄像头画面、传感器实时数据)。类比:非常类似后端的 Kafka 或 RabbitMQ 的 Pub/Sub 模式。2.3 服务 (Service)通信模式:请求/响应 (Request / Response)。特点:双向、同步(或基于回调的异步)、一对一。客户端发送请求,服务端处理后返回结果。适用场景:快速执行的、离散的、需要确认结果的操作(如“查询当前电池电量”、“打开特定传感器”)。类比:标准的 HTTP RESTful API 或 gRPC 调用。2.4 动作 (Action)通信模式:目标 (Goal) + 反馈 (Feedback) + 结果 (Result)。特点:双向、异步、可抢占/可取消。它是基于 Topic 和 Service 组合出来的高级封装。适用场景:耗时较长、且执行期间需要实时了解进度的复杂任务(如“导航到指定坐标点”、“机械臂抓取物体”)。类比:提交一个耗时的异步任务(Job),客户端可以通过长连接或轮询不断获取当前执行进度,并在最终完成时拿到结果。同时,客户端随时有权取消这个 Job。3. 工程与构建系统在实际开发中,ROS 2 有自己的一套代码组织和编译规范。3.1 工作空间 (Workspace)定义:一个包含 ROS 2 代码的特定目录结构。通常包含 src(源码目录)、build(中间编译文件)、install(最终的可执行文件和库)、log(日志)四个子目录。3.2 功能包 (Package)定义:ROS 2 代码组织的基本单元。一个 Package 可以包含多个相关的 Node。语言支持:原生支持 C++ (rclcpp) 和 Python (rclpy)。你可以用 Python 写高层逻辑 Node,用 C++ 写底层性能敏感的 Node,它们可以无缝通信。类比:类似于 Go 的 module 或者是 Java 的 Maven/Gradle 模块。3.3 编译工具 (Colcon)定义:ROS 2 的官方构建工具。用于遍历工作空间下的所有 Package 并解决依赖进行编译。常用命令:colcon build类比:相当于后端的 go build 或 mvn clean install。4. 运行与调试概念Setup/Source 环境:在运行任何 ROS 2 程序前,必须在终端执行 source /opt/ros/<版本>/setup.bash 以及自己工作空间的 setup.bash。这类似于配置后端的环境变量或 $GOPATH,用来告诉系统去哪里找包和依赖。CLI 工具:ROS 2 提供了强大的命令行工具(如 ros2 node list, ros2 topic echo),方便开发者不写代码就能监听网络中的数据走向,极大地降低了调试分布式系统的难度。
2026年03月17日
1 阅读
0 评论
0 点赞