raspiにubuntuとROSを入れてロボットとかに使っている人も少なくないと思うのですが、あまりGPIOを使われてない (そういう記事をあまり見つけられなかった)ので今回書いてみようかなと思いました。 今回やることは、raspberry piにubuntu/ROS2をインストールし、GPIOで接続したIMU (MPU6050)のデータをROS2用に変換するdriverを作成し、ROS2で生データが取れるようにすることを目標とします。 今どきは3B+ではなく4Bがいいと思います。 初めて触るなら以下の一式セットがあると楽です。 単品でもよいのですが、SDカードなど追加の購入が必要になる点を留意ください。 今回使用しているIMUはMPU6050です。角速度と加速度が取得可能なセンサで、安価なものなので、今回はお試しということもあり、こちらを使用しました。MPU9250という上位タイプもあり、こちらでは、地磁気も取れるので、より多くの情報が取得できます。今後はこちらを使用した記事とかも書いていきたいなと思います。 SDカードや電源、ジャンパ線、ディスプレイ等が必要です。一式セットになっているものを買うのが楽ですね。 今回使用する環境は以下の通りです。 raspberryPi : 3B+ OS : Ubuntu20.04 ROS2 : foxy raspiにubuntu20.04をインストールしたり、ROS2をインストールしたりするのはみんなやっているので、今回は省略します。 以下を参考にしてみてください。 Raspberry Pi 4 セットアップまとめ - Ubuntu編 - 調べればいろいろ出てきますが、私がansibleというツールを使って一撃でいろいろセットアップできるツールを作っているのでこちらを使うといいと思います。 配線はこちらの記事を参考にすればできるかと思います。
この方の配線はソースコードを参考にしました。
shizenkarasuzon.hatenablog.com 実装はgithubに置いておきました。 以下のコマンドでセンサが有効になっていることを確認する。 以下を実行して、I2Cデバイスの権限回りを確認します。 おそらく、i2cグループに権限が付いているので、ユーザをi2cグループに追加する。 また、IMUに権限が付いていないはずなので、権限を付けます。(おそらくread権限をつければいいですが、一応777で権限を付けておきます) 以下のようにワークスペースにこちらのコードをcloneして、ビルドすれば実行できるようになります。 実行すると以下の動画のように 今回は、raspiにGPIOでつなげたIMUの生データをros2で扱えるようにしました。 今後は、生データをそのままでは特に使えないので、姿勢推定やフィルタリングなどの実装をしていこうと思います。
raspiでIMU使いたくなったのでやってみました。
用意するもの
Raspberry Pi
IMU
その他
動作環境
ラズパイのセットアップ
Ubuntuインストール
ROS2 Install
IMUとラズパイの配線
実装
sudo i2cdetect -y 1
ls -al /dev/i2c-*
sudo gpasswd -a $(whoami) i2c
sudo chmod 777 /dev/ttyAMA0
cd ~/workspace/src
git clone https://github.com/1222-takeshi/ros2-mpu6050-driver.git
cd ~/workspace
source /opt/ros/foxy/setup.bash
colcon build colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
source install/setup.bash
ros2 launch imu_driver mpu6050_driver.launch.xml
/imu/data_raw
がpublishされ、ros2 topic echo
で見ることができます。まとめ
Raspberry Pi+ubuntu20.04+ROS2でMPU6050を使ってみた。
リンク
リンク