ROS研究ノート(3):ROS通信アーキテクチャ

ディレクトリ

4 ROS通信アーキテクチャ

4.1マスターとノードを起動する

4.1.1マスターを起動します:roscore

4.1.2 启动node : rosrun, roslaunch

4.1.3 rosnodeコマンド

4.2 ROS通信方式

4.2.1トピック

4.2.2サービス

4.2.3パラメータサーバー

4.2.4アクション


4 ROS通信アーキテクチャ

 

ノード: 

ROSの世界では、プロセスの最小単位はノードです。ソフトウェアパッケージには複数の実行可能ファイルを含めることができます。実行可能ファイルは、実行されるとプロセスになり、このプロセスはROSではノードと呼ばれます。チェンから

手続きの観点から見ると、nodeは実行可能ファイルです(通常、C ++コンパイル、Pythonスクリプトによって生成された実行可能ファイル)。

実行され、メモリにロードされます。機能の観点からは、通常、ノードロボットを担当する単一の個人

機能。ロボットの機能モジュールは非常に複雑であるため、すべての機能をノードに集中させないことがよくあります。

分散アプローチを使用します。たとえば、シャーシホイールの動きを制御するノード、カメラを駆動して画像を取得するノード、LIDARを駆動するノード、センサー情報に基づいて経路を計画するノードなどがあります。

 

主人:

 マスターは、ネットワーク通信アーキテクチャ全体における管理センターに相当し、各ノードを管理します。ノードは最初にマスターに登録され、次にマスターはROSプログラム全体にノードを含めます。ノード間の通信も最初にマスターによって「プル」されるため、ポイントツーポイント通信をペアで実行できます。ROSプログラムが開始すると、最初のステップはマスターを最初に開始することであり、ノードマネージャーはノードを処理し、ノードを順番に開始します。

 

4.1マスターとノードを起動する

4.1.1マスターを起動します:roscore

ROSを開始するときは、最初にroscoreコマンドを入力してマスターを開始します。

$ roscore

この時点で、ROSマスターが開始され、rosoutとパラメーターサーバーも開始されます。

ログ出力のノード。その役割は、出力システムエラー、警告などを含む現在のシステムステータスをユーザーに通知することです。

など、ログファイルにログインします。パラメータサーバーはパラメータサーバーであり、ノードではありません

パラメータ設定を保存するサーバーです。ROSノードを実行するたびに、マスターを起動して、ノードを起動して登録できるようにする必要があります。

4.1.2 启动node : rosrun, roslaunch

あなたはrosrun、roslaunchを使うことができます

rosrun コマンドの詳細な使用法は次のとおりです。

$ rosrun [--prefix cmd] [--debug] pkg_name node_name [ARGS]

rosrunは、PACKAGEの下でEXECUTABLEという名前の実行可能プログラムを探し、オプションのパラメーターARGSを渡します。

 

roslaunch コマンド:

roslaunch pkg_name file_name.launch

マスターと複数のノードを同時に起動できます。roslaunchコマンドは、システムのroscoreが実行されているかどうか、つまりノードマネージャーが実行されているかどうかを自動的に検出します。マスターが起動されていない場合は、roslaunchが最初にマスターを起動します。次に、起動のルールに従います。

4.1.3 rosnodeコマンド

  • rosnodeリストは、現在実行中のノード情報をリストします
  • rosnode info node_nameはノードの詳細情報を表示します
  • rosnode kill node_nameノードを終了します
  • rosnode pingテスト接続ノード
  • rosnode machineは、特定のマシンまたはリストマシンで実行されているノードをリストします。
  • rosnodeクリーンアップは到達不能ノードの登録情報をクリアします

rosnodeは、rosnodeコマンドの使用法を表示するのに役立ちます。

4.2 ROS通信方式

ROSの通信方式はROSの中核をなす概念であり、ROSの通信方式には4種類あります。

  • トピック
  • サービス
  • パラメータサービス
  • Actionlibアクションライブラリ

4.2.1トピック

ROSの通信方法の中で、トピックは一般的に使用されるものです。リアルタイムの定期的なメッセージの場合、トピックを使用して送信することをお勧めします。トピックは一種のポイントツーポイント一方向通信方式であり、「ポイント」はノードを指します。つまり、トピックを介してノード間で情報を転送できます。トピックでは、次の手順の初期化プロセスを実行する必要があります。最初に、パブリッシャーノードとサブスクライバーノードの両方がノードマネージャーに登録する必要があります。次に、パブリッシャーがトピックをパブリッシュし、サブスクライバーがマスターのコマンドでトピックにサブスクライブして、サブパブを確立しますコミュニケーション。プロセス全体が一方向であることに注意してください。サブスクライバーは、メッセージを受信すると処理します。通常、このプロセスはコールバックと呼ばれます。いわゆるコールバックは、処理関数を事前に定義すること(コードで記述)です。メッセージがあると処理関数をトリガーし、関数はメッセージを処理します。

トピック通信は、一方向の非同期通信方式です。

その構造の概略図を以下に示します。

4.2.1.1 rostopicコマンド:

  • rostopicリストは、現在のすべてのトピックをリストします
  • rostopic info topic_nameは、トピックの属性情報を表示します
  • rostopic echo topic_nameはトピックの内容を表示します
  • rostopic pub topic_name ...トピックにコンテンツを公開する
  • rostopic bw topic_nameトピックの帯域幅を表示する
  • rostopic hz topic_nameトピックの頻度を表示する
  • rostopic find topic_typeトピックのタイプを見つける
  • rostopic type topic_nameトピックのタイプを表示(msg)

4.2.1.2 msgファイル

メッセージは、トピックコンテンツのデータタイプであり、トピックのフォーマット標準とも呼ばれます。サフィックス.msgが付いたファイルで定義されます。

基本的なmsgデータ型には、bool、int8、int16、int32、int64(およびuint)、float、float64、string、time、duration、header、可変長配列array []、および固定長配列array [C]が含まれます。

msg sensor_msg / imageなどの特定のmsgを使用して、場所はsensor_msgs / msg / image.msgに格納されます。その構造は次のとおりです。

std_msg / Headerヘッダー

uint32 seq

タイムスタンプ

文字列frame_id

uint32の高さ

uint32の幅

文字列エンコーディング

uint8 is_bigendian

uint32ステップ

uint8 []日付

4.2.1.3 rosmsgコマンド:

  • rosmsg listは、システム上のすべてのメッセージをリストします
  • rosmsg show msg_nameメッセージの内容を表示する

4.2.2サービス

サービス通信は双方向であり、メッセージを送信できるだけでなく、フィードバックも送信できます。したがって、サービスには2つの部分が含まれます。1つはリクエスター(Clinet)で、もう1つはレスポンダー/サービスプロバイダー(サーバー)です。このとき、リクエスタ(クライアント)はリクエストを送信し、サーバーが処理するのを待って応答を返すため、「リクエスト/レスポンス」と同様のメカニズムを通じてサービス通信全体が完了します。

ノードBは/サービスと呼ばれるサービスインターフェースを提供するサーバー(レスポンダー)です。通常、トピックと同様に、文字列型を使用してサービスの名前を指定します。ノードAはノードBへの要求を開始し、処理後にフィードバックを受け取りました。

サービスは同期通信方式です。いわゆる同期とは、ノードAが要求を発行した後、ノードAが応答するまで応答を待機することを意味します。

ノードBが要求を処理して応答を完了した後、ノードAは実行を継続します。ノードAは待機中です

ブロックされた通信。この通信モデルは、頻繁なメッセージング、競合、高いシステムリソース占有を持たず、リクエストを受け入れるときにのみサービスを実行します。これはシンプルで効率的です。

4.2.2.1トピックVSサービス

 

 

4.2.2.2 rosserviceコマンド

  • rosserviceリストサービスリストの表示
  • rosservice infoサービス情報を出力します
  • rosserviceタイプ
  • rosservice uri印刷サービスROSRPC uri
  • rosservice findサービスタイプによるサービスの検索
  • rosservice呼び出しは、提供された引数を使用してサービスを呼び出します
  • rosservice args印刷サービスパラメータ

4.2.2.3 srvファイル

srvファイルは、サービスを記述するために使用されます(サービスデータタイプ、サービス通信のデータ形式は* .srvで定義されています。これは、要求部分と応答部分を含むサービスを宣言します。

フォーマット宣言は次のとおりです。例:

msgs_demo / srv / DetectHuman.srv

bool start_detect

---

my_pkg / HumanPose [] pose_data

 

msgs_demo / msg / HumanPose.msg

std_msgs / Headerヘッダー

文字列uuid

int32 number_of_joints

my_pkg / JointPose [] joint_data

 

msgs_demo / msg / JointPose.msg

文字列joint_name

geometry_msgs /ポーズポーズ

floar32信頼

 

srvファイルの形式は非常に固定されており、最初の行は要求された形式で、中央が---で区切られています。3番目の行は応答の形式です。この例では、要求は検出を開始するかどうかであり、応答は配列であり、配列の各要素は人のジェスチャー(HumanPose)です。人間のジェスチャーに関しては、これは実際にはmsgであるため、srvはmsgにネストできますが、srvにネストすることはできません。

4.2.2.4 rossrvコマンド

  • rossrv show show service description
  • rossrv listすべてのサービスを一覧表示します
  • rossrv md5表示サービスmd5sum
  • rossrvパッケージはパッケージ内のサービスをリストします
  • rossrvパッケージはサービスを含むパッケージをリストします

4.2.3パラメータサーバー

パラメータサーバーは、特殊な「通信方式」とも言えます。特別な点は、パラメーターサーバーは、ノードがパラメーターを格納し、パラメーターを構成し、パラメーターをグローバルに共有する場所であるということです。パラメータサーバーはインターネット送信を使用し、ノードマネージャで実行されて通信プロセス全体を実現します。

パラメータサーバーは、ROSの別のデータ送信方法として、トピックやサービスとは異なり、より静的です。パラメーターサーバーは、さまざまなパラメーターと構成を格納するデータディクショナリを維持します。

パラメータサーバーを保守するには、次の3つの方法があります。

  • コマンドラインのメンテナンス
  • 起動ファイルを読み書きする
  • ノードのソースコード

4.2.3.1コマンドラインのメンテナンス:rosparam

  • rosparam set param_key param_value Setパラメータ
  • rosparam get param_key表示パラメータ
  • rosparam load file_nameロードパラメータをファイルから
  • rosparam dump file_nameパラメータをファイルに保存
  • rosparam delete deleteパラメータ
  • rosparam listはパラメータ名をリストします

 ロード&ダンプ文件

ロードおよびダンプファイルはYAML形式に準拠する必要があります。YAML形式の具体例は次のとおりです。

名前: '張山'

年齢:20歳

性別: 'M'

スコア{中国語:80、数学:90}

score_history:[85,82,88,90]

4.2.3.2起動ファイルの読み取りと書き込み

起動ファイルには多くのタグがあり、パラメータサーバーに関連するタグは2つだけです。1つは<param>で、もう1つは

<rosparam>です。

4.2.3.3ノードのソースコード

ROSソースコード、つまりAPIを使用してパラメーターサーバーを操作します。以下の章を学習した後、具体的な内容を紹介します。

4.2.4アクション

ActionlibはROSで非常に重要なライブラリです。サービス通信メカニズムと同様に、actionlibもリクエストレスポンスメカニズムです。

通信方式、actionlibは主にサービス通信の欠点を補います。つまり、ロボットが長期間のタスクを実行する場合です。

その際、サービス通信方式を使用すると、パブリッシャーが長時間応答を返さず、通信が発生する

邪魔。サービス通信がタスクをうまく完了できない場合、actionlibは長期通信に適しています。

プロセス、actionlib通信プロセスはいつでも表示でき、プロセスの進行も終了できます。このような機能により、

それはいくつかの特別なメカニズムで高い効率を持っています。

 

4.2.4.1アクションの動作原理

アクションの動作原理は、クライアントサーバーモードであり、これは双方向通信モードでもあります。ROSでの通信相手

アクションプロトコルでは、データ交換と通信はメッセージを介して行われます。クライアントとサーバーはユーザーにシンプルな

ターゲットをリクエストする(クライアント側で)、または関数呼び出しとコールバックを介してターゲットを実行する(サーバー側で)API。

作業モードの概略図は次のとおりです。

 

クライアントはターゲット命令とキャンセルアクション命令をサーバーに送信し、サーバーはリアルタイムのステータス情報、結果情報、フィードバック情報などをクライアントに送信できるため、サービスでは実行できない部分を完了できます。

4.2.4.2アクションファイル

リクエストレスポンスにアクションライブラリを使用します。アクションのコンテンツ形式には、目標、フィードバック、結果の3つの部分を含める必要があります。

  • 対象

ロボットがアクションを実行するとき、いくつかのパラメータ、方向、角度、速度などの設定を含む、明確な移動ターゲット情報が必要です。ロボットがモーションタスクを完了できるようにします。

  • フィードバック

アクションの過程で、サーバー実装者へのリアルタイムのステータス情報フィードバックがあり、実装者にアクションの完了ステータスを通知する必要があります。これにより、実装者は正確な判断を下してコマンドを変更できます。

  • その結果

 動作が完了すると、アクションサーバーは運動の結果データをクライアントに送信します。これにより、クライアントは、ロボットの動作の長さや最終姿勢など、アクションのすべての情報を取得できます。

アクション仕様ファイルのサフィックス名は.actionで、そのコンテンツ形式は次のとおりです。

#目標を定義する

uint32 dishwasher_id#使用したい食器洗い機を指定

---

#結果を定義する

uint32 total_dishes_cleaned

---

#フィードバックメッセージを定義する

float32 percent_complete

31件の元の記事を公開 いいね3 2028訪問

おすすめ

転載: blog.csdn.net/lclfans1983/article/details/105398893