9軸IMU/AHRS 6軸&9軸回転ベクトル&3軸オイラー角 MAX1000Hz同時出力 ROS/ROS2対応 USB接続【R5年4月新発売】

はじめに

令和3年度発売の旧型機種のhayate_imu v2は大手企業様、学校法人様はじめ多くのユーザー様にご利用いただいたことに、厚く御礼申し上げます。ありがとうございます。旧機種はv2.4までとリリースさせていただいておりますが、いまユーザー様のお手元にある旧バージョン製品のファームバージョンアップは、ユーザー様のもとで実施可能なので、詳細については、別途順次ご案内申し上げます。昨今の半導体ショックにより供給不足、価格高騰などの影響を受ける中、後継機種の開発を続けてきた結果、令和5年4月下旬より、9軸IMU/AHRS haya_imu v3.2の発売をお知らせさせていただきます。

製品紹介

Cortex-M4 (クロック周波数120MHz)、新型6軸IMUのICM-42688、高精度3軸AMR方式地磁気センサMMC5983MAの実装により、通常出力モード、デモストレーションモード、キャリブレーションモード(初期バイアス測定)、6軸フュージョン回転ベクトルクォータニオン、9軸フュージョン回転ベクトルクォータニオン、3軸オイラー角の同時出力は最大1000Hzまで可能となります。ROS/ROS2とも対応しており、ドライバーはGithubよりダウンロードして製品とセットでご利用いただけます。

主な仕様

・型番 haya_imu v3.x
・内蔵チップ Microchip Cortex-M4(120MHz)、ICM-42688-V、MMC5983MA実装
・外部接続 USB2.0+ Type-C、USB+5V給電
・最大出力レート
  - 6軸/9軸フュージョン回転ベクトル四元数 1000Hz
  - 3軸オイラー角  1000Hz
  - 3軸加速度(アクセル)データ  1000Hz
  - 3軸角速度(ジャイロ)データ  1000Hz
  - IMU内部温度データ      1000Hz
  - 3軸地磁気(コンパス)データ  500Hz

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

・バイアス測定補正 初期バイアス測定、動作時即時測定、内蔵補正機能あり
・消費電力 150mW以下(環境温度21℃ 実測値)
・寸法 38.0mm × 39.0mm × 4.8mm(突起物含む)
・取付穴 M3x4、隣り合う穴の中心間距離32.0mm

主な特長

・サービスモード 通常出力モード、デモンストレーションモード、キャリブレーションモード
・結果出力 6軸フュージョン回転クォータニオン、9軸フュージョン回転クォータニオン、3軸オイラー角1KHzまで同時出力、結果出力レートに関わらずIMU/地磁気センサのデータサンプリング周波数、フュージョン周波数は常に1000Hz/500Hzに設定済み
・初期バイアス測定 使用環境変化あった際に利用可能なキャリブレーションモードで最短数分程度で初期バイアス測定完了、MCUフラッシュに自動的に保存して、動作時に読み込んで即時バイアス測定&補正あり
・地磁気センサ温度補償 地磁気センサは、計測時間1msにわたるセットリセット計測(温度補償機能)使用済み
・磁気外乱による干渉 受けにくいことが当社実験(磁束密度約2G)にて確認済み
・ROS/ROS2対応 本体にはROS/ROS2ライブラリを実装せず、対向装置にドライバーインストールにより実現

詳細情報

【製品名称】haya_imu v3.x
【開発会社】ROBOT翔(株式会社翔雲)
【発売時期】令和5年4月下旬頃
【商品情報】9軸IMU/AHRS 6軸&9軸回転ベクトル 3軸オイラー角 MAX1000Hz同時出力 ROS/ROS2対応 USB接続 | ROBOT翔

1+

ロボット・ドローン部品お探しなら
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/AHRS 6軸&9軸回転ベクトル&3軸オイラー角 MAX1000Hz同時出力 ROS/ROS2対応 USB接続【R5年4月新発売】
9軸IMUセンサ ICM-20948をロボットに組み込もう
オイラー角~ジンバルロック~クォータニオン
ROS・Unity・ロボット・ドローン姿勢制御に関わるクォータニオン

1+

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

STM32F4へmicro-ROSを実装してみる

micro-ROS

micro-ROS puts ROS 2 onto Micro-controllers = マイコン版のROS2と言って良い。これまで高性能SOCボードやPCをターゲットにするしかなかったROSは、一気に組み込みシステムまで広がりそうになる。stm32cubemx_utilsはSTM32CubeMX/IDEプロジェクトにとってmicro-ROSを容易に実装することを目的とするROSパッケージとなる。それでは、STM32CubeIDEプロジェクトでstm32cubemx_utilsを使ってmicro-ROSを、STM32ミドル級のSTM32F4に取り込む手順を確かめてみよう。

確認環境

・micro-ROS側 NUCLEO-F446RE(MB1136)、本文のターゲットボードとなる
・ROS2側 ROS2(humble) & STM32CubeIDE 1.12.0インストール済み@UBUNTU 22.04
・接続 micro-ROS側とROS2(humble)側と、通信用シリアルケーブル(UASRT TX/RX TTL-USBコンバータ付)で接続済み、別途NUCLEO-F446REへオンボードデバッガーよりUSB給電&プログラム書き込み

micro_ROS_stm32cubemx_utils_testset
micro_ROS_stm32cubemx_utils_testset

実装手順

以下Dockerインストール→プロジェクト作成→utils入手(humble)→ハードウェア設定→ソース手入れ→agent作成→接続確認の順で説明していく。

Dockerインストール

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce=5:24.0.1-1~ubuntu.22.04~jammy docker-ce-cli=5:24.0.1-1~ubuntu.22.04~jammy containerd.io docker-compose-plugin
sudo groupadd docker
sudo usermod -aG docker $USER
sudo chmod 666 /var/run/docker.sock

stm32プロジェクト作成

STM32CubeIDEでプロジェクトを作成しておく。

stm32cubemx_utilsクローン

上記プロジェクトフォルダの直下にmicro_ros_stm32cubemx_utilsを、Cloneしておく。

git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_stm32cubemx_utils

STM32CubeIDE設定

ピン、転送などハードウェアに関わる設定や、FreeRTOS、コンパイラ、リンカーに関わる設定については、参考資料2のいうとおりに設定しておく。コンパイルやリンクエラーの要因になる、とくに「絶対パス」の記述はミスないよう注意する。

コード生成&手入れ&ビルド&ラン

micro_ros_stm32cubemx_utils/sample_main.cと、main.cと比較して、その差分をmain.cに追加する。
ビルドの際にワーニングがいくつか出たが、前向きにOKにしておく。

micro_ros_setupビルド

source /opt/ros/$ROS_DISTRO/setup.bash
mkdir ~/uros_ws && cd uros_ws
git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup
rosdep update && rosdep install --from-paths src --ignore-src -y
colcon build
source install/local_setup.bash

micro_ros_agentビルド

source ~/uros_ws/install/local_setup.sh
ros2 run micro_ros_setup create_agent_ws.sh
ros2 run micro_ros_setup build_agent.sh
source install/local_setup.sh

接続確認

source ~/uros_ws/install/local_setup.sh
ls -l /dev/ttyUSB*
sudo chmod 1666 /dev/ttyUSB0
ros2 run micro_ros_agent micro_ros_agent serial -b 115200 --dev /dev/ttyUSB0
ros2 topic list
ros2 echo /cubemx_publisher

蛇足:USBポートのデバイス名は、TTL-USBコンバータはFTDI/CP(Silicon Labs)/CH(Qinheng Microelectronics)製TTL-USB IC使用の場合、/dev/ttyUSB*となり、マイコン内蔵USBコントローラ使用、つまりCDC/HIDなどのバーチャルCOMポートの場合、/dev/ttyACM*となる。

以下のような結果が出てれば、micro-ROS@STM32F446REからのメッセージは届いたら確認完了とする。

micro_ROS_stm32_test_result
micro_ROS_stm32_test_result

プロジェクト

STM32プロジェクトはgithub.com/soarbear(ROBOSHO)に預かっておく。

参考資料

1・https://micro.ros.org
2・https://github.com/micro-ROS/micro_ros_setup
3・https://github.com/micro-ROS/micro_ros_stm32cubemx_utils

あとがき

micro-ROSは、設計要件次第、クロック周波数100〜200MHzのSTM32F4、STM32G4にも有用&可用であることが分かった。Docker、Micro XRCE-DDSは、ROS2とは少し違和感が感じさせられて、これからドンドン進化していくと思われる。

0

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

SWO/SWV with STM32CubeIDE

はじめに

SWV/SWV(Serial Wire Output/Serial Wire Output Viewer)は、デバッグの際にSTM32CubeIDEのコンソールにデータを表示することでいざとプロセスやデータを確認したいときに大変便利なツールである。

確認環境

・NUCLEO-F446RE(MB1136)
・STM32CubeIDE 1.12.0 @UBUNTU 22.04

確認手順

1・NUCLEO-F446RE CN2などのジャンパー接続は、以下写真のとおりとなっている。

NUCLEO-F446RE-JUMPER
NUCLEO-F446RE-JUMPER

2・SYS/Mode/Debug/Trace Asynchronous SWにするとSWOピンが設定される。

stm32cubeide_ioc
stm32cubeide_ioc

3・Generate Codeして、main.cへコードを追加する。

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

/* USER CODE BEGIN 0 */
int __io_putchar(uint8_t ch) {
	return ITM_SendChar(ch);
}
/* USER CODE END 0 */

  /* USER CODE BEGIN WHILE */
  while (1)
  {
	printf("Hello, SWO/SWV\r\n");
	HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

4・Debug実行する。

stm32cubeide_start_debug
stm32cubeide_start_debug

5・Debugger ConfigurationにSWVをEnableにする。

stm32cubeide_debug_cofigutration
stm32cubeide_debug_cofigutration

6・SWV ITM Data Consoleを表示させる。

stm32cubeide_open_tm_data_console
stm32cubeide_open_tm_data_console

7・SWV設定を行う。

stm32cubeide_config_trace
stm32cubeide_config_trace

stm32cubeide_swv_setting
stm32cubeide_swv_setting

8・Start Traceをプッシュして、押し込んだ状態にする。

stm32cubeide_start_trace
stm32cubeide_start_trace

9・Debugを再開させる。

stm32cubeode_f8_resume
stm32cubeode_f8_resume

10・SWV ITM Data Consoleをprintfの内容を確認する。

stm32cubeide_data_view
stm32cubeide_data_view

プロジェクト

STM32CubeIDEプロジェクトは、github.com/soarbear(ROBOSHO)に預かっておく。

参考資料

・「UM2609 User manual STM32CubeIDE user guide」、STMicroelectronics

0

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

FPGAでUARTシリアル受信機

Under construction, coming soon…

概要

状態マシン

Verilogソースコード

FPGAボード&EDA

論理合成&端子割当&配置配線

プログラムダウンロード

結果確認

参考資料

あとがき

0

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

STM32G4 FD-CAN in Normal Mode

はじめに

車載ネットワークの主流バスとしてCAN(Controller Area Network)とFD-CAN(FDCAN/CANFD/CAN-FD/CAN with Flexible Data rate)、IEEE11898で規格化されているCANの通信速度は最大で1Mbpsであり,同じくCAN FDでは最大5Mbps(ただし,IEEEの規格上では最大2Mbps)となっている。とはいえ、8MbpsはFD-CANの通信速度としても可能だという。今後CANはFD-CANに置き換えられると予想される。STM32ファミリーには、STM32G0、STM32G4、STM32H7、STM32L5、STM32MP1シリーズはFD-CANコントローラ内蔵で、今回はSTM32G474を使ってFD-CANの送受信を確かめていこう。

テスト環境

・IDE環境 STM32CubeIDE 1.12.0 @UBUNTU 22.04(iMACの画面は大きく、スクリーンショットの字は小さく写るため予めご容赦ください)
・マイコン/評価ボード STM32G474(FD-CAN1&FD-CAN2) / NUCLEO-G474RE(MB1367C) x 1pcs
・FD-CANトランシーバ MCP2562FD x 2pcs
・差動線FD-CAN_H、FD-CAN_Lを跨ぐ抵抗器  120R x 2pcs
・デカップリング用コンデンサ  0.1uF x 4pcs
・差動波形観察 オシロスコープ

確認内容

・FD-CAN1、FD-CAN2と往復ピンポン送受信確立
・差動信号の波形、データスループット=2Mbps

配線関連

FD-CAN周辺の回路図は以下のとおり掲載しておく。

stm32g474-mcp2562fd-fdcan-schematic
stm32g474-mcp2562fd-fdcan-schematic

実の配線済みテストセットの写真を以下のとおり掲載しておく。

stm32g4-fdcan-test-connection
stm32g4-fdcan-test-connection

マイコン設定

STM32CubeIDEのioc/Pinout & Configuration/Sys Mode and Configuration、Pinout View、ioc/Clock Configrationを以下のとおり掲載しておく。

stm32g4-fdcan-ioc
stm32g4-fdcan-ioc

stm32g4-fdcan-clock
stm32g4-fdcan-clock

FD-CAN設定

FD-CAN関連パラメータの値は、唯一ではなくスループットとサンプリングポイントの兼ね合いを見ながら、STM32CubeIDEが受け入れるまで調整していく。実に使用したパラメータは、以下のとおり掲載しておく。パラメータの計算また調整は、KVASER(オンライン計算サイト)を利用すると便利になる。ただし、Frequency=FD-CANクロック周波数、上図から抽出して、Tolerance=FD-CANクロック周波数公差、本文ではHSIによる値でSTM32G474のデータシートから抽出して、Node Delay= FD-CANトランシーバ遅延(厳密ではない)、本文ではMCP2562FDのデータシートから予め抽出しておく。

stm32g474-fdcan-parameters
stm32g474-fdcan-parameters

決まったパラメータの値は、以下のとおり入力しておく。Nominal Field、Data Fieldに関わるパラメータは別々、FD-CAN2とFD-CAN1のパラメータは同じなので、コピペして良い。

stm32g4-fdcan-parameter
stm32g4-fdcan-parameter

stm32g4-fdcan-fdcan1-interrupt
stm32g4-fdcan-fdcan1-interrupt

ソースコード

STM32プロジェクトはgithub.com/soarbear/stm32g4-fdcanに預かっておく。

送受信データ

FD-CAN2においてFD-CAN1から送信した32バイトデータを受信して、それらのデータに1を足して、FD-CAN1に返す。FD-CAN1においてFD-CAN2から送信した32バイトデータを受信して、それらのデータに1を足して、FD-CAN1に返す。このようにやり取りを繰り返す。受信したデータは以下のとおり掲載しておく。NUCLEOにST-LINKデバッガはオンボードなので、別途ST-LINKデバッガ、シリアルケーブル使わなくても、SWV ITM ConsoleつまりSTM32CubeIDEコンソールにデータを表示させることにした。それに伴ってSWV/SWOの設定は必要になる。SWV/SWOの設定については、本サイトの関連記事「SWO/SWV with STM32CubeIDE」をご参考にしてください。

stm32g4-fdcan-normalMode-rxData
stm32g4-fdcan-normalMode-rxData

差動波形

FD-CAN_H、FD-CAN_Lの差動波形は以下のとおり掲載しておく。

stm32g474-fdcan-wave
stm32g474-fdcan-wave

データビットタイムは0.5usと確認できたので、データフィールドのスループットは2Mbpsに達したことを判断する。また、残件事項として他のパラメータAuto Retransmission、Transmit Pauseはとりあえず、Disableにしておいたので、他の機会で動作確認することにする。

参考資料

・「車載ネットワーク入門」、インターフェース2021年12月号
・「NUCLEO-G4 User Manual」、ST Electronics
・「MCP2561/2FD フレキシブル データレート対応高速 CAN トランシーバ」、MICROCHIP
・「Datasheet – STM32G474xB STM32G474xC STM32G474xE」、ST Electronics

あとがき

FD-CAN規格のパラメータは多く、開発に当たって決して短時間で決められるものではない、設計要件に合わせて実験を重ねて確認していく必要がある。

0

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

ROS2の自動cmakeツールament_cmake_auto

はじめに

ament_cmake_autoは、package.xmlに記載してあるパッケージを探してくれる自動cmakeツールなので、CmakeLists.txtはシンプルに書けるようになる。

find_package

ament_cmake_autoは必要なので、これのみをfind_packageしておく。

find_package(ament_cmake_auto REQUIRED)

依存を見つける=ament_auto_find_build_dependencies

package.xmlに記載してあるdependenciesを、すべてfind_packageしてくれる。

ament_auto_find_build_dependencies()

ライブラリの生成=ament_auto_add_library

add_library、target_include_directories、target_link_libraries、ament_target_dependenciesをまとめてくれる。
マルチライブラリーのの場合、ライブラリーずつリストするのみで済む。

ament_auto_add_library(lite_serial src/lite_serial.cpp include/lite_serial.hpp)

実行ファイルの生成=ament_auto_add_executable

add_executable、target_include_directories、target_link_libraries、ament_target_dependenciesをまとめてくれる。
マルチノードの場合、ノードずつリストするのみで済む。

ament_auto_add_executable(haya_imu_node src/haya_imu_node.cpp)
ament_auto_add_executable(haya_topic_echo src/haya_topic_echo.cpp)
ament_auto_add_executable(haya_topic_hz src/haya_topic_hz.cpp)

msg/srvの生成=ament_auto_generate_code

メッセージも、サービスも以下1行で済む。

ament_auto_generate_code()

ライブラリーのビルド=ament_auto_package

1行のみでexport、install関係をまとめて仕上げてくれる。

ament_auto_package()

構文のチェック=ament_lint_auto

BUILD_TESTINGデフォルト=ON、colon build – -BUILD_TESTING=OFFに指定可能。

if(BUILD_TESTING)
  find_package(ament_lint_auto REQUIRED)
  ament_lint_auto_find_test_dependencies()
endif()

テストを行う=ament_auto_add_gtest

冒頭の使用例にテストは入っていないが、ament_auto_add_gtestでテストできるようにしている。

ament_auto_find_test_dependencies()
ament_auto_add_gtest()

ament_cmake_autoの使用例

筆者はament_cmake_autoを自社開発したROS2パッケージhaya_imu_ros2に取り組んだので、CmakeLists.txtは以下のとおりとなる。

# CmakeLists.txt of haya_imu_ros2
cmake_minimum_required(VERSION 3.8)
project(haya_imu_ros2)
find_package(ament_cmake_auto REQUIRED)
ament_auto_find_build_dependencies()
ament_auto_add_library(lite_serial src/lite_serial.cpp include/lite_serial.hpp)
ament_auto_add_executable(haya_imu_node src/haya_imu_node.cpp)
ament_auto_add_executable(haya_topic_echo src/haya_topic_echo.cpp)
ament_auto_add_executable(haya_topic_hz src/haya_topic_hz.cpp)
if(BUILD_TESTING)
  find_package(ament_lint_auto REQUIRED)
  ament_lint_auto_find_test_dependencies()
endif()
install(DIRECTORY launch config DESTINATION share/${PROJECT_NAME})
ament_auto_package()

参考資料

https://github.com/ament/ament_cmake
Ament-CMake-Documentation(humble)

0

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