マニピュレーター付きロボットをシミュレーション環境（Gazebo）で自律走行させてみた

# 1. はじめに
前回の記事[[1]](#参考記事やサイト)ではNeobotix社が公開しているリポジトリを利用し、Gazebo上でマニピュレーター付きロボットのシミュレーションを試行することができました。しかしながら、自律走行機能が実現できていなかったため、本記事ではその課題解決に取り組みました。

# 2. 実行環境
- CPU: CORE i7 7th Gen
- メモリ: 32GB
- GPU: GeForce RTX 2070
- OS: Ubuntu22.04(WSL2ではなくPCに直接インストール)
- ROS2: Humble
- Nvidia Driver: 535 
- 対象ロボット: Neobotix社 MPO-700(マニピュレーター搭載）

# 3. 構築手順
## 3.1 リポジトリのクローン
前回の記事[[1]](#参考記事やサイト)でクローンしたリポジトリだけでは、自律走行できませんので、以下の「neobotix/neo_localization2」「neobotix/neo_local_planner2」「neobotix/neo_nav2_bringup」をクローンしてきます。

https://github.com/neobotix/neo_localization2/tree/humble

https://github.com/neobotix/neo_local_planner2/tree/humble

https://github.com/neobotix/neo_nav2_bringup/tree/humble

クローン先は記事[[1]](#参考記事やサイト)で作成したワークスペースです。そして私の環境はROS2 HumbleですのでHumbleに対応したブランチを以下のコマンドでクローンしてきます。

```:terminal
cd ~/ros2_mmo500/src
git clone --branch humble https://github.com/neobotix/neo_localization2.git
git clone --branch humble https://github.com/neobotix/neo_local_planner2.git
git clone --branch humble https://github.com/neobotix/neo_nav2_bringup.git
```

**注：この記事ではクローン先のファイル名はros2_mmo500としていますが、ここは適当で大丈夫です。**

## 3.2 ビルド
前回の記事[[1]](#参考記事やサイト)から追加でインストールする必要のあるパッケージはありませんでしたので、以下のコマンドでビルドしました。
```:terminal
cd ~/ros2_mmo500
colcon build
```

# 4. シミュレーション結果
ビルド完了後、以下のコマンドでシミュレーション環境(Gazebo)とrviz2起動しました。
```:terminal(1)
source ~/ros2_mmo500/install/setup.bash
ros2 launch neo_simulation2 simulation.launch.py
```

```:terminal(2)
source ~/ros2_mmo500/install/setup.bash
ros2 launch neo_simulation2 navigation.launch.py
```

```:terminal(3)
source ~/ros2_mmo500/install/setup.bash
ros2 launch neo_nav2_bringup rviz_launch.py
```

起動したときの画像が以下です。左の画面がGazeboで、右の画面がrviz2の画像です。rviz2で
地図が読み込まれていることに加え、ロボットに搭載されているLidarで周辺環境を認識できていることが読み取れます。

![Screenshot from 2024-10-26 09-04-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/f9c10d8a-afbd-17d7-ebff-519efd3093eb.png)

そして、rviz2の「Nav2 Goal」で移動させたいところを指定すると、ロボットのMPO-700(マニピュレーター搭載）がその位置に自律走行して移動することが確認できました。

またKimらの論文[[2]](#参考記事やサイト)では、ロボットが自律走行後にマニピュレーターで塗装を行うシミュレーションを行っています。本記事では、このシミュレーションを再現するために、自律走行後に以下のコマンドを実行しました。

```:terminal(4)
source ~/ros2_mmo500/install/setup.bash
ros2 topic pub --once /arm_controller/joint_trajectory trajectory_msgs/JointTrajectory '
{
  "joint_names": ["ur10shoulder_pan_joint", "ur10shoulder_lift_joint", "ur10elbow_joint", "ur10wrist_1_joint", "ur10wrist_2_joint", "ur10wrist_3_joint"],
  "points": [
    {
        "positions": [0.0, -0.5, 1.0, 0.0, 0.0, 0.0],
        "time_from_start": { "sec": 2, "nanosec": 0 }
      },
      {
        "positions": [0.0, -0.5, 1.2, 0.0, 0.0, 0.0],
        "time_from_start": { "sec": 4, "nanosec": 0 }
      },
      {
        "positions": [0.0, -0.5, 1.4, 0.0, 0.0, 0.0],
        "time_from_start": { "sec": 6, "nanosec": 0 }
      },
      {
        "positions": [0.0, -0.5, 1.6, 0.0, 0.0, 0.0],
        "time_from_start": { "sec": 8, "nanosec": 0 }
      },
      {
        "positions": [0.0, -0.5, 1.8, 0.0, 0.0, 0.0],
        "time_from_start": { "sec": 10, "nanosec": 0 }
      }
  ]
}'
```

以下が上記の手順で、「ロボットが自律走行後にマニピュレーターで塗装を行う」という様子をシミュレーションで再現した動画です。

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

# 5. まとめ
Neobotix社の公開リポジトリを活用し、Gazeboシミュレーション環境下で、マニピュレーターを搭載したロボットによる自律走行と簡単な塗装作業（平面壁へのスプレーガンなどによる塗装作業）を再現することに成功しました。これは、前回の記事[[1]](#参考記事やサイト)で挙げた以下の3つの課題のうち、「②マニピュレーター付きロボットの自律走行は実現できていない」と「③マニピュレーターの動作制御が不十分」という課題について、目標の位置に自律走行で到達し、マニピュレーターで簡単な直線軌跡を再現できる程度に改善できたと考えています。

前回の記事[[1]](#参考記事やサイト)で挙げた課題：
①マニピュレーター付きロボットが意図せずわずかに移動する
②マニピュレーター付きロボットの自律走行は実現できていない
③マニピュレーターの動作制御が不十分

今後はKimらの論文[[2]](#参考記事やサイト)を参考に、より現実に近い塗装作業のシミュレーションを目指していきたいと思います。また、本件については「①マニピュレーター付きロボットが意図せずわずかに移動する」という課題の解決も視野に入れています。


# 参考記事やサイト
[1][マニピュレーター付きロボットをシミュレーション環境（Gazebo）に読み込んで動かしてみた](https://qiita.com/bebebefu/items/ed7db422a01d9c722ffa)
[2][Development of BIM-integrated construction robot task planning and simulation system](https://www.sciencedirect.com/science/article/pii/S0926580521001710)