ROS2【节点】
ROS2【节点】
第一个C++节点
#include "rclcpp/rclcpp.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(),"你好C++节点");
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
【代码解释】
(1)
argc:命令行参数的个数
argv:存储具体的命令行参数内容
(2)init初始化并分配资源
(3)make_shared
传入节点名 node
构造对象rclcpp::node
返回该对象的智能指针
(4)RCLCPP_INFO宏定义调用节点日志记录器输出日志
(5)spin:启动节点并不断循环检测处理事件
(6)shutdown:清理资源
功能包组织C++节点
创建指令
ros2 pkg create:创建功能包
demo_cpp_pkg:功能包名字
--build-type ament_cmake:指定功能包构建类型为ament_cmake
--license Apache-2.0:声明功能包开源协议
【提前添加依赖】
ros2 pkg create demo_cpp_topic --build-type ament_cmake
--dependencies rclcpp geometry_msgs turtlesim //添加依赖
--license Apache-2.0
->CMakeList.txt里会有
# find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(turtlesim REQUIRED)
CMakeLists.txt
find_package(ament_cmake REQUIRED)
//创建ament_cmake功能包:在后面使用ament相关指令
find_package(rclcpp REQUIRED)
//查找rclcpp头文件和库
add_executable(cpp_node src/cpp_node.cpp)
//添加可执行文件
//为cpp_node添加依赖:包含库文件+链接头文件
ament_target_dependencies(cpp_node rclcpp)
=target_include_directories(cpp_node PUBLIC${rclcpp_INCLUDE_DIRS})
+target_link_libraries(cpp_node ${rclcpp_LIBRARIES})
install(TARGETS
cpp_node
DESTINATION lib/${PROJECT_NAME})
//将cpp_node复制到install目录
在清单文件packages.xml
中添加对rclcpp依赖声明
<license>...
<depend>rclcpp</depend>
<test_depend>...
工作空间:代码编写规范
mkdir -p chapt2_ws/src
-p:递归创建
开发过程中在src同级目录下编写colcon build