9軸センサの値をカスタムメッセージに乗せて発信する

環境

WIndows11
開発環境: VScode + PlatformIO + Docker
動作環境: WSL2(Ubuntu 22.04) + ROS2(Humble)

前回までのあらすじ

カスタムメッセージをmicro-ROSで組み込み、エージェントを通じてROSのトピックとして配信され、ROSからもカスタムメッセージの型を認識して購読する仕組みを確認した。

今回の話

たまたま入手していた9軸センサLSM9DS1の値を読み取り、その値をROSのトピックに乗せて配信する

LSM9DS1 9軸慣性計測ユニット
残念ながら販売終了品

1. LSM9DS1 ライブラリを組み込む

platformio.iniのlib_depsに追加する
I2Cを使用するので、Wireも忘れずに

ライブラリの詳細は以下のサイトへ

使い方をとりあえず簡単に・・・

1. センサの読み取り

ヘッダファイルのインクルード
SPI.hはおそらく不要
Raspberry Pi Pico Wのピン配置図
グローバルオブジェクト(LSM9DS1型)の宣言と初期化
imu.beginにAG(加速度/ジャイロ)センサのI2CアドレスとM(方位)センサのI2Cアドレスを指定する
最後の引数にセンサで使用するWireオブジェクトを指定する
今回は9番ピン(GP6)にSDA、10番ピン(GP7)にSCLを接続した。
ピン配置図を見るとI2C1群に所属していることがわかる。
このためWireオブジェクトではなくWire1オブジェクトとなる
センサからそれぞれの値を読み込む処理
この処理によってimuの各メンバにセンサ値(int16_t型)が格納される
float型への変換はimuオブジェクトのcalc~メソッドを使用する

2.読み取った値をカスタムメッセージに乗せて送信

メインループでセンサ値の読み取り、および変換を行っておいて…
コールバック関数でカスタムメッセージ型の各メンバーに値を代入してパブリッシュ

2. 実行

ラズパイピコにソフトを書き込み、エージェントを起動すると・・・
ちなみにセンサを上向きにおいて動作させている

なんかそれらしい値は送信されている

別windowを開き、トピックを購読してみる

それらしい値は出ているようだ。
azは1に近い値が出ている
単位は重力加速度Gなのかな?

ちょっと雑に振ってみる

gx, gyがそれなりに大きく揺れている。
ただし1秒間隔での送信なので、ちょっと情報が荒い
でも何とかトピックに乗って送信されているっぽいことは確認できた

いいなと思ったら応援しよう!