Yukiのブログ

電子工作、プログラムについて書きます

ジャイロマウスを作る(ESP32 MPU6050)【設計編】

 

  解説はYoutubeでも公開しています。

youtu.be

 

以下が回路図になります。

 

f:id:namikitake:20210327115703p:plain

回路図

 

以下がESP32に書き込むArduinoコードです。

 

bluetoothジャイロマウスのarduinoコード

 

 

ケースなどに組み込んで実際に使っているところまではお待ち下さい。

VisualStudioCodeで競プロ環境構築[macOS][gccインストール方法]

Qiitaのこちらの記事を参考にして、gccのインストールをしようとしたのですがgccのバージョンが変わっていて、手こずったのでまとめておこうと思う。

qiita.com

 

0. はじめに

上記の記事に従って、VScode拡張機能のインストールやhomebrewのインストールなど、「gccのインストール、pathの設定」以外は済ませておく。以下、aaaaaaシェルスクリプトを意味します。

 

1. gccのインストール

brew install gcc

 

 インストール後、/usr/local/下に、g++-10がある。10という数字はバージョンごとに違うので、人により異なります。現在の最新バージョンは10です。

(ちなみに、/usr/local/にいくにはfinderを開いて、メニューバーの「移動」から「フォルダへ移動」を選択して「/usr/local/」を入力。隠しフォルダなので普通には見れません。)

 

2.pathの設定

1.が終わると、mac上に2種のコンパイラ(clang, gcc)が同居している状態になる。

  • /usr/bin/g++ (clang)
  • /usr/local/bin/g++-10 (gccの実体)

この状態でg++コマンドを打つと、/usr/bin/g++(clang)の方が呼び出される。

 

which g++

/usr/bin/g++

 

pathを通すため、以下のシェルスクリプトを実行。

 

ln -s /usr/local/bin/g++-10 /usr/local/bin/g++

 

このようにすることで、g++コマンドで/usr/local/bin/g++が呼び出されるようになった。

 

which g++

/usr/local/bin/g++

 

 

 

 

 

 

 

 

RaspberryPiで快適な遠隔操作の環境構築(Mac)

目的

ラズパイは処理速度が早くないので基本的には遠隔操作するのがいいと思います。それに、常時ディスプレイをつなげておくのも嫌だという人が多いと思うので、macの標準機能であるFinderとターミナルを使用して遠隔操作できるようにします。

 

やること

ターミナル操作をSSH接続、画面共有をVNC接続、ファイル操作をAFP接続して行いたいと思います。以下、ラズパイ側とMac側でやることを分けて書きたいと思います。IPアドレスは固定しなくてもローカルなら以下のコマンドで実行できます。

 

ターミナル操作

ラズパイ:SSHを許可する

Mac:ターミナルから「ssh pi@raspberrypi.local」とパスワード入力して接続

 

画面共有

ラズパイ:下の記事に従って、tight vnc serverのインストール

raspi-fanatic.seesaa.net

Mac:ファインダーから Cmd+K を押して「vnc://raspberrypi.local:5901」入力してパスワード入力

 

ファイル操作

ラズパイ:下の記事に従って、netatalkをインストール

studio.beatnix.co.jp

Mac:ファインダーから Cmd+K を押して「afp://raspberrypi.local」を入力

ロボカップジュニアでの活動について

まず

(終始偉そうな口調になってしまっているのはお許しください。直すのがめんどくさくて…)

(この記事は電気回路のことはわかっているけど、ロボカップジュニアについてわからない人に向けて書いてあります。)

 手前味噌ではあるが、二人でこのロボットを作って高校2年生の時、全国5位になることが出来た。非常に今更感があるし需要があるかもわからないが、その時にしてきたことを技術書として残したいし、AO入試のための推薦書に結構時間をかけたのでそのままにしておくともったいないと思い、ブログとしてまとめることにした。また、全国大会の様子もYoutubeで公開している。

youtu.be

  

ロボット活動は2人で行った。自分はロボット開発の回路設計,機構設計を担当し,もう片方の方がプログラム,少しの機構設計を担当した。ロボカップジュニアのライトウェイト,セカンダリに出場していた。

 

ロボットの概要

 

f:id:namikitake:20190915000728p:plain

フィールドの3Dモデル

ここで簡単なルール説明をする。フィールドの寸法はだいたい2m×1mである。1チーム当たり2台までロボットを出場させることができ,ロボットは完全に自律型でなければならない。チームはスタートの合図でロボットを起動させるだけである。制限時間内に多く点を決めた方が勝利。ボールは赤外線発光(ロボカップジュニア独自規格のPWM)である。また,稼働可能区域は白線の内部のみでロボットが完全に白線から外に出ると、ある一定時間フィールドの外に出さなければならなくなる。サイズ,重量,電圧に制限がありサッカーライトウェイトでは,直径22cm以下で高さ22cm以下,重量1100g以下,電圧12V以下である。

 これらのボール,白線,ゴールを認識し,最適な行動について説明していきたい。

 

f:id:namikitake:20190923135420p:plain

ロボカップジュニア独自規格のパルス波の波形

 まず,ボール認識について。上図のような波形の赤外線がボールからでている。そこで,赤外線の信号波である40kHz付近が中心周波数の赤外線リモコン受信モジュールを使った場合,ある程度離れると一番弱い1/644pulseが検出されずにその前段合計の16(=8+4+4)pulseが検出される。遠ざかっていくにしたがって合計値が12pulse8pulseと変化していく。PWMであるからローパスフィルターをかければ,電位の変動になる。よって,距離に応じて電圧が変わるので距離が分かる。ローパスフィルターをかけなければマイコンなどでパルス幅を計測し距離を割り出すことも可能だ。ただ,ボールがセンサにものすごく近いときは最大値をとってしまい距離によってあまり変わらなくなる。ソレノイドキッカー(*)などでボールをける機構をつけている場合,ボールをピンポイントで当てる必要があるため,至近距離でのボール認識が必要となる。ここで,下図に示すようなセンサを導入する。ボールがない状態ではLEDの光はそのままセンサ素子(フォトトランジスタ)に入るが,ボールがあると光がさえぎられ光が届かなくなる。この仕組みを以下から捕獲センサと呼ぶことにする。

f:id:namikitake:20190915000926p:plain

捕獲センサの概略図

 

 次に,白線認識について。ロボティクスでは床の色を認識するとき多くは下に示すような仕組みで認識する。ここでは,この仕組みをラインセンサと呼ぶことにする。色によって反射率が異なることを利用する。ただ,高速で動くロボットであるため素早い認識が必要とされる。そこで,メインマイコンへの情報の受け渡し方や,ラインセンサをどのように配置するかが重要となる。超音波センサで壁との距離を計測する方法もあるが,実際はロボットと壁の間にほかのロボットがいると計測できなかったり,超音波を壁に垂直に照射できないと正しい値が返ってこなかったりするため,白線認識としてはあまり有効な手段とは言えない。

 

f:id:namikitake:20190915001046p:plain

ラインセンサの仕組み

 そして,ゴールの認識について。色が指定されているのでそれを認識させるためカラーセンサーやカメラを使ったり,超音波センサで自分の場所から進むべき方向を逆算したりと方法はさまざまである。超音波センサは下図のような仕組みとなっている。超音波を照射して帰ってくるまでの時間をはかる。超音波の速さは既知であるため距離がわかるというものである。

 

f:id:namikitake:20190915002320p:plain

超音波センサの仕組み

  最適な行動について。動くボールに対して急速に向かいボールをゴールに入れるため,前方後方のみしか動けない機構は効率的でない。ボールを追うだけなら前方後方のみでもよいのだがボールと取った後にゴールに入れるためゴールの方を向いていた方が効率は良い。そこで,オムニホイールというタイヤが登場する。この機構はある一定の方角を向いたまま全方向の移動が可能となる。ホイールの特徴としては横滑りが可能となるサブホイールがついているということだ。これによりモータの力が合成可能となるのである。 

f:id:namikitake:20190923134316p:plain

 

f:id:namikitake:20190923134529j:plain

オムニホイール

ロボットは2台いるわけだから仲間同士でぶつかり合うようなプログラムであってはならない。2台とも同じプログラムだとぶつかることは避けられない。そこで、それを回避する方法は2つあると考える。一つ目は攻撃型と守備型に分ける。これが最も簡単。プログラムを別に書けばいいからである。二つ目は、一台で二役をこなす。つまり、ボールに近い方が攻撃型となるのである。これはロボット間で通信する必要がある。だが、ロボットが白線から出ると1分間の退場となるため片方ずつに役割を決めておくと片方が退場になった時に想定していた動きができないのである。そのため、一台で二役できる方が良いと考える。

 

*ソレノイドキッカー:鉄心の入ったソレノイドに電流を流すと磁場の影響で鉄心が力を受けソレノイドの外に飛び出そうとする。これを応用して作られたのがソレノイドキッカーである。ロボカップジュニアサッカーではこれに一瞬大電流を流し威力を強めて使っている。

 

歴代のロボット

Ver.1

f:id:namikitake:20190923145805j:plain

 

f:id:namikitake:20190923135824p:plain

 

 製作期間は中等3年生の1月ごろから中等4年生の11月ごろまでの11ヶ月間。ダイセンという企業のキットを主に使用している。初期にかかる費用はSSHの出費として処理させていただいた。足回りはダイセンモータ3つにダイセンのオムニホイールをつけている。電源は単三電池4本をTJ3Bというマイコンボードにつないでいる。三端子レギュレータを内蔵しているため5Vにして入力する必要なはい。低発砲塩ビ板を加工して底板と中間の板を作った。赤外線センサ,超音波センサ,地磁気センサ,マイコンボード,モータドライバはダイセンのものを利用。この時は,ラインセンサを搭載していない。ロボットの上部についているものは地磁気センサでモータの影響を受けないように離れた位置に設置している。

 

Ver.2

f:id:namikitake:20190923140330j:plain

 

f:id:namikitake:20190923135856p:plain
 

 製作期間は中等4年生の12月から中等5年生の11月までの1年間。いろいろな機能を載せようとしたあまり完成しなかった。だが,それぞれの部品について開発,研究する期間は最も長かった。Arduinoを搭載した初めてのマシン。しかし,足回りは昨年と同様のダイセンモータ4つにダイセンオムニホイールをつけている。電源はリチウムイオン電池2本でモータ側の電源,同じものをもう1セット用意しマイコン側の電源として供給している。通信形式は超音波センサが独自のパルス波によるもの,赤外線センサはデジタル信号として出力されるPWMのデューティー比を計測すればよいのだが,その当時はそのことを知らず,ダイセンのキットの回路と同じような方法をとった。昨年同様,フレームは低発砲塩ビ板,ガラスエポキシ(基板)を使っている。捕獲センサには指向性が高いレーザーを使用した。ここから,ラインセンサを搭載し始めた。一番初めに十字型ラインセンサを使っているのはほかの多くのチームが搭載していたからである。初めてのArduinoだったためなんとなくスタンダードなUNOを選んだのだが,入出力IOピンが足りなくなりその足りないIOピンでどうにかしようと周辺回路が複雑化してしまった。

 

Ver.3

f:id:namikitake:20190923143111j:plain

 

f:id:namikitake:20190923141500p:plain

  

 製作期間は中等5年生の11月から12月までの1か月。11月の茨城大会では2チーム中2位だったのだが,関東大会へ出場することが出来てしまった。ただ,完成していないロボットで出場するのは嫌だった上に,新しく作り直した方がver.2を完全に動くようにするより早いと感じたため(メインマイコンの入出力IOピンがArduino UNOからArduino MEGAにすると増えることなど)新しく作りなおした。ラインセンサはver.2のものを流用して配置の仕方を変えたものとなっている。モータやオムニホイールは同じくダイセン製である。電源は制御側に9V電池,駆動側に18650と呼ばれるリチウムイオン電池を使っている。また,この時からフレーム作成にレーザーカッターを導入した。(チームメンバーのもう一人の家がはんこ屋であるため仕事で買ったらしく,それを借りた。)MDFとガラスエポキシ(基板)をフレームに使っている。関東大会では科学研究部の部室の床でロボットを調整したため気が付かなかったが,車高が低くすぎて実際に使われるフィールドでは底板がフィールドに引っかかってしまい全く勝つことはできなかった。

 

 

Ver.4

f:id:namikitake:20190923142748j:plain

 

f:id:namikitake:20190923142851p:plain

 

 製作期間は中等5年生の1月から8月まで。ロボカップジュニア本戦とは別の練習試合(NEST)に参加するために作った機体である。この機体は主に実験用として作成し,見つかった不具合や良かった点を踏まえて11月の本戦に向けたロボットを作ろうと考えた。この機体から新しく導入したものがいくつかある。3DCAD,重量計量による設計,リポバッテリー,レーザーカッターによる自作オムニホイール,D型のラインセンサ,サブマイコン,安価な互換品,ジャイロセンサである。フレームにはレーザーカッターで加工したMDFと,電動糸鋸で手加工したガラスエポキシ基板を使っている。スペーサーやナットは軽量化するためにプラスチック製のものを選んだ。また,以前まではラインセンサ,捕獲センサにコンパレータを使用していたため内部処理が変更できない,周辺回路が増えるといったデメリットがいくつかあったのだがサブマイコンにすることで解消された。今までは,方向認識に地磁気センサを使っていたがジャイロセンサに変更した。それは,会場の地磁気の環境が悪いと正しい方向が得られなくなってしまうからである。以前一度全国大会の会場で地磁気が乱れていて一つのフィールドでも同じ方向を向いていられないということがあった。ただ,ジャイロセンサを使うにはカルマンフィルタなどの複雑な処理が必要でメインマイコンとは別にマイコンを設け並列処理にすることにした。

ラインセンサはD型にすることで白線のかぶり方をより的確に認識できると考えたが,この時の自分たちの技術では難しかった。プログラム担当の負担も大きくなると考えたので十字型へ戻すことにした。

f:id:namikitake:20190915003219p:plain


 

Ver.5

f:id:namikitake:20190923143351j:plain

 

f:id:namikitake:20190923143325p:plain

 

 製作期間は中等5年生の9月から12月までの4ヶ月。これで11月の茨城県大会と12月の関東大会で出場した。実験機であるver.4をもとに作った機体である。十字型ラインセンサを導入したわけだが,3輪のオムニホイールで十字型のラインセンサだと問題がある。なるべく低い場所にラインセンサとモータを重ねて設置しなければならず設計が大変だということである。だが,3DCADで設計するのには慣れてきていたので今回でそれが可能になった。また,新しくプリント基板設計を導入することによって配線する手間が省け,衝突による断線を防ぐことができるようになった。電源はリポバッテリー,オムニホイールは以前の自作のものを少し改良。ソレノイドは写真では載っているが完成は間に合わなかった。フレームにABS,アクリルを初めて導入した。ABSMDFと軽さはあまり変わらないがMDFほどもろくはない。アクリルは比較的重いので右のマシンの一番上にのみにつけている。回路はほとんど実験機と同じであるが,配置の仕方が変わっている。

 認識性能は悪くないがロボットの走行速度を上げると白線から出てしまう。認識可能範囲を広げた方がよいと考えた。

f:id:namikitake:20190915003721p:plain

 

Ver.6

f:id:namikitake:20190915012225j:plain

 

f:id:namikitake:20190923143436p:plain

  

 製作期間は中等5年の1月から3月までの3ヶ月間。3月に行われたロボカップジャパンオープン(全国大会)に出場するための機体として作成し,全国5位になることが出来た。Ver.5の機構とほぼ同じだがロボット間の通信機能を持たせ,ソレノイドを搭載し,ラインセンサを大型の十字にした。ロボット間の通信をすることで,攻撃守備を的確に分けられ,近い方が攻撃型になることができるようになる。電源はリポバッテリー。オムニホイールはさらに改良を重ねて丈夫に,スムーズに動くようにした。フレームはABSMDF,ガラスエポキシ基板を使用している。

 Ver.4までは赤外線センサ,超音波センサで別々に固定していたため重たくなって大型化していたのだが,最終的にそれを一枚基板にまとめることで小型化,軽量化に成功した。その分,ソレノイドキッカーに余った重量を割り当てることができるようになった。ソレノイドキッカーがあるといい点はいくつかある。一つ目はロボットでボールを押すのとボール単体で動くのとだとボール単体で動いた方が邪魔はされにくいという点。なぜなら,ボールとロボットがくっついた状態でいるのとボール単体では空間を占める体積が後者の方が小さいからである。二つ目は,ロボットが素早く動かなくても問題ないという点。キッカーで自分の場所からゴールへ運べると,ロボットに必要なのはボールをとることであるため,素早く動く必要はない。自分のゴール前にいるだけで相手はボールをこっち側に持ってくるからである。素早く動かないというのはラインから出る可能性は低くなり,バッテリーの消耗も少ないという点で優れている。

↓これが全体の回路図です。画像で挿入すると小さい文字が見えなくなるのでgoogledriveの共有にしました。 

drive.google.com

 

以下、写真たち

f:id:namikitake:20190915011707j:plain

f:id:namikitake:20190915011825j:plain

f:id:namikitake:20190915011837j:plain

f:id:namikitake:20190915011820j:plain

f:id:namikitake:20190923145141j:plain

 主電源のVNHコネクタ,モータ3つ分のVNHコネクタ,ラインセンサ,捕獲センサ,ソレノイドの情報を受け渡すMILコネクタ。メイン基板と下ユニットをつなぐのはこの5つのコネクタのみで,メンテナンス性を上げた。

f:id:namikitake:20190915011901j:plain


 

 

最後に

今までの人生をロボット、電子工作に費やして来た僕は大学生になり、ものづくり系サークルがない大学へと入学した。今までのやってきたことやこれからのことを考えたり、違った視点からロボットが見られるようになるかもしれないから、しばらくは、ものづくりから離れたいと思う。ちょうど今は、作曲にはまっている。これからこのブログはものづくりのことに触れないかもしれないが、どうぞよろしくお願いします。