趣味開発、実装をまとめるブログ

興味のあるものをとりあえず動かしてみた、実装してみたシリーズをガンガン上げていきたいと思います。あくまでも自身の備忘録としてですが、誰かの助けになったらうれしいです。

Raspberry Pi+ubuntu20.04+ROS2でMPU6050を使ってみた。

f:id:bamboomush:20211224215826j:plain

raspiでIMU使いたくなったのでやってみました。

raspiにubuntuとROSを入れてロボットとかに使っている人も少なくないと思うのですが、あまりGPIOを使われてない (そういう記事をあまり見つけられなかった)ので今回書いてみようかなと思いました。

今回やることは、raspberry piにubuntu/ROS2をインストールし、GPIOで接続したIMU (MPU6050)のデータをROS2用に変換するdriverを作成し、ROS2で生データが取れるようにすることを目標とします。

用意するもの

Raspberry Pi

今どきは3B+ではなく4Bがいいと思います。

初めて触るなら以下の一式セットがあると楽です。

単品でもよいのですが、SDカードなど追加の購入が必要になる点を留意ください。

IMU

今回使用しているIMUはMPU6050です。角速度と加速度が取得可能なセンサで、安価なものなので、今回はお試しということもあり、こちらを使用しました。MPU9250という上位タイプもあり、こちらでは、地磁気も取れるので、より多くの情報が取得できます。今後はこちらを使用した記事とかも書いていきたいなと思います。

その他

SDカードや電源、ジャンパ線、ディスプレイ等が必要です。一式セットになっているものを買うのが楽ですね。

動作環境

今回使用する環境は以下の通りです。

  • raspberryPi : 3B+

  • OS : Ubuntu20.04

  • ROS2 : foxy

ラズパイのセットアップ

raspiにubuntu20.04をインストールしたり、ROS2をインストールしたりするのはみんなやっているので、今回は省略します。

以下を参考にしてみてください。

Ubuntuインストール

Raspberry Pi 4 セットアップまとめ - Ubuntu編 -

ROS2 Install

調べればいろいろ出てきますが、私がansibleというツールを使って一撃でいろいろセットアップできるツールを作っているのでこちらを使うといいと思います。

github.com

IMUとラズパイの配線

配線はこちらの記事を参考にすればできるかと思います。 この方の配線はソースコードを参考にしました。 shizenkarasuzon.hatenablog.com

実装

実装はgithubに置いておきました。

github.com

以下のコマンドでセンサが有効になっていることを確認する。

sudo i2cdetect -y 1

以下を実行して、I2Cデバイスの権限回りを確認します。

ls -al /dev/i2c-*

おそらく、i2cグループに権限が付いているので、ユーザをi2cグループに追加する。

sudo gpasswd -a $(whoami) i2c

また、IMUに権限が付いていないはずなので、権限を付けます。(おそらくread権限をつければいいですが、一応777で権限を付けておきます)

sudo chmod 777 /dev/ttyAMA0

以下のようにワークスペースにこちらのコードをcloneして、ビルドすれば実行できるようになります。

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で見ることができます。


www.youtube.com

まとめ

今回は、raspiにGPIOでつなげたIMUの生データをros2で扱えるようにしました。

今後は、生データをそのままでは特に使えないので、姿勢推定やフィルタリングなどの実装をしていこうと思います。