ROS2 humbleの環境で ロボットHusky を遠隔操作で走行させるシミュレーションをしてみる

# 1. はじめに
　今まで取り組んできた記事[[1]](#参考記事やサイト)[[2]](#参考記事やサイト)[[3]](#参考記事やサイト)[[4]](#参考記事やサイト)[[5]](#参考記事やサイト)[[6]](#参考記事やサイト)では、マニピュレーター付きロボットのシミュレーションに挑戦しました。ただし、これらの記事で扱ったのは「塗装」作業であり、マニピュレーターは上下に動かすだけで「把持」動作は行っていませんでした。
　そこで、ロボットが実際に「把持」作業を行う様子をシミュレーションで再現できないかと考えていたところ、Oyediranらの論文[[7]](#参考記事やサイト)において、Huskyというロボットにマニピュレーターを搭載し、フレームなどの資材を把持して運搬する事例が紹介されていることを知りました（ただし、実際に物理的な把持を行っているのか、シミュレーションの設定上把持できるようにしているのかは調査中です）。
　そこで、本記事ではこの論文の再現に向けた第一歩として、Huskyのシミュレーション環境を構築し、遠隔操作による走行を試みた過程を紹介したいと思います。


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

# 3. 対象としたロボット
Oyediranらの論文[[7]](#参考記事やサイト)で使用されていたロボットはHuskyというもので、私も展示会などで目にしたことがあります。

https://clearpathrobotics.com/husky-a300-unmanned-ground-vehicle-robot/

シミュレーション環境として以下のリポジトリが公開されています。

https://github.com/husky/husky

この記事では👆のリポジトリのhumble-develというブランチを使って環境を構築してきます。

https://github.com/husky/husky/tree/humble-devel

# 4. 構築手順
## 4.1 ワークスペースの作成
```:terminal
mkdir -p ~/husky_ws/src
cd ~/husky_ws/src
```

## 4.2 Huskyリポジトリ (humble-devel ブランチ) のクローン
```:terminal
git clone -b humble-devel https://github.com/husky/husky.git
```

## 4.3 依存関係のインストール
```:terminal
cd ~/husky_ws
rosdep update
rosdep install --from-paths src --ignore-src --rosdistro=humble -y
```

## 4.4 Husky パッケージのビルド
```:terminal
source /opt/ros/humble/setup.bash
colcon build
source ~/husky_ws/install/setup.bash
```

## 4.5 Husky の Gazebo シミュレーションを起動
```:terminal
ros2 launch husky_gazebo husky_playpen.launch.py
```
このコマンドを打つと、Gazebo が起動し、以下の画像のようにデフォルトで設定されている環境にHusky のモデルが出現します。
![Screenshot from 2025-02-15 16-56-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/b192583b-8edd-4497-be81-f55b946dc4ca.png)

## 4.6 Rviz で Husky の状態を確認
```:terminal
ros2 launch husky_viz view_robot_launch.py
```
このコマンドを打つと、以下のが画像のようにrviz2が起動します（以下の図の右側がrviz2の画像、左側がgazeboの画像）。

![Screenshot from 2025-02-15 16-58-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/e3afb386-4760-40c4-a245-f38defa5e99e.png)

そしてrviz2上で表示されている矢印を引っ張ることで以下の動画のように遠隔操作可能になります。

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

## 4.7 Teleop で Husky をキーボード遠隔操作
```:terminal
source /opt/ros/humble/setup.bash
ros2 run teleop_twist_keyboard teleop_twist_keyboard
```
このコマンドを打つと`i` で前進、`k` で停止、`j` `l` で回転できるようになりますが、


以下がその時の動画です。
<iframe width="560" height="315" src="https://www.youtube.com/embed/Y00QwgwksG8?si=FcI0fsrhNP4MBFfe" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

# 5. まとめ
公開されているリポジトリを利用し、gazebo上でHuskyの遠隔操作による走行に成功しました。次のステップとして自律走行を試みようとしましたが、使用していたhumble-develブランチには自律走行に関わるhusky_navigationフォルダがあるものの、その内部にCOLCON_IGNOREファイルが含まれており、ビルド対象から除外されていることが後に判明しました。

さらに、ROS2 Humble向けの開発は以下のリポジトリに移行しているようです。

https://github.com/clearpathrobotics/clearpath_common/tree/humble

しかし、このリポジトリの内容を確認したところ、READMEはほとんど記載されておらず、自律走行やシミュレーションに関するフォルダの存在も曖昧で、実際に利用できるか判断がつきませんでした（更新も頻繁に行われているようで、開発中であることが、うかがわれます）。

そのため、ROS2 Humble環境での自律走行の実装は断念し、代わりにDocker上でROS1 Noetic環境を構築し、自律走行機能を実装することにしました。この取り組みについては、次回の記事で紹介する予定です。

# 参考記事やサイト
[1][マニピュレータ付きロボットによる塗装作業の進捗表示と指示出しを兼ねた帳票システムをROS2-Web-Bridge使って作ってみた](https://qiita.com/bebebefu/items/fba91bff62e32d57c981)
[2][IFCファイルをSDFファイルに変換して構築したシミュレーション環境（Gazebo）において、マニピュレーター付きロボットで塗装作業をしてみた](https://qiita.com/bebebefu/items/c927ceaab752880030c4)
[3][IFCファイルをSDFファイルに変換してシミュレーション環境（Gazebo）に読み込んで、ロボ走行用地図を作り自律走行させてみた](https://qiita.com/bebebefu/items/b5071b54f9de51c46cc1)
[4][マニピュレーター付きロボットで疑似的に壁を塗装してみた](https://qiita.com/bebebefu/items/9ce4f4a57b246e063fc9)
[5][マニピュレーター付きロボットをシミュレーション環境（Gazebo）で自律走行させてみた](https://qiita.com/bebebefu/items/0fc9de79071c01f4d9c5)
[6][マニピュレーター付きロボットをシミュレーション環境（Gazebo）に読み込んで動かしてみた](https://qiita.com/bebebefu/items/ed7db422a01d9c722ffa)
[7][Integration of 4D BIM and Robot Task Planning: Creation and Flow of Construction-Related Information for Action-Level Simulation of Indoor Wall Frame Installation](https://arxiv.org/abs/2402.03602)