ROS 2を用いたロボットの実機とシミュレーションによるデジタルツイン連動の実践ROSの進化とデジタルツインの可能性(後編)(2/5 ページ)

» 2024年01月22日 07時00分 公開
[富士ソフトMONOist]

2.2.2 ROS Bridgeモジュールの起動

 次にROS 2と通信を行うための設定を行う。

 Isaac Sim側でROSの機能を使うためにROS2 Bridgeモジュールを起動する。

(1)Isaac Simのメニューから“Window>Extension Manager”を選択する。「Extension Manager」が表示される(図7)。

図7 図7 Isaac Simのメニューから「Extension Manager」を選択する

(2)Extension Managerの検索欄に“ros”と入力する。ROS関連のExtensionが表示されるので、「ROS BRIDGE」をoffにし、「ROS2 BRIDGE」をonにする(図8)。

図8 図8 「ROS BRIDGE」をoffにし、「ROS2 BRIDGE」をonにする

(3)「ROS2 BRIDGE」はステージ読み込み処理時に有効になるため、保存したTurtlebot3のUSDファイルを“File>Open”で再度読み込む必要がある。

2.2.3 Isaac SimとROSの連携

 次にIsaac SimとROS 2を連携していこう。ここでは「Omni Graph」というツールを使用する。

 前回連載記事の後編『ROSとフォトリアルなシミュレーター「Isaac Sim」を連携させる』のROS連携では、ROS通信設定は単オブジェクトを呼び出してパラメータを設定した。現在のバージョンでは、ノード同士をつなげるビジュアルスクリプトであるOmni Graphがライブラリの1つの機能として搭載されている。

(1)“Window>Visual Scripting>Action Graph”を選択する(図9)。

図9 図9 Action Graphを選択する

(2)Isaac Sim下部に作成される「Action Graph」タブで「New Action Graph」を選択する(図10)。

図10 図10 「New Action Graph」を選択する[クリックで拡大]

(3)左側に「Nodes」(ノード一覧)、右側に「Action Graph」(Graph一覧)が表示される。ノード一覧の上にある検索欄からノード名を検索し、左から右側へドラッグ&ドロップすることで設置できる(図11)。

図11 図11 「On Playback Tick」ノードを設置する手順の例。ノード一覧の上の検索欄で“On play”を検索し、ドラッグ&ドロップで設置する

 図12のように11個のノードを用意し、それぞれのボタンをドラッグしてつなげる。

図12 図12 11個のノードを用意し、ドラッグしてつなげる[クリックで拡大]

 各ノードの解説と設定値は以下の通り。

  • a)On Playback Tick Node:
    シミュレーションが“再生中”の時、定期的に接続されたノードを実行する
  • b)ROS2 Context Node:
    ROS 2と通信を実行するためのノード
  • c)ROS2 Subscribe Twist Node:
    ROS 2のTwist型を受信するノード
    「Topic_name」に“/cmd_vel”を入力する(/cmd_velで受信する)
  • d)Constant Token:
    文字列を指定するノード
    /cmd_velで動かすジョイント名を記載する。「Inputs」-「Value」にTurtlebot3のJoint名“wheel_left_joint”を入力する(図13
図13 図13 “wheel_left_joint”を入力する
  • e)Constant Token:
    d)と同様。こちらは“wheel_right_joint”を入力する
  • f)Scale To/From Stage Unit Node:
    トピックの入力をUSD内の単位に変換するノード
  • g)Make Array:
    d)とe)の文字列を1つの出力として送るノード
    「Inputs」下部の「+」ボタンを押下して入力の数を1つ増やしておく(図14
図14 図14 「+」ボタンを押下して入力の数を1つ増やしておく
  • h)Break 3-Vector Node:
    x、y、zの3次元値から1つだけを抽出するノード。このノードでは/cmd_velの角速度のx、y、zを入力としているため、数値が格納されているzの値を抽出する
  • i)Break 3-Vector Node:
    h)と同様。このノードでは、/cmd_velの直線速度のx、y、zを入力としているため、数値が格納されているxを抽出する
  • j)Differential Controller Node:
    速度から車輪速度を計算するノード。Turtlebot3の場合は図15のように数値を設定する
図15 図15 Turtlebot3の数値を設定する
  • k)Articulation Controller Node:
    制御するロボットを指定する
    パラメータの「Inputs」の「robotPath」にTurtlebot3のオブジェクト(“/World/turtlebot3_burger”)を指定する(図16
図16 図16 Turtlebot3のオブジェクトを指定する

 左メニューの「Play」ボタンを押下するとIsaac Simのシミュレーションが開始され、ROS 2トピックを受信する状態となる。

 ターミナルでリスト3のように“ros2 topic list”と入力すると、トピック一覧として“/cmd_vel”が表示されることが確認できる。

$ ros2 topic list
/cmd_vel
/parameter_events
/rosout
リスト3 “/cmd_vel”が表示されることを確認するコマンド

 また、別のターミナルでリスト4のように入力すると、Turtlebot3が動く(図17)。

$ source /opt/ros/foxy/setup.bash
$ ros2 topic pub /cmd_vel geometry_msgs/Twist '{linear:  {x: 0.2, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
リスト4 Turtlebot3を動かすコマンド
図17 図17 Turtlebot3が動く様子[クリックで拡大]

 Turtlebot3を停止させるにはリスト5のコマンドを使用する。

$ ros2 topic pub /cmd_vel geometry_msgs/Twist '{linear:  {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
リスト5 Turtlebot3を停止させるコマンド

Copyright © ITmedia, Inc. All Rights Reserved.