1 准备工作
1.1 创建/编译工作空间
- 创建工作空间
mkdir -p ~/dev_ws/src cd ~/dev_ws/src
1. 2 创建功能包
ros2 pkg create learning01_write_a_node --build-type ament_cmake --dependencies rclcpp
可以看到目录结构如下:
1. 3 创建节点
在learing01_write_a_node/src下创建一个learning01_test.cpp文件
2 编码
src/learing01_write_a_node/src/learning01_test.cpp
#include "rclcpp/rclcpp.hpp" int main(int argc, char **argv) { rclcpp::init(argc, argv); /*产生一个Wang2的节点*/ auto node = std::make_shared<rclcpp::Node>("wang2"); // 打印一句自我介绍 RCLCPP_INFO(node->get_logger(), "hello world"); /* 运行节点,并检测退出信号*/ rclcpp::spin(node); rclcpp::shutdown(); return 0; }
src/learing01_write_a_node/CMakeLists.txt,在CmakeLists.txt最后一行加入下面代码
add_executable(learning01_write_a_node src/learning01_test.cpp) ament_target_dependencies(learning01_write_a_node rclcpp) install(TARGETS learning01_write_a_node DESTINATION lib/${PROJECT_NAME} )
3 编译运行
cd ~/dev_ws/ colcon build source install/setup.sh ros2 run learning01_write_a_node learning01_write_a_node
运行截图如下:
4 概念补充介绍
4.1 启动节点指令
ros2 run <package_name> <executable_name>
如:ros2 run turtlesim turtlesim_node
4.2 工作空间
工作空间是包含若干个功能包的目录。
一个工作空间下可以有多个功能包,一个功能包可以有多个节点存在
4.3 功能包
功能包可以理解为存放节点的地方,ROS2中功能包根据编译方式的不同分为三种类型。
- ament_python,适用于python程序
- cmake,适用于C++
- ament_cmake,适用于C++程序,是cmake的增强版
功能包常见CLI(command line interface)
# 创建功能包 ros2 pkg create <package-name> --build-type {cmake,ament_cmake,ament_python} --dependencies <依赖名字> # 列出可执行文件 ros2 pkg executables <package_name> # 列出所有的包 ros2 pkg list