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
image

posted @ 2024-12-09 19:56  White_ink  阅读(75)  评论(0)    收藏  举报