一、为什么用C++
Python是解释性语言,其运行效率比较慢,在实际的开发中并不占优势,所以我们要使用C++。
插件安装:

二、用C++编写文件ros2_cpp
#include "rclcpp/rclcpp.hpp" (include 导入,以下每一行意义可以参考"鱼香ros2(四)......有相关介绍")
int main(int argc,char **argv) (int argc,char **argv是程序的入口参数)
{
rclcpp::init(argc,argv); ("::"这个是域名解析符,init()初始化,argc还有argv后续在对节点信息进行操作时可以使用,比如修改节点名字等)
auto node=std::make_shared<rclcpp::Node>("cpp_node"); (auto:自动类型推导,node:变量名,可以随便取一个,创建rclcpp下的Node的共享指针,cpp_node:节点名称,自定义)
RCLCPP_INFO(node->get_logger(),"你好 C++节点!"); (打印日志,node:上一步定义的变量名,","逗号后面跟打印内容)
rclcpp:spin(node);
rclcpp::shutdown();
return 0;
}
main函数里的参数argc及argv
报错问题: #include "rclcpp/rclcpp.hpp" 找不到库,但是iostream却能找到。因为iostream是系统默认库,可以找到,但是rclcpp不是系统库里的,所以要将crlcpp库导入到我们的整个工程中来,使用CMakeLists来处理。

三、使用CMakeLists.txt来编译ros2_cpp

1、CMakeLists.txt文件编写
cmake_minimum_required(VERSION3.8)
project(ros2_cpp)
add_executable(ros2_cpp_node ros2_cpp_node.cpp)
注意,关于make后报错问题(找不到文件,rclcpp/rclcpp.hpp)

1) #查找rclcpp头文件和库文件的路径,"REQUIRED"依赖是必须的
find_package(rclcpp REQUIRED)
#测试打印使用:打印状态,以下message()函数可以不加在txt文件里,只是为了方便自己找信息使用的。"rclcpp_LIBRARIES"库文件及rclcpp依赖的库文件,"rclcpp_INCULUDE_DIRS"头文件及rclcpp依赖的头文件,如果 find_package(rclcpp REQUIRED) 不加,则无法找到对应文件,这也是为什么要使用find_package(rclcpp REQUIRED)的原因,我们用的是rclcpp则需要去加载对应的头文件及库文件才能使用。
message(STATUS ${rclcpp_INCLUDE_DIRS})
message(STATUS ${rclcpp_LIBRARIES})
2)#给可执行文件包包含头文件,上一步找到对应文件后,要将文件的路径给到我们的.cpp文件,这样对应ros2_cpp_node.cpp文件才能使用rclcpp。
"ros2_cpp_node":可执行文件名,与你在上面编写的 add_executable(ros2_cpp_node ros2_cpp_node.cpp)第一个参数名一致。
"${rclcpp_INCLUDE_DIRS}":头文件的路径。
"PUBLIC":语法要求。
target_include_directories(ros2_cpp_node PUBLIC ${rclcpp_INCLUDE_DIRS})
(这一句加了后,我们的可执行文件ros2_cpp_node.cpp就添加了这个rclcpp_INCLUDE_DIRS头文件的依赖)
3)#给可执行文件链接库文件,链接库依赖也需要给到我们可执行文件。
"ros2_app_node":可执行文件名。
${rclcpp_LIBRARIES}:链接库。
target_link_libraries(ros2_app_node ${rclcpp_LIBRARIES})
2、终端执行命令
cmake .
make
有对应可执行文件了,直接使用执行

使用./ my_cpp_node (你自己取的什么名字就用什么名字)

四、查看节点信息(同上一节)
#查看节点列表(当前执行的节点)
ros2 node list

#查看某个节点信息
ros2 node info /cpp_node

五、其他注意事项
1、必须修改CMakeLists.txt文件名
为什么修改?因为CMakeLists.txt文件会被接下来要学习的ros2构建工具搜索和误用,为了接下来学习能够顺利进行,需要将CMakeLists.txt文件删除或者换个名字。

2、安装C++插件

插件安装后,.cpp文件报错问题,先点波浪线旁边黄色小灯泡,按下图做选择:

在跳转页面找到"包含路径"框→输入(安装ros2的目录) /opt/ros/humble/include/**

配置好了,就不会报错了,而且还会生成一个.json的配置文件,这个配置文件,下一个项目的时候你可以直接复制过去,就不需要手动配地址了。
