互联网站备案管理工作方案 工信部网站关键字字数
互联网站备案管理工作方案 工信部,网站关键字字数,网站建设 熊掌号,商城网站建设 数商云在ROS2 Jazzy中#xff0c;自定义C库及其应用需要遵循ROS2的规范#xff0c;以确保库能够正确编译、安装并被其他包调用。以下是一个详细的范例#xff0c;包括自定义C库的创建、编译以及在另一个包中的应用。
一、自定义C库的创建与编译 创建库包 创建一个新的ROS2工作空间…在ROS2 Jazzy中自定义C库及其应用需要遵循ROS2的规范以确保库能够正确编译、安装并被其他包调用。以下是一个详细的范例包括自定义C库的创建、编译以及在另一个包中的应用。一、自定义C库的创建与编译创建库包创建一个新的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编写库头文件在include/ros2_cpp_lib/目录下创建头文件ros2_cpp_lib.hpp#ifndefROS2_CPP_LIB_HPP#defineROS2_CPP_LIB_HPP#includerclcpp/rclcpp.hppnamespaceros2_cpp_lib{classros2_cpp_lib:publicrclcpp::Node{public:ros2_cpp_lib(conststd::stringnode_name);~ros2_cpp_lib();voidsum(inta,intb);};}// namespace ros2_cpp_lib#endif// ROS2_CPP_LIB_HPP编写库源文件在src/目录下创建源文件ros2_cpp_lib.cpp#includeros2_cpp_lib/ros2_cpp_lib.hppnamespaceros2_cpp_lib{ros2_cpp_lib::ros2_cpp_lib(conststd::stringnode_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,ab);}}// namespace ros2_cpp_lib配置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()编译库返回工作空间根目录并编译cd~/ros2_ws colcon build --packages-up-to ros2_cpp_lib二、在另一个包中应用自定义库创建应用包在src/目录下创建一个新的包用于应用自定义库ros2 pkg create --build-type ament_cmake --license Apache-2.0 ros2_cpp_lib_demos --dependencies rclcpp ros2_cpp_lib编写应用节点在ros2_cpp_lib_demos/src/目录下创建节点文件demo_node.cpp#includerclcpp/rclcpp.hpp#includeros2_cpp_lib/ros2_cpp_lib.hppclassDemoNode:publicrclcpp::Node{public:DemoNode():Node(demo_node){autolib_nodestd::make_sharedros2_cpp_lib::ros2_cpp_lib(lib_node);lib_node-sum(3,4);}};intmain(intargc,char**argv){rclcpp::init(argc,argv);rclcpp::spin(std::make_sharedDemoNode());rclcpp::shutdown();return0;}配置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()编译并运行应用返回工作空间根目录并编译cd~/ros2_ws colcon build --packages-up-to ros2_cpp_lib_demos运行应用节点sourceinstall/setup.bash ros2 run ros2_cpp_lib_demos demo_node