電通大杯 第6回マイコンカーラリー計測&集計システム開発記

中村祐一君(電子機械工学科3年)が、昨年度のゲートをバージョンアップし、自動計測したデータを一括管理するシステムを開発しました。リアルタイムでタイム集計ができ、会場のモニターに順位を表示し、参加者からも高い評価をいただくことができました。

開発レポート

中村祐一君(電子機械工学科3年)


2012年の開発経緯

今大会で私は、電通大杯実行員会の計測担当として大会の運営に携わりました。

マイコンカーの計測に使用する計測機器(通称 ゲート)と、その計測データを一括管理するシステム、電通大杯MCRタイム集計システムを昨年より計測担当として開発してきました。昨年の大会ではトラブルにより使用できず、とても悔しい思いをしましたが、今年はそのトラブルを解決して、新たな機能を取り入れました。

タイム集計システムを開発しようとしたのは、昨年の電通大杯を開催すると決まった時に、「せっかく大会を開くなら、何処にも負けない何かを大会に取り入れたい。」と、考えたのがそもそものきっかけでした。

そこで考えたのが、電通大杯の大会運営システムです。そのシステムは電通大杯のすべてを一括して運営するシステムで、大会スタッフの人員を減らす事を目的として考えていました。しかし、1週間考えた結果、大会の日までには絶対に間に合わない事がわかり、計測タイムをゲートより収集するタイム集計システムを開発することにしました。

収集の仕方は、全体を

  • 【ゲート】マイコンカーの走行開始の指示を出し、時間をカウントする
  • 【タイマーコンピュータ】走行中のタイムをリアルタイムに表示する
  • 【集計コンピュータ】計測結果を受信、集計してゲートや出場選手の名前を、タイマーコンピュータに送信する

の3つで構成して作ることとしました。

タイマーコンピュータと集計コンピュータをつなげるために、私が所属している、レスコンプロジェクトでCIMIと呼ばれるネットワークシステムのソケット通信ライブラリを、テストも兼ねて使用しました。CIMIについては別のレポートを参照してください。

ゲートはAtmelのATmega168pを使用しており、AVRstudioよりプログラムを作成し、タイマーコンピュータソフトは Microsoft Directx 9.0 c june2008 ライブラリとWin32APIを用いて作成し、集計コンピュータソフトはVC++(MFC)のアプリケーションフレームワークを用いて作成しました。

この構成で2ヶ月以上かけて開発したのですが、昨年の残念な結果に終わりました。タイマーコンピュータソフトと、集計コンピュータソフトはしっかり動いていました(あとから見直したら、バグがありました。)が、ゲートのプログラムと回路に重大な問題があり大会で使用できなくなりました。詳しくは去年の大会のレポートを参照してください。

2013年の開発〜バグ取り

2012年の悔しさをバネに、今年の大会では様々なバグを取り除きました。

ゲートの電源は、3端子レギュレータで降圧していたために回路が発熱していたので、DC-DCコンバータに変更しました。また、私が勘違いしていたゲートの動作を修正しました。

タイマーコンピュータソフトについては、不必要に高解像度な画像を使用していたために、メモリの消費が膨大になっていたので、画像の解像度を下げるのと、画像の読み込み中はウインドの処理を行っておらず、カーソルをクリックするとフリーズしていたので、画像読み込み専用のスレッド(タスク)を新たに生成することで回避(他のやり方がわからなかったので……)することとしました。

さらに、DirectX SDKで読み込んだテクスチャーなどのメモリ管理や、代用できる変数などを使用して少ない変数でソフトを構成する事などを、徹底して行い、今まで5時間以上連続稼働していた時に発生していたメモリエラーによるコンピュータの再起動がなくなりました。

集計コンピュータソフトについては、名前の入力に半角スペースが入ると読み込まないバグを解決しました。

2013年の開発〜新機能追加

そして、以下のような新たな機能を盛り込みました。

ゲートにゲート開閉時のディジタルサーボ角度の修正・保存機能と、ゲートの閉じる速度の変更・保存機能を追加しました。それに伴いAtmega168pからフラッシュメモリ容量が増えたAtmega328pのマイコンに変更しました。さらに,ゲートの素材を木製の素材にしてもらい、丈夫になりました。

タイマーコンピュータソフトは、ゲートとの通信に使用しているシリアルポート通信ポートの自動検知機能により、シリアルポートの変更いらずで変更ができるようになり、ゲートオープンと走行中とゴールのBGM再生機能(大会中では著作権とかの関係で使えませんでした)を追加しました。

集計コンピュータについては、ゴールした時のタイムに問題があった時に使用するタイム修正機能、スタートの合図を送る時に使用するwiiリモコンでのゲート操作機能を追加しました。 「WiiYourself!」 と呼ばれるライブラリを使用しています。

集計コンピュータソフトより集計した順位を、別のコンピュータで表示できるようにランキング表を自動生成する、新たなソフトウェアを追加しました。これは、集計コンピュータソフトと同じコンピュータ上で起動するソフトウェアです。集計コンピュータの集計ソフトに追加しなかった理由は、時間が少なかった事と、安定したソフトに不安定な機能を追加したときに発生するバグを回避するためと、さらに、別のコンピュータ上に保存することを目的としていますので、切断された時のエラーを回避するために、別のソフトにしました。ソフトウェア同士の通信はメールスロットと呼ばれるプロセス間通信を用いています。

今後は、これらを一つのソフトウェアにまとめたいと考えています。

生成された順位データはHTMLデータなので、ブラウザ上で閲覧が可能であり、ファイル監視ソフトをインストールすれば、一定時間ごとに自動的にWEBサーバに保存することができると思います。

さらに、順位データのレイアウトは、ランキング生成ソフトのあるフォルダのあたりにテンプレートの、HTMLとCSSファイルを書き換えることでレイアウトを変更することが、可能となっております。この方法は私が高校時代にVBで制作したことがあったので、容易にすることができました。

他にも細かい修正や追加を行い調整をおこないました。

大会での運用結果

電通大杯で使用した結果、今までの試走会で行ったゲートのデバッグが何とか報われ、完璧とはいきませんでしたが、タイム計測とランキングの自動表示ができました。

大会の日に見つかった問題は、ゲートのスタート準備を集計コンピュータより指令を出して、出走者の名前を送信するのですが、たまに送信できていないバグや、清掃用のシリコンシートが貼っているコロコロをゲートの近くに持っていくと静電気によりゲートが誤動作する現象がありました。これは、大会の前々日に見つかった現象で、金属フレーム部分のフレームアースと、長すぎるケーブルを短くすることで低減しました。

また、順位表示に至っては、CSSファイルのテンプレートのミスにより、名前が苗字しか表示しない状態となりました。この問題は、最後の表彰式の時に修正しました。

さらに、1位と2位の順位が入れ替わっている状態がありました。他の方からの指摘によりわかったことで、直ちに変更しました。これは、コースアウトしてゴールした場合、そのゴールしたタイムは順位として反映される仕様で、逐一そのタイムを変更するのですが、変更するタイムを間違えて1走目のタイムを消去したために起こった問題です。気を悪くされた方々、申し訳ございません。

今回の大会での使用したことによりシステム全体の問題が多く使いづらいことが分かりましたので、更なる改良を加えた後にマニュアルを制作をする予定です。

最後に、今回の大会を通じて計測システムは、昨年に比べて格段に良くなり、何より最初から最後まで動作したことがよかったです。今後はこのシステムを誰でも使用できるようにバグの修正と使いやすさの向上を図ることを考えています。

スナップ