ヒト型ロボット 123 STEVAL-MKI062V2を購入
STマイクロのiNEMO慣性モジュールSTEVAL-MKI062V2を購入。
加速度、ジャイロ、地磁気、気圧、温度センサが統合されてます。
INEMO V2 MEMS module
慣性計測装置:Inertial Measurement Unitとしては、とにかく安価で、簡単(USB経由でデータ読みだすだけ)に利用できる素晴らしいものです。
加速度、ジャイロ、地磁気、気圧、温度センサが統合されてます。
INEMO V2 MEMS module
慣性計測装置:Inertial Measurement Unitとしては、とにかく安価で、簡単(USB経由でデータ読みだすだけ)に利用できる素晴らしいものです。
ヒト型ロボット 122 モデル予測制御による歩行制御
歩行パターン生成モジュールを全面的に書き直し。
今後の拡張に備えての基礎を作ったつもり。

歩行制御はモデル予測制御によるもの。
こちらの文献を参考にしています。
A Herdt, H Diedam, PB Wieber, D Dimitrov, K Mombaur, M Diehl (2010). Online Walking Motion Generation with Automatic Footstep Placement. Advanced Robotics 24 719-737
Google scholarで検索すればPDFが見つかります。
文献の後半の方は理解していません。英語あまり読めないので。
この制御法の良い点は、支持多角形を拘束条件として、目標ZMP、目標重心軌道を生成できることです。
2足歩行ロボットに適した制御手法だと思います。
モデル予測制御全般に関しては、「モデル予測制御―制約のもとでの最適制御」(東京電機大学出版局)が勉強になります。というか、これぐらいしか書籍がありません。
c++での実装にあたって、QP(2次計画問題)を解くソルバーが必要ですが、それにはQuadProg++を使用しています。
実際には、行列演算ライブラリをCPPLapackに変更し、内部の演算をcblas, clapackを使用(ベクトルの内積とか、コレスキー分解の部分)して高速化したものを使用しています。
QuadProg++はシンプルな実装なので、いじりやすいです。
現状のモデル予測制御を利用した歩行制御の計算時間は、予測時間:Tp=1.6[s], 時間刻み:dT=0.02[s], N=Tp/dT=80の時、だいたい2ms~5msくらいです。結構ばらつきます。これを時間刻み:dT=0.01[s], N=160にすると、20ms~30msくらいになります。時間刻みはできるだけ細かくしたいところですが、行列の次元数があがるので、むやみに増やすことはできません。
将来的には、ロボットの全身運動を考慮した動力学フィルタに拡張する予定です。
今後の拡張に備えての基礎を作ったつもり。

歩行制御はモデル予測制御によるもの。
こちらの文献を参考にしています。
A Herdt, H Diedam, PB Wieber, D Dimitrov, K Mombaur, M Diehl (2010). Online Walking Motion Generation with Automatic Footstep Placement. Advanced Robotics 24 719-737
Google scholarで検索すればPDFが見つかります。
文献の後半の方は理解していません。英語あまり読めないので。
この制御法の良い点は、支持多角形を拘束条件として、目標ZMP、目標重心軌道を生成できることです。
2足歩行ロボットに適した制御手法だと思います。
モデル予測制御全般に関しては、「モデル予測制御―制約のもとでの最適制御」(東京電機大学出版局)が勉強になります。というか、これぐらいしか書籍がありません。
c++での実装にあたって、QP(2次計画問題)を解くソルバーが必要ですが、それにはQuadProg++を使用しています。
実際には、行列演算ライブラリをCPPLapackに変更し、内部の演算をcblas, clapackを使用(ベクトルの内積とか、コレスキー分解の部分)して高速化したものを使用しています。
QuadProg++はシンプルな実装なので、いじりやすいです。
現状のモデル予測制御を利用した歩行制御の計算時間は、予測時間:Tp=1.6[s], 時間刻み:dT=0.02[s], N=Tp/dT=80の時、だいたい2ms~5msくらいです。結構ばらつきます。これを時間刻み:dT=0.01[s], N=160にすると、20ms~30msくらいになります。時間刻みはできるだけ細かくしたいところですが、行列の次元数があがるので、むやみに増やすことはできません。
将来的には、ロボットの全身運動を考慮した動力学フィルタに拡張する予定です。
ヒト型ロボット 121 進捗
・プログラム関係
プログラムのベースをOpenHRPのhrplibからChoreonoidのライブラリへ変更。
行列演算ライブラリがtvmetからEigenに変更されている関係で、全体の計算速度が上がっています。
順運動学の計算はだいたい3割くらい速くなりました。
モデルファイルの形状読み込み部分とか、完全に移行しきれない部分もまだあるので、OpenHRPも併用しています。
・サーボの制御
シリアルポートを複数使用して並列処理することにより、制御周期10msを達成。
1ポートあたり6個のサーボを割り当てています。
サーボ6個の通信処理時間は合計6msくらい。余裕を見て制御周期は10ms。
この程度の制御周期ならリアルタイムカーネルにしなくても問題なさそうです。
プログラムのベースをOpenHRPのhrplibからChoreonoidのライブラリへ変更。
行列演算ライブラリがtvmetからEigenに変更されている関係で、全体の計算速度が上がっています。
順運動学の計算はだいたい3割くらい速くなりました。
モデルファイルの形状読み込み部分とか、完全に移行しきれない部分もまだあるので、OpenHRPも併用しています。
・サーボの制御
シリアルポートを複数使用して並列処理することにより、制御周期10msを達成。
1ポートあたり6個のサーボを割り当てています。
サーボ6個の通信処理時間は合計6msくらい。余裕を見て制御周期は10ms。
この程度の制御周期ならリアルタイムカーネルにしなくても問題なさそうです。
ヒト型ロボット 120 PID制御
冗長間接制御。
これまでのPD制御に、重力の影響などにより生じる偏差をなくすため、I制御を追加しました。

結果は良好です。
むやみにP制御のゲインを上げなくて済むようになりました。
ところで話は変わって、
ついにChoreonoidが公開されました。
http://choreonoid.org/
祝!
ざっと、ソースコードを拝見しましたが、ライブラリとしてのOpenHRPとは非互換のようです。
使用されている行列演算ライブラリが、tvmetからEigenに変更など、大きな違いがあります。
これまでのPD制御に、重力の影響などにより生じる偏差をなくすため、I制御を追加しました。

結果は良好です。
むやみにP制御のゲインを上げなくて済むようになりました。
ところで話は変わって、
ついにChoreonoidが公開されました。
http://choreonoid.org/
祝!
ざっと、ソースコードを拝見しましたが、ライブラリとしてのOpenHRPとは非互換のようです。
使用されている行列演算ライブラリが、tvmetからEigenに変更など、大きな違いがあります。
ヒト型ロボット 119 FT4232H
ストロベリー・リナックスのFT4232H(4ch)高速USBシリアル変換モジュールキットで4chのRS-485通信。
トランシーバICはLTC485CN8。

LTC485CN8の駆動に必要な5vは変換モジュールからは出ていないので、USBコネクタから直接引っ張り出しました。
RS-485の送信・受信の切り替えに必要なTXDEN機能はオプションなので、FTProgで設定します。

「RI as RS485 Enable」にチェックをいれて書き込めばOKです。
トランシーバICはLTC485CN8。

LTC485CN8の駆動に必要な5vは変換モジュールからは出ていないので、USBコネクタから直接引っ張り出しました。
RS-485の送信・受信の切り替えに必要なTXDEN機能はオプションなので、FTProgで設定します。

「RI as RS485 Enable」にチェックをいれて書き込めばOKです。