Tagged: SSL-Vision

ロボットにカメラ乗せてみた

この記事は,ssl-zemi 12月(2023/12/17)で発表した内容を編集した物です.

SSL-visionの概要と課題

SSLは天井につけられたカメラの情報をもとに,各チームはロボットへ命令を送ります.天井からの視点であるので,ロボットの位置やボールの位置を検出するのは簡単です.

ssl-vision

しかし,天井の高さやカメラの配置によっては,ロボットによってボールがみえなくなったり,照明状況によりロボットやボールの検出が安定しなかったりすることがあります.

shikaku

また,ネットワークを通って,各チームで利用できるまでに,レイテンシが100 ms(60 fps,6F)程度存在します.そこで,SSL-visonシステムの性能や会場による差による影響を低減するために,ロボットにカメラを載せてみました.

載せてみた

ロボットにRaspberry piとカメラをそのまま載せてしまいます.(モバイルバッテリは開発中のもので,実際には取り外します.)

front

top

カメラ(OV5647)からYUV形式,640*480,90 fpsで画像を取得します.Raspberry pi 4により画像処理行い,検出したボール位置(ロボット座標系)をロボットを制御するマイコン(STM32H7)にUART送信します.
Raspberry pi を画像処理モジュールとして疎な結合とすることで,既存のロボットシステムへの影響を少なく,カメラシステムの載っていない機体とも共存させやすい構成としています.今後のシステムの開発状況,稼働時の安定性などによっては,結合の程度は変わる可能性があります.

ボール検出

YUVの信号は,輝度信号と2つの色差信号から構成されています.この色差信号2つの差を取ることで,オレンジっぽさにより明暗が変化するグレースケール画像を取得することができます.
この画像に対して,いくつか設定した高さで,横方向に走査しながらエッジを検出します.検出されたエッジの中点を結んだ線上を改めて,縦方向に走査しながらエッジを検出し,ボールの中心座標を特定します.この手法はTIGERs MANNHEIMの手法を参考にしています.

疎に探索することにより,高速化をしています.また,非常に並列性を上げやすい手法です.

detect

座標変換

スクリーン座標系のボール位置から,ロボット座標系に変換します.

ロボット座標系->スクリーン座標系

スクリーン座標系からロボット座標系への逆変換を考える前に,ロボット座標系からスクリーン座標への順変換を考えます.

henkan

これは,ロボット座標系->カメラ座標系と,カメラ座標系->スクリーン座標系への変換に分割できます.
ロボット座標系->カメラ座標系の変換は視野変換と呼ばれる操作で行います.具体的には

  1. ベクトルを足してカメラの位置まで原点を動かす
  2. 回転行列を使ってカメラの向きに座標を合わせる

ことで実現できます.

カメラ座標系->スクリーン座標は透視変換と呼ばれる操作を行ったあとに原点を画面左上にずらすことで実現できます.OpenCVの場合,この変換は推定されたカメラ行列を使うことで実現されます.くわしくはカメラキャリブレーションと3次元再構成を参照してください.

スクリーン座標系-> ロボット座標系

続いて逆変換を考えます.順変換で導出した式を逆に解けばいいのですが,2次元から3次元への変換なので不良設定問題となります.
そのため「ボールのz座標は0である」という制約をかけます.
スクリーン座標からカメラ座標への変換は下のようになります.カメラ座標のz座標は通常奥行きと等しいですが,今回は決まらないので1として計算します.OpenCVの場合,カメラ行列の逆行列を推定したスクリーン座標にかけて求めます.必要ならundistortPointsを先に適用します.

カメラ座標系からワールド座標系への変換は以下です.この時にロボット座標のzが0になるようにスケール変数sを決めます.

結果

gray_images
output_image

こちらがボール位置検出の様子です.モノクロ画像がエッジ処理に使われている画像で,カラー画像の黒線はエッジ処理に使う行を示しています.カラー画像に描画されている緑点が推定されたボール中心です.中心位置のx,y,z座標がcm単位でカラー画像左下に表示されています.右下に出てるのがフレーム当たりの処理時間です.GUIを表示しているせいもありますがそれほど速くないですね.

課題と展望

とりあえず以上の処理が実装できましたが,コードが十分に最適化されていないため,性能に改善の余地があります.今後効率的なコードにリファクタすることで性能を出せたらよいと考えています.また,カメラと天井照明の位置関係により,ボールの下側が影になって見えなくなってしまいます.カメラをチューンして影になっている部分の色が取れるように改善しつつ,ロボットに光源を搭載できないかと考えています.いんあでぃしょん,Visionや既存AIとの統合がいまだ実現できていません.既存AIやVisionが持つ遅れを伴いつつも高度な情報と,ローカルカメラによって得た高速で低レイテンシな情報をいかに統合するかがロボットの性能向上に極めて重要だと考えます.

参考文献

Fabio Seel & Sabolc Jut, On-Board Computer Vision for Autonomous Ball Interception, 2019, https://download.tigers-mannheim.de/papers/2019-BallIntercept_TC-Seel_Jut.pdf

OpenCV, カメラキャリブレーションと3次元再構成, http://opencv.jp/opencv-2.2/cpp/calib3d_camera_calibration_and_3d_reconstruction.html

山本紘暉,座標変換について調べてみた, 2020, https://dev.classmethod.jp/articles/convert-coordinates/



Read more

新規参入の方必見 練習用フィールドを作ろう

前に行ったフィールドセットアップの紹介の記事では,主にカメラについてまとめました.
今回はフィールドを作るうえで必要なものを包括的にまとめて行きます.

この記事は,ssl-zemi 11月(2023/11/25)に発表した内容を編集した物です.

場所

練習を行うには広いスペースが必要です.我々は主に,公民館などの貸会議室を活用しています.我々が会議室を借りる時に目安にしているのは次の通りです.

  • 60-100 m^2 程度 (半分フィールド,半分作業エリアとして利用)
  • 天井高 2.5 m 以上
  • 利用料金 ¥4000-6000/Day
  • 連続利用日数 3-4日 (実活動時間2日程度,初日は搬入とセットアップ,最終日午後は搬出)
  • 夜間に荷物を置いたままにできるか
  • Free WiFiがあるとなおよい

貸会議室の風景

カーペット

パンチカーペットをここから購入しています.1.8 m巾もありますが,可搬性を考えると91 cm巾が便利です.MFTなど会場によっては防炎ラベルが必要になりますので,購入時に合わせて準備することをお勧めします.
また,下にべニアを敷く場合や,常設するときはカーペット用両面テープが有効です.

白線

白色のマスキングテープ一択です.ビニールテープは縮んでしまい,カーペットごと歪んでしまいます.チョークなどの筆記具を使う場合色が残ってしまうので,場所ごとに組み替えてカーペットを利用する場合に適しません.

広いフィールドに壁を用意するのは非常に大変です.我々は常設の場合や,ボールが転がって困る場合に製作しています.木材の色がVisonシステムに影響を与える場合があるので,セットアップを楽にするという意味で,黒く塗装することをお勧めします.

フィールド MFT2022

展示会場ではボールが転がっていくのを防ぐために,高めの壁を用意しました.角は直角クランプで固定することで,工具なしでの組み立てが可能です.木材が大きいため運ぶのは少し大変です.

MFT2022フィールド

フィールド MFT2023

MFT2022では可搬性に課題があったことや,より大きなフィールドをカバーする必要があったので,壁を30×40の角材で製作しました.木材同士は金具で固定し,カーペットに養生テープで張り付けてあります.このフィールドは可搬性は高く非常に便利でしたが,壁が少し低く,ボールが飛び出すことが多くありました.壁の高さは最低80 mm程あったほうが良いと思われます.

MFT2023フィールド

メンバー宅

1×4材を黒く塗装して使用しています.常設しているので,可搬性などは考えられていません.塗装は結構手間です.

umagoya

SSL-Vison用カメラ

AliExpressで購入したUSBカメラを使用しています.比較的安価に必要な性能を得ることができます.性能はざっと以下の通りです.

ありえくのスクショ

  • イメージセンサ IMX290
  • USB 3.0対応
  • YUYV, MJPEGに対応
  • 1080p 60fpsで出力可能
  • 焦点距離2.8 mm

広角のレンズがついており,低価格であるという2点に着目して購入しました.基板が向き出しの製品ですので,3Dプリンタ製のケースを作って使用しています.

カメラケース

カメラの画角

カメラの固定

背景用スタンドにカメラマウントを取り付けて使用しています.最大高さ2.8 m 幅3 mまで広げることでき,1 m程度の大きさに分割可能して輸送ができます.袋もついてくるので非常に便利です.足元が三脚になっているため,狭いとことでは少し使い勝手が悪いです.金額に余裕があり,工具ありの組み立てを考えるのであれば,Misumiのアルミフレームなども視野に入るかもしれないです.

背景スタンド展開

SSL-Vison用PC

小型のデスクトップをYahooオークションで購入しました.1台¥6000程度で4台入手しました.

  • CPU:Intel Core i3-6100T
  • メモリ: 4 G
  • SSD: 256 GB

miniPC

性能としては,YUYV:1080pの設定でギリギリ動く程度です.普段はカメラを複数用意したり,フィールドが小さいのでMJPEG:720pで運用することが多いです.
複数のカメラ接続時のためのUSBケーブルの延長やUSBハブによって動作が不安定にならないように,1カメラにつきPC1台を使用する構成にしています.

まとめ

新しくフィールドを作るのに必要な費用をまとめると次の通りです.

物品 費用
カーペット ( 30 m ) ¥20,000-
壁 ( 3×4 m程度 ) ¥5,000-
SSL-Vison用カメラ ¥10,000-
カメラ固定スタンド(背景スタンド) ¥5,000-
SSL-Vison用PC ¥6,000-
合計 ¥46,000-

延長ケーブルなどの細かな出費を合わせても,5万円程度でフィールドを製作することができます.
決して安くはありませんが,現実的な値段で動作確認ができます.

加えて,輸送費¥10,000(場所にもよる)と会場費¥20,000程度で1回の練習会などが開催できます.

最近はもう少し大きなサイズ(div. B程度)で動かしたいと思うこともありますが,場所の確保が難しくなかなか実現できておりません.

積分の公式として $$ \int^{b}{a}f(x)dx = \int^{c}{a}f(x)dx + \int^{b}_{c}f(x)dx $$ は重要である.



Read more

フィールドセットアップの紹介

USBカメラで60fps出たよ!

GreenTeaでは、↓のようなUSB接続のWebカメラ(Logicool c922n)をロボットの動作確認に使っています。Amazonで7800円とかで買いました。

このカメラはMJPEGフォーマットで720pの解像度であれば、60fpsで撮影できます。
しかし、これまでのSSL-visionではYUY2フォーマットしか対応しておらず、
30fpsしか出せませんでした。
それが昨年、SSL-visionが晴れてMJPEGフォーマットに対応したわけですが、visionのGUIで設定したフレームレートが動作に反映されていませんでした。
そこで今回、該当箇所の修正を行った結果、ようやくlogicool c922nをつかって、
720p、60fpsを実現できました。わーい。

修正のpull requestは公式にacceptされました。わーい。(https://github.com/RoboCup-SSL/ssl-vision/pull/189)
masterのURLはこちら
RoboCup-SSL/ssl-vision - GitHub

カメラ設置方法

常設カメラ(自宅設置)

自宅の天井にカメラを設置した一例です。
マジックテープを使ってベニヤ板を天井に固定しています。
マジックテープをタッカーで固定することで、跡が残りにくい(はず)です。
ベニヤ板にカメラアームをねじ止めしています。

練習会でのカメラ設置

練習会などで場所を借りてフィールドを設置する場合には、
背景スタンドを使ってカメラを設置しています。

背景スタンドはamazonで5000円くらいで購入したもので、畳んでバッグに入れて持ち運べるので便利です。幅は3m、高さは2.8mまで伸ばせるものを使っています。

この時はカメラ2台使うため、スタンドも2組つかいました。

カーペットについて

カーペットはこちらから購入しました。



Read more