ぱわぷろ技術日誌

ゆったりまったり技術を学んでいます。備忘録代わりのブログです。書いてあることは私見が多いので参考程度にしてください。

迷路情報の考え方~WMMC秘伝のタレ 前編~

初めましての方は初めまして。

そうでない方はお疲れ様です。

 

今回はマイクロマウス(クラシックマウス)に必須の迷路情報の考え方です。

今まで秘伝のタレに頼りきり、かつその一部を流用してただけなので、改めて解読しまとめました。

*この考え方はあくまでWMMCの標準マウス用プログラムの考え方であり、2018年現在として相応しくないであろう部分があることを前提としてください。*

 

概要

迷路の最大の大きさは

クラシックマウスで16×16(画像), マイクロマウスで32×32

となっています。

 

f:id:ss_sholaw_wmmc:20180506162815j:plain

 

この一区画あたりに格子点でxy座標を与えれば二重配列map[y][x]でマップにおける位置情報が示せます。また、この配列の中身には壁情報が入っています。1つの二重配列で現実のマップ情報を全て表せるわけですね。

 

次に歩数マップと呼ばれる二重配列smap[y][x]。マップの一区画ずつに「重みづけ」を行った後の配列で、経路作成時に優先区画を定めるために使われます。重みの値はゴール座標が0, 遠ければ遠いほど大きくなる。書き換えていない区画はMaxの256.(8bit用、32×32に対応できない?)

 

続いて進路配列と呼ばれる一次元配列route[i]。現在地、歩数マップを元にしてマウスの進むべき道…経路を記録するための配列です。探索中でも用いられていますがある程度の探索が済むと、疑似的に最短経路配列になります。(エセ最短?)

 

グローバル変数としては

PRELOC.AXIS.Y…機体の現在y座標

PRELOC.AXIS.X…機体の現在x座標

m_step…歩数カウンタ、route[i]の中身をいじる用

m_dir…機体の向いている方向を示す

wall_info…現在の機体向きから見た壁情報

 

これらを用いて求心法+足立法でやっている(と推測される)。

具体的には歩数マップの製作条件が求心法、探索時に仮最短経路生成 ⇒ 実走行 ⇒ 最短経路修正 の流れがそうなのだろうか?

概要はこんな感じでした。

f:id:ss_sholaw_wmmc:20180506162502p:plain

迷路情報(壁情報)の管理

マウスの世界では一般的に、スタート位置から見て地図と同様に北、東、南、西が定められています。この方角は絶対的な基準です。つまり壁情報配列には「(x,y)区画での北壁、東壁、南壁、西壁それぞれの有無」が記載されているわけです。

具体的には2進数を用いて保存しています。北壁を4bit目、東を3bit目、南を2bit目、西を1bit目に割り振っていますね。

標準プログラムでは、現在の機体が取得した壁情報は前壁、左壁、右壁と判断しています。しかし!これを壁情報配列に直接書き込むのはいけません。

f:id:ss_sholaw_wmmc:20180506181928p:plain

 

機体の向き次第で、前壁は北壁にもなるし、東壁や他方向の壁にもなりえます。だからこそ機体の向きを表すm_dirを用いて、取得した壁情報wall_infoを補正する必要があるんですね。

ちなみにwall_infoだけ上位bitに全く同じデータがあるのは処理の都合の為です。

忘れていましたが、m_dirでは、北向きを0, 東向きを1,南向きを2, 西向きを3と定義しています。

 

秘伝のタレではビットシフトを用いて補正を行っています。

 

具体的な事例の処理を見ながら行きます。

 

f:id:ss_sholaw_wmmc:20180506181835p:plain

 

 

Ex.の状況では機体から見て、前壁(F)と右壁(R)があるのでwall_infoでは1100のように表せます。しかし、機体は東を向いているので、この区画の壁情報としては東壁(E)と南壁(S)があるつまり0110と表せなくてはいけないんですね。ここでビットシフトによる補正を行います。

f:id:ss_sholaw_wmmc:20180506183939p:plain

 

m_dirの部分だけビットシフトすると下位4bitのうち消失するデータがありますが、消えた部分は上位4bitから降ってくるんですね。このためにwall_infoには同じ情報が二つ入力されています。(頭いいなぁ)

そして処理後には上位bitは不要なデータなのでクリアしちゃいます。

 

また1つの区画で壁が見えると隣の区画から見た壁の有無が分かるのでその処理もしていますね。

f:id:ss_sholaw_wmmc:20180506190407p:plain

ここまでで得られた値を現在地の座標で配列の中に格納すれば終わり。 

 

実は格納するデータに対しては、クリアした上位4bitに下位のデータをコピーしていたりするんですが何のための処理なのかよく分からないんですよね…最短経路導出に使うとかコメントアウトしてあるけどどうして下位bitではだめなのか…

*コード製作者からご指摘があり、上位4bitにコピーをするのは最短経路作成の際に既知区間の壁のみを考慮するためだそうです。最短経路の際は、上位4bitのデータのみで経路計算を行います。初期化の時点で上位4bitを全て1にすれば、未知区間はデッドスペース扱いになるので通過したことがある経路のみ考えて経路作成ができるそうです。*

 

とりあえず今回はここまで。

次回は(余裕があれば)歩数マップ生成と経路導出の解読回です。

 

マウス合宿…合宿先で徹夜レポートならワンチャン…

1717使用マウスの足回り制作

初めましてなら初めまして。

そうでなければお疲れ様です。

 

新歓で予想以上の人が来ててんやわんやしてるぱわぷろです。(嬉しい悲鳴)

今回は現在制作中のDCマウスの製作記として足回りについてまとめます。

参考にした方のブログを貼ります。

beshiya.hatenablog.com

 

上記ブログを参考にして、今回はクラシックマウス、1717モータ(既製品エンコーダの使用)を前提としています。

使用する3DCADは「Fusion360」。

間違い等あればご指摘いただけると幸いです。

 

ホイール設計

まず最初にホイールの方からです。基本の考え方は前述のブログに則っています。

ホイールとタイヤの区別が曖昧でしたが、要は金属などで中心から広がっているのがホイール、ゴムなどの地面との接地する部品がタイヤらしいです。

今回は工房の奥地で見つかったおもちゃのミニ四駆のタイヤを採用しました。

f:id:ss_sholaw_wmmc:20180409215332j:plain

ノギスで内径を測定し、こいつをハメるためのホイールを設計します。

まずはタイヤの厚さが入るように幅をとるのは勿論、ギアとタイヤが干渉しないように緩衝地帯を設ける必要があります。(自分は1mm)

ギア部分を設計してホイールギア一体型を設計する方もいますが、今回は既製品のギアを採用し、ギアとホイールをメタルロックで接着する方法をとります。(参考図書、苦しんで作るマイクロマウス前編 Amazon CAPTCHA

 

後編の為にもマウサーは買おうね!

 

作ったホイールが以下の通り。

f:id:ss_sholaw_wmmc:20180408192112p:plainf:id:ss_sholaw_wmmc:20180408192510p:plain

 

ここで注意すべきは内径にベアリングをハメるための穴を設けておくこと。

スパーギア(平歯車)は既製品だから最初からありますが、ホイールの外側に空けておくのを忘れやすいです。(体験談)

 

ちなみにホイールの外側はデザインが様々ですが、ホイールの軽量化が一番の目的だと思われるのでお好きにどうぞ。

ホイールの質量が大きいと安定性が高まりやすいけど、機体の慣性質量、慣性モーメントが共に大きくなるので速さ勝負をするとなると吸引などの工夫が必要になる…と思います。(勉強不足)

こいつを去年の暮れに工房に導入された3Dプリンタ「AFINIA」で造形しました。

実際に制作・組立までしたのがこちら。

f:id:ss_sholaw_wmmc:20180409215912j:plain

f:id:ss_sholaw_wmmc:20180409215917j:plain

f:id:ss_sholaw_wmmc:20180409220043j:plain

 

いい感じです!ホイールはこいつを採用しようと思ってます。

モータマウントの設計

モータマウントはアクチュエータであるDCモータと、ギアボックスで連結されているホイールの回転軸を固定するための部品です。基本的に自分で設計することが多いようですね。

制作方法はCNCで切削、DMM等の3Dプリントサービスに外注する、プリント基板で作ってみるなど人それぞれです。

自分はホイールと同様に工房の3Dプリンタで造形しました。精度もそれなりに出るし、目の前で造形するのでリードタイムが短く、経験の少なさを試行回数でカバーできる力技もできるからですね。(ちゃんと想定して設計しますが笑)

 

まずスケッチですが自分は以下のようにしました。

f:id:ss_sholaw_wmmc:20180409211400p:plain

 

二重円は内円がシャフト・ネジ貫通用、外円はナイロンナットやモータをロックするためのスペースです。1717モータはモータ固定用にM1.6の精密ねじ穴が6個空いていますが、固定に関しては2つで十分だと判断しました。実際に走るようになって、振動などの問題が出るようなら増やそうと思います。

 

左下、右下のキノコ型はマウント固定用のネジ穴です。傘になっている部分はナットをマウントにはめ込むためのスペースになっていて、ナットとネジでマウントを挟み込む構造にしました。(強度が怖い…)

 

CADをちょっと触ったことがあった初期の自分は、なぜここまでスケッチを描くのか、無駄じゃないか、と思ったかもしれません。穴の位置を試行錯誤する際にはこの方が便利だと感じました。人によってはこのスケッチにギアのピッチ円を書き込む人もいるようです。予想外に薄肉となる部分も見つかるので、多めに書き込んで全体のバランスを見ることも必要だと実感しました。

 

コイツを3Dに修正したものがこちら。

f:id:ss_sholaw_wmmc:20180409213242p:plain

 

なぜ少しだけ凹ませているのか?これは実際に組み合わせた時の干渉防止の為です。

今回使用するピニオンギアは厚めのもの(それが手近に手に入ったので)。実はコイツ、ちゃんと設計しないとホイールの緩衝地帯と干渉してしまうんですね。(体験談2)

…試行回数が稼げるのは強い。(確信)

 

そしてデータシートを見ながら作った1717モータ、実測したタイヤ部分、修正した基板シャーシをアセンブリして適当に色づけしてこんなイメージ!

f:id:ss_sholaw_wmmc:20180409214343p:plain

f:id:ss_sholaw_wmmc:20180409214326p:plain

 

マウスっぽい!!笑

残念ながらまだ完成品はできておりません!笑

しかし試作品のかみ合わせチェックは終了しており、ギアの噛みあいは良好です。

 

今回は中途半端かもしれませんがここまでです。

まず基板の修正をしないとシャーシの形とネジ穴が確定しないんですね…。

では、またの機会に。

 

6月間に合うのかなぁ…?

 

 

Mice技術交流会と電通大プチコン参加報告

はじめましての方は、はじめまして。

そうでない方は、お久しぶりです。

怒涛の日々に飲まれて疲労困憊状態のぱわぷろです。

 

前回、春休みの進捗を公開すると言っていましたがあまりに長く、自分でもまとまりがつかないので今回は春休みのマウスイベント、Mice技術交流会と電通大プチコンの参加報告という形にさせていただきます。

新作制作の進捗反省点はまた別でやります。

Mice技術交流会

2018年3月17日、東京理科大学Mice主催の技術交流会に招待いただき聴講 (ついでに発表) してきました。

マウス関係だとtapE氏のマウス相談会やうむおの飼い主さんのお話が大変勉強になりましたね。また、MRAM・FRAMのススメ、斜め制御理論、センサデータの変換、コロンビア式補正(もうこれで認識した)等、自分にとっては目から鱗の情報でしたので真剣にお勉強させていただきました。

ちなみに感化されたワイの先輩

 

 

マイクロマウス関連の情報は宇宙人の方々がブログに書いて下さったりしているのですが、やっぱり生で発表聞くと理解の具合が違う。ただ基本的な知識が必要なのはどちらも同じなので、後輩教育に活かしたいな…

マウス関係以外にも関数型プログラミングやラズパイ工作、自作サーバー、ウェブアセンブリ、知能ロボコン等の面白い内容がわさわさと出てきました。

(とゆーか皆さん技術レベル高ぇ…)

ネタにも富んでいるので発表も面白いんですが個人的なツボはもちもち君のこの発言。

 

 

今回は14歳の美少女いなかったので最年少ですね()

 

自分の発表は技術とは関係なしの内容だったのですが、皆さん楽しんでくれたようで嬉しかったです。また、今回初めて芝浦工大SRDCの班長さんともお話させていただきました。これから大会等で会う機会もあるとは思いますがよろしくお願いします。

 

とにかく楽しかったです。招待・運営していただいたMiceの方々、発表者の方々、聞いていただいた方々、本当にありがとうございました。

電通大プチコン

こちらは一週間後、2018年3月24日にて電気通信大学ロボメカ工房マウス部隊主催の電通大プチコンに参加させていただきました。

自分は自身初となる基板出走が成功したのでそれで満足しました…が電通大の一年生の方が吸引変則四輪を完成させていて驚き、某A氏のピーコの動きに感動し、後輩の赤蛙が二位になったりして感情が大きく動かされた一日となりました。

ちなみに画像は賞状もらって嬉しそうな後輩、赤蛙の主です。

f:id:ss_sholaw_wmmc:20180401162526j:plain

 

 そして旧機体であれ、動くマウスを持ってこなかったことを後悔する瞬間が来ちゃったんですね…

 

全参加者による強制サーキットプログラム実装大会始まっちゃったんですね。

正直、書くコード自体はこうすればいいということが分かり易かったので機体さえあれば実装出来たんでしょうけど…後輩の実装を手伝ってました笑

 

ちなみに競技中にはマウスあるあるの柱破壊も…

 

 

本人の機体が無事なようで何よりです。

 

サーキット実装大会で面白かったのは速度とP制御の関係ですね。

速度を上げれば上げるほど、制御が不安定で蛇行する。

制御工学の基本ですが、実際に目にする形で振動から収束、そして制御が弱すぎる挙動を体験できたのはいい経験だったと思います。

 

懇親会も楽しかったです。特にCheeseのあの方とちゃんと話す機会がなかったので今回は思い出に残る食事会でした。

電通大の方々、そして部隊長殿には招待・運営していただいたことに感謝を。同学年で組織の長として色々と話せる相手ができてとても嬉しいのです。また会うことも多いと思いますがよろしくお願いします。

 

 

以上、春休みの参加報告でした。

WMMCでも冬合宿や部内大会等ありましたが今回はここまでということで。

いつもイベントに招待してもらってばかりなのでWMMCでも対外イベントを企画してみたいと考えています

が、シーズンや他のイベントも考えたりすると中々難しい…。

考えているのは11月、文化祭である「理工展」の日にフル迷路を展開して試走会という形でやろうかな…とか。

(研究室の闇に飲まれなければ)

 

次こそは技術ネタをやります。

 

PS

電通大プチコンの集合写真を上げてなかった…

 

f:id:ss_sholaw_wmmc:20180401181152j:plain

 

青い基板が自分の機体で、自分の上に乗っているのがCheeseの方のマイクロマウス[Vert]です。

冬休みのしんちょく!~RX631へのプログラム準備~

こんにちは

年末年始の大掃除に忙殺されて反動により自堕落な日々を送るぱわぷろです

掃除してると不思議なものでね、時間が消えるんですね

発掘したマンガ読み返したり、出てきたボードゲームをプレイしたり、ゴルフクラブや木刀振り回してみたりすると…冬休みの終わりが見えてきちゃうんですね

ってなわけで少しは進捗を出さないとマズいと思い、これを書いた次第です、はい

 

今回はRX631にuart通信でのprint関数、データフラッシュ、PDGでIOピンを使いやすくするための一工夫ヘッダの移植に関する備忘録です

 

UART通信関連の移植

今回の移植関連ではあまり問題無かった部分なので主に解読について書きます

f:id:ss_sholaw_wmmc:20180107221215j:plain

黄色線で引かれているのがC言語の標準ライブラリの一つで可変長引数を使用可能となるライブラリらしい(注, 筆者のプログラムミング能力は低いです)

可変長引数とは引数の型が指定されていないってことで万事受けできる引数の形…なのかな?まぁその程度の理解で止めておこう

 

ここからが本文

f:id:ss_sholaw_wmmc:20180107220831j:plain

char型と可変長引数が引数

va_listは可変長引数の型、のようなものでva_startで初期化させる

vsprintfは可変長引数を変換して文字配列strに保存させる

va_endは可変長引数の取り扱いをやめる合図?RAMを結構食うからとかなのかな?

最後のはPDG関数でstrを送るやつですね

 

コイツの問題はプロジェクト設定で標準ライブラリの使用を制限してあることでした

プロパティからC/C++ ビルド => Settings => Standard Library => 内容

で標準ライブラリの使用の有無が決められます

これができればオッケー

後々math.hとか使うかもしれないから覚えとこ、そうしよう

f:id:ss_sholaw_wmmc:20180107224703j:plain

データフラッシュ使用

ソースコードは先輩から直にもらったものなので控えさせていただきます

とゆーか先輩のブログに乗ってるから見てください

RX631でもほぼ同じでした

blueeyes.sakura.ne.jp

正直、特に問題は無かったんですがね…

…プロジェクトのマイコン機種設定はしっかりやりましょうね!

IO入出力関数の準備

PDG使っててこれが一番厄介

前にもPDGを紹介したときに書いた気がしますがその詳細ということで笑

で、厄介な理由はですね…

PDGのIO入出力関数はピンごとに関数名が違う

これすごく面倒くさいんですよね

単純なIO出力とかだったら同一の関数で引数だけ変えて運用すればデバッグとか楽なのにって思うんですけどね……(俺だけ?)

 

そんなわけで同一関数で出力できるようにしようってわけですね

まずPDG内部の関数を見るとですね、PA0の出力関数の内部はこうなってるんですね!

f:id:ss_sholaw_wmmc:20180107231444j:plain

冗長、ハッキリ言って冗長

これだったら中身の関数だけ使えるようにすればええやん

だけど引数の名前なげーな…ってなったのでこのマクロ探し当てました

PDGが内部で作成しているヘッダ、r_pdl_io_port.hにこの部分のマクロがあるんですね

f:id:ss_sholaw_wmmc:20180107232039j:plain

この部分のマクロは変更しない方がいいです

PDG関数は内部処理でこのマクロを使っており、これらを置換等で書き換えてもどこかでミスするのでいじらない方が得策です

 

自分はこれらのマクロ部分を自分で作ったヘッダにコピペして、名称をもっとシンプルに変更しました(ex. PDL_IO_PORT_3_0 => P30)

f:id:ss_sholaw_wmmc:20180107232433j:plain

 ここまでやれば準備はOK…ってわけでもないです

実際に内部の関数を使うソースファイルには読み込まなきゃいけないヘッダがいくつかあります

とりあえずこれ入れると関数は使えます

f:id:ss_sholaw_wmmc:20180107232955j:plain

 一番上は自分のプロジェクト名でヘッダファイル名が変わりますのでPDGのマニュアル読んでください

 

以上で冬休みのしんちょく!は終わりです

実際には1608の部品使おうとか、はんだの選定、モータの発注終了など細々とあったのですが技術的なモノはこんな感じです

こんなの一日で終わるとか言わないで

 

これからテスト始まったりするし今月は忙しいかな…

でも回路テストや足回り部品の注文、モータマウント設計とか並行してちょびちょび進ませたいです

二月中に基板発注までできれば電通大ロボコンに基板出走できるかも(願望)

 

とりあえず春休み中に更新するつもりです

では、またの機会に

Cheese杯と幹事長就任

こんにちは、パワポケ9を買ってしまいすっかり沼にはまっているぱわぷろです

もう10年以上前のゲームですが面白いものは面白い

そんなゲーム

 

今回はですね…

先日参加させていただいたCheese杯の報告と幹事長就任による抱負です、はい

全く技術要素無いです…

最後に自作のイメージだけ書くから許してください

でも年内にもう一回ぐらい更新したかったのです

Cheese杯

2017.12.23に東工大ロ技研Cheese主催によるマイクロマウス学生忘年会ことCheese杯が執り行われ、WMMCとして6人で参加してきました

 

マウスパーティにて初対面なのに「行ってもいいですか?」という不躾なお願いを快く引き受けてくれだんごくんに感謝、圧倒的感謝

そして運営に携わってくれたロ技研の方々、ありがとうございました、非常に楽しかったです

当日に到着したあとは驚きがいっぱい

・某W氏がいる ← すげぇな…(まだ分かる)

・スポンサーが付いている ← さ、さすが天下の東工大やでぇ…(震え声)

・I.Sysがいる ← え!?なんで居るのぉぉぉぉぉぉ!?!?!?

 

f:id:ss_sholaw_wmmc:20171227132231j:plain

 

どこにでも現れるマウサーの方々本当に怖い…笑

こんなこともありながら、出走は強い人の後に走るのは嫌だったのでクラシックの先陣を切らせてもらいました

制御が不器用でかなりアクロバティックな動きをしていましたが、スラ探できました(よう動いたなぁ)

でもいざ最短をやろうという時にバグが発生して止まるっていう…(再現性あり)

仕方なくエセ最短で記録を残したものの、暴走ではなく止まるバグはこの機体で前代未聞

原因究明しないとなぁ…とは思いつつも次作のハード完成が優先なので放置(マップデータは大丈夫だった模様)

未来の自分よ、がんばれ("´∀`)bグッ!

 

 スポンサーとなってくださったエレファンテック株式会社さんの宣伝を入れさせていただくと

写真のようなフレキシブル基板の製作を受け持ってくれる会社でして、少し前に話題となりました配線が書けるペンを開発した会社でもあります

従来と比較しても安く請け負ってくれるとのことでみなさん、お試しください

(どちらかといえば「ものづくりプログラム」とかに向いている気がする)

f:id:ss_sholaw_wmmc:20171227133827j:plain

 

 懇親会でも様々な人とお話ししながら楽しく過ごせました

I.Sysの皆さんとももっとお話ししたかったのですが残念です…

またRMFとMice、Cheeseの次期トップの方々とお話できて良かったです(だんごくんは現役ですが)

同学年なのでこれから長い付き合い(?)になると思いますがどーぞよろしくです

 

 参加賞として小物入れケースをいただきました

表面実装やベアリング等小物部品がこれからも増えてくと思うのでがんばって開発続けたいと思います

(ってか参加者全員副賞もらえるとか豪華すぎる!)

 

最後にマウス写真

集合写真にメッギーが映れて幸せです

遺影にしようかな

f:id:ss_sholaw_wmmc:20171227142621j:plain

 

幹事長と来年の抱負

WMMCの幹事長(責任者)になることが正式に決まってしまいました…(´・ω・`)

去年、前幹事長が就任するときから大体決まっていたので覚悟はしていたものの…逃れられんかった…無念

 

というわけで総員、くれぐれもLipoを爆発させないように留意せよ!俺の首が飛ぶ!ちょー簡単に、あっさりとな!いいか!絶対だぞ!?(フラグ)

 

真面目に考えると今年は研究室に配属されるし幹事長だから書類とかもあるし面倒臭そう…でも研究室の闇に飲み込まれる前に新作を完成させないとマウス引退しそうだからやらないとね

 

新作構想としましては

テーマ 標準化が期待できる安定DCマウス

形態 二輪DCクラシック板マウス

マイコン RX631 64pin R5F5631PDDFM

モーター 安定の1717-03SR

モタドラ TB6612FNG

ジャイロ MPU6500

その他 センサは5つ

 

「置きに行ったな…」と感じる方、ごもっともです

実はですね…WMMCで完走ができたDCマウスは09年頃、伝説のY氏が最初にして最後らしいのですね…(記録がそこしか残っていない)

当時はまだステッパに勢いが多少はあったらしいが

時は流れ現代のマウスはDCが正義

フレッシュマンがDC作るのも珍しくはないです

 

そこで現代の強い人たちの知識をかき集め、ある程度後輩の見本となるようなDCマウスを制作することが第一かと思い、上記のような「よくあるDCマウス」の構想となっています

個人的には変則四輪、吸引機構の挑戦機体を作りたかったが断念

センサが5つだったりするのは標準というよりも自分のエゴです

 サークルではSTMが標準になるのだからSTMを使え

↑ じ ぶ ん で や れ

今年はマイコン開発で苦労するのは嫌なんじゃ~

 

次作の目標としましては

・大会で探索完走

・斜め走行までやりきりたい

・探索法の改良(最短走行のバグ取り)

・重みづけ最短経路作成関数の実装

ですかね(やるとはいってない)

とりあえずモータが回るまでが長いと聞くので頑張りマウス

 

それではみなさん、良いお年を!

 

e2studioでPDGを使ってやる!~ぱわぷろ奮闘記2017~

前置き

ブログ始めたはいいものの技術的に書けることねぇ…と思いながらゆとり世代(自称)のぱわぷろはゆとりなりに頑張っていた今年の技術開発を年末までに書こうと思ってはいたのでした…

 

でもこの話題は開発じゃないし、むしろ玄人や先輩に怒られそうだな…とか言い訳を続けて現実逃避し、生産終了となったVITAでパワプロやってました

はい、かなり反省しております…

 

てきとーな前置きはさておき、今回はRENESAS社の開発環境であるe2studioで、同社のコードジェネレータであるPDG2を使えるようにするまでのお話です

同じ会社だからそんなもの使えて当たり前だろ…って思った方、至極真っ当な意見だと思います

まぁその経緯はRENESAS社が官主導のもと作られた会社であることや内部の派閥争いによるものなど、色々と面白い話がありますが私は詳しくはないのでご自身で調べていただけると幸いです

(もしこの記事より簡単に有効にできる方法をご存知の方、ご指摘いただければ嬉しく思います)

 

簡潔に言いますと結構使えるe2studioPDG2というソフトは同じ会社が作っているのにも関わらずあまり連携がとれていないので、連携させるって感じです、はい

 

e2studioとPDG2って何よ?

まずそもそもこの二つが分からないって方(この記事見てる人でいるのか?)に説明しますとRENESAS社が販売するマイコン、RXシリーズの統合開発環境がe2studioです

e2studioはeclipse準拠の開発環境なので、他のマイコンで開発経験がある人にとっては馴染み深いウィンドウかもしれませんね

f:id:ss_sholaw_wmmc:20171201202722j:plain

かくいう私も以前はNXP社のLPCXpressoを使っていたのでe2studioを使おうと思ったわけですが…

 

一方でPDG2とは何か?

PDGとはPeripherial Driver Generator の略称です

これはRX等における一般的にコードジェネレーターと呼ばれるものです

突然ですがクエスチョンです

マイコン工作の最初にして最大の難関は何か?

私見ですが、「レジスタ」であると答えます

マイコンには動作周波数やIOピンの設定、各種機能の有効化(イネーブル)などのいわゆる初期設定と呼ばれるものから実際の入出力まで多種多様な命令文が決められています

本来であればこれらを1000ページにも及ぶユーザーマニュアルから解読して打ち込んでいくわけですが、マイコン初心者にはしんどいのなんのって…

そこで開発されたのがコードジェネレーターです

このソフトにおいて動作周波数や使う機能を選択、設定すると

それらのレジスタをすべて打ち終えた関数を用意してくれる優れものです

無理な設定をすると、画像のように×印で示してくれる設定になっておりまして

デバッグがやりやすいですね~

f:id:ss_sholaw_wmmc:20171201203841j:plain

加えて、各ピンがどのような役割を持っているかの確認もでき、かつ1ピンの複数の機能がイネーブルになっていたら警告が出ます

至れり尽くせりです

f:id:ss_sholaw_wmmc:20171201204435j:plain

…もうこの時点でいろんな人から「これだからゆとりは~」とか言われてそうで怖い

マイコン工作を本気でやっている人からしたら邪の道かもしれませんが初心者が32bitマイコンレジスタを叩けるようになれってのが無理難題なんですよぉ~(悲痛な叫び)

 

ただこいつも見かけほど簡単ではないです

PDGが作る関数をマニュアルから解読して上手く使えるようにならなくちゃならんし、自由度は手打ちに比べれば少ない

しかも変なヘッダとか大量に作るからROMも食うし、ある機能に関するレジスタには全く対応してないから結局手打ちでやらなくちゃならない

 

それでもレジスタを一から勉強するよりはるかに簡単なので使いたかった

将来的にはコイツなしでレジスタ叩けるのが理想ですが、一年前の自分にはそれはハードルが高すぎたのですね

 

そんなわけで何としてもPDGを使いたかったのですが…e2studioに適応させる方法が何とも分かりにくい!RENESAS社は日本企業では無かったのか!?ルネサス語でなく日本語で書いてくれ…

e2studioでPDGを使ってやる!というマイコン初心者の決意はこの時の怒りとイライラからきていたりもする

 

本題 e2studioでPDGを有効にする

インストールは頑張ってください笑

調べた結果によるとPDGを有効にするためには二つの条件が必要な模様(ソースは公式)

support.renesas.com

 

  • インテグレーションサービスをオンにする
  • COMオブジェクトを登録する(?)

何が何だかさっぱりだぜ!頼むから凡人にも分かるように言ってくれ!(哀願)

どうやらインテグレーションサービスとやらは大体オンになっているらしいのでCOMオブジェクトの登録ができていないから上手くいかないらしい

 方法は大体ここにのっている通りでいけそう…なのか?

  1. e2studioフォルダを見つけ出す(大体Cドライブ直下)
  2. e2studio→Utilitiesフォルダ内にISServer.exe(←COMオブジェクト)があるはずなのでコイツのショートカットを作る
  3. 作成したショートカットを「管理者として実行」

公式が言ってるんだから間違いねぇ!

勝った!第三部完!!

 

と思ってPDGを開きf:id:ss_sholaw_wmmc:20171201214030j:plain

  1. ファイルを新規作成
  2. 使うマイコンを詳細設定
  3. 参照フォルダはe2studio内のworkspace→PDG使いたいプロジェクト→src(先ほどのC直下と違いユーザー内にe2studioという独立したフォルダがあるはず)

で設定できるようになった!

保存しいよいよe2studioに関数を生成する!

………

f:id:ss_sholaw_wmmc:20171201214714j:plain

はぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ????????????????????????

 ぼかぁねぇ!公式の言う通りに従いましたよぉぉぉ!?

 

ああこの時の絶望が懐かしい…

これで上手くいってたらまずブログに書くまでもない話なんですけどね

この問題が解決するまでに苦労したからメモを残しているんですね、この日誌を

 

今度もe2studioの設定の方に若干問題があったんですよね

この記事書きながら過去の記録見てると意外と簡単な事実のような気がするのですがあまりこの辺には口出さないでおこう、ネットの海は怖い

参考にさせていただいたのはこちらの動画

www.youtube.com

 

事実だけ述べますと

f:id:ss_sholaw_wmmc:20171201220131p:plain

 

  1. e2studioのプロジェクトのプロパティ
  2. C/C++ビルドバーのSettings
  3. Tool settingsタブのLinker→セクション
  4. PIntPRGをセクションから除去
  5. 0xFFFFFF80→0xFFFFFFD0に変更f:id:ss_sholaw_wmmc:20171201220648j:plain

これでやっっっと関数生成できるようになりました!

あとはPDGの使い方通りにやればいけます、いけます

 

今見るとPIntRPGを消してかつアドレスを遅くしてあげて、生成ライブラリ用のスペースを作ってあげてるのかな?(分からん)

とりあえず動いてるから大丈夫ですかね?笑

 

ここまで行くのに9月ごろまでかかってたし、よくメッギーマウスRXが大会に間に合ってくれたなぁとしみじみ

あとがき PDGを実際に使ってみて

 これはモロ主観ですが関数がかなり面倒くさいですよね(ここまで推しといてなんですが)

特にIOピンの入出力がピンごとに違う関数を呼び出さないといけないのがストレス

あまりにも面倒くさいのでマクロ定義を上書きしてかつ生成しているのにマニュアルには書いてない共通関数を有効化しちゃいました

ちゃんとヘッダを読み込めばできます

 

f:id:ss_sholaw_wmmc:20171201222236p:plain

f:id:ss_sholaw_wmmc:20171201222105p:plain

f:id:ss_sholaw_wmmc:20171201222321p:plain

それ以外はかなり満足のいく出来です

自由度が下がるのは仕方ないにしても初心者がここまでできるのだから立派です

でも初期設定だけ任せて運用はレジスタ叩く方がいいかなとか思ったり…

 

いつかはレジスタ手打ちで行きたいな…

と思いつつ甘い汁から離れられないぱわぷろなのでした

そんなわけで今回はこれでおしまい

 

…マジで先輩方から「ゆとり」とか「甘え」とか言われそうな気がするな…笑

 

 

全日本大会2017終了の報告

11月18日、19日のマイクロマウス全日本大会に参加してきました。

今年度のほぼすべての精力を注いできたマウスの総決算ということで、なんとか成果を示したいな…とか思っていました。WMMCからの参加台数は15台ほどで、そのうちの14台はフレッシュマンクラスでした。完走することで脱フレッシュマンできるかどうかもあるので、自分以外の結果に対しても大変緊張していました。

 

下の写真は自分の機体「メッギーマウスRX」です。WMMCではNXP社のLPC1114というマイコンを用いた機体が標準マウスという扱いなのですが、この機体ではルネサスのRX220マイコンを使用しています。このマイコンの開発にほぼ半年かかってしまったので情弱というのは辛いものです…。

この子の開発経緯や様々なトラブルについては後々記事にしたいな…(願望)

f:id:ss_sholaw_wmmc:20171121131514j:plain

 

話が逸れた逸れた、てへぺろ( ´∀` )

 

メッギーの結果を素直に報告しますと

クラシックフレッシュマン(略称CF)クラス

予選 19位(決勝進出)

決勝 13位

でした!

スラ探が安定して決まったことが一番大きかったですね。素直に感激です!

一番うれしかったのは決勝のフル迷路で5回完走できたことですね。

(返ってきたとは言ってない)

今までの走行では持ち時間中に5回も走行なんて不可能だったので笑

反省としては既知区間加速が実装できていればもう少し上目指せたのかな…(願望)

まぁできることは全部できたので満足です。

 

予選の順位と去年の決勝進出人数からボーダーではないかと不安がってましたが、今年は決勝進出者が多かったので杞憂でしたね(待機時間は胃が痛くて仕方なかった…)

まあ決勝進出が決まった後も胃痛が絶えなかったのですが…

 

実はですね、WMMCでは決勝進出者が自分含め5人いました。(やったね!)

f:id:ss_sholaw_wmmc:20171121133638j:plain

しかし、ここで問題が発生

ボ ラ ン テ ィ ア が い な い !

講義の関係で予選終了と同時に大学へ向かう人が多く、人手が足りない問題と直面していたんですね…

しかも決勝出走1番の子が「これは予選落ちですね」って言ってボランティアに行ってしまったのに連絡がつかない…どうしようどうしようどうしよう~!!

 

って感じで大騒ぎしてました。結果として予定があった先輩に少し伸びてもらってなんとかなりました。はぁ…辛い。

 

また話が逸れた…。

予選全体としましては、無事出走したWMMCの機体12台は

全て完走

しました。(やったぜ)

来年からはエキスパートですね!(白目)

そんなわけでWMMCとして実績はある程度だせた…かな?笑

 

マウスパーティにも初参加させていただきました。自分は内気だと自負しているので参加して生きて行けるのか不安でしたが、大変楽しかったです。色々な話を聞けて嬉しかったのですが、こちらからできる話が少なかったのが後悔です…。来年はもっと技術を磨いてパーティに参加したいなと思います。

 

他競技の感想や嬉しかったことなど書きたいことは山ほどありますが、ここまで以上に長くなるので省略して、心にだけ留めておこうと思います。

 

最後に、今年のプチ学生大会に招待していただいたことから始まり色々とお世話になりました東京理科大学Miceの方々に心からの感謝を添えて閉めさせていただきたいと思います。ありがとうございました、そしてこれからもよろしくお願いします!

 

新作はDCクラシックに挑戦します…多分