進捗
イベント等
- 3/7~ 技術書典 応援祭
- 3/14 第1回 デジもくオンライン (実験版)
- 3/21 第2回デジもくオンライン
技術書典 応援祭に「GR-ROSEでいこう!」を出品しました。
techbookfest.org
動画公開
所感
コロナの影響でイベントが軒並み中止となる中、デジもく会ではオンラインでのもくもく会開催を試み、良い手ごたえと知見が得られました。当分の間はコロナの脅威が続くと思われますが、健康管理に留意しつつも平常心を保って開発を続けていきたい。
技術書典 応援祭に「GR-ROSEでいこう!」を出品しました。
techbookfest.org
コロナの影響でイベントが軒並み中止となる中、デジもく会ではオンラインでのもくもく会開催を試み、良い手ごたえと知見が得られました。当分の間はコロナの脅威が続くと思われますが、健康管理に留意しつつも平常心を保って開発を続けていきたい。
下記のライブラリが利用できる。
github.com
地磁気を入力しない場合、鉛直軸の回転はジャイロのドリフトを補正できない。重力加速度による角度推定が鉛直軸回転には利用できないためである。これは相補フィルタやカルマンフィルタも同様である。
【宣言】
#include <MadgwickAHRS.h> Madgwick madgwick;
【初期化】
madgwick.begin(100); //100Hz (10msec周期)
【計算】
// 6軸センサの場合 (ジャイロは[deg/s]、加速度は生値でも[G]でも[m/s^2]でも可) madgwick.updateIMU(gx, gy, gz, ax, ay, az); // 9軸センサの場合 (地磁気は生値でも[uT]でも可) madgwick.update(gx, gy, gz, ax, ay, az, mx, my, mz);
【姿勢角(オイラー角表現)の取得】
// [deg]で取得 float roll = madgwick.getRoll(); float pitch = madgwick.getPitch(); float yaw = madgwick.getYaw(); // [rad]で取得 float roll = madgwick.getRollRadians(); float pitch = madgwick.getPitchRadians(); float yaw = madgwick.getYawRadians();
BMI160はBOSCH社製の6軸センサである。詳しくは下記の記事を参照。
lipoyang.hatenablog.com
Arduino用ライブラリも公開されている。 (非公式)
github.com
3次元空間での回転をクォータニオンで表すことを考える。
回転軸のベクトルを 、回転角を とすると
回転を表すクォータニオンは
なら
この回転でベクトル が に写像されるとすると
ベクトル をクォータニオン と読み替えて
ただし、 は の共役クォータニオンで、
方法 | パラメータ数 | ジンバルロック | 計算量 |
---|---|---|---|
オイラー角 | 3 | ×(有) | ×(大) |
回転ベクトル(軸角度表現) | 3(4) | 〇(無) | △(中) |
回転行列 | 9 | 〇(無) | 〇(小) |
クォータニオン | 4 | 〇(無) | 〇(小) |
オイラー角は人間にとっては直感的(せやろか?)と言われるが、ジンバルロックがあるし、三角関数を多用し計算量が多いのでコンピュータでの内部表現にはあまり向かない。回転ベクトル(軸角度表現)も三角関数を使うがオイラー角よりは少ない。回転行列はもっとも単純明解な数式で回転を記述できるがパラメータ数が多い。クォータニオンはパラメータ数も少なく、計算量も少ない。(しらんけど)
MPLAB X IDEで特定のバージョンのコンパイラを指定する方法まとめ。
下記ページの「Language Tool Archives」にてXC8、XC16、XC32の各バージョンをダウンロードできるので、所望のバージョンをダウンロードしてインストールする。
www.microchip.com
年末以来準備を進めてきた技術書典8が中止になったのは残念でした。作った同人誌はオンライン開催の「技術書典 応援祭」に出す予定です。3月以降もイベント中止が相次ぐかんじですが、開発のほうはしっかり進めていきたい。