节点内容

#include "rclcpp/rclcpp.hpp"  //ROS2的客户端库
 
int main(int argc, char * argv[])
	  // argc 是一个整数 (int),代表参数的个数 ;argv 是一个字符串数组 (char 类型的指针数组)。 这些字符串就是从命令行传递给程序的**实际参数**。
{
    rclcpp::init(argc, argv);
    auto node = std::make_shared<rclcpp::Node>("cpp_node");  
    //这段代码创建了一个ROS2节点,名称是 "cpp_node",并且用智能指针 `node` 来管理这个节点
    //std::`是命名空间(namespace)`std` 的作用域限定符,表示“这是标准库里的东西”。
    //make_shared创建指针指针的类是Node 
    RCLCPP_INFO(node->get_logger(), "Hello, ROS2 from C++17!");
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}

不能用 g++ 编译(rclcpp 不在 g++ 的系统默认目录中)
需要将 rclcpp 添加到目录中

这里用 CmakeLists. Txt 完成

cmake_minimum_required(VERSION 3.8)
project(ros2_cpp)
 
add_executable(ros2_cpp_node ros2_cpp_node.cpp)#用 ros2cppnode.cpp 这个代码文件,帮我生成一个叫做 ros2cppnode 的可执行文件
 
#添加依赖(查找+包含)
find_package(rclcpp REQUIRED)  #查找对应头文件与库文件(REQUIRED:依赖是必须的)
message(STATUS  ${rclcpp_INCLUDE_DIRS}) #头文件及rclcpp依赖的头文件
message(STATUS  ${rclcpp_LIBRARIES}) #头文件及rclcpp依赖的库文件
 
target_include_directories(ros2_cpp_node PUBLIC ${rclcpp_INCLUDE_DIRS}) #头文件路径包含()
target_link_libraries(ros2_cpp_node ${rclcpp_LIBRARIES}) #库文件链接

cmake .

make

从而,生成节点可执行文件 ros2_cpp_node, 命令 ./ros2_cpp_node 以运行

通过 ros2 node list , 可以显示该节点