Monthly Archives: February 2019

マイクロマウス研修(kora編)[17] スラローム探索

こんにちは。koraです。

今回は、迷路探索プログラムにスラロームを追加します。

現在のプログラムのターン

前回までに作成した探索のプログラムでは、次の手順でターンしています。
①光センサから壁情報を更新
②歩数マップを更新して進行方向を決定
③半区画前進して90度回転
④半区画前進

③で一旦停止するのでゆっくりとした探索になってしまいます。③と④を一つのスラロームにまとめてしまえば、迷路探索を大幅にスピードアップできるはずです。
幸い、速度と角速度を指定すればそれに追従するようなプログラムはすでに実装しています。

シミュレータの作成

ただし、単純に円弧の軌道で旋回しようとすると、直進から旋回に移行する瞬間に角加速度が無限大になってしまうため、上手く追従できません。
そこで、スラロームの始めと終わりに角加速区間と角減速区間を設けることで、マウスが追従できるようにします。
角速度が一定にならないのでスラローム終了時の座標の調整が難しくなってしまいますが、これは表計算ソフトでシミュレータを作ることでカバーします。

このシミュレータでは最初に「速度・角加減速区間の角加速度・各区間の区切りとなる角度」を指定します。
後は単純に1msごとの角速度、角度、X座標、Y座標を計算し、X座標とY座標をグラフに描写して軌跡を表示します。

なお、実際の迷路では、歩数マップの更新に時間がかかるため更新中に数ミリほど惰行してしまいます。
そのため、スラローム開始前とスラローム終了後に直進区間を設け、ズレを吸収できるようにオフセットすると安定します。

テスト

run.cファイルに新たな関数を追加して、「オフセット分直進 -> 角加速 -> 等角速度 -> 角減速 -> オフセット分直進」を実行できるようにします。
シミュレータでわかった値をもとに、何度かパラメータを調整すると、スラロームで90度曲がれるようになりました。

続きを読む ›

Posted in DCマウス研修


shotaのマイクロマウス研修11[ESP32でMPU9250とSPI通信する]

こんにちは、shotaです。

社員研修として、オリジナルマウスの製作を始めます。

[前回の記事]ではオリジナルマウスの仕様を決めました。

今回はタイトルの通り、ESP32で9軸センサMPU9250とSPI通信をします。

 

確認すること

できあがったプログラムがこちらです

n分クッキングみたいですが、先に完成したプログラムと通信結果を紹介します。

プログラムは[GitHub]に公開しています。[ESP-IDFのサンプル]をもとに作成しました。

WHO_AM_I(0x75)の応答のみを実装しています。

 

通信結果はこちらです。MPU9250からの返答0x71が確認できます。


SPI通信信号をロジアナで確認した結果がこちらです。

ESP32からの送信信号0xF5(Readビット(0x80) + WHO_AM_I(0x75))と、MPU9250からの返答0x71が確認できます。

また、通信クロック500 kHzも確認できます。

それでは、このプログラムができるまでの過程をここに書きます。

 

開発環境の導入からHello Worldまで

は、省略します。公式ページを見れば実施できるため、ここには書きません。

[ESP-IDF Programming Guide]Get Startedから開発環境(ESP-IDF)を導入してください。

私は、Linux(Xubuntu 16.04)に開発環境を作りました。使用するESP32のボードは[ESP32-DevKitC-32D]です。

 

ESP32のSPI機能について確認

まず、[公式ドキュメント]や、[Technical Reference Manual][データシート]を閲覧することを推奨します。

ここでは、引っかかった項目をピックアップします。

 

続きを読む ›

Posted in DCマウス研修, ブログ, 研修


マイクロマウス研修(kora編)[16] 迷路探索の実装

こんにちは。koraです。

今回は、前回の記事で解説した迷路探索アルゴリズムを、HM-StarterKitに実装して迷路を走らせてみます。

迷路探索関連の関数の追加
search.hとsearch.c

サンプルプログラムのStep7から、search.hとsearch.cをコピーして、CS+のプロジェクトに加えます。これで、以下の関数が追加されます。

  • search_lefthand(x, y)
    左手方で探索する関数。今回は使用しません。
  • init_map(x, y)
    歩数マップの初期化関数。歩数マップ更新のたびに呼び出されます。
  • make_map(x, y, mask)
    ゴール座標(x, y)の歩数マップを更新する関数。
  • set_wall(x, y)
    光センサの情報をもとに、現在の座標(x, y)の壁情報を設定する関数。
  • is_unknown(x, y)
    指定した座標(x, y)が未探索区間か否かを判定する関数。get_priority関数から呼ばれます。
  • get_priority(x, y, dir)
    現在の座標(x, y)から方角dirに移動する優先度を取得する関数。指定した方角が未探索の場合や直進の場合、高い優先度になります。get_nextdir関数から呼ばれます。
  • get_nextdir(x, y, mask, *dir)
    次に行くべき方向を取得する関数。
  • search_adachi(gx, gy)
    指定したゴール座標(gx, gy)に向かって、足立法で探索する関数。

構造体、グローバル変数、定数の追加
mytypedef.h

mytypedef.hに次の列挙型(enum)と構造体の型(struct)の宣言を追加します。

glob_var.h

構造体をグローバル変数として使えるよう、glob_var.hに以下を追加します。

static_parameters.h

探索に必要な定数を追加します。

parameters.h

探索を開始させるときは、マウスの前に手をかざして、光センサ変化を読み取らせます。そのための光センサの閾値をparameters.hに追加します。

init.c

init_maze関数をinit.cに追加します。

init_all関数内にinit_maze関数を呼び出す行を追加します。

探索のテスト
my_hm_starterkit.c

サンプルプログラムを参考にmain関数を次のように書き換えます。これで4×4マスの迷路を探索できるはずです。

このプログラムで実際に探索を行った動画がこちらです。
ふらつきながらもなんとかゴールすることができました。

パラメータの調整

マウスが迷路を走るとき、光センサやタイヤなどの個体差に加え、環境光、路面状況、壁の反射率の違いなどで走行が安定しません。安定させるためにはparameter.hに記載されたパラメータを微調整する必要があります。

  • タイヤの直径
  • 各光センサの閾値
  • LED発光からAD変換開始までの時間
  • PIDゲイン
  • などを調整した結果がこの動画です。
    比較的まっすぐに走るようになりました。

    次回

    4×4の小さな迷路ですが、ゴールまでの探索に成功しました。
    しかし、実際のマイクロマウス競技では16×16や32×32になりますので、もっと高速化が必要です。
    次回は高速化のため「スラローム探索(通称スラ探)」を追加しようと思います。

続きを読む ›

Posted in DCマウス研修


Raspberry Pi Mouse / Catを中継サーバー経由で遠隔操作

1.はじめに

こんにちは.鈴本です.
Raspberry Pi MouseとCatを遠隔操作するためのシステムを作りました.

  • 同一LANにいなくても操作できる
  • 複数台あったとしても中央集権的に管理できる

などの要求から,中継サーバーを挟んでPCから遠隔地のロボットを操作できるようにします.

2.全体像と要求

全体像は上図のような感じです.
遠隔地のLAN間でも操作できるように,PCとロボットがそれぞれ中継サーバー(ここではRaspberry Pi)につなぎに行きます.
そこでデータなどをやり取りして,遠隔操作を行おう,というものです.

要求は,

  • ロボット,操作PCは静的グローバルIPを必要としない.
  • 中継サーバー1台あれば,複数の通信セッションも開設できる.
  • データを中央で管理できる.
  • LANをまたいだ遠隔操作(NAT超え)も可能である.
  • 可能な限りリアルタイム性を追求する.

です.

3.構成
ロボット

  • Raspberry Pi Mouse / Cat
  • Ubuntu Server 16.04.5 LTS (Xenial Xerus)
  • Node.js v10.14.2
  • ROS kinetic
  • UVC対応カメラ:LOAS MCM-15W or C270 HD WEBCAM

PC

  • Microsoft Windows 10 Home 1803 (64bit)
  • Google Chrome 71.0.3578.80 (Official Build) (64bit)

中継サーバー

  • Raspberry Pi 3 Model B
  • Ubuntu Server 16.04.5 LTS (Xenial Xerus)
  • Node.js v10.14.2

通信プロトコル

  • WebSocket

のような構成にしました.

操作コンソールにはブラウザを用いて,リアルタイム性より通信プロトコルはWebSocketを採用しました.
Webを使うので,サーバーサイドとロボットサイドのコードはNode.jsで実装しています.

4.環境構築
ロボットと中継サーバーへのUbuntu Serverインストール

ロボットも中継サーバーもRaspberry Piなので,公式ページよりRaspberry Pi用のイメージファイルをダウンロードしてきて,SDカードに展開します.
ここでは Unofficial images の Raspberry Pi 3: ubuntu-16.04-preinstalled-server-armhf+raspi3.img.xz (4G image,

続きを読む ›

Posted in Raspberry Pi Cat, Raspberry Pi Mouse, ブログ


shotaのマイクロマウス研修10[オリジナルマウスの仕様を決める]

こんにちは、shotaです。

社員研修として、オリジナルマウスの製作を始めます。

[前回の記事]で、ESP32を使ったマウスを作る!!という目標を掲げました。

今回はより詳細な仕様を決めたいと思います。

仕様決めのルール

設計を楽にするため(妥協するため)、仕様を3段階に分けます。

  • 最低限必要な機能・性能
    • これがないとマウスじゃない
  • 重要な機能・性能
    • 目指すマウスの姿
    • 目標
    • 欲望
  • できればほしい機能・性能
    • あったら嬉しい
    • 妥協できるところ

最低限必要な機能・性能

これがないとマウスじゃないという機能・性能です。実現しないと大会に出場できません。

  • 迷路を直進・旋回できる
    • 実現しないと迷路を走れません
  • 壁を検知できる
    • 実現しないと角を曲がれません迷路を解けません
  • 迷路情報をフラッシュメモリに保存できる
    • 実現しないと競技中にマウスの電源を切れません
  • 電源スイッチがある
    • 実現しないと電源を切るためにバッテリーを引き抜かなければなりません
  • モード切替インタフェースがある
    • 実現しないと電源ONですぐに走り出しちゃいます

重要な機能・性能

目指すマウスの姿です。これらをすべて実現できるように頑張ります。

  • ESP-WROOM-32Dを使う
    • 一番重要な項目です。ESP32はマイクロマウスで使えない。なんてことにならないようにがんばります。
  • WiFi・Bluetoothが使える
    • ESP32の主な機能の一つです。ただ、マウスで使うにあたって注意事項があります。この記事の最後に書きます。
  • 組み込みOS(FreeRTOS)が使える
    • 組み込みでマルチタスクを使ってみます
  • AWSと接続して迷路データをクラウド(AWS)に送信できる
    • 番むずかしい仕様だと思います。
    • これまで使っていた[Pi:Co Classic3]では、マウスとPCをUSBで接続して、迷路情報を[Tera Term]に表示していました。
    • 無線で迷路情報をクラウドに送信し、いつでもどこからでも迷路情報を閲覧できるようにしたいです。
  • DCモータを使う
  • Linuxのターミナルで開発できる
    • (Windows使いたくない)
    • (好きなエディタ(NeoVim)を使いたい)

 

続きを読む ›

Posted in DCマウス研修, ブログ, 研修


マイクロマウス研修 Part4(岩本)

こんにちは、岩本です。

今回は、プログラミング編です。ただ、私プログラミングの方はからっきしでして、何をしていけばよいのやら…

取り合えず、マニュアル通り、ソフトウェアをインストールします。一つ一つウィンドウ毎に丁寧に説明が書いている為、初心者の人でも選択肢を間違える心配はなさそうです。

今回、ソフトウェアとしましては、Renesas Electronics CS+というソフトを使用します。インストールして開きますと、下図のような画面になります。今後、このソフトウェアで、プログラミングしていくことになるようですが、今回は、用意されているサンプルプログラムでランプを光らせるだけです。

 

今回は、サンプルプログラムの為プログラムは全然書かないため操作も簡単で、サンプルプログラムを開き、図のようにビルドするだけです。

 

そうすると、マイコンに書き込むためのデータが DefaultBuildフォルダ内に生成されます。

 

データが生成出来たら、後は書き込むだけです。まずは、Pi:Co Classic3の切替スイッチをFWの方向に切替え電源を入れます。

 

 

 

 

 

 

 

 

次に最初にインストールしたソフトウェアのパックにRenesas Flash Programmerと言うマイコンにデータを書き込むためのソフトウェアがありますので、これを起動します。

 

マイコンの種類や先ほど生成したデータの場所等を入力して、スタートを押すと、マイコンに書き込みができます。

 

書き込みが成功し、切替スイッチRUNの方に戻して再度電源を入れると、ランプが点灯するようになりました。これで成功です。

 

プログラムの方も書き込むだけでしたらとても簡単でした。後は、プログラムを書けるようになれば、Pi:Co Classic3で色々遊べそうです。

では、次回もよろしくお願いいたします。

続きを読む ›

Posted in Pi:Co Classic3 製作記


マイクロマウス研修(kora編)[15] 迷路探索の解説

こんにちは。koraです。

今回は、迷路探索アルゴリズムがどのようになっているのか確認します。
HM-StarterKitのサンプルプログラムには、足立法による迷路探索のコードが含まれています。
足立法については、過去のRTのブログなどで解説されています。これらを参考にしながら、サンプルプログラムでどのように実現されているか確認します。

足立法の考え方

簡単のため、4×4の迷路を考えます。次の図の”S”をスタート座標 (0, 0) 、”G”をゴール座標(3, 3)とします。

迷路探索には歩数マップを使います。ゴールのマスが0、隣のマスは1、その隣が2…というようにゴールからの歩数が入ったマップを作れば、より小さい歩数のマスに向かうことで、おのずとゴールに到達できるはずというわけです。

迷路探索のシミュレート

それではマウスの気分になって迷路を解いてみます。

1. 最初にマウスが認識している壁はこれだけです。

2. 既知の壁情報をもとに、歩数マップを作成します。そして、歩数マップをもとに、現在のマスより歩数の小さいマスへ移動します。また、1マス動くたびに壁情報と歩数マップを更新し、次に進む方向を考えます(サンプルではset_wall関数で壁情報を、make_map関数で歩数マップを更新して、get_nextdir関数で進む方向を決定するようになっています)。

3. 探索を続けると、徐々に既知の壁が増え、歩数マップも変化します。

4. やがて、進める方向が複数あるような分岐点が現れます。サンプルでは、進行方向の優先順位はget_priority関数で決めます。どのように決めるかというと、探索時は未探索マスに進むことを優先し、どちらの候補も未探索あるいは探索済な場合は直進を優先するようになっています。

5. 壁の探索が終わると、歩数マップが出来上がります。あとは歩数マップにしたがって各マス進めばゴールに到達します。

次回

迷路探索アルゴリズムがわかったので、次回はHM-StarterKitに実装して迷路を走ってもらおうと思います。

続きを読む ›

Posted in DCマウス研修


shotaのマイクロマウス研修9[オリジナルマウスの製作開始]

こんにちは、shotaです。

社員研修として、オリジナルマウスの製作を始めます。

 

前回までの研修では[Pi:Co Classic3]を動かしていました。

Pi:Coはマイクロマウスキットなので、筐体設計・基板設計は不要です。

マウスに必要なプログラミング要素を学ぶことができました。

 

今回からはいよいよマウス研修の本番です。

筐体・回路・プログラムのすべてを設計・製作します。

 

研修の課題

は、オリジナルマウスで迷路を走る(完走?)、です。

つまり、クラシック競技でもハーフ競技でも、早いマウスでも遅いマウスでも、何でもOKということです。

 

課題がゆるふわだと製作するマウスもゆるふわになってしまうので、まずはどんなマウスを作りたいか(目標)を決めます。

 

どんなマウスを作りたいか(目標)

ESP32を使ったマウスを作る!!!

 

ESP32(ESP-WROOM-32D)って何?

秋月さんの販売ページの言葉を拝借すると、以下のとおりです。

ESP-WROOM-32は、WiFiとBluetoothが一つのモジュールに収まったワイヤレスモジュールです。SPI、UART、I2C、I2S、PWM、GPIO、SDIO、ADコンバータなど、多彩なインターフェースが内蔵されています。モジュールは工事設計認証(技適/TELEC)番号を取得済みですので安心してお使い頂けます。

http://akizukidenshi.com/catalog/g/gM-13318/

詳細な情報は[ESP-WROOM-32Dのデータシート]を読んでみてください。

 

また、秋月さんからはブレッドボードに差し込めるタイプの[開発ボード]が販売されています。

お手頃価格ですので、話題のIoTを始めたい方にはピッタリだと思います。

なぜESP32を使いたいか?

理由は主に3つです。

  • WiFiとBluetoothが使える
  • マウスに必要な機能(GPIO、ADコンバータ、PWM、I2C、SPI、フラッシュメモリ…etc)がある
  • 組み込みOS(FreeRTOS)に対応している

 

続きを読む ›

Posted in DCマウス研修, ブログ, 研修


マイクロマウス研修 Part3(岩本)

こんにちは、岩本です。

今回は、センサ基板の部分の半田付けと組み立てを行っていきます。 散々半田付けしたおかげで大分早く半田付けできるようになってセンサ基板は、特に問題なく製作完了。受光センサのエミッタの向きを間違えないように注意してください。私は足を曲げるときに全部同じ向きに曲げてしまい、曲げなおすことになりました。(笑)半田付けする前で良かったです。

 

CPU基板も足を半田付けするだけだったので簡単でした。ただ、56本の足があるので簡単ですが結構大変です。(笑)取り合えず、これで全てのパーツが揃いました。

組み立てるとこんな感じになりました。メイン基板を電源基板とセンサ基板に取り付ける時、コネクタが4か所あり若干刺しにくいので、全てのコネクタがしっかり入ったのを確認してから刺すようにしてください。

 

次回は、プログラムの書き込み等を行っていきます。

 

続きを読む ›

Posted in Pi:Co Classic3 製作記