KCB-1
ハードウエア
ソフトウエア
- アップデート
シリアル通信
- シリアルサーボ
- RCB-3
- RCB-1
自律ロボット
センサー
イベント
- KHR 4th アニバーサリー
- 第二回ビーチフラッグ競技会
未分類
サイトマップ
自律ロボット作例 ver.2
以前『自律ロボット作例』の記事で自律ロボットの制作例を紹介しましたが、第二回ビーチフラッグ競技会を開催するにあたって、進化した自律ロボットをご紹介します。

今回は頭部のセンサーをPSD測距センサーからUSRX-1超音波センサー(受信部)に変更しました。このセンサーでフラッグから発信されている超音波を受信し、フラッグの位置を検出します。
前回、KRS4013シリアルサーボに変更していた頭部は、KRS-788に戻しKCB-1のPIOポートに接続して制御しています。KCB-1でのPWMサーボの制御は『KRS-788HVをKCB-1で動かす① ②』で紹介した方法で行っています。
サンプルプログラムでは最初の起き上がりからフラッグを倒すまでのプログラム例を公開しています。
内容:
・kyoris_s02_cc.c ― コントロールコード再生で制御する自律ロボットのプログラムです。
・kyoris_s02_mp.c ― コマンド再生で制御する自律ロボットのプログラムです。
・sonic_search2.h ― バブルソートなど、自律ロボットに必要な関数をまとめたヘッダーファイルです。
作例のように、KCB-1とRCB-3を使用すれば簡単に自律ロボットを製作することができます。是非お試しください!
新レギュレーション発表
第二回ビーチフラッグ競技会の新レギュレーションを特設ページで公開いたしました。
レギュレーションの主な変更点は以下の4点です。
・学生部門とエキスパート部門の部門分けができた
・エキスパート部門では使用できるマイコンボードが自由になった
・フラッグの形が変わった
・足裏が大きくなった
前回と大きく変わった点は、コントロールボードの使用制限についてです。学生部門はKCB-1とRCBシリーズ、モーションプロセッサーシリーズを使用していただきます。それに対してエキスパート部門では、使用ボードは自由です。おなじみのRCB-3での参加も可能ですが、もしかしたら自作マイコンボードで参加するツワモノが現れるかもしれません。
また、フラッグは前回の箱型から円柱型になり、超音波センサーは2つになりました。
ちなみに、今回も参加できるロボットはKHRシリーズのみです。
詳しくは特設ページに掲載しておりますレギュレーションをご覧ください。
第二回 ビーチフラッグ競技会開催決定!!
KHR 4th アニバーサリーで大好評だった自律ロボットによる競技『ビーチフラッグ競技会』ですが、その第二回競技会の開催が決定いたしました!
日時:11月23日(日)
場所:千葉工業大学津田沼キャンバス
今回の会場は、千葉工業大学津田沼キャンパスで開催される「津田沼祭」の一角で競技を行います。
前回との変更点として学生部門とオープン部門を用意しました!
フラッグの形も変わる予定です。
レギュレーションなどの詳しい情報は近日公開いたします。
特設ページもご覧ください。
http://www.kondo-robot.com/beachflg.html
KRS-788HVをKCB-1で動かす②
前回の続きです。ここを読む前に必ず「KRS-788HVをKCB-1で動かす①」を読んで下さい。
今回はPWM信号をKCB-1で作成し、KRS-788HVを実際に動かすプログラムを作成します。
・PWM信号を作るための基礎知識
下の図はPWM信号を図示したものです。上に出っ張っている部分は信号がHIGHになっていることを表しており、へこんだ部分がLOWです。電気的にはHIGHは5VでLOWが0Vです。
図のように一定間隔で繰り返しHIGHとLOWを切り替えると、サーボモーターに繰り返し命令を送ったことになります。この切り換え間隔をPWM周期と呼びます。また、HIGHの時間の長さでサーボモーターに回転角度を命令します。

・今回のプログラム設計手順
- PWM周期が細かいほど命令をたくさん送ることと一緒なので、周期を速くすると反応は良くなる。しかし、ある程度以上になると違いは分からないので、今回はPWM周期を8[ms]とします。
- HIGHの時間(700[us]~2300[us])も細かいほど詳細な角度を指定することになりますが、細かすぎても違いが分からないので、今回は0度~180度を50分割ぐらいで指定できるようにします。つまり最小角度は3.6度。
・KCB-1でPWM信号を出力するために必要な計算
1) 周期の決定
KCB-1ではPWM信号を送るために8bit PWMモードと16bit PWMモードの2種類があります。おおまかな違いは、8bit PWMモードではHIGHの時間指定の細かさは255段階ですが、命令を送る間隔(PWM周期)の指定は255×4段階から選ぶことができます。一方16bit PWMモードでは、HIGHの時間指定の細かさは65535段階から選べますが、命令を送る間隔の指定は4種類(3.27675[ms]、6.5535[ms]、26.214[ms]、10.4856[ms])しか選ぶことができません。16bit PWMモードの詳細についてはKCB-1のマニュアルをお読み下さい。
今回は8[ms]周期にするために、8bitモードを選択します。
2) 周期の計算
周期は下の式で計算できます。fqが周期を決定する変数0~255の間で選ぶことができます。Fjは分周比と言って、20MHz(PWM_F1)、10MHz(PWM_F2)、2.5MHz(PWM_F8)、625kHz(PWM_F32)のいずれかとなります。
周期=(fq + 1) × 255 / Fj
例えば、分周比Fj=PWM_F1=20MHzを選択すると、
周期=(fq + 1) × 255 / 20000000 ≒ (fq + 1) × 0.00001275
となります。fqの最大値255を代入すると、周期=3.25125[ms]となり、8[ms]に足りません。また、PWM_F2を選択しても6.5025[ms]となり少し足りませんので、今回はFj=PWM_F8を選択します。このときの周期決定変数fqを次のように計算で求めます。
fq = (周期 x Fj)/255 - 1
= (周期 x PWM_F8)/255 - 1
= (8ms x 2.5MHz)/255 - 1
= (0.008 x 2500000)/255 - 1
= 78.43 - 1
≒ 77
この計算から、KCB-1でPWM周期を決定する命令は、次のようになります。
pwm8_init (PIO0, PWM_F8, 77);
PWM8_init関数に、出力する端子"PIO0"、メインクロックの分周比"PWM_F8"、fqの"77"を指定して準備は完了です。
・HIGH時間の計算
8bit PWMモードでの周期8[ms]に対して、HIGHを指定できる細かさは255段階です。図のように、8[ms]と255を対比させると、角度を指定する有効なHIGH時間の長さ(700[us]~2300[us])は、だいたい22~72となり、ちょうど50段階となります。したがってサーボモーターを180度の位置へ回転させるには、KCB-1のプログラムでは、次のようになります。
pwm_out (PIO0, 72);
動作させる場合は、命令を送った後にサーボが目標角度へ到達するまで、必ずwait関数で待つようにして下さい。
より細かく角度を指定したい場合は、周期を狭くすることで可能になります。解説図のように8ms周期を4ms周期にすると、
44~144の100段階で設定できますので、約1.8度間隔でサーボを制御することができるようになります。
・サンプルプログラム
サンプルプログラムでは、サーボモーターを0度の位置へ回転させた後で、180度の位置へ回転させています。pwm_out関数の中の数値をいろいろ変えてみると、対応する角度へ移動します。
<プログラム ダウンロード (3KB)>
KCB-1はPWM信号を4つ同時に出すことができますので、KRS-788HVを4つ同時に制御することができます。
ぜひお試し下さい。
KRS-788HVをKCB-1で動かす①
今回はPWMサーボをKCB-1で方法を紹介します。
例で使用するKRS-788HVは、KHR-HVシリーズに標準で使用されているPWMサーボです。
・PWM信号とは
PWM信号とは一定の時間で、HIGH(KCB-1では5V)とLOW(0V)を切り換えて作った信号のことです。
KRS-788HVはだいたい5[ms]~30[ms]の間隔でHIGHとLOWの時間を読み取って、角度制御を行います。
具体的には、KRS-788HVの白い端子を700[us]だけHIGHにすると0度の位置へ回転します。2300[us]だけHIGHにすると180度の位置へ回転します。
・準備
KCB-1にはPWMサーボを動かすための端子が用意されていないため、KRS-788HVを接続するには少し工夫が必要です。
KCB-1は、PWM信号をPIO端子の0,2,4,6番端子から出力することができます。この端子のいずれかにPWMサーボのコネクタから信号線(白線)を抜き取り、接続します。赤線はSIO端子のVccに、黒線はGNDに接続しサーボに電源を供給します。
※PIO端子はピンがたっていないため、予め2mmピッチヘッダーピンを立てておく必要があります。また、サーボのコネクターは2.54mmピッチなので、2mmピッチのヘッダーピンでは接続したときに隙間が空いてしまいます。コネクターの先端をペンチ等で軽く潰し、しっかりと接続できるように調節してください。
(※ 作業による故障等は弊社では責任を負いかねます。予めご了承下さい。)
(画像 クリックで拡大)
今回はここまでです。次回はpwm.hを使って簡単制御プログラムを紹介します。
※1 msはミリ秒のことで、1[ms] = 0.001秒
※2 usはマイクロ秒のことで、1[us] = 0.000001秒
HEWのツールメニューにFlashStarterを追加する
作成したプログラムを書き込むときに使用するFlashStarterを、統合開発環境HEWのツールメニューに追加する機能を紹介します。
①HEWのメニューから「基本設定」の「カスタマイズ」を選択します。
②「カスタマイズ」画面にある「メニュー」タブを選択し「アプリケーション内有効」の追加をクリックします。

③「ツールの追加」画面の「コマンド」の参照ボタンをクリックし、CDROMからコピーした「FlashSta.exe」を選択してください。
④同じ「ツールの追加」画面の「名前」に『FlashStarter』などお好みの名前を書き込みます。

⑤OKボタンで「ツールの追加」と「カスタマイズ」画面を閉じてください。作業は終了です。
ツールメニューの一番下を見ると、FlashStarterが追加されているはずです。この設定でFlashStarterのショートカットを探さなくても、HEWの画面から直接起動できるようになりました。

便利な機能なので、是非お試しください!
KCB-1用PIO接続ケーブルセットを使った制作例
端子が立っていなかったPIOポートを有効に活用するための「KCB-1用PIO接続ケーブルセット」が発売されました。このケーブルセットは、2mmピッチのオスコネクターをPIOポートの空いているパターンにハンダ付けするだけで、すぐに使用することができます。
今回はこのケーブルセットの簡単な使用例をご紹介します。
(写真 クリックで拡大)
左の写真は、8個のLEDのアノードを、470Ωの抵抗を通してPIOポートのそれぞれの端子に接続しました。PIOポートからHを出力するとLEDが点灯し、LにするとLEDが消灯します。ケーブルの先には市販の圧着式10ピンコネクタを使用しました。
このLEDボードを使用して、アナログ値を表示するプログラムを組みました。
右の写真はPSDセンサーに白い板を近づけてLEDを点灯させているところです。AD1に接続したPSDセンサーのアナログ値が大きくなる(物体に近づく)ことに比例してLEDの点灯する個数が増えます。
以下はサンプルプログラムのダウンロードと解説です。
<プログラム ダウンロード 2KB>
プログラム解説:
メイン関数ではLEDの点灯パターンのみを処理し、アナログ値は10ms間隔のタイマー割り込みで読みました。
メイン関数ループ内の数式( y = 7.0 / 500.0 * (adv - 100.0) + 1; )は、PIOポートの点灯パターンを求める式です。AD1から読み取ったPSDセンサーの値advが、600以上ではLEDが全点灯、100以下のときはLEDは全消灯となるように式を作りました。100~600間は約70の間隔で点灯するLEDの数が増減します。
式の中で7.0としているのは、値を整数型として扱わないようにするためです。もし7のままで計算した場合、Cコンパイラは整数型として計算を行うため、小数点以下を切り捨てるので、答えは全て1になります。これは#define関数でもよく間違うので注意しましょう。
※ LEDは品種によって接続する抵抗値が変化します。また、LEDには極性がありますので使用時には必ずデータシートでご確認ください。
HEWをWindows Vistaにインストールするときの注意事項
KCB-1は買ってすぐにマイコンプログラムを楽しむことができるように、ルネサスの統合開発環境HEW(High-performance Embedded Workshop)が付属しています。
ただしWindows VistaにHEWをインストールするには、いくつか手順を踏まなければなりません。
- インストーラー(CD-ROMの「開発環境」フォルダにある「nc30wav543r00_ev.exe」)をCD-ROMからいったん「ドキュメント」フォルダなどのローカルディスクへコピーします。
- nc30wav543r00_ev.exeを右クリックして、プロパティを選択します。
- 互換性タブを開き、「互換モード」欄で「互換モードでこのプログラムを起動する」にチェックを入れ、プルダウンメニューから「Windows XP (Service Pack2)」を選びます。
- 「特権レベル」欄の「管理者としてこのプログラムを実行する」にチェックを入れます。
- nc30wav543r00_ev.exeをダブルクリックして、通常のインストールを開始します。

インストール終了後にHEWをインストールしたフォルダ(通常は「C:\Program Files\Renesas\Hew」)を開き、「HEW2.exe」について、インストーラーファイルと同様に互換性モードと管理者権限を設定します。
- インストールしたフォルダにある「HEW2.exe」)を右クリックして、プロパティを選択します。
- 互換性タブを開き、「互換モード」欄で「互換モードでこのプログラムを起動する」にチェックを入れ、プルダウンメニューから「Windows XP (Service Pack2)」を選びます。
- 「特権レベル」欄の「管理者としてこのプログラムを実行する」にチェックを入れます。
- HEW2.exeをダブルクリックして、通常のインストールを開始します。

以上でHEWは画面にちょっと不具合があるものの、普通に使用できます。ただし、AutoUpdate.exe(標準では「Renesas\Hew\AutoUpdate\AutoUpdate.exe」)などはそのままでは使用できませんので、もしアップデートしたい場合はこちらにも「互換レベル」と「管理者権限」の設定を行います。
HEWをアップデートした場合は、「Hew2.exe」の「互換レベル」と「管理者権限」の設定を再確認して下さい。
Windows Vistaでは「C:\Program Files」フォルダにインストールしたつもりでも、実際は別の場所に保存されてしまうことと、管理者権限を持っていてもシステム関連のフォルダにあるファイルは自由に読み書きできないという仕様となりましたので、HEWが設定ファイルなどの保存が今まで通りできなくなってしまいました。ご面倒ですがVistaをご使用の方は、上記内容をよくお読みいただき、ご利用なさいますようお願いします。
さらに詳しい内容はルネサスサポートページ「ルネサステクノロジ, Windows Vista(TM)対応, ツールニュース, 20070516」をご覧になって下さい。
裏技として、「C:\Program Files」ではなくて、全くちがうフォルダへインストールするという方法もあります。この方法ではHEWの設定は不必要になりますが、AutoUpdateやDocumentUpdaterなどは設定が必要です。
アップデートに関しては、Renesasの対応をもう少し待った方がよいかもしれません。
インサイド・KRS40XX
KCB-1でシリアルサーボモーターの制御をしているときに、時々動かなくなってしまうことがありませんか?これはサーボモーターに命令を立て続けに送ったときなどに起きる現象です。
KRS-40XXシリーズなどの弊社製サーボモーターは、単に位置制御を行っているだけではなく、デイジーチェーンで接続する場合は信号線を全てのモーターと共有しますので、自分への信号なのかどうかを調べたりしています。もちろんKCB-1からだけではなく、他のサーボモーターが出した返事についても調べなくてはなりません。
このような内部処理を正しく行うために、KRS-40XXシリーズではデータの受け渡しを行った後に若干の時間を必要としています。その時間は約300~400[us]。KRS-40XXは115kbpsでデータの送受信を行いますので、位置制御(set_pos)に必要な6バイトの送受信時間を合わせると、一台のモーターあたり1[ms]程度の余裕が必要です。
--- 例 ---
while (1) {
...
sio1_set_pos (1, 目標位置); // 送受信に約600[us]を使用している
wait (200); // 若干の待ち時間(300~400[us])待つ
sio1_set_pos (1, 目標位置); // 再度目標位置を送信
wait (200);
sio1_set_pos (2, 目標位置); // IDが変わっても、同じSIO端子を使う場合はちょっと待つ
…
}
KCB-1では、このデータ送受信時間以外に必要な300~400[us]をさらに詰めるために、SIO端子を2つもうけています。SIO1,2に交互にデータを送信することで、たくさんのサーボモーターを短い(約半分の)時間で動かすことができるようになります。または処理が完全に終わるだけの間隔を持ったタイマーを使う方法もありますよ。




