AWSIMでロボットを動かしてみる

## 概要

「小型ロボットのシミュレータで遊んでみよう！」


さて、今回小型ロボットでAWSIMを動かしてみましょう。小型ロボットのシミュレータを利用することで、実際にロボットを作らずにその動作を体験することができます。このシミュレータを使うと、リアルな環境でロボットを動かすことができ、仮想空間での動作テストができるため、実際の開発時に大いに役立ちます。複雑なシステムを実際に動かす前に、シミュレーションを行うことで、トラブルシューティングや改善点を見つけ出すことができます。加えて、シミュレータを使うことで、ロボットの動作を自由自在にカスタマイズすることもできます。様々な機材を購入しテストしながら開発するよりもはるかに簡単に、自分だけのロボットを作ることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/b8b1584c-28ca-b830-fbaa-9f03e7548fc6.png)

## 小型ロボットを作ってみる
準備するもの
- fbxの車両モデル
　本体、車輪があればOKです
- 環境のモデル
　HDRP対応しているモデルがあればOKです。
方向指示器やブレーキランプなどもあるとなお良いですが、AWSIMで動かす上では必須ではないので必要に応じて追加するくらいにとどめておくと良いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/2b475d44-77ee-7e23-47e0-4a4db9f34a48.png)


1.環境の準備
AWSIMと同様の構成にしましょう。前回の記事が参考になりますので同様に環境にEnvironmentのスクリプトをつけていきましょう。

https://qiita.com/ttanaka3/items/9b9540b056dfc5b30a27

謎のSceneManagerを貼り付けていきます。スクリプトに”synchronizing model data between Unity and RGL”とかいてあったのでliadarの点群処理の類のなにかだと思います。私はあまり良くわかってないです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/dfd0571d-967f-429c-36ba-f50f4fdb31ee.png)

2.次に車両モデルを作成していきます。
robotにAWSIMのLexusと同じくスクリプト、rigidbodyを追加していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/60e635e7-bdb8-e1d9-ad4e-ec36a800aad2.png)

一旦全部スクリプトを使わずに再生してみると車体が沈んでいきます。ステップ実行すると車体が沈む様子が見て取れます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/dd0b68b3-771f-d4e7-6e51-f81c8b46981d.png)

3.collidarを作っていきましょう。

AddComponentから車体にあったcollidarをつけていきましょう。
:book: 一度mesh collidarをつけてみたのですが、rigidbodyはboxかsphere collidarしか受け付けませんと怒られてしまったので、今回はbox collidarをつけることにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/c437e60e-4089-4452-c150-c1a00cdf27f5.png)

WheelCollidarもつけていきます
こんな感じで車輪の半径と位置を調整していきましょう。（厳密にやると結構たいへんなので頑張りましょう）
Add Compoenentからwheelとwheel configを追加していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/2a574130-0133-4658-2f19-546c286aa26c.png)

実行してみるとこんな感じになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/9d11c5ba-8888-0357-a8e9-8bf9d7437af5.png)

さて、ちゃんと４つwheel collidarをつけて実行するとこんな感じになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/f568b2a2-d86c-06f2-e888-b18adc190f55.png)


重心COM（center of mass）を加えていきましょう。座標の値だけわかればOKなので、中身は空で問題ないです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/37b58997-fb46-8f92-70f2-24bb69b9b386.png)
これをvehicleのC#スクリプトの設定のところにドラッグ＆ドロップすると車両の重心が設定できます。

次にFrontAxleRearAxleのところにwheel collidarのwheelをドラッグ＆ドロップしましょう。vehicle keybord inptのところをチェック入れるとキー操作で走るようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/d156cebb-52bb-b958-a82c-8f244d452ead.png)

これで車両の設定は完了です。

4.センサを設定していきましょう。
まずbaselinkを後輪間中点に設定し、sensor_kit_baselinkはvelodyneのtopの位置にしておきます。これはLexusのものからそのまま持ってきて位置だけ調整でOKでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/857d7f30-a00d-ab7e-d99c-34716dab231e.png)

センサを配置し終わったら実行してみましょう。lidarの点群が出ていると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/6a724edf-ddc0-b44d-afa7-87e747648678.png)

---

せっかくなので違う角度でも。もとからAssetにあったNPCも置いてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/d49a7272-04d8-18d0-aa1c-4b6f00021b65.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/bfcf1ed5-d641-1233-8996-333a0d7f91d9.png)

joyconの設定もお好みで追加していきました。Edit->ProjectSetting->InputManagerから設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/a956beaf-714e-6bbe-9781-da55df29fd17.png)

こちらを参考にbuildしていきましょう。

https://qiita.com/ttanaka3/items/01ffe06f95f4d7a03e8a#unityproject%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%A8buildautoware%E3%81%A8%E3%81%AE%E9%80%A3%E6%90%BA

## Rvizと連携させる
せっかくなのでRvizと連携させていきましょう。いつものコマンドでとりあえずAutowareを起動させます。

https://qiita.com/ttanaka3/items/6ae5f8331d60b0454308#%E5%AE%9F%E9%9A%9B%E3%81%AB%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B

`ros2 launch autoware_launch e2e_simulator.launch.xml vehicle_model:=sample_vehicle sensor_model:=awsim_sensor_kit map_path:=$HOME/maps/nishishinjuku_autoware_map` でRvizを起動し。自己位置を入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/55a4d0a1-e999-b1e0-f20f-183fe9114295.png)

車両はレクサスになってしまってますが、Rviz上でちゃんと表示されていることがわかります。車両モデルのdescriptionを入れ替えるとちゃんと走行できそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/3f2fe92e-49a0-b624-fd96-747a6588821b.png)

今回はジョイコンで操作してみました。自己位置外れなどはありませんでした。（ジョイコンで操作するより自律走行させるほうが安全説ある）
![test.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639823/fe5a4680-7d73-3f6f-9d34-c7b752560b06.gif)

## 終わりに

今回は小型のロボットをAWSIMで走らせるについて書きました。小型車両のdescription持っている方がいれば是非この先をチャレンジしてみてください！！

PCD,LL2はMAPIV Engineを使うとrosbagから簡単に作成できます。

https://www.map4.jp/technology#mapiv_engine