UnityとMATLABで実現する自律ロボティクスシミュレーション

43.3K Views

October 25, 22

スライド概要

MATLABおよびSimulinkとUnityを連携した自律ロボットの3Dシミュレーション例をご紹介します。MATLABおよびSimulinkでAI・自律ロボティクス関連の認知・判断・意思決定アルゴリズムのソリューションを提供しており、Unity連携により仮想環境で統合システムの評価をできます。
本公演ではUnity Robotics Hubで提供されているROS / ROS2 連携機能を通じて、MATLABおよびSimulinkを組み合わせ自律ロボット開発のための3Dシミュレーション活用例を解説します。

こんな人におすすめ:
・Unityを使ったロボット開発をこれから始める方
・MATLABおよびSimulinkとUnityを組み合わせたロボット開発に興味のある方
・Unityによるロボットシミュレーションの具体的な構築方法に興味のある方

受講者が得られる知見:
・UnityとMATLABおよびSimulinkを連携することで様々な領域のロボットアプリケーションが構築できる
・ROSおよびROS2を通じてUnityとMATLABおよびSimulinkと連携する具体的な方法が理解できる

出演:
木川田 亘 (MathWorks Japan)

--
初出: SYNC 2022 #UnitySYNC
https://events.unity3d.jp/sync/

profile-image

リアルタイム3Dコンテンツを制作・運用するための世界的にリードするプラットフォームである「Unity」の日本国内における販売、サポート、コミュニティ活動、研究開発、教育支援を行っています。ゲーム開発者からアーティスト、建築家、自動車デザイナー、映画製作者など、さまざまなクリエイターがUnityを使い想像力を発揮しています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Unity®と MATLAB で実現する 自律ロボティクスシミュレーション 木川田 亘 アプリケーションエンジニアリング部 (自律システム・ロボティクス担当) MathWorks Japan [email protected] © 2022 The MathWorks, Inc. 1

2.

自己紹介 ▪ 名前 – 木川田 亘 (キカワダ トオル) ▪ 経歴 – 2014年~現在 MathWorks Japan – 2008年~2014年 ソニー株式会社 – 大学時代:信号処理の研究 – 高専時代:ロボコン出場 2

3.

アジェンダ ▪ ▪ ▪ ▪ ▪ 自己紹介 MATLAB のご紹介 MATLAB と Unity の連携手順 ロボットアプリケーション例 まとめ 3

4.

MATLAB活用例 - ドイツ航空宇宙センター(DLR) 自律ロボット ステレオカメラと触覚センサーで 環境を認識 人間が行うような複雑なタスクを実行 4

5.

ロボティクスシステム開発のための機能を拡張 ソフトウェア アプリケーション 各種アルゴリズム開発 仮想環境 環境 ロボット 3Dシーン センサー シナリオ ダイナミクス アルゴリズム AI・認知 SLAM/自己位置 経路計画 フュージョン 判断・制御 統合開発プラットフォーム 解析 シミュレー ション 設計 実装 統合 テスト 5

6.

MATLAB 製品ファミリー MATLAB Simulink MATLAB アルゴリズム開発、データ解析、可視化、数値計算 のための統合開発環境 Simulink システムの設計やシミュレーション、 テストのためのグラフィカル環境 特定用途向けに100以上のアドオンを提供 6 アドオン製品 (例: ROS Toolbox)

7.

MATLABによるロボットシステム開発の利点 ▪ ▪ データ収集からAIモデリング、システム設計、実装までローコードで実現 専門家でなくてもAI・ロボット技術を応用可能 例:物体検出アルゴリズムの自動運転システムへの組み込み AIモデル プラント Vision 制御 フュージョン ラベリングアプリ 画像や動画、信号の アノテーション ディープネットワーク デザイナー ネットワークの構築 可視化・編集 ブロック線図環境 Simulinkによる システム設計・シミュレーション 自動コード生成・実機実装 7

8.

Unity との連携 ▪ Unityと MATLAB を連携することでロボットシミュレーションを効率化 • 機体の動力学 シミュレーション • 自律アルゴリズム ロボット指令値 センサ出力 • 3Dシーンの描画 • 各種センサモデル • 周辺環境の物理 シミュレーション Unity MATLAB 1. 高精度な運動シミュレーション 1. 車両や機体運動を解くためのソルバー 2. AI・ロボットアルゴリズムを提供 URPとHDRPを用途に応じて使い分け 2. ローコードによる高度な機能開発 3. シームレスにハードウェア実装 自動コード生成により効率化 フォトリアリスティック環境再現 アセットが充実 道路、オフロード、農場 3. 豊富な日本語の情報源 書籍、インターネット 8

9.

アジェンダ ▪ ▪ ▪ ▪ ▪ 自己紹介 MATLAB のご紹介 MATLAB と Unity の連携手順 ロボットアプリケーション例 まとめ 9

10.

MATLAB と Unity の連携例 キューブの位置姿勢の取得と色変更 10

11.

ROS経由によるUnityとMATLABの連携 ROSパブリッシャー C#スクリプト 認識 ROS 経路計画 意思決定 ROS Toolbox Unity ROS TCP Endpoint* TCP Unity ROS TCP Connector ROSサブスクライバー C#スクリプト ROSサービス C#スクリプト 制御 MATLAB Unity Simulink Windowsマシン * R2022bバージョンよりROS Toolboxに同梱 11

12.

ROS の概要と MATLAB との連携 ▪ ROS = Robot Operating System – 自律分散システムのためのオープンソースソフトウェア開発キット – メッセージング通信/分散コンピューティングのためのライブラリを提供 ▪ ROS Toolbox – MATLAB のアドオン製品 – ROS および ROS2 と連携し、メッセージング通信が可能 – 今回のUnity連携についても ROS Toolbox を利用 ROSは様々なデータ構造を共通フォーマットで取り扱い可能 Unity と MATLAB のデータ共有にも適している 12

13.

ステップ1. Unity環境のROS TCP Connectorセットアップ ROSパブリッシャー C#スクリプト 認識 経路計画 意思決定 Unity ROS TCP Endpoint* ROS Toolbox Unity ROS TCP Connector ROSサブスクライバー C#スクリプト ROSサービス C#スクリプト 制御 MATLAB Unity Simulink Windowsマシン * R2022bバージョンよりROS Toolboxに同梱 13

14.

ステップ1. Unity環境のROS TCP Connectorセットアップ 1. Unityのプロジェクトを新規作成 (Built-in RP, URP, HDRPのいずれでもOK) 2. 「Window」→「Package Manager」でパッケージマネージャを開く 3. 左上の「+▼」の下向き三角ボタンをクリックし、 「Add package from git URL...」を選択 4. 入力フィールドに下記の ROS TCP Connector のGitHubレポジトリの URLをコピー&ペーストし、「Add」をクリック https://github.com/Unity-Technologies/ROS-TCPConnector.git?path=/com.unity.robotics.ros-tcp-connector 詳細はUnity Robotics Hubを参照 https://github.com/Unity-Technologies/ROS-TCP-Connector.git 14

15.

ステップ2. ROSのC#スクリプトを記述 ROSパブリッシャー C#スクリプト 認識 経路計画 意思決定 Unity ROS TCP Endpoint* ROS Toolbox Unity ROS TCP Connector ROSサブスクライバー C#スクリプト ROSサービス C#スクリプト 制御 MATLAB Unity Simulink Windowsマシン * R2022bバージョンよりROS Toolboxに同梱 15

16.

ステップ2. ROSのC#スクリプトを記述 1. Unityのメニューの「Asset」→「Create」→「C# Script」を選択 2. C#スクリプトのひな型が作成されるので 名前を「RosPublisher」に変更 3. 同様に「RosSubscriber」も作成 4. それぞれのC#スクリプトを開き、次ページ以降のコードを入力 16

17.
[beta]
ステップ2. パブリッシャー用のC#スクリプトを記述
▪

物体の位置姿勢を取得してROSトピックとして発行

RosPublisher.cs
using UnityEngine;
using Unity.Robotics.ROSTCPConnector;
using RosMessageTypes.Geometry;

ROSで使用するメッセージタイプを定義
(姿勢情報は geometry_msgs/Poseを使用)
public class RosPublisher : MonoBehaviour
{
ROSConnection ros;
public string topicName = "pose";
public GameObject obj;
public float publishMessagePeriod = 0.5f;
private float timeElapsed;
void Start()
{
ros = ROSConnection.GetOrCreateInstance();
ros.RegisterPublisher<PoseMsg>(topicName);
}

ROSのパブリッシャーを登録

}

private void Update()
{
timeElapsed += Time.deltaTime;
if (timeElapsed > publishMessagePeriod)
{
PoseMsg pose = new PoseMsg(
new PointMsg(
obj.transform.position.x,
obj.transform.position.y,
obj.transform.position.z
),
new QuaternionMsg(
obj.transform.rotation.x,
obj.transform.rotation.y,
obj.transform.rotation.z,
obj.transform.rotation.w
)
);
ros.Publish(topicName, pose);
timeElapsed = 0;
}
}
物体の位置姿勢を取得し、

参考: https://github.com/Unity-Technologies/Unity-Robotics-Hub/blob/main/tutorials/ros_unity_integration/publisher.md

指定周期で発行
17

18.
[beta]
ステップ2. サブスクライバー用のC#スクリプトを記述
▪

色情報をROSトピックとして購読し、物体のマテリアルに反映

RosSubscriber.cs
using UnityEngine;
using Unity.Robotics.ROSTCPConnector;
using RosMessageTypes.Std;
public class RosSubscriber : MonoBehaviour
{
public GameObject obj;

ROSのサブスクライバーを登録
トピックを受信したときの
コールバック関数として ColorChange を設定

void Start()
{
ROSConnection.GetOrCreateInstance().Subscribe<ColorRGBAMsg>("color", ColorChange);
}
void ColorChange(ColorRGBAMsg colorMessage)
{
obj.GetComponent<Renderer>().material.color = new Color32(
(byte)colorMessage.r,
(byte)colorMessage.g,
(byte)colorMessage.b,
(byte)colorMessage.a
);
}

コールバック関数で
取得したROSメッセージから
物体のマテリアルに色情報を反映

}

参考: https://github.com/Unity-Technologies/Unity-Robotics-Hub/blob/main/tutorials/ros_unity_integration/subscriber.md

18

19.

ステップ3. MATLABでROSメッセージを送受信 ROSパブリッシャー C#スクリプト 認識 経路計画 意思決定 Unity ROS TCP Endpoint* ROS Toolbox Unity ROS TCP Connector ROSサブスクライバー C#スクリプト ROSサービス C#スクリプト 制御 MATLAB Unity Simulink Windowsマシン * R2022bバージョンよりROS Toolboxに同梱 19

20.
[beta]
ステップ3. MATLABでROSメッセージを送受信
1.

ROS coreを起動し、 ROS TCP Endpoint*を起動
rosinit;
helperConnectROSUnity; % ROS TCP Endpointを起動

2.

3.

Unityのツール上の右向き▶ボタンをクリックして、プロジェクトを実行
ROSのサブスクライバーを定義し、Unityの物体の位置姿勢を読み取る
poseSub = rossubscriber('/pose','DataFormat','struct')
poseMsg = receive(poseSub);
poseMsg.Position
poseMsg.Orientation

4.

ROSのパブリッシャーを定義し、色情報をUnityに送る (例:赤色に変更)
[colorPub, colorMsg] =
rospublisher("/color","std_msgs/ColorRGBA","DataFormat","struct");
colorMsg.R = single(255);
send(colorPub, colorMsg);

* ROS TCP Endpoint ROSノードはR2022bバージョンよりROS Toolboxに同梱。詳細は下記の例題を参照。
https://jp.mathworks.com/help/ros/ug/pick-and-place-workflow-in-unity-3d-using-ros.html

20

21.

アジェンダ ▪ ▪ ▪ ▪ 自己紹介 MATLAB および Simulink のご紹介 MATLAB と Unity の連携例 ロボットアプリケーション例 – 移動ロボットシミュレーション – ロボットアームシミュレーション – 自動運転シミュレーション ▪ まとめ 21

22.

例:移動ロボットのSLAM 22

23.

移動ロボット向けのSLAMとナビゲーション 単眼カメラVisual SLAM 経路計画 強化学習 Hybrid A*、 RRT、RRT* ORB-SLAM ダイナミック 経路計画 最適化 Automated Driving Toolbox Computer Vision Toolbox Navigation Toolbox Navigation Toolbox 強化学習による 移動ロボットの障害物回避 Robotics System Toolbox Reinforcement Learning Toolbox 23

24.

アジェンダ ▪ ▪ ▪ ▪ 自己紹介 MATLAB および Simulink のご紹介 MATLAB と Unity の連携例 ロボットアプリケーション例 – 移動ロボットシミュレーション – ロボットアームシミュレーション – 自動運転シミュレーション ▪ まとめ 24

25.

自律ロボットアーム 25

26.

ロボットアーム向けの経路計画と軌道計画 URDFモデル インポート URDFロボットモデルの 読み込みと複合的な 制約下での軌道計画 Robotics System Toolbox 逆運動学 軌道追従制御と Multibodyモデル 逆運動学デザイナーによる 塗布経路の生成 Simscapeを使ったロボット アームの軌道追従 Robotics System Toolbox Robotics System Toolbox Simscape Multibody Robotics System Toolbox Robot Library Data 26

27.

アジェンダ ▪ ▪ ▪ ▪ 自己紹介 MATLAB および Simulink のご紹介 MATLAB と Unity の連携例 ロボットアプリケーション例 – 移動ロボットシミュレーション – ロボットアームシミュレーション – 自動運転シミュレーション ▪ まとめ 27

28.

自動運転シミュレーションによる物体検出 28

30.

自動運転向けシナリオ生成とシミュレーション 3Dシーン作成 RoadRunner シーンオーサリング 3D環境・道路ネットワーク 作成用エディタ • • マウス操作・対話型のシナリオ オーサリング OpenDRIVE/FBXなどとの、 エクスポート/インポート対応 シナリオ生成 Automated Driving Toolbox ドライビングシナリオ シミュレーション Unity 3Dシミュレーション より“リアル”な環境、 物理センサーモデル 抽象度の高い、簡易的表現 確率的センサーモデル • • 統計的なセンサー特性に基づいた 簡易シミュレーション 高速な実行時間 • 認識系アルゴリズムを含む、 より現実に近い 自動運転シミュレーション 30

31.

アジェンダ ▪ ▪ ▪ ▪ ▪ 自己紹介 MATLAB および Simulink のご紹介 MATLAB と Unity の連携例 ロボットアプリケーション例 まとめ 31

32.

まとめ Unityと MATLAB を連携することで自律ロボティクスシミュレーションを実現 • 機体の動力学 シミュレーション • 自律アルゴリズム ロボット指令値 センサ出力 • 3Dシーンの描画 • 各種センサモデル • 周辺環境の物理 シミュレーション Unity MATLAB 1. 高精度な運動シミュレーション 1. 車両や機体運動を解くためのソルバー 2. AI・ロボットアルゴリズムを提供 URPとHDRPを用途に応じて使い分け 2. ローコードによる高度な機能開発 3. シームレスにハードウェア実装 自動コード生成により効率化 フォトリアリスティック環境再現 アセットが充実 道路、オフロード、農場 3. 豊富な日本語の情報源 書籍、インターネット 32

33.

これからロボット開発をはじめる方へ ▪ MATLABによるロボット開発ソリューション – こちらから詳細をご覧ください ▪ Unity 連携の例題 – ROS Toolboxの製品例題でお試しいただけます – Pick-and-Place Workflow in Unity 3D Using ROS 33

34.

参考URL ▪ Unity Robotics Hub – https://github.com/Unity-Technologies/Unity-Robotics-Hub ▪ ROS TCP Connector – https://github.com/Unity-Technologies/ROS-TCP-Connector ▪ Navigation 2 SLAM Example – https://github.com/Unity-Technologies/Robotics-Nav2-SLAM-Example ▪ Robotics Warehouse – https://github.com/Unity-Technologies/Robotics-Warehouse 34

35.

© 2022 The MathWorks, Inc. MATLAB and Simulink are registered trademarks of The MathWorks, Inc. See www.mathworks.com/trademarks for a list of additional trademarks. Other product or brand names may be trademarks or registered trademarks of their respective holders. 35