Monthly Archives: October 2018

shotaのマイクロマウス研修4 [Pi:Co Classic3 スラローム走行の計算]

こんにちは、shotaです。

社員研修として、弊社が販売するマイクロマウス[Pi:Co Classic3]を動かしています。

前回はテキトーなパラメータを設定してスラローム走行をしました。

[前回の記事はこちら]

今回は、スラローム走行の制御パラメータを計算します。

角速度の台形指令シミュレーションは次回の記事に書きます。

Pi:Co Classic3の基本情報

まず、Pi:Co Classic3の基本情報を確認します。

タイヤの直径は48mmで、タイヤ間の距離(トレッド長)は65 mmです。

モータにはステッピングモータを使っており、タイヤと直結しています。400パルスでタイヤが1回転します。

タイヤの円周は48π mm≒150.8 mmです。そのため、モータに400パルスを送信して進む距離は150.8mmになります。

パルスを速く送信する≒速く走行するという関係ですが、どんなに速く走っても・遅く走っても、送信パルス数が同じであれば移動距離も同じです。

※タイヤがスリップしたり、モータが脱調した場合は走行距離が変わります。

角を曲がるための情報

スラローム走行は、前に進みながら角を曲がる動作のことです。角を曲がるためには、ロボットの情報だけではなく迷路の情報も必要です。

 

マイクロマウスクラシック競技の迷路は1区画180 mmの正方形で構成されています。

Pi:Co Classic3が区画の中心を走行する場合、半径90 mmの円弧を走ることになります。このときの移動距離は約141.4 mmです。

下図のように角を時計回りで走る場合は、右タイヤよりも左タイヤの方が長い距離を移動します。

まず、左右のタイヤそれぞれの旋回半径を計算します。ロボット中心の旋回半径が90 mmなので、左タイヤ旋回半径はそこからトレッド長の半分を足した90 + 65/2 mm、右タイヤの旋回半径は90 – 65/2 mmとなります。

次に旋回半径をもとに、左右のタイヤそれぞれの移動距離を計算します。左タイヤは192.4 mm、右タイヤは90. 3 mmとなります。

最後に、曲がるために必要モータのパルス数を計算します。400パルスで150. 8 mm進むという関係は分かっているので、それをもとに計算できます。左タイヤは510パルス、右タイヤは240パルス必要です。

それでは実際に走らせてみます。

1秒で角を曲がりたいので、左タイヤの速度は192 mm/sec・右タイヤの速度は90 mm/secとします。

送信パルス数が左:510、右:240を超えるまで走らせます。

実際に走らせると、約1秒でピッタリ90度曲がったように見えます。

動画にはありませんが、タイヤ速度を2倍にしても半分にしても走行距離は変わりませんでした。

送信パルス数が同じであれば移動距離も同じということが分かります。

 

続きを読む ›

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


DCマウス研修(inukai編)[18] 九州地区大会結果などなど

お久しぶりです!
inukaiです。

最近投稿できてなくてすいませんでした。
これまでの間に、東日本と東北地区大会に参加していたものの、完走はできず…
というのも、金沢草の根大会から東日本の間にマウスを作り直したことや、9月は弊社のプレスリリース準備で新しい機体の調整時間をうまく確保できませんでした。
九州地区大会の結果やいかに

ちなみに製作したマウスはこちらです↓

スペックや製作話は後日書きますのでお楽しみに

というわけでタイトルの通り先週末九州地区大会に参加してきました!
九州地区大会は福岡の福岡市科学館で行われました。

参加費500円でしたが、500円分くらいの参加賞がもらえました。
僕はモバイルバッテリーをいただきました。これで出先でもマウスが充電できますね!(1セルずつ)

前回は超信地旋回による探索でしたので、今回はスラローム探索を目標に参戦してきました。
あらかじめ作っておいたスラローム軌道はこちら。


縦軸と横軸の単位は距離 [m]です。

車体速度:0.4 m/s (スラローム中一定、探索速度と同じ)
角速度の加速区間:0 – π/6 rad
角速度の等速区間:π/6 – π/3 rad
角速度の減速区間:π/3 – π/2 rad
角速度の加減速度:50 rad/s/s (減速時はマイナス)

角速度指令値の時間波形がこちら。

あとは実際に会場で走らせ、スラローム前後の直線距離を調整して軌道と実際の誤差を埋めます。

さて、本番でスラローム探索が成功するのか!?
結果は下記動画でご覧ください。

というわけで何とかスラローム探索ができました。
(帰りの探索で早速こけてますが…)

スラロームのおかげで探索時間が1分12秒 → 33秒へ大幅に短縮できました!
角で一回曲がるごとに止まらなくてよい分、同じ探索速度0.4 m/sでもかなり時間が短縮できますね(当たり前といえば当たり前か)

さて、来週は中部地区大会に参加しますので、スラロームで最短走行を目標に引き続き頑張ってまいります!
それではまた次回

 

続きを読む ›

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


マイクロマウス研修[5]タイマ割り込み

こんにちは。koraです。

今回はタイマ割り込みを実装します。割り込みとは、マイコンで実行中のプログラムに一時的に割り込んで、別の処理を実行する機能です。タイマ割り込みを使うことで、一定周期でセンサを読み取ったりモータに指示を出したりして、マイクロマウスをリアルタイムで制御することが可能になります。

タイマ割り込みの準備
init.c

Step7のinit.cからinit_cmt()関数をコピーして、自作プロジェクトのinit.cに貼り付けます。また、init_all()関数内にinit_cmt();を追加して、init_all()からタイマ割り込みの初期化を呼び出せるようにします。

CMTはコンペアマッチタイマと言い、一定周期で割り込み処理を行うことができる機能です。init_cmt()関数内ではCMT0~2の、3つのタイマを初期化しています。この初期化で、CMT0は1kHz、CMT1は4kHz、CMT2は2kHzで割り込みが発生する設定になります。モータの制御に使うのはCMT0です。CMT1とCMT2は今後センサーの処理に使用します。

intprg.c

init_cmt()の設定で、intprg.cファイル内のExcep_CMT0_CMI0()関数が1kHzで呼び出されるようになります。今後、多様な処理を割り込みの中で実行したいので、Excep_CMT0_CMI0()関数から、別の関数を呼び出して実際の処理を行います。

#pragma section IntPRGの下に、次の行を追加します。

そして、void Excep_CMT0_CMI0(void){ } を次のように書き換えます。

interrupt.c

「新しいファイルを追加」から、interrupt.cというファイルを作ります。今回はテストのため、下のような簡単な処理のみにします。(本番用のプログラムでは、速度と旋回速度を制御するコードに書き換えます。)

glob_var.hとglob_var.c

グローバル変数を複数のファイル間で共有する場合、ヘッダファイルでextern付きの宣言をして各ソースファイルにインクルードし、実態を持たせる1つのソースファイルでextern無しの定義します。

しかし、このサンプルプログラム(Step7)では何十個もグローバル変数を使います。ヘッダファイルとソースファイルに同じ変数名を何十個も書くのは面倒です。

そこで、マクロでexternの有り無しを制御し、実態を持たせるソースファイルにインクルードされたときのみexternが外れるようにします。

glob_var.hに、

と書きます。そして、glob_var.cの方に、

と書きます。

テスト

my_hm_starterkit.cファイルに、

を追加して、main関数を次のように書き換えます。

グローバル関数Duty_rとDuty_lに値が代入されることで、タイマ割り込みで呼び出されるint_cmt0関数に値が渡され、PWMとして出力されます。Duty_rとDuty_lの値を0.0~1.0の値に設定することによって、モータの回転速度が変化します。

次回

タイマ割り込みでモータが動かせるようになりました。エンコーダ、ジャイロ、光センサの情報を反映できるようにしたいところですが、その前に、センサの情報をPCに表示するため、シリアル通信を使えるようにしたいと思います。

続きを読む ›

Posted in DCマウス研修


shotaのマイクロマウス研修3[Pi:Co Classic3 スラロームできた?]

こんにちは、shotaです。

社員研修として、弊社が販売するマイクロマウス[Pi:Co Classic3]を動かしています。

 

前回は4×4サイズの迷路でPi:Coを走らせました。

[前回の記事はこちら]

 

今回は、曲がり角をスムーズに進むスラローム走行に挑戦しました。

 

スラローム走行とは

スラローム走行は前進しながら角を曲がる走行です。

自動車や自転車で角を曲がる動作と同じです。

 

前回の動画では、曲がり角まで進む→停止する→その場で旋回する→前に進む、という動作をしていました。

これは超信地旋回やスピンターンと呼ばれています。

超信地旋回では一度その場で停止しなければならないため、角を曲がるのに時間がかかります。

[超信地旋回とは Wikipedia]

 

マイクロマウス競技では迷路を早く走行することが求められます。

そのため、超信地旋回ではなくスラローム走行で角を曲がりたいです。

 

スラローム走行を実装する

スラローム走行をどのように実装すればよいか調査しました。

[マイクロマウス「Pi:Co Classic」に挑戦!No.76 スラローム実装…!?]

[マウスにおけるスラローム走行]

 

マイクロマウスでスラローム走行するためには、以下のポイントが重要であるとわかりました。

  • 急に大きな角速度を与えると曲がれない
  • 加速、一定速、減速区間を設ける

 

これをプログラムに変換するのですが、そのためにはさらに情報が必要です。

  1. どんな指令値をモータに与えれば角速度を表現できるのか
  2. どのくらいの角速度を与えれば曲がるのか
  3. 加速、一定速、減速区間はそれぞれ何秒必要なのか

 

続きを読む ›

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


マイクロマウス研修[4]モータを動かす

こんにちは。koraです。

前回の更新からだいぶ時間がたってしまいましたが、今回はモータを動かせるようにしたいと思います。

モータドライバについて

まず、マイクロマウス本体を見てみましょう。HM-StarterKitにはDRV8838というモータドライバが2つ搭載されていて、2つのモータの回転方向、回転速度をそれぞれコントロールすることができます。

それぞれのモータドライバは次の3つのピンから制御できます。

  • nSLEEPピン:スリープモードを切り替える。
  • PHピン:回転方向を制御する。(Lowにすると正転、Highにすると逆転)
  • ENピン:回転速度を制御する。(PWM信号を入力する)

回転速度の制御にはPWM(Pulse Width Modulation)を使います。PWMとは、信号線のHIGH/LOWを素早く繰り返すことで、出力される電圧を制御する方法です。繰り返す周期に対するHIGH時間の割合をDuty比といいます。モータドライバから出力される電圧は、バッテリー電圧にDuty比を掛けたものになります。

つまり、このマウスを自由に走らせるには、任意のDuty比のPWM信号を2つ出す必要があります。実際にどうすればいいのか、サンプルプログラム(Step2)を見てみます。

PWM信号の生成には、マイコンのタイマ機能を使います。HM-StarterKit.cの中で、クロックとIOの設定を行っています。この設定では、48MHzで内部のカウンタが動いています。カウンタとPWM信号がどのように連動しているかというと、

  • カウンタの値がMTU0.TGRAの値より小さければ、HIGHが出力される
  • カウンタの値がMTU0.TGRAの値より大きくなれば、LOWが出力される
  • カウンタの値がMTU0.TGRDの値になれば、カウンタがリセットされ0に戻る

“MTU0.TGRD = 240-1″と設定しているので、カウンタは0~239でループします。したがってDuty比は240段階で調整することができます。ちなみに、TGRAが左側、TGRCが右側のモータドライバを制御します。

ファイルの分割

マウスの最終目標は迷路を走ることです。モータを動かすだけでなく、直進、方向転換、センサの読み込み、迷路探索など、多様な機能を盛り込む必要があります。それぞれの機能、処理を分かりやすいように関数化しましょう。というわけで、サンプルプログラム(Step7)を参考に、ファイルを作成していきます。

今回作るファイルは、こちらの4つです。

  • init.c
  • init.h
  • static_parameters.h
  • portdef.h

新しいファイルを作るには、「プロジェクト・ツリー」の「ファイル」を右クリックして「追加」を選択し、「新しいファイルを追加」をクリックします。ソースファイルを作る場合は、表示された「ファイル追加」ウィンドウで「Cソース・ファイル(*.c)」を選択し、ファイル名を入力します。ヘッダファイルを作る場合は、「ヘッダ・ファイル(*.h; *hpp; *.inc)」を選択し、ファイル名を入力です。

init.c

init.cファイルには、クロックの初期化関数(clock_init)、モータの初期化関数(motor_init)、そしてこの2つの関数をまとめて呼び出す関数(init_all)を作ります。

init.h

init.hファイルには、init_allのプロトタイプ宣言を追加します。そうすることで、init.hをインクルードしたファイルから初期化関数を呼べるようになります。

static_parameters.h

static_parameters.hファイルでは、プログラム内で使用する定数を定義します。

  • IO_OUT …

続きを読む ›

Posted in DCマウス研修


shotaのマイクロマウス研修2[Pi:Co Classic3 迷路を走る]

こんにちは、shotaです。

社員研修として、弊社が販売するマイクロマウス[Pi:Co Classic3]を動かしています。

前回ははんだ付けをしてPi:Coを組み立てました。

[前回の記事はこちら]

 

今回は、キットに同封されているサンプルプログラムを使って迷路を走らせました。

 

サンプルプログラムについて

Pi:Co Classic3には、ルネサス製のRX631マイコンが搭載されています。

私はこのマイコンを使ったことがないため、プログラムが書けるか不安でした。

 

しかし、このキットにはプログラミング初心者向けのマニュアルとサンプルプログラムが用意されています。

このサンプルプログラムにより、LEDを光らせる・ブザーを鳴らす・センサーの値を読み取る・モータを回すことができます。

そして最後には、マイクロマウスの迷路を走らせることができます。

迷路を走らせてみる

サンプルプログラムには3つの走行方法が用意されています。

  • 左手法
  • 足立法
  • 最短走行(足立法)

左手法

左手法では、常に左側の壁に沿って走行します。

この方法はとてもシンプルなので簡単にプログラミングできます。しかし、左手法では解くことができない迷路があります。

この動画では左手法で迷路を走行しています。ゴールが迷路の真ん中にあるため、左手法ではたどり着きません。

足立法

足立法は、ゴールへの最短経路を進むアルゴリズムです。

ゴールまでの経路に壁がないと仮定して走行します。壁を見つけた場合は最短経路を計算し直して走行します。

[足立法の説明1][足立法の説明2]

この動画では足立法で迷路を走行しています。左手法と違い、ゴールへたどり着くことができました。

ゴールに着いた後はスタート地点に戻り、最短経路をたどってゴールへ再走行しています。

 

次回やること

走行プログラムを改良します!

サンプルプログラムでは右折・左折するときに、止まる→右を向く(左を向く)→進む、という動きをしています。

この動きがスムーズになるようにプログラムを書きます!

[次回の記事はこちら]

続きを読む ›

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


Pi:Co Classic3キット 製作 ハンダ付け編

はじめまして、学生アルバイトのhayashiです。

簡単な自己紹介。

普段は、大学でRoboCupの活動を中心に学生生活をしています。基本的に、ソフトウェアの開発をしています。元々は、ロボットが好きなので、ハンダ付けもハード設計、組み立てもやりたい人なのですが、あまりやる機会はないです。

そして、縁あって、3月に先輩からお誘いを受け、RTでアルバイトさせていただけることに。

 

雑用でもなんでもする気持ちで、普段は、ソフトウェアを書いていますが…

アルバイトに行くたびに誰かがマウスを動かしている(しかも自作)。

それを見ていたらやりたくなりますよ!!

 

しかし、マウスの知識もない経験もない、しかも、「ワタシアルバイト」と思っていたら、「やりたい?」と言われ、「何事も経験」「マウスはロボットの基本」など、意見をいただき。

やらせていただけることに…

 

という事で、渡されたのが「Pi:Co Classic3」のキット

画像は完成図です。

キットなので、ハンダ付け、組み立てがありますが、説明書通りに進めれば良いので、マウス初心者でも安心ですね。

説明書は付属のカードからダウンロードできます。説明書は、各分野にわかれていますし、内容もわかりやすくなっているので、ロボット初めての人でも難しくなさそう…(主観です。)

 

最初は、ハンダ付けからです。

説明書には、部品をつける順番や向きが丁寧に書いてあるので、あとは自分のハンダ付け次第です。とは言っても、普段全然ハンダ付けをしていないので大変そう。

ハンダ付けのコツは、ハンダしたい部分を温めてから付ける。ということらしいです。

そして、早速…

熱し過ぎのせいで、コネクタが溶けて真ん中のピンが歪んでしまいました。運良くこの部分は、何も繋がない部分で問題がありませんでしたが、今後は起きない無いように気をつけながら…

さすがに、ロボット1体なので、ハンダ付けの部分が多い(まだ、少ない方だとか…)

全部、ハンダ付けするとこんな感じです。

 

次回は、プログラムをして、大会に参加したいと思います。

続きを読む ›

Posted in Pi:Co Classic3 製作記


shotaのマイクロマウス研修1[Pi:Co Classic3のはんだ付け]

はじめに

初めまして、こんにちは。

2018年10月から入社しましたshotaです。

社員研修として、弊社が販売するマイクロマウス[Pi:Co Classic3]を動かすことになりました。

その過程をブログに投稿していきます。

よろしくお願い致します。

 

私は趣味でロボカップ小型ロボットリーグに参加しています。

ROSを使ってサッカーロボットを動かすソフトを作っていますが、組み込みソフトはほとんど触っていません…

学生の時にPICマイコンを触った程度なので、

その感覚を取り戻しながら、まずはクラシックコース完走を目指して取り組みます!

 

Pi:Co Classic3とは

RT ROBOT SHOPで販売しているマイクロマウス用のロボットキットです。

https://www.rt-shop.jp/index.php?main_page=product_info&cPath=1002_1023_1036&products_id=3400

 

マイクロマウスのソフトだけでなく、はんだ付けを通して回路要素も学ぶことができます。

マイクロマウスに初めて参加する人にピッタリの製品です。

 

はんだ付け開始

6時間くらいではんだ付けと組み立てが終わりました。

はんだ付けが得意な人はもっと早く組み立てられるかもしれません。

作業初日

はんだ付け練習基板と電源基板をはんだ付けしました。

 

作業2日目

メインボードとマイコンボードをはんだ付けしました。

 

作業3日目

センサ基板をはんだ付けして、完成です。

 

このキットの良いところ

  • 部品が回路要素ごとに小袋に分けられている
    • 実装する部品がどの回路に使われているのか一目で分かります。
  • 部品をどこに実装するのか写真付きで説明されている
    • 回路図を読まなくても組み立てられます
  • はんだ付けで失敗しやすいところに注意書きがある
    • 初心者に優しい説明書です。

次回やること

キットに同封されているサンプルソフトを書き込み、走行させます!

[次の記事はこちら]

続きを読む ›

Posted in Pi:Co Classic3, お知らせ, ブログ, 研修