クライアントに戻る結果、サーバーの追加の実装
クライアントは、二つの数を計算し、サービスに発行されるようになります。
1.カスタムサービスデータ
AddTwoInts.srv:SRVファイルを作成します
int64型 Int64のB --- Int64の合計
上記データ要求で、以下は---によって分離されたレスポンスデータであります
package.xmlのファイルを開き、追加
<build_depend> message_generation </ build_depend> <build_export_depend> message_generation </ build_export_depend> <exec_depend> message_runtime </ exec_depend>
CMakeLists.txtにファイルを開きます。
find_package(尾状花必要なコンポーネント
message_generationの
roscpp
)
add_service_files(FILES
AddTwoInts.srv
)
2.サーバコード
#include " ROS / ros.h " の#include " learning_server / AddTwoInts.h " // サービス回调函数输入RESはREQの输出 BOOL追加(learning_server :: AddTwoInts ::リクエスト&reqは、 learning_server :: AddTwoInts ::レスポンス&RES) { res.sum = req.a + req.b。 返す 真; } int型のmain(int型 ARGC、チャー ** ARGV) { // ROS节点初始化 ROS :: INIT(ARGC、ARGV、" add_server " )。 //ノードハンドル作成 ROS :: NodeHandle N-を; // サーバーの名前add_two、登録されたコールバック関数の追加()を作成 ROS :: ServiceServerサービス= n.advertiseService(「add_two 」、[追加]を); // に似たコールバック関数、待ちますポーリング方式 ROS ::スピン(); 戻り 0 ; }
3.クライアントコード
#include <cstdlib> の#include " ROS / ros.h " の#include " learning_server / AddTwoInts.h " INTメイン(int型 ARGC、CHAR * ARGV []) { // ROSノード初期化 ROS :: INIT(ARGC、ARGV、" add_client " ); IF(ARGC =!3。 ) { リターン 1 ; } // ノードハンドルの作成 、ROS :: N-NodeHandle // 、要求サービス・クライアントを作成し 、ROSを:: ServiceClientクライアント= n.serviceClient <learning_server :: AddTwoIntsを>("add_two " ); //は、サービスの種類のSRVカスタム作成 learning_server :: AddTwoIntsのSRVを、 srv.request.a =環礁(ARGV [ 1 ]); srv.request.b =環礁(ARGV [ 2 ]); // リリースサービス要求、プロセスの遮断が発生する可能性が IF (Client.call(SRV)) { ROS_INFO(" SUM:%のLD "(ロング INT )srv.response.sum); } 他 { ROS_ERROR(" Faile " ); リターン 1。; } 戻り 0 。 }