当前位置: 首页 > news >正文

【ROS2学习笔记】节点篇:用python编写一个节点

前言

本系列博文是本人的学习笔记,自用为主,不是教程,学习请移步其他大佬的相关教程。主要学习途径为@鱼香ROS大佬的教程,欢迎各位大佬交流学习,若有错误,轻喷。

典型示例

import rclpy
from rclpy.node import Nodedef main():rclpy.init() node = Node('python_node')node.get_logger().info("hello python node")rclpy.spin(node)rclpy.shutdown()if __name__ == '__main__':main()

代码整体功能

这段代码是一个最简单的 ROS2 节点,它会:

  1. 初始化 ROS2 环境
  2. 创建一个名为 python_node 的节点
  3. 在终端打印一条日志信息 hello python node
  4. 保持节点运行(等待接收任务)
  5. 最后在退出时清理资源

逐行详细解释

# 导入 rclpy 库,这是 ROS2 Python 客户端库的核心,提供了创建和管理节点的功能
import rclpy# 从 rclpy.node 模块中导入 Node 类,Node 类是所有 ROS2 节点的基类
from rclpy.node import Node
# 定义 main 函数,作为节点的入口
def main():
    # 初始化 ROS2 通信环境,让程序与 ROS2 系统建立连接# 必须在创建节点之前调用rclpy.init() 
    # 创建一个节点实例,节点名为 "python_node"# 节点名在 ROS2 网络中必须唯一node = Node('python_node')
    # 通过节点的日志工具输出一条信息# get_logger() 会返回一个日志器对象,可以输出不同级别的日志:debug, info, warn, error, fatal# info 表示一般提示信息,会显示在终端node.get_logger().info("hello python node")
    # 让节点进入“循环等待”状态(阻塞当前线程)# 节点会一直运行,等待处理回调(话题、服务、动作等)# 只有当节点被关闭或收到退出信号时,spin 才会结束rclpy.spin(node)
    # 关闭 ROS2 通信环境,释放资源# 必须在程序退出前调用,否则可能会导致资源泄露rclpy.shutdown()
# 检查当前模块是否是主模块(防止被其他模块导入时执行 main())
if __name__ == '__main__':# 如果是主模块,就执行 main() 函数main()

运行方式(复习)

假设这个文件放在一个 ROS2 包(package)中,编译后可以用:

ros2 run <package_name> <executable_name>

比如:

ros2 run my_py_pkg my_node

运行后终端会输出:

[INFO] [1695800000.123456789] [python_node]: hello python node

小提示

  • rclpy.init() 和 rclpy.shutdown() 必须成对出现
  • rclpy.spin(node) 会让节点保持运行,直到你按下 Ctrl + C
  • 日志系统比 print() 更好,因为它会自动加上时间戳和节点名,方便调试
  • 如果想让节点做更多事情,可以在 spin() 之前注册话题、服务、定时器等回调函数

丰富 ROS2 Python 节点的日志输出

1. 基础日志输出效果

运行简单的 ROS2 Python 节点(如前文中的python_node),日志默认包含日志级别(如INFO)、时间戳节点名自定义信息。示例输出:

[INFO] [1699126991.00948500] [python_node]: hello python node

2. 用环境变量自定义日志格式

通过环境变量 RCUTILS_CONSOLE_OUTPUT_FORMAT,可自定义日志输出的内容(如添加代码函数名行号等调试信息)。

操作示例:
  1. 设置环境变量(终端中执行):
    export RCUTILS_CONSOLE_OUTPUT_FORMAT="{function_name}:{line_number}: {message}"
    
  2. 再次运行 Python 节点,日志输出会变为类似:
    main:7: hello python node
    
    (能直接看到输出日志的函数代码行号,方便调试)

3. 日志格式的可替换字段

RCUTILS_CONSOLE_OUTPUT_FORMAT 支持多种字段,用于精细化控制日志内容,常用字段包括:

  • {function_name}:输出日志的函数名
  • {line_number}:输出日志的代码行号
  • {message}:自定义的日志信息
  • {severity}:日志级别(INFO/WARN/ERROR等)
  • {name}:日志记录器的名称
  • {file_name}:代码文件名
  • {time}:时间戳(秒级)
  • {time_as_nanoseconds}:时间戳(纳秒级)
http://www.dtcms.com/a/415703.html

相关文章:

  • MySQL优化器统计信息配置指南
  • 基于 SciPy 的矩阵运算与线性代数应用详解
  • 网站站点结构的构建yusi主题wordpress
  • 网站建设基本话术苏州网站建设制作设计
  • C语言第十六章程序的环境和预处理
  • 网站后台打开很慢新乡网站建设设计公司哪家好
  • 大连图书馆网站建设要求做外国网站用什么服务器
  • 《Python中的依赖注入实战指南:构建可测试、可扩展的模块化系统》
  • vk汉化网站谁做的钱江摩托车官网
  • 青岛北京网站建设价格苏州 网站制作公司
  • Ripple - 优雅的 TypeScript UI 框架
  • [xboard]11 uboot通用启动流程
  • 做代理稳妥的彩票网站有哪些北京微信网站开发
  • 公司网站建设多少费用济南兴田德润评价辽宁省建设工程信息网网
  • 运营商查浏览网站济南网站建设cn un
  • 怎么做游戏网站的宣传图片如何做的网站手机可以用吗
  • STM32启动流程全面解析:从上电复位到进入main函数
  • 做网站用什么语言数据库图片制作在线生成器免费版
  • 做招标网站 如何企业信息管理系统软件
  • ubuntu22.04安装cuda版本的opencv4.8.1
  • 教师招聘网站长城建设集团建设酒店网站ppt模板下载
  • 用家里的电脑做网站服务器个人网站建设价格套餐
  • golang 在京东低空无人机送货系统中的应用
  • 网站后台管理系统的重要技术指标沈阳网红餐厅
  • 营销型网站的目标是数据推广公司
  • 阿里云建站教程视频wordpress 过滤器
  • 帮人做ppt的网站运营一款app的费用
  • 氛围编程:软件开发新纪元
  • 基于MCU的文件系统
  • 做网站网站代理的犯法么西安互联网公司集中在哪里