こんにちは。来月からB4になる五月女(そうとめ)です。 ここ数か月で"Virtual Tsukuba Challenge on Unity"というものを触っていたので 、今回はそれについてご紹介します。
Virtual Tsukuba Challenge(以下VTC)とは、元々2018年に千葉工業大学の研究センターがUnreal Engine4で開発したシミュレータです。 毎年開催されている移動ロボットの大会、つくばチャレンジをシミュレータ上で再現しよう、という試みです。 ※この大会は我が研究室でも私と同学年の永井君達が去年参加していました(該当記事)。
そして2020年のコロナ禍により、実機大会での開催が難しくなったことで、このプロジェクトが注目を集めることとなります。 対面での開催が困難となったため、シミュレーション環境での開催となり、UE4のVTCが公式シミュレータとして採用されたのです。
その流れで開発されたのがUnity版のVTC、"Virtual Tsukuba Challenge on Unity"でした。 これは筑波大学の田中良道さんと桑野僚大さんが開発したもので、こちらも2020年の公式シミュレータとして採用されています。
私はUnityでロボットのシミュレーションをしていきたいと考えていたので、まずはこれを触ってみるのが妥当だろうということになりました。 実際にはROS(Robot Operating System)とUnity間で通信を行い、Unity上のロボットの制御を行います。 とりあえずUbuntuのPCにUnityを入れてROSと通信してみたところ、無事通信に成功しました。
ただPCのスペックがあまり良くないのでめちゃくちゃ重い…とてもシミュレーションが出来そうな環境ではなさそうです。
しかし先輩の話によるとWindowsでUnity(VTC)を動かしつつ、UbuntuでROSを動かして通信することも出来るそう。 それが本当なら研究室のノートパソコン(Ubuntu)から自前のデスクトップPC(Windows)上のロボットを動かせそうなので、試してみます。
出来ました!Ubuntuの端末が次々と更新されているのが分かるかと思います。 ただこれだとあまり面白みもないので、次はUbuntuからUnity上のロボットを動かしてみたいと思います。 UbuntuのPCのキーボードでUnity側のロボットを操作するような想定です。 これはROSのteleop_twist_keyboardというパッケージを用いれば簡単に行うことが出来ます。
実際にやってみました。 動画だと分かりにくいですが、右下に写っているキーボードはROSの入ったノートPCで、Unityの画面はWindowsのデスクトップPCです。 別のパソコンからUnity上のロボットを動かせると実際に通信が出来ているのが実感出来て中々感動しました。
次にUnity→ROSの通信が出来ているのかを確認したいと思います。 上のキーボード操作でROSからUnityへ速度指令値を送る通信が出来ていることは確認出来たので、今度はその逆をやります。
具体的にはUnity上のロボットのRGBカメラ画像をROS側で取得するという想定です。 これもさほど難しくなく、RvizというROSの可視化ツールを用いれば簡単に行うことが出来るはず…
と、思っていたのですが謎のエラーでRvizが起動できない事態が発生。
このエラーでドツボにはまってしまいました。 海外のQ&Aサイトを漁ったり、先輩に何時間も使ってもらったのにも関わらず全く実行出来る気配がない。
もうこれ以上時間をかけても無駄な気がしたので、Ubuntuごと再インストールすることにしました。 困ったときは脳筋です。
先輩からUbuntu18.04の入ったUSBメモリを借りてきて、再インストールに成功。 ROSやその他のパッケージも入れ直しました。 すると…
無事にRvizを起動出来ました!
(別のパソコンで撮った映像を組み合わせています)本題のカメラ画像取得も問題なく出来ているようです。 これでUnity-ROS間の相互通信を確認することが出来ました。
なんとなく無駄に時間を沢山使ってしまったような気がしますが、研究とはこんなものなのでしょうか。 これから卒業研究が本格的に始まるので、気を引き締めていこうと思います。