2026年6月30日

000-3.コラム~Tech Spotlight~ 第3回「MATRIX」を使ってみる

コラム~Tech Spotlight~ではそのときどきに気になるテーマにスポットライトをあてたコラムをお届けします。
MATRIX Robotics社の「MATRIX(マトリックス)」というロボットの開発キットを簡単に紹介します。MATRIXの詳細については次のWebページを参照してください。
https://afrel.co.jp/product/matrix/
(文/松原拓也)

◆セットの概要

今回はMATRIXシリーズの1つ「MATRIX R4 MissionGo Set(MA321)」を紹介します。主なパーツは金属製ビーム、コントローラ、DCモーター、サーボモーター、カラーセンサー、ライントレース用センサー、電池ボックス、ケーブルなどです。
これらのパーツを組み合わせてロボットを作ります。

MATRIXは「コネクタ」というパーツを指で押すだけでパーツ同士を組み合わせることができます。間違ってコネクタを付けてしまった場合には、「ステープル」という専用の工具を使うと簡単に外すことができます。
「MLクイックコネクタ」を使うと、レゴ社製のパーツを組み合わせることができます。金属板に空いている穴の間隔はレゴ テクニックの穴の間隔と同じです。この機能を応用すれば、SPIKEプライムやEV3と混ぜ合わせたロボットを作ることもできます。

今回の組み立ての中で最も難しかったのが、タイヤの取り付けでした。タイヤの穴にDCモーターのシャフトを挿し込むのですが、穴が固すぎて、シャフトが入りません。 考えた結果、プラスチック製ハンマー(100円ショップで購入)でシャフトを叩いてタイヤを挿し込みました。叩いた衝撃でモーターが壊れるんじゃないかという心配があったのですが、シャフトが金属製のためか、問題ありませんでした。

◆ ファームウェアの更新

ロボットの組み立てが完了するとこうなります。ケーブルは100円ショップの結束バンドで束ねました。
メーカーの説明書ではカラーセンサーを水平方向に固定していますが、ここではアーム開閉用のサーボホーンにカラーセンサーを固定しています。これによって、カラーセンサーの角度を0~90度の範囲で変更することができます。
ロボットの頭脳として機能するのがコントローラ(MATRIX Mini R4 Controller)です。コントローラには各種ポートが搭載されていて、センサーやモーターを接続することができます。コントローラは「Arduino UNO R4 WiFi」と互換性があり、サブCPUとして「STM32F103」を内蔵しています。
プログラミング環境は「MATRIXblock」「Arduino IDE」の2種類があります。「MATRIXblock」はMATRIX Robotics社独自の開発環境です。ブロック型のプログラムを採用しているので、親しみやすいです。 一方、「Arduino IDE」はArduino公式の開発環境です。Arduino言語(実質的にはC++)を採用しているので、より高度なプログラムを作成することができます。
ここでは「MATRIXblock」を使うことにします。次のWebページから入手することができます。

ファームウェアのバージョンが古いと、コントローラは正常に動作しません(OLEDに「Firmware outdated!」と表示されます)。ファームウェアを更新するには、先端が細いもので「DFU」というボタンを押したままパソコンとコントローラをUSBケーブルで接続します。さらに「MATRIXblock」を起動して、「Firmware Update」をメニュー選択します。ファームウェアのHEXファイルはメーカーのWebページからダウンロードすることができます。

◆ サーボモーターを動かす

OLED(有機ELディスプレイ)にバッテリの電圧を表示するプログラムを作ってみました(battery_check.mbr4)。 コントローラはUSBポートかDCジャック(バッテリ)から給電します。USBポートのみで給電する場合はモーター類を動かすことはできません。モーターを動かすにはバッテリが必要です。バッテリは「18650リチウムイオン電池×2本」と「単3形電池×6本」のどちらかを利用可能です。セットには2種類の電池ボックスが付属します。
バッテリの電圧は6V~24Vと定められています。筆者の場合は単3形のニッケル水素電池(エネループ)を使用しました。この場合、バッテリの電圧は1.2V×6本=7.2Vです。バッテリの残量が少ない状態でモーターに負荷が加わると電圧が6Vを下回ってしまう場合があります。使い捨てになるデメリットがありますが、電圧を考慮すると、アルカリ電池を使った方が安心です。マンガン電池は流せる電流が少ないので使えません。
バッテリをコントローラに接続して、プログラムを実行すると、7.78Vと表示されました。電池ボックスのスイッチを忘れずにオンにしましょう。この機能を使えば、誤差はありますが、バッテリの残量を知ることができます。
使ってみて気が付きましたが、コントローラの電源をオフにした状態でもバッテリを少しずつ消耗してしまいます。長時間使用しない場合には、電池ボックスのスイッチをオフにするか、DCジャックから外しておきましょう。

カラーセンサー(MATRIX Color Sensor V3)の動作をテストするプログラムです(colorsensor_test.mbr4)。カラーセンサーはカラーID、RGB値、Clear値(明るさ)、HSV値を検出することが可能です。
プログラムを実行すると、OLEDにカラーIDを表示します。試しに緑色をカラーセンサーで読み取ってみたところ、OLEDには「6」と表示されました。正常にセンサーが動作しています。

サーボモーターの動作テストをするプログラムです(servo_test.mbr4)。
プログラムを実行した状態で、UP/DOWNボタンを押すと、アーム上下用/アーム開閉用サーボモーターを動かすことができます。
最初に一度だけサーボモーターの回転角度を調整しておく必要があります。プラスドライバーを使って、サーボホーンを外してからプログラムを実行します。その後、サーボホーンを付け直すと回転角度の調整は完了です。

◆ DCモーターを動かす

ロボットがDCモーターでその場旋回をするだけのプログラムです(dcmotor_test.mbr4)。DCモーターにはロータリーエンコーダが内蔵されているため回転速度や回転量を制御することができます。
プログラムを実行した状態で、UPボタンを押すと、時計方向に90度その場旋回します。DOWNボタンを押すと反時計方向に90度その場旋回します。
「Turn Two-Wheed」ブロックはIMU(ジャイロセンサ+加速度センサ)をフィードバックしているため、旋回の角度が非常に正確です。

ライントレース用センサー(MATRIX Line Tracer 10CH V2)の動作をテストするプログラムです(linetracer_sensor_test.mbr4)。ライントレース用センサーはラインの位置、ラインの太さ、特殊なカーブ(右直角/左直角/十字路/丁字路)、最後に検出したラインを検出することができます。
プログラムを実行すると、検出したラインの位置をOLEDに表示します。値の範囲は-4.5~+4.5です。ラインが中心にあるほど値は0に近づきます。

ロボットがラインをトレースするプログラムです(linetracer_move.mbr4)。
プログラムを実行した状態でUPボタンを押すと、ロボットはラインをトレースします。10秒間、走り続けると、ロボットは停止します。

ここまで紹介した技術を組み合わせて、ロボットでブロックをつかんで運ぶプログラムを作ってみました(catch_block.mbr4)。アームでつかみやすくするため、ブロックは「Tの字型」にします。
プログラムを見やすくするため、アームの制御はマイブロックで行っています。マイブロックの引数はサーボモーターの角度です。
プログラムを実行すると、ロボットは15cm前進して、カラーセンサーでブロックの色を読み取ります。続いて、アームでブロックをつかんで持ち上げます。さらに15cm後退してから、ブロックを降ろして放します。最後に、OLEDにブロックのカラーIDを表示します。
アームは2本指のうち片方だけが動く機構になっています。そのため、動かない方の指がブロックに衝突してしまうミスが多く発生します。ブロックが誤って衝突しないようにプログラムやアームの機構を改良すると良いと思います。

以上で「MATRIX R4 MissionGo Set」の機能を簡単に紹介しました。 ロボットは「物をつかんで持ち上げる」「色を読み取る」機能を備えていて、競技に特化したロボットだと感じます。性能は大満足です。回路図が公開されていない点が不満ですが、これは仕方ないことのようです。思えばSPIKEプライムも回路図は非公開でした。ユーザーが頑張ることで、技術情報のギャップを埋められるかもしれません。

今回作成したプログラムをGitHubで公開しています。

組み立てとプログラムを実行中の様子

当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。