
DYNAMIXEL シリアルサーボ XL330 車輪倒立振子の製法
本記事にはアフィリエイト広告が含まれます。
DYNAMIXEL XL330-M077-T を使った2輪の倒立振子ロボットの製法を記載します。
IMU内蔵のマイクロコントローラ Atom Matrix で機体姿勢を検知し、左右の XL330 をカレント制御して倒立します。
Atom Matrix が Wi-Fi アクセスポイントになり、スマートフォンや PC のブラウザからジョイスティック操作と制御パラメータ調整ができます。
倒立振子
ジョイスティックで楽しむ pic.twitter.com/i5Mxb5vSTq— HomeMadeGarbage (@H0meMadeGarbage) July 3, 2026
目次
構成
2輪 倒立振子ロボットの構成は以下の通り
部材
- ATOM Matrix V1.0 (IMU:MPU6886)
https://akizukidenshi.com/catalog/g/g117215/
- シリアルサーボ DYNAMIXEL XL330-M077-T
https://item.rakuten.co.jp/grass-road/902-0162-000/
ボーレートを1Mbpsとして ID0,ID1 の2台を用意してください
- 1セル LiPoバッテリ 3.7V
[amazonjs asin=”B0B2PDQZNY” locale=”JP” title=”5PCS 3.7V 380mAhリチウムバッテリーパック 用の Hubsan X4 H107C H107D Syma Q11 X13 S39 HS170 TOZO Q2020 E016H WLtoys V252 V966 V911S XK A150 A100 TR-C38 AT-96 RC UAV空中写真クワッドコプタ”]
- タミヤ 楽しい工作シリーズ No.145 ナロータイヤセット 58mm径
[amazonjs asin=”B001VZJDZ6″ locale=”JP” title=”タミヤ 楽しい工作シリーズ No.145 ナロータイヤセット 58mm径 (70145)”]
- 半2重通信基板
筐体3Dモデル
倒立ロボの筐体3Dモデルデータは以下にアップ
https://github.com/homemadegarbage/XL330-Pendulum/tree/main/3Dmodel
3Dプリントして使用ください
機体
完成機体
マイコンATOM Matrixの側面コネクタ反対側を前方として、XL330の配置は機体右をID0、左をID1とします。
半2重通信基板
半2重通信基板は前節の構成図のとおりマイコンとバッテリを接続するために配線します。
バッテリはコネクタ線 (51006 molex オスなど)で半2重通信基板に給電 (Vm-GND)
ATOMは側面の4ピンコネクタでシリアル線(Tx:IO32、Rx:IO26)、GNDそして給電としてマイコン5Vピンをバッテリ電源Vmに接続
半2重通信基板の3.3VピンはATOM裏面の3.3Vピンと接続するので配線しピンヘッダでコネクタにさせるようにします。
半2重通信基板の出力はピンヘッダ(3pin)を立ててXL330の信号線と接続します 。
組立て
body.stlにATOM Matrixをねじ止め
ATOM裏面のネジ穴に通して M2×6mmネジで固定
前節で配線加工した半2重通信基板をspacer.stlを通してM3×8ネジ(4か所)で固定します。
body.stl側のネジ穴はあらかじめM3ネジ用のタッピングでネジ切りしておきます。
加工した配線の4ピンコネクタをATOM側面に、
3.3V 1ピン配線をATOM裏の3V3コネクタに差します。
XL330の駆動ホーンにwheelFix.stlをM2×6mmネジ(4か所)で固定。
XL330をbody.stlにはめ込んで側面から2か所づつM2×8mmネジで固定
配置は機体右をID0、左をID1とします。
wheelFix.stlにタミヤタイヤをM3×8mmネジ(3か所)で固定。
wheelFix.stl側のタイヤ固定用ネジ穴はあらかじめM3ネジ用のタッピングでネジ切りしておきます。
XL330付属の配線で半2重通信基板とID0。ID1のXL330を数珠つなぎします。
LiPoバッテリを両面テープでbody.stlに固定して完成です。
Arduinoコード
コードは以下にアップしております。ATOM Matrixに書き込んでください。
Arduinoコード環境・必要ライブラリ
- Arduino IDEバージョン:ver. 1.8.19
- ESP32ライブラリ:ver. 2.0.13
- M5Atomライブラリ:ver. 0.1.3
- Kalman Filter Library :ver. 1.0.2
- Dynamixel2Arduino:ver. 0.8.1
コード概要
ATOM MatrixをアクセスポイントとしてWiFiで接続してブラウザアプリで走行制御や各種パラメータ調整が可能です。
制御回り
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
vel = (v0 - v1) * 0.5; // 左右平均回転速度 theta0_hat += Ki * (vel - velCmdFiler) * dt; theta0_hat *= 0.999; velCmdFiler += 0.1 * (velCmd - velCmdFiler); Mbal = Kp * sin((kalAngle + theta0_hat) * DEG_TO_RAD) + Kd / 2500.0 * kalAngleDot + Kw / 100.0 * (vel - velCmdFiler); Tturn = Kyaw / 100.0 * (gyroZ - omegaCmd); M0 = Mbal - Tturn; M1 = Mbal + Tturn; |
機体角度 (kalAngleY )、機体角速度(kalAngleDotY)、ホイール回転速度をフィードバックして倒立させます。
機体角度はsinをとることで0°近傍は線形に制御して、角度が大きくなるとゲインをゆるめるようにしております。
旋回動作(Tturn )はYaw軸角速度とのP制御
回転速度は左右の平均で算出。
さらに速度誤差を積算して目標倒立角度を調整する工夫も施しています (theta0_hat)。
XL330はCurrent Control Modeで駆動して押します。
XL330の動作モードとその比較は以下を参照ください。
ロボ起動
コードをATOMに書き込んでバッテリを半2重通信基板のバッテリコネクタ線 (51006 molex オスなど)に接続すると起動します。
ロボ起動 pic.twitter.com/hNRoK0SNid
— HomeMadeGarbage (@H0meMadeGarbage) July 4, 2026
機体を起き上げて±2°以内になると制御が開始します。
機体が±40°以上になるとモータは停止状態になります。
ATOM MatrixのLEDは機体角のインジケータにもなっております。
±1°以内で緑
±20°以上で赤
それ以外は青
ブラウザアプリ
ATOM MatrixをアクセスポイントとしてWiFi接続してブラウザから走行制御とパラメータ調整が可能です。
-
機体を起動して、スマホもしくはPCのWiFi接続設定で以下に接続
SSID: XL330-pend
パスワード:password -
ブラウザで ”192.168.40.1” にアクセス
ジョイスティックで機体走行の前後進/旋回・右左折が可能です。
“パラメータ調整”ボタンクリックで画面遷移
“戻る”ボタンクリックでホームのジョイスティック画面へ遷移
動作
シリアルサーボ XL330で倒立振子
ブラウザアプリでギュンギュン動かせます pic.twitter.com/AyGztctI3C— HomeMadeGarbage (@H0meMadeGarbage) July 4, 2026
XL330-M077-T
回転はやいけどそれなりのギア比なのでトルクもあるよ pic.twitter.com/ss369DKJnO— HomeMadeGarbage (@H0meMadeGarbage) July 4, 2026
















