Postureモーションのぎこちなさ問題が解決か・・・

先に書いた、座る、たつ、動作をC++のAPIをとおしてやると動きがぎこちなくなってしまうという問題を、たぶん、解決できたと思うので、記録のために記載しておく。
Choreguraphでこのような動作をやってもきわめてスムーズに行く。そのログをみると、AutonomousLifeをInteractiveの状態で行なっているのでそれをまねしようとしたがどれも失敗した。プログラマティカルに、Interactiveには移行できないと指摘しながら、C++でそこにいこうとしても、Documentoをどう読んでも書いていない。C++上は、StateはSolitaryになっていて、それをいったんDisabledにしてみたりしたが、ロボットは破壊的な動きをすることがわかって断念。
結局、ALAutonomousMovesを座る前にfalseにして、再び立ち上がってから、trueにするという方法で解決できたような気がする。プログラムはこんな感じだ。
/*****************************
amove = new AL::ALProxy(broker, "ALAutonomousMoves");
if(poseType == "Sit"){
// If sitdown, ALAutonomousMoves makes disabled
amove->callVoid("setExpressiveListeningEnabled",false);
}else{
// if stand up, enabled
amove->callVoid("setExpressiveListeningEnabled",true);
}
**************************/
ALAutonomousMovesとPostureがバッティングして、動きのぎこちなさが発生したと考えることができるのだ。
しかし、この間いろいろなことを試して、ロボットの動きについての知識が増え、また、C++でコントロールする方法が深まったことはとても良かったと思う。

C++ローカルモジュールからのログ出力

ローカルもモジュール(ロボットから直接起動するモジュール)のデバグ用にログを出力したいのだが、ただコンソール出力にしているだけ(リモートモジュールの場合は、これだけで良かった)では、どこにも出力されなくなってしまう。したがって、ログ出力のライブラリを使わなければならない。以下のようにする。
(1)main.cppに次のようにインクルードファイルを設定する。
#include <cstdlib> //for atexit
#include <qi/log.hpp>
(2)同じく、main関数の中で、次のような初期化を行う。
qi::log::init();
atexit(qi::log::destroy);
(3)使用するcppファイルに、
#include <qi/log.hpp>
を入れて、情報の場合は、
qiLogInfo("wsftmod") << "******** トピックリストの取得 *********";
などとコマンドを入れる。警告の場合は、
qiLogWarning("wsftmod") << "トピックリストを取得できませんでした;
などと入れる。
ここで、"wsftmod"は、出力の冒頭に記載される識別子で、自分が区別できれば何でもよい。モジュール名をいれておけば最低間に合う。
以上の操作で、以前示したロボットのログの中に情報が現れデバグが簡単にできてしまう。(gdbを使うまでもないと思う。多分使えない。)