How to Use TETRIX

概要

TETRIX は Pitsco Education が販売している LEGO Mindstroms の拡張製品です。 アルミ製フレーム、高トルクのモーター等がセットに含まれており、本格的なロボットの製作が可能になります。

仕様

  • DCモーター
電圧 12V
静止トルク 2.1N・m
回転数 152rpm
  • RCサーボ
名前 HS-485HB(HITEC)
電圧 6V
静止トルク 0.59N・m
回転数 56rpm

モータードライバ

TETRIX ベースセットには DCモータードライバ (DC Motor Controller for TETRIX)、RCサーボドライバ (Servo Controller for TETRIX) が付属しています。

これらのモータードライバと EV3 を接続することで DCモーター及び RCサーボの制御が可能になります。

接続方法

以下のように接続してください。

s_DSC00776.JPG

接続してモータードライバの電源が ON の状態で EV3 の電源を投入してください。

操作方法

EV3 とモータードライバの通信は I2C により行います。

接続に成功している場合、/dev以下にi2c-3、i2c-4、i2c-5、i2c-6 のいずれかのデバイスファイルが追加されているはずです。 後ろの値がポート番号に2を足した値になっています。例えばポート1に接続した場合は i2c-3 になります。 以下で ev3dev上で C++、及び Python によるモータードライバの制御方法について述べます。

まずは I2C 通信に必要なファイルをインクルードしてください。

  • C++
     #include <fcntl.h>
     #include <sys/ioctl.h>
     #include <linux/i2c-dev.h>
  • Python
     import smbus

I2C の通信を開始します。

  • C++
     int fd; = open("/dev/i2c-3", O_RDWR);
  • Python
     sm = smbus.SMBus(3)

モータードライバのアドレスは 0x01 に設定されますが、デイジーチェインで接続した場合 0x02~0x08 に設定されます。 上記の接続の場合、DCモータードライバは 0x01 で RCサーボドライバは 0x02 に設定されているはずです。 まずは DCモータードライバを操作してみます。

DCモータードライバ

制御モードを設定します。 モーター1 は 0x44、モーター2 は 0x47 のレジスタに以下の値を書き込むことで制御モードが設定可能です。 ※TETRIX ベースセットにはエンコーダーは付属していないので速度制御、位置制御モードを使用する場合は別途購入する必要があります。

入力値 制御モード
0b00 PWM
0b01 速度制御
0b10 位置制御
0b11 エンコーダーリセット

PWM モードに設定します。

  • C++
     ioctl(fd, I2C_SLAVE, 0x01)
     unsigned char buf[2] = {0x44, 0x00};
     write(fd, buf, 2);
  • Python
     sm.write_i2c_block_data(0x01, 0x44, [0x00])

最後に PWM の幅を設定します。 モーター1は 0x45、モーター2 は 0x46 のレジスタに書き込むことにより設定可能です。 PWM は正回転するばあいは 1~127 の値、逆回転する場合は -127~-1 の値で設定できます。 ただし、0 の場合はフロートモードで停止、128 の場合はブレーキモードで停止します。

  • C++
     unsigned char buf[2] = {0x45, 0x30};
     write(fd, buf, 2);
  • Python
     sm.write_i2c_block_data(0x01, 0x45, [0x30])

RCサーボドライバ

RCサーボドライバは最大6個の RCサーボを制御可能であり、0x42~0x47 のレジスタに目標角度を書き込むことで制御できます。 パルス幅は 0.75ms~2.25ms で設定可能です。

  • C++
     ioctl(fd, I2C_SLAVE, 0x02)
     unsigned char buf[2] = {0x42, 0x60};
     write(fd, buf, 2);
  • Python
     sm.write_i2c_block_data(0x02, 0x42, [0x60])

応用例

以下は DCモーターを利用した乗り物の作成例です。

s_DSC00777.JPG

取っ手部分にLモーターが2個取り付けられており、Lモーターを回転させることで車体の制御が可能になっています。

tetrix_device.png

使用した RTC は以下の通りです。

TetrixVehicle

上記の乗り物を制御するためのコンポーネントです。

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 ギア比

VehicleController

Lモーターの角度から車体の目標速度を出力するコンポーネントです。

TetrixVehicle
OutPort
名前 データ型 説明
out RTC::TimedVelocity2D 目標速度
コンフィギュレーションパラメーター
名前 デフォルト値 説明
rotation_by_angle -0.6 根元のモーターの角度に対する目標角速度の変化量
velocity_by_angle -0.1 先端のモーターの角度に対する目標速度の変化量

Download

latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK