今(2023年春)、ドローンの衝突防止で検索すると、数社で昨年あたりに実証実験したということがプレスリリースされています。
ADS-B
オープンソースのArdupilotでは3年前くらいからフライトコントローラーCube OrangeにADS-Bを搭載したもののサポートをしています。
ADS-Bとはすでに飛行機に使われている技術で、GPSによる現在位置をブロードキャストする機能です。ADS-B同士だと自動的に衝突回避されます。
当たり前ですがADS-B搭載フライトコントローラーだと近接する飛行機を検知できます。
英語しかないのですが、おもしろいデモです。
業界標準によりすでに達成されていることを、独自方式によってできたということにニュース価値があるのか、私は疑問です。
ドローンに使う技術は広いので、一社の独自仕様で世界レベルに追従していくことは難しい一例でしょう。
ボート
さてADS-Bは航空機で使われている技術で、これをボートに流用することは避けたいものです。
なので、やはりLIDARによる衝突防止を考えるべきでしょう。
LiDAR(ライダー)とは、「light detection and ranging(光による検知と測距)」の頭文字をとった言葉です。
車の自動運転のおかげで飛躍的に進歩しました。
レーザーや赤外線光線を発射し、周囲のものとの距離を測る技術です。
今回の目的は衝突回避ですから、自動運転中に進行方向に障害物があれば止まる、もしくは後退するということを考えたいと思います。
それだけならば、プログラムを書かずにArdupilotでできそうです。
LIDAR Benewake TFmini-Plus
Benewake社のTFmini-Plusという単一方向センサーのものを使ってみます。
12メートルから検知できて、防水のようです。
ただしPixhawkに接続するにはコネクターを4ピンから6ピン(自分で用意)ソケットに付け替える必要があります。(https://ardupilot.org/copter/docs/common-benewake-tfmini-lidar.html)
接続方法はシリアル(UART)とI2Cがありますが、Serial4はあいているので、ここにつなぎます。
UARTの場合、
- Baud Rate 115200
- Data Bits 8
- Stop bit 1
- Parity None
Ardupilotのサポート
使うための設定は、上に紹介したリンクにありますが
- SERIAL4_PROTOCOL = 9 (Lidar)
- SERIAL4_BAUD = 115 (115200 baud)
- RNGFND1_TYPE = 20 (Benewake-Serial)
ここでPixhawkをリブートします。(Ctrl+F画面から)
次のパラメーターが入力できるようになります。
- RNGFND1_MIN_CM = 10 (for TFminiPlus)
- RNGFND1_MAX_CM = 600 (外で、検知する最大距離をセンチで示します)
- RNGFND1_GNDCLEAR = 10
次に
- RNGFNDx_ORIENT = 4 (検知した後の行動。4は後退します)
- AVOID_ENABLE = 7 (3つすべてのセンサーから障壁を見つける)
(PRX1_TYPE = 4 にして最初のレンジファインダーを近接センサーとして使います。このパラメーターは見つかりませんでした。)
- AVOID_BACKUP_SPDは下がるスピード(メートル/秒)を0-2の範囲で指定します。
- AVOID_MARGIN で障害物から空ける距離を1-10メートルで設定します。
Manualモード以外ですべて障害物を避けるはずです。