1. 启程
1.1 编写简单的Python节点:

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

先导入rclpy库,再从rclpy库的node模块中导入Node类rclpy.init()用于分配资源,然后创建了python_node的节点。
node.get_logger()用于获取日志记录器然后调用info输出内容,
2025-01-23T17:17:43.png
spin用于启动节点,它会不断地循环检查其运行的节点是否有新的话题数据等,直到节点被关闭,然后rclpy.shutdown()用于清除分配的资源并确认节点是否已关闭。
通过python3 1.py运行节点,然后再通过ros2 node list显示出刚才创建的节点。
2025-01-23T17:07:47.png
1.2 功能包:
通过上述可以看出我们可以编写一个节点,如果需要编写多个节点且需要对其进行管理,此时单个操作将变得麻烦,而此时ros2给我们提供了管理节点的工具--功能包。
首先通过ros2 pkg create <包名>创建功能包,可以看到主文件夹多出来一个demo_pkg的功能包。后面的--build-type ament_python表示指定功能包的构建类型为ament_python
2025-01-23T18:04:43.png
打开此功能包发现其中有
2025-01-23T18:05:04.png
demo_pkg:
该目录与功能包名相同,用于存储节点代码,而此目录中存在__init__.py是python包的标识文件,默认为空。
resouce:
该目录可以放置一些资源而其中的demo_pkg为了提供功能包标识,无需更改。
test:
用于存放测试文件。暂不了解。
package.xml:
该文件为功能包的清单文件,文件中声明了功能包的名称,版本标号,功能包管理者,依赖,构建类型。
2025-01-24T06:20:11.png
setup.cfg:
普通的文本文件,放置构建python包时的配置。
setup.py:
脚本文件,含有setup()函数,用于指定如何构建和安装python包,例如添加节点时需要在其中声明可执行文件的名称与对应的函数。
2025-01-24T06:25:50.png
1.3 在功能包中运行python文件
首先便是在demo_pkg目录下创建节点文件,并下代码如下:
2025-01-24T06:36:14.png
可以发现此代码缺少调用main函数的代码,而运行main函数则需要在setup.py中告诉功能包main函数位置
2025-01-24T06:39:33.png
当执行pyhon_node时就相当于执行demo_pkg目录下python_node文件中的main函数,同时在package.xml中添加依赖,

TF

最后修改:2025 年 07 月 13 日
如果觉得我的文章对你有用,请随意赞赏