news 2026/8/14 21:27:53

ros2 jazzy 自定义c++库及应用详细范例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ros2 jazzy 自定义c++库及应用详细范例

在ROS2 Jazzy中,自定义C++库及其应用需要遵循ROS2的规范,以确保库能够正确编译、安装并被其他包调用。以下是一个详细的范例,包括自定义C++库的创建、编译以及在另一个包中的应用。

一、自定义C++库的创建与编译

  1. 创建库包

    • 创建一个新的ROS2工作空间(如果尚未创建):
    mkdir-p ~/ros2_ws/srccd~/ros2_ws/src
    • 创建一个新的包,用于存放自定义库:
    ros2 pkg create --build-type ament_cmake --license Apache-2.0 ros2_cpp_lib
    • 进入包目录并创建必要的文件夹结构:
    cdros2_cpp_libmkdir-p include/ros2_cpp_lib src
  2. 编写库头文件

    • include/ros2_cpp_lib/目录下创建头文件ros2_cpp_lib.hpp
    #ifndefROS2_CPP_LIB_HPP#defineROS2_CPP_LIB_HPP#include"rclcpp/rclcpp.hpp"namespaceros2_cpp_lib{classros2_cpp_lib:publicrclcpp::Node{public:ros2_cpp_lib(conststd::string&node_name);~ros2_cpp_lib();voidsum(inta,intb);};}// namespace ros2_cpp_lib#endif// ROS2_CPP_LIB_HPP
  3. 编写库源文件

    • src/目录下创建源文件ros2_cpp_lib.cpp
    #include"ros2_cpp_lib/ros2_cpp_lib.hpp"namespaceros2_cpp_lib{ros2_cpp_lib::ros2_cpp_lib(conststd::string&node_name):Node(node_name){RCLCPP_INFO(this->get_logger(),"ros2_cpp_lib_node has been started.");}ros2_cpp_lib::~ros2_cpp_lib(){RCLCPP_INFO(this->get_logger(),"ros2_cpp_lib_node has been stopped.");}voidros2_cpp_lib::sum(inta,intb){RCLCPP_INFO(this->get_logger(),"Sum of %d and %d is %d",a,b,a+b);}}// namespace ros2_cpp_lib
  4. 配置CMakeLists.txt

    • 编辑CMakeLists.txt文件,添加以下内容:
    cmake_minimum_required(VERSION 3.8) project(ros2_cpp_lib) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) endif() # find dependencies find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) # COMPILE add_library(ros2_cpp_lib SHARED src/ros2_cpp_lib.cpp) target_compile_features(ros2_cpp_lib PUBLIC cxx_std_17) target_include_directories(ros2_cpp_lib PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include/ros2_cpp_lib> ) ament_target_dependencies(ros2_cpp_lib PUBLIC rclcpp) # EXPORTS ament_export_targets(export_ros2_cpp_lib HAS_LIBRARY_TARGET) ament_export_dependencies(rclcpp) # INSTALL install( DIRECTORY include/ros2_cpp_lib DESTINATION include ) install( TARGETS ros2_cpp_lib EXPORT export_ros2_cpp_lib ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin INCLUDES DESTINATION include ) if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) set(ament_cmake_uncrustify_FOUND TRUE) set(ament_cmake_xmllint_FOUND TRUE) ament_lint_auto_find_test_dependencies() endif() ament_package()
  5. 编译库

    • 返回工作空间根目录并编译:
    cd~/ros2_ws colcon build --packages-up-to ros2_cpp_lib

二、在另一个包中应用自定义库

  1. 创建应用包

    • src/目录下创建一个新的包,用于应用自定义库:
    ros2 pkg create --build-type ament_cmake --license Apache-2.0 ros2_cpp_lib_demos --dependencies rclcpp ros2_cpp_lib
  2. 编写应用节点

    • ros2_cpp_lib_demos/src/目录下创建节点文件demo_node.cpp
    #include"rclcpp/rclcpp.hpp"#include"ros2_cpp_lib/ros2_cpp_lib.hpp"classDemoNode:publicrclcpp::Node{public:DemoNode():Node("demo_node"){autolib_node=std::make_shared<ros2_cpp_lib::ros2_cpp_lib>("lib_node");lib_node->sum(3,4);}};intmain(intargc,char**argv){rclcpp::init(argc,argv);rclcpp::spin(std::make_shared<DemoNode>());rclcpp::shutdown();return0;}
  3. 配置CMakeLists.txt

    • 编辑ros2_cpp_lib_demos/CMakeLists.txt文件,添加以下内容:
    cmake_minimum_required(VERSION 3.8) project(ros2_cpp_lib_demos) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) endif() # find dependencies find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(ros2_cpp_lib REQUIRED) # COMPILE add_executable(demo_node src/demo_node.cpp) target_compile_features(demo_node PUBLIC cxx_std_17) ament_target_dependencies(demo_node rclcpp ros2_cpp_lib) # INSTALL install(TARGETS demo_node DESTINATION lib/${PROJECT_NAME} ) if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) set(ament_cmake_uncrustify_FOUND TRUE) set(ament_cmake_xmllint_FOUND TRUE) ament_lint_auto_find_test_dependencies() endif() ament_package()
  4. 编译并运行应用

    • 返回工作空间根目录并编译:
    cd~/ros2_ws colcon build --packages-up-to ros2_cpp_lib_demos
    • 运行应用节点:
    sourceinstall/setup.bash ros2 run ros2_cpp_lib_demos demo_node
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 5:25:59

AI代码执行领域爆出首个满分高危漏洞:CVE-2026-22686

2026年开年&#xff0c;AI代码执行领域爆出首个满分高危漏洞CVE-2026-22686&#xff0c;该漏洞直指Node.js生态中专为AI代理设计的enclave-vm沙箱&#xff0c;其CVSS 3.1评分达到10.0满分级别&#xff0c;成为继各类语言解释器漏洞后&#xff0c;AI时代代码隔离场景下的重大安全…

作者头像 李华
网站建设 2026/8/4 20:42:52

配电网的正常与故障重构中的孤岛划分技术探讨

配电网正常重构&#xff0c;孤岛划分及故障重构系统概述 本系统是一个完整的配电网分析与优化工具&#xff0c;主要实现配电网重构、孤岛划分和故障恢复等功能。系统基于MATLAB开发&#xff0c;集成了潮流计算、图论算法和遗传算法等多种技术&#xff0c;能够有效提高配电网的可…

作者头像 李华
网站建设 2026/8/14 6:21:28

氛围炒股概述!

“氛围炒股”是一种将市场整体情绪和投资者心理共识作为核心决策依据的交易理念。它强调&#xff0c;交易的成功与否&#xff0c;关键不在于技术模型本身&#xff0c;而在于应用技术的“氛围”——即市场是否处于容易“得手”的阶段。这种理念认为&#xff0c;市场氛围是投资者…

作者头像 李华
网站建设 2026/8/11 0:03:24

(修复方案)反射型 XSS漏洞

&#xff08;修复方案&#xff09;反射型 XSS漏洞 1. 输入验证2. 输出时编码HTML 上下文编码HTML 属性上下文编码JavaScript 上下文编码 3. 内容安全策略 (CSP)4. 使用安全的框架和库 在处理任何来自客户端的数据时&#xff0c;包括 URL 参数、表单数据、HTTP 头等&#xff0c;…

作者头像 李华
网站建设 2026/8/13 20:15:12

企业微信API实战:外部群推送全链路监控体系开发

​ QiWe开放平台 个人名片API驱动企微自动化&#xff0c;让开发更高效核心能力&#xff1a;为开发者提供标准化接口、快速集成工具&#xff0c;助力产品高效拓展功能场景官方站点&#xff1a;https://www.qiweapi.com团队定位&#xff1a;专注企微API生态的技术服务团队对接通…

作者头像 李华
网站建设 2026/8/12 16:07:06

AI Edge全景报告:通感智算控融合,开启边缘智能新纪元

摘要&#xff1a;本报告基于全球技术演进与产业实践&#xff0c;揭秘AI Edge“DOICT深度融合分布式智能”的核心逻辑——作为通感智算控超融合的超级边缘网络节点&#xff0c;它将支撑2030年智能制造、智能交通、低空经济三大领域5000亿美元市场规模&#xff0c;为从业者、决策…

作者头像 李华