Monthly Archives: June 2018

DCマウス研修(吸引編)[14] 迷路を走行

こんにちは
inukaiです。

モータ、光センサを確認したところで、実際に走行しました。
とりあえずジャイロは未使用です…

いままでも、社内やマウス合宿で走行させてはいたのですが、壁制御や光センサの調整がうまくいかなかったりで迷路を安定して走れていませんでした。

しかしついに安定して4×4を走行できるようになりました!
走行時の動画はこちら

行き詰っていた点としては、

・超信地旋回の際、停止時の振動により旋回角度の計算がずれる → 停止時間を多めにとって解決

・壁制御をかけると直進できない → 迷路中心にいるときの光センサの値を環境ごとに取り直す

・壁制御のゲインを上げすぎると壁がなくなるところで大きくぶれる → 壁制御ゲインを下げて、壁なしでもそこそこ走れるように調整しておく

ひとまず上記を意識することで4×4の迷路を安定して走れるようにできました。

まだまだゆっくりな走行ですが、ジャイロを使うなどして迷路のサイズを大きくしても安定するようにしていきたいと思います。

それではまた次回!

続きを読む ›

Posted in DCマウス研修(吸引編), ブログ, 研修


MacでルネサスのRX631マイコンの開発〜CS+のMAIN関数が実行されるまでを理解しよう〜

おはようございます。青木です。
MacでルネサスのRX631マイコンの開発のブログが思っていた以上に見られていたので、朝から記事を書いていますw。

第1回目は、クロスコンパイラを作るためのコンパイラを作る方法を紹介しました。
第2回目は、RXマイコンのクロスコンパイラを作る方法を紹介しました。

第3回目は、C言語のMAIN関数までの道のりを説明しようと思います。
前回までで、アセンブリ言語での環境は整っています。
しかし、今の時代、CPUの処理が速くなったので特別な処理以外は、C言語で記述するのが普通になっています。
そこで、CS+の環境と同じような仕組みでC言語の開発環境を構築する方法を紹介します。

まずは、マイコンの動作とC言語の動作の違いを再確認します。
マイコンは、電源投入時(Power On Reset)またはリセットを行うとプログラムの先頭アドレスから開始します。RX631は0xFFFF_FFFCからベクタ(飛び先のアドレス)を取得してプログラムカウンタにセットして処理を開始します。
C言語は、MAIN関数から始まります。
変数に関しては、マイコンの場合、電源投入時のメモリの値は、不定値です。0かもしれないし、1かもしれない状態です。しかし、C言語は、変数を初期化しない場合、一般的には、0に初期化されています。
目に見えて違うのは、この2点だけですが、他にも、割り込みの設定など細かいことがあります。

では、CS+の動作を見てみましょう。
CS+では、MAIN関数に行く前に、resetprg.cのファイルを実行してからMAIN関数を実行しています。
resetprg.cでは、PowerOn_Reset_PC(void)関数が用意されており、そのなかで、

が実行されています。

上記で何をしているかは、ルネサスのwebにRXファミリ用コンパイラスタートアップの紹介の資料があり、これを一読すると上記の流れがなんとなくわかります。

1行目のset_intb関数ですが、CS+の組み込み関数として提供されています。他にもいろいろあるので、一度ルネサスのwebページの組込関数の一覧を見ておくと良いかもしれません。
set_intb関数では、可変ベクタテーブルの先頭アドレスを設定しています。詳しくは、ルネサスのwebで説明されていますので、そちらを見て下さい。
set_intbの引数の__sectop(“C$VECT)は、CS+のCC-RXビルド・ツールの共通オプション内のセクションの開始アドレスの変数です。

これには、いろいろとからくりがありまして、先ほどのルネサスの可変ベクタの説明のところで、ベクタ毎に番号が割り振られていると記載されています。そのベクタの番号がvect.hのファイル内で(vect==16)のようにベクタ番号を指示しているところがあります。

さすがに、これを、そのままGCC環境に使うことができないため、GCC環境では、少し工夫をしています。
C言語には、配列の中に関数のアドレスをいれてジャンプする機能(関数ポインタ配列)がありますね。この機能をつかって実現しています。詳しくは、次回紹介します。

2行目のset_fpsw関数もCS+の組み込み関数です。set_fpswは、浮動小数点ステータスワードレジスタの値を書き換える関数です。
FPSW_initの値は、オールゼロです。これを基準にいろいろと設定を追加していく形になっています。
_ROUNDは、浮動小数点の丸めの設定になります。初期値は近似値へ丸められます。CS+の浮動小数点の丸めの設定で0か近似の2種類が選択できるようになっています。CS+の初期値は近似になっているため、ここでは、_ROUNDの値は0(=近似)にします。
_DENOMは、浮動小数点定数に非正規化数を記述したときの扱いをどうするかの設定になります。CS+の浮動小数点定数に非正規化数の設定では、0として扱うか非正規化数として扱うの2種類が選択できるようになっています。CS+の初期値は、0として扱うになっているため、ここでは、_DENOMの値は0x00000100(=0として扱う)にします。

3行目の_INITSCT()関数は静的変数の初期化を行っています。これもCS+の組み込み関数です。

4行目のset_psw関数もCS+の組み込み関数です。set_pswは、プロセッサステータスワードレジスタの値を書き換える関数です。ここでは割り込み許可をしています。この割り込みを許可しいないとモジュールで割り込みを許可しても割り込みができない現象になります。つまり、割り込みイネーブルの親分ですね。

5行目でmain()関数をコールしています。

次回は、この内容をGCC環境に合わせた記述を紹介します。

続きを読む ›

Posted in 技術情報


DCマウス研修(吸引編)[13] マイクロマウス合宿参加

こんにちは!
inukaiです。

先週末(6/16, 17)にマイクロマウス合宿@東京理科大学野田キャンパスに参加してきました!
実際にマウスを製作してから皆さんとの初めての交流だったのでいろいろ刺激が多かったです。

合宿の流れとしては、
1日目
・技術交流会(講演)
・懇親会
2日目
・プチ大会

という流れでした。

技術交流会では、どれもおもしろかったのですが、個人的にはマウスのログの取得方法からどう活用するかについてのお話がとても興味深かったです。

技術交流会はこんな感じです。

技術交流会では私のほうからは、毎年恒例のステッピングモータについてと、オリエンタルモータ株式会社様からのマイクロマウス初心者へのステッピングモータ無償プログラムの案内をさせていただきました。
無償提供プログラムにつきましてNTFのHPにリンクが掲載されていますのでご覧ください。

交流会の後は懇親会でした。技術交流会は講演形式でしたが、懇親会ではざっくばらんに技術交流をさせていただきました。
ご飯を食べながら実際にマウスを見てもらったり、見させてもらったりしながらアドバイスをいただけたりしました。
やはり、実際に強豪の方々のマウスを見ると、自分のマウスのよくないところなどが見えてくるので大変参考になります。

2日目はプチ大会でした。
自分は残念ながら完走できずリタイアしてしまいましたが、非公式とはいえ大会で初出走できたのでひとまずよかったかなと思います。
未完成のマウスでも参加して出走する方も多く、みなさんの気概を感じました。
マウスを作り始めてから改めてトップクラスの方々の走りを見ると目を見張るものがあり、モチベーションが上がります。

大会の参加賞は、いろいろな方のご提供で豪華でした!(写真を撮り忘れてしまいました…)
理系のための婚活本からモータまで様々なものがあり、合宿参加者全員が何かもらえる数はあったみたいです。

私は大会結果は特に結果は残せなかったものの、運よくRX71Mの開発ボードをいただきました。
(ロング17号の製作者様ご提供いただきありがとうございます!)

得られるものの多かった合宿となり、大会参加でモチベーションが上がったところで、まずは関西大会に向けて開発をしていきたいと思います!

ではまた次回

続きを読む ›

Posted in DCマウス研修(吸引編), ブログ, 研修


MacでルネサスのRX631マイコンの開発〜クロスコンパイラの環境の構築〜

こんにちわ。青木です。
今回は、こんにちわの気分ですw。

個人的に進めていたプロジェクト「MacでRXマイコンの開発環境を構築する」の続編です。
前回のブログでクロスコンパイラの環境を構築するためのコンパイラ環境の流れを紹介しました。今回は、いよいよ、RXマイコンのクロスコンパイラをソースからコンパイルする方法を紹介します。

ルネサスエレクトロニクスの開発環境にe2Studioの紹介ページがあります。このページの真ん中あたりに対応コンパイラ一覧があり、その中にGNUが使えるとなっています。そのGNUツールはここから無償でダウンロードすることができると記載されています。その無償でダウンロードできるソースを使ってクロスコンパイラを作成します。

ダウンロードするには、ユーザー登録が必要です。
ユーザー登録が済むとメールでユーザー名とパスワードが送られてくるので、ログインしてソースをダウンロードします。
トップ画面にあるダウンロードのボタンをクリックするとwindows用の実行ファイルしかダウンロードできないため、上にあるメニューからソースコードをダウンロードします。ToolChainsの方をダウンロードしてもソースコードはないので、間違えないように。

ダウンロードページに行くと
・Source Code of GCC
・Source Code of Newlib
・Source Code of Binutils
・Source Code of GDB
の4つあります。最後のGDBは、デバッグの環境を構築するときに必要にデータで、今回のクロスコンパイラーの環境作成では、紹介しませんので、ダウンロードしなくても良いです。
試したバージョンは、GCC for Renesas v4.8.4.201703-GNURXです。このブログを書いているときはGCC for Renesas v4.8.4.201801-GNURXとバージョンが上がっていますが、一つ前との差分はここに書いてあり、大きなところは、RX64Mに対応したということぐらいです。

上3つをダウンロードしてGNU Toolsにあるビルド方法を参照しながら環境を構築していきます。

1.RXのツールチェーン用のディレクトリを作成します。ここでは、Downloads直下に作っています。

2.先ほどダウンロードしたソースコードをディレクトリsourceに移動または、コピーします。ここでは、コビーしています。
コピーしたら解凍します。

ここまで、順調にできていると思いますが、ここから、処理時間がかかるので、時間に余裕があるときに行うことをお勧めします。mac book airの性能で8h程度かかっています。

3.binutilsをインストールします。

RX-Toolchainv15.02/prefix/binにrx-elf-asがあり、致命的なエラーがないかきり問題なさそうです。
エラーで進まないようならroot権限が必要かもしれないのでsudo make installで試してみてください。
次にCコンパイラをビルドしますが、ビルドに先ほどインストールしたbinutilsが必要になるのでパスを通す必要があります。

パスを通したら一度ターミナルを開き直してパスが通っているか確認します。

4.GCCをインストールしますが、そのままでは、source/gcc-4.8.4/gcc/doc/gcc.texiの内容がMac portsのGCCと差分があり、gcc.texiでエラーになって先に進めません。ビルドする前にgcc.texiを以下のように修正します。変更点は、1行に記述するのではなく、改行します。

gcc.texiの修正が終わったらGCCのビルドをします。

致命的なエラーが出なければ、あとで、もう一度ビルドするのでここでは問題ないです。

5.Newlibのインストールをします。ここでも一箇所エラーで進まないところがあったので、修正しています。
source/newlib-2.2.0/newlib/libc/machine/rx/memcpy.sにある#errorコンパイル指示のところでエラーとなったので、コメントアウトしてエラーを回避しています。
コメントアウトしたので、memcpyの関数ライブラリは使わない方が良いと思います。
newlibは組み込みシステムで使用する標準Cライブラリです。必要なけば、newlibをビルドしなくても良いのですが、三角関数などを使いたいので、ここはどうしても回避してでもビルドしています。

6.最後にもう一度GCCのビルドをします。

これでクロスンパイラの環境構築が終了になります。次回は、CS+と同じ環境で使えるようにスタートアップなどのソースを作ります。

続きを読む ›

Posted in 技術情報


DCマウス研修(吸引編)[12] 光センサの確認

こんにちは!
inukaiです。

Lチカ、モータ用を回したところで、光センサの動作確認について書いていこうと思います。

このマウスでは下の写真のように、赤外線LEDと光センサが4組ついています。
赤い熱収縮チューブを巻いてあるのが赤外線LEDでその下側についているのが光センサです。

回路図から光センサ周りを抜き出すと下図のようになります。

Lチカ同様に赤外線LEDを光らしてみたところ。

上と下の写真をみると少し紫に発行しているのが見えるかと思います。
目では見えませんが、カメラによっては赤外線が紫っぽく映るのが確認できます。

 

では実際に壁に光を反射させて確認していきます。
壁を置いてオシロスコープで光センサを確認した結果がこちらです。
上のラインが発光中のLEDのON信号、下が光センサの電圧になります。
センサの立ち上がりが飽和するあたりで、LEDをOFFしています。
OFFするタイミングでRXマイコンのAD変換機能により光センサの電圧を取り込みます。

次にマウスで壁判定するために、壁とマウスの距離に対する光センサの値を確認していきます。
測定の様子

特に今回は姿勢制御に用いる左右の壁をみるセンサの値を確認を行いました。その結果がこちら。

左右で若干センサ値が違いますが、同じようなカーブであるのが確認できました。
発光時間や、赤外線LEDおよび光センサの抵抗を調整すればカーブが重なりそうです。

調整については姿勢制御の壁補正の精度をどこまで求めるかによりますが、とりあえずはこの値をもとにマウスを走らせて行こうと思います。

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

続きを読む ›

Posted in DCマウス研修(吸引編), ブログ, 研修


MacでルネサスのRX631マイコンの開発 〜GCCの構築のためのGCCの環境の構築〜

おはようございます?こんにちわ?こんばんわ?青木です。

個人的に進めていたプロジェクト「MacでRXマイコンの開発環境を構築する」の続編です。
前回ちらっと記載したのですが、Linux(ubuntu14.04)では、GNU Toolsのウェプサイトに構築方法があります。
Mac OS XはBSD系のUNIXをベースに開発されており、BSD系でのコンパイル可能なアプリケーションや開発Toolはほとんど利用可能のようです。
つまり、Mac OS Xなら、Linuxと同じ方法で環境ができる可能性があるということです。

環境を構築したマシンは、
・2012年モデル[MD232J/A] Mac book Air
・OS-X High Sierra(10.13)
です。2017年モデル 13-inch Mac book Pro(カスタム品)でも検証しています。

まず、はじめにすることは、RXマイコンのGCC(rx-elf-gcc)クロスコンパイラを作るためのGCCが必要になるということです。

OS-Xの初期段階では、GCCの呼び出しでllvmが起動するようで、llvmでは、GCCのクロスコンパイラをビルドすることができません。

そこで、macportsのGCCを使用します。macportsではなく、brewでもできるようですが、ここでは、macportsを使って環境を作ります。
macportsのほかに、X-Code(App Storeからダウンロード)のインストールとターミナルからxcode-select –installを実行します(ディスプレイによっては見えていない可能性があるので、念のため、installの前の-は二つあります)。

macportsはここからダウンロードしてインストールします。当時のバージョンは2.4.2-10.13-HighSierra.pkgでした。2018/6/8時点では、2.5.2-10.13-HighSierra.pkgでした。

インストールした後、macportsのアップグレードを行います。

アップデートが終わったら、GCCをインストールします。GCCのバージョンは5を使っています。バージョンによってコンパイルできても正常に動作しないことがあるようで、可能な限りバージョンを合わせた方が良さそうです。

GCCのインストールが終わったら、インストールしたGCCのライブラリと実行コマンドを移動、コピーまたはリンクにします。ファイル名を変更する必要があったので、私は、リンクにしています。

次回、クロスコンパイラのソースをダウンロードしますが、コンパイルに必要なライプラリgmp、mpfr、libmpcなどがないため、macportsから入手しています。

確認として、gcc–versionを実行してllvmでないことが確認できれば、クロスコンパイラーを作るコンパイラーの準備ができたことになります。

次回は、クロスコンパイラーのソースの入手とビルドについてです。

続きを読む ›

Posted in 技術情報


MacでルネサスのRX631マイコンの開発

お久しぶりです。青木です。

二足歩行の研修がなかなか進んでいない状況なのですが、昨年から、少しずつ進めていた個人的なプロジェクトがひと段落したので情報展開します。

個人的に進めていたプロジェクトが、「MacでRXマイコンの開発環境を構築する」です。

ご存知だと思いますが、ルネサスエレクトロニクスから販売されているRXマイコンの開発環境は、Windowsのみとなっています。GNUのコンパイラを使えば、Linuxで開発することは可能ですが、Macでの開発環境の構築方法は記載されていません。参考までにLinux(ubuntu14.04)での開発に環境の構築の方法は、ここにあります。

そもそも、なぜ、Macで、RXマイコンの開発するきっかけになったかというと、
・ひょんなことからMac Book Airを入手したこと。
・マイクロマウスのマイコンにRXを使用していること。
・他人と少し違ったことをしたかったこと。
という単純な理由で開発がスタートしたのです。

Macでルネサスマイコンを開発環境を構築したという情報がwebで見かけますが、開発したいターゲットがRX631であり、RX631で開発環境を構築したというwebページがなかったので、色々情報を組み合わせてRX631の開発環境を構築に挑みました。

いざ環境を構築すると色々と問題がでできたので、数回にわたりmacで開発環境の構築する情報を発信する予定です。

マイコン開発環境

続きを読む ›

Posted in 技術情報