TETRIX は Pitsco Education が販売している LEGO Mindstroms の拡張製品です。 アルミ製フレーム、高トルクのモーター等がセットに含まれており、本格的なロボットの製作が可能になります。
電圧 | 12V |
静止トルク | 2.1N・m |
回転数 | 152rpm |
名前 | HS-485HB(HITEC) |
電圧 | 6V |
静止トルク | 0.59N・m |
回転数 | 56rpm |
TETRIX ベースセットには DCモータードライバ (DC Motor Controller for TETRIX)、RCサーボドライバ (Servo Controller for TETRIX) が付属しています。
これらのモータードライバと EV3 を接続することで DCモーター及び RCサーボの制御が可能になります。
以下のように接続してください。
接続してモータードライバの電源が ON の状態で EV3 の電源を投入してください。
EV3 とモータードライバの通信は I2C により行います。
接続に成功している場合、/dev以下にi2c-3、i2c-4、i2c-5、i2c-6 のいずれかのデバイスファイルが追加されているはずです。 後ろの値がポート番号に2を足した値になっています。例えばポート1に接続した場合は i2c-3 になります。 以下で ev3dev上で C++、及び Python によるモータードライバの制御方法について述べます。
まずは I2C 通信に必要なファイルをインクルードしてください。
#include <fcntl.h> #include <sys/ioctl.h> #include <linux/i2c-dev.h>
import smbus
I2C の通信を開始します。
int fd; = open("/dev/i2c-3", O_RDWR);
sm = smbus.SMBus(3)
モータードライバのアドレスは 0x01 に設定されますが、デイジーチェインで接続した場合 0x02~0x08 に設定されます。 上記の接続の場合、DCモータードライバは 0x01 で RCサーボドライバは 0x02 に設定されているはずです。 まずは DCモータードライバを操作してみます。
制御モードを設定します。 モーター1 は 0x44、モーター2 は 0x47 のレジスタに以下の値を書き込むことで制御モードが設定可能です。 ※TETRIX ベースセットにはエンコーダーは付属していないので速度制御、位置制御モードを使用する場合は別途購入する必要があります。
入力値 | 制御モード |
0b00 | PWM |
0b01 | 速度制御 |
0b10 | 位置制御 |
0b11 | エンコーダーリセット |
PWM モードに設定します。
ioctl(fd, I2C_SLAVE, 0x01) unsigned char buf[2] = {0x44, 0x00}; write(fd, buf, 2);
sm.write_i2c_block_data(0x01, 0x44, [0x00])
最後に PWM の幅を設定します。 モーター1は 0x45、モーター2 は 0x46 のレジスタに書き込むことにより設定可能です。 PWM は正回転するばあいは 1~127 の値、逆回転する場合は -127~-1 の値で設定できます。 ただし、0 の場合はフロートモードで停止、128 の場合はブレーキモードで停止します。
unsigned char buf[2] = {0x45, 0x30}; write(fd, buf, 2);
sm.write_i2c_block_data(0x01, 0x45, [0x30])
RCサーボドライバは最大6個の RCサーボを制御可能であり、0x42~0x47 のレジスタに目標角度を書き込むことで制御できます。 パルス幅は 0.75ms~2.25ms で設定可能です。
ioctl(fd, I2C_SLAVE, 0x02) unsigned char buf[2] = {0x42, 0x60}; write(fd, buf, 2);
sm.write_i2c_block_data(0x02, 0x42, [0x60])
以下は DCモーターを利用した乗り物の作成例です。
取っ手部分にLモーターが2個取り付けられており、Lモーターを回転させることで車体の制御が可能になっています。
使用した RTC は以下の通りです。
上記の乗り物を制御するためのコンポーネントです。
TetrixVehicle | ||
InPort | ||
名前 | データ型 | 説明 |
target_velocity | RTC::TimedVelocity2D | 目標速度 |
update_position | RTC::TimedPose2D | 位置の再設定 |
OutPort | ||
名前 | データ型 | 説明 |
position | RTC::TimedPose2D | 現在位置 |
コンフィギュレーションパラメータ- | ||
名前 | デフォルト値 | 説明 |
wheelRadius | 0.04 | 車輪の半径 |
wheelDistance | 0.34 | 車輪間の距離 |
portNum | 1 | ポート番号 |
rot_dir_left_motor | 1 | 左車輪の回転方向 |
rot_dir_righteft_motor | -1 | 右車輪の回転方向 |
GearRatio | 3.0 | ギア比 |
Lモーターの角度から車体の目標速度を出力するコンポーネントです。
TetrixVehicle | ||
OutPort | ||
名前 | データ型 | 説明 |
out | RTC::TimedVelocity2D | 目標速度 |
コンフィギュレーションパラメーター | ||
名前 | デフォルト値 | 説明 |
rotation_by_angle | -0.6 | 根元のモーターの角度に対する目標角速度の変化量 |
velocity_by_angle | -0.1 | 先端のモーターの角度に対する目標速度の変化量 |