Upgrade to Pro — share decks privately, control downloads, hide ads and more …

HakoniwaUnityAsset

 HakoniwaUnityAsset

この資料では、Unityの箱庭アセット作るための情報を整理しています。
- 前提とする環境
- GitHubリポジトリ情報
- 箱庭Unity環境のインストール方法
- Workシーンの説明
- 箱庭Unityアセットの作成手順(例)

Takashi Mori

March 25, 2024
Tweet

More Decks by Takashi Mori

Other Decks in Technology

Transcript

  1. 前提とする環境 • OS︓Windows、MacOS、Ubuntu • メモリ︓8GB以上 • GPUメモリ︓8GB以上 • Unityバージョン •

    Unity Hub: v3.7.0以上 • Unity︓2022.3.10f1以上 • ターミナル • Windowsの場合は、WSL2が必要です。 • それ以外の場合は、標準のターミナルをご利⽤ください。 3
  2. GitHubリポジトリ情報 • URL • https://github.com/toppers/hakoniwa-unity-simasset-plugin • リポジトリ名 • hakoniwa-unity-simasset-plugin •

    説明 • 箱庭のUnityアセットの共通機能を管理しています。 • 将来的にはUnityアセットストアでの公開を⽬指しています。 • ライセンス • TOPPERSライセンス 4
  3. Workシーンの説明 • Workシーンは、箱庭Unityアセットを作成するためのシーンです。 • 箱庭Unityアセットは、「Robot」配下に配置します。 • デフォルトでは以下のように、2つのアセットが配置されています。 6 SampleRobot 箱庭のデフォルトのロボットです。

    作動モーターで動作し、センサとして カメラや2DLiDARがあります SampleRobotTestDriver SampleRobotのテストドライバです。 キー⼊⼒を受け付け、SampleRobot にPDUデータを送信します。また、 SampleRobotが送信するPDUデータ を受信してデータ表⽰します。 SampleRobotのカメラ データを表⽰している様⼦
  4. 作りたいものの仕様を検討する 8 基本機能 ロボット部品 実現⽅法 遠隔操縦 アクチュエータ 作動モーターにタイヤを2個つけて実現する キャスター バックに球形コライダーを2個つける

    障害物検出 超⾳波センサ センサの有効範囲は5mとして、 4⽅向監視する ・左(-90度)、右(90度) ・斜め左(-10度)、斜め右(10度) 衝突検出 バンパーセンサ 衝突検出︓ON ⾮検出時︓OFF 荷物着脱検出 荷物着脱検出センサ 荷物あり︓ON 荷物なし︓OFF 荷物運搬 荷物運搬⽤BOX コライダーを4⽅につける Body 荷物運搬⽤BOX キャスター アクチュエータ バンパー 超⾳波 センサー 荷物着脱 検出センサ バンパー キャスター 超⾳波 センサー アクチュエータ
  5. 外部との通信データ仕様を検討する 9 部品 通信データ型 通信データ名 送信周期 アクチュエータ geometry_msgs/Twist cmd_vel -

    超⾳波センサ pico_msgs/LightSensor ultrasonic_sensor 20msec バンパーセンサ std_msgs/Bool bumper_sensor 20msec 荷物着脱検出センサ std_msgs/Bool baggage_sensor 20msec
  6. 箱庭部品選定 基本部品 ArticulationBody アクチュエータ ArticulationBody Unityの C#スクリプト センサ Unityの C#スクリプト

    マテリアル ロボットルート ロボット毎に1個割り当てする (ロボット全体制御パーツ) Unityの C#スクリプト 既存の箱庭部品が使えないかチェックする (Assets/Model/HakoRoboParts)
  7. 選定結果 11 基本機能 ロボット部品 選定したもの 遠隔操縦 アクチュエータ 02_Actuator/ - DifferentialMotorController

    - L-Wheel - R-Wheel キャスター 01_basic/ - Caster 障害物検出 超⾳波センサ 対応するものはなかった(⾃作する) 衝突検出 バンパーセンサ 03_Sensor/ - TouchSensor 荷物着脱検出 荷物着脱検出センサ 03_Sensor/ - TouchSensor 荷物運搬 荷物運搬⽤BOX 対応するものはなかった(⾃作する) Body 荷物運搬⽤BOX キャスター アクチュエータ バンパー 超⾳波 センサー 荷物着脱 検出センサ バンパー キャスター 超⾳波 センサー アクチュエータ
  8. 箱庭部品を組み⽴てる(バンパ︓1/4) • MainBodySubHolderにバンパ︓タッチセンサをつける • Interface配下に、TouchSensorを設置する • ただし、デフォルトではサイズが⼩さいのと位置もずれているので以下のように調整します。 19 変更前 変更後

    ※デフォルトのタッチセンサは衝突検出はできますが、衝突してもすり抜けてしまいますので、 ※必要に応じて⼲渉オブジェクト(isTriggerがFalseのコライダー)を配置してください。
  9. 超⾳波センサを⾃作する(1/3) • Unityを利⽤した超⾳波センサの実装としては、 • Physics.Raycast • を利⽤します。 • 今回の場合は、4⽅向のセンシングになるので、 •

    センシング時に4⽅向の距離測定を⾏うことで実現します。 • ソースコード︓ LightSensor4way 25 障害物 障害物までの距離 測定ポイント Physics.Raycast() Unityのコライダーをアタッ チしたゲームオブジェクト 超⾳波センサ実装のイメージ︓
  10. 超⾳波センサを⾃作する(2/3) • 距離を測定するスクリプト解説︓ 26 前⽅⽅向 衝突検出した距離 検出範囲 現在位置 障害物検出した場合、その光線を緑⾊で表⽰する (

    Unityのシーンビューの場合のみ) 障害物検出しなかった場合、その光線を⾚⾊で表⽰する ( Unityのシーンビューの場合のみ) 前⽅⽅向を取得 (呼び出し元で⽅向を変えています)
  11. ロボット名とPDUデータ名を確認する(2/3) 30 部品 通信データ型 通信データ名 アクチュエータ geometry_msgs/Twist cmd_vel 超⾳波センサ pico_msgs/LightSensor

    ultrasonic_sensor バンパーセンサ std_msgs/Bool bumper_sensor 荷物着脱検出センサ std_msgs/Bool baggage_sensor • PDUデータ名は、各部品の通信データ名です。 • スクリプトアタッチする際に、通信データ名を以下で設定しています。
  12. ロボット名とPDUデータ名を確認する(3/3) • 箱庭のPDUデータにアクセス・オブジェクトを取得するための名前は、 • <ロボット名>_<通信データ名>Pdu • です。 ロボット名︓BuggageTransporter 31 部品

    通信データ名 PDUデータ・アクセスオブジェクト名 アクチュエータ cmd_vel BuggageTransporter_cmd_velPdu 超⾳波センサ ultrasonic_sensor BuggageTransporter_ultrasonic_sensorPdu バンパーセンサ bumper_sensor BuggageTransporter_bumper_sensorPdu 荷物着脱検出センサ baggage_sensor BuggageTransporter_baggage_sensorPdu
  13. 動作確認内容を検討する 32 基本機能 ロボット部品 動作確認内容 遠隔操縦 アクチュエータ キーボード操作で移動できるか確認する キャスター 移動時にボディを⽀えられるか

    障害物検出 超⾳波センサ 障害物を配置して、レーザ光線の⾊が変わ ることを確認する 緑︓検出 ⾚︓未検出 衝突検出 バンパーセンサ 衝突検出︓⾚(ゲームオブジェクトの⾊) ⾮検出時︓⻘(ゲームオブジェクトの⾊) 荷物着脱検出 荷物着脱検出センサ 荷物あり︓⾚(ゲームオブジェクトの⾊) 荷物なし︓⻘(ゲームオブジェクトの⾊) 荷物運搬 荷物運搬⽤BOX 荷物を落とすためのゲームオブジェクトを作成 し、ロボットの荷物運搬⽤BOXに荷物を落と す。 3 1 2 キーボード操作⽤ ゲームオブジェクト バンパーセンサ確認⽤ ゲームオブジェクト 荷物着脱検出センサ確認 ゲームオブジェクト 4 荷物を落とすための ゲームオブジェクト 動作確認するための機能要素
  14. テストドライバ概要(1/3) • 考え⽅その1 • テスト対象ロボットのPDUデータをテストドライバがアクセスして、 • ロボットが期待した動きやデータを返すかをチェックする 34 テスト ドライバ

    テスト対象 ロボット PDUデータ (センサ) PDUデータ (アクチュエータ) テスト対象ロボットに ⼊⼒を与える (移動指⽰など) テスト対象ロボットの 出⼒を確認する (タッチセンサの値とか)
  15. テストドライバ概要(2/3) • 考え⽅その2 • テストドライバの⼊出⼒確認には、ゲーム機能を利⽤する 35 テスト ドライバ PDUデータ (センサ)

    PDUデータ (アクチュエータ) 1 キーボード操作⽤ ゲームオブジェクト 2 バンパーセンサ確認⽤ ゲームオブジェクト OFF ON PDUデータの値に応 じてゲームオブジェク トの⾊を変更する