中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

越城網(wǎng)站建設(shè)公司陜西網(wǎng)站建設(shè)網(wǎng)絡(luò)公司

越城網(wǎng)站建設(shè)公司,陜西網(wǎng)站建設(shè)網(wǎng)絡(luò)公司,建物流網(wǎng)站,大連哪家公司做網(wǎng)站好ROS2 入門應(yīng)用 請(qǐng)求和應(yīng)答(C)1. 創(chuàng)建功能包2. 創(chuàng)建源文件2.1. 服務(wù)端2.2. 客戶端3. 添加依賴關(guān)系4. 添加編譯信息4.1. 添加搜索庫(kù)4.2. 增加可執(zhí)行文件4.3. 增加可執(zhí)行文件位置5. 編譯和運(yùn)行1. 創(chuàng)建功能包 在《ROS2 入門應(yīng)用 工作空間》中已創(chuàng)建和加載了…

ROS2 入門應(yīng)用 請(qǐng)求和應(yīng)答(C++)

  • 1. 創(chuàng)建功能包
  • 2. 創(chuàng)建源文件
    • 2.1. 服務(wù)端
    • 2.2. 客戶端
  • 3. 添加依賴關(guān)系
  • 4. 添加編譯信息
    • 4.1. 添加搜索庫(kù)
    • 4.2. 增加可執(zhí)行文件
    • 4.3. 增加可執(zhí)行文件位置
  • 5. 編譯和運(yùn)行


1. 創(chuàng)建功能包

在《ROS2 入門應(yīng)用 工作空間》中已創(chuàng)建和加載了ros2_ws工作空間
在《ROS2 入門應(yīng)用 元功能包(C++)》中已創(chuàng)建和加載了my_package功能包
那么就創(chuàng)建一個(gè)獨(dú)立的cpp_srvcli功能包來(lái)做服務(wù)的請(qǐng)求和應(yīng)答的功能

cd ~/ros2_ws/src
ros2 pkg create --build-type ament_cmake cpp_srvcli --dependencies rclcpp example_interfaces

--dependencies可選參數(shù)將會(huì)自動(dòng)在package.xmlCMakeLists.txt中添加必要的依賴行

依賴example_interfaces包,將會(huì)使用到example_interfacessrv文件,兩位整數(shù)求和服務(wù):

int64 a
int64 b
---
int64 sum

2. 創(chuàng)建源文件

進(jìn)入cpp_srvcli功能包的src文件夾

cd ~/ros2_ws/src/cpp_srvcli/src

2.1. 服務(wù)端

新建add_two_ints_server.cpp服務(wù)端源文件

nano add_two_ints_server.cpp

復(fù)制以下內(nèi)容到文件中:

#include "rclcpp/rclcpp.hpp"
#include "example_interfaces/srv/add_two_ints.hpp"#include <memory>/* 求和函數(shù) */
void add(const std::shared_ptr<example_interfaces::srv::AddTwoInts::Request> request,std::shared_ptr<example_interfaces::srv::AddTwoInts::Response> response)
{/* 從請(qǐng)求中添加兩個(gè)整數(shù),并將總和提供給響應(yīng) */response->sum = request->a + request->b;/* 使用日志通知控制臺(tái)其服務(wù)狀態(tài) */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);/* 定義服務(wù)端節(jié)點(diǎn)add_two_ints_server */std::shared_ptr<rclcpp::Node> node = rclcpp::Node::make_shared("add_two_ints_server");/* 創(chuàng)建服務(wù)名為add_two_ints,服務(wù)函數(shù)為add的service服務(wù)端 */rclcpp::Service<example_interfaces::srv::AddTwoInts>::SharedPtr service =node->create_service<example_interfaces::srv::AddTwoInts>("add_two_ints", &add);/* 通知準(zhǔn)備就緒 */RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "Ready to add two ints.");/* 運(yùn)行節(jié)點(diǎn) */rclcpp::spin(node);/* 退出ROS2 */rclcpp::shutdown();
}

2.2. 客戶端

新建add_two_ints_client.cpp客戶端源文件

nano add_two_ints_client.cpp

復(fù)制以下內(nèi)容到文件中:

#include "rclcpp/rclcpp.hpp"
#include "example_interfaces/srv/add_two_ints.hpp"#include <chrono>
#include <cstdlib>
#include <memory>/* 方便表示時(shí)間 */
using namespace std::chrono_literals;int main(int argc, char **argv)
{/* 初始化ROS2 */rclcpp::init(argc, argv);/* 校驗(yàn) */if (argc != 3) {RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "usage: add_two_ints_client X Y");return 1;}/* 定義客戶端節(jié)點(diǎn)add_two_ints_client */std::shared_ptr<rclcpp::Node> node = rclcpp::Node::make_shared("add_two_ints_client");/* 創(chuàng)建服務(wù)名為add_two_ints的client客戶端 */rclcpp::Client<example_interfaces::srv::AddTwoInts>::SharedPtr client =node->create_client<example_interfaces::srv::AddTwoInts>("add_two_ints");/* 創(chuàng)建請(qǐng)求request */auto request = std::make_shared<example_interfaces::srv::AddTwoInts::Request>();request->a = atoll(argv[1]);request->b = atoll(argv[2]);/* 搜索服務(wù)節(jié)點(diǎn),間隔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;}/* 如果找不到,將會(huì)繼續(xù)等待 */RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "service not available, waiting again...");}/* 獲得應(yīng)答并顯示其狀態(tài) */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. 添加依賴關(guān)系

創(chuàng)建功能包時(shí),已通過(guò)--dependencies可選參數(shù)自動(dòng)在package.xml中添加必要的依賴行

<depend>rclcpp</depend>
<depend>example_interfaces</depend>

4. 添加編譯信息

CMakeLists.txt編譯文件中


4.1. 添加搜索庫(kù)

創(chuàng)建功能包時(shí),已通過(guò)--dependencies可選參數(shù)自動(dòng)在CMakeLists.txt中添加必要的搜索庫(kù)依賴行

find_package(rclcpp REQUIRED)
find_package(example_interfaces REQUIRED)

4.2. 增加可執(zhí)行文件

然后,再增加可執(zhí)行文件,
src/add_two_ints_server.cpp命名為server可執(zhí)行文件,
src/add_two_ints_client.cpp命名為client可執(zhí)行文件,
并添加目標(biāo)依賴關(guān)系:

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. 增加可執(zhí)行文件位置

最后,增加可執(zhí)行文件位置,這樣ROS2就可以找到現(xiàn)在的可執(zhí)行文件:

install(TARGETSserverclientDESTINATION lib/${PROJECT_NAME})

5. 編譯和運(yùn)行

進(jìn)入工作空間根目錄

cd ~/ros2_ws

在編譯之前檢查缺失的依賴項(xiàng)(可跳過(guò)):

rosdep install -i --from-path src --rosdistro humble -y

編譯:

colcon build --packages-select cpp_srvcli

打開一個(gè)新終端,運(yùn)行服務(wù)端節(jié)點(diǎn):

ros2 run cpp_srvcli server# [INFO] [rclcpp]: Ready to add two ints.

打開一個(gè)新終端,運(yùn)行客戶端節(jié)點(diǎn):

ros2 run cpp_srvcli client 1 2# [INFO] [rclcpp]: Sum: 3

謝謝

http://m.risenshineclean.com/news/63918.html

相關(guān)文章:

  • 煙臺(tái)專業(yè)做網(wǎng)站公司有哪些微博推廣技巧
  • 純文本網(wǎng)站連接北京建站公司
  • 禁用wordpress插件更新網(wǎng)站關(guān)鍵詞優(yōu)化公司
  • 自個(gè)做網(wǎng)站教程濰坊快速網(wǎng)站排名
  • 上海專業(yè)網(wǎng)站推廣公司長(zhǎng)春網(wǎng)站優(yōu)化咨詢
  • 滄州網(wǎng)站建設(shè)制作設(shè)計(jì)優(yōu)化百度瀏覽器電腦版
  • 網(wǎng)站設(shè)計(jì)建設(shè)公司廣州seo優(yōu)化排名公司
  • 在線做漢字頭像的網(wǎng)站合肥瑤海區(qū)
  • 風(fēng)水網(wǎng)站開發(fā)登錄注冊(cè)入口
  • 網(wǎng)站換空間 百度快照倒退一年多 怎么回事百度搜索指數(shù)排行榜
  • 做網(wǎng)站資源知乎seo關(guān)鍵詞挖掘工具
  • 網(wǎng)站開發(fā)主管待遇優(yōu)化大師安卓版
  • 建正建設(shè)官方網(wǎng)站友情鏈接有什么用
  • 湖南做網(wǎng)站問(wèn)磐石網(wǎng)絡(luò)專業(yè)鞏義網(wǎng)絡(luò)推廣外包
  • 宿州做企業(yè)網(wǎng)站學(xué)生制作個(gè)人網(wǎng)站
  • 重慶網(wǎng)絡(luò)公司網(wǎng)站建設(shè)查詢網(wǎng) 域名查詢
  • 成都建筑設(shè)計(jì)公司排名前十雞西seo
  • 做視頻網(wǎng)站的條件抖音seo推廣
  • 網(wǎng)站建設(shè) 軟件開發(fā)站長(zhǎng)之家統(tǒng)計(jì)
  • 亞成成品網(wǎng)站源碼今天的新聞發(fā)布會(huì)
  • 劉淼 網(wǎng)站開發(fā)2022年最新最有效的營(yíng)銷模式
  • 網(wǎng)站降權(quán)處理鏈接制作軟件
  • 一站式做網(wǎng)站技術(shù)鄭州網(wǎng)絡(luò)優(yōu)化實(shí)力樂云seo
  • 優(yōu)秀網(wǎng)站案例泰安百度公司代理商
  • 淘寶客做網(wǎng)站推廣賺錢嗎福州seo兼職
  • 南寧網(wǎng)站建設(shè)推廣優(yōu)化外貿(mào)營(yíng)銷型網(wǎng)站設(shè)計(jì)
  • 做網(wǎng)站收費(fèi)標(biāo)準(zhǔn)惠州百度關(guān)鍵詞優(yōu)化
  • 北京網(wǎng)站建設(shè)公司現(xiàn)狀網(wǎng)頁(yè)開發(fā)需要學(xué)什么
  • c 做網(wǎng)站設(shè)計(jì)關(guān)鍵詞優(yōu)化多少錢
  • 深圳網(wǎng)站建設(shè)營(yíng)銷服務(wù)平臺(tái)濟(jì)南做seo排名