《ROS 2机器人开发从入门到实践》 2.3 使用功能包组织C++节点

发布时间:2026/5/20 22:50:54

《ROS 2机器人开发从入门到实践》 2.3 使用功能包组织C++节点 简介上一小节我们用功能包组织了python节点这节我们把C节点也装进功能包。参考资料参考资料均来自于鱼香ROS社区创始人小鱼资源如下①【《ROS 2机器人开发从入门到实践》 2.3 使用功能包组织C节点】 https://www.bilibili.com/video/BV1Pb42177BJ?spm_id_from333.788.videopod.sectionsvd_source7e745558295b053ab0826d478802cb22②全章节源码https://github.com/fishros/ros2bookcode③参考书籍《ROS 2机器人开发从入门到实践》2.3.1 在功能包中编写C节点打开VScode进入chapt2目录输入如代码清单2-21的命令ros2 pkg create是用于创建功能包的命令demo_cpp_pkg是功能包的名字......详见上一小节。最后创建的功能包文件夹展开如图2-11。在demo_cpp_pkg下的src添加cpp_node.cpp在文件中输入如下代码。#include rclcpp/rclcpp.hpp int main(int argc, char **argv) { rclcpp::init(argc, argv); auto node std::make_sharedrclcpp::Node(cpp_node); RCLCPP_INFO(node-get_logger(), 你好 C 节点); rclcpp::spin(node); rclcpp::shutdown(); return 0; }上述代码即为2.1.2节的代码可直接用。但编写完后还需注册节点与添加依赖编辑CMakeLists.txt最终添加的内容及位置如代码清单2-23所示。代码清单中添加内容的详细作用与参数意义如下表代码指令详细作用参数含义详解核心用途 / 场景find_package(rclcpp REQUIRED)让 CMake 系统自动查找并加载 ROS2 的 rclcpp 核心库告诉编译器我需要用到 ROS2 C 核心功能•rclcpp要查找的包名ROS2 C 核心库•REQUIRED强制要求找不到 rclcpp 就直接报错停止编译必须放在最前面用于引入依赖库没有这行编译器找不到 ROS2 头文件 / 库add_executable(cpp_node src/cpp_node.cpp)创建一个可执行文件把源码编译成可以直接运行的程序•cpp_node生成的可执行文件名最终运行用的名字•src/cpp_node.cpp源代码路径即要编译的 C 文件定义程序入口一个节点对应一个可执行文件ament_target_dependencies(cpp_node rclcpp)为可执行文件链接依赖库让程序能调用 rclcpp 的函数、类、接口•cpp_node要配置的目标可执行文件必须和上面名字一致•rclcpp要链接的依赖库名称解决链接错误没有这行代码能编译但会报「未定义引用」简单来讲find_package和add_executable用于查找依赖和添加可执行文件ament_cmake提供的ament_target_dependencies用于添加依赖。最后添加的是install指令该指令把编译好的可执行文件复制到install/demo_cpp_pkg/lib/demo_cpp_pkg目录中这样用ros2 run才能找到节点。构建功能包之前还需要添加对rclcpp的依赖声明完整声明如代码清单2-24所示。dependreclcpp/depend用于声明当前功能包依赖rclcpp库完成这些即可用以下命令构建功能包。colcon build功能详见上一节。运行后在chapt2/install/demo_cpp_pkg/lib/demo_cpp_pkg/目录就可以看到cpp_node可执行文件了。接下来就可以运行该文件依次输入代码清单2-26中的两条命令。source指令的作用详见上一节即让ROS2能够找到demo_cpp_pkg和其下的节点。运行完指令后节点已成功启动至此我们完成了在C功能包中编写节点。但colcon build其实也是的调用cmake和make完成对代码的编译的。2.3.2 功能包结构分析C功能包结构如下图。对目录结构分析如下表。文件 / 文件夹类型详细作用说明include/demo_cpp_pkg文件夹专门存放 C 头文件.h/.hpp遵循 ROS2 的包内目录规范避免头文件路径冲突。src文件夹存放 C 源代码文件.cpp比如你的节点实现代码cpp_node.cpp都放在这里是编译的核心代码目录。cpp_node.cpp文件C 源文件包含 ROS2 节点的业务逻辑实现是最终要被编译成可执行程序的代码文件。CMakeLists.txt文件CMake 构建系统的配置文件负责定义编译规则查找依赖库、添加可执行文件、设置链接依赖、配置安装路径等。LICENSE文件功能包的许可证文件默认是 Apache-2.0 协议声明了代码的开源使用权限和约束条款。package.xml文件ROS2 功能包的清单文件定义了包名、版本号、依赖关系、作者信息等元数据是构建和依赖管理的核心文件。

相关新闻