忍者ブログ

マイクロマウスで考えるシステム設計

2019年12月02日
この記事はMice Advent Calendarの2日目の記事です。

昨日は kana_____s さんの2019年に買ってよかったものベスト5でした。
他の人の購入記事とかって、自分じゃ考えつかないようなものが乗っていたりして良いですよね。チェキ買うとかいう発想は私の人生にはなかったので非常に面白かったです。

また、kana_____s さんは今回のAdvent Calendarの主催者でもあります。
主催していただきありがとうございます。



さて、皆さんお久しぶりです。

前回記事が去年のAdvent Calendarで震えている鯉住です。
今年はマウスの大会にも出ていなかったので存在感かなり薄くなっている気がします。

何をしていたかというとETソフトウェアデザインロボットコンテスト(ETロボコン)という競技に取り組んでいました。
ETロボコンは、組込みシステム技術協会が主催している「組み込み技術者の教育」を目的としたロボコンです。
このロボコンでシステム設計的な内容を教えてもらったので、それを使って少しマウスのシステムを考えてみるみたいなことを書こうと思います。


ETロボコンとその感想(スキップ可能)

まずETロボコンに参加してみて他のロボコンと比べて特徴的だと思ったことこんな感じです。
 ①ロボット(ハード)は全員共通で改造なし(LEGOマインドストーム)
 ②走行成績だけでなく、ソフトの品質も評価される
 ③運営が技術教育をかなりしっかり行ってくれる

②はソフトのコードを提出するというわけではなく、自身の設計(モデル)をUMLで記述しポスターにまとめて提出します。
コレがなかなか面白くて、モデルが評価される都合上、"ロボットが速く動けばいい"ではなくて"目的に沿った設計をし第三者がわかるように記述する"ことができなければよい成績が取れないようになっています。
当然そんなうまくできるわけないので③でサポートという形をとっており、教育という目的を競技に落とし込んでいると感じました。

参加した感想は、いろいろ勉強になってとても楽しかったというのが一番です。
技術教育として月2回くらいのペースで勉強会開いてくれ、非常に勉強になりました。独学と違って有識者にその場で質問できる大きいです。(その分参加費も割高ですが。。。)
また、企業スポンサーが多くついており、企業の研修としても利用されているみたいです。
私の地区で約20チーム出場した中で所属が個人だったのは私たちのチームは1つだけでした。大半は企業の新人+少数の大学生といった構成です。この辺は結構マイクロマウスとは違いますね。
ただ、月2の勉強会で運営の審査員とかにモデルの相談とかはバンバンできるので個人勢が滅茶苦茶ハンデ背負ってるわけではなかったです。(それなりにはありますが。時間とか場所とか) 

自分のモデルを評価してもらう機会はなかなかないと思うのでぜひ皆さんも参加してみてはいかがでしょうか?



マイクロマウスのシステムを考える



ここからが本題です。ETロボコンで教わったことをマウスに適用してみます。
(私の理解で書いていくので間違っている可能性があります。マサカリ募集中です。)

※書きなぐってたら思ったより長くなってしまったので注意です。



モデルベース開発


ETロボコンではモデルベース開発を行うこと強く勧められました。
モデルベース開発とは、いきなりコーディングを始めるのではなくモデル※を用いてソフトウェアの設計・開発を行い、目的の機能を果たすモデルが完成したうえでそれをコーディングするという開発手法です。

※ここでいうモデルとは制御的な意味のモデルではなく、ソフトウェアの機能や構造・振る舞いを表現するものことを指します。UML(Unified Modeling Language)のモデルです。

モデルを使うことでソフトウェアの全体像が俯瞰でき複雑な構造・振る舞いを理解しやすくなります。
また、あとから機能を追加する際にも他部分への影響等を考慮しやすいという利点もあります。

マウス界隈では、ソフトの設計の話をしている人とか少なく[独自研究]、私含め動けばいいが先に来ていて設計はあまり気にしていない[要出典]印象があるため、この機会にモデルベース開発を学んでみてはいかがでしょうか。


モデルの3視点 機能・構造・振る舞い



モデルはソフトウェアを記述するものですが、記述の観点として「機能」「構造」「振る舞い」の3つがあります。
それぞれ異なる視点である上記によって同じものを記述することで誤解なく伝えることができます。製図における3面図と同じような考え方だと思います。

「機能」
  システムがユーザに提供する働きやサービス。ユースケース図で記述。
  マウスであれば、”探索”、”最短経路導出”、”最短走行”など。

「構造」
  システムの構成。クラス図やオブジェクト図で記述。
  マウスであれば、”壁情報は迷路モジュールが管理"、”探索モジュールは迷路モジュールを経由しないと直接壁情報にアクセスはできない”など。

「振る舞い」
  システムの動きや処理の順番。シーケンス図やアクティビティ図で記述。
  マウスであれば、"まずLEDの反射値から壁を判断し、それをもとに次行く方向を決める"、”目標速度を決めた後にPWM指令値を決定する”など。



モデル設計フロー


ETロボコンで学んだ設計フローは下記の順です。
 ①要求分析(システムの目的)※
 ②機能決定(①のために必要な機能)
 ③シナリオ整理(②の機能がどのような流れで実現されるか)
 ④オブジェクト抽出(③に出てくる"部品"を整理し必要なオブジェクトを洗い出す)
 ⑤構造決定(④の類似品をまとめたり役割を整理しクラスとしてまとめる)
 ⑥部品のつながり整理(③を果たすために④がどうつながっているかを整理)
 ⑦振る舞い決定(時間軸に沿って⑥の動作を整理)

※システムの要求分析についてはあまり教わってなく正直よくわかっていません。有識者の方いらっしゃれば教えてください。

このフローの中で、②が機能、④⑤が構造、⑥⑦が振る舞いのモデルを設計することに対応します。
また、④~⑦はまず自然言語レベルで概念を明確にする基本設計を行い、そのうえでもう一度コーディングできるレベルで詳細を詰めていく詳細設計を行います。
基本/詳細 設計のイメージ)
 基本設計:迷路モジュールが壁情報を管理
 詳細設計:Maze クラスがprivateメンバ変数 wall[x][y] を保持

よって、正確なフローは
 ① ⇒ ② ⇒ ③ ⇒ ④~⑦(基本設計)⇒ ④~⑦(詳細設計)⇒ コーディング
となります。長いですね。


実際にやってみる


私が自身の整理がてら、マイクロマウスを対象に先のフローの⑤くらいまでやってみたので一つの例として紹介します。


①②③ 要求分析&機能抽出&シナリオ整理

まずはマウスに必要な機能を考えます。私は「最短走行」と「探索走行」だと考えました。
ただし、これではまだ粒度が大きすぎるので細かく分類します。
例えば、「探索走行」のシナリオを考えると、下記のような感じになりそうです。()内はそれぞれの処理に関連しそうな部品です。
 1. 壁情報を取得する(光センサ)
 2. 迷路データを更新する(迷路)
 3. 更新した迷路データから次行く場所を選ぶ(経路選択)
 4. 次の場所に向かって走行する(走行体)
 5. 目的地にたどり着くまで1~4を繰り返す

これを見ると1~4はまだまだ粒度が大きいのでもう少し分類します。
(正直、どのレベルまで分解するべきかはよくわかっていません。私の目安としては、設計フローの部品抽出や振る舞いを考えるときに苦労しないで済む(脳死でできる)くらいをイメージしています)

1をさらに分解すると
 1-1. 発光LEDを光らせる(LED)
 1-2. 受光素子のAD値を読む(受光素子)
 1-3. 閾値を超えていたら壁がある、超えていなければ壁がないと判断する
となり、ここまで細かくなればその後の部品抽出や振る舞い記述ができそうです。

他も同様に細かくした結果が下記のユースケース図です。




④ 部品抽出

続いて部品の抽出を行っていきます。
これは先ほど洗い出した機能を果たすうえで必要なモノを拾っていく作業です。
例えば、先ほどの「壁情報を取得する」機能ですと"発光LED"と"受光素子"が部品にあたります。
また、部品同士はどれが関連しているかわかるように線を結んでおきましょう。


これをひたすら行っていくわけですが、ここで注意することとしては抽象的な概念を部品として扱わないようにしましょう。

この作業を行っている 走行体を制御するモノ=制御部 みたいなことをしたくなるのですが、制御部なんてモノは現実には存在しません。抽象的な概念をいれてしまうとオブジェクト指向からブレてしまう、、、とのことです。
私の実体験としては、あいまいな概念が出てくるとその役割が大きくなりすぎて、あらゆる役割を押し付けるようになって大変なことになりました。
頑張ってセンサからデータを取得しモータに電圧をかけるみたいに分類した方がいいです。難しいところではありますが。。。

部品をまとめたものが下のオブジェクト図になります。


(Logが空なのは設計がまだできていないためです)

四角がそれぞれ部品です。部品だけ列挙すると何をするのかわからなくなるので、赤い付箋みたいなので部品の役割をメモしています。
例として出しといてあれなのですが、この後の構造整理をちょっと見越してクラスっぽく整理してあります。
発光素子と発光LEDが光学センサにまとめられていたり、モータが一つしかなかったりするのはそのせいです。(本来この段階では左モータ/右モータみたいに実体の部品に対応している)


⑤ 構造決定

続いて先ほどのオブジェクト図から重複する概念などをまとめて整理しクラス図にまとめていきます。
すでにある程度まとめてしまっていますが、本来は左モータ/右モータを1つのモータクラスとしてまとめたり、N個の発光LEDを1つのクラスにまとめたりします。

迷路回りを書いたクラス図が下記になります。



ところどころ、コーディングっぽくなってるのは私がさぼって詳細設計に一部突入しているからです。
本来はこの時点で具体的な型などまで決める必要はありません。


⑥⑦ 振る舞い

振る舞いでは、④で洗い出した部品が具体的にどのような流れで関連するかを記述します。
まず部品Aから部品Bにデータを渡し、それに応じて部品Bが部品Cに送るデータを決めて…みたいなイメージです。

例としてモデル図を出せればよかったのですが⑤までで力尽きてしまいました。。。申し訳ありません。
いつか書いた暁にはしれっと続きの記事とか書くかもしれません。こうご期待!!



まとめ


というわけで非常にざっくりしたモデルベース開発紹介でした。
説明というより、とりあえず書きなぐった感じになってしまって申し訳ないです。あんまり整理できなかった。。。
わからない点などはぜひお気軽に質問してください。
また、間違っている点とかあったらご指摘いただけると嬉しいです。


途中でも書きましたが、マイクロマウス界隈ではこの辺の話を全然聞かないです。
ハードウェアの工夫やノウハウもいいですが、ソフトウェア設計もいいぞ!!!! ということで今回の記事を書いてみました。何らかの助けになれば幸いです!

これを読んでくれている誰かに刺さってくれないかなぁ。もっとソフト設計の記事ふえないかなぁ。




明日はううさんの粘菌かポーランドの話です! (ううってなんだ・・・?)
研究内容的なことか旅行記なのかな?
ひと味違う感性を持つ彼の記事、楽しみですね!



PR

はじめてのエレファンテック

2018年12月14日
この記事はMice Advent Calendarの16日目の記事です。

昨日の記事はnanoさんのステッパハーフのススメでした。
非常に丁寧に書かれたステッパハーフ(現マイクロマウス競技)機体の紹介記事でした。
情報満載の良い記事ですね。リタイヤなしとかヤベーなって感じです。

いきなりDCよりは、まずスッテパで堅実に作って制御を固めたうえでDCに移るという戦術は非常に賢いと思います。
上手く走れないとマジでつらいし。


さて、そんな私はというと、堅実とは程遠いフレキシブル基板でエンコーダ部を作るということに挑戦していました。
※フレキシブル基板:やわらかい基板。ぐにゃぐにゃ曲げられる。
 一般的な固い基板はソリッド基板と呼び区別するらしい。

今回の記事はエレファンテックという会社にフレキシブル基板を発注した際の注意事項やら感想やらを書きつくったものになります。


注文の背景


新作マウスの自作磁気式エンコーダ部をフレキシブル基板で実装しました。
多くの人は、エンコーダ基板を立てて実装しています。詳しくはエヌがのロボット製作日記を参照のこと。
フレキシブル基板でモジュール化することで以下の利点を狙いました。
 ・マウスが変わっても使いまわせる
 ・コネクタの位置を車軸から離せるため配線上の制約が小さくなる
 ・基板よりはフレキシブル基板の方が薄いため空間上の制約が小さくなる



この緑のぐにゃっとしてるとこがフレキシブル基板。

結論から言うと微妙な感じだったんですが、この辺りの話を始めるととっちらかるので、マウスが最短できるようになったら別途書きます。
今回のメインは発注の話です。




ここから本題


エレファンテックとは?

エレファンテックはプリンテッド・エレクトロニクス技術で世界をリードするスタートアップです。
インクジェットプリンタで銀ナノインクを印刷し、その上から無電解銅めっきを形成する独自技術でフレキシブル基板を製造しています。
エレファンテック公式サイトより。

エレファンテックは2014年に設立されたフレキシブル基板専門メーカーです。

エレファンテック株式会社
エレファンテック公式サイトより
ロゴは、おしゃれなぞうさん

インクジェット印刷と無電解銅めっきを利用した独自手法を用いることで、従来のフォトリソグラフィを用いる手法より、コストが低くリードタイムが短いことが売りだそうです。

ベンチマークとか取ったわけではないです。だれかお願いします。


エレファンテックに発注したきっかけ


2017年12月のマイクロマウス東工大杯にエレファンテックの方がいらっしゃっていて、そこで存在を知りました。

そこから、色々あって2018年8月にフレキシブル基板を発注し、今(2018年12月)に感想ブログを書くという流れです。(あふれ出る仕事の遅さ感)


発注するには?


ここからは実際に発注の流れをさらっていきます。
覚えている範囲で、私が行った順番で書きます。
発注するために必要な項目はこんな感じなはずです。
1. 作れる基板の仕様確認
2. 回路設計
3. 発注データ出力
4. 発注

エレファンテックは仕様書がわかりやすい


1. 作れる基板の仕様確認
何はともあれまずは頼むものの仕様を知らなくては話になりません。
エレファンテックのサイトから仕様書をダウンロードしましょう(リンク先の下の方)。
余談ですが、個人的に他社と比べて仕様が明確でわかりやすい気がします。
この仕様書読んでおけば間違いない(情報が散らばってない)というのが大きいのかも。

話を戻して、カタログやら仕様書やらたくさんありますね。
とりあえず、P-Flex 仕様書とP-Flex 設計ガイドライン読んでおけばいいと思います。
ちなみに、私が発注した8月にはP-Flex 設計ガイドラインはありませんでした


9月末にできたらしい

ざっと見た感じこれすごく便利ですね。
後述する技術ブログに書かれているような内容がまとまっていて嬉しいです。
日々良くなっていくのは1ユーザーとして嬉しい。

仕様書とか読む気しないんですけど


いくら仕様書がわかりやすいとはいっても、そもそもマニュアル類読む気しないという方もいるのではないでしょうか? (ホントか? そんな人間はフレキシブル基板を発注しようとか思わないのでは?)

そんな人には技術記事!
フレキシブル基板を中心に技術的な情報が記事として紹介されています。
1記事が短め(個人の感覚です)かつ画像もあって読みやすいです。
さらに仕様書の内容とかぶる部分もあるのでコレを読むことで仕様書が読みやすくなると思います。

また、中でもお勧めなのがフレックス基板にチャレンジシリーズです。
コレは東工大のロ技研に所属する学生の方がフレキシブル基板を作成するという体験記事のシリーズなのですが、作製の流れや陥りがちな過ち等とてもタメになります。

自分がやったことないことをする前に、体験ブログを探して情報集めたりすると思うんですが、公式でこの点がサポートされてるのはアツいです。
個人的にエレファンテックで最も感動した点です。


回路設計

2. 回路設計 
回路の設計に関してはあまり言うことはありません。
自分のお望みのデータを、お望みのCADで設計しましょう。
EagleかKicadを使っておくと、後述の発注データ出力のところでマニュアルを参照できるので、おすすめです。

注意すべき点としては
部品を乗せる部分には補強版を付ける必要があるため、部品実装部は近くにまとめておくと良いでしょう。補強版を付ける理由は基板が曲がったとき部品が取れてしまわないようにです。


参考までに今回発注した配線図です。

長い。
たしか、灰色の枠線が補強板を付ける部分、上部の塗りつぶされた部分がコネクタ部だからレジスト塗らないでエリアだったはずです。



発注データの形式は?


そんなこんなで気づけば仕様やらなんやらを理解し基板を設計したとなれば、発注が見えてきます。
P-Flex 注文仕様書に発注に必要な情報がまとまっているみたいなので、整理がてら埋めてみるのがよいでしょう。

3. 発注データ出力
ということで、ここからは発注データ形式の話をしよう。
発注に必要なデータは以下です。
  • アートワーク設計を含む場合
    • 回路図データ
    • 外形データ
  • アートワーク設計を含まない場合
    • 基板アートワークデータ(拡張ガーバー RS-274Xが標準のファイル形式)
      • パターン
      • レジスト
      • シンボル
      • 外形線
      • 補強板
      • 補強板指示(補強板IDと貼り付け位置が分かるもの)
  • 部品実装を含む場合
    • 部品表(部品調達代行の有無にかかわらず)
    • 実装指示


マイクロマウス界隈で主流のEagleとKicadに関してはガーバーファイルの出力方法が公式サイトにまとめてあります。ありがたい。
他のCADを触ったことないですが、今後情報を追加していく予定らしいです。
たぶん基本的には必要な情報をレイヤー別に分けてガーバー出力すればよいのではないかと思いますが。

いざ発注、その前に


さて、発注するために必要な項目について、振り返ってみましょう。
 1. 作れる基板の仕様確認 【済】
 2. 回路設計       【済】
 3. 発注データ出力    【済】
 4. 発注
3番まで修了しました。

次はいよいよ発注! 

と行く前に一回落ち着いてデータを確認しましょう。
ソリッド基板(よく使う固い基板)と違いフレキシブル基板はなかなかのお値段するので確認が大事です。

もう一度、先述のフレキシブル基板にチャレンジシリーズとかを見直すことをお勧めします。
参考までに私の経験から注意しておくことを書いておきます。
これさえチェックすればいいというものではないから必ず自分で確認するんだぞ!!!!

注意点
1. 部品実装部、コネクタ部には補強版を付ける(付けないと曲がって部品が取れるらしい)
2. コネクタ部の端子間にはレジストを塗らない(塗ると寸法精度と厚くなりコネクター装着が厳3. しい)
4. レジストの開口部からシンボル0.5mm開ける
5. はんだ付けするパッドやリード部はレジストを開口する(開口しないとはんだ付けできない)
6. レジストの開口部はわざと狭くしてパッドの浮きを防ぐ
浮きを防ぐにはできるだけ大きくレジストを被せる方が良いので、図の一番左の例のようにパッドの全周にレジストを被せる方法が最も有効です。
エレファンテック:フレキシブル基板 P-Flex™️ 設計のコツ「レジスト・シンボル・外形編」より

特に6番、ヤバいです。
驚くほど簡単に剥げていきます。
ちょっとはんだ付けに手間取っているとパッドがなくなってます。
皆さんは気を付けましょうね。


中央のQFNのパッドの白くなってる部分は全部取れました。笑える。

ちなみに、6番のリンク先には、今回紹介していないフレキシブル基板が切れないための工夫とかも書いてあるので是非一読ください。

発 注 !


最終確認も終わり、いよいよ発注です!
エレファンテック、発注の仕方はわかりづらいです。
他社みたいにポチポチ情報を埋めていけば自然と発注できるみたいなページは存在しないみたいです。見つけられてないだけかも。

前回発注時は問い合わせフォームから
質問→見積もり→発注
と行いました。

ちなみに最初の返答はこんな感じでした。

注意:2018年8月時の情報です。
>1. P-Flex PI/PET は現在個人で注文可能でしょうか。 ⇒1枚からでもご注文可能です。(1個あたりの価格は割高にはなりますが)
 >2. 注文できるのであればPIとPETの値段の差は如何ほどでしょうか。⇒PETはデータ手直し無ければ、15000円~となります。オプション追加は別途料金・日程が加算されていきます。  PIは30000円~となります。こちらもデータ手直し無の場合です。同様にオプションで上記と同様価格が加算となります。

ここからやり取りを繰り返して最終的に発注までいった感じです。
この際、担当の方が非常に丁寧で、データのミス等を指摘くださいました。
この場を借りて感謝申し上げます。そして、ご迷惑をおかけし申し訳ありませんでした。

参考までに発注見積もりを書いておきます。

主注文:
  P-Flex™PET50μm(8x76mm) 
オプション:
  補強板(3枚以下)
  ⾦メッキ+ニッケルメッキ
  コネクタ部特殊仕様端⼦部精度処理(±0.07mm) 
枚数:
  10枚
値段:
  40000円+税
注意:2018年8月時の情報です。


余談
この記事書くためにサイトに確認しに行ったらワンストップサービス最低100枚からになってるけど、問い合わせればきっと10枚とかでも大丈夫だよね…? うん。きっとだいじょうぶだいじょうぶ。
ダメだったらこの記事が誰向けなのかよくわからなくなってしまう。

受注後


発注が無事完了すると、着工開始直前にメールが届くそうです。
私の時は忙しい時期だったからか不具合でメールが遅れましたが、本来ならこのメールで発送予定とかが知らされるものと思います。

データ受領から発送まで約2週間くらいでした。

基板は、紙で挟まれた状態で届きます。写真残し忘れました…。
 紙 基板 紙 基板 紙 ・・・ 紙 基板 紙
みたいな感じです。
私が注文した材質はPET(リフロー耐熱が200℃)でしたが、基板が溶けるため普通のはんだが使えないということで、低温はんだもついてきました。ありがたい…!

実装に当たっては、白光のFX600の最低温モードで実装しましたが、基板がみるみる溶けていくということもなく、問題はなさそうでした。


まとめ


フレキシブル基板というものに初めて挑戦したのでブログを書いてみました。
ぐにゅぐにゅ曲げられる基板というのは面白く、アイデア次第で色々新コンセプト打ち立てられそうです。
ただし、やっぱり安くない買い物なので設計ミスには気をつけましょう。


私は、先述のパッドが剥げる問題で基板ダメにしたので近いうちに再発注します。







明日は、アブノーマルさんの「お酒っておいしよね2018」です。
個人的にはまったく共感できないんですが、もしかしたら明日の記事でお酒の魅力に気づくのかもしれません。楽しみにしてます。わくわく。

【備忘録】STM32F4シリーズのFlash status

2018年12月14日
STM32F4のライブラリであるSPLで定義されたFlash statusの説明がなかなか見つからなかったので備忘録として残しておく。

SPLのマニュアルずっと探してたけど、結局リファレンスマニュアルのレジスタの説明にのってた。
わかりづらい…。

本題
FLASH_Status;の定義は以下。
typedef enum
  FLASH_BUSY = 1,
  FLASH_ERROR_RD,
  FLASH_ERROR_PGS,
  FLASH_ERROR_PGP,
  FLASH_ERROR_PGA,
  FLASH_ERROR_WRP,
  FLASH_ERROR_PROGRAM,
  FLASH_ERROR_OPERATION,
  FLASH_COMPLETE
}FLASH_Status;

説明
  FLASH_BUSY:他のタスクがフラッシュにアクセス中
  FLASH_ERROR_RD,:保護されたフラッシュセクタに属するアドレスに対して、D-bus からの読出し
  FLASH_ERROR_PGS,:プログラミングシーケンスエラー。制御レジスタが正しく設定されていない時にコードによってフラッシュメモリへの書込みアクセスが 実施
  FLASH_ERROR_PGP,:プログラミング並列処理エラー。プログラムシーケンスにおけるアクセスのサイズ(バイト、ハーフワード、ワード、ダブルワード)が 並列処理設定 PSIZE(x8、x16、x32、x64)と一致しない
  FLASH_ERROR_PGA,:プログラミング配置エラー。プログラムするデータを同じ 128 ビットのフラッシュメモリ列に含むことができない
  FLASH_ERROR_WRP,:書込み保護エラー。消去/プログラムするアドレスがフラッシュメモリの書込み保護された部分のアドレスである
  FLASH_ERROR_PROGRAM,:記載見つけられず。F3のを見るに、クリアされていない場所に書き込んだことによるエラー。
  FLASH_ERROR_OPERATION,:操作エラー。フラッシュ操作(プログラミング/消去/読出し)リクエストが検出され、並列処理、配置、書込みま たは読出し(PCROP)保護エラーによってフラッシュ操作を実行できない
  FLASH_COMPLETE:正常

【備忘録】Recipe for target 'post-build' failedが解決できなかった話

2018年09月10日
SW4STM32を使っていてRecipe for target 'post-build' failedという問題に立ちあたって結局解決できなかったが、備忘録として残しておく。
結論としてはプロジェクトを新しく作り直し、ソースコードを手で移植することで対処した。

【環境】
SW4STM32(v1.14)
STM32F405RG

【発端】
これまで問題なくビルドできていたプロジェクトが突然以下のエラーでビルドできなくなる。
・gcc not found in path
・g++ not found in path

【やったこと】
覚えてる範囲で書いておく。

これまで開発してきたプロジェクトに対して
・Gitで過去の状態に戻す(プロジェクト構成等も含む)⇒変わらずgcc,g++がないと言われる。
・gcc,g++のディレクトリを確認。⇒Cygwinのgcc,g++があるディレクトリにパスが通っている。
・Cygwinをインストールしなおす。⇒変わらずgcc,g++がないと言われる。

別のPCにSW4STM32をインストールして、Gitから問題のプロジェクトを持ってきて検証。
その際、gcc,g++はMinGWとCygwinを試した。
⇒エラー内容が変わる。タイトルのRecipe for target 'post-build' failed。gcc,g++は見つけたらしい。

Recipe for target 'post-build' failedを解決するために
・ネットでググると、Recipe for target 'main.o' failedがMake.exeを更新したら直ったという人がいたので真似。⇒変化なし。
・Gitで過去のVerにさかのぼって実行⇒変化なし。
・ProjectのPropertiesからC/C++BuildのGenerate Makefiles automaticallyのチェックを外す⇒エラーが出ない。

【結局どうした】
Twitterで弱音を吐いたらWMMCの優しい人が、Wikiを紹介してくれたので、新しくプロジェクトを作り直した。
ただし、リンク先の
4.「Board」タブが選択されているので,左上の「Mcu」と書いてあるところをクリックして「Mcu」タブに切り替える。
に関して、私がやったときは上部にタブがなく、Boardしか選べなかった。(SW4STM32は昔入れた奴だからVerが古いのかも。)
幸い、使おうとしたSTM32F405RGはBoardとして選べたので事なきをえた。

後は、
C++のStdLib使うためにProject>Properties>C/C++Build>SettingからTool Setting>MCU G++ CompilerのDialectのからISO C++1yを選んだり、
motファイルを生成するように設定を変えたり
したら書き込めるようになって、今のところ動いている。

マウスに関係ない流行りのお話

2017年12月17日
※この記事は、知的ロボットサークルMiceのイベントMice Advent Calendar 2017の17日目の記事です。

昨日はもっちーの自己紹介&現状報告でした。
ぜひ頑張ってほしいですね。


さて、ここの数日のMice Advent Calendarはマイクロマウスに関する記事が並んでおります。
しかし、このAdvent Calendarはテーマ自由でマイクロマウスに関係なくてもいいそうです。


せっかくなので、今回はマウスから離れて全く関係ない話をしようと思います。


皆さま、最近流行っているものといえば何でしょうか?

 

 そう、『量子コンピューター』です! 







というわけで、今回のテーマは


「マイクロマウスに関係ない流行りのお話」


あらため


「量子コンピューター事始め
急に上司に話題振られても返せるくらいに」




難しい数式とかは全部抜かして、ざっくり量子コンピューターの話題について表面だけをなぞっていきます。

目標は上司から振られた「NTTの量子コンピューターが話題だけど、君はどう思う?」という攻撃を華麗にかわすことです。



量子コンピューターは1つじゃない! 


量子コンピューターとは、その名の通り量子効果を利用して計算の高速化を狙った計算機です。
古典コンピューターが物理的な小型化限界に到達しつつある現在、新たな計算高速化の方法として注目されています。

実はこの量子コンピューター、いくつか種類があることをご存知でしょうか?

・量子ゲート方式(IBM の IBM Quantum Experience
・量子イジングマシン方式
   コヒーレントイジングマシン(NTTの量子ニューラルネットワーク
   量子アニーリングマシン(D-Wave Systems の D-Wave

このいずれも原理が異なります。
一口に量子コンピューターと呼びますが、混同しないよう注意しましょう。




量子ゲート方式


量子ゲート方式は、
古典コンピュータがビット(0 or 1)で情報を表し、論理演算(AND OR …)を用いて計算を行うように、
状態の重ね合わせを許した量子ビットで情報を表し、ゲートと呼ばれる操作を用いて計算を行います。

何を言ってるかわからないと思いますが、イメージは古典のコンピュータの原理に量子効果を取り入れ拡張した感じです。

そのため、プログラムによって1ステップずつ実行することができますし、理論上は汎用計算可能と言われています。
(もちろんプログラミングの仕方は、専用の特殊なものとなるそうですが。)


実際に実現されている量子ゲート方式の量子コンピュータとしてはIBM Quantum Experienceが有名です。
IBM Quantum Experience はクラウドで公開されており、だれでも使うことができるそうです。
ネットさえ使えるなら、量子コンピュータをだれでも使えるってすごい。


この量子ゲート方式、量子ビットの個数で計算可能な問題の規模が決まるのですが、現在は16ビットまでが実現されているそうです。
16ビットでは古典コンピューターでも簡単に解ける程度の問題しか扱えず、古典コンピューターを超えるにはまだまだ先が長そうというのが現状です。
将来に期待ですね。


量子ゲート方式の原理とかについての詳しい話をしだすと、本格的に難しくなってくるのでこの辺で止めておきます。説明できるほど詳しくないし。
気になる方は各自で調べていただければと思います。


まとめ
量子ゲート方式は、汎用量子計算が可能と言われている反面、まだ古典コンピューターが(計算量的に)実行困難な複雑な計算をすることはできません。



量子イジングマシン方式


量子イジングマシン方式は、イジングモデルと呼ばれる物理モデルを再現し、物理現象によって自然と安定な状態に向かうのを利用して問題を解きます。
(今回の記事ではイジングモデルについては説明しません。物理の分野でよく用いられるトイモデルだと思ってください。)

量子イジングマシン方式のイメージは粘菌コンピューターとかと同じです。


都市部に餌を置き粘菌を放つと、粘菌の形成した経路が最適な経路となっている
= 粘菌を利用して経路問題を解けている

問題設定をうまく現実に再現することで、自然現象が勝手に解へと導いてくれるってことですね。


量子イジングマシンは、イジングモデルを再現する都合上、イジングモデルに焼き直せる問題しか解くことはできません。
つまり汎用計算可能ではなく、特定の問題だけを一瞬で解ける専用計算機の立ち位置になります。
よく言われるような古典コンピューターを駆逐するようなことにはなりません。共存する形ですね。


さて、となると気になるのがイジングモデルに焼き直せる問題とは一体何か?という点です。
しばしば代表例として挙げられるのが、最適化問題です。

最適化問題とは、ある条件の中で最も良い組み合わせを選び出す問題のことです。
例えば、巡回セールスマン問題ナップザック問題、etc…。

これらの問題は、問題の規模が大きくになるにつれ必要な計算量も指数的に増えていくため、古典コンピューターの総当たり先方では計算が困難であるという特徴があります。

しかし、量子イジングマシンでは、物理現象は自然と安定な状態(エネルギーが最も低い状態)へと向かうという特徴を利用し、問題設定をイジングモデルに再現することで自動的に答えが求まります。

この特徴から、古典コンピューターの限界を超えた計算規模を誇る問題に対し、有利に働くと考えられています。

また、これらの問題以外でもイジングモデルに焼き直すことさえできれば、このコンピューターで解くことができるため、ハードの開発と同様に他の問題のイジングモデルへの焼き直しも研究の焦点となっているようです。


コヒーレントイジングマシンと量子アニーリングマシン

量子イジングマシン方式は、イジングモデルを再現する方法によってさらに細かく区分が分けられています。
コヒーレントイジングマシンと量子アニーリングマシンです。


光でイジングモデルを再現するコヒーレントイジングマシン。  
コヒーレントイジングマシン概要図

最近話題になったNTTの量子ニューラルネットワークはコヒーレントイジングマシンの1つです。

図の青く円状になっている部分にコヒーレント光をパルスで送ることでイジングモデルを再現し、右につながっているFPGA等の回路で、観測および制御を行うことで計算機として成立します。

光の干渉を利用したこのマシンですが、
光の経路としてkm単位の光路を必要とするため小型化が難しい、
本当に量子効果を取り入れられているのかといった疑問の声もある、
といった課題も抱えているようです。

とはいえ、日本発の量子コンピューターですし今後の研究に期待していきたいです。




もう一つの量子イジングマシン方式の量子コンピューターとして有名なのがD-Waveです。
極低温による超電導を用いて、キメラグラフ構造という特殊な組み方を行うことで、量子系のイジングモデルを再現しています。

D-Waveは既に商用化されており、億単位の値段で売買されています。
NASAやGoogleが購入したことで話題になりました。

また、D-Waveは今年2048量子ビットを実現しており、個人的に最先端の量子コンピューターだと思います。



まとめ

量子イジングマシン方式は、すでに商用化されており古典コンピューターを超える計算速度を実現している反面、最適化問題と呼ばれる特定の問題しか解くことができません。



今回の記事のまとめ


現在、量子コンピューターと呼ばれるものには3種類あります。

  • 量子ゲート方式
  • 量子ネットワーク方式(コヒーレントイジングマシン)
  • 量子アニーリングマシン
です。

一緒くたに量子コンピューターと呼ばれることが多いですが、いずれも原理が異なり長所短所があります。

ニュース等で量子コンピューターについて見るときは、そのあたりに注意すると少し見方が変わってくるかもしれません。

また、もっと知りたいという方へ
量子コンピューターAdvent Calendarを見つけたので読んでみると面白いかもしれません。



「NTTの量子コンピューターが話題だけど、君はどう思う?」



「同じ種類の量子コンピューターであり既に実用化されているD-Waveに勝てるか、が焦点だと思います。日本発として頑張ってほしいところですね。」



こんなテーマにするんじゃなかった。


明日はあやたか君の音系の話です。
こうご期待。

 | HOME | 次のページ »