• ros2 服务通讯示范源代码2023年9月27


    1. //server端
    2. #include "rclcpp/rclcpp.hpp"
    3. #include "example_interfaces/srv/add_two_ints.hpp"
    4. #include
    5. #include
    6. #include
    7. using namespace std::chrono_literals;
    8. int main(int argc,char ** argv)
    9. {
    10. rclcpp::init(argc,argv);
    11. auto pnode=std::make_shared("clientNode");
    12. auto pclient=pnode->create_client("service1"); //
    13. auto prequest=std::make_shared();
    14. prequest->a=atoll(argv[1]);
    15. prequest->b=atoll(argv[2]);
    16. while(!pclient->wait_for_service(3s))
    17. {
    18. RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "service not availabel,waiting again...");
    19. }
    20. auto result=pclient->async_send_request(prequest);
    21. if(rclcpp::spin_until_future_complete(pnode,result)==rclcpp::FutureReturnCode::SUCCESS)
    22. {
    23. RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"result=%d",result.get()->sum );
    24. }
    25. else
    26. {
    27. RCLCPP_INFO(rclcpp::get_logger("rclcpp"),"failed to call service im sorry");
    28. };
    29. rclcpp::shutdown();
    30. return 0;
    31. }

    1. //client端
    2. #include "rclcpp/rclcpp.hpp"
    3. #include "example_interfaces/srv/add_two_ints.hpp"
    4. #include "memory.h"
    5. void add(const std::shared_ptr prequest,
    6. std::shared_ptr presponse)
    7. {
    8. presponse->sum=prequest->a+prequest->b;
    9. RCLCPP_INFO( rclcpp::get_logger("rclcpp"),"a=%d,b=%d,result:%d",prequest->a,prequest->b,presponse->sum );
    10. }
    11. int main(int argc,char ** argv)
    12. {
    13. rclcpp::init(argc,argv);
    14. //define a node
    15. auto pnode=std::make_shared("serverNode");
    16. auto pservice=pnode->create_service("service1",&add);
    17. rclcpp::spin(pnode);
    18. rclcpp::shutdown();
    19. }

    1. //cmakelists.txt
    2. cmake_minimum_required(VERSION 3.8)
    3. project(server)
    4. if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    5. add_compile_options(-Wall -Wextra -Wpedantic)
    6. endif()
    7. # find dependencies
    8. find_package(ament_cmake REQUIRED)
    9. find_package(rclcpp REQUIRED)
    10. find_package(example_interfaces REQUIRED)
    11. add_executable(server_cpp src/server_cpp.cpp)
    12. add_executable(client_cpp src/client_cpp.cpp)
    13. ament_target_dependencies(server_cpp rclcpp example_interfaces)
    14. ament_target_dependencies(client_cpp rclcpp example_interfaces)
    15. if(BUILD_TESTING)
    16. find_package(ament_lint_auto REQUIRED)
    17. # the following line skips the linter which checks for copyrights
    18. # comment the line when a copyright and license is added to all source files
    19. set(ament_cmake_copyright_FOUND TRUE)
    20. # the following line skips cpplint (only works in a git repo)
    21. # comment the line when this package is in a git repo and when
    22. # a copyright and license is added to all source files
    23. set(ament_cmake_cpplint_FOUND TRUE)
    24. ament_lint_auto_find_test_dependencies()
    25. endif()
    26. install(TARGETS
    27. server_cpp
    28. client_cpp
    29. DESTINATION lib/${PROJECT_NAME}
    30. )
    31. ament_package()

    1. //package.xml
    2. "1.0"?>
    3. "http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
    4. "3">
    5. server
    6. 0.0.0
    7. TODO: Package description
    8. "actorsun@todo.todo">actorsun
    9. TODO: License declaration
    10. ament_cmake
    11. rclcpp
    12. example_interfaces
    13. ament_lint_auto
    14. ament_lint_common
    15. <export>
    16. ament_cmake
    17. export>

  • 相关阅读:
    mysql报错Table ‘xxxx‘ doesn‘t exist
    mysql求当月有多少天
    Python数学计算工具2、判断质数、遍历质数
    人工智能数学基础--概率与统计7:学习中一些术语的称呼或表示变化说明以及独立事件的一些补充推论
    Spring Boot+Netty+Websocket实现后台向前端推送信息
    mongodb、mysql、redis 区别
    识别出图像中的人脸区域
    2022最新SpringCloud面试题附完整答案
    java高级编程day23【谷】
    Leetcode刷题详解——被围绕的区域
  • 原文地址:https://blog.csdn.net/geniusChinaHN/article/details/133368420