用C++编写节点)
一、为什么用CPython是解释性语言其运行效率比较慢在实际的开发中并不占优势所以我们要使用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 nodestd::make_sharedrclcpp::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_cpp1、CMakeLists.txt文件编写cmake_minimum_required(VERSION3.8)project(ros2_cpp)add_executable(ros2_cpp_node ros2_cpp_node.cpp)注意关于make后报错问题找不到文件rclcpp/rclcpp.hpp1) #查找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的配置文件这个配置文件下一个项目的时候你可以直接复制过去就不需要手动配地址了。