9軸センサーICM-42688+MMC5983 6軸&9軸回転ベクトル&3軸オイラー角 MAX1000Hz同時出力 ROS/ROS2対応 USB接続

はじめに

令和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またはICM-42688-P、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軸センサー6軸&9軸回転ベクトル 3軸オイラー角 MAX1000Hz同時出力 ROS/ROS2対応 USB接続 | ROBOT翔

参考情報

エンコーダ付きDCモータPID制御の実験-haya_imu応用例

2+

ロボット・ドローン部品お探しなら
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翔

後継機種

9軸センサーICM-42688+MMC5983 6軸&9軸回転ベクトル&3軸オイラー角 MAX1000Hz同時出力 ROS/ROS2対応 USB接続

参考資料

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

関連記事

参考情報

エンコーダ付きDCモータPID制御の実験-hayte_imu応用例
9軸IMUセンサ ICM-20948をロボットに組み込もう
オイラー角~ジンバルロック~クォータニオン
ROS・Unity・ロボット・ドローン姿勢制御に関わるクォータニオン

1+

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

ROSの座標変換TFについて

ROS座標

ROSでは、map,odom,base_footprint, base_link,base_laser等の座標(データは「フレーム」の表現を使用)は使われる。

ROS座標
ROS座標

map:名前のとおり、ロボットが位置するワールド座標。
odom:mapレイヤの次にくる、オドメトリ(odometry・距離計)と真のワールド座標のずれを表現する。
base_link:オドメトリodomでのロボット位置。ローカル座標。
base_footprint:地上でのbase_linkの投影ですが、但しz値は異なる。ローカル座標。
base_laser:レーザスキャナSlam Lidarの位置。ローカル座標。

TF変換

TFは分散システム前提の座標変換のライブラリであり、2フレーム間の位置姿勢関係の報告(transform_broad_caster)を受けて。全てのフレームを絡むツリーを構築して、ツリーをたどって知りたい位置姿勢を取得する(transform_listener)ような仕組みとなる。以下はフレームツリーの例。

ROS_view_frames
ROS_view_frames

位置姿勢の表現について、位置はx,y,z(m)、 姿勢はクォータニオン四元数にて表示する。クォータニオンについては、記事:ROS・Unity・ロボット・ドローン姿勢制御に関わるクォータニオンを参照する。また、TF変換にtfとtf2パッケージがあり、tf2はtf_staticトピックに静的なフレームを追加できる。tf_staticトピックで受け取った変換は時間に関わらずに利用可能。

関連記事

9軸IMU 6軸/9軸フュージョン 低遅延 USB出力 補正済み ROS対応
SLAM~拡張カルマンフィルタ
研究開発用 台車型ロボット キット

0

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

ROS・Unity・ロボット・ドローン姿勢の回転表現

はじめに

姿勢\(v\)から姿勢\(v’\)への変換はどう表現するのかは、ロボットや、ドローンの開発、運用に避けられない要素である。本文に出ているソースコードは、\(Python\)言語を用いる。

オイラー角、回転行列の表現

固定座標系・機体座標系・XYZ軸回転順オイラー角
固定座標系・機体座標系・XYZ軸回転順オイラー角

物体を\(X\)軸、\(Y\)軸(\(Y’\)軸)、\(Z\)軸(\(Z”\)軸)まわりの順にそれぞれオイラー角のロール角\(ϕ\)、ピッチ角\(θ\)、ヨー角\(ψ\)だけ回転させたときに、物体の姿勢の変換は、オイラー角と、もしくはオイラー角の三角関数を用いる以下の回転行列で表す。
$$\small R_{xyz} = \begin{bmatrix} CθCψ & -CθSψ & Sθ \\ SϕSθCψ+CϕSψ & -SϕSθSψ+CϕCψ & -SϕCθ \\-CϕSθCψ+SϕSψ & -CϕSθSψ+SϕCψ & CϕCθ \end{bmatrix} $$ ただし、\(C=cos,S=sin\) とする。
しかし、以下のイラストのとおり、オイラー角による姿勢制御の弱点\((Gimbal \space Lock)\)があり、例えば\(Y’\)軸回りを\(90°\)回転すると、\(X’\)軸と\(Z\)軸が同軸となってしまい、以降は姿勢制御(表現)ができなくなる。
ジンバルロック
ジンバルロック

このジンバルロックを解消するにはクォータニオンの使命となった。

回転ベクトルの表現

\(ROS\)では回転ベクトルのクォータニオン(四元数)\(q=ix+jy+kz+w\)は、

q=(x,y,z,w)

と表す。原点を通す回転軸を表す単位ベクトル\(a=(ax,ay,az)\)で、この回転軸まわり、角度\(θ\)だけを回転する場合は、クォータニオンは

(x,y,z,w)=(ax*sin(θ/2), ay*sin(θ/2), az*sin(θ/2),cos(θ/2))

と表す。

以下の例では、\(XY\)平面\((z=0)\)にて辺長\(1m\)の正方形に沿って例えば仮に自律移動ロボットに走行させて、動作を確認しよう。勿論\(Gazebo\)でも確認できる。

\(ROS\)では、ロボットの位置&姿勢の表現について、ロボットの中心または、ロボットにある他のポイントの位置は\(x,y,z(m)\)、姿勢ポーズはクォータニオンで表す。

from geometry_msgs.msg import Pose, PoseWithCovarianceStamped, Point, Quaternion, Twist  
...
locations['square_vertex_1'] = pose = Pose(Point(1.0,0.0,0.0), Quaternion(0.0,0.0,0.0,1.0))
locations['square_vertex_2'] = pose = Pose(Point(0.0,1.0,0.0), Quaternion(0.0,0.0,0.707,0.707))
locations['square_vertex_3'] = pose = Pose(Point(0.0,1.0,0.0), Quaternion(0.0,0.0,0.707,0.707))
locations['square_vertex_4'] = pose = Pose(Point(0.0,1.0,0.0), Quaternion(0.0,0.0,0.707,0.707))
...

回転ベクトル→オイラー角

geometry_msgs::Quaternion orientation = msg->pose.pose.orientation;    
tf::Matrix3x3 mat(tf::Quaternion(orientation.x, orientation.y, orientation.z, orientation.w));    
double yaw, pitch, roll;    
mat.getEulerYPR(yaw, pitch, roll);

オイラー角→回転ベクトル

tf::Quaternion q;
q.setRPY(Out_X, Out_Y, Out_Z);
sensor_msgs::Imu imu_data;
imu_data.orientation.x=q[0];
imu_data.orientation.y=q[1];
imu_data.orientation.z=q[2];
imu_data.orientation.w=q[3];

関連記事

オイラー角~ジンバルロック~クォータニオン
9軸IMU 6軸/9軸フュージョン 低遅延 USB出力 補正済み ROS対応
研究開発用 台車型ロボット キット

0

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