Monthly Archives: August 2019

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

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
岩本ブログ一覧
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

こんにちは岩本です。
今回は、音楽を奏でていきたいと思います。

まず、音楽を鳴らすには、音程を作成する必要があります。
音は、オクターブ毎に2倍されていき、音階は12個なので図の様に計算していけば、欲しい音が出るようになると思います。
ちなみに私は周波数220-7902の5オクターブ分の音階を用意しました。

 
音楽は余り分からないのですが、一応、音楽の速度と音符の長さとかは定義してみました。

 

取り敢えず、スパーマ〇オっぽい音がなる様になりました。
ちなみに、私のPI:COはスーパーピーコと言う名前にしています。

続きを読む ›

Posted in Pi:Co Classic3 製作記, お知らせ


shotaのマイクロマウス研修20 アートワーク作成の続き

こんにちは、shotaです。
社員研修として、オリジナルマウスを製作しています。

[前回の記事]の続きで、アートワーク作成について書きます。

ソフト書き込み基板とエンコーダ基板

先にソフト書き込み基板とエンコーダ基板の作成に取り掛かります。

ソフト書き込み基板については、ほぼ完成です。

エンコーダ基板については、この後修正しました。

エンコーダ基板の配置を3D CADで確認

もともとエンコーダ基板はピンソケットを使って立てる予定でしたが、接触不良が発生しそうなので、
代わりに直接ハンダ付けで接続するようにしました。

3D CAD(Fusion360)に基板データを取り込んで、エンコーダの位置を決めています。

Fusion360で、上から見た図です。
この図の茶色い塊は1.5mm厚のエアギャップです。

エンコーダ[MA702のデータシート]によると、

The recommended magnet is a Neodymium alloy (N35) cylinder with dimensions Ø5x3mm inserted into
an aluminum shaft with a 1.5mm air gap between the magnet and the sensor (surface of package).

… 磁石とパッケージの表面間には1.5 mmのエアギャップを設けてね

と書かれています。エンコーダと磁石の間には適切なギャップが必要なようです。

3D CADに合わせてアートワークを修正

エンコーダ基板の形状と配置が決まったので、アートワークを修正します。

エンコーダ基板には、メイン基板と接続するためのランドを用意しました。
(メイン基板との接続ランドが少し小さいように見えますが、、、そうです小さいのです(失敗)

メイン基板にも、エンコーダ基板を接続するためのランドを用意してます。

その後、ちょこちょこと修正して、エンコーダ基板はこうなりました。

部品番号は違いますが、同じ形状同じ配線の基板です。
これは量産が簡単ですね。(接続用のランドはもちろん小さいままです。)

全体としての進捗はこんな感じです。
ソフト書き込み基板とエンコーダ基板はほぼ完成です。
次はいよいよメイン基板の配線スタートです。

次回の記事

アートワーク作成の続きで、メイン基板の配線について書きます。

続きを読む ›

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


サンプルプログラムでマイクロマウスを走らせてみた – 元Web屋のマイクロマウス製作記 Part.3

ししかわです。

前回はマイクロマウスのハードを組み立てました。

今回はPi:Co Classic3に付属のサンプルプログラムを動かしながら、
組み込みプログラミングについて学び、迷路の走破を目指します。

環境構築についてはPi:Coのマニュアルや先輩の記事を参考にさせていただきました。

Pi:Coにはステッピングモーターが2個搭載されています。ステッピングモーターとは「パルス波の数に比例して決まった角度回転するモーター」です。決まった数のパルス波を発生させれば、それに比例した距離をマウスが移動します。
逆に言えば「マウスがある距離をある速度で走るためには、ステッピングモーターに与えるパルス波を何回、どれくらいの頻度で発生させるか」を計算できればよいことになります。

とはいえ、このような処理を1から記述するのは大変です。
そこでPi:Coには「直進と超信地旋回を駆使しながら迷路を探索し、ゴールを見つける」そして「ゴールまでの最短経路を求めて、その経路を速く走る」という内容のサンプルプログラムが付属しています。
これをPi:Coに書き込めば、迷路を走破できるマウスがすぐに出来上がります!

早速動かしてみた結果がこちらです。

壁にぶつかってしまいました。原因は明らかで「壁の認識に失敗しているため」です。
マイクロマウス競技では、ロボットは迷路の情報をあらかじめ知ることができません。
そのため、壁に反射する光をセンサ(フォトトランジスタ)で検知して壁を認識しながら、
迷路の情報を組み立てる必要があります。
このとき「センサが受け取る光がどれくらい強ければ、そこに壁があるとみなすか」のしきい値は
環境によって多少変わるので、調整が必要です。

また、このセンサの値は直進時の進路の補正にも使います。
Pi:Coには左右と正面の壁を認識するセンサがついていますが、
例えば直進しているときに左右どちらかの壁に寄ってしまっていると、
壁に近いほうのセンサ値は高く、遠い方のセンサ値は低くなります。
そこで、センサ値がコースの中央を走るときの理想的な値に近づくように、左右のタイヤの速度を変更します。
このようにセンサからの入力を目標値と比較し、その結果を次の入力に反映させる制御をフィードバック制御といいます。

この他にも調整するパラメータは複数あります。

  • センサで壁を認識する際のしきい値
  • 通路の中央にマウスを置いたときの左右のセンサ値
  • トレッド幅(左右のタイヤ間の距離)
    • 回転時のタイヤの移動距離を求める際に使います
  • タイヤの直径
    • 移動距離を求める際に使います

などです。これらを定数としてサンプルプログラムに書き込みます。
試走と調整を繰り返し、最終的に迷路を完走できました!

ただし、今回使ったのは4×6マスの迷路です。
クラシックマウス競技の公式大会で使われるは16×16マス。
迷路が大きくなると、探索が終わらず時間切れになったり、
計算で求めた移動距離と実際の移動距離のズレが蓄積して、うまく走れない場合もあります。

ちなみに、マイクロマウスは全日本大会が毎年開催されています。
まずは各地方支部で行われる地区大会にエントリーし、迷路を完走できれば、
東京で開催される全国大会への出場権を獲得できます。

私をはじめアールティの社員は、研修の一環として全国の地区大会へ出場します。
次回は9/8(日)の東日本地区大会です。

次回からは大会に備えて「さらに速く走るための制御」を行っていきます。

続きを読む ›

Posted in Pi:Co Classic3 製作記


マイクロマウス研修(kora編)[30] タイマ割り込みの実装

こんにちは。koraです。

今回はタイマ割り込みを設定します。
以前HM-StarterKitを使ったときも実装していましたが、一定周期でセンサ値の取得と車体の制御ができるようになります。

タイマ割り込みの設定

マウス本体は1kHzで制御する予定ですが、この中で4つの光センサと1つの電源電圧のAD変換を行いたいので、1kHzの5倍の5kHzで割り込ませたいと思います。

CubeMXの設定

まず、CubeMXのClock Configurationタブを開いて、クロックを確認します。
STM32には複数のタイマがありますが、今回はGeneral-purpose timersの1つであるTIM2を使います。
STM32F72x/3x Reference Manualの5章によると、APB1 Timer clocksがのTIM2に供給されるようです。

次に、Pinout&Configurationタブを開いて、タイマを設定します。
左側のタブからTimersをクリックし、TIM2を選択して、TIM2 Mode and Configurationウィンドウを表示します。

  • 上段のModeの”Clock Source”を”Internal Clock”に変更します。
  • 下段のConfigurationのParameter Settingsタブを開いて割り込み周波数を設定します。
    割り込み周波数 = クロック周波数 / ((Prescaler + 1) * (Counter Period + 1))
    APB1 Timer clocksが108MHzですので、”Prescaler”を200-1に、”Counter Period”を108-1にすれば、割り込み周波数が5kHzになります。
  • NVIC Settingsタブを開いて”TIM2 global interrupt”にチェックを入れることで、割り込みが可能になります

タイマ割り込みのプログラム

割り込みが発生したときに呼び出される関数は、CubeMXで生成されるファイルのstm32f7xx_it.cにある、TIM2_IRQHandler()です。ここから各モジュールを呼び出すようにします。
5kHzで発生する割り込みに対し、前回設定したADCを順番に実行し、全体を1kHzで更新します。また、ジャイロとの通信、エンコーダとの通信、現在位置の計算(未実装)、目標軌道の計算(未実装)、モータの制御(未実装)も順番で実行し、これも1kHzで更新します。
なお、実際にタイマ割り込みを開始するには、main関数内に次の行を追加しておく必要があります。

次回

センサが一通りそろって、タイマ割り込みもできるようになりましたので、次から現在位置の計算をさせてみます。最終的には目標軌道に追従させるような制御をさせるつもりです。

続きを読む ›

Posted in DCマウス研修


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

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
岩本ブログ一覧
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

こんにちは岩本です。
今回からプログラムの編集をして行きたいと思います。
PI:CO を買われた方だと分かると思うのですがPI:COのサンプルプログラムでゴールを変えるとき、parameters.hの中を編集してゴール地点を変える必要があります。
しかし、ゴールを変えて実験したりする時に、わざわざビルドし直すのもめんどくさいので、ゴールの座標をPI:COのスイッチで変更できるようにしたいと思います。
まずは、parameters.hの中のGOAL_XとGOAL_Yを変数にしたいため、取り敢えずコメントアウトさせます。

 

今回、色んなところでGOALの値を使うので、グローバル変数として定義します。
PI:COのサンプルプログラムでは、glob_var.hで纏めて定義されていますので、同じように追加します。

 

取り敢えず、PiCoClassic3.cの中のメイン関数の所で、初期値を1としておきました。

 

次に、PiCoClassic3.cの中のswitch関数の空いてるところに、GOAL変更のモードを追加します。
プログラムの内容は、モード選択の時に使った無限ループを殆どそのまま突っ込みました。
変えたところと言えば、変数をGOAL_X(またはY)に変更したとこと、180行目から184行目でLEDが点滅するようにしたところくらいです。
点滅にしているのは、走行モードを選択しているのか、パラメータを変更しているのか見分けがつくようにするためです。

 

たったこれだけで、ゴール変更が簡単に変更できました!!
テスト走行の時に便利なので私的には、是非入れときたい機能です。
でわでわ、今回はここまです。

続きを読む ›

Posted in Pi:Co Classic3 製作記, お知らせ


shotaのマイクロマウス研修19 アートワーク作成開始

こんにちは、shotaです。
社員研修として、オリジナルマウスを製作しています。

前回までで回路設計の記事がまとまったので、今回はアートワークについて書きます。

設計思想

[HM-StarterKit]の機械部品をそのまま流用するので、それに合わせてアートワーク(主に基板形状)を作ります。

目指せ、HM-StarterKitのESP32バージョン!

アートワーク製作開始

さて、やっていきましょう。

そもそも迷路に収まるサイズなのか・・・?

マイクロマウス競技の迷路は、1区画9cm×9cmです。(詳細は公式ページを見てね)

とりあえず、この区画内に回路部品が収まるかどうかチェックしてみましょう。

なんとかなりそうです!エンコーダ基板や、ソフト書き込み基板の部品も含まれているので、割りと余裕があるのでは・・・?(これはポジティブに考えすぎでした)

それにしても、ESP32は大きいですね。

上の部分の斜線領域は何かというと、パターン・部品の配置禁止領域です。

ESP32には無線通信用のアンテナが飛び出ています。このアンテナの裏に金属があると通信に悪影響が出ます。そのため、アンテナ付近には部品はもちろんパターンも引いてはいけないのです。
これが、アートワークを作る上でかなり厄介なのです・・・

とりあえず部品を配置してみた

マイクロマウスっぽい感じで部品を配置してみました。
この後に回路を修正したので、これまでの記事の回路図と一致しない部分が有ります。ご了承ください。

今思うと、この基板も懐かしいですね〜〜〜

電源回路が右側にあったり、エンコーダ基板用のピンソケットがあったり、不要なコンデンサがたくさん右下にあったり・・・

配置を整えてみた

もう少し部品配置を整えたのがこちらです。

だいぶ完成形に近づいてきました。

今は部品を置いただけなので、次はパターンを引き始めます。

次回の記事

アートワーク作成の続きで、ソフト書き込み基板とエンコーダ基板について書きます。

続きを読む ›

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


マイクロマウス研修(kora編)[29] 光センサの動作確認

こんにちは。koraです。

今回は光センサを設定します。

光センサの動作確認
STM32のADC

光センサとバッテリー電圧の読み取りにSTM32のADC (アナログ・デジタル・コンバータ)を使用します。STM32F732にはADCモジュールが3つあり、今回使用するのはADC1です。
配線は次のようになっています。

  • 右前光センサ: ADC1_IN0
  • 右光センサ: ADC1_IN1
  • 左光センサ: ADC1_IN2
  • 左前光センサ: ADC1_IN3
  • バッテリー電圧: ADC1_IN4

CubeMXの設定

次のように設定します。

ADC_Settings

  • Scan Conversion Mode: Enabled … 複数のチャンネルを変換するためEnabledにします。
  • Continuous Conversion Mode: Disabled … 連続で変換するわけではなく、光センサのLEDの発光と同期させる必要があるのでDisableにします。
  • Discontinuous Conversion Mode: Enabled … ADCを開始後、下のNumber of Discontinuous Conversionで指定する数のチャンネルだけ変換してADCが停止するようになります。
  • Number of Discontinuous Conversion: 1にします。

Scan Conversion Modeでは、変換する順番を指定します。
各光センサは、LED消灯時に1回、LED点灯時に1回、ADCを実行し、その差分を取るようにします。バッテリー電圧は1回だけにします。つまり、①右前LED消灯時、②右前LED点灯時、③右LED消灯時、④右LED点灯時、⑤左LED消灯時、⑥左LED点灯時、⑦左前LED消灯時、⑧左前LED点灯時、⑨バッテリー電圧、という順でADCを行います。
ADC_Regular_ConversionModeを次のように変更します。

  • Number of Conversion: 9にします。
  • Rank: 1
    • Channel: Channel 0 … 一番最初に読み取りたいチャンネルを指定します。0を指定するとADC1_IN0が読み込まれます。
  • Rank: 2
    • Channel: Channel 0 …

続きを読む ›

Posted in DCマウス研修


元Web屋のマイクロマウス製作記 Part1. ハードウェアの組み立て

ししかわです。

今回から、マイクロマウス研修(キット編)を始めていきます。

まずはマウスの組み立てです。

技術部のマイクロマウス研修のゴールは「(回路から作った)自作マウスを使い、マイクロマウスの大会で完走すること」です。

しかし、回路の設計や部品の調達などは、ロボット製作の初心者には敷居が高いです。

そこで、まずは当社製のキットを組み立てて動かすことで、マウスの構成要素やプログラミングについて学習します。

使用するのは「Pi:Co Classic3」という当社製のマイクロマウスキットです。

また、教科書として「マイクロマウスではじめよう ロボットプログラミング入門」を使います。

本書を読み勧めながらPi:Coの実装とプログラミングを進めることで、ロボットプログラミングのエッセンスを効率よく学習できます。

 

最初に基板に部品をはんだ付けしながらキットを組み立てます。

はんだ付けが初めての方も、練習用の基板がついているから安心です。

完成したものがこちらになります!

このPi:Co、実は今販売されているキットと違う点がひとつあって、スルーホール(部品を挿す穴)に金メッキ処理が施されています。基板の腐食を防ぐ効果があるそうです。

はんだ付けは滞りなく完了…と思いきや、スイッチを入れてもCPU基板のLEDが点滅して起動しないというトラブルが。

再度回路図と基板を見比べながらチェックした所、電源基板の三端子レギュレータを逆向きに付けるミスを犯していました。

はんだ吸い取り機を使って、逆向きの部品を抜くまではできましたが、スルーホールがはんだで埋まったままになり再度挿すことができません。

結果、部品は挿さず、ホールの上にはんだを盛って部品の足と接続するという力技で対処しました。

この状態でももちろん電流は流れますが、衝撃に弱く、はんだが根本からポキっと折れてしまう可能性があります。今後の扱いに注意したいところです…

ともあれ、無事に組み立ては完了し、動作確認もできました。

次回からはサンプルプログラムを使いながら、マイコンの制御を学習していきます。

続きを読む ›

Posted in Pi:Co Classic3, 研修


マイクロマウス研修(安江) [Part.04] ~スラローム実装に向けて~

<公開中のブログ一覧>

 

こんにちは!安江です。

早速ですが、中部地区初級者大会、東日本地区大会の参加申し込みが始まりましたね!僕のPi:Coもなんとか完走できるまでになりましたので、参加申し込みしましたよー!

先輩マウサーの方たちとの交流楽しみにしていますので、よろしくお願いします!

 

ではでは、今回は[前回の記事]でも言っていたように、スラローム実装に向けてやったことを報告したいと思います。

 

そもそもスラローム走行ってなに??

マウサーの方には今更な説明だと思いますが、スラローム走行を一言でいうと、「停止することなくカーブと直進を連続的に走行すること」です。

(マイクロマウス用語辞典をTokoroさんがまとめられています!とっても分かりやすいです!)

Pi:Co Classic3のサンプルプログラムは、機体の動かし方などを学習するためのプログラムですので、タイムを短縮するためのスラローム走行は組み込まれておりません!

しかし、各大会でいい成績を残すためには、このスラローム走行が重要なテクニックとなりますので、頑張りたいと思います!

 

スラローム走行を導入!!

では、実際にスラローム走行を導入していきたいと思います。

まず、サンプルプログラムを元にスラローム走行用のプログラムを作成していきたいと思います。

ざっくり説明しますと、スラローム走行では左右のモータへ異なる速度を与える必要があり、そのための変数を追加する必要があります。

この時、後でプログラムを変更したりする際に、分かりやすい名前を付けるのがポイントですね!

(僕はslalom_speed_r, slalom_speed_lのように変数名をつけています)

 

左右のモータへ異なる速度を与えることができるようになったら、あとは左右の速度差をどのように指定すればきれいに曲がれるかを計算します。

僕は、[前回の記事]で紹介したようにシミュレーションを作成したので、ある程度あたりをつけることができました!

実際は、うまくタイヤがグリップしてくれていないのか、なかなかシミュレーション通りの結果が得られず苦労しましたが・・・

 

ともあれ、なんとか作成できたスラローム走行の導入テストをしたいと思います!

今回は、ニューテクノロジー振興財団HPの過去の迷路集より、1994年の全日本大会の迷路で走行テストをしてみました。

走行時の動画を撮影したので、ぜひご覧になってください!

 (今回の迷路)

 

続きを読む ›

Posted in Pi:Co Classic3, ブログ, 研修


元Web屋のマイクロマウス製作記 Part0. はじめに

はじめに

はじめまして!8月からアールティで働き始めました、ししかわと申します。

前職ではWebフロントエンド技術を中心とした研究開発に従事していましたが、個人のMaker活動が高じて物作りを仕事にしたくなり、この度転職しました。アールティのエンジニアは大半がNHKロボコンロボカップ などの出場経験がありますが、私はロボットはほぼ未経験です(ラズパイ/Arduino/M5Stackで趣味電子工作をやった程度)。そんな私でも業務でロボットを扱えるようになるために、研修を通じてロボットの修行をしていきます!

アールティでは、全社員必修のマイクロマウス研修 をはじめとして、ロボット製作の一回りを体験するための研修メニューが豊富に用意されています。また、この研修のアウトプットとして、製作記や技術記事をブログで公開することが奨励されています。私も研修を通じて得られた知見を記事にまとめていきます。

目標

  • 私が独力でロボットを作れるようになる
  • ブログの読者が記事に沿ってロボットを作れるようになる

想定読者

「Web屋の」と銘打っているので、次のようなスキルセットをイメージしています。

  • ソフト寄り(含、Cプログラミング)はなんとなくわかる
    • 構造体(struct)、共用体(union)、ポインタ(*p)、列挙型
      (enum)、ビットフィールド(メンバ名 : ビット数)、ビット演算、などを調べながら理解できる
    • 適宜、参考資料は載せますが、記事中の説明はそこそこにします
  • ハード寄り(含、機械、電気電子系)は知識ほぼゼロ
    • 「何がわからないのかわからない」的な状態から次に進むための手がかりを示します
  • micro:bit、M5Stack、Obnizなどで「はんだ付けしないものつくり」はやったことがある
    • PCからマイコンにプログラムを転送して、センサーやモーターを動かして…みたいな世界観はわかる

目次(予定)

多分、こんなことを書いていきます。

記事を追加するたびに目次も更新していきます。

マイクロマウス(キット)編←いまここ

Pi:Co classic3 というアールティ製のマイクロマウスキットを組み立てて、ロボット製作の大まかな流れを学びます。

  • ハードの組み立て
  • サンプルプログラムの実装解説
  • 追加課題の実装
    • より早くマウスを走らせるための制御テクニック
  • 仕組みを深く勉強する
    • 例えば「この部品(コンデンサ、レギュレータ等々)はなぜこの場所に必要か」が説明できるようになる
  • 大会に出る!

マイクロマウス(自作)編

DCモーターを駆動するマイクロマウスを回路から自作します。

  • 詳しくは今後追記します

2足ロボット編

2足歩行ロボットを自作します。

  • 詳しくは今後追記します

目次に挙げている研修をひととおり終えるまで数年スパンという長い道のりになると思いますが、どうぞお付き合いください!

続きを読む ›

Posted in Pi:Co Classic3 製作記, ブログ, 研修