Other articles


  1. M5Stack-IDF = ESP-IDF + arduino の仕掛け

    M5Stack-IDFの仕掛け

    M5Stack-IDFはESP-IDFでArduinoとM5Stackのライブラリを使う環境を提供しています。実はESP-IDFは外部ライブラリを追加して使うメカニズムを持っていてM5Stack-IDFはそれを利用します。 使える外部ライブラリは内部ライブラリとの相性である程度制限されます。

    ESP-IDFはビルド(make)時に決め打ちのディレクトリとそのサブディレクトリを見に行きそこにcomponent.mkという名前のファイルがあるかどうか調べます。 もしあるとそれぞれのcomponent.mkの中にある指示をビルドへの指示として追加します。 ESP-IDFのサンプルプログラムを見ると必ずmain/component.mkがあってたいていは中身は空です。 この場合は単にここにもソースがあるよという意味になります。 少し複雑なライブラリでよく使われるのは

    COMPONENT_ADD_INCLUDEDIRS := include src
    COMPONENT_SRCDIRS := src
    CXXFLAGS += -fno-rtti -Wno-error=unused-value
    

    の3つの変数あたりでこの例の場合component.mkのあるディレクトリ下のsrcの中にソースがあり、includeとsrcの2つのディレクトリをインクルードのサーチパスに加え、c++でのコンパイル時にオプション -fno-rtti -Wno-error=unused-value を追加することを指示しています。 arduino-esp32にはさらに複雑な指示のあるcomponent.mkがあります。

    決め打ちのディレクトリとしてmakeするディレクトリの中にあるmainとcomponentsがあります。 なのでcomponentsにいろいろなライブラリを並べライブラリのルートとなるところに各ライブラリに対応する component.mkを置いてやればライブラリ・コンポーネントの追加ができるというわけです。 例えば

    .
    ├── Makefile
    ├── README.md
    ├── components
    │   ├── arduino …
    read more
  2. "Aircraft Control and Simulation (3rd ed.)" メモ

    Aircraft Control and Simulation

    Book cover of Aircraft Control and Simulation

    を読んでのメモです。 この分野まったくの素人です。

    Ch1. The Kinematics and Dynamics of Aircraft Motion

    航空機の運動を表すのに必要な座標系、そこでの回転や並進と座標変換についての話。古典力学と地球の形状や物理の基礎知識。

    Ch.2 Modeling the Aircraft

    ベーシックな航空力学とそれに基いた航空機のモデル。モデルは線形または非線形の微分方程式あるいはその係数のセット(derivatives)。 実際は複数テーブル化される。 簡単なものだとテーブルが十数個だがF22のsimulationなんかだと数千テーブルが必要で総データポイントは2-300万項にも及ぶらしい。

    Ch.3 Modeling, Design, and Simulation Tools

    古典的な制御の基礎とその航空機simulationでの適用例。次章への準備

    'state-spaceモデル' 'state equation' 'network transfer function' 'Bode plot' '数値積分 Runge-Kutta' 'steady-state flight' 'feedback control' …

    read more
  3. "Geometric Algebra for Computer Science" 紹介

    Geometric Algebra 幾何学的代数

    これは幾何学的代数をテーマにした本

    "Geometric Algebra for Computer Science", Leo Dorst, Daniel Fontijne, Stephen Mann (ISBN 9780123749420)

    の紹介のために書きました。 この本は幾何学的代数の導入から応用までを扱っていますがその内容や語り口に至るまでも素晴らしくいままでに読んだ中でもとびきり良い本です。 レビューといった類ではなくこの本の題材となっているものを本の切り口に沿って説明できればとはじめたのですが私の力ではとても難しいと思い知りました。 ですがこの並外れた本の内容や雰囲気まではかなわなくてもそのかけらでも伝えられればうれしいです。

    幾何学的代数(Geometric Algebra)は幾何学的な対象がつくる代数系だといえます。 この代数系は幾何学積(geometric products)に基づいています。幾何学積の実際の扱いは簡単とはいえませんがその基本的な概念は意外に簡単で初等的でさえあります。

    natural

    つまり基本的なアイデアは内積と面積などを組にして一度に扱うと話がむしろ簡単になる、ということです。 こういうことはよくあることですよね。

    この幾何学積は空間やもっと高い次元へも拡張できます。 それには向きのついた平行四辺形や平行六面体の拡張概念"k-blade"と内積の拡張概念"contraction"(縮約)が必要になります。

    前者はベクトルu,vでできる向きのついた平行四辺形(面積要素)をu^vと書いて2-bladeと呼び、u,v,wが作る体積要素を3-blade u^v …

    read more
  4. VL53L1X on ESP-IDF

    VL53L1X is a ST's new TOF(time of flight) sensor. ST gives its driver and API library with the dual license. See ST's page for detail. Although that code is for the STM32 platforms primarily, they are written with the highly modular manner and possible to be used with other …

    read more
  5. Visual yaw estimation

    以前紹介した 室内測位システム ではフレームの姿勢をMAVLinkで貰ってるんですが室内なのとコアレスモーターがついてるせいでフレームに載せているコンパスがくるってしまい、それで得られるyawの値も酷いものなので代わりに天井のカムからみたマーカーで推定できるヘッドの方向を使っています.

    一般には斜め上からみることになるので頭と尾のマーカーがちょうど南北を向いているように見えても機体が水平でないと実際には南北を向いていません. 絵で書くとこんな感じになります

    figure

    wが機体の頭と尾のマーカーを結んだ直線の方向でカムからこれをみると方向がvであるかのように見えています. 実際は真上から見た方向v'をpitchの分だけ回転したのがwなわけです. 斜めになった緑の面Hはカムやvやwを含む平面です.

    なので問題は見かけの方向を機首の上げ下げの情報で修正する、つまり

    vとpitchからwを求める

    になります. 通常このような問題は回転行列や球面角で計算するのだと思うのですがgeometric algebraを使って求めることができます.

    Adjust yaw

    図のようにvをvとz-軸方向でできる面内でpitchだけ回転した黄色のベクトルの終点をPとしてこの点を通って水平に球上を回る円周Kを描きます. wの終点はK上にあるはずです. vとwを含む面Hはvとカムから球の中心への方向uとを含む面でもあるのでKとHの2つの交点のどちらかの表す方向がwになります. これらの操作はgeometric algebraでの簡単な操作に対応していてlibvsrだと

    auto bi = v ^ Vec(0, 0, 1);
    auto rop = Gen::rot(bi*(-pitch_angle/2));
    auto H = (PT(0, 0, 0) ^ v ^ u ^ Inf(1)).dual();
    auto K = v.sp(rop …
    read more
  6. 貧者的局所測位系 The versorer's apprentice

    小さい機体でもSLAMこそが未来だと思うもののさすがに私では手がでないので貧者的局所測位系と名付けて天井に貼り付けたOpenMV cam+魚眼レンズとフレームからの情報を合わせてフレームにのせたマーカーの水平位置を推計するというのを作っています.

    OpenMV cam M7 + fish-eye + esp32 OpenMV ide

    魚眼レンズで得られるイメージセンサー上のマーカーの位置からcamからの方向を計算してマーカーの高さの情報をヒントにマーカーのcamを基準にした水平位置をだしてます. このセンサ上のマーカーの位置から3Dの方向を計算するところはいわゆるステレオグラフィックプロジェクション(立体射影)になっていて、三角関数や線形代数を使って計算できます.

    前置きが長くなりましたがフレームの水平位置を求めるところまでをgeometric algebraを使ったらどうなるか試してみました.

    auto pointO = Construct::point(0,0,0);
    auto pointP = Construct::point(0,0,-h);
    auto v = - Vec(x,y,-1) * Vec(0,0,1) / Vec(x,y,-1);
    auto line = pointO ^ v ^ Inf(1);
    auto dlp = (pointP <= Drv(0,0 …
    read more

Page 1 / 3 »

links

social