自律施工技術開発基盤OPERAを試してみる（ROS2 topicから動かしてみる編）

# 1. はじめに
今まで、屋内における作業や物品搬送をするロボットについてのシミュレーションをしてきました。しかし屋外でも使えるロボットとも連動できればより効率的な作業につながるなと考え、何かいいものはないかと探していましたところ、以下のgithubのリポジトリを見つけました。

https://github.com/pwri-opera

国立研究開発法人の土木研究所 技術推進本部 先端技術チームが公開しているリポジトリだそうで、詳細な説明はそちらのリポジトリを参照いただきたく思いますが、ROSを介して建機を動かせるプラットフォームとのことです。

そしてUbuntu 22.04で動くそうですから、ちょうどいいと思いまして、試してみたのがこの記事になります。

# 2. 実行環境
- CPU: CORE i7 7th Gen
- メモリ: 32GB
- GPU: GeForce RTX 2070
- OS: Ubuntu22.04(WSL2ではなくPCに直接インストール)

# 3. 環境構築手順
物理エンジンにNvidia PhysXを用いている以下のリポジトリで公開されているシミュレーション環境を私のPC内で構築します。

https://github.com/pwri-opera/OperaSim-PhysX

環境構築についてはこのリポジトリのREADMEの手順（ROS2の場合）をそのまま実施して問題なく構築できました。ただ、唯一Unityのインストールのところは少し引っかかりましたので、以下の3.1節に示します。

## 3.1 唯一引っかかったUnityのインストールの部分
① Unity Hubのインストール
以下のサイトの手順に従い、Unity HubをUbuntuにインストールしました。（Unity Editorのインストールはまだです）

https://symfoware.blog.fc2.com/blog-entry-2745.html

② Unity(ver:2022.3.4f1)のインストール
①の手順でインストールしたUnity Hubの画面からUnity EditorをインストールするところでUnity(ver:2022.3.4f1)はデフォルトではインストール対象として出てきません（以下の画面のバージョンがデフォルトで推奨されてきます）。

![Screenshot from 2024-12-28 10-50-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/333379e8-d061-b40c-67f5-c680eaf536cd.png)

そこでver:2022.3.4f1を見つけるために、以下の画面の赤枠で囲んだ"Archive"＞"Long Term Support"の順でクリックしていきます。

![archive.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/490bffb8-2738-0a91-3e57-bdfd057a2482.png)

![long.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/8260666b-75a9-b744-3fb1-046f527dcefc.png)

そうすると以下の画面が開きますので、2022.3.4f1を探し"install"をクリックします。

![Screenshot from 2024-12-28 10-51-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/81650ff9-2edd-62d7-f9fb-bb9009b6e56c.png)

# 4. シミュレーション
3章でのシミュレーション環境構築後、まずUnityでAsset/Scenes/SampleScene.unityを開きます。
そして、ROS-TCP-Connectorの設定について、"Robotics" > "ROS Setting"の順でクリックして出てきた画面の"Protocol"のところを"ROS1"->"ROS2"に変更します。そのほかの設定はそのままとしました。

![ROS2Set.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/26c4ede6-1b2d-d935-085f-ffe57bcf15ac.png)

そしてUnityの再生ボタンをクリックしてシミュレーションを開始します。

次にターミナルを開き以下のコマンドを入力し、ROS2とUnityの連携を開始します。
なお、以下のコマンドで出てくる"/Opera_test"は私が設定したワークスペースの名前なので、環境によって変える必要があります。
```:terminal(1)
source ~/Opera_test/install/setup.bash
ros2 launch ros_tcp_endpoint endpoint.py
```

zx120という型式の油圧ショベルのアームをROS2 topicを介して動かすには、以下のコマンドを入力します。"data: 0.2"はアームの角度をラジアンで指定する部分です。数値を変更することで角度を調整できます。
```:terminal(2)
source ~/Opera_test/install/setup.bash
ros2 topic pub /zx120/arm/cmd std_msgs/Float64 "data: 0.2"
```

zx120という型式の油圧ショベルをROS2 topicを介して前進させるには、以下のコマンドを入力します。
```:terminal(3)
ros2 topic pub /zx120/tracks/cmd_vel geometry_msgs/Twist "{
  linear: {x: 1.0, y: 0.0, z: 0.0},
  angular: {x: 0.0, y: 0.0, z: 0.0}
}"
```

ic120という型式のクローラダンプをROS2 topicを介して前進させるには、以下のコマンドを入力します。
```:terminal(4)
ros2 topic pub /ic120/tracks/cmd_vel geometry_msgs/Twist "{
  linear: {x: 1.0, y: 0.0, z: 0.0},
  angular: {x: 0.0, y: 0.0, z: 0.0}
}"
```

これらの一連の動きを試してみたシミュレーションの動画は以下になります。（ちなみに私はショベルの免許もダンプの免許も持っていませんので、どういった動かし方が正しいのかはよくわかっていません）

<iframe width="560" height="315" src="https://www.youtube.com/embed/xmkPCtwU-ZI?si=FcI0fsrhNP4MBFfe" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


# 5. まとめ
今回は国立研究開発法人の土木研究所 技術推進本部 先端技術チームがgithubで公開している自律施工技術開発基盤OPERAのサンプルファイル内の建機をROS2 topicを介して動かすことに成功しました。

また本記事ではROS2 topicを投げて建機を動かしてみましたが、次回はREADMEでも紹介されているunity用launchファイルから動かす方法を試してみたいと思います。

# 参考記事やサイト
[1][pwri-opera](https://github.com/pwri-opera)
[2][OperaSim-PhysX](https://github.com/pwri-opera/OperaSim-PhysX)
[3][Ubuntu 22.04へUnity開発環境をインストール](https://symfoware.blog.fc2.com/blog-entry-2745.html)