ラズパイマウスの Raspberry Pi 3 B に ROS2 Humble をインストールして、サンプルプログラムでラズパイマウスを操作

更新：2024年2月23日
React frontend + Go言語 backend(aws) + ラズパイマウス(edge) でラズパイマウス操作アプリを作っていきたいと思います。前回は、[Ubuntu Server 22.04 をインストール](https://qiita.com/RYO_/items/eb008b44363dbec8b6f0)しました。今回は、ROS2 Humble をインストールしてみたいと思います。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298045/b64abfbe-abc3-8e4e-4da7-5388491729ff.jpeg">

# ROS2 Humble のインストール

次のリンクを参考にしました。
参考： [ROS / ROS 2のインストール](https://rt-net.github.io/tutorials/raspimouse/ros/install.html)
10分くらいかかりますが、とても簡単になっていました。素晴らしいです。

curl と git をインストールして、クローンしてスクリプトを実行します。
```:Raspberry Pi Terminal
$ sudo apt install -y curl git
$ git clone https://github.com/Tiryoh/ros2_setup_scripts_ubuntu.git
$ cd ros2_setup_scripts_ubuntu
$ ./ros2-humble-ros-base-main.sh
...
success installing ROS2 humble
Run 'source /opt/ros/humble/setup.bash'
```

次のコマンドでインストールした設定が読み込まれます。
```:Raspberry Pi Terminal
$ source /opt/ros/humble/setup.bash
```

一度、再起動します。

# ラズパイマウスの ROS2 パッケージをインストール

次のコマンドを実行すると、Raspberry Pi Mouseの全てのROS 2パッケージをインストールできます。
```:Raspberry Pi Terminal
$ sudo apt install ros-humble-raspimouse-slam-navigation
```

参考：[ROS 2パッケージのインストール](https://rt-net.github.io/tutorials/raspimouse/ros/package-install.html)
参考：[Raspberry Pi Mouse ROS 2パッケージHumble版をリリースしました](https://rt-net.jp/mobility/archives/24444)

# デバイスドライバをインストール

参考：[デバイスドライバのインストール](https://rt-net.github.io/tutorials/raspimouse/driver/install.html)

## パルスカウンタの動作を安定させるためI2Cのボーレートを変更します

/boot/firmware/config.txt を編集し、dtparam=i2c_baudrate=62500 を追記します。
Raspberry Pi を再起動します。
次のコマンドを実行し、 62500 と表示されたら設定完了です。

```:Raspberry Pi Terminal
$ printf "%d\n" 0x$(xxd -ps /sys/class/i2c-adapter/i2c-1/of_node/clock-frequency) 
```

次のコマンドを実行し、デバイスドライバをインストールします。コマンド実行後にブザーが鳴ればインストール完了です。

```:Raspberry Pi Terminal
$ git clone https://github.com/rt-net/RaspberryPiMouse.git
$ cd RaspberryPiMouse/utils
$ sudo apt install linux-headers-$(uname -r) build-essential
$ ./build_install.bash
```

デバイスドライバはOSを起動するたびに次のコマンドでインストールが必要です。

```:Raspberry Pi Terminal
$ ~/RaspberryPiMouse/utils/build_install.bash
```

# ROSパッケージ情報の読み込み

ROS 2サンプル集(rt-net/raspimouse_ros2_examples) のサンプルを実行する場合は下記コマンドを実行します。

```:Raspberry Pi Terminal
$ source /opt/ros/humble/setup.bash
```

ラズパイマウスに`ros2_ws`（ROS 2ワークスペース）のフォルダを作成する方法を説明します。このプロセスは、ROS 2を使用している場合に適用されます。ROS 2は、ロボティクスのためのオープンソースのソフトウェアフレームワークです。以下のステップに従ってください。ワークスペースを作成するには、以下の手順を実行します。
`ros2_ws`という名前のワークスペース用のディレクトリを作成します。以下のコマンドを使用してこれを行います。
   ```
   mkdir -p ~/ros2_ws/src
   ```
これにより、`ros2_ws`という名前のディレクトリとその中の`src`ディレクトリがホームディレクトリに作成されます。

新しく作成したワークスペースディレクトリに移動します。
   ```
   cd ~/ros2_ws
   ```

ワークスペースを作成した後、`colcon`ビルドシステムを使用してビルドを実行できます。ビルドを実行するには、ワークスペースのルートディレクトリ（この場合は`~/ros2_ws`）で以下のコマンドを実行します。
```
colcon build
```

ビルドプロセスが完了したら、新しいシェルセッションでROS 2ワークスペースを使用するために環境をセットアップする必要があります。これを行うには、以下のコマンドを実行します。
```
source ~/ros2_ws/install/setup.bash
```

これで、ラズパイマウスで`ros2_ws`ワークスペースのフォルダを作成し、使用する準備が整いました。自分のプロジェクトに合わせてパッケージを追加し、開発を始めることができます。


# ジョイスティックコントローラで操縦する

Dualshock4 を使ってみます。秋葉原で数百円で買いました。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298045/c54a9a08-e901-b857-3069-10e557fd480a.jpeg">

ラズパイを起動した後、次の2つのコマンドを入力するとラズパイマウスが動きます。

```:Raspberry Pi Terminal
$ ~/RaspberryPiMouse/utils/build_install.bash
$ ros2 launch raspimouse_ros2_examples teleop_joy.launch.py joydev:="/dev/input/js0" joyconfig:=dualshock4 mouse:=true
```

![mouse.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298045/af80b0e1-ca6a-b1e7-57cb-288410d03b56.gif)

操作方法は下の図で、LBを押しながらLを操作すると前後に動きます。LBを押しながらRを操作すると旋回します。

![joy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298045/0d7bef6c-494a-0b61-4556-03ea4fef32bb.png)

今回は以上です。
次回以降は、コードを読んでいきたいと思います。
（2024/7/9：旋回しなくなった（Rボタン壊れた？）のでキーボードで操作したいです）


参考：[ジョイスティックコントローラで操縦する](https://rt-net.github.io/tutorials/raspimouse/ros/samples.html)
参考：https://github.com/rt-net/raspimouse_ros2_examples#joystick_control
参考：[ROS / ROS 2サンプル集の実行](https://rt-net.github.io/tutorials/raspimouse/ros/samples.html)
参考：[Qiitaに動画を埋め込む方法。Macデスクトップで動画作成後GIF化するまでの手順詳細](https://qiita.com/shizen-shin/items/5fb258da165235722e4c)