9軸センサの値をカスタムメッセージに乗せて発信する
環境
WIndows11
開発環境: VScode + PlatformIO + Docker
動作環境: WSL2(Ubuntu 22.04) + ROS2(Humble)
前回までのあらすじ
カスタムメッセージをmicro-ROSで組み込み、エージェントを通じてROSのトピックとして配信され、ROSからもカスタムメッセージの型を認識して購読する仕組みを確認した。
今回の話
たまたま入手していた9軸センサLSM9DS1の値を読み取り、その値をROSのトピックに乗せて配信する
![](https://assets.st-note.com/img/1718800250451-eEjzo5fA1T.png)
残念ながら販売終了品
1. LSM9DS1 ライブラリを組み込む
![](https://assets.st-note.com/img/1718800407305-JeEJgAvgCt.png)
I2Cを使用するので、Wireも忘れずに
ライブラリの詳細は以下のサイトへ
使い方をとりあえず簡単に・・・
1. センサの読み取り
![](https://assets.st-note.com/img/1718800675390-gOXTePArTE.png)
SPI.hはおそらく不要
![](https://assets.st-note.com/img/1718800940640-THyiq8RJn2.png?width=800)
![](https://assets.st-note.com/img/1718800712884-VmalSUwXiN.png)
imu.beginにAG(加速度/ジャイロ)センサのI2CアドレスとM(方位)センサのI2Cアドレスを指定する
最後の引数にセンサで使用するWireオブジェクトを指定する
今回は9番ピン(GP6)にSDA、10番ピン(GP7)にSCLを接続した。
ピン配置図を見るとI2C1群に所属していることがわかる。
このためWireオブジェクトではなくWire1オブジェクトとなる
![](https://assets.st-note.com/img/1718801267673-PYTsSXusF3.png)
この処理によってimuの各メンバにセンサ値(int16_t型)が格納される
![](https://assets.st-note.com/img/1718801384080-hMZ5yr3iDm.png)
2.読み取った値をカスタムメッセージに乗せて送信
![](https://assets.st-note.com/img/1718801522689-thhtIgG8i5.png)
![](https://assets.st-note.com/img/1718801568155-K0AlhsqtDd.png)
2. 実行
ラズパイピコにソフトを書き込み、エージェントを起動すると・・・
ちなみにセンサを上向きにおいて動作させている
![](https://assets.st-note.com/img/1718801818558-KAtMri0Vak.png?width=800)
別windowを開き、トピックを購読してみる
![](https://assets.st-note.com/img/1718801932789-ik25UfLx52.png)
azは1に近い値が出ている
単位は重力加速度Gなのかな?
ちょっと雑に振ってみる
![](https://assets.st-note.com/img/1718802184095-K4UHxDh7fH.png)
ただし1秒間隔での送信なので、ちょっと情報が荒い
でも何とかトピックに乗って送信されているっぽいことは確認できた
この記事が気に入ったらサポートをしてみませんか?