Docker で ロボットHusky にマニピュレータを搭載して動かしてみた（ROS Noetic環境）

# 1. はじめに
前回の記事[[1]](#参考記事やサイト)でROS2 Humble環境でDocker上でDocker上にROS Noetic環境を構築することで、Huskyの自律走行をシミュレーションすることができました。このシリーズの取り組みではOyediranらの論文[[2]](#参考記事やサイト)において、Huskyというロボットにマニピュレーターを搭載し、フレームなどの資材を把持して運搬する事例を再現していこうと考えています。それに向けて前回は自律走行ができましたので、この記事ではマニピュレータを搭載して動かすということについて取り組んだ内容を紹介したいと思います。

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

# 3. 構築手順
まず最初は前回の記事[[1]](#参考記事やサイト)で構築したものに、以下のリポジトリのマニピュレータを搭載しようとしました。gazebo上のhuskyにUR5というマニピュレータを搭載することには成功したのですが、Moveit（ロボットアームなどを動かすためのライブラリ）からロボットアームを動かすことができませんでした。干渉が解消できないことや、ROS nodeを立ち上げられないなど、おそらく私の知識不足が原因のトラブル続きでここについてはあきらめました。

https://github.com/husky/husky_manipulation

そこで以下のリポジトリを用いて構築し、gazebo上のHuskyにUR3というロボットアームを搭載して、シミュレーションを行うこととしました。

https://github.com/QualiaT/husky_ur3_simulator

ほとんど👆のリポジトリのreadmeに従いましたが、トラブル対応もしましたので、その構築手順を以下に示します。

## 3.1 ROS ワークスペースの作成
```terminal:terminal(1)
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
source devel/setup.bash
```

## 3.2 依存パッケージのインストール
```terminal:terminal(1)
sudo apt update
sudo apt install -y \
    ros-noetic-husky-* \
    ros-noetic-ddynamic-reconfigure \
    ros-noetic-imu-filter-madgwick \
    ros-noetic-imu-transformer \
    ros-noetic-moveit \
    ros-noetic-ros-controllers
```

## 3.3 ar_track_alvarのインストール
```terminal:terminal(1)
cd ~/catkin_ws/src
git clone -b noetic-devel https://github.com/QualiaT/ar_track_alvar.git
```
ここでビルド（catkin make）をします。
```terminal:terminal(1)
cd ~/catkin_ws
catkin_make
```

そして、⚠️ 私の環境では`pcl_conversions` が不足しているとエラーが発生しました。これに対しては、以下のコマンドで対処した後に、再度でビルド（catkin make）をしました。

```terminal:terminal(1)
sudo apt install -y ros-noetic-pcl-conversions ros-noetic-pcl-ros
cd ~/catkin_ws
catkin_make
```

## 3.4 husky_ur3_simulatorのインストール
```terminal:terminal(1)
cd ~/catkin_ws/src
git clone -b noetic-devel https://github.com/QualiaT/husky_ur3_simulator.git

echo "export GAZEBO_MODEL_PATH=${HOME}/catkin_ws/src/husky_ur3_simulator/models" >> ~/.bashrc
source ~/.bashrc

cd ~/catkin_ws
catkin_make
```

## 3.5 Gripper 操作用の追加パッケージのインストール
```terminal:terminal(1)
cd ~/catkin_ws/src
git clone https://github.com/ROBOTIS-GIT/ROBOTIS-Framework-msgs.git
git clone -b noetic-devel https://github.com/ROBOTIS-GIT/DynamixelSDK.git
git clone https://github.com/ROBOTIS-GIT/ROBOTIS-Framework.git

cd ~/catkin_ws
catkin_make
```

## 3.6 RealSense のインストール
```terminal:terminal(1)
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
sudo add-apt-repository "deb http://librealsense.intel.com/Debian/apt-repo focal main" -u

sudo apt install -y \
    librealsense2-dkms \
    librealsense2-utils \
    librealsense2-dev \
    librealsense2-dbg \
    ros-noetic-realsense2-camera

cd ~/catkin_ws/src/
git clone https://github.com/IntelRealSense/realsense-ros.git
cd realsense-ros/
git checkout `git tag | sort -V | grep -P "^2.\\d+\\.\\d+" | tail -1`

cd ~/catkin_ws
catkin_make
```

# 4. 実行手順

### Husky + UR3 の Gazebo 起動
```terminal:terminal(1)
roslaunch husky_ur3_gazebo husky_ur3_HRI_lab.launch
```

### MoveIt の起動とrvizの起動
```terminal:terminal(2)
roslaunch husky_ur3_gripper_moveit_config Omni_control.launch
```

👆の２つのプログラムを実行すると以下の画面が表示されます。
![Screenshot from 2025-03-01 15-47-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/1dee649f-0511-48c7-923a-00b2d69f345e.png)

そしてrvizの設定画面から以下の動画のようにアームを動かすことができます。

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

### Husky のナビゲーションの起動
```terminal:terminal(3)
roslaunch husky_ur3_navigation husky_ur3_in_HRI_lab_amcl.launch
```

これを実行しておくとrvizで目的地を指定すると自律走行ができます。

### Gripper の開閉
次に以下のコマンドを打ってGripperを開閉させます
```terminal:terminal(4)
# 開く
rostopic pub -1 /rh_p12_rn_position/command std_msgs/Float64 "data: 0.0"

# 閉じる
rostopic pub -1 /rh_p12_rn_position/command std_msgs/Float64 "data: 1.05"
```

👆のコマンドでグリッパーを開閉させたのが、以下の動画になります。

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

# 5. まとめ
公開されているリポジトリを活用し、Huskyというロボットにマニピュレーターを搭載し、アームを動かすことやグリッパーを開閉することをシミュレーションできました。
次回以降は、このグリッパーで何か物をつかむことに取り組んでみたいと思います。

# 参考記事やサイト
[1][Docker で ロボットHusky の遠隔操作走行シミュレーションと自律走行シミュレーションをしてみる(ROS Noetic環境)](https://qiita.com/bebebefu/items/5ae70219d8f332e8ebb9)
[2][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)