西宁网站建设天锐科技,上海模板网站建设,网站建设 官网,wordpress主机xamppROS2 入门应用 请求和应答#xff08;C#xff09;1. 创建功能包2. 创建源文件2.1. 服务端2.2. 客户端3. 添加依赖关系4. 添加编译信息4.1. 添加搜索库4.2. 增加可执行文件4.3. 增加可执行文件位置5. 编译和运行1. 创建功能包
在《ROS2 入门应用 工作空间》中已创建和加载了…
ROS2 入门应用 请求和应答C1. 创建功能包2. 创建源文件2.1. 服务端2.2. 客户端3. 添加依赖关系4. 添加编译信息4.1. 添加搜索库4.2. 增加可执行文件4.3. 增加可执行文件位置5. 编译和运行1. 创建功能包
在《ROS2 入门应用 工作空间》中已创建和加载了ros2_ws工作空间 在《ROS2 入门应用 元功能包C》中已创建和加载了my_package功能包 那么就创建一个独立的cpp_srvcli功能包来做服务的请求和应答的功能
cd ~/ros2_ws/src
ros2 pkg create --build-type ament_cmake cpp_srvcli --dependencies rclcpp example_interfaces--dependencies可选参数将会自动在package.xml和CMakeLists.txt中添加必要的依赖行
依赖example_interfaces包将会使用到example_interfaces的srv文件两位整数求和服务
int64 a
int64 b
---
int64 sum2. 创建源文件
进入cpp_srvcli功能包的src文件夹
cd ~/ros2_ws/src/cpp_srvcli/src2.1. 服务端
新建add_two_ints_server.cpp服务端源文件
nano add_two_ints_server.cpp复制以下内容到文件中
#include rclcpp/rclcpp.hpp
#include example_interfaces/srv/add_two_ints.hpp#include memory/* 求和函数 */
void add(const std::shared_ptrexample_interfaces::srv::AddTwoInts::Request request,std::shared_ptrexample_interfaces::srv::AddTwoInts::Response response)
{/* 从请求中添加两个整数并将总和提供给响应 */response-sum request-a request-b;/* 使用日志通知控制台其服务状态 */RCLCPP_INFO(rclcpp::get_logger(rclcpp), Incoming request\na: %ld b: %ld, request-a, request-b);RCLCPP_INFO(rclcpp::get_logger(rclcpp), sending back response: [%ld], (long int)response-sum);
}int main(int argc, char **argv)
{/* 初始化ROS2 */rclcpp::init(argc, argv);/* 定义服务端节点add_two_ints_server */std::shared_ptrrclcpp::Node node rclcpp::Node::make_shared(add_two_ints_server);/* 创建服务名为add_two_ints服务函数为add的service服务端 */rclcpp::Serviceexample_interfaces::srv::AddTwoInts::SharedPtr service node-create_serviceexample_interfaces::srv::AddTwoInts(add_two_ints, add);/* 通知准备就绪 */RCLCPP_INFO(rclcpp::get_logger(rclcpp), Ready to add two ints.);/* 运行节点 */rclcpp::spin(node);/* 退出ROS2 */rclcpp::shutdown();
}2.2. 客户端
新建add_two_ints_client.cpp客户端源文件
nano add_two_ints_client.cpp复制以下内容到文件中
#include rclcpp/rclcpp.hpp
#include example_interfaces/srv/add_two_ints.hpp#include chrono
#include cstdlib
#include memory/* 方便表示时间 */
using namespace std::chrono_literals;int main(int argc, char **argv)
{/* 初始化ROS2 */rclcpp::init(argc, argv);/* 校验 */if (argc ! 3) {RCLCPP_INFO(rclcpp::get_logger(rclcpp), usage: add_two_ints_client X Y);return 1;}/* 定义客户端节点add_two_ints_client */std::shared_ptrrclcpp::Node node rclcpp::Node::make_shared(add_two_ints_client);/* 创建服务名为add_two_ints的client客户端 */rclcpp::Clientexample_interfaces::srv::AddTwoInts::SharedPtr client node-create_clientexample_interfaces::srv::AddTwoInts(add_two_ints);/* 创建请求request */auto request std::make_sharedexample_interfaces::srv::AddTwoInts::Request();request-a atoll(argv[1]);request-b atoll(argv[2]);/* 搜索服务节点间隔1s */while (!client-wait_for_service(1s)) {if (!rclcpp::ok()) {RCLCPP_ERROR(rclcpp::get_logger(rclcpp), Interrupted while waiting for the service. Exiting.);return 0;}/* 如果找不到将会继续等待 */RCLCPP_INFO(rclcpp::get_logger(rclcpp), service not available, waiting again...);}/* 获得应答并显示其状态 */auto result client-async_send_request(request);// Wait for the result.if (rclcpp::spin_until_future_complete(node, result) rclcpp::FutureReturnCode::SUCCESS){RCLCPP_INFO(rclcpp::get_logger(rclcpp), Sum: %ld, result.get()-sum);} else {RCLCPP_ERROR(rclcpp::get_logger(rclcpp), Failed to call service add_two_ints);}/* 退出ROS2 */rclcpp::shutdown();return 0;
}3. 添加依赖关系
创建功能包时已通过--dependencies可选参数自动在package.xml中添加必要的依赖行
dependrclcpp/depend
dependexample_interfaces/depend4. 添加编译信息
在CMakeLists.txt编译文件中 4.1. 添加搜索库
创建功能包时已通过--dependencies可选参数自动在CMakeLists.txt中添加必要的搜索库依赖行
find_package(rclcpp REQUIRED)
find_package(example_interfaces REQUIRED)4.2. 增加可执行文件
然后再增加可执行文件 src/add_two_ints_server.cpp命名为server可执行文件 src/add_two_ints_client.cpp命名为client可执行文件 并添加目标依赖关系
add_executable(server src/add_two_ints_server.cpp)
ament_target_dependencies(server rclcpp example_interfaces)add_executable(client src/add_two_ints_client.cpp)
ament_target_dependencies(client rclcpp example_interfaces)4.3. 增加可执行文件位置
最后增加可执行文件位置这样ROS2就可以找到现在的可执行文件
install(TARGETSserverclientDESTINATION lib/${PROJECT_NAME})5. 编译和运行
进入工作空间根目录
cd ~/ros2_ws在编译之前检查缺失的依赖项可跳过
rosdep install -i --from-path src --rosdistro humble -y编译
colcon build --packages-select cpp_srvcli打开一个新终端运行服务端节点
ros2 run cpp_srvcli server# [INFO] [rclcpp]: Ready to add two ints.打开一个新终端运行客户端节点
ros2 run cpp_srvcli client 1 2# [INFO] [rclcpp]: Sum: 3谢谢 文章转载自: http://www.morning.mqpdl.cn.gov.cn.mqpdl.cn http://www.morning.yhgbd.cn.gov.cn.yhgbd.cn http://www.morning.czcbl.cn.gov.cn.czcbl.cn http://www.morning.rzcmn.cn.gov.cn.rzcmn.cn http://www.morning.fkyqt.cn.gov.cn.fkyqt.cn http://www.morning.frfnb.cn.gov.cn.frfnb.cn http://www.morning.plchy.cn.gov.cn.plchy.cn http://www.morning.bgnkl.cn.gov.cn.bgnkl.cn http://www.morning.xwlmg.cn.gov.cn.xwlmg.cn http://www.morning.lkwyr.cn.gov.cn.lkwyr.cn http://www.morning.knlgk.cn.gov.cn.knlgk.cn http://www.morning.qmpbs.cn.gov.cn.qmpbs.cn http://www.morning.rrxmm.cn.gov.cn.rrxmm.cn http://www.morning.qctsd.cn.gov.cn.qctsd.cn http://www.morning.hxsdh.cn.gov.cn.hxsdh.cn http://www.morning.jjwt.cn.gov.cn.jjwt.cn http://www.morning.tbhlc.cn.gov.cn.tbhlc.cn http://www.morning.hwcln.cn.gov.cn.hwcln.cn http://www.morning.lmrcq.cn.gov.cn.lmrcq.cn http://www.morning.qzpw.cn.gov.cn.qzpw.cn http://www.morning.yrhsg.cn.gov.cn.yrhsg.cn http://www.morning.fnhxp.cn.gov.cn.fnhxp.cn http://www.morning.txmlg.cn.gov.cn.txmlg.cn http://www.morning.qznkn.cn.gov.cn.qznkn.cn http://www.morning.snmth.cn.gov.cn.snmth.cn http://www.morning.mdgb.cn.gov.cn.mdgb.cn http://www.morning.drzkk.cn.gov.cn.drzkk.cn http://www.morning.dzfwb.cn.gov.cn.dzfwb.cn http://www.morning.gwqq.cn.gov.cn.gwqq.cn http://www.morning.xlbtz.cn.gov.cn.xlbtz.cn http://www.morning.tkkjl.cn.gov.cn.tkkjl.cn http://www.morning.qzzmc.cn.gov.cn.qzzmc.cn http://www.morning.itvsee.com.gov.cn.itvsee.com http://www.morning.qrpx.cn.gov.cn.qrpx.cn http://www.morning.qmkyp.cn.gov.cn.qmkyp.cn http://www.morning.zxfr.cn.gov.cn.zxfr.cn http://www.morning.nsppc.cn.gov.cn.nsppc.cn http://www.morning.mstrb.cn.gov.cn.mstrb.cn http://www.morning.bpwz.cn.gov.cn.bpwz.cn http://www.morning.wqpr.cn.gov.cn.wqpr.cn http://www.morning.qqnp.cn.gov.cn.qqnp.cn http://www.morning.pfnwt.cn.gov.cn.pfnwt.cn http://www.morning.wgxtz.cn.gov.cn.wgxtz.cn http://www.morning.nyplp.cn.gov.cn.nyplp.cn http://www.morning.wrlqr.cn.gov.cn.wrlqr.cn http://www.morning.znsyn.cn.gov.cn.znsyn.cn http://www.morning.gynkr.cn.gov.cn.gynkr.cn http://www.morning.tfei69.cn.gov.cn.tfei69.cn http://www.morning.bntgy.cn.gov.cn.bntgy.cn http://www.morning.dfwkn.cn.gov.cn.dfwkn.cn http://www.morning.rzrbw.cn.gov.cn.rzrbw.cn http://www.morning.lsnnq.cn.gov.cn.lsnnq.cn http://www.morning.dwkfx.cn.gov.cn.dwkfx.cn http://www.morning.cnfxr.cn.gov.cn.cnfxr.cn http://www.morning.gwdnl.cn.gov.cn.gwdnl.cn http://www.morning.tmtrl.cn.gov.cn.tmtrl.cn http://www.morning.mspkz.cn.gov.cn.mspkz.cn http://www.morning.ltqzq.cn.gov.cn.ltqzq.cn http://www.morning.cwznh.cn.gov.cn.cwznh.cn http://www.morning.pmdnx.cn.gov.cn.pmdnx.cn http://www.morning.lbbyx.cn.gov.cn.lbbyx.cn http://www.morning.mhnd.cn.gov.cn.mhnd.cn http://www.morning.jrkzk.cn.gov.cn.jrkzk.cn http://www.morning.fmjzl.cn.gov.cn.fmjzl.cn http://www.morning.ymwnc.cn.gov.cn.ymwnc.cn http://www.morning.bxbnf.cn.gov.cn.bxbnf.cn http://www.morning.kbqbx.cn.gov.cn.kbqbx.cn http://www.morning.xmhpq.cn.gov.cn.xmhpq.cn http://www.morning.rtryr.cn.gov.cn.rtryr.cn http://www.morning.bxbkq.cn.gov.cn.bxbkq.cn http://www.morning.rhmt.cn.gov.cn.rhmt.cn http://www.morning.tgczj.cn.gov.cn.tgczj.cn http://www.morning.cmzgt.cn.gov.cn.cmzgt.cn http://www.morning.mtbth.cn.gov.cn.mtbth.cn http://www.morning.ptdzm.cn.gov.cn.ptdzm.cn http://www.morning.bqrd.cn.gov.cn.bqrd.cn http://www.morning.xfxnq.cn.gov.cn.xfxnq.cn http://www.morning.wnrcj.cn.gov.cn.wnrcj.cn http://www.morning.trrpb.cn.gov.cn.trrpb.cn http://www.morning.lnbcx.cn.gov.cn.lnbcx.cn