文章目录
- Python 创建节点
- C++
- 创建python 功能包
Python 创建节点
# 1. 导入ros2 python客户端库importrclpy# 导入节点基类,所有ROS2节点都要继承/使用它fromrclpy.nodeimportNode# 定义主函数defmain():# 2. 初始化ROS2运行环境(相当于启动ros2底层)rclpy.init()# 3. 创建一个节点,节点名字叫 python_node# 在ROS2中程序最小单元就是「节点」,一个程序 = 一个节点node=Node('python_node')# 4. 打印一条日志输出到终端,info是普通信息日志# 等价于 print(),但是是ROS标准日志,可以设置日志等级、保存日志文件node.get_logger().info('Python Node')# 5. 保持节点存活,进入自旋监听状态(等待消息、定时器事件)# rclpy.spin 会卡住程序,不会直接往下执行rclpy.spin(node)# 6. 关闭ROS2环境,释放资源(spin被Ctrl+C中断之后才会走到这一行)rclpy.shutdown()# python程序入口,运行这个脚本时自动执行 main()if__name__=='__main__':main()C++
#include<iostream>#include"rclcpp/rclcpp.hpp"using namespace std;intmain(intargc,char**argv){rclcpp::init(argc,argv);autonode=make_shared<rclcpp::Node>("cpp_node");RCLCPP_INFO(node->get_logger(),"C++ Node");rclcpp::spin(node);rclcpp::shutdown();return0;}CMakeList
cmake_minimum_required(VERSION 3.8) project(ros2_cpp) # 查找ROS依赖 find_package(rclcpp REQUIRED) # 生成可执行程序 add_executable(ros2_cpp_node ros2_cpp_node.cpp) # 打印调试信息(STATUS 拼写正确) message(STATUS "${rclcpp_INCLUDE_DIRS}") message(STATUS "${rclcpp_LIBRARIES}") # 指定头文件路径(指令带下划线,名字不能空格) target_include_directories(ros2_cpp_node PUBLIC ${rclcpp_INCLUDE_DIRS} ) # 链接库文件 target_link_libraries(ros2_cpp_node ${rclcpp_LIBRARIES} )创建python 功能包
- 先进入工作空间 src 目录(标准规范)
cd ~/learnRos2_ws/src
- 创建 Python 类型功能包
ros2 pkg create --build-type ament_python my_python_pkg
my_python_pkg:你的功能包名字,自定义--build-type ament_python:指定是 Python 包(区别于 C++ 的ament_cmake)
执行完自动生成目录结构:
my_python_pkg/ ├── my_python_pkg/ # Python源码文件夹 │ ├── __init__.py ├── package.xml ├── setup.py # 配置入口节点(关键文件) ├── setup.cfg └── resource/- 编写 python 节点文件
写入示例代码hello_node.py
importrclpyfromrclpy.nodeimportNodeclassHelloNode(Node):def__init__(self):super().__init__("hello_python")self.get_logger().info("ROS2 Python节点启动成功")defmain():rclpy.init()node=HelloNode()rclpy.spin(node)rclpy.shutdown()if__name__=="__main__":main()- 修改 setup.py 注册可执行入口(必须!否则 ros2 run 找不到)
entry_points={ 'console_scripts': [ 'hello = my_python_pkg.hello_node:main', ], },格式:节点别名 = 包名.文件名:main函数
5.package.xml 添加依赖(必须补)
打开package.xml,在<buildtool_depend>ament_python</buildtool_depend>下面添加:
<depend>rclpy</depend>- 返回工作空间根目录编译
cd ~/learnRos2_ws
colcon build --packages-select my_python_pkg
- 刷新环境变量
source install/setup.bash
- 运行节点
ros2 run my_python_pkg hello