ROS2 中的节点是一个通过 ROS2 和其它节点通信的实体。
Python 实现节点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| # -*- coding: utf-8 -*-
import rclpy
from rclpy.node import Node
def main():
# 环境初始化
rclpy.init()
# 创建一个新节点
node = Node("python_node")
# 调度节点运行
rclpy.spin(node)
# 环境去初始化
rclpy.shutdown()
if __name__ == '__main__':
main()
|
C++ 实现节点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| #include "rclcpp/node.hpp"
#include "rclcpp/executors.hpp"
int main(int argc, char* argv[]) {
rclcpp::init(argc, argv);
auto node = std::make_shared<rclcpp::Node>("cpp_node");
RCLCPP_INFO(node->get_logger(), "Hello, C++ Node");
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
|
节点包管理
一个机器人程序一般会有很多节点,ROS2 使用功能包管理节点,功能包的优点:
Python 节点包
创建 python 节点包
1
| ros2 pkg create python_pkg_demo --build-type ament_python --license Apache-2.0
|
创建后包的目录结构:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| - LICENSE
- package.xml
- python_pkg_demo
- __init__.py
- resource
- python_pkg_demo
- setup.cfg
- setup.py
- test
- test_copyright.py
- test_flake8.py
- test_pep257.py
4 directories, 9 files
|
在 python_pkg_demo 目录下新建 python_node.py ,写入上面节点创建的代码
在 setup.py 里加上可执行入口点
1
2
3
4
| entry_points={
'console_scripts': [
'python_node = python_pkg_demo.python_node:main'
],
|
在 package.xml 中声明依赖
使用 colcon build 构建
运行
1
2
| source install/setup.bash
ros2 run python_pkg_demo python_node
|
CPP 节点包
创建 cpp 包
1
| ros2 pkg create cpp_pkg_demo --build-type ament_cmake --license Apache-2.0
|
创建后的文件目录:
1
2
3
4
5
6
| - CMakeLists.txt
- include
- cpp_pkg_demo
- LICENSE
- package.xml
- src
|
将源码文件放到 src 目录下
修改 CMakeLists.txt ,添加下面几行
1
2
3
4
5
6
7
| find_package(rclcpp REQUIRED)
add_executable(cpp_node src/cpp_node)
ament_target_dependencies(cpp_node rclcpp)
install(TARGETS cpp_node DESTINATION lib/${PROJECT_NAME})
|
在 package.xml 添加依赖信息
1
| <depend>rclcpp</depend>
|
colcon build 命令构建包
运行
1
2
| source install/setup.bash
ros2 run cpp_pkg_demo cpp_node
|
工作空间
完整的机器人项目由许多不同的功能模块组成,ROS2 使用工作空间(Workspace)这个概率来组织不同的功能包
创建工作空间
一个工作空间实际上是一个目录,创建一个工作空间就是新建一个目录
创建一个 ros2-code-recipes 存放学习 ros2 的代码
1
| mkdir ros2-code-recipes
|
创建包
功能包的代码一般放到工作空间的 src 目录下 ,可以将前面两个包放到 src 目录下
构建包
运行 colcon build 构建所有包
运行 colcon build --packages-select cpp_pkg_demo 构建指定的包
运行包
和单个包运行一样
1
2
| source install/setup.bash
ros2 run python_pkg_demo python_node
|