内容はその日の昼に書いていますが,思いつくと書き足され編集されるので 見にくるたびに内容が増えるかもしれませんがあしからず.2度おいしいと 解釈してください(んなわけねえよ).
こないだ購入したPioneer3DX移動ロボットのプログラムを考える. シリアルでつながっていてコマンドをおくると制御できると非常に 低水準の関数を予想していたら,なんとなんとめちゃくちゃ多機能な クラスライブラリARIAがついてきた. こいつはTCPも喋るし,コマンドライクなtelnetサーバも簡単に構築可能. コマンドやセンサー情報を取得は高度に抽象化されたクラスから呼び出し 可能で,ロボット自体がこれまた抽象化されたクラスになっているので, ほとんどはデフォルトコンストラクタまかせでロボットが動いてしまう. うーん感動. 今日のところは,ArRobotクラスのrun()メソッドでロボットが動作ループ に入っているいるときに,どうやってループ中の更新イベントを拾うか から検討開始.ArRobotにはArActionクラスのサブクラスで表現される 行動規則をaddAction()メソッドで追加しておくと,run()したときには デフォルトのresolver(行動制御クラス)であるArPriorityResolver クラスが各actionに定められたpriorityにしたがってactionをactivate することが判明.このArPriorityResolverのvirtualメソッドresolve() がそのルーチンと分かったので,ArPriorityResolverクラスを継承して MyResolverクラスを作成,resolve()メソッドをオーバーロードしたところ, このルーチンが毎回のループでコールされていると確認できた. そこで,オーバーロードしたresolve()メソッドに渡されるArRobotクラス インスタンスへのポインタ(つまりロボット自体)経由で, ArRobot::getX(),getY(),getTh()メソッドをコール.それぞれ初期位置 の座標系でのX,Y,θ値を返すものだ.要するにエンコーダの値を積分 したものだろう.こいつをゲットすることにも無事成功した.ArRobot へのポインタが得られているからロボットへの移動制御コマンドをいくら でも送ることができる.さて,あとはこれのwrapperクラスとしてpapero ワーカを実装すればいいわけだな.よしよし. |
スバルのあたらしい軽R2というのが出るのだが, webcgの記事によると,車内でフレーバーが楽しめるらしい. シガーソケットに専用のアクセサリーを差し込んで,そこに ベープマットのようなシートを入れると香りがでてくるらしい. 名付けて スバルアロマティックブレイク.必殺技の名前みたいだな. P.S. フレーバーではなくフレグランスというらしい.フレーバーは 食物の香り,それ以外はフレグランスらしい. |
今月の電子情報通信学会誌の記事.理論計算機科学の最新動向という 小特集の扉記事(pp.911)で,こんな証明の話が出ている. すべて異なったn個のでたらめに並んだ数 a1,a2,…an の中から単調に増加するか減少する部分列を求めたい(たとえば 7,9,4,6,3,8であれば4,6,8が最長の増加部分列, 4,6が6で終わる最長の部分列である).で,そのErdosによる証明として以下が挙げられている. √n以上の増加列が存在すれば終わりなので,存在しないと仮定しよう. 以下の集合X(k)を考える.理解できるまでに3回ほど読み直したが,うーんエレガントだ.何で k<√nのか がポイントかな.学生諸君はかんがえてみませう.分からなければ 図を書いてみること.今回の場合はX(k)のリストをならべてみましょう.X(k)={ai|aiで終わる最長増加部分列の長さがk}すべての aiはいずれかのX(k)に入り, 仮定からk<√nならX(k)は空である.したがってサイズ√n 以上のX(k)が存在し,その要素を xi1,xi2,… (i1<i2<…) とすると,それは減少列になっているので,証明できた. |