検索
連載

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

ロボットプラットフォームとして知られる「ROS」の需要が高まり続けている。本稿では前後編に分けて、ROSの進化とデジタルツインの可能性について考察する。後編では、ROSのデジタルツイン活用の事例として、ROS 2を実装したロボットの実機とシミュレーションの連動について紹介する

Share
Tweet
LINE
Hatena
前のページへ |       

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()
リスト11 ロボットが発停止するように/cmd_velの値を送信するコード

(2)作成したコードを任意の名前で保存する。

 今回は“lidar_sensor.py”と保存。その後、ROS 2を有効化し、Pythonからlidar_sensor.pyを実行する(リスト12

$ source /opt/ros/foxy/setup.bash
$ python3 lidar_sensor.py
リスト12 Pythonから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
リスト13 別のターミナルから作成済みのコードを実行してIsaac Simを開くコマンド

(4)左側の■ボタンを押下していったんIsaac Simを停止させ、メニューから“Create>Shape>Cube”を選択する。Isaac Sim上に立方体が生成される(図25)。

図25
図25 Isaac Sim上に生成された立方体

(5)立方体を右クリックし“Add>Physics>Rigid Body with Colliders Preset”を選択し、この立方体に物理演算を付与する(図26)。

図26
図26 立方体に物理演算を付与する

(6)立方体をロボットの前に移動させ、「Play」ボタンを押し、シミュレーションを開始すると、床上に立方体が表示される(図27)。

図27
図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}}'
リスト14 新しいターミナルから移動コマンドを出力する

 Isaac Sim上のTurtlebot3と実機のTurtlebot3が同時に動き出す。Isaac Sim上のTurtlebot3が障害物に近づくと実機のTurtlebot3も止まるのが分かるだろう。Isaac Sim上で障害物をTurtlebot3から遠ざけると、再度実機のTurtlebot3が動き出す(図28)。

図28
図28 実機とIsaac Simの動作が同期する様子。シミュレーションのセンサーによってTurtlebot3が停止した後、動きを再開する

4.3 活用においての課題

 今回はデジタルツインを活用した事例を紹介したが、実際の現場で活用するには以下のような実機とシミュレーション間の課題を解決することが必要であり、技術の進化に期待したい。

4.3.1 フィードバックの一般化

 ROSを用いてシミュレーションと実機間の通信ができる。しかし、実機の位置情報をシミュレーションに取り込むインタフェースや、シミュレーションからのフィードバックで実機のハードウェアを直接制御するためのインタフェースが用意されていないため、今回はAPIの活用やROS通信処理コードの作成など、基本部分以外の連携部分の自作が必要だった。デジタルツイン活用を広げるためにはこういったインタフェース部分の整備が必要だと考える。

4.3.2 リアルタイム性

 今回の通信環境、シミュレーターの処理速度によって、実機とシミュレーションの間で若干のズレが生じてしまった。

 このため、画像や動画データのような大容量の通信が発生する場合、シミュレーションと実機間のデジタルツインに大きな遅延が生じる可能性が考えられる。デジタルツインを行う際には、十分な通信環境やPCの処理性能が必要となるだろう。

5.さいごに

 ロボットやROSは成長を続け、ロボットの導入が進む製造や物流だけではなく食品や農業などの業種でも使われ始めている。その中でも、デジタルツインでの活用が注目されており、今後も増えていくだろう。

 今回は、シンプルなデジタルツインの活用例を紹介した。Isaac Sim上のロボットと実空間のロボットをリアルタイムで連動させ、シミュレーションの結果を実機に反映できる。デジタルツインは、業務改善やコスト削減などさまざまなメリットを得ることが可能だ。Isaac Simを提供するNVIDIAもロボット開発に注力している。今後、多くの企業がデジタルツインに向けたより便利な機能を提供するだろう。未解決な課題もあるが、今後のデジタルツインの進化に期待が高まる。(連載完)

筆者プロフィール

富士ソフト AI・ロボット開発 R&Dチーム

富士ソフトでAI・ロボット開発の調査研究を主務として、最新技術の調査・社内外へのセミナー等に対応し、AI・ロボット開発の最新技術の習得および普及のため活動している。

富士ソフト ロボットシミュレータ構築支援サービス https://www.fsi.co.jp/robot_simulator/

Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る