Isaac SIMで走るRasPiMouse [2] – ロボットを配置して走らせる

こんにちは。バイトの鍬形です。
前回に引き続き、Isaac Simというロボットシミュレータ上で、Raspberry Pi Mouseを走らせるまでの手順をご紹介します。

前回はIsaac Simの概要とセットアップ手順、サンプルプロジェクトの動作確認まで行いました。今回はRaspberry Pi Mouseをシミュレータ上で走らせます。

Isaac SDK 2019.3について

Isaac SDK 2019.3ではIsaac SimのベースがUnreal EngineからUnityに変更されました。本記事はIsaac SDK 2019.2を使用しているため、ご紹介する手順はIsaac SDK 2019.3以降に対応しておりません。ご了承ください。

使用環境

今回は下記環境を使用しました

  • CPU: Intel i7-7700HQ
  • GPU: Nvidia GeForce GTX 1080
  • Memory: 32GB
  • OS: Ubuntu 18.04.2 LTS
  • Isaac SDK: 2019.2

パッケージのダウンロード

今回使用するパッケージをGitHubに公開しました。内容は主にRaspberry Pi MouseのURDFモデルと、シミュレータ上でRaspberry Pi Mouseを走らせるための各種設定ファイルになっています。下記コマンドでappsディレクトリにリポジトリをクローンしてください。

$ cd ~/isaac/apps
$ git clone https://github.com/rt-net/RaspberryPiMouse_IsaacSIM.git
$ cd RaspberryPiMouse_IsaacSIM

JSONの書き方

Isaac SDKではJSONによってアプリケーションの設定をします。詳細は省きますがここで簡単にご紹介します。

Isaac SDKのJSONは主にgraphとconfigによって構成されています。graphには起動するnodeとnode同士の接続を設定するedgeを記述します。configにはそれぞれのnodeに関する設定を記述します。

例えば今回作成したパッケージではRaspberry Pi Mouseの速度制御を行うnodeと、ジョイスティックで目標速度を指定するnodeがあり、それぞれedgeで接続しています。configには速度制御に必要なRaspberry Pi Mouseのトレッドやタイヤ半径を記述しておくといった具合です。

実際のフォーマット等は公式ドキュメントをご覧ください。

https://docs.nvidia.com/isaac/archive/2019.2/doc/engine/components.html#application-jsons

ロボットの配置

Isaac SIMはROSでお馴染みのURDFを読み込むことができます。読み込みに関する設定方法として、Blueprintと呼ばれるノードベースのインターフェースを使用する方法と、JSONファイルに記述する方法があります。Blueprintの方が操作が直感的かもしれませんが、説明や共有のしやすさから今回はJSONファイルを使用しています。

公式ドキュメントのこちらの手順に沿ってURDFを読み込みます。

https://docs.nvidia.com/isaac/isaac_sim/plugins/robot_builder/urdf.html#configuring-robots-using-json

URDFの準備

マテリアルやアクチュエータの設定は別のファイルに記述するため、LinkとJointだけのシンプルなURDFが必要です。GAZEBO等の要素が入っているとエラーになってしまうためご注意ください。今回はセンサの例としてカメラ映像を取得したいので、RealSenseD435iを搭載したモデルを作成しました。

Isaac Sim用のURDFの置き場所は決まっています。下記コマンドでダウンロードしたパッケージ内にあるURDFをコピーします。

$ cp -r raspimouse_description ~/UnrealEngine/IsaacSimProject/Content/URDF

bridge_configの準備

パッケージ内にbridge_configというディレクトリがあります。その名の通りシミュレータとアプリケーションをつなぐ設定ファイルが置いてあります。前回のサンプルプロジェクト同様、raspimouse_full.jsonにraspimouse_full_graph.jsonとraspimouse_full_config.jsonのパスを記述します。[username]を使用しているユーザー名に書き換えてください。

$ vim bridge_config/raspimouse_full.json
{
  "graphs": ["/home/[username]/isaac/apps/RaspberryPiMouse_IsaacSIM/bridge_config/raspimouse_full_graph.json"],
  "configs": ["/home/[username]/isaac/apps/RaspberryPiMouse_IsaacSIM/bridge_config/raspimouse_full_config.json"]
}

raspimouse_full_config.jsonにはURDFの読み込みと搭載するカメラに関する設定が書かれています。例えばreferenseはURDFのパス、poseはロボットの初期位置です。spawn_configにはどのLinkとJointがホイールに関するものなのか記述しています。その他にも様々な設定項目があるので詳しくは公式ドキュメントをご覧ください。

https://docs.nvidia.com/isaac/isaac_sim/plugins/robot_builder/urdf.html#configuring-robots-using-json

フィールドの作成

Raspberry Pi Mouseが走り回るためのフィールドを作成します。まずはUnreal Engineのエディタを起動します。

$ cd ~/UnrealEngine
$ ./Engine/Binaries/Linux/UE4Editor IsaacSimProject -vulkan

チェッカーボードのようなものが配置されただけのフィールドが表示されたと思います。Unreal Engineではこうしたフィールドのことをレベルとよびます。

レベルの編集はIsaac Simと関係なく通常のUnreal Engineと変わりません。建物や家具の3Dオブジェクトなどを自由に配置することができます。レベル上に配置されたオブジェクトのことをUnreal Engineではアクタとよびます。今回はとりあえず走り回ることができればいいので、このシンプルなチェッカーボードのまま使用したいと思います。アクタに興味がある場合はUnreal Engineの公式ドキュメントをご覧ください。

https://docs.unrealengine.com/ja/Engine/Actors/index.html

Game Modeの設定

新規作成したレベルは最初に少しだけ設定が必要になります。
公式ドキュメントだとこちらのページです。

https://docs.nvidia.com/isaac/isaac_sim/content/maps/index.html#adding-new-environments

画面左上のウィンドウをクリックし、ワールドセッティングを開きます。

すると右側にワールドセッティングタブが表示されるので、Game Mode欄のGameMode OverrideからIsaacSimGameModeBaseを選択します。

これでIsaac Sim起動時にJSONファイルが読み込めるようになります。

レベルの保存

Ctrl+sを入力してレベルを保存します。レベルはMapsフォルダ内に保存します。今回はFlatMapというフォルダを作成し、その中にFlatMapという名前でレベルを保存しました。保存ができたら一旦Unreal Engineを終了してください。


シミュレータの起動

下記コマンドでレベルとロボットを指定してUnreal Engineを起動できます。

$ ~/UnrealEngine/Engine/Binaries/Linux/UE4Editor IsaacSimProject FlatMap -vulkan -isaac_sim_config_json="$HOME/isaac/apps/RaspberryPiMouse_IsaacSIM/bridge_config/raspimouse_full.json"

画面上部にある再生ボタンを押すとフィールド上にRaspberry Pi Mouseが配置されます。中央のシミュレータ画面(ビューポートと呼びます)はクリックしながらドラッグすることで視点を回転、W, A, S, Dキーで前後左右移動、Q, Eキーで上下移動ができます。ちょうど初期視点の真下にRaspberry Pi Mouseがあるはずです。

ビューポートからマウスカーソルを外したい場合はShift+F1を入力してください。

ロボットを操作する

それではロボットをブラウザ上のゲームパッドで操作したいと思います。まずは下記コマンドでアプリケーションを実行しましょう。

$ cd ~/isaac
$ bazel run apps/RaspberryPiMouse_IsaacSIM:joystick

次にブラウザからhttp://localhost:3000 にアクセスするとIsaac Sightが起動します。左のChannnelsタブのraspimouseにチェックを入れると搭載されたRealsenseD435iの画像と深度画像を見ることができると思います。

また、WindowsタブのVirtual Gamepadにチェックを入れることでVirtual Gamepadウィンドウが開きます。ウィンドウ内のCONNECT TO BACKENDをクリックし、ウィンドウ下のMousepadを選択します。ウィンド上部に表示される緑の丸をマウスでドラッグすることで、前後移動と左右旋回ができます。

さいごに

2回に渡ってIsaac Simのインストールと、Raspberry Pi Mouseのシミュレーションについてご紹介しました。JSONでセンサや操作インターフェースを簡単に設定でき、Unreal Engineによる綺麗なグラフィックを手軽に得られる…はずだったのですが2019.2を最後にUnreal Engine版の廃止という驚きの結末を迎えることとなりました。

Isaac Simはバージョン2019.3からIsaac Sim for Navigationとしてナビゲーションに特化することとなり、シミュレータはUnityベースになったようです。加えてマニピュレーションに特化したIsaac Sim for Manipulationも開発中とのことで楽しみな要素が盛りだくさんとなっています。詳細は公式ホームページをご覧ください。

https://developer.nvidia.com/isaac-sdk

新しいIsaac Simについて記事を書くか未定ですが、今後も注目していきたいです。

Raspberry Pi Mouse + ROS2でのナビゲーションの紹介

こんにちは、sato改めd-satoです。この記事はROS 2 Advent Calendar 2019の19日目の記事です。この記事ではRaspberry Pi Mouse + ROS2でのナビゲーションについて紹介します。

ROS2やRaspberry Pi Mouseのセットアップに必要な情報と、Raspberry Pi Mouse + ROS2で実際にナビゲーションパッケージを使用してみた例を紹介します。

“Raspberry Pi Mouse + ROS2でのナビゲーションの紹介” の続きを読む

MoveIt WorkShop 2019に参加しました。

こんにちはShotaです。この記事はROS 2 Advent Calendar 2019の16日目の記事です。

ROS2 Advent Calendar 2019

お仕事でROSCon2019に参加し、続けてMoveIt Workshopにも参加しました。そこで得た情報を少しでも共有できればいいなと思います。

MoveIt2の話が(チョット)入ってるのでROS2 Advent Calendarに投稿してます。

“MoveIt WorkShop 2019に参加しました。” の続きを読む

Isaac SIMで走るRasPiMouse [1] – セットアップ編

こんにちは。バイトの鍬形です。
Isaac SIMというロボットシミュレータでRaspberry Pi Mouseのモデルを走らせることができたので、その記録をブログに書いていきます。今回はSDKのインストールと、シミュレータのサンプルプロジェクトを動作させるところまでご紹介します。

Isaac SIMについて

Isaac SIMはNVIDIAが提供しているロボットシミュレータです。Isaac SDKというロボット向けプラットフォームの一部で、他にはIsaac Robot EngineとGemsがあります。Isaac Robot EngineはROSのようなフレームワークで、ロボットの動作に必要な様々なプロセスがモジュール形式で管理できます。Gemsはナビゲーションや物体認識など、NVIDIAが提供するパッケージ群の名称です。

今回注目するIsaac SIMはこれらの機能をシミュレーションできるので、ロボットの動作確認や機械学習用のデータセットを作成する際に強力に効果を発揮できそうです。

https://developer.nvidia.com/isaac-sdk

“Isaac SIMで走るRasPiMouse [1] – セットアップ編” の続きを読む

Humanoid Autonomous Challenge

自律2足移動ロボットの競技会のHAC2019夏ですが、参加者不在のため延期します。

Humanoid Autonomous Challenge

2019年9月21日(土)  プレ大会

参加者がいないため延期

次回の予定は、

2020年3月28(土) プレ大会

フィールドに置いてある複数のオレンジボールを触ってスタートエリアに戻ってくる時間を競います。

競技のルールは以下を参照して下さい。

Humanoid Autonomous Challenge 詳細

Raspberry Pi 4 Model Bが発表されました!

こんにちは、satoです。日本時間の2019年6月24日のお昼過ぎにRaspberry Pi 4 Model Bが発表されましたね!

弊社でもRaspberry Piを組み込んだロボットを発売していますので、新しいRaspberry Piとなれば気になる話題です。今回は

  • Raspberry Pi 4の新機能
  • Raspberry Pi 4 Model BとRaspberry Pi 3 Model B+とスペック上の違い
  • ラズベリーパイ財団のサイトに載っていたFAQの日本語版

の3つについてまとめてみます。
正確な情報については公式サイトをご確認ください 。

以下がラズベリーパイ財団のブログの該当エントリです。

https://www.raspberrypi.org/blog/raspberry-pi-4-on-sale-now-from-35/

“Raspberry Pi 4 Model Bが発表されました!” の続きを読む

Jetson NanoのSPIを有効にする

こんにちは、satoです。
いま、こんな感じでRaspberry Pi MouseにJetson Nanoを載せて新しいことができないかなーと試行錯誤中です。試行錯誤の過程でデフォルトでは無効になっているSPI(SPI1)を有効にする必要がありましたので、今回はJetson NanoをにインストールしているUbuntuのデバイスツリーを編集してSPIを有効にする方法をご紹介します。

“Jetson NanoのSPIを有効にする” の続きを読む

ROS2でラズパイマウスを動かす

こんにちは、hiramaです。
前回は、Raspberry PiにROS2をインストールしました。
今回は、ROS2を使ってRaspberry Pi Mouse(ラズパイマウス)を動かしてみたいと思います。
Raspberry PiにROS2をインストールする方法は、前回の記事を参考にしてください。

環境は以下のとおりです。

  • Raspberry Pi 3 B+
  • ROS2 Dashing Diademata
  • Raspberry Pi Mouse
“ROS2でラズパイマウスを動かす” の続きを読む

Raspberry Pi 3でRealSenseを使う

こんにちは、hiramaです。

今回は、Raspberry Pi 3BでRealSenseを使ってみたので、使い方を書いていきたいと思います。使い方はlibrealsenseのドキュメントhttps://github.com/IntelRealSense/librealsense/blob/master/doc/RaspberryPi3.mdを参考にやりました。しかし、簡単な説明となっているため、もう少し詳しく説明したいと思います。

想定している環境は以下のとおりになります。

  • Raspberry Pi 3 Model B
  • Ubuntu Mate 16.04.2 (armhf)
  • RealSense D435
“Raspberry Pi 3でRealSenseを使う” の続きを読む

XM-540スターターキット新発売

スターターキットは、サーボに付けるお試し用アルミ板とケーブル、六角レンチが付属したお得なオリジナルセットになっています

 以前販売していたMX-64ARスターターセットのXM540版です。それぞれのパーツはSHOPで個別に購入できますが、今回のキットには他では入手困難なお試し用アルミ板がおまけについてきます!!

フレーム有ると開発が捗りますよね?

ご購入はこちらから XM-540スターターキット