chrmlinux03 が 2022年09月20日17時25分10秒 に編集
コメント無し
タイトルの変更
Spresensを使って自律移動出来るよっ
Spresensを使って自律移動出来るよっ(uLiDARの製作と運用)
本文の変更
# はじめに こんにちわ リナちゃん@chrmlinux03 です 今回は Spresense を使って 自作した uLiDARによる自律移動するロボット(クローラ型)を作ってみたいと思います。
# 0. はじめに こんにちわ、リナちゃん@chrmlinux03 です 今回は Spresense を使って**uLiDAR**を自作し自律移動するロボット(クローラ型)を作ってみたいと思います。 あくまでも **uLiDAR** を作るのが目的ですからモジュール化し **足回り** は付け替えOKな感じで。
# uLiDARとは 最近のロボットには LiDAR と呼ばれるレーザによる測距センサーをぐるぐる回す機械が搭載されてます。これは自分自身と壁までの距離つかって自分の今居る場所を推定させるためのデバイスであり、屋内ではこれはありかも知れませんが屋外ではちょっと...という感じです。
# 1. 準備 ## uLiDARとは 最近のロボットには LiDAR と呼ばれるレーザによる測距センサーをぐるぐる回す機械が搭載されてます。 これは自分自身と壁までの距離つかって自分の今居る場所を推定させるためのデバイスであり、屋内ではこれはありかも知れませんが屋外ではちょっと...という感じです。それと**回転系**のデバイスは....。 そこでVL53L5CXというTOFセンサを64個(8x8)格子状に搭載したなんとも贅沢なセンサを使って **自前**でLiDARならぬ uLiDARを作ってみようと思います。 探査法は右手法アルゴリズムにて行いますので簡単な安価な測距センサも右手側に装備する必要があります。
# 自律移動とは 外部からのイベントによらず 自分で考えて移動する事ができる。これが自律移動。目的?それはあとで考える事にしよう。
## VL53L5CXとは 簡単に言うと TOFセンサ(Time Of Flight方式の光学式測距)が 8x8 の格子状に並べられていて 前方 400cm (4m) におけるFOV が45°という**広範囲**のデータが取得できるセンサになってます 発売は随分前なんですが、何故かあまり使っている方々をおりません。(便利なのに)
# クローラとは 屋内屋外問わず オムニホイールやメカナムホイールまたは車輪ですと どうしても落ちているものに引っかかってしまう。またサーボモータだと小さい型だとパワーが足りない。ここはDCモータを駆動させることにする。
>引用:VL53L5CXユーザーズマニュアル > > >
## 自律移動とは 外部からのイベントによらず 自分で考えて移動する事ができる。これが自律移動。目的?それはあとで考える事にしよう。初期位置が設定出来ればそこにQi系の充電台を置いて自動充電も可能かも... ## クローラとは 屋内屋外問わず オムニホイールやメカナムホイールまたは車輪ですと どうしても落ちているものに引っかかってしまう。またサーボモータだと小さい型だとパワーが足りない。ここはDCモータでクローラ(キャタピラ)駆動させることにする。
## DCモータとは
2本のIO(DegitalWrite + AnalogWrite) を使えば1個のモータはPWM駆動できます。 他の方々のライブラリは2本のIO(AnalogWrite x 2)を使っているようなのですが DCモータは所詮 **差動**で動くわけですから、ちょっと工夫をしてみました。 @[twitter](https://twitter.com/chrmlinux03/status/1559526096030531590?s=20&t=VKLJcG37k7H4nGBP9xmPyg)
DCモータとはマブチモータ等の+(プラス)-(マイナス)で直接駆動し、反転はそれを逆にすることで実現可能。ただしDCモータは電流値が高く、マイコンから直接動かすことはできない。動かすためにはモータドライバなりの回路が必要。
またDCモータはON/OFF や OFF/ON の動作時に激しい電流の変化があるため回路やデバイスに対して**スムーズ**な駆動が必要なために、**台形制御**と呼ばれる駆動方法が必要です。そこで**移動平均**によるDCモータ駆動も可能と考え今回のDCモータ駆動は下記の自前ライブラリを使用する事にしました。 
>自作台形制御ライブラリ >https://www.arduinolibraries.info/libraries/trape-zoid
## モータドライバとは 1モータに付き2本の配線を使いその差動によりモータを駆動させる回路。たとえば 1 0 だったら正回転(CW) 0 1 だったら逆回転(CCW) 0 0 が停止 1 1がブレーキをいう構成で動かす事が出来ます。
過去の経験を活かし2PIN(DegitalOut + AnalogOut)のみで1個のモータを駆動し、モータの優劣(劣化/個体差)によるFactも加味してあります
# SLAMとは
>自作DCモータ駆動ライブラリ >https://github.com/chrmlinux/tinyDC ## SLAMとは
Simultaneous Localization and Mapping の頭文字をとってSLAM(スラム)と呼ばれる手法。Simultaneous=同時に Localization=位置推定 and=と Mapping=地図作成 の意味となります。 Simultaneousは"いろいろなセンサ"を同時につかいという意味であり 今回使用する IMU(Inertial Measurement Unit)や接触センサ等が含まれます。自律移動させるためにはこれは必要。
# IMUとは
## IMUとは
IMU には色々なタイプがありますが 6軸(加速度センサ+ジャイロセンサ) 9軸(加速度センサ+ジャイロセンサ+地磁気センサ)等が有名な所。今回9軸を使用して開発を進めていたのですがモータが駆動されると"地磁気が乱れる"という当たり前な現象に悩まされ泣く泣く6軸の使用となりました。
今回は MPU6050 という6軸タイプのセンサを使いましたが、wifiModem で使用するモジュールに M5AtomMatrix を使えば MPU6885 用の配線は不要です。
# AddOnBord01基板
# 2. 製作開始 ## ハード構成 Spresense本基板 Spresense拡張基板(Arduino形状) AddonBoard01基板 バッテリ基板(3.7V->5V充放電基板) バッテリ(LiION3.7V 400mAH) DCモータ5Vx2 クローラセット2輪 各種センサ DAISOのカバー的なもの ## AddOnBord01基板
配線が色々と大変ですので基板化しました
製作と言ってもコネクタをつけまくって電源を張りまくってって感じです。

 )
## Arduinoバニラシールド 遠い記憶に Arduio用自作基板があったのを思い出し倉庫から引っ張り出してきましたぴったりです。 

## MotorDriver(MX1919) GPIO 4本を使い2個のモータを制御させる事が出来ます。差動によりモータを駆動させるたとえば 1 0 だったら正回転(CW) 0 1 だったら逆回転(CCW) 0 0 が停止 1 1がブレーキをいう手順で動かす事が出来ます。 ## WiFiModule(M5AtomLite)
今後の拡張のため WiFiはどうしても必要により苦肉の策、M5AtomLiteはI2CSlaveとして駆動させるので今回はWiFiModemとして使用されます。
今後の拡張のため WiFiはどうしても必要により苦肉の策、M5AtomLiteはI2CSlaveとして駆動させるので今回はWiFiModemとして使用されます。ただしあくまでも今回の主役は Spresense であって M5Atom は I2C Slave として動作します。 ROSもWiFiであれば受け入れてくれるかもしれない....

>自作 I2C MASTER/SLAVE ライブラリ >https://github.com/chrmlinux/esp32MasterSlave
# センサー
## TOF64センサー
VL53L5CX(8x8x400cmマルチゾーン対応ToF測距センサ) 
HC-SR04(300cm 超音波距離センサ)
## HC-SR04(300cm 超音波距離センサ) 右手法アルゴリズムにより**洞窟**等の道順探索にはかならず右手を**壁**に手を触れて洞窟を探索する事になります。 今回のTOF64センサは前方を見て壁の有無を45°のFOV で検出し、SR-04 は右手法アルゴリズムの**右手**の役目をします。

# システム構成 Spresense本基板 Spresense拡張基板(Arduino形状) AddonBoard01基板 バッテリ基板(3.7V->5V充放電基板) バッテリ(LiION3.7V 400mAH) DCモータ5Vx2 クローラセット2輪 各種センサ
# 最後に