ROBOWORKS Robofleet マルチエージェントアルゴリズム
仕様
- 製品名: ROBOWORKS
- バージョン: 20240501
- 執筆者: ウェイン・リウ & ジャネット・リン
- 日付:1 May 2024
製品情報
ROBOWORKS は、ロボットの調整と通信のためのさまざまなアルゴリズムを実装できるマルチエージェント システムです。
よくある質問
Q: ロボットが自動的に Wi-Fi に接続できない場合はどうすればよいですか?
A: ロボットが自動的に接続できない場合は、ネットワーク カードを取り外して再度差し込み、再度接続してみてください。
まとめ
このドキュメントでは、主にwheeltec_multiというマルチロボット編隊機能パッケージの使い方について説明します。
このドキュメントは 4 つの部分に分かれています。
- 最初の部分では、主にマルチロボット編隊方式の紹介について説明します。
- 2 番目の部分では、主に ROS マルチマシン通信の設定について説明します。これには、ROS マルチマシン通信の構築と、ROS 通信の過程で発生する可能性のある問題が含まれます。
- 3 番目の部分では、主にマルチマシン時間同期の操作手順について説明します。
- 第 4 部では、マルチマシン編成機能パッケージの具体的な使用方法について説明します。
このドキュメントの目的は、マルチエージェント ロボット システムを紹介し、ユーザーがマルチロボット編成プロジェクトを迅速に開始できるようにすることです。
マルチエージェントアルゴリズム入門
マルチエージェント形成アルゴリズム
この ROS パッケージは、フォーメーション ドライブ中の協調制御におけるマルチエージェントの典型的な問題を提示します。このチュートリアルは、このトピックに関する将来の開発の基礎となります。フォーメーション制御アルゴリズムとは、複数のエージェントを制御して特定のフォーメーションを形成し、タスクを実行するアルゴリズムを指します。コラボレーションとは、特定の制約関係を使用して複数のエージェントが協力してタスクを完了することを指します。マルチロボット フォーメーション ドライブを例に挙げます。ampたとえば、コラボレーションとは、複数のロボットが一緒に望ましいフォーメーションを形成することを意味します。その本質は、各ロボットの位置間で満たされる特定の数学的関係です。フォーメーション方法は、主に集中フォーメーション制御と分散フォーメーション制御に分けられます。集中フォーメーション制御方法には、主に仮想構造法、グラフィカル理論法、モデル予測法が含まれます。分散フォーメーション制御方法には、主にリーダーフォロワー法、行動ベース法、仮想構造法が含まれます。
この ROS パッケージは、分散フォーメーション制御方式のリーダー フォロワー方式を適用して、マルチロボット フォーメーション ドライブを実行します。フォーメーション内の 1 台のロボットがリーダーとして指定され、他のロボットはリーダーに追従するスレーブとして指定されます。アルゴリズムは、先頭ロボットの移動軌跡を使用して、後続ロボットが特定の方向と速度で追跡する座標を設定します。追跡座標からの位置偏差を修正することにより、フォロワーは最終的にフォロワーと予想される追跡座標間の偏差をゼロに減らし、フォーメーション ドライブの目的を達成します。このように、アルゴリズムは比較的複雑ではありません。
障害物回避アルゴリズム
一般的な障害物回避アルゴリズムは、人工ポテンシャル場法です。物理環境におけるロボットの動きは、仮想の人工力場における動きとみなされます。最も近い障害物は LiDAR によって識別されます。障害物は、ロボットに反発力を発生させる反発力場を提供し、目標点は、ロボットに重力を発生させる重力場を提供します。このようにして、反発力と引力の複合作用の下でロボットの動きを制御します。
この ROS パッケージは、人工ポテンシャル フィールド法に基づく改良です。まず、フォーメーション アルゴリズムがスレーブ フォロワーの線速度と角速度を計算します。次に、障害物回避の要件に応じて線速度と角速度を増減します。スレーブ フォロワーと障害物の距離が近いほど、スレーブ フォロワーに対する障害物の反発力は大きくなります。同時に、線速度と角速度の変化も大きくなります。障害物がスレーブ フォロワーの前面に近いほど、スレーブ フォロワーに対する障害物の反発力が大きくなります (前面の反発が最大で、側面の反発が最小)。その結果、線速度と角速度の変化が大きくなります。人工ポテンシャル フィールド法によって、ロボットが障害物の前で反応しなくなる場合の解決策が改善されます。これにより、障害物をより適切に回避できます。
マルチエージェント通信設定
マルチエージェント通信は、マルチロボットフォーメーションを完了するための重要なステップの1つです。複数のロボットの相対的な位置が不明な場合、ロボットは通信を通じて互いの情報を共有し、接続の確立を容易にする必要があります。ROS分散アーキテクチャとネットワーク通信は非常に強力です。プロセス間通信だけでなく、異なるデバイス間の通信にも便利です。ネットワーク通信を通じて、すべてのノードを任意のコンピューターで実行できます。データ処理などの主要なタスクはホスト側で完了します。スレーブマシンは、さまざまなセンサーによって収集された環境データを受信する役割を担っています。ここでのホストは、ROSでマスターノードを実行するマネージャーです。現在のマルチエージェント通信フレームワークは、ノードマネージャーとパラメーターマネージャーを介して複数のロボット間の通信を処理します。
マルチエージェント通信を設定する手順
- 同じネットワークにROSコントロールを設定する
- 同じネットワークでマスター/スレーブ ROS コントロールを設定するには 2 つの方法があります。
オプション1:
マスター ホストは、マスター ノード マネージャーを実行してローカル Wi-Fi を作成します。通常、マスターとして指定されたロボットの 1 つがこの Wi-Fi ネットワークを作成します。他のロボットまたは仮想マシンは、スレーブとしてこの Wi-Fi ネットワークに参加します。
オプション2:
ローカル Wi-Fi ネットワークは、情報中継センターとしてサードパーティのルーターによって提供されます。すべてのロボットは同じルーターに接続されます。ルーターはインターネットに接続せずに使用することもできます。ロボットの 1 つをマスターとして選択し、マスター ノード マネージャーを実行します。他のロボットはスレーブとして指定され、マスターからマスター ノード マネージャーを実行します。
どちらのオプションを選択するかは、プロジェクトの要件によって異なります。通信する必要があるロボットの数が多くない場合は、コストを節約し、セットアップが簡単なオプション 1 をお勧めします。ロボットの数が多い場合は、オプション 2 をお勧めします。ROS マスター コントロールの計算能力の制約とオンボードの Wi-Fi 帯域幅の制限により、遅延やネットワークの中断が簡単に発生する可能性があります。ルーターを使用すると、これらの問題を簡単に解決できます。マルチエージェント通信を実行するときに、仮想マシンを ROS スレーブとして使用する場合は、ネットワーク モードをブリッジ モードに設定する必要があることに注意してください。
マスター/スレーブ環境変数を構成する
すべての ROS マスターが同じネットワーク上にある場合、マルチエージェント通信用の環境変数を設定する必要があります。この環境変数は、メイン ディレクトリの .bashrc ファイルで設定されます。これを起動するには、gedit ~/.bashrc コマンドを実行します。マルチエージェント通信では、マスターとスレーブの両方の .bashrc ファイルを設定する必要があることに注意してください。変更する必要があるのは、ファイルの末尾にある IP アドレスです。図 2-1-4 に示すように、XNUMX 行は ROS_MASTER_URI と ROS_HOSTNAME です。ROS ホストの ROS_MASTER_URI と ROS_HOSTNAME はどちらもローカル IP です。ROS スレーブの .bashrc ファイル内の ROS_MASTER_URI は、ホストの IP アドレスに変更する必要がありますが、ROS_HOSTNAME はローカル IP アドレスのままです。
ROS マルチマシン通信は、ROS リリース バージョンによって制約されません。マルチマシン通信のプロセスでは、次の点に注意する必要があります。
- ROS スレーブ プログラムの動作は、ROS マスター デバイスの ROS マスター プログラムに依存します。スレーブ デバイスでスレーブ プログラムを実行する前に、マスター デバイスで ROS マスター プログラムを起動する必要があります。
- マルチマシン通信におけるマスターマシンとスレーブマシンの IP アドレスは同じネットワーク内にある必要があります。つまり、IP アドレスとサブネット マスクは同じネットワーク内にある必要があります。
- 環境設定ファイル .bashrc の ROS_HOSTNAME には localhost の使用は推奨されません。特定の IP アドレスを使用することをお勧めします。
- スレーブ IP アドレスが正しく設定されていない場合、スレーブ デバイスは ROS マスターにアクセスできますが、制御情報を入力することはできません。
- 仮想マシンがマルチエージェント通信に参加する場合、ネットワーク モードをブリッジ モードに設定する必要があります。ネットワーク接続に静的 IP を選択することはできません。
- 複数マシン通信は view または、ローカルに存在しないメッセージ データ型のトピックをサブスクライブします。
- Little Turtle シミュレーション デモを使用して、ロボット間の通信が成功しているかどうかを確認できます。
- aマスターから逃げる
- 再スコアリング #ROS サービスを起動
- rostrum turtles turtlesim_node #turtlesインターフェースを起動
- b奴隷から逃げる
- turtles turtle_teleop_key を再実行します #turtles のキーボード コントロール ノードを起動します
- aマスターから逃げる
スレーブのキーボードからタートルの動きを操作できれば、マスター/スレーブ通信が正常に確立されたことを意味します。
ROSでの自動Wifi接続
以下の手順では、ロボットがホスト ネットワークまたはルーター ネットワークに自動的に接続するように構成する方法について説明します。
Jetson Nanoの自動Wifi接続設定
- VNC リモート ツール経由で、または直接コンピューター画面に Jetson Nano を接続します。右上隅の Wi-Fi アイコンをクリックし、「接続の編集」をクリックします。
- ネットワーク接続の + ボタンをクリックします。
- 「接続タイプの選択」ウィンドウで、ドロップダウン メニューをクリックし、「作成…」ボタンをクリックします。
- コントロール パネルで、Wifi オプションをクリックします。「接続名」と SSID フィールドに、接続する Wifi 名を入力します。「モード」ドロップダウン メニューで「クライアント」を選択し、「デバイス」ドロップダウン メニューで「wlan0」を選択します。
- コントロール パネルで、[全般] オプションをクリックし、[このネットワークに自動的に接続する...] にチェックを入れます。[自動アクティブ化の接続優先度] オプションで接続優先度を 1 に設定します。[すべてのユーザーがこのネットワークに接続できる] オプションにチェックを入れます。他の Wi-Fi の [自動アクティブ化の接続優先度] でオプションが 0 に設定されている場合、これは過去に優先された Wi-Fi ネットワークであることを意味します。
- コントロール パネルの [Wi-Fi セキュリティ] オプションをクリックします。[セキュリティ] フィールドで [WPA および WPA2 パーソナル] を選択します。次に、[パスワード] フィールドに Wi-Fi パスワードを入力します。
注記: Wi-Fi の優先度が 0 に設定されているときにロボットが起動後に Wi-Fi ネットワークに自動的に接続できない場合は、Wi-Fi 信号が弱いことが原因である可能性があります。この問題を回避するには、過去に接続したすべての Wi-Fi オプションを削除することを選択できます。ホストまたはルーターによって作成された Wi-Fi ネットワークのみを保持します。ネットワーク設定コントロール パネルで [IPv4 設定] オプションをクリックします。[方法] フィールドで [手動] オプションを選択します。次に、[追加] をクリックし、[アドレス] フィールドにスレーブ マシンの IP アドレスを入力します。[ネットマスク] フィールドに「24」を入力します。[ゲートウェイ] に IP ネットワーク セグメントを入力します。IP ネットワーク セグメントの最後の 1 桁を「XNUMX」に変更します。この手順の主な目的は、IP アドレスを修正することです。これが初めて完了すると、その後同じ Wi-Fi に接続しても IP アドレスは変更されません。
すべての設定が完了したら、「保存」をクリックして設定を保存します。保存が成功すると、ロボットは電源を入れるとホストまたはルーターのネットワークに自動的に接続します。
注記:
- ここで設定する IP アドレスは、セクション 2.1 の .bashrc ファイルに設定されている IP アドレスと同じである必要があります。
- マスターと各スレーブの IP アドレスは一意である必要があります。
- マスター IP アドレスとスレーブ IP アドレスは同じネットワーク セグメント内にある必要があります。
- スレーブ ロボットの電源がオンになり、WiFi ネットワークに自動的に接続する前に、ホストまたはルーターが WiFi 信号を送信するのを待つ必要があります。
- 設定が完了した後、ロボットの電源を入れたときに WiFi に自動的に接続できない場合は、ネットワーク カードを抜き差しして再度接続してみてください。
Raspberry Pi の自動 Wifi 接続設定
Raspberry Pi の場合の手順は Jetson Nano と同じです。
Jetson TX1 の自動 Wifi 接続設定
Jetson TX1 での設定は Jetson Nano とほぼ同じですが、Jetson TX1 ではネットワーク設定コントロール パネルの「デバイス」で「wlan1」デバイスを選択する必要があります。
マルチエージェント同期設定
マルチエージェント形成プロジェクトでは、マルチエージェントの時間同期設定が重要なステップです。形成の過程で、各ロボットのシステム時間が非同期であるため、多くの問題が発生します。マルチエージェントの時間同期は、マスターロボットとスレーブロボットの両方がネットワークに接続されている状況と、両方がネットワークから切断されている状況の2つの状況に分かれています。
マスター/スレーブネットワーク接続が成功しました
マルチエージェント通信が設定された後、マスターマシンとスレーブマシンがネットワークに正常に接続できる場合、ネットワーク時間が自動的に同期されます。この場合、時間同期を実現するためにそれ以上の操作は必要ありません。
ネットワーク切断のトラブルシューティング
マルチエージェント通信を設定した後、マスターデバイスとスレーブデバイスがネットワークに正常に接続できない場合は、手動で時間を同期する必要があります。時間設定を完了するには、date コマンドを使用します。
まず、ターミネーターツールをインストールします。ターミネーターツールから、ウィンドウ分割ツールを使用して、マスターとスレーブの制御端末を同じターミナルウィンドウに配置します(右クリックして分割ウィンドウを設定し、別のウィンドウでマスターマシンとスレーブマシンにsshでログインします)。
- sudo apt-get install terminator # ターミナルウィンドウを分割するためのターミネーターをダウンロードします
左上のボタンをクリックし、[すべてにブロードキャスト]/[すべてブロードキャスト]オプションを選択し、次のコマンドを入力します。次に、ターミネーターツールを使用して、マスターとスレーブに同じ時間を設定します。
- sudo date -s “2022-01-30 15:15:00” # 手動で時刻を設定する
マルチエージェント ROS パッケージ
ROS パッケージの紹介
スレーブ名の設定
wheeltec_multi関数パッケージでは、エラーを回避するために各スレーブロボットに一意の名前を設定する必要があります。例:ample、スレーブ1にはNo.1、スレーブ2にはNo.2など。異なる名前を設定する目的は、実行中のノードをグループ化し、異なる名前空間で区別することです。例:ample、スレーブ 1 のレーダー トピックは /slave1/scan であり、スレーブ 1 の LiDAR ノードは /slave1/laser です。
スレーブ座標を設定する
wheeltec_multi パッケージは、カスタムフォーメーションを実装できます。異なるフォーメーションが必要な場合は、スレーブロボットの希望する座標を変更するだけです。slave_x と slave_y は、マスターを元の参照点とするスレーブの x 座標と y 座標です。マスターの前面は x 座標の正方向、左側は y 座標の正方向です。設定が完了すると、スレーブの予想座標として TF 座標 slave1 が発行されます。マスターが XNUMX 台でスレーブが XNUMX 台ある場合は、次のフォーメーションを設定できます。
- 水平フォーメーション: 左側のスレーブの座標を slave_x:0、slave_y: 0.8、右側のスレーブの座標を slave_x:0、slave_y:-0.8 に設定できます。
- 列の形成: 0.8 つのスレーブの座標は、slave_x:-0、slave_y:1.8 に設定でき、他のスレーブの座標は、slave_x:-0、slave_y:XNUMX に設定できます。
- 三角形の形成: 0.8 つのスレーブの座標は、slave_x:-0.8、slave_y: 0.8 に設定でき、もう 0.8 つのスレーブの座標は、slave_x:-XNUMX、slave_y:-XNUMX に設定できます。
その他のフォーメーションは必要に応じてカスタマイズできます。
注記:
- 0.8 台のロボット間の推奨距離は 0.6 に設定されており、2.0 未満にならないようにすることをお勧めします。スレーブとマスター間の距離は XNUMX 未満に設定することをお勧めします。マスターから遠いほど、マスターが回転しているときのスレーブの直線速度が速くなります。最大速度の制限により、スレーブの速度は要件を満たさない場合、逸脱します。ロボットのフォーメーションが混乱します。
スレーブ位置の初期化
- スレーブの初期位置は、デフォルトで期待座標にあります。プログラムを実行する前に、スレーブ ロボットを期待座標の近くに配置するだけで初期化が完了します。この機能は、図 4-1-3 に示すように、wheeltec_multi パッケージの turn_on_wheeltec_robot.launch という名前のファイル内の pose_setter ノードによって実装されます。
スレーブの初期位置をカスタマイズしたい場合は、wheeltec_slave.launch の図 4-1-4 に示すように、slave_x 値と slave_y 値を設定するだけです。slave_x 値と slave_y 値は turn_on_wheeltec_robot.launch に渡され、pose_setter ノードに割り当てられます。プログラムを実行する前に、ロボットをカスタム位置に配置するだけです。
ポジション構成
マルチエージェントフォーメーションでは、最初に解決すべき問題は、マスターとスレーブの配置です。マスターは最初に 2D マップを構築します。マップを作成して保存した後、2D ナビゲーション パッケージを実行し、2D ナビゲーション パッケージの適応型モンテ カルロ配置アルゴリズム (amcl 配置) を使用してマスターの配置を構成します。マスターとスレーブは同じネットワークにあり、同じノード マネージャーを共有しているため、マスターは 2D ナビゲーション パッケージからマップを起動しており、すべてのスレーブは同じノード マネージャーの下で同じマップを使用できます。したがって、スレーブはマップを作成する必要はありません。wheeltec_slave.launch でモンテ カルロ配置 (amcl 配置) を実行すると、スレーブはマスターによって作成されたマップを使用して位置を構成できます。
フォーメーションを作成し、維持する方法
編隊運動の過程で、マスターの動きは、Rviz、キーボード、リモコンなどの方法で制御できます。スレーブは、slave_tf_listener ノードを通じて速度を計算し、その動きを制御して編隊の目標を達成します。slave_tf_listener ノードは、ノード計算による過度の速度を回避するためにスレーブの速度を制限し、一連の衝撃を引き起こします。具体的な値は、wheeltec_slave.launch で変更できます。
形成アルゴリズムの関連パラメータは次のとおりです。
障害物回避情報
マルチエージェントフォーメーションでは、マスターはmove_baseノードを使用して障害物回避を完了できます。ただし、スレーブの初期化ではmove_baseノードは使用されません。この時点で、スレーブプログラムでmulti_avoidanceノードを呼び出す必要があります。障害物回避ノードは、パッケージ内でデフォルトで有効になっています。必要に応じて、avoidanceを「false」に設定して、障害物回避ノードを無効にすることができます。
障害物回避ノードの関連パラメータの一部が下の図に示されています。ここで、safe_distance は障害物の安全距離の制限、danger_distance は障害物の危険距離の制限です。障害物が安全距離と危険距離の範囲内にある場合、スレーブは障害物を回避するために位置を調整します。障害物が危険範囲内にある場合、スレーブは障害物から遠ざかります。
操作手順
実行コマンドを入力
マルチエージェント形成を開始する前の準備:
- マスターとスレーブは同じネットワークに接続し、マルチエージェント通信を正しく設定します
- マスターは事前に2Dマップを構築し、保存します
- マスターはマップのスタート地点に配置し、スレーブは初期化位置(デフォルトのスレーブ編成位置)の近くに配置します
- Jetson Nano/Raspberry Piにリモートログイン後、時刻同期を実行します。
sudo 日付 -s “2022-04-01 15:15:00”
- ステップ1: マスターから 2D マップを開きます。
roslaunch turn_on_wheeltec_robot ナビゲーション.launch
- ステップ2: すべてのスレーブからフォーメーションプログラムを実行します。
roslaunch wheeltec_multi wheeltec_slave.launch
- ステップ3: マスターからキーボード コントロール ノードを開くか、ジョイスティックを使用してマスターの動きをリモート コントロールします。
wheeltec_robot_rc を再起動し、keyboard_teleop.launch を実行します。
- ステップ4: (オプション) Rviz からロボットの動きを観察します。
rviz
注記:
- プログラムを実行する前に必ず時刻同期操作を完了してください。
- マルチエージェントフォーメーションのマスターを制御する場合、角速度が速すぎないようにしてください。推奨される線速度は0.2m/s、角速度は0.3rad/s未満です。マスターが曲がる場合、スレーブがマスターから遠いほど、必要な線速度が大きくなります。パッケージ内の線速度と角速度の制限により、スレーブカーが必要な速度に到達できない場合、フォーメーションが混乱します。全体的に、線速度が速すぎると、ロボットが簡単に損傷する可能性があります。
- スレーブの数が 1 を超える場合、ROS ホストのオンボード Wi-Fi 帯域幅が制限されるため、マルチエージェント通信の大幅な遅延や切断が発生しやすくなります。ルーターを使用すると、この問題をうまく解決できます。
- マルチロボットフォーメーション(スレーブ2台)のTFツリーは次のようになります。rqt_tf_tree
- マルチロボットフォーメーション(スレーブ2台)のノード関係図は次の通りです。rqt_graph
ドキュメント / リソース
![]() |
ROBOWORKS Robofleet マルチエージェントアルゴリズム [pdf] ユーザーマニュアル Robofleet マルチエージェント アルゴリズム、Roboleet、マルチエージェント アルゴリズム、エージェント アルゴリズム、アルゴリズム |