【ROS2】节点的含义及编写(python和C++)

注:以下内容为鱼香肉丝ROS2课程的内容整理,详细内容可查看其的课程内容。

什么是节点

节点的主要作用是订阅和发布话题、使用服务、配置参数和执行动作等。

其中的话题(topic)、服务(service)、参数(parameter)和动作(action)是ROS2的四大核心通信机制。

怎么用Python编写节点

直接编写步骤

① 新建文件ros2_python_node.py,并编写如下内容

python 复制代码
import rclpy
from rclpy.node import Node

def main():
    rclpy.init()
    node = Node("python_node")
    node.get_logger().info('hello')
    rclpy.spin(node)
    rclpy.shutdown()

if __name__=="__main__":
    main()

上述代码中:

**rclpy:**ROS2提供的Python版本客户端库

Node:rclpy库的node模块中的类

rclpy.init():为通信分配资源

**node = Node("python_node"):**实例化Node类

**node.get_logger().info('hello'):**通过node实例调用get_logger()获取日志记录器,并使用日志记录器的info方法输出"hello"

**rclpy.spin(node):**启动节点node,然后不断循环检查node是否接收到了新的话题数据等事件

**rclpy.shutdown():**清理分配的资源,确认节点是否关闭

② 使用Python执行节点

在终端中输入以下指令即可运行。

python 复制代码
python3 ros2_python_node.py

然后可以使用以下指令查看目前的节点列表,注意需要新开一个终端。

python 复制代码
ros2 node list

关于ros日志函数的解读:

打印日志的函数:node.get_logger().info('')、node.get_logger().warn('')......

可以有不同的配置

其输出是

第一列:表示不同的配置,info、warn之类的

第二列:表示时间戳,表示的是从1970年到现在的时间

第三列:表示节点的名字

第四列:表示打印的内容

日志的格式可以通过修改环境变量RCUTILS_CONSOLE_OUTPUT_FORMAT来修改

使用功能包组织Python节点

功能包:ROS2中用于组织和管理节点的工具,可以直接使用ROS2提供的构建指令对节点进行编译和安装。具体步骤为:

① 在终端中创建功能包

python 复制代码
ros2 pkg create demo_python_pkg --build-type ament-python --license Apache-2.0

ros2 pkg create:ROS2命令行工具pkg模块下用于创建功能包的命令

demo_python_pkg:功能包的名字

--build-type ament_python:表示指定功能包的构建类型为ament_python

--license Apache-2.0:用于声明功能包的开源协议

② 在功能包中编写代码文件

编写位置:在demo_python_pkg/demo_python_pkg下新建一个python文件python_node.py

在文件中输入以下内容:

python 复制代码
import rclpy
from rclpy.node import Node

def main():
    rclpy.init()
    node = Node("python_node")
    node.get_logger().info('hello')
    rclpy.spin(node)
    rclpy.shutdown()

注意上述代码中去除了调用主函数的代码

功能包中调用主函数的方式是:告诉功能包main函数的位置,也就是接下来这步

③ 注册python节点

注册位置:demo_python_pkg/setup.py

此处的setup.py是python中常用的构建配置文件

注册内容:

注意注册时最后的逗号!

④ 添加依赖声明

由于代码中使用了rclpy库,所以需要在ROS2功能包的清单文件"package.xml"下添加依赖信息

添加位置:demo_python_pkg/package.xml

添加内容:<depend>rclpy</depend>

此处的package.xml为**元数据清单文件,**该文件对软件包的属性、状态及外部依赖关系进行了形式化定义。

⑤ 构建功能包

构建位置:该文件目录下的终端

输入命令:colcon build

Colcon:会在当前目录下扫描功能包,并创建与功能包同级的三个子目录

此时文件夹中会多出三个文件夹:

**Build:**构建过程中的中间文件

**Install:**构建结构的文件夹,该文件可以直接复制给别人使用,colcon build命令会在该文件夹中复制一个功能包demo_python_pkg,其中有python_node等可执行文件

**Log:**日志文件

⑥ 设置环境变量

位置:该文件目录下的终端

输入命令:source install/setup.bash

用来自动修改需要修改的环境变量,此环境变量只对当前终端有效,如果切换终端需要重新设置

⑦ 运行节点

位置:该文件目录下的终端

输入命令:ros2 run demo_python_pkg python_node

注意,此处运行的文件是install目录下的文件

相关推荐
灵感菇_8 小时前
Java 锁机制全面解析
java·开发语言
我在人间贩卖青春8 小时前
C++之数据类型的扩展
c++·字符串·数据类型
wazmlp0018873698 小时前
python第三次作业
开发语言·python
娇娇乔木8 小时前
模块十一--接口/抽象方法/多态--尚硅谷Javase笔记总结
java·开发语言
明月醉窗台8 小时前
qt使用笔记六之 Qt Creator、Qt Widgets、Qt Quick 详细解析
开发语言·笔记·qt
wangjialelele8 小时前
平衡二叉搜索树:AVL树和红黑树
java·c语言·开发语言·数据结构·c++·算法·深度优先
深蓝电商API8 小时前
住宅代理与数据中心代理在爬虫中的选择
爬虫·python
苏宸啊8 小时前
C++栈和队列
c++
lili-felicity8 小时前
CANN性能调优与实战问题排查:从基础优化到排障工具落地
开发语言·人工智能
独自破碎E8 小时前
【BISHI15】小红的夹吃棋
android·java·开发语言