ロボットの高速三角法用のマイクロコントローラー/ CPU?


15

これは、重量の軽いハードウェアに関係します。これは、(太い猫の大きさ、3自由度の6脚)歩行ロボットが持ち運ぶ必要があるためです。その歩行のため、多くの三角法を実行する必要があります(行列演算を使用しているかどうかはまだわかりません)。これがこの質問の出所です。

PIC、Arduino、または安価なAVRは、すべてを100 /秒で計算し、慣性や障害物回避、またはブルートフォースパス/歩行などのことを念頭に置くほど高速ではありません。

  • 計画Aは、ロボットで脳を運ぶことです。 マイクロプロセッサ、マイクロITX、ネットトップなどです。三角法/行列演算を高速に行うための効率的なハードウェアは何ですか?

    私はオンラインで検索し、これに特化したAVR、x86、またはARMマイクロコントローラーについて調べることを期待していましたが、そこには運がありませんでした。

  • プランBは、WiFiを介して接続されたx86マシンを使用して重量物を持ち上げることです。プロトタイピングにも最適ですが、ハードウェアが小型化したときに最終的にプランAに移行したいと思います。しかし、それでも、どのデスクトップCPUが三角法を最速で実行できますか?

  • プランCは、負荷を分散し、各レッグに1つの電力効率の良いマイクロコントローラー/コアを持つことですが、それは拡張性が好きな多くの理由で最良のソリューションではありません。

使用する言語やライブラリはまだ決めていませんが、PascalとC ++を好みます。

(より適切なタグの提案を歓迎します、私はここに新しいです)


11
浮動小数点演算は必須ではありません。いつでもサイン(または他の関数)テーブルを作成し、AVRのフラッシュに入れて、固定小数点計算で値を補間できます。これは、ニーズに十分に対応できる場合があります。
クリストフ

3
一般的な解決策は、大量の計算をリアルタイムで行うのではなく、値の表を事前に計算してから回答を検索することです。複数のCPU間で作業を分散させるという考え方も優れています。たとえば、強力なマスターCPUが1つ、次にレッグごとに1つのプロセッサがあります。
ジョンU

2
Robotics Stackexchangeサイトでこの種の質問をすることも検討してください
Rocketmagnet

1
プランBは計算をかなり高速に行いますが、WiFiを介した通信はおそらくパフォーマンスの向上を妨げるでしょう。USB経由で接続されたAndroidスマートフォンの使用を検討しましたか?Wi
ステファン

1
浮動小数点ユニットを備えたSTM32F4ボードで十分です。64k CCMの128k SRAMを搭載しています。168MHzで実行できます。32ビットの浮動小数点乗算には1 CPUサイクルしかかかりません。
richieqianle 14年

回答:


16

あなたのアプリケーションが本当に計算集中型であるとは思えません。たとえば、dsPICは、反復ごとに400 k命令を実行できます。それは沢山。ただし、低レベルのI / O機能、PWMジェネレーター、タイマーなどを備えていると便利です。

正弦波と余弦波は、dsPICのような整数マシンで実行するのはそれほど難しくありません。私は自分で何度かやってみました。コツは、角度の正しい表現を選択することです。ラジアンは理論的な観点からは良いかもしれませんが、計算上は不便です。退行は人為的であり、単なる愚かです。マシンサイズの整数が何であれ、あらゆる範囲を使用して1回転を表します。たとえば、16ビットプロセッサであるdsPICでは、1回の完全な回転は65536カウントです。これは、ロボットを制御する必要があるか、とにかく測定できるよりもはるかに高い精度と解像度です。

この表現の利点の1つは、符号なし整数の加算と減算の仕組みが原因で、すべてのラッピングが自動的に行われることです。別の重要な利点は、この表現がサインとコサインのルックアップテーブルの使用に特に適していることです。1/4サイクルだけ保存する必要があります。角度の上位2ビットは、どの象限に入っているかを示し、前方または後方にテーブルにインデックスを付けるかどうか、結果を否定するかどうかを示します。次のN下位ビットはテーブルにインデックスを付けるために使用され、テーブルには2 Nセグメント(2 N +1ポイント)があります。テーブルへの逆方向のインデックス付けは、テーブルインデックスビットを補完するだけであることに注意してください。

テーブルに十分なポイントを与えることができるので、最も近い答えを選ぶのに十分です。たとえば、テーブルに1024個のセグメントがある場合、正弦と余弦は円の最も近い1/4096で計算されます。これは、ロボットを制御するのに十分です。より正確にしたい場合は、テーブルを大きくするか、角度の残りの下位ビットを使用して、隣接するテーブルエントリ間を線形補間できます。

とにかく、重要なのは、このプロセッサの要件が上記の問題と一致していないようだということです。おそらくdsPIC33Fを使用します。確かに、小型で軽量で、シングルボードコンピューター上のx86のような本格的な汎用コンピューティングプロセスよりもはるかに電力効率が高いです。


PICは逆運動学だけでも遅くなるという印象を受けていましたが、再考する必要があるかもしれません。少なくとも100 /秒の3DOFの6レッグに対して逆運動学を行うことは可能ですか?6x3x100のインバースキネマティクスにより、ライブの脚の動きが得られます。とにかく、アルゴリズムを実行するのと同じプラットフォームで逆運動学が発生する必要があるので、これらの部分を2回再実装する必要はありません。このアルゴリズムはより要求が厳しく、PICまたはArduino-ischボードでは実行できません。
バリーステイズ

9

多くの入力信号を処理します。高スループットのCPUは必ずしも必要ではありません。多数の信号を並行して処理できます。これは典型的なDSPの領域です。もちろん、一般的なCPU機能も必要です。これは問題ありません。統合DSPを備えたCPUがたくさんあります。

このようなアプリケーションの典型的なチップ設計は、Cortex-M4です。これには統合DSPが付属し、-M4FバージョンにはFPUもあります。これは必ずしも必要ではないかもしれませんが、固定小数点演算で三角法を簡単に実行できます。


行列演算はCortex-M4Fにエッジを持っていますか?(私がそこに
行く

3
ちょっとした工夫-Cortex-M4プロセッサコアにはDSPが統合されておらず、ある程度のDSP機能がメインプロセッサコアに組み込まれています。DSP拡張機能は、乗算/累積命令の追加であり、フィルタリングや変換などの典型的なDSP機能を容易にします。
uɐɪ

6

いくつかの発言:

  1. 障害物回避を実行するのと同じCPUで三角法演算を処理する必要はありません。2つのマイクロコントローラー間でタスクを分割し、通信プロトコルを使用してそれらを会話させることができます。

  2. 実験のために、ARM Cortex M0マイクロコントローラーにカルマンフィルターを使用してAHRSアルゴリズムを実装しました(STM32で、残りは正確に覚えていませんが、32 MHzだったと思います)。約40サンプル/秒です。より高速なコントローラを使用すると、簡単に持ち運べるはずです。もちろん、FPGAまたはDSPの方法を試すこともできます。

  3. 脚の制御はCPU集約型ではなく、三角法や障害物回避操作とは別に、すべての脚を一緒に制御できます(1を参照)


サーボはコントローラーまたはダイナミクセルバスを介してシリアルに制御されるため、基本的にすでにロードされています。問題は、ソフトウェアがライブポーズ/歩行に必要な以上の逆運動学計算を行う必要があることです。
バリーステイズ

5

三角法には注意が必要ですが、ショートカットがあります。処理能力が軽い場合は、CORDICアルゴリズムを検討してください。

基本的には、[たとえば]サインの値の表です。角度は、度、ラジアン、その他何でも構いません。重要なのは、これらの値のサインが1/2(0.5)、1/4(0.25)、1 / 8、1 / 16であるということです。

角度を入力し、最初のテーブル値を減算し、結果を最初の結果(0.5)に設定します。練習して角度が負になった場合、次の値を加算します(そして0.25を減算します)。それ以外の場合は、角度の減算と結果の追加を続けます。

テーブルの最後に到達したら、足し算と引き算をするだけで終わります。乗算する最後の「フィドルファクター」があります。

結果の精度[および速度]は、ルックアップテーブルのサイズ[および解像度]に依存します。


CORDICは良さそうですが、ロボットを高速化する場合にのみ使用します(それが要件です)。
バリーステイズ

3

汎用GNU / Linuxシステムを実行するRaspberry Piボードの使用を検討できます。Raspberry Piには、ロボットサーボまたは拡張ボードを接続するために使用できるいくつかのGPIOピンがあります。

http://www.youtube.com/watch?v=RuYLTudcOaM

モデルA Raspberry Piは、OpenGL ES 2を使用するGPUを使用して、最大24 GFLOPの汎用浮動小数点計算を実行しながら、2.5 Wの電力予算を維持できます。

http://elinux.org/RPi_Hardware

例:Raspberry Piを使用して実装されたバッテリー駆動ロボットのセットアップ。

http://www.homofaciens.de/technics-robots-R3-construction_en_navion.htm

例2:ラズベリーパイによって制御される6脚ロボット:

http://www.youtube.com/watch?v=Yhv43H5Omfc

例3:ラズベリーパイによって制御される自己バランス型2輪倒立振子ロボット:

http://www.youtube.com/watch?v=n-noFwc23y0


2

脚式ロボットの場合、事前定義された脚の移動シーケンスを作成して「再生」できます。リアルタイムの障害物回避はfuzzy logic、すべてが再びテーブル形式になっているライト実装で行うことができます。必要なのは、適切な値を選択してdefuzzyficationプロセスに使用することだけです。

Cのように、何らかの形で高速なプロセッサですべてを実行できますARM7AVRすべてをに変換することに多くの時間を費やした後、私はそれを試して失敗しましたfixed point arithmetics


歩行アニメーションを再生することは、私が望んでいないことです。私が実装したいアルゴリズムは、それ自体でその足で何をすべきかを把握し、そのアルゴリズムが高速三角法を必要とする理由です。しかし、私の質問ではそれを明確にすることはできませんでした。そして、これに関する非常に多くのチャイムを見ると、質問を編集するのが無駄になります。私は時間をかけて、尋ねてより具体的にします。
バリーステイズ

その場合、私はサーボレッグシステムに行きます。各レッグには独自のコントローラーがあります。エージェントベースのアプローチ。
ゴッサマー

1

Texas Instruments Stellarisプラットフォームには、デフォルトで浮動小数点ユニットが搭載されています。80MHzクロックARMコントローラーがアプリケーションに十分な速度であるかどうかはわかりませんが、LaunchPad開発ボードはかなり安価です:http : //www.ti.com/ww/en/launchpad/stellaris_head.html

USBを介してプログラム可能で、少なくともWindowsとLinuxで無料のツールチェーンを利用できます。サイズは約4×6 cmで、30以上のGPIOピンがあります(正しくカウントした場合)。


0

あなたはできるあなたのロボットアプリケーションにx86のパワーPCのCPUボードを埋め込むインタフェースカードとしてロボットのドライブを制御するために、AVRの助けを借りて。問題の最速かつ最も安価なソリューション。ただし、多くのコーディングをx86アーキテクチャに混乱させる必要がありますが、幸いなことに、オープンソースのOSコードから多くのコーディングを把握できます。(機械構造がこの重量に耐えられる場合)


4
「x86」と「power pc」は、2つのまったく異なる(そして少なくとも歴史のある時点で)競合するアーキテクチャです。
クリスストラットン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.