ROS 2を用いたロボットの実機とシミュレーションによるデジタルツイン連動の実践:ROSの進化とデジタルツインの可能性(後編)(2/5 ページ)
ロボットプラットフォームとして知られる「ROS」の需要が高まり続けている。本稿では前後編に分けて、ROSの進化とデジタルツインの可能性について考察する。後編では、ROSのデジタルツイン活用の事例として、ROS 2を実装したロボットの実機とシミュレーションの連動について紹介する
2.2.2 ROS Bridgeモジュールの起動
次にROS 2と通信を行うための設定を行う。
Isaac Sim側でROSの機能を使うためにROS2 Bridgeモジュールを起動する。
(1)Isaac Simのメニューから“Window>Extension Manager”を選択する。「Extension Manager」が表示される(図7)。
(2)Extension Managerの検索欄に“ros”と入力する。ROS関連のExtensionが表示されるので、「ROS BRIDGE」をoffにし、「ROS2 BRIDGE」をonにする(図8)。
(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)。
(2)Isaac Sim下部に作成される「Action Graph」タブで「New Action Graph」を選択する(図10)。
(3)左側に「Nodes」(ノード一覧)、右側に「Action Graph」(Graph一覧)が表示される。ノード一覧の上にある検索欄からノード名を検索し、左から右側へドラッグ&ドロップすることで設置できる(図11)。
図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)
- e)Constant Token:
d)と同様。こちらは“wheel_right_joint”を入力する - f)Scale To/From Stage Unit Node:
トピックの入力をUSD内の単位に変換するノード - g)Make Array:
d)とe)の文字列を1つの出力として送るノード
「Inputs」下部の「+」ボタンを押下して入力の数を1つ増やしておく(図14)
- 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のように数値を設定する
- k)Articulation Controller Node:
制御するロボットを指定する
パラメータの「Inputs」の「robotPath」にTurtlebot3のオブジェクト(“/World/turtlebot3_burger”)を指定する(図16)
左メニューの「Play」ボタンを押下するとIsaac Simのシミュレーションが開始され、ROS 2トピックを受信する状態となる。
ターミナルでリスト3のように“ros2 topic list”と入力すると、トピック一覧として“/cmd_vel”が表示されることが確認できる。
$ ros2 topic list /cmd_vel /parameter_events /rosout
また、別のターミナルでリスト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}}'
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}}'
Copyright © ITmedia, Inc. All Rights Reserved.