Docker で ロボットHusky の遠隔操作走行シミュレーションと自律走行シミュレーションをしてみる(ROS Noetic環境)

# 1. はじめに
前回の記事[[1]](#参考記事やサイト)でROS2 Humble環境でのロボットHuskyの自律走行の実装は断念し、代わりにDocker上でROS Noetic環境を構築し、自律走行機能を実装することにしました。この取り組みについて、紹介するのがこの記事の内容です。

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

# 3. 遠隔操作による走行についての構築手順
## 3.1. Docker のセットアップ
```terminal:terminal(1)
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker
```
ここで変更を反映するため、PCから一度ログアウト＆再ログインしました

## 3.2 noVNC 対応の ROS 1 Docker イメージを取得
ここでdocker上でのROS1(ROS Noetic)の設定に入るのですが、以下の記事で簡単にROS1をセットアップできるものがありましたので、このリポジトリを使わせていただきました。本当に一瞬でDocker上のGUIのROS1を設定できたので、非常に助かりました。

https://qiita.com/karaage0703/items/957bdc7b4dabfc6639da

実行したコマンドは以下です。
```terminal:terminal(1)
sudo docker run -p 6080:80 --shm-size=512m tiryoh/ros-desktop-vnc:noetic
```
ダウンロードが完了したら、ブラウザで [http://127.0.0.1:6080/](http://127.0.0.1:6080/) にアクセスします。

## 3.3 Docker内でのHusky のシミュレーション環境の構築
ブラウザで [http://127.0.0.1:6080/](http://127.0.0.1:6080/) にアクセスしましたら、その中でターミナルを開き、以下のコマンドでHusky のシミュレーション環境の構築をしていきます。
```terminal:docker内のterminal(1)
sudo apt update
sudo apt install -y gazebo11 ros-noetic-gazebo-ros
sudo apt install -y ros-noetic-husky-simulator ros-noetic-husky-desktop ros-noetic-husky-navigation
```

##  3.4 Docker内でのHuskyシミュレーションの起動
以下のコマンドで、シミュレーション環境を立ち上げます。
```terminal:docker内のterminal(1)
source /opt/ros/noetic/setup.bash
roslaunch husky_gazebo husky_playpen.launch
```

以下のようにGazebo 上に Husky が表示されます。

![シミュレーション環境の立ち上げ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/4feb99a8-ee52-4253-af14-a86576cedad3.png)


## 3.5 Husky の遠隔操作（手動運転）
次にHuskyを遠隔操作で走行させるため、以下のコマンドでteleopを立ち上げます。
```terminal:docker内のterminal(2)
source /opt/ros/noetic/setup.bash
rosrun teleop_twist_keyboard teleop_twist_keyboard.py cmd_vel:=/husky_velocity_controller/cmd_vel
```
そしてキーボードによる遠隔操作で走行させた様子が以下の動画になります。
<iframe width="560" height="315" src="https://www.youtube.com/embed/idJKTmIChpc?si=FcI0fsrhNP4MBFfe" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

# 4. 自律走行についての構築手順
## 4.1 Lidar を有効化
まずLidarを以下のコマンドで有効化して、シミュレーション空間を起動します。

```terminal:docker内のterminal(1)
source /opt/ros/noetic/setup.bash
export HUSKY_LMS1XX_ENABLED=1
roslaunch husky_gazebo husky_playpen.launch
```

## 4.2 rviz を起動
次に以下のコマンドでrivzを起動します。
```terminal:docker内のterminal(2)
source /opt/ros/noetic/setup.bash
roslaunch husky_viz view_robot.launch
```

### 4.3 ナビゲーションを起動
次に以下のコマンドで、自律走行用のプログラムを起動します
```terminal:docker内のterminal(3)
source /opt/ros/noetic/setup.bash
roslaunch husky_navigation amcl_demo.launch
```
そうしますと以下の画面のようにrvizの画面に地図が読み込まれます（左がgazebo、右がrivzの画面です。）。

![Screenshot from 2025-02-16 12-59-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/543acea3-529d-4f64-b3dd-730f8827a0af.png)

そして2D Nav Goalで目的地を指定すると Husky が自律移動を始めます。

以下がその時の動画です。

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

# 5. まとめ
公開されているリポジトリを活用し、Docker上にROS Noetic環境を構築することで、Huskyの自律走行をシミュレーションできました。
次回以降は、この環境のHuskyにマニピュレーターを搭載し、自律走行と並行してマニピュレーターを動作させることに取り組んでいきたいと思います。

# 参考記事やサイト
[1][ROS2 humbleの環境で ロボットHusky を遠隔操作で走行させるシミュレーションをしてみる](https://qiita.com/bebebefu/items/ef53bb517077245a11f3)