rosserial_arduinoをSTM32F4に対応させてみる

はじめに

rosserialはROSノードと非ROSノードをシリアルで繋ぐ役割を果たせるパッケージとしてよく知られている。ただし、ArduinoノードとしたSTM32F4に公式に対応しておらず、今回はROS melodicベースのArduinoノードとしたSTM32F411CEU6にroseerialを立ち上げてみた。動作確認テストを含むソースコードはGithubに公開を予定している。ソースコードの改修および動作確認に手数かかるため、ROS melodicを除いて、他のROS Distroはまだ確認しておらず、Githubでのコメント、プルリクエスト、フォークについては他の開発者からの情報共有を歓迎する。

ソースコード

すみません、作成中です。

テスト

テスト環境 Arduino V1.8.13 & STM32F411CEU6
rosserial公式サンプルのLED Blinkingをそのまま流用する。一目瞭然なので、説明は割愛する。

参考文献

rosserial melodic-devel branch@Github

0

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

Ubuntu 20.04 + ROS Noetic

はじめに

新製品のテスト環境を用意することで、Ubuntu 20.04 + ROS Noeticを「Raspberry 3 Model B v1.2 (2015 Made in Japan)」にインストールしてみた。2015年製のRaspberry Pi旧型機種なのに、テストに都合が良く、インストールの手順をメモしておく。

Ubuntu 20.04

Raspberry Pi向けUbuntu Server 20.04.2 LTSをダウンロードしてSDに書き込む。

$xz -dv ubuntu-20.04.2-preinstalled-server-arm64+raspi.img.xz
$sudo dd if=ubuntu-20.04.2-preinstalled-server-arm64+raspi.img of=/dev/mmcblk0 status=progress

SDカードを抜き差しすると、

$df -k

SDカードをRaspberry Piに挿すと、ubuntu:ubuntuでログインする。

$ip -a
$sudo nano /etc/network/interfaces
$auto eth0
$iface eth0 inet dhcp
$sudo ifup eth0
$sudo apt-get update
$sudo apt-get upgrade

ROS Noetic

$sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
$sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
$sudo apt update
$sudo apt install ros-noetic-desktop-full
$echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
$source ~/.bashrc
$sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
$sudo rosdep init
$rosdep update
$mkdir -p ~/catkin_ws/src
$cd ~/catkin_ws/
$catkin_make
$echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
$source ~/.bashrc
$roscore

参考資料

Install Ubuntu on a Raspberry Pi
Ubuntu install of ROS Noetic

0

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

9軸IMUセンサ 6軸/9軸フュージョン 低遅延 USB出力 補正済み ROS対応

V2.4 NEWフィーチャ

令和5年3月、hayate_imu v2.4リリース!
較正モードの追加により、ジャイロスコープ、加速度センサ、地磁気センサの初期バイアスは出荷時の測定のみならず、ユーザー様のもとでも測定することはできる。 ※ いまユーザー様のお手元にある旧バージョン製品のファームウェアのバージョンアップは、ユーザー様のもとで実施可能なので、詳細については、別途順次ご案内する。

はじめに

9軸IMU(型番hayate_imu)は、コロナ禍の中で開発した新商品、令和3年3月まで開発~製造、令和3年4月上旬の出荷と予定して、皆さんの学術研究にお役に立てるようと願って、どうぞご検討ご利用のほど宜しくお願い申し上げます。

製品紹介

9軸センサhayate imu、低消費電力プロセッサーCortexM0+、TDK MPU-9250後継機種である、1.71V低電圧で動作可能なICM-20948使用、6軸/9軸融合クォータニオン(四元数)はFPGA on chip(DMP3)から低遅延出力、別途ソフトでフュージョン必要なし、最大出力レート225Hz、同時に加速度(アクセル)3軸データ225Hz、角速度(ジャイロ)3軸データ225Hz、地磁気(コンパス)3軸データ70Hzまで出力可能、補正済み、ROS対応。ロボット、ドローンなど低遅延が必要とされる科学研究、電子機械の検証試作ヘの活用が期待される。

主な仕様

・ 型番 hayate_imu rev.C 6軸フュージョン or ver.B 9軸フュージョン切替可能
・ 内蔵チップ Cortex-M0+、TDK Invensense ICM-20948(9軸)実装 ※1
・ 外部接続 USB Type-Cコネクタ、USB +5V給電 ※2 ※3
・ 最大出力レート ※4
  - 6軸フュージョン or 9軸フュージョン回転ベクトル四元数 225Hz
  - 加速度(アクセル)3軸センサ  225Hz
  - 角速度(ジャイロ)3軸センサ  225Hz
  - 地磁気(コンパス)3軸センサ  70Hz

・ 測定レンジ
  - 加速度(アクセル)センサ  ±16g
  - 角速度(ジャイロ)センサ  ±2000dps
  - 地磁気(コンパス)センサ  ±4900µT

・ 消費電力 50mW以下(環境温度21℃の実測値)
・ 寸法 30mm × 31.4mm × 4.8mm(突起物含む)
・ 重量 4g以下
・ 取付穴 M3x4、隣り合う穴の中心間距離24.4mm

※1 内蔵Cortex-M0+とICM-20948間インターフェースはSPI(4Mbps)使用、加速度センサ(消耗)、角速度センサ(温度、ドリフト)、地磁気センサ(磁気変動)にダイナミック補正。
※2 USB対向装置OS環境 Ubuntu 16.04以降推奨。
※3 USB対向装置ROS環境 Kinetic以降推奨。
※4 最大出力レートはhayate imuの実力値、IMU対向装置(USB接続先)での実効値はその装置のリソース(CPUクロック周波数、メモリ容量・スピード)に関わる。

デモ情報

hayate_imu ROSパッケージ | Githubリポジトリ

9軸IMUセンサ ICM-20948内蔵 6軸/9軸シュージョン 出力レート225Hz 低遅延 USB出力 ROS対応 | YouTube

9dof_hayate_imu_youtube
9dof_hayate_imu_youtube

販売情報

【製品名称】hayate_imu rev.C 6軸フュージョン or ver.B 9軸フュージョン
【開発会社】ROBOT翔(株式会社翔雲)
【発売時期】令和3年4月上旬頃
【取扱店舗】9軸IMUセンサ 6軸/9軸フュージョン 低遅延 USB出力 補正済み ROS対応 | ROBOT翔

参考資料

Migrating from MPU-9250 to ICM-20948-InvenSense
http://wiki.ros.org/ja/9dof_hayate_imu

関連記事

9軸IMUセンサ ICM-20948をロボットに組み込もう
オイラー角~ジンバルロック~クォータニオン
ROS・Unity・ロボット・ドローン姿勢制御に関わるクォータニオン

1+

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

6軸9軸IMUパフォーマンス

はじめに

6軸、9軸IMUのパフォーマンスについて、さまざまな視点からテスト可能となり、以下のとおり、センサフュージョン、出力周波数、ドリフト、4元数出力、遅延において、弊社ならではのテスト項目、手順をご紹介する。

確認環境の例

・Ubuntu 18.04
・ROS Melodic
・MCU: SAMD21G18A
・IMU: TDK Invensense ICM-20948

センサフュージョン、4元数出力

FPGAなどハードウェアによるセンサフュージョン(4元数出力)、出力値の分散が小さいほうが望ましいので、rvizで出力結果を確認する。

$roslaunch icm20948_imu_driver icm20948_imu.launch
$rostopic imu/data

出力周波数

ROSコマンドで出力周波数を簡単に確かめる。200Hz以上つまり5ms間隔データの出力が望ましい。

$rostopic hz imu/data

ドリフト

数時間〜数十時間に亘って、rqt&rvizで静止状態センサの出力はどれくらい変動したかを確かめる。平均値の変動、分散とも小さいほうが望ましい。

$rosrun rqt_plot rqt_plot

遅延時間

500〜1000fps 高速レコーディングカメラで撮影した動画を解析して、遅延時間を確かめる。fpsが高い、IMUの遅延時間が短いほうが望ましい。

動画コンテンツ

以下イメージをクリックすると、youtubeへジャンプする。

imu_performance_test
imu_performance_test

関連記事

9軸IMU 6軸/9軸フュージョン ICM-20948をロボットに組み込もう
9軸IMU MPU-9250をロボットに組み込もう
6軸IMU MPU-6050をロボットに組み込もう

3+

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

9軸IMUセンサ ICM-20948をロボットに組み込もう

はじめに

TDK Invensense製9軸IMUのICM-20948は、MPU-9250の後継機種で、MPU-9250のVDDは2.4V~3.6V、VDDIOは1.71V~VDDに対して、ICM-20948のVDDは1.71V~3.6V、VDDIOは1.71V~1.95Vに低めに設定して、省電力となった。また、デジタルモーションプロセッサDMP(ICM-20948内蔵FPGA)によるデータフュージョン(FPGAによるFusion)の特長が継承して、さらにRAM容量が拡張して、6軸フュージョンのみならず9軸フュージョンまで増強して、較正機能もあると、以下参考文献を読むと詳細まで分かる。

環境

・Ubuntu 18.04
・ROS Melodic
・MCU: Cortex M0+
・IMU: ICM-20948

DMP3の出力確認

以下のように、出力レート50Hz、加速度Ax Ay Az、角速度Gx Gy Gz、磁場Mx My Mz、4元数Qw Qx Qy Qzの順に出力させる。

imu-icm20948-output
imu-icm20948-output

4時間+にわたる連続動作して出力を確かめる。確認環境は完全に静止な状態でもないので、ドリフトは納得いく範囲内にとどまっている。rvizで確かめてもドリフトが肉眼では見えないほど。ドリフトにおいては、MPU-9250から大いに改善されたと見られる。

imu-icm20948-output-4hours
imu-icm20948-output-4hours

出力確認動画は以下イメージをクリックすると、youtubeへジャンプする。

icm20948_imu_ros
icm20948_imu_ros

最後に

MPUシリーズと比べて、ユーザの事前校正いらず、長時間(実験は4時間程度まで)においても、ドリフトとくにヨウ角(Yaw、方向角)のドリフトは目立たないほどになった。また、1.71Vの低電圧でも動作可能なのでスマートデバイスや、ロボットの長時間電池駆動が可能になる。なお、出力レートはMax 225Hzと確認できた。ICM-20948 DMP3(IMU内蔵FPGA)から出力した、Accel/Gyro/Mag計9軸データ出力にFusion Quaternionの4元数データがそのまま利用可能で、遅延もソフト・カルマンフィルタなどより少なく他機種IMUより優れる(低遅延、6軸/9軸フュージョンデータ出力レート225Hz)ため、ロボットの精度向上に利用可能。1.8V VDDIO対応、DMP3の出力に手間かかった末、地磁気センサ出力は75Hzまでと少し残念だが、総じて優秀としか思わないICM-20948をロボット装置に組み込もうと決めた。

商品化モジュール

ICM-20948とCoretex M0+を組み込んだ回路を設計して、ROSに対応したロボット専用センサモジュールとして商品化して、2021年1月~、リリースと予定している。この商品は皆さんの学術研究にお役に立てるようと願う。主な仕様は以下のとおり。
・構成 CortexM0+ & TDK Invensense ICM-20948(9軸)実装
・接続 USB Type-Cコネクタ実装
・出力 6軸/9軸融合4元数はFPGA on chipから低遅延で出力、別途ソフトでフュージョン必要なし、出力レート225Hz、同時に加速度(アクセル)3軸データ225Hz、角速度(ジャイロ)3軸データ225Hz、地磁気(コンパス)3軸データ75Hzまで出力可能
・ROSパッケージ、Githubへ公開、ROS Kinetic以降対応、ROS TopicへSubscribeすることでデータが受け取り可能
・rviz実演、実演ビデオあり

【2021年3月いま現在】1回目制作分(評価版)、大学など研究機関へ無料配布中(アンケート調査あり)、WEBでの募集を含めて順次終了。

【2021年4~5月予定】2回目制作分(商用版)、販売の予定。

詳細情報

9軸IMUセンサ 6軸/9軸フュージョン 低遅延 USB出力 補正済み ROS対応

取扱店舗

9軸IMUセンサ 6軸/9軸フュージョン 低遅延 USB出力 ROS対応 | ROBOT翔

参考文献

Migrating from MPU-9250 to ICM-20948-InvenSense

関連記事

9軸IMUセンサ MPU-9250をロボットに組み込もう
6軸IMUセンサ MPU-6050をロボットに組み込もう

2+

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア