ROS研究ノート(1):ROS用語

XMLRPC

XMLRPC(XML Remote Procedure Call)はRPCプロトコルであり、そのエンコード形式はXMLエンコード形式を採用し、その送信方法はHTTPプロトコルを採用しています。複数のプログラミング言語をサポートしますが、比較的単純で、小さなデータタイプまたはコマンドにのみ使用されます。

マスターノード

マスターノードはノード間の接続と通信を担当し、roscoreコマンドを実行してマスターノードを起動し、他のノードの名前を登録してノード間の通信を確立することができます。マスターノードはXMLRPCを使用して他のノードと通信し、通常は接続を維持しません。つまり、他のノードは情報を登録または要求するときにのみマスターノードとの接続を確立します。ROSが開始されると、マスターノードはユーザーが設定したROS_MASTER_URI変数にリストされているURIアドレスとポート番号を取得します(デフォルトは現在のローカルIPとポート番号11311です)。

ノード

ノードとは、ROSで実行されている最小の処理ユニット、通常は実行可能プログラム(c ++またはPython言語に基づいて記述されている)を指します。ノードの実行中、ノードはその名前をマスターノードに登録し、パブリッシャー/サブスクライバーまたはサービスサーバー/クライアントの名前、メッセージ、URIアドレス、およびポート番号も登録します。この情報に基づいて、各ノードはトピックまたはサービスを使用して他のノードと通信できます。
ノードはXMLRPCを使用してマスターノードと通信し、TCP / IP通信シリーズXMLRPCまたはTCPROSを使用してノード間で通信します。ノード間の接続要求と応答はXMLRPCを使用し、メッセージ通信はTCPROSを使用します(これはマスターノードとは関係なく、ノード間の直接通信です)。URIアドレスはROS_HOSTNAME環境変数の値を使用し、ポート番号は任意の固有の値に設定できます。

rosrun 功能包名称 节点名称(可执行文件名)	#启动节点

フィーチャーパック

関数パッケージは、ROSを構成する基本単位であり、少なくとも1つのノード、または他の関数パッケージの実行に使用されるノードの構成ファイル、およびさまざまな実行に使用されるROS依存ライブラリ、データセット、構成ファイルが含まれます。プロセス。通常、catkin_create_pkgコマンドを使用して作成されます。

catkin_create_pkg 功能包名 依赖项(roscpp rospy std_msgs)

メタ機能パック

メタ関数パッケージは、共通の目的を持つ関数パッケージのコレクションです。

ニュース

メッセージは、int、float、booleanなどのタイプの変数です。ノードはメッセージを介してデータを交換し、それらの通信方法にはTCPROSとUDPROSが含まれます。msgフォルダーは通常、カスタムメッセージファイルを格納するために関数パッケージディレクトリの下に作成されます。

mkdir msg
vim msg/custommsg.msg
//custommsg.msg
float32 a
float32 b

トピック

トピックは一方向の非同期通信メカニズムであり、通常はメッセージを継続的に送信するために使用されます。パブリッシャーノードがトピックのマスターノードに登録した後、トピックを受信したいサブスクライバーノードは、マスターノードでパブリッシャーノードの情報を取得し、パブリッシャーノードとの直接接続を確立してから、トピックを使用して通信します。

公開および公開

投稿とは、トピックの内容に対応するメッセージの形でデータを送信することです。パブリッシャーは、ノードでパブリケーションを実行する個人であることを宣言する個人であり、単一のノードが複数のトピックを発行するパブリッシャーになることができます。

ros::Publisher pub;
ros::NodeHandle nh;
pub = nh.advertise<消息类型>("话题名称",缓冲区大小);
消息类型 消息;
pub.publish(消息);

サブスクライバーとサブスクライバー

サブスクリプションとは、トピックのコンテンツに対応するメッセージの形式でデータを受信することを指します。パブリッシャーと同様に、サブスクライバーはノードでサブスクリプションを実行する個人であることを宣言できます。また、単一のノードが複数のトピックをサブスクライブするサブスクライバーになることもできます。

void callback(消息类型 消息){
    
    }
ros::Subscriber sub;
sub = nh.subscribe("话题名称",size,callback);
ros::spin();//循环监听

サービス

サービスは双方向の同期通信メカニズムであり、トピックとは異なり、サービスクライアントノードがデータ要求を送信したときにのみサービスサーバーノードとの接続を確立します。サービスクライアントが応答を受信すると、サービスは切断されます。つまり、1回限りの性的メッセージ通信です。通常、srvフォルダーは、カスタマイズされたサービスメッセージファイルを格納するために、汎用パッケージのディレクトリに作成されます。

mkdir srv
vim srv/customsrv.srv
//customsrv.srv
float32 a	//请求(Request)
float32 b
---
float32 c	//响应(Response)

サービスサーバー

サービスサーバーは、入力として要求があり、出力として応答(要求と応答の両方がメッセージ)を持つノードです。サービスサーバーは、サービスクライアントから要求を受信すると、指定されたサービスを実行し、その結果を応答としてサービスクライアントに送信します。

bool callback(服务消息类型::Request &请求,服务消息类型::Response &响应){
    
    }
ros::ServiceServer server = nh.advertiseService("服务名称",callback);
ros::spin();

サービスクライアント

サービスクライアントは、要求を出力として受け取り、応答を入力として受け取るノードです。

ros::ServiceClient client = nh.serviceClient<服务消息类型>("服务名称");
服务消息类型 消息;
消息.request.变量名称 = value;//填充请求数据
client.call(消息);
cout << 消息.response.变量名称; //输出响应数据

アクション

アクションは、サービスと同様の非同期双方向通信メカニズムですが、要求の処理後に長い応答が必要であり、途中にフィードバックデータが必要である点が異なります。アクションファイルには、目標、結果、およびフィードバックが含まれます。目標と結果は、要求と応答に対応します。

アクションサーバー

アクションサーバーは、目標を入力として、結果とフィードバックを出力として持つノードです。

アクションクライアント

アクションクライアントは、出力として目標を持ち、入力として結果とフィードバックを持つノードです。

CMakeLists.txt

ROSビルドシステムのcatkinは基本的にCMakeを使用するため、関数パッケージディレクトリのCMakeLists.txtファイルを使用してビルド環境を記述します。

package.xml

関数パッケージ名、作成者、ライセンス、依存関係パッケージなどの情報を含む、XMLエンコード形式で記述されたファイル。

おすすめ

転載: blog.csdn.net/qq_42386127/article/details/98587964