本講座のサンプルがVS-WRC003LVやBeauto Roverでも動作することを確認しました。若干の修正が必要です。
本講座のサンプルをVS-WRC003LVで使う最も簡単な方法は、VSTONEのサポートページから「無線コントローラVS-C1での操縦 」等のサンプルをダウンロードしてこれを利用することです。プロジェクトをHEWで開いてmain.cをプロジェクトから削除、本講座のサンプルソース(たとえば6_pid.c)を代わりに追加します。
次に、6_pid.cの
#include "vs-wrc003.h"
を
#include "vs-wrc003lv.h"
に直してください。
VSTONEのサポートページにVS-WRC003LV シリアルコンバータが公開されました。これを使えば本講座のようにシリアル通信を用いた調整およびデバッグができます。
ただし、少なくとも私の環境では通信速度を19200bpsまで下げた上でパリティなしの設定にする必要がありました。ロボット側で通信速度とパリティの設定を変えるには本講座のサンプルソースのInitSci3(CBR_115200, even, 1);
をInitSci3(CBR_19200, non, 1);
に変更します。また、PCのターミナルソフトでもあわせて設定を行ってください。
なお、現時点においてvs-wrc003lv.cのmtr_run関数には依然としてバグがあります。前回書いた注意点のようにvs-wrc003lv.cを修正するか、本講座サンプルソースのrun関数から下記2行を消すかのいずれかを行ってください。
void run(int speed, int turn_speed)
{
// 前進速度+回転速度から左右のモーターのduty比を決める
int d1 = speed - turn_speed;
int d2 = speed + turn_speed;
// 絶対値が127(100%)を超えないようにする
// duty比が0のとき、Mtr_Runに渡す数は0x80にしてブレーキ動作にする
if(d1 > 127) d1 = 127;
else if(d1 < -127) d1 = -127;
else if(d1 == 0) d1 = 0x80; // brake ← この行を削除
if(d2 > 127) d2 = 127;
else if(d2 < -127) d2 = -127;
else if(d2 == 0) d2 = 0x80; // brake ← この行を削除
Mtr_Run(-d1, d2, 0, 0);
}
山口辰久