Update in Dec 25: Update code structure in HTML, update Japanese, add English descriptions.

序論 Introduction

After RoboCupJunior's rule has updated in 2017, teams in Open league need to adopt passive ball rule. Nevertheless, teams in Light Weight League uses conventional IR active ball for the game.

This article introduces sensing method for IR active ball that my previous team "Gcraud" developed. This method is actually well-known, and commonly used by a lot of teams in all over the world, but there are no resources to explain its principles and implementations. So this time, I made up my mind to write this article on online.

For readers who read this article in English,
I am not a native English speaker so some of sentences may doesn't make sense, but if you find some wrong or something you can't make out, please feel free to comment to this article. Finally I hope this article helps other team in somehow, thank you.

本記事では、RoboCupJunior(以下RCJ)サッカーリーグの公式球として使われている赤外線パルスボールのセンシング方法について紹介します。

現在サッカーオープンリーグでは、公式球がオレンジ色のパッシブボールへ変更となりましたが、それ以外のサッカーリーグでは依然このボールが使用されています。 本記事の内容が、IRボールを使うリーグに参加するチームの参考になればと思います。

以下で紹介するセンシング方法は、私がチームとして活動していた時に当時の先輩から引き継いだ技術をベースとして、様々な改良が加えられたものです。 特にパルスの同時読み込みの技術は、当時のロボットの性能を大幅に向上させました。 この記事を書くにあたって、まずはTeam Gcraudの先輩方に敬意と感謝を申し上げます。

前提知識の理解 Understanding Backgrounds

IMG_0108
Figure1 IR Ball Sensor Hardware for the Test

The hardware for this test is shown in Figure 1. This IR sensor was used for "Rosso 6", an offensive robot of the team "M Robots". I borrow this sensor for the test. Thank you very for your help @kemarin-tech!

図1はRosso Version 6(M Robotsの赤い方)のIRボールセンサです。 今回実験のためにお借りしました。 Yunitシリーズのボールセンサとは、マイコンとセンサ数以外の設計が完全に同一です。

  • IR reciever Vishay TSSP58038
  • Microcontroller Atmel ATmega328P-PU
  • Firmware Arduino

パルスセンサの選定 Selection of Pulse Sensor

In terms of designing entire sensor system, it is particularly important how you choose IR pulse sensor. I assume most of teams uses a proven sensor, such as one that well-known team have used so far.
Actually it is not needed that understanding detail of technical information of each individual IR pulse sensor. However, those explanation below could be helpful information to improve you sensor's capability.

ボールセンサを設計する上でまず重要である、センサ素子の選定の考え方について紹介します。
恐らく、RCJに参加するチームは既に実例があるセンサを使い回す事ががほとんどだと思います。 以下で説明することは、完全に理解する必要があるとは思いませんが、選定にあたってどのような観点が存在するのかは知っておいても良いと思います。

There is a tips for participants about how you sense IR ball with IR pulse sensor in Soccer rules (2017) - RoboCupJunior page 21. According to the tips, you can use specific IR remote control receiver to detect the ball and measure angle & distance. Also, those three sensors below are introduced as example.

Soccer rules (2017) - RoboCupJunior の21ページ“APPENDIX I: Technical Specification for pulsed Soccer Ball”には 汎用的な赤外線信号受信モジュールを使ってON/OFFの時間から距離を割り出したりすることができる」みたいな説明があります。 その汎用的な赤外線信号受信モジュールとして、以下の3つのセンサが例として紹介されています。

  1. Vishay TSOP1140
  2. Vishay TSOP31140
  3. SHARP GP1UX511QS

It is said that IR remote control receiver can be used for IR bass sensing. But we found that IR pulse sensor for remote control is not suit for the ball detection and there are some better selections. The next section will explain how you choose good sensor for ball detection.

要するに、これと同じようなセンサを使う事で、パルス幅による距離検出ができるという事です。 しかし実際には、パルス幅を使った距離検出を行うためにあたって、いくつか注意すべき点があります。 ルールに書かれているセンサのうち、SHARPのGP1UX511QSについては正直よく分かりませんでしたので、今回はデータシートの情報が豊富なVishayのセンサを見てみます。

センサアプリケーション Sensor Application

Suppliers design each sensor product depending on each application which generally refers "what to use". User can find specific sensor for their needs by classifying application of sensor products.

You can see the Application Guide from Vishay's document library. This time, let's focus on those two application in terms of composing IR ball sensor.

センサアプリケーションとは、いわゆる「センサの用途」のことです。 ユーザーはそれを見ることで、そのセンサがどんな目的で使われるかがわかります。 VishayのIRセンサ製品の主なアプリケーションのうち、RCJ IRボールのセンシングに使えそうなアプリケーションとして、今回は以下の2つに着目します。

  1. Remote control:遠隔操作(テレビやラジコン玩具などのリモコン受信)
  2. Presence/Proximity sensors:存在/接近検出(ラインセンサのような反射検出)
アプリケーション比較
Figure2 Comparison of sensor application

So let's compare those two sensors. As you can see in Figure2, the opponent object is different depending on sensor applications.

The Remote Control Application detects pulse width(time duration). On the one hand, Presence Application detect a modulated light itself (output if light is existing or not). You should notice that those two applications are quite different thus the characteristic of sensors are also different.

  1. Remote Control : Detect pulse signal from transceiver
  2. Presence Sensor : Detect modulated light itself

In terms of remote control, sensor should detect the signal that transmitter emits without influenced by decay on the path. As home electronics does, IR remote control should be stable in any distant, and sensor changes its gain in order to detect pulse width with appropriate gain. However, this function affects bad for IR ball sensing, especially in case of when the ball is distant position.

On the other hand, presence sensor detect light existence itself with fixed gain. Therefore, decay through light path affects sensor's output. Generally it is not good characteristic for remote control but it works quite good in terms of IR ball sensing. An IR sensor for presence won't change its internal sensor gain in any time, and this actually enable distance calculation from sensor's pulse width. (Generally you can't detect distance from only with pulse width though IR ball's pulse characteristics allow this, see IR ball pulse specification to understand this).

For the above reasons, it is recommended that using IR pulse sensor which assumed to use for "Presence" application. Actually you can use sensors introduced on RCJ's official rule such as TSOP1140 or TSOP31140 but it is not suit for distance detection.

2つのアプリケーションを比較してみます。 左のRemote control application(遠隔操作アプリケーション)は (IR) transmitter(送信機:RCJでは赤外線ボールがこれに該当)とIR receiver(センサ)を用いて送受信が行われる事がわかります。 一方、Presence sensingの図はラインセンサと同じような構成をしており、変調された光を壁に照射して反射してきた光を検出するような動作をする事がわかります。 すなわち、どちらのセンサも変調された赤外線信号を受信するセンサである事に変わりはありませんが、検出したい対象が異なるという事がわかります。

  1. 遠隔操作:出力されたパルス信号をその形のまま受け取りたい
  2. 物体検出:受信したパルス信号の強さを知りたい

遠隔操作アプリケーションにおいては、センサ側は発行側で照射されたパルス信号の時間幅を正確に受信できる性能が求められます。 例えば家電のリモートコントロールをイメージすると分かるように、赤外線リモコンはいかなる距離であっても、同じ情報を伝達できる事が求めれます。 しかしながら、この「いかなる距離であっても同じ特性を出そうとする」特性は、距離検出を行う必要があるRCJボール検出においては、検出の妨げになります。

一方で、物体検出アプリケーションにおいては、照射された光の絶対的な強度を測定することで、そこに物体があるかどうかを判別する想定でセンサが設計されています。 これはすなわち、発光側の強度が変化したり、あるいは距離により赤外線の強度が減衰した場合には、それも検出される事を意味します。 RCJボールの距離検出においては、この特性が非常に有利に働きます。

従って、RCJにおいては物体検出のセンサを用いるべきです。 つまり、ルールで紹介されているTSOP1140やSOP31140は、受信したパルス信号の強さを知りたい場合には、使えないことは無いが最適では無いという事になります。

ブロックダイアグラム Block diagram

Block diagram(ブロックダイアグラム)はセンサICの内部設計を簡易的に示したものです。 だいたいのIC(集積回路)のデータシートにはこれが書かれています。 ユーザーはこの図を見る事で、細かい説明文を読まなくてもICの機能を理解することができます。

センサ比較
Fugure3 Block diagram of each Proximity and Remote IR sensor

Most of IC's datasheet show block diagram for less detailed descriptions. You can make sense how sensor work with it to a certain extent. So let's compare those two sensors in Figure3, particularly having a AGC or not.

先ほどの図と同じ構成で、今度はブロックダイアグラムを比較してみます。 細部が微妙に異なることがわかりますが、主に重要なのは“AGC:Automatic Gain Control”というシステムです。

上の図で比較した2つのセンサを見てみると、左のTSOPシリーズにはAGCが搭載されていますが、右のTSSPシリーズには搭載されていない事が分かります。 赤外線ボールのセンシングにおいては、このAGCの有無が大きく関わってきます。

AGCとは何か? What is AGC?

Vishay's technical document Choosing an Infrared Receiver Based on AGC Type explain that what is AGC and how it works. According to this document, the automatic gain control (AGC) circuitry is equipped for the IR sensor for remote control application.

It is important to notice that IR ball emits pulse signal not for a short time but continuously. Therefore, the AGC classifies IR ball's signal as noise thus AGC's feedback always militate negative. This principle results that the robot can't detect the ball in far.

If your IR ball sensor doesn't work, specifically the sensor can't detect distance appropriately, it might be a result of AGC. The AGC make the feedback negative in most of cases, but as far as I know, there are some cases that the AGC affects to make the feedback positive.

Vishayの技術資料Choosing an Infrared Receiver Based on AGC TypeにAGCの概要とその動作について書かれています。 AGCが何のために付いていて、どんな働きをするかがわかります。 ざっくり読むと、以下のような事が書かれていると思います。

赤外線レシーバーには、データ信号だけを受け取って、他のノイズは受け取らないような能力が必要である。 赤外線レシーバは本気出せばめちゃくちゃ距離を読めるし値段も抑えられるけど、リモコン受信機を作りたいエンジニアにとってはそれは最適ではないだろう。 もしノイズの影響を受けたら、信号が破壊されてエラーが発生するから、それに伴って信号を繰り返したりしないといけなくなって、設計者は苦労する事になるだろう。 赤外線のノイズとしては白熱灯、ハロゲン、ネオン、蛍光灯、コンパクト蛍光灯の放射、さらには液晶ディスプレイ及びプラズマディスプレイ、日光の影響も考えられる。 そこで、IR受信モジュールは受信信号を受け取る利得(感度みたいなもの)をコントロールするためのフィードバック回路が組まれている。 これは、ノイズが検出された時にセンサの感度を下げ、データが正常に受信されているときには利得を上げる動作をする。

このAGCが搭載されたセンサは、テレビのリモコンなどから発せられる、一瞬のシグナルを正確に検出できるように調整されています。 赤外線ボールから発せられる信号は、テレビのリモコンなどと比較するとはるかに強い・かつ連続したノイズのように見えます。

従って、信号用のAGCが搭載されたセンサで赤外線ボールを見ると、ほとんどの場合でゲインを下げる方向に制御が働きます。 ボールを隠してもう一度戻すと検出ができたりするのは、このAGCの働きに由来するものです。

また、当然ですがAGCが搭載されたセンサは、受信する赤外線の強さによってゲインの強弱が変化します。 従って、AGCが組まれたセンサを使うと、ルールブックに書かれているような「ON/OFFの時間から距離を割り出す」という事ができなくなります。 ゲインが常に変化する上、その状態を知る手段が無いからです。

結論としては、RCJrの赤外線ボールのセンシングにはAGCが搭載されていないセンサを使うべきです。 ルールで紹介されているTSOP1140/TSOP31140は、AGCにより常にゲインが変更されるため、受信したパルスから距離を検出するという事ができなくなります。

センサの設計 Designing Ball Sensor

ボールセンサの設計 Designing Ball Sensor

IRセンサ
Figure5 Sensor screen (from Yunit3 Hefei 2015 Model)

As you can see in Figure5, entire sensor shape is round and each sensor are arranged with every 30 degrees interval. Additionally, all 12 sensor windows has completely same dimension. This design enable vector-reading method which will be introduced in the latest section. (By the way, it is actually possible to calculate direction of ball even if each pulse sensor aren't aligned at regular interval, though, this round design make the detection much easier).

円形のIRボールセンサは、どの方向に対しても同じ計算が適用できるという特徴を持ちます。 以降で説明するベクトル計算や反応センサ数での距離割り出し手法は、この特性を利用したものになります。 私は、Gcraud Nanoの白いロボットで始めて円形のセンサを採用してから、以降はずっと円形センサの設計を使い回しています。

ただし、ベクトル計算の手法においては、センサの幾何学的配置が必ずしも円形複写配置である必要はなく、センサの位置を考慮した計算にする事も可能です。 これについては、Nitroのゆーきさんが詳細な記事を書かれていたと思います。

遮蔽 Sensor Screen

In the last section, it was introduced that choosing appropriate sensor allow you to measure distance to IR ball from pulse width. But you may need to know direction of ball as well, but how you know ball direction with ball sensor?

Generally, you can detect direction by sorting multiple sensors radial, and estimate direction of IR ball by measuring pulse width of each IR sensor. And then directivity of sensor is a key.

前項で、適切な赤外線センサを選ぶことでボールとの距離検出が可能だと書きました。 しかし、ボール検出をするためには距離情報だけでなく角度情報も必要です。 角度情報を得る方法として一般的なのは、複数のセンサを異なる方向に配置して、それぞれのセンサの指向性を利用してボールの方向を判別する方法です。 ここで重要になるのが、センサの指向性(Directivity)です。

指向性比較
FIgure6 Comapasion of sensor directivity

You may know that the directivity are different on each sensors. My ball sensor is consisted of TSSP58038 which has quite low directivity. So if you use this sensor without cover screen, every sensor detects the ball's IR light thus you may suffer to know ball direction.

By using sensor screen, you can change directivity of each IR sensor by narrowing or opening each window. Then you should find appropriate window size with some experiments. In my case, I designed several sensor screens for TSSP58038 with several different material or shapes.

指向性はセンサによって特徴が異なる事がわかると思います。 左側のTSSP58038は指向性が低いため、側面や後ろ側の光も読むことがわかります。 一方、右のPL-IRM−A2121は指向性が高いため、そのままの状態でも方向検出に十分に使用可能です。

実際にA2121を使った事がありますが、ほぼセンサーカバーなしでもボールの方向検出が可能でした ただし、AGC搭載であるため距離検出の精度は低く、時間経過とともに出力するパルスが変化するため距離の把握がほぼ不可能でした。 指向性が低いセンサを使う際には、センサーカバー(最初の写真でいう黒い部分)を使って指向性を高める必要があります。

この指向性をどれ位にすれば良いかを厳密に検討するのは難しいですが、私は「ボールの最大検出距離が下がらない範囲で一番絞る」のを狙って設計しました。 詳細な検討には、何種類か形状をテストする必要があると思います。

読み込み回路 Circuit

Circuit of IR sensor is very simple. Basically you can read pulse from pulse sensor just by connection each pins to microcontroller's digital input pins.

If anything, you shuld note that TSSP58038 work with 5V but some of microcontrollers onlo approve 3.3V input for maximum. Then you can use diode clamp circuit of 5V-tolerance pins of microcontroller.

さすがにマイコンのデジタルピンで読み込むだけなので、ここは端折ります。 冒頭でSTM32(3.3V駆動)でTSSP58038(5V信号)を読み込んでいると書きましたが、デジタルピンの5Vトレラント機能を使って直接接続の回路になってます。

もし電圧を制限する必要があるのであれば、センサの出力信号が内部プルアップされていると思うので、外部に信号GND間抵抗を入れれば出力電圧にリミットをかける事ができると思います。 逆に、間違えて付けた外部プルダウン抵抗でHレベルが取れなくなる、という不具合も見たことがあります。 こちらも注意が必要ですね。

ソフトウェア Software

In this section, you will find that how you read pulse width data from multiple pulse sensors, and how you know direction of ball from those datas.

センシングにあたっては、これら複数のパルスセンサの出力を読み取り、それぞれのパルス幅からボールの位置を計算する事になります。 そこで、まずデジタルパルスの読み込み方法について紹介します。

IRセンサパルスの読み込み Reading Process of Multiple Pulse Sensors

It is assumed that more than one sensor will be equipped on the ball sensor. There are several way to read multiple pulse width with microcontroller. This article introduce "One by one reading" and "Simultaneous reading" methods.

Note that this ball sensor substitute Port Registers for digiralRead. This aims to compensate Arduino's lack of processing speed. If you use some other microcontroller which has high processing speed, you won't need to concern about this issue.

ボールセンサに搭載されるパルスセンサの数は、少ないもので数個、多いもので数十個に渡ります。 複数のセンサのパルスを読み込む実装には、いくつか方法がありますが、大きく分けて精度重視で配分するか速度重視で配分するかの2つの方法が存在します。 本セクションでは、それぞれの読み込み処理の原理と、実際の実装方法について紹介します。

本記事でテストしたボールセンサは、Arduinoのポート操作を使って読み込み速度を向上させています。 詳しくはArduinoのPort Registersを参考にしてください。

figure1
Figure7 One-by-one Reading Method

In one-by-one reading method, the program read pulse duration with a combination of digital input and interval process or built-in function such as pulseIn() in Arduino. Once first pulse width reading finished, the process move to next sensor and repeat pulse reading again. And it finishes when pulse reading on final sensor has finished.

Figure 7 shows how one-by-one reading works. Notice that this process in Figure 7 postulate pulse duration reading will be implemented by digital read and interval process.

In this method, the sampling rate is same as program loop interval so this realizes quite high samplings for pulse width measuring. However, this process requires every pulse width and its multiplier with number of sensors (few hundred milliseconds times N approx). This may be a problem because it will make the robot's response worse.

パルス読み込みを1つのピンごとに個別に行う方法をOne-by-one Readingと呼ぶことにします。 図7に示すように、プログラムは一番最初のセンサから順番に、デジタル読み込み+繰り返し処理、あるいはArduinoのpulseIn()関数を使うなどして、パルスの幅をカウントする処理を行います。 図の例では、プログラムは1パルスの間に13回読み込みを行い、そのうち何回Hが入力されたかカウントしてパルス幅を計算します。 実際にはプログラムの周期はもっと早いので、およそ数百回から数千回くらい読み込みが行われます。 ※実際のパルスセンサとは論理が逆(実際のセンサは赤外線を受光すると出力がLOW)なので注意して下さい。

Arduinoであれば、pulseIn()という関数を使ってパルス入力をし、それをセンサの数だけ繰り返すような実装がこれに当たります。 この方法では、パルス幅の測定は細かいサンプリングで行えますが、(センサの数×パルス幅)の分だけ時間がかかります。 ロボットにおいては、センサの個数が増えるほどセンサのサンプリングレートが下がるため、レスポンスの低下が懸念されます。

pulseIn関数を使う場合、833[us]周期のパルスにトリガをかける(図で言うとSensor output signalが0→1になる瞬間を検出する)まで、1周期の間待機する必要があるものとすると、 この時点で、最小0〜最大833[us]の待機時間が発生します。

目安として、平均の待機時間を0.5[ms]とし、トリガがかかってからの読み取りには最大で833 - 346[us] ≒ 0.5[ms]とすると、 1つのセンサの読み込みにかかる時間は、平均の待機時間0.5[ms] + 読み取り時間0.5[ms] = 1[ms]となります。 12個のセンサで読み込むのにかかる時間は、1[ms/1センサ] × 12[センサ] = 12[ms]となります。

実際にArduinoで実験した読み込み速度を元に、読み込み以外の処理に5[ms]である事を考慮すると、1回の読み込みにかかる時間はおよそ(0.017[s])^-1 ≒ 59[Hz]となります。 この周期はそれなりに早い周期に見えますが、RoboCupJuniorのロボットにとっては、59Hzはロボットにとってはかなり遅いサンプリング周期です。 センサを増やすなどして、読み込み以外の処理が増えたりした場合には、結構目に見える形でレスポンスが落ちていくのが分かるでしょう。

figure2
Figure8 Simultaneous Reading Method

もう一つの読み込み方法として、読み込みの速度を向上させるために、全てのセンサにサンプリングを振り分けて同時に読み込む方法があります。 この方法では、全てのセンサを833[us](およそ1000分の1秒)以内に読み込むことができます。 読み込み以外の処理を先ほどと同じ5msで計算すると、全体で約6ms、読み取り周期は約166[Hz]まで向上します。

その代わり、センサの読み取りの解像度は、センサの数に反比例します。 つまりセンサの数が増えるほど、パルス幅の測定精度が悪くなります。

しかし実際には、赤外線ボールから発せられるパルスの強さが4段階しか無いため、パルス幅の測定精度はそこまで上げる必要がありません。 読み取り周期を上げてレスポンスを向上させたほうが、RoboCupJuniorにおいては有利になると思います。

個人的には、同時読みしつつ精度はマイコンのスペックで稼ぐ実装方法をお勧めします。 TSSP58038を16個と、ある程度クロックの出るARMマイコンの構成に落ち着いているのは、そういう経緯があります。

パルス幅データからボールの位置を計算する

GitHubリポジトリ(y6tada/RCJr_IRball)にプログラムを公開しました。

ハードウェアに依存するパラメータを以下に示します。

Constant
  • #define IR_NUM 12
    Number of pulse sensors
Functions
  • bool getSensorPin(uint8_t pin)
    Return digital read result from index(0~11)
Variable
  • const uint8_t SensorPins[IR_NUM]
    正面を0として時計回り11までのセンサ番号
  • const float     unitVectorX[IR_NUM]
  • const float     unitVectorY[IR_NUM] 12個のセンサの向いている方向のcos, sinの単位ベクトルが格納された配列
  • const float     deltaPulseWidth パルス幅を加算していく際の1回読み込みあたりの加算量 必要に応じて変更

C言語の実装に関する内容はセンサの処理とは別の技術なのでここでは扱いません。 構造体やポインタなど、少し難しい書き方もありますが、基本的なC言語の実装で書かれていると思われるので、良ければ読んでください。

ここで公開しているプログラムはあくまで参考です。 先程のパルス読み込みの処理フローを理解して、同じものを自分なりの方法で実装すれば同じ機能が実装できます。 同時読みの原理さえ理解できれば、あとは普通のベクトル計算とその計算過程の管理だけです。

距離角度計算手法の比較テスト Testing of Each Reading Method


Movie1 Ball Tracking Test with Each Reading Method

実験プログラムを動作させて、実際にボールの軌道をトラッキングしてみました。
ボールの追跡方法は、以下の3つの組み合わせとしました。

  1. 一番強い反応を示したセンサの方向をボールの方向とし、 そのセンサのパルス幅をボールとの距離とする
  2. 一番強い反応を示したセンサの方向をボールの方向とし、 円形に並べたセンサのうち反応した個数を距離とする
  3. ベクトル計算

結果は次のようになりました。

graph3 Fugire9 Result of ball position detection calculation with method 1

変数:maxSensorNumber は、最大のパルス幅を示したセンサの番号(12方位)で、これをボールの方向として計算しています。 つまり、ボールセンサの数が12個であるため、12段階でしか角度を検出できないことになります。 ただ、実際12段階あれば競技には十分だったりもします。

変数:maxPulseWidth は、最大のパルス幅がいくつであったかを示しています。 この方法では、最大のパルス幅が大きければボールが近いというような計算を行っています。
しかし、グラフと動画の実際のボールの動きを照らし合わせてみてみると、角度は正しいものの距離がほとんど判別できていないことがわかります。 パルス幅に含まれているノイズ成分が大きいため、このままでは実用には値しません。

この方法をうまく使う事は難しいでしょう。 これの代わりとして、円形センサの特性を利用した距離判別方法があります。

graph2
Figure10 Result of ball position detection calculation with method 2

変数:activeSneosrs は、パルス幅が0以上を示すパルスセンサの数を示しています。 ボールが近づいていくに連れて数が増えていき、ロボットのすぐ近くでは、遮蔽していても反射などで真後ろまで光が届くため、12個全部のセンサが反応する事があります。

この方法は、私がHefei世界大会マシンまで実際に使っていた方法です。 円形センサの大きな特徴として、この「反応個数で距離が割り出せる」事が挙げられます。 先程のセンシング方法と比較すると、動画の挙動と同じような、遠くから近くへと回ってくる軌跡を、きちんと追跡できていることがわかります。 円形配置でかつ遮蔽がきちんとできているセンサであれば、この反応個数をカウントする方法で距離を割り出すことができます。

では最後に、より高度なセンシング方法としてベクトル計算を紹介します。 本当は数学的な解説もしたいのですが、余裕が無いのでごめんなさい。

graph1
Figure11 Result of ball position detection calculation with method 3

12個のセンサの反応をベクトル合成した軌跡を示したものです。 詳細はプログラムを参照して下さい。

方法1と2と比較すると、角度の検出精度が大幅に上がっていることがわかります。 距離についてはかなり誤差が大きくあまり当てにならない部分がありますが、角度に関しては今まで見えていなかった細かい挙動まで正確に追跡できています。 また距離についても、ベクトルの長さがボールとの距離に対応しているのが分かります。

ロボットを関数制御したいのであれば、この方法を用いて高解像度の角度情報を取得すると、うまくいくと思います。 また、オープンリーグはカメラを使う事でこれと似たような高い精度のボールの位置情報を得られるため、今後はボールの位置情報から回り込みを決定するまでの部分の技術が進歩していく可能性はありますね。

さいごに

現役引退した後もJuniorのロボットを作り続けて後輩にリファレンスとして見せる、という方もいらっしゃるようですが、私はこうしてインターネットで情報公開した方が今後の為になる気がしたので、こういう事を続けています。 モノで示すのも悪くないのですが、現役でないと色々やりづらい部分もありますね。

記事の内容に関しては、本来であれば数式等を使って解析の議論をするべきだったのですが、本記事はあくまで「こう実装したらこう動いた」を紹介するにとどめたいと思います。 まあ本人があまり余裕無い所為なんですけどね…残念。

という訳で最後のほうがかなり手抜きになってしまいましたが、これで今までの赤外線ボールセンサの検出の技術は全公開になりました。 質問を頂ければ、それを参考に記事をバージョンアップする事はお約束します(個別の返信もなるべくします)ので、今後もコメント等よろしくお願いします。

そういえば周りが受験生に化け始めてビビってますが私も一応受験生です。 あと1年、ロボカップの活動とも両立しながら頑張っていこうと思います。 皆さま今後もどうぞよろしくm(_ _)m