目次
こんにちは。グローバルウェイのビジネスアプリケーション事業本部のMです。
このブログでは、初めて参加したETロボコンの取り組みについて紹介します。
2024年9月15日(日)に開催されたETロボコン2024の東京・北関東地区大会に初参加しました。ETロボコンとは、「ソフトウェアモデリング(設計図)とロボット制御(走行)で競うエンジニア人材育成のロボットコンテスト」です。単なるロボット競技ではなく、「組込みソフトウェア技術教育」をテーマに、ソフトウェアのモデル設計からプログラミングまでをチームで開発しながら、OJTのように学べる機会を提供する大会となっています。
参加チームとしては、新人2チーム+私自身を含むベテラン技術者の2チーム(内1チームは沖縄地区参加)で参加しました。
ETロボコンは、入門スキルのエントリークラスから、基礎スキルのプライマリークラス、応用スキルのアドバンストクラスの3つのクラスがありますが、今回、私たちはプライマリークラスにチャレンジしました。
私たちが組み込み系とは縁がないにもかかわらず、ETロボコンに参加することになった理由は、まさにETロボコンのテーマであるソフトウェア技術教育を通じた新人育成OJTを行うためです。
特に、学ぶ機会が少ないモデリング言語による設計手法を学ぶことは、組み込み系でなくてもソフトウェア開発に役立つ知識を身につけることができるからです。
大会参加へ向けてやってきたことは、おおよそ以下になります。
参加するにあたって、ロボコンにおける規約をしっかり把握する必要があります。かなり細かい規約があり、少しでも規約に反すると、参加できないまたは失格となってしまう可能性があるので、細かくチェックしていきます。
大会の審査は、モデル設計+実機による競技の総合結果で順位が競われるため、モデリング言語による設計も重要になります。UMLやSysMLなどのモデリング言語を利用して設計を行っていきます。初めての人でもどういった設計をしていく必要があるのか、ETロボコン公式の学習コンテンツが用意されているのでしっかり学習していきます。
実機への組み込みソフトウェアは、C++によるプログラミングとなっています。私自身はかなり久しぶりに触ることになりましたが、ETロボコンでは学習コンテンツを通してスケルトンとなるプログラムを作成できるため、これもしっかり学習してきます。
ETロボコンにおけるロボットは、「レゴ® エデュケーション SPIKE™ プライムセット」というLEGOが提供している教育教材とRaspberry Pi4を組み合わせたものとなっています。組み立ては、提供された組み立て図をみながら組み立てていきます。まさにLEGOなので、普段から子供に付き合ってLEGOで遊んでいる私には一番楽しい工程だったかもしれません(笑)
ETロボコンでは、実機+本コースでの試走ができない場合や作成したプログラムの検証用にUnityによって作られたシミュレータ が用意されています。実際の環境に近いかたちで、作成したプログラムでシミュレーション上のロボットを走らせることができます。
また、ソフトウェア開発や設計が未経験者向けの「エントリークラス」というクラスでは、このシミュレータ 上で競うことになります。
実機を実際のコースで走らせるのは2回実施される試走会のほか、個別に販売される実際のコースのレプリカコースを購入(これがお値段高め、、、)して走らせる方法しかありません。シミュレータ 上だけで検証を進めることもできますが、やはりシミュレータ 上でうまく走ってくれていても、実機+実コースで走らせると全然うまくいかないものです。それは、実機のモータの個性だったり、実コースでの環境光だったり、様々な要因で、想定外の動きをしてしまうからです。
実コースで走らせるのは、試走会でぶっつけ本番という選択肢もありますが、作成したプログラムは、ある程度シミュレータ 上で検証したら、実コースで走らせることは必須だと思います。
組み立てる走行体自体はLEGOから提供されている「レゴ® エデュケーション」のSPIKEと呼ばれるものです。元々は小・中学生向けでもあるため、組み立て自体は難しくないのですが、ETロボコンでは、ある程度、決められた組み立て方でないと規約違反になってしまい参加することができません。
ETロボコンから提供される組み立て図を見ながら組み立てをしていくのですが、細かい箇所や組み立て図から読み取れない部分もあり、完成するまでにかなり時間が掛かりました。
とはいえ、最終的に組み立てに問題がないかは、試走会などで車検があり、そこでチェックしてもらえるので安心でした(逆に勝手な組み立て方すると車検NGになってしまいます、、、)。
久しぶりに触れるC++でしたが、ETロボコン提供の学習資料を参考にすればスケルトンとなるプログラムは簡単に作ることができました。そこから徐々に試行錯誤しながら独自に拡張していき、まずはシミュレータ 上で動かしながら作成していきました。
ロボットの走行の基本は、ライントレースと呼ばれるコースに描かれている黒い線に沿うようにロボットを走らせることです。走行体にはカラーセンサが備わっており、カラーセンサから読み取った値を見て、白ならライン方向へ、黒ならラインの外側へ走行体を走らせて進むことでラインに沿って走行させることができます。
※ライントレースのイメージ
一見簡単そうに見えますが、実際に走行させてみると、走行体が左右に大きく動いたり、カーブがうまくいかなかったり、環境光や影で思ったとおりにライントレースができなかったりしました。
特に実機+実コースで走らせたときは、シミュレータ 上とは違う環境になるため、カラーセンサの値をコースに合わせて取得し、プログラムを調整していく必要がありました。
さて、試行錯誤しながら作成した私たちのプログラムですが、シミュレータ 上ではある程度想定通りに動かせるようになりましたが、やはり実機+実コースでは思ったように動かすことができませんでした。特にダブルループという2つの円を走らせるという難所の1つが中々うまくいきませんでした。うまいことダブルループをクリアできても、極端に速度を下げなければならず思ったように走ってくれません。。。
ちなみに今回の参加では、ダブルループ以外の難所攻略は(時間的に)ほぼ諦めており、とりあえずダブルループをクリア目標に定めていました。
そんなこんなで試行錯誤繰り返す中で、にっちもさっちも行ってなかった時、ふと別チームが「C++ではなくPythonでチャレンジしようとしている」というのを聞き、私たちも思い切ってPythonに切り替えることにしました。
というのも、私たちが普段開発に利用するのはPythonが中心ということで、慣れ親しんだ言語でもあったからです。とはいえ、実はこれを決断したのは大会まで1ヶ月を切っている時期だったので、ある意味賭けではありました。大会当日ギリギリまで調整した結果、ダブルループはなんとかクリアできるところまで持っていくことができたのです。
地区大会の結果は残念ながら敗退し、チャンピオンシップ大会には出場できませんでしたが、当初の目標であったダブルループのクリアは達成できました。試走では問題なくても、大会当日の環境でうまくいかない場合があるので、そこは試走時間で調整しつつ、当初思っていた走りをすることができました。
もちろん、大会レギュラー出場の方々からみたら残念な結果ではあったかもしれませんが、組み込み系とは縁がなく、初参加でありながら目標としていた難所をクリアできたことは、チームにとって大きな自信となりました。
次に参加する機会があれば、全ての難所をクリアし、チャンピオンシップ大会への出場を目指したいと思います。
★過去関連記事★
最後までお読みいただきありがとうございました。
グローバルウェイでは沖縄在住エンジニアを積極的に募集しています。是非一度グローバルウェイの求人一覧をご覧ください。
※ビジネスアプリケーション事業本部について詳細が気になる方は、以下のページをぜひご確認ください!