今回はM5StackをROSのIMUセンサモジュールとして使っていきます.
M5Stackにはいくつか種類がありますが, 今回はIMUを内蔵しているM5Stack Grayを使用します.

基本的には, M5StackのIMU用のサンプルプログラムであるM5StackFire_MPU9250.inoにrosserial_arduinoのPublisherを追加したコードになります. まずはArduinoのライブラリにrosserial_arduino
を追加してください.
また公式には推奨されていませんが, ArduinoIDEから[スケッチ->ライブラリをインクルード->ライブラリを管理]からインストールすることもできます.
今回開発したIMU用のコードが以下のM5StackFire_MPU9250_ROS.inoです.
M5Stackにこのコードを書き込んでもらいたいのですが, このままではコンパイルエラーが発生します.
原因は, IMU(MPU9250)用のファイルとrosserial用のファイルで, 同じ名前の変数(マクロ)が存在していることです. どちらのファイルにもINFO
というマクロが存在しています. ファイルの中身を見てみたところ, MPU9250のINFO
は宣言されてはいるものの使用されてはいないようなのでこちらの名前を変更します.
Arduino/libraries/M5Stack/src/utility/MPU9250.hの24行目辺りにある#define INFO 0x01
を#define AK8963_INFO 0x01
と変更します. これでコンパイルが通るようになります.
M5Stackにプログラムが書き込めたら, M5Stackの準備は完了です.
次にUbuntu側にrosserialとrosserial-arduinoをapt-getで次のようにインストールします.
sudo apt-get install ros-kinetic-rosserial-arduino
sudo apt-get install ros-kinetic-rosserial
インストールできたら, M5StackとROSの入ったPCをUSBケーブルで接続します. 次のコマンドでUbuntuとM5Stackとの通信を行うノードを立ち上げます.
rosrun rosserial_python serial_node.py
通信がうまくいけば次のようにログが出力されimu
というトピックが配信されています.
M5Stackは通信用のノードが立ち上がるまでは’Waiting ROS…’と画面に表示し, ノードが立ち上がると画面にIMUの値を表示します.
コメント