news 2026/5/5 9:42:55

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/5/5 9:42:08

这次终于选对!最强的AI论文平台 —— 千笔·专业论文写作工具

你是否曾为论文选题发愁&#xff0c;绞尽脑汁却毫无头绪&#xff1f;是否在深夜面对空白文档&#xff0c;思绪枯竭、无从下笔&#xff1f;又是否反复修改仍对内容不满意&#xff0c;查重率屡屡告急&#xff1f;论文写作的每一步都像是一场挑战&#xff0c;而你可能需要一个真正…

作者头像 李华
网站建设 2026/5/4 23:18:35

具身认知的机器人实现:从哲学思想到计算框架的演进路径

点击 “AladdinEdu&#xff0c;你的AI学习实践工作坊”&#xff0c;注册即送-H卡级别算力&#xff0c;沉浸式云原生集成开发环境&#xff0c;80G大显存多卡并行&#xff0c;按量弹性计费&#xff0c;教育用户更享超低价。 引言&#xff1a;认知科学的范式革命 20世纪中叶&…

作者头像 李华
网站建设 2026/5/1 17:30:21

2026年大模型入门指南(小白/程序员必看,建议收藏)

2025-2026这一年多&#xff0c;大模型彻底褪去实验室的高冷光环&#xff0c;从前沿技术研究&#xff0c;走进了每一位程序员、学生、转行者的日常工作和职业规划里。无论是后端开发想拓展技能边界&#xff0c;还是零基础小白想抓住AI风口&#xff0c;大模型都成了绕不开的热门赛…

作者头像 李华