ROS 2を用いたロボットの実機とシミュレーションによるデジタルツイン連動の実践:ROSの進化とデジタルツインの可能性(後編)(5/5 ページ)
ロボットプラットフォームとして知られる「ROS」の需要が高まり続けている。本稿では前後編に分けて、ROSの進化とデジタルツインの可能性について考察する。後編では、ROSのデジタルツイン活用の事例として、ROS 2を実装したロボットの実機とシミュレーションの連動について紹介する
4.2 Pythonの設定
(1)LiDARセンサーから取得するロボットと障害物の距離によってロボットが発停止するように/cmd_velの値を送信するコード(リスト11)を作成する。
#!/usr/bin/env python3 import rclpy from rclpy.node import Node from sensor_msgs.msg import LaserScan from geometry_msgs.msg import Twist from rclpy.qos import QoSProfile, QoSReliabilityPolicy, QoSDurabilityPolicy class ObstacleDetector(Node): def __init__(self): super().__init__(‘obstacle_detector’) qos_profile = QoSProfile(depth=10, reliability=QoSReliabilityPolicy.RMW_QOS_POLICY_RELIABILITY_SYSTEM_DEFAULT, durability=QoSDurabilityPolicy.RMW_QOS_POLICY_DURABILITY_SYSTEM_DEFAULT) self.cmd_vel_pub = self.create_publisher(Twist, ‘cmd_vel’, 10) self.cmd_vel2_sub = self.create_subscription(Twist, ‘cmd_vel2’, self.cmd_vel2_callback, 10) self.scan_sim_sub = self.create_subscription(LaserScan, ‘scan_sim’, self.scan_sim_callback, 10) self.obstacle_flg = False self.obstacle_sim_flg = False def cmd_vel2_callback(self, msg): #センサーと障害物が閾値(今回は35cm)以下の場合は速度0、そうでなければ受信した値をそのまま送信 if self.obstacle_flg or self.obstacle_sim_flg: msg.linear.x = 0.0 msg.angular.z = 0.0 self.cmd_vel_pub.publish(msg) #受信したセンサーの値が閾値以下かを判定 def scan_sim_callback(self, scan): range_ahead = scan.ranges[len(scan.ranges)//2] print(“sim:”, range_ahead) self.obstacle_sim_flg = self.detect_obstacle(range_ahead) def detect_obstacle(self, range_ahead): return range_ahead < 0.35 def main(args=None): rclpy.init(args=args) obstacle_detector = ObstacleDetector() rclpy.spin(obstacle_detector) obstacle_detector.destroy_node() rclpy.shutdown() if __name__ == ‘__main__’: main()
(2)作成したコードを任意の名前で保存する。
今回は“lidar_sensor.py”と保存。その後、ROS 2を有効化し、Pythonからlidar_sensor.pyを実行する(リスト12)
$ source /opt/ros/foxy/setup.bash $ python3 lidar_sensor.py
(3)別のターミナルから、Pythonを用いて「3.シミュレーションと実機に発生する同期ズレの調整」で作成したコードを実行し、Isaac Simを開く(リスト13)。
$ unset LD_LIBRARY_PATH $ export FASTRTPS_DEFAULT_PROFILES_FILE=~/.ros/fastdds.xml $ cd ~/.local/share/ov/pkg/isaac_sim-2022.2.1 $ ./python.sh standalone_examples/api/omni.isaac.ros2_bridge/turtlebot3_move.py
(4)左側の■ボタンを押下していったんIsaac Simを停止させ、メニューから“Create>Shape>Cube”を選択する。Isaac Sim上に立方体が生成される(図25)。
(5)立方体を右クリックし“Add>Physics>Rigid Body with Colliders Preset”を選択し、この立方体に物理演算を付与する(図26)。
(6)立方体をロボットの前に移動させ、「Play」ボタンを押し、シミュレーションを開始すると、床上に立方体が表示される(図27)。
(7)新しいターミナルから、/cmd_vel2のトピック名で移動コマンドを出力する(リスト14)。
$ source /opt/ros/foxy/setup.bash $ ros2 topic pub /cmd_vel2 geometry_msgs/Twist '{linear: {x: 0.02, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
Isaac Sim上のTurtlebot3と実機のTurtlebot3が同時に動き出す。Isaac Sim上のTurtlebot3が障害物に近づくと実機のTurtlebot3も止まるのが分かるだろう。Isaac Sim上で障害物をTurtlebot3から遠ざけると、再度実機のTurtlebot3が動き出す(図28)。
4.3 活用においての課題
今回はデジタルツインを活用した事例を紹介したが、実際の現場で活用するには以下のような実機とシミュレーション間の課題を解決することが必要であり、技術の進化に期待したい。
4.3.1 フィードバックの一般化
ROSを用いてシミュレーションと実機間の通信ができる。しかし、実機の位置情報をシミュレーションに取り込むインタフェースや、シミュレーションからのフィードバックで実機のハードウェアを直接制御するためのインタフェースが用意されていないため、今回はAPIの活用やROS通信処理コードの作成など、基本部分以外の連携部分の自作が必要だった。デジタルツイン活用を広げるためにはこういったインタフェース部分の整備が必要だと考える。
4.3.2 リアルタイム性
今回の通信環境、シミュレーターの処理速度によって、実機とシミュレーションの間で若干のズレが生じてしまった。
このため、画像や動画データのような大容量の通信が発生する場合、シミュレーションと実機間のデジタルツインに大きな遅延が生じる可能性が考えられる。デジタルツインを行う際には、十分な通信環境やPCの処理性能が必要となるだろう。
5.さいごに
ロボットやROSは成長を続け、ロボットの導入が進む製造や物流だけではなく食品や農業などの業種でも使われ始めている。その中でも、デジタルツインでの活用が注目されており、今後も増えていくだろう。
今回は、シンプルなデジタルツインの活用例を紹介した。Isaac Sim上のロボットと実空間のロボットをリアルタイムで連動させ、シミュレーションの結果を実機に反映できる。デジタルツインは、業務改善やコスト削減などさまざまなメリットを得ることが可能だ。Isaac Simを提供するNVIDIAもロボット開発に注力している。今後、多くの企業がデジタルツインに向けたより便利な機能を提供するだろう。未解決な課題もあるが、今後のデジタルツインの進化に期待が高まる。(連載完)
筆者プロフィール
富士ソフト AI・ロボット開発 R&Dチーム
富士ソフトでAI・ロボット開発の調査研究を主務として、最新技術の調査・社内外へのセミナー等に対応し、AI・ロボット開発の最新技術の習得および普及のため活動している。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「ROSの進化とデジタルツインの可能性」バックナンバー
- ≫連載「ROSを使ってロスなくロボット開発」バックナンバー
- 進化を止めないROSは「ROS 2」への移行を加速、デジタルツイン対応も進む
ロボットプラットフォームとして知られる「ROS」の需要が高まり続けている。本稿では前後編に分けて、ROSの進化とデジタルツインの可能性について考察する。前編では、ROSの最新動向とデジタルツインへの対応状況について紹介する。 - ロボット開発プラットフォーム「ROS」はどのように進化してきたのか
ロボットの開発に広く利用されるようになっているロボット開発プラットフォーム「ROS(Robot Operating System)」の活用について解説する本連載。今回は、ROSがオープンソースソフトウェアとしてどのように進化してきたのについて紹介する。 - ROSとシミュレーターの連携が生み出す新たな可能性
ロボットの開発に広く利用されるようになっているロボット開発プラットフォーム「ROS(Robot Operating System)」の活用について解説する本連載。今回は、「ROSの活用シーンとしてのシミュレーターとの連携」をテーマに、ロボット開発におけるシミュレーターの重要性や、ROSと連携可能なシミュレーターなどについて解説する。 - ROSとフォトリアルなシミュレーター「Isaac Sim」を連携させる
ロボットの開発に広く利用されるようになっているロボット開発プラットフォーム「ROS(Robot Operating System)」の活用について解説する本連載。今回は、「ROSとシミュレーターの組み合わせ事例」をテーマに、ROSとフォトリアルなシミュレーター「Isaac Sim」の連携について具体的な手法を紹介する。 - ロボット開発で注目される「ROS」(Robot Operating System)とは何か
ロボットの話題を聞くことが増えたが、判断と制御、駆動を備えたロボットを作るのはかなり骨が折れる。その負担を軽減するフレームワークが「ROS」(Robot Operating System)だ。 - ロボットに使われる分散処理、なぜ「ROS」が好まれるのか
ロボットの制御には集中管理よりも分散処理の方が都合が良く、さまざまなものが登場しているが、その中で一番有名なのが「ROS(Robot Operating System)」である。ではなぜROSが有名なのか。 - ROSを使う手順、パッケージとシミュレータの活用
ロボット開発に有用とされるROSだが、習得には対応ロボットを入手した方が手っ取り早い。利用開始までの手順と、併用したいツールやデバッガも紹介する。