審査員とモデリング最優秀賞を取った人で、ロボコンについてのパネルセッションがあった。
内容は、ロボコンをしていないとあまりおもしろくないものであったが、個人的には非常に楽しめた。
来年のモデリング部門での受賞のヒントが見え隠れしたセッションであった。個人的には、興奮させられる内容だった。
セッション終了後に、記念にレオンスター氏と写真をとってきた。
これで、今年のロボコンは完全に幕を閉じた。
S君、Gさん、Yさんがコンテストに一緒に参加してくれました。S君、Gさんはなんと休みを取っての参加です!!すばらしい。
まず、会場に行ってびっくりしたことは参加者が多すぎてマシンのセッティングを行うスペースが足りない。
なんとか場所を見つけて作業しようにも電源がない。。仕方がないので省エネモードで乗り切った。
更に驚かせられたのが、今年からモデルの順位が先に展示場にて発表されていたこと。しかも、
侍麗心愚が特別賞を取っていたこと。
あまりのうれしさに調整の作業を忘れてメンバーで代わる代わる見に行った。
調整段階では、コースをそれなりに走ったので、坂道判断の所に注力してセッティングをした。しかし、なぜか漆黒線を判断してくれない。(汗)
42チームが1つのコースで調整を行うので、走らせる時間や場所が限られてしまった。
本番では、インコースとアウトコースの2回を走るのだが、完走ならず・・。無念の結果。。(涙)
コンテスト終了後、表彰式までの時間に運営委員の方からモデルのメタファについて色々聞かれた。かなり、奇抜だったらしく、「蟻かぁ・・。」と驚かれていた。
表彰式では、レオンスター氏も蟻のメタファを気に入ってくれていたみたいで、発言の中に出てきていた。
表彰式では、OMGのえらい外人さんから賞状をもらった。
壇上からおりて席に戻る際に、レオンスターから握手の手を差し伸べてもらったことが、とても印象に残った。
いろいろと大変だったが、終えてみたらかなりいい思い出になっていた。作業時は、大変すぎて来年の参加はどうしようかと思っていたが、今は絶対参加の気持ちに変わっていた。
とにかく、特別賞がもらえて安心した。
協力して下さった方々に感謝の念で一杯である。
コンテスト前日、最後の調整が行われた。ガッツのある侍達が集合。
ワイワイガヤガヤと今までにない盛り上がり!?だった。始めからこの雰囲気を作れたらよかったのになぁ。
ロジックの調整が終わると、目立つ為のデコレーションに走った。侍麗心愚のロゴを縮小印刷し、両面テープで「生延氣」にペタペタ。
到底COOLには見えない出来になった。
まぁ、目立つからいいかな。(笑)
自宅でロジックをコツコツ組んでいた。近道は諦め、復旧と坂道をメインに行った。
なんとか、その2つについてはいい感じに仕上がった。後は、微調整のみ。コンテストで完走してくれることを祈るのみ。
特にソースには触らず、頭でロジックを考えるだけにした。
下手にソースをいじり出すと収拾がつかなくなる為だ。明日の日曜いっぱいをかけて最後の実装を行う。
コンテストへ向けひたすら実装。
完走を目指すべく、坂道ロジックと復旧ロジックの実装・検証を繰り返す。
帰り際には、それなりのロジックが残った。後は土日を使ってそれらを組み合わせる作業をするのみとなった。
コンテストへ向けひたすら実装。
スピードうんぬんは抜きにして、完走できる実装を目指し始める。
完走してくれ〜。
コンテストへ向けひたすら実装。
Javaの壁との戦い。
形式的なメンバーの集まりは今日で終わりだった。しかし、コンテストに向けて課題はまだまだある。
う〜〜ん、、終わった気がしない。というかコンテスト当日まで終わるということはありえないのだが。
やはり、週一2時間でなんとかしようという方がムリだよなぁ。いろいろと反省する点があった。
メンバーの皆様、段取りが悪くて申し訳ありませんでした。
ロボコンの成果物を提出しに品川まで行って来た。
自分以外にも持参していた人がいて帰り道に少し話して帰った。
コースがもう少しでできそと言っていた。置くスペースがあるのがうらやましい。言語はC++らしい。
しかし、昨日は疲れた。
今日は午前中は、試走2だ。しかし、Javaの厳しい現実を見せられた状態で試走に望むのはつらい。
とりあえず、本番に向けてのフィードバックが得れるようにはしたいと思う。
本能ロジックと気分切替ロジックを試したがうまくいかなかった。徹夜で作成した即席ロジックではやはりだめだった。
前回、うまく走ったソースで走行させてみたら2周することができた。正確に言うと、2周のゴール直前でこけた。(笑)
下り坂さえ乗り越えれれば、完走はできそうだ。制限時間は2周で2分だそうなので、ギリギリといったところ。
試走後、提出物の作成の続きに取り掛かる。
夜の10時半頃に完成!! あ〜、長かったなぁ。英訳は友達にお願いした。報酬は焼肉。。。
出費は痛いが、英訳の苦労をするのだったら、全然安いよなぁ。
金曜の帰宅後、ソースをいじる予定が爆睡をかましてしまって手付かずになってしまった。
午後からYさんと提出物を作成した。
夕方、S氏がきたので開発の方をお願いした。首振りの幅を制限するロジックを担当してもらった。
やはり、難しいらしく完成には到らなかった。
提出物も完成せず、明日に持ち越し。
今日は徹夜で試走の為のソースを準備しないと。。
徹夜してわかったことは、Javaはクラスを責務で分けて増やしていくと実行時にタイムラグが発生するということ。
つまり、処理を委譲する形になるので、光センサーから情報を受けてから処理を行うまでの間で時間にずれが生じてしまうのだ。
C++やCではどうなのかはわからないが、Javaではそういうことが起きている。
オブジェクト指向で設計すればするほど、動きがおかしくなる。。。ああ、無情。。。
業後に、たくさんのメンバーが手伝いにきてくれた。
自分は、提出物の作成をしなければならなかったので、皆に課題を与えてお願いすることにした。
うれしい報告と悲しい報告が作業終了時にあがってきた。
うれしい方は、登りと下りの切替ポイントが漆黒線と同じ値になるといういこと。これでバッテリーのボルテージを見なくてすむようになった。
悲しい報告は、走行体がコーナーを曲がれなくなってきたというもの。
ああ、自宅で調査しないと・・・・。
また寝れない。。。
17:30頃からMさんと作業を開始。
まずは、分析クラス図のレビューを行った。
状態を変化させる部分を修正。2パターンの分析モデル図が出たので、実際に動くかどうか試してみて安定して走る方のモデルを使うことにした。
ここでは、「本能と理性を使い分けることが本当にできるのか」と「理性の行動をスイッチできるかのか」というポイントを検証した。
検証の結果、使い分けることができることがわかったので、今度は首を振ってコースを回るというこれまでのロジックを組み込むことにした。
さすが組込み!!これまでのロジックをいれたとたん予期しない動きを始めた。涙
時間がないので自宅作業に持ち越し。。。 また寝れない。。。。。
成果物提出の期限が迫ってきたので、クラス図やシーケンス図をきちんと図に起こす作業を始めた。
ある程度は、イメージできていたのだが実際に書いてみるとある壁にぶつかった。
それは「状態の遷移をどのクラスが行うか」であった。オブジェクト指向を意識すればするほど前に進むことができない。
「これでは相互参照になるし、、、、」
「これだとクラスの責務が微妙になるし、、、、」
などと悩みながら時間切れ。苦し紛れに出した分析クラス図しか残らなかった。
ロボコンは楽しむはずが、苦しむことの方が増えてきてしまった。汗
最近、ちゃんと寝てないなぁ。。。。
試走に向けての更なるパワーアップ!! のはずが。。。。
送別会の為、あまり作業できず。
自宅で試走用にソースを整理してきました。
友達の家で爆睡してしまい、帰宅は夕方。帰り道にラシャ紙などの資材を購入。
夕方からコース作成及び、走行の安定、坂道対応を開始。
自宅コースは安定して走行するようになり、一安心。
しかし、坂道対応の際に思わぬ状況に遭遇する。黒テープを貼る際に、中央で2重貼になっていた所が、ラシャ紙の漆黒線と同じ値になってしまっている。
大会コースがどうなっているのか確かめるしかないが、試走まではわからない。う〜ん、初出場だと厳しいなぁ。
大会コースでは、2重貼になっていないことを祈り作業を終える。
#ref(): File not found: "自宅コース.jpg" at page "ITイベント/第3回UMLロボコン参戦記/ロボコン日記"
↑自宅で作成したコース
現在、このコースを完走できるレベルまで到達!!
そうそう、なぜか自宅PCだとUSBタワーで転送中にマシンがダウンするという現象が起きてます。
原因は、ドライバにあるらしいのだけど、なんで自宅PCだけが落ちてしまうのかがわかりません。5,6回マシンが急に落ちたんだよなぁ。。。(涙)
今日は、11時半頃から作業開始。
安定した走行、坂の対応を目標とした。
お昼にKさんが参加。夕方にS氏も参加。
PM7:00頃、なんとか安定した走行に到達できた!?
今日はAさんの送別会で、ロボコンの作業は20分のみ。
安定した走行を実現すべく考えてきたロジックを反映させてみる作業のみだった。
しかし、それもうまくいかず不安を残したまま、送別会へ出発。
送別会は無事成功!!よかった、よかった。
驚愕の事実が発覚!!
安定した走行を実現したかに思われたソースが生延氣以外の走行体ではうまく動作しない。。。
走行体によって光センサーが黒と判断するしきい値が異なることもわかった。
しきい値を変更しても、今までのロジックではうまく動作せず途方に暮れる。
また、振り出しに戻るのか?という気分のうちに時間切れで作業を終える。
今日の成果は、30〜40秒走行を続けると「ビー」という音と共にプログラムの制御が利かなくなるという問題の原因を突き止めたことだ。
原因は、やはりメモリの問題であった。
光センサーが情報を収集する度にクラスのnewを行うとメモリの領域を食いつぶしてしまうのである。
また、lejOSのJavaにはガベージコレクションが存在しないので、変数にnullを入れて参照を切らせても意味がないのである。
要は限られたメモリの中で戦うしかない。
CやC++は任意にメモリの開放を行うことができるので、他のチームがそっちを選ぶのもうなずける。
試走までちょうど一週間となってしまい焦りを覚えながら作業に取り掛かる。
今日までに生延氣*1が覚えた技は「ウイリー」「生まれたての子犬」「石橋を叩いて渡るように楕円形のコースを1周する」だけだ。
また、なぜか30〜40秒走行を続けると「ビー」という音と共にプログラムの制御が利かなくなり、暴走を始めてしまう。
これでは試走に出るというレベルではない。
これまでの開発でわかってきたことは、外部から大量の情報が入ってきてしまい我々が予測する動きと異なってしまうことだ。
また、黒線と白線の境界におけるロジックがコアになるので、ここをクリアーしないとスムースに1周することができない。
情報の制御が必要なことは確信が持てたが、黒線と白線の境界におけるロジックをどうするかで悩んでいた。
さすがに時間もなく焦りがつのるばかりなので、プライドを捨て前大会のスピード部門優勝者の走行動画を3回ほど開発者の視点で見る。
この動画を見たことで黒線と白線の境界におけるロジックをどうするかは決まった。
ホワイトボードを使いながらメンバーに説明を行い実装に移ってもらった。この時の実装者はS氏である。
最初は、走行しないようにしセンサーの首振りだけを実装した。
実装が完了し、練習用のコースへ生延氣を置く。
いい感じで首を振っている。後ろから指で生延氣を押してみてコーナーへ向かわせてみたところ、自然な形で曲がることができた。
次は、走行するように実装し直し練習用のコースへ。
スムースにコースをまわり始めた。そして、とうとう念願の「スムースにコースを1周する」という課題をクリアーしたのであった。
集まりの後にソースをシンプルにしたところ、30〜40秒走行を続けると「ビー」という音と共にプログラムの制御が利かなくなるという問題も消えた。
しかし、その原因はまだわかっていないので調査が必要である。ただ、時間制限なくコースをまわり続けることができるようになったことを今は喜びたいと思う。