1 of 83

マイクロマウス

"Zirconia"紹介

中川範晃�アールティマウス部

マイクロマウス合宿2024

2024年6月22日発表資料

2 of 83

目次

  • 自己紹介
  • Zirconia(ジルコニア)とは?
  • Zirconiaコンセプト(2019年1月当時)
  • Zirconiaの想定の開発スタート方法
  • Zirconiaのスペック
  • Zirconiaの走行動画1 まついさん走行
  • Zirconiaの走行動画2 コヒロさん走行
  • Zirconiaの代表的な大会成績
  • Zirconiaの設計情報公開先 Bitbucket
  • Zirconiaのサンプルプログラムコーディングルール
  • ZirconiaのサンプルプログラムAPI index.h
  • Zirconiaのハードウェアの設計情報一式
  • 大会に出るために最低限必要なプログラム
  • Zirconiaを使ってみた中川所感
  • Zirconiaでの課題

3 of 83

自己紹介

会社の新製品や

ブログ紹介、展示会のお知らせなど

電源回路の

データなどを公開

会社で行った自作マウス研修の開発レポートや

大会参加レポートなどを公開

4 of 83

Zirconia(ジルコニア)とは?

Zirconiaは、通算8回の全日本MM優勝者であるまついさんが2019年にハードウェアの設計&製造情報を公開したマイクロマウスです。

Zirconiaは、シンプルなハードウェアで、過剰な軽量化や低重心化、高価な部品を必要としません。ロボトレースでプリント基板を起こして作ったロボットで出場したことがある、またはサークルに所属しマイクロマウスサイズ経験者が近くにいるなら作れるレベルのロボットであることをコンセプトにしています。

さらに、コヒロさんがサンプルプログラムとしてデバイスドライバを書いて上記のハードウェア情報もまとめてBitbucketにApache License 2.0で公開してくれています。

5 of 83

Zirconiaコンセプト(2019年1月当時)

最新技術と部品も使いつつ、最低限をギュッと詰め込みシンプルで扱いやすく

1.最新技術

① 廃番予定の部品の更新(ジャイロ:MPU6500→ICM20468、エンコーダ:AS5050→MA300)

② DMMの3Dプリントサービスを利用(例えば歯車付きのホイールの場合、切削に比べ部品点数:3→1、コスト:1/3)

2.二輪という一番シンプルなハード

駆動の構成がシンプルなだけでなく

・組み立て、再分解が容易な機構でメンテナンスしやすい

・電子回路も、最小部品サイズ:1608(最近のトレンドは1005)として修理しやすい等、マイクロマウスのなかでは扱いやすい構成とした。

文章引用:ハードマニュアル.pdf

6 of 83

Zirconiaの想定の開発スタート方法

  • 想定する対象者
    • マイクロマウスや他のロボット競技、業務などで自分でロボットを設計、製作した経験がある
    • 身近にそういった経験者がいる
  • 想定スタート方法
    • 設計データを入手、必要に応じ自分で設計変更をしたのち、部品発注、製作をする
    • 機構部品、部品実装済電子基板の提供を受け、自分で製作

中川の例:

市販キット(Pi:Coシリーズ、HM-Starterkit等)で完走

→自作ロボトレース or 自作クラシックマウスで完走

→Zirconiaで完走

→自作マイクロマウスへ

基礎ロボット技術習得

回路・基板設計習得

制御関連習得

深い世界へ

7 of 83

Zirconiaのスペック

CPU

クロック/ROM/RAM/DataROM

ARM系 / STmicro STM32F413CH

40[MHz] /1.5 [MB] / 320 [kB] / 0 [kB]

バッテリー

CPU系: LiPo/ 1 [セルor本]/ 3.7[V]/ 50[mAh]/ Banggood

モータ系: CPU関係と共用

走行用モータ

DCモータ 2 [個] Mk06-4.5

モータドライバIC:DRV8836

走行用以外のモータ

その他1無し

その他2無し

センサ

赤外線センサ:4 [個] / OSI5FU3A11C+LTR-4206E / 距離センサ(反射光量をAD変換) /

ジャイロセンサ:1 [個] / ICM20648 / デジタル値出力型 /

エンコーダ:2 [個] / MA300 / 磁気式 /

サイズ 長さx幅x高さ[mm]

重量[g]

70x39x13 [mm]

12[g]

動輪

補助輪

2輪/直径13mm 幅3.5mm

補助輪なし

ロボット構造

左右(2輪)速度差方式

直進最高速度/加速度/旋回時速度

2[m/s]/ 8 [m/s/s]/ 0.75[m/s]

開発環境

STM32CubeIDE

CAD:KiCAD

8 of 83

Zirconiaの走行動画1 まついさん走行

9 of 83

Zirconiaの走行動画2 コヒロさん走行

10 of 83

Zirconiaの代表的な大会成績

2020年度全日本大会

上位の順位

全走行完走している

11 of 83

Zirconiaの設計情報公開先 Bitbucket

12 of 83

Zirconiaのサンプルプログラムコーディングルール

「初心者がわかりやすく使いやすいように、HALライブラリを使ってシンプルで使いやすいドライバを心掛けた。」サンプルコードを書くにあたって工夫したところ。

  • 命名規則をつける

関数名なら「ファイル名_動詞+〇〇」などの規則を決めて、変数の初期化ならreset、走行に関するものならrunなど。

  • 画面内に収める

スクロールしなくて済むように書く。書きづらくない程度の長さでそこそこ読みやすい短さに。

  • ファイルは分けるがヘッダーは一つ

index.hを宣言すればどの関数も使えるし、説明書としてのコメントも書いたので、ここを見ればどの関数でも使える。

  • 余計なこと(コメント)は書かない

コメントを書かなくてもわかるくらいわかりやすくコードを書くのが最良。コメントを修正し忘れて間違ったコメントが残って後から混乱する。

  • スコープを意識しよう

できるだけコードを小さく。ファイル間を跨ぐグローバル変数を使わない、関係ないローカル変数が少なくなるように。管理する変数や関数が増えてくるとバグの温床となるので、生きている変数や関数がなるだけ少なくなるように。

13 of 83

ZirconiaのサンプルプログラムAPI index.h

URL:https://bitbucket.org/kohiro/zirconia_sample/src/master/software/Module/Inc/index.h

14 of 83

Zirconiaのハードウェアの設計情報一式

ガーバーデータ

基板実装部品表.csv

基板実装部品表.xlsx

PCBgogoへの実装依頼用データ

fusionPCBへの実装依頼用データ

KiCadデータ

回路図

発注用ガーバーデータzip

部品リスト

15 of 83

Zirconia(v.1.0)

回路図

16 of 83

センサ配置の解説

「半区画先を見るセンサを持ったマウスの場合、5つのターン(大径90度、180度、45度、135度、斜め90度)を組み合わせた斜め走行においては、すべてのターンの直前において壁切れ補正が可能です。どのような迷路パターンでも例外はありません。そのため、壁切れ前にターンに入ってしまうことを防ぐ機構がかなり有効になります。」

17 of 83

大会に出るために最低限必要なプログラム

  1. 壁有無判断
  2. モード切替実行
  3. ログ保存
  4. 速度・角速度制御:
    1. 車輪速度推定、車体速度・角速度推定
    2. フィードバック制御(PID等)
  5. 一区画前進:位置制御(軌道生成、加速度設定)
  6. 超信地旋回:角度制御(軌道生成、角加速度設定)
  7. 壁距離姿勢制御
  8. 迷路アルゴリズム実装:左手法
  9. 迷路情報利用:足立法
  10. 最短走行

18 of 83

Zirconiaを使ってみた中川所感

  • リファレンス機としてハードウェアが完成されているので、いろいろな制御を試したり迷路プログラムのデバッグ機として使いやすい
  • 走行に関して重心バランスの良い機体であり、限界(非吸引)まで安定した走行制御ができるようになれば、自作機に移植する段階で限界突破(数G加速)できる
  • この機体を使いこなせないと自作機(吸引機体)を造っても早くはならない

19 of 83

Zirconiaでの課題

  • 部品がいくつか廃盤&市場在庫切れ
  • 書き込み速度が遅い
  • 表示用LEDが見づらい
  • 通信コネクタ抜き差し時に破損しやすい
  • プッシュボタンの使用回数制限
  • 左壁距離測定用LEDの不具合
  • 磁気式エンコーダのリニアリティの悪さ

20 of 83

Zirconia v.2.0の紹介

21 of 83

目次

  • Zirconia v.2.0での変更点
  • Zirconia v.2.0のスペック
  • Zirconia v.2.0の特徴
  • Zirconia v.2.0の設計情報公開先 Bitbucket
  • 部品表1 メカ系&DIP部品
  • 部品表2 SMD部品
  • Zirconia v.2.0回路図A
  • Zirconia v.2.0回路図B
  • KiCadフォルダ内に3D STEPデータ(メカ含)も同梱
  • 最初からJLCPCBに表面実装依頼を想定
  • JLCPCBの部品&実装費(5枚実装時)
  • PCBgogoで基板実装
  • Zirconia v.1.0と足回りの互換性あり
  • Zirconiaチルドレンを募集中

22 of 83

Zirconia v.2.0での変更点

  • Zirconia v.1.0の問題点の解消
    • 廃盤品の変更と入手性がよいものに
    • ブートモード時にHighになるポートを避ける
    • 表示用LEDの位置
    • 表示用緑LEDの明るさ(抵抗)
    • 基板配線の整理(リファクタリング)
  • 実装&加工コストの低減
    • 全ての実装部品を表面へ(IMU部品)
    • 充電ICを低価格品に変更
    • 電源コネクタをPicoBladeに変更
  • ST-LINKの追加
    • 書き込み速度のアップ
    • プッシュボタンの使用頻度低減
    • デバッグ機能を使えるように
  • 通信コネクタの抜き差し
  • 電池の充電速度増
    • 定電流50mA→100mA
  • 磁気式エンコーダの計測クオリティアップ
    • 磁石を磁束密度アップ品へ
    • モータマウントに磁気式エンコーダと磁石の位置決め治具機能を追加
    • 分解能の高いセンサICに
  • 3Dプリントギヤから切削ギヤへ(戻す)
  • 基板配線都合による箇所
    • 3VレギュレータのENピン使用による電源ON/OFF
    • モータ用コンデンサを100uF→20uFに

基板重量 0.98gUP

電池重量 約1gUP

足回り重量 約2gUP

23 of 83

Zirconia v.2.0のスペック

CPU

クロック/ROM/RAM/DataROM

ARM系 / STmicro STM32F411CE

100[MHz] /512 [kB] / 128 [kB] / 0 [kB]

バッテリー

CPU系: LiPo/ 1 [セルor本]/ 3.7[V]/ 100[mAh]/ 不明

モータ系: CPU関係と共用

走行用モータ

DCモータ 2 [個] NFP-D0612

モータドライバIC:DRV8836

走行用以外のモータ

その他1無し

その他2無し

センサ

赤外線センサ:4 [個] / OSI5FU3A11C+LTR-4206E / 距離センサ(反射光量をAD変換) /

ジャイロセンサ:1 [個] / ICM-42688-P / デジタル値出力型 /

エンコーダ:2 [個] / MA730 / 磁気式 /

サイズ 長さx幅x高さ[mm]

重量[g]

70x39x13 [mm]

15.7[g]

動輪

補助輪

2輪/直径13mm 幅3.5mm

補助輪なし

ロボット構造

左右(2輪)速度差方式

直進最高速度/加速度/旋回時速度

??[m/s]/ ?? [m/s/s]/ ??[m/s]

開発環境

STM32CubeIDE

CAD:KiCAD

※Zirconia無印と違うところ

Down

UP

UP

Down

24 of 83

Zirconia v.2.0の特徴

  • 磁気式エンコーダを高分解能&リニアリティ改善により移動平均フィルタ不要(多分)
  • 書込みが早いのでパラメータ調整がはかどる
  • 電池容量を増やしたので調整時間&走行時間が長くとれる
  • 切削ギヤなのでギヤかみ合わせ調整のための軸間距離調整が簡単(ギヤ慣らし不要)

25 of 83

Zirconia v.2.0の設計情報公開先 Bitbucket

フォークしてブランチを分けた

26 of 83

Zirconia v.2.0ブランチのダウンロード方法

27 of 83

部品表1 メカ系&DIP部品

28 of 83

部品表2 SMD部品

29 of 83

基板実装部品 Digi-key My Lists

30 of 83

Zirconia v.2.0

回路図A

31 of 83

Zirconia v.2.0

回路図B

32 of 83

KiCadフォルダ内に3D STEPデータ(メカ含)も同梱

自作する時に各パーツを流用するのもOK。

オンラインにも3Dデータを公開

KiCad Libraries License CC-BY-SA 4.0

33 of 83

最初からJLCPCBに表面実装依頼を想定

JLCPCBに標準在庫がないので

以下のSMD部品は手実装

  • MA730
  • ピンヘッダ2x5
  • STLINK-V3MOS

他DIP品の手実装は別途必要

34 of 83

JLCPCBの部品&実装費(5枚実装時)

163.56ドル

25,721.85 円/5枚

+OCSから税関と手数料の請求書

2600円

 ↓

5,196円/枚

35 of 83

PCBgogoで基板実装

OCSから輸入関税4800円

合計72912円/5枚

 ↓

14,582円/枚

36 of 83

Zirconia v.1.0と足回りの互換性あり

軽量化したい

人はこちらを

約2g軽量化

37 of 83

Zirconiaチルドレンを募集中

Zirconiaを使って開発をしてみませんか?

情報交換や相談などを目的とするメンバーとして

一緒にやる仲間を募集中です

38 of 83

開発資料参考

39 of 83

ブートモード時のピンの話

STM32F413

BOOTモード時に出力設定:

 PA9(USART1-TX)、PD5(USART2-TX)、PB10(USART3-TX)、PB13(CAN2-TX)、

 PA6(SPI1-MISO)、PC11(SPI3-MISO)、PE13(SPI4-MISO)、PA11&PA12(USB)

BOOTモード時に適正なレベルに保たないとBOOTモードが意図通りに機能しない:

 PA10(USART1 RX)、PD6(USART2-RX)、PB11(USART3-RX)、PB5(CAN2-RX)、

 PA5(SPI1-SCK)、PC10(SPI3-SCK)、PE12(SPI4-SCK)

STM32F411

BOOTモード時に出力設定:

 PA9(USART1-TX)、PD6(USART2-TX)、PA6(SPI1-MISO)、PB14(SPI2-MISO)、PC11(SPI3-MISO)、PA11&PA12(USB)

BOOTモード時に適正なレベルに保たないとBOOTモードが意図通りに機能しない:

 PA10(USART1 RX)、PD5(USART2-RX)、PA5(SPI1-SCK)、PB13(SPI2-SCK)、PC10(SPI3-SCK)

参考資料:STM32 microcontroller system memory boot mode

https://www.stmcu.jp/design/document/application_note/51328/

W谷さんからアドバイスいただきました

40 of 83

左壁距離測定用LED(PA6)のブートモード時の出力設定

STM32F413の時

STM32F411の時

同じように出力となるため、もともとこの問題を抱えていたらしい

W谷さんからアドバイスいただきました

41 of 83

書込&通信用SRコネクタケーブルの抜き差し時破損

1日で2回ほど千切れる

抜き差ししやすい取っ手付きの、

コード付SHコネクタDG01032-0056-01

使えばよかった(黒と赤が逆なので色は無視するか入れ替えるか)

ケーブルアセンブリ ソケット

A04SR04SR30K152B

SRはSHコネクタもつかえるみたい

42 of 83

エンコーダデータが波打っている

サマコバ磁石(SS28)円柱型Φ1.9x1(mm)径方向 表面磁束密度:265 mT

磁気式エンコーダMA300 ICと磁石の隙間:?(0.5mmと想定)

サマコバ磁石(SS28)円柱型Φ3x1(mm)径方向 表面磁束密度:218 mT

磁気式エンコーダMA730 ICと磁石の隙間:0.5mm

Zirconiaはもともと定格を下回っている。IC変更により最低限必要な磁束密度が上がり、v.1.1ではどうやら悪化した...

固定Dutyで走らせてみたら、エンコーダデータが波打ってる...

43 of 83

エンコーダと加速度センサとの相補フィルタ

上位者に話を聞くと振動的なのはよくある事らしい。加速度センサと併用してフィルタリングによる速度推定を行うとのこと。

44 of 83

プログラムの書き込み速度

12.208秒

STM32CubeProgrammerを使った書込み

書込み用HEXファイル容量例:277KB

パラメータ調整時には

頻繁に書き込むので、

地味に時間が取られる。

45 of 83

プッシュボタンを頻繁に押すと潰れる

プログラム開発中は書込み頻度が高いため、プッシュボタンを頻繁に押すことになる。そうするとボタンが潰れてきて反応が悪くなる。

新品のボタン

反応の悪くなったボタン

46 of 83

磁気式エンコーダ:MA300→MA730

ABZインクリメンタル�10bit出力エンコーダ

ABZインクリメンタル�12bit出力エンコーダ

どうせ変えるなら同等品のMA302より

分解能が高いほうがええやろうと。

ディスコン

対応

47 of 83

IMU:ICM-20648→ICM-42688-P 

ディスコン

対応

市場在庫はまだあるので、

変えなくてよかったのですが。

48 of 83

マイコン:STM32F413→STM32F411

STM32F413は市場在庫切れ

ピン互換のSTM32F411に変更

(Zirconiaの回路図にも記述あり)

FLASH:1.5MB→512KB

RAM:320KB→128KB

49 of 83

ブートモード時の不具合解消のためピン配置の変更

ブートモード時Highになるピン

表示LED

光る

壁センサ用LEDがON

大電流が流れる

入れ替えた

移動

SWD

追加

基板配線の都合で移動

Zirconia v.1.1

Zirconia v.2.0

50 of 83

ブートモード時の電流量(半ショート状態)解消

Zirconia v.1.1

ブートモード時:0.225A

Zirconia v.2.0

ブートモード時:0.032A

51 of 83

表示用LEDが電池に隠れて見えないのでLEDの位置変更

Zirconia v.2.0

Zirconia v.1.1

電池を上に

ずらして

覗き込む

52 of 83

表示用緑LEDの明るさアップ

緑LED型番:HSMG-C190

他色に比べてVfが大きい

→電流制限抵抗を減らす

変更前(1kΩ)      変更後(470Ω)

53 of 83

基板配線の整理

Zirconia v.2.0

Zirconia v.1.0

マイコン下パッドからビアを排除

電源パワー系を下にまとめる

54 of 83

全ての実装部品を表面へ(IMU回路部品)

Zirconia v.2.0

Zirconia v.1.1

Zirconia v.2.0

Zirconia v.1.1

裏面には何も実装部品を置かない

55 of 83

ST-LINKの追加

USB-UART変換

+リチウムイオン電池充電

SWD(Serial Wire Debug)

+USB-UART変換

+リチウムイオン電池充電

Zirconia v.2.0

Zirconia v.1.1

56 of 83

SWD経由によるプログラムの書き込み速度アップ

1.778秒

書込み用HEXファイル容量例:227KB

Zirconia v.2.0

Zirconia v.1.1

12.208秒

57 of 83

デバッグ機能を使えるように

STM32CubeIDEのデバッグ画面

58 of 83

通信コネクタの種類を変更

Zirconia v.2.0

IDCコネクタを指で取る

Zirconia v.1.1

SR(SH)コネクタを爪で取る

抜き差しがしやすくなった

59 of 83

電池の充電速度微増

50mAで充電

(50mAhの電池を想定)

Zirconia v.2.0

Zirconia v.1.1

100mAで充電

(100mAhの電池を想定)

(ついでに低価格ICに変更)

60 of 83

磁石の変更と位置変更

61 of 83

エンコーダ基板の位置決め治具を兼ねたモータマウント

エンコーダ基板に実装されているセンサICがモータマウントに嵌るようにした

磁石をできるだけ

センサICに近づける

62 of 83

その効果:一定Duty比で回したときの速度推定

固定Dutyで走らせてみたら、

エンコーダデータが波打ってる...

Zirconia v.2.0

Zirconia v.1.1

大幅に改善されている

63 of 83

磁気式エンコーダICをMA302から分解能の高いMA730に

左右モータデューティ比0.2時エンコーダ計測速度(1kHz計測)

MA302の場合

MA730の場合

カクツキが減らせている

64 of 83

足回り:ベアリングホルダー方式

画像引用:

Zirconia製作マニュアル

マイクロマウスの足回りについて

磁石

ベアリング

なおフィスさんの

「マイクロマウスの足回りについて ソフト屋さんが考えるシンプルな足回りの紹介」を踏襲。

65 of 83

基板配線都合による変更

Zirconia v.1.0

スリープモードで95nAの消費

レギュレータのEnableピンで電源ON/OFF

バッテリ電圧検出の

消耗をFETでカット。

※電圧検出用分圧抵抗は、ここに入れられるとよい

Zirconia v.2.0

他には、実装依頼を前提に

1608サイズ品から

1005サイズ品に変更

66 of 83

JLCPCB実装依頼方法

67 of 83

JLCPBC実装依頼1 データ

実装依頼で必要なデータは3つ

Zirconia_v.2.0.zip

ガーバーデータ

bom.csv

部品データ

positions.csv

部品配置データ

68 of 83

JLCPBC実装依頼2 ガーバーデータアップロード

Zirconia_v.2.0.zip

ガーバーデータを

アップロードした

直後の画面

69 of 83

JLCPBC実装依頼3 基板の厚み選択

0.6mmを選択

色は好みで選択する

納期や価格が増える

パッドに乗せる半田を、有鉛か無鉛か金メッキか

基板は3種類

本体、エンコーダ基板、

書込&充電基板

70 of 83

JLCPBC実装依頼4 実装枚数選択

ON

特に変更なし

画像の通りになってればOK

実装したい枚数を入力

デフォルトでは5枚

71 of 83

JLCPBC実装依頼5 カスタム設定

特に変更なし

72 of 83

基板の確認

次へ

73 of 83

部品データと位置データをアップロード

bom.csv

部品データ

positions.csv

部品配置データ

74 of 83

部品データの確認画面1

JLCPCBに在庫がある場合、候補部品が自動選択されるので、上に上がる

75 of 83

部品データの確認画面2

2x5ピンヘッダは部品が違うのでチェックを外す

76 of 83

部品データの確認画面3

部品に間違いがないかチェックしたら次へ

選択されてない部品は置かない

77 of 83

部品配置確認&編集画面1

78 of 83

部品配置確認&編集画面2

1ピンの向きが違うため

部品リストの実装向きを見ながら、部品の向きを修正していく

79 of 83

部品配置確認&編集画面3

1ピンの向きが違うため

部品リストの実装向きを見ながら、部品の向きを修正する

向きを変えるアイコン

80 of 83

部品配置確認&編集画面4

修正後の

画像

問題なければ次へ

81 of 83

費用確認画面

適当なものを選択

DIY「Robot」

金額に納得したら

カゴに投入

82 of 83

カゴの中身

チェックアウト

83 of 83

一週間ほど待つと...

こんな感じで

基板が届きます。

あとは残りの表面実装部品や

リード部品を頑張って実装する。