ひぐち(@hgsyo76bot)です.
 
 世界大会の他のチームのことについて書こうとしていたのですが,いつの間にか世界大会機作成を通して思ったことを書いていました,ご覧ください↓↓↓



 世界大会から,もう2週間以上経過してしまいました...

 このツイートに「いいね」くれた人は,「書いてくれ」って意味なのか「超今更だから書かなくていいよ」なのか,どっちなんですかね???

 どちらにせよ,昔,世界大会に行った人のレポートを心待ちにしていた自分がいたので,そんな人のためになればと思いながら書き始めようと思います.

 はやく書かないとハジメの北九州レポートが先になってしまうε=ε=(;´Д`)

 色々書きたいことがあるのですが,全部書いたらまとまりがなくなりそうです...

 恐らくそうなりますがご了承ください...

各自の担当と日頃の活動

 よく各自の担当を聞かれるので説明しておこうと思います.
 今回,僕は回路とディフェンスのプログラムを担当していました.

まちゃみ(machami1913247):メカニック設計,メカニック製作
あんばら(@ISM__M):回路設計,回路製作
ひぐち(@hgsyo76bot):回路設計,ディフェンスロボットのプログラム
ハジメ(@hajime_rcj):オフェンスロボットのプログラム

 こんな感じです.僕は去年まで「nncbot」として活動していたのですが,今年から(流れで?)INPUTに入ることになり一緒に活動させてもらっていて,気づいたら,回路設計,ディフェンスロボットのプログラムをやっていました.

 回路設計はあんばらと僕で半々くらいでやっていて,予備部品の製作や配線は全部あんばらが担当しています.なので大会時の回路周辺のメンテナンスはあんばらが担当しています.

 プログラムは,確か僕がINPUTに入る前の去年のせとうちオープンの時に,ハジメが「おれオフェンスやりたいから,ひぐちディフェンスやって」みたいなことを言われてからずっとこの体制でやってます.プログラムは,ベースとなる部分(モータの出力計算とかその他もろもろ)は以前からハジメが書いてるものを流用し,オフェンス,ディフェンスで各自で調整していきます.オフェンスは「ディフェンスがいてもたくさん点を入れる」,ディフェンスは「絶対に点を入れさせないディフェンス」を目標にオフェンス,ディフェンスで戦わせて調整を続けてきました.
こんな感じです.大会時は僕とハジメが各自のプログラムを担当し,試合ごとに修正点を見つけて調整を行っています.

 恐らく一番大変なのはまちゃみです.大会ごとにメカニックの設計,製作を一人で行っていました.メカニックの設計,製作はどれよりも先に完成させる必要があり,またそのため,修正箇所も多いのでまちゃみは大変そうでした.大会時のメカニックのメンテナンスは全てまちゃみが担当しています.

 世界大会後の新聞の取材の受け答えの時に気づいたのですが,4人で役割分担してロボットを作ってきましたが,実際には各自でやることはそこまで細かく決めて無いような気がします.でも,各自が自分のやるべきことを分かっていて,各自の役割に責任をもって,たんたんとこなすことができた,ということが良かったんじゃないかとおもいます.

ディフェンスロボットについて(主に自己位置推定)

 ここでディフェンスロボットについてか,世界大会の他のチームについて書くか迷いどころですが,両方書くと内容がごちゃごちゃになるし,後者を書くとすごく長くなりそうなので,ディフェンスロボットについて書こうと思います.

 世界大会ではオフェンスロボットが強くてディフェンスロボットの出番があまり無く,ディフェンスロボットについては皆さんあまり興味ないかもしれませんが,一応書こうと思います...(正直オフェンス,ディフェンスの両方に言えることだと思いますが,プログラムは皆さんが思っているほど複雑ではありませんのでハードルを下げて聞いてください)

 ディフェンスロボットのコンセプトは基本的にゴール前に張り付いていることです.ゴール前にロボットがいるだけで失点率はかなり低くなると思います.

 特に参考にしたのはこの動画です.この動画が出た時からずっと参考にしてきました.

 注目してほしいのは今年も参加していたEMM(青ゴールのほう)です.特にディフェンスロボットに注目してほしいのですがボールがゴールの延長線上にあるときでも,ロボットはゴールの延長線上内にとどまり続けています.こうすることで無駄な動きがなくなるので失点率が低くなるります.

 この動きを実現するにはロボットの自己位置を正確に把握することが重要です.他のロボットがディフェンスロボットの横に位置している場合でも正確な自己位置を推定することを目標にしました.INPUTの世界大会の動画を見ればわかりますが,他のロボットが近くにいる場合でも自己位置を正確に推定できてると思います.
 自己位置の推定の方法としては
  1. カメラを用いて,ゴール又はランドマークを読む方法
  2. 超音波センサ等の距離センサを用いる方法
  3. 光学センサを用いてオプティカルフローで推定する方法
  4. 慣性センサを用いる方法
  5. エンコーダーを用いる方法
  6. モータへの指令値から推定する方法
 このほかにも考えれば推定方法はまだまだ出てきそうですが,こんな感じですかね.
 今回僕が用いた方法は1と2の方法です.

 カメラを用いれば簡単にゴールの位置を把握することができます.そしてゴールの位置が分かれば自己位置を簡単に把握することができます.ディフェンスロボットは基本的にゴール前にいるので,ゴールを見失うことも基本的にありません.Pixyは検出した色の中心座標を出力してくれるので(超簡単),そのX軸の情報を用いれば簡単に自己位置を推定することができます.他のロボットが近くにいたとしてもゴールが隠れることはないので,常に正確な自己位置を推定することができます.コート,ボール,光の当たり具合等の環境が違った場合,ボールとゴール両方を読むのが困難な場合があります.特に試合間のハーフタイムはとても短いのでその間に調整を行うのはかなり困難です.今年のジャパンオープンでもディフェンスロボットはカメラで自己位置を推定していたのですが,色の調整がうまくいかず,変な動きをしていた時がありました.そのため世界大会ではカメラを用いる方法以外にも距離センサを用いる方法のプログラムも作っていました.ロボットについているスイッチを切り替えることでモード変更が可能になっています.実際に世界大会では基本的にカメラで自己位置推定していましたが,色の調整が間に合わず,距離センサを用いる方法も何回か使用しました.

 距離センサの自己位置推定には超音波センサを使用していました.超音波センサはHC-SR04という1個100円くらいの安いやつです.このセンサは指向性がめちゃくちゃ悪いのでお勧めしません.ゴール近くにいるとゴールに干渉して横の壁との距離を正確に測ることができず最悪です.指向性をよくするためにスポンジを付けていましたが,それでもゴールと干渉していました...また,HC-SR04は外れ値が多いので外れ値を除去するプログラムを入れたほうがいいです.突然大きな値が送られてきてロボットが暴走します.また,値が安定しなかったので平均化もしていました.

 個人的にHC-SR04を使うなら赤外線距離センサを使用することをお勧めします.世界大会でも赤外線距離センサを使用しているチームはいくつかありました.ロボットの動きに支障が出ないなら赤外線を出してもOKらしいです.
 
 超音波センサの自己位置推定では両サイドにロボットが位置(又はゴールに干渉)しなければ正確に自己位置を推定できるようにしました.まあ,これはちょっと考えれば簡単に思いつくアルゴリズムだと思います.必要があれば,もう少し詳しく書くのでコメントください.


まとめ

 基本的なことしか書いていませんが参考になれば幸いです.

 次は世界大会で他のチームのことや聞いたことを書こうと思います.