【作ってみた】川崎重工製産業用ロボットduAro2をOculus Questで遠隔操作してみた

こんにちは、技術統括本部、DX推進部の横川です。
IoTやロボットが関連したDX案件の開発を主に担当しています。

今回は川崎重工業株式会社様のduAro2をVRで動かすモックアプリケーションを作成したため、その紹介をします。
こちらがデモ動画です


duAro2 VR遠隔操作 デモ動画 01

操縦者がVRで遠隔のduAro2と視野を共有しVRのコントローラを操作すると、duAro2が動作するアプリケーションです。

1. duAro2とは

f:id:optim-tech:20210127185843p:plain
duAro2
川崎重工業様製の産業用ロボットであり、ロボットと人の共存・共同作業を可能にするロボットです。
robotics.kawasaki.com

2. 用意したもの

今回用意したハードウェアです。

  • duAro2
  • Ubuntu PC
  • Theta V
  • Mac mini
  • Oculus Quest

3.構成図

構成図は以下の通りです

f:id:optim-tech:20210316110229p:plain
構成図

  • duAro2
    今回操作するロボットです。

  • Ubuntu PC
    Oculus QuestとduAro2間の中継役です。

  • Theta V
    duAro2の視野を360度画像をストリーミング出力します。

  • Mac mini
    Theta Vの映像を配信します。
    実装当時はLinuxでThetaVのUVC規格が未対応の点と対応ドライバーがリリースされていない点があり、Theta Vに対応しているMac miniを用意しました。
    現在はTheta VのLinux対応ドライバーが出ています。 github.com

  • Oculus Quest
    VRモジュールです。
    今回はOculus Quest上でWebページを開き、WebページでTheta Vの映像を表示・duAro2の操作を行います。

4. WebRTCを利用した通信

株式会社時雨堂様が開発したWebRTCで映像や音声を配信できるネイティブクライアントであるMomoのAyameモードを利用させていただきました。
Ayameは時雨堂様が提供しているシグナリングサーバーです。
momo.shiguredo.jp

a. Oculus Questで360度動画ストリーミング再生を行う

WebRTCのMedia Channelを利用し、動画のやり取りを行います。
Mac miniは、Momoを利用しTheta Vの360度動画を配信します。

Oculus Questは360度動画を受信しWebページの画面に表示します。
今回はVR用WebフレームワークのA-frameを利用して画面に表示します。
aframe.io

  • Oculus Questに360度動画を表示するためのプログラムサンプルです。
<a-scene>
    <!-- アセット登録 -->
    <a-assets>
    <video id="remote-video" autoplay loop muted crossorigin="anonymous" playsinline webkit-playsinline></video>
    </a-assets>
    <!-- 360度にマッピングする -->
    <a-videosphere src="#remote-video" rotation="0 90 0" play-on-window-click>
    </a-videosphere>
    <!-- ユーザーの目線位置 -->
    <a-camera user-height="0" wasd-controls-enabled="false" arrow-key-rotation>
    <a-text id="msg" type="text" color="#FFF" position="0 0.5 -2.5" align="center" scale="1 1 1"
    value="Please click window to start 360 video streaming.">
    </a-text>
    </a-camera>
    <!-- コントローラーを登録 -->
    <a-entity id="ctlL" laser-controls="hand: left"></a-entity>
    <a-entity id="ctlR" laser-controls="hand: right"></a-entity>
</a-scene>
const startConn = async () => {
    // 初期化
    options_movie.video.codec = videoCodec;
    conn_movie = Ayame.connection(signalingUrl, roomId, options_movie, true);
    // Webrtc media channelに接続
    await conn_movie.connect(null);
    // 接続完了
    conn_movie.on('open', async ({ authzMetadata }) => {
        console.log(authzMetadata);
    });
    // 切断
    conn_movie.on('disconnect', (e) => console.log(e));
    // 映像表示
    conn_movie.on('addstream', (e) => {
        document.querySelector('#remote-video').srcObject = e.stream;
        document.querySelector('#remote-video').play();
    });
};

b. Oculus QuestからUbuntu PC(duAro2)にコマンドを送る

WebRTCのData Channelを利用し、コマンドのやり取りを行います。
WebページはOculus Questのコントローラの操作を基にコマンドをduAro2に送信します。
コントローラのボタンを押している間は移動し、ボタンを離すと移動をストップするように実装を行いました。

Ubuntu PCは、Momo(※1)を利用しコマンドを受信します。
Ubuntu PCは受信したコマンドを、別途作成したduAro2用のコントローラに渡します。
コマンドを制御コマンド(※2)に変換しduAro2に送信すると、duAro2が動きます。
※1 Data Channelでデータ受信し、duAro2用のコントローラにコマンドを流すため、Momoのプログラムを一部変更したアプリを別途用意しています。
※2 ロボットのアームの根本(ベース座標)を原点とした上下のアームの先端(ツール)の座標位置(ツール座標)を制御コマンドで命令して各アームを動かします。また、ツールはz軸回りに回転します。

f:id:optim-tech:20210127205229p:plain
duAro2の動きを座標的に表現

制御コマンドの種類は以下の通りです。

制御内容
1 ±X軸方向のツール座標の座標位置移動
2 ±Y軸方向のツール座標の座標位置移動
3 ±Z軸方向のツール座標の座標位置移動
4 ツールの±方向の回転移動
5 ツール座標の初期位置(ホーム座標)へ移動
6 エラーをリセットする

コントローラと操作コマンドのマッピングは以下の通りです。
今回はモックアプリなので簡単な作りにしています。

f:id:optim-tech:20210127185829p:plain:w600
コントローラへの制御コマンドマッピング

5. デモ動画

最終的にduAro2をVRで動かすモックアプリケーションが作成できました。


duAro2 VR遠隔操作 デモ動画 02

6. おわりに

今回は川崎重工業株式会社様のduAro2をVRで動かすモックアプリケーションの紹介をさせていただきました。

オプティムではエンジニアを募集しております。 www.optim.co.jp

参考資料