[システム事例]RCショベルカー無線化改造

「おもちゃ用のRCショベルカーを、無線で遠隔制御できるようにしたい」とのご要望を頂き、無線化を行った際の事例です。
案件額としては赤字覚悟での受注でしたが、再販を条件にお受けしました(というよりも、やりたい!という好奇心が強かった…)
基本構成は、ESP32(Arduino)でモータ6軸制御(うち4軸はエンコーダ付き位置制御、キャタはオープン速度制御)の構成です。エンコーダは取付位置確保が困難で、外皮を削らざるを得ませんでした(ここが心残り…)。その後、タミヤモータなど用のエンコーダ基板を別途作成し、小型化&エンコーダディスクの内作(3Dプリンタ)を行い、動作させるところまでは完成済みです。あとは、販売用にやるかやらないか…ですね。あ、そうそう、モータ基板もパワーアップして作り直しました。
Arduino UNO Qが出ましたので、できればこれで作り直したいところですね。Q、RaspPI+ArduinoまたはLattePandaのようにCPU(Ubuntuなど)+マイコンの構成が7000円で作れる素晴らしいSBCぽいです。発注済みなので、試したらまたブログに記載しますね(脱線)。

実際の構成など、ご興味ありましたらContactまで御連絡ください。以下はREADME.mdの転載です(手抜き;


RCショベルカー無線

必要機材

  1. RCショベルカー:Huina1593
  2. Raspberry pi 5
    1. Raspberry Pi 5 Model B Rev 1.0
    2. Linux raspberrypi 6.12.34+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.34-1+rpt1~bookworm (2025-06-26) aarch64 GNU/Linux
  3. 開発環境用PC
    1. RealVNC
    2. Cursor
    3. Raspberry Pi Imager

Raspberry Piでの環境構築方法(0から環境を作る場合)

基本は添付のMicroSDカードを用いて下さい。新たにSDカードを作る場合の手順は以下の通りです。

  1. [PC]Raspberry Pi Imagerを用いて以下imgファイルでMicroSDカードのイメージを作成する

    Raspberry Pi OS(32bit) 2025-05-13

  2. [RP]RP5にMicroSDカードを挿入し、電源を投入する
  3. [RP]起動まで1min程度待ちます
  4. [PC]無線LANでTANK_AP4に接続します(Pass:5577810057838)
  5. [PC]RealVNCで新規接続として192.168.50.1を追加します

    192.168.50.1、User : tank、pass : 0011

  6. [PC-RP]VNCが接続されたら、ターミナルを起動します
  7. [PC-RP]以下コマンドで実行して、全自動で開発環境を構築します(必要最小限のみ)

    bash ./work/raspi_configuration/setup_apx.sh

  8. 完了後以下のコマンドで再起動を実施します

    sudo shutdown -r 0

操作法詳細

起動

  1. [RP]Raspberry pi 5(RP)にMicroSDカードを挿入する 
  2. [RP]RPの電源を投入する
  3. [RP]起動まで1min程度待つ
  4. [PC]無線LANでTANK_AP4に接続する(Pass:5577810057838)
  5. [PC]RealVNCを起動する
  6. [PC]RealVNCで新規接続として192.168.50.1を追加する(未作成の場合のみ)

    192.168.50.1、User : tank、pass : 0011

  7. [PC]作成したVNCサーバリストから、50.1を選び起動する
  8. [TANK]バッテリーを接続し、スイッチをONにする

[RP]mqttステータスを受信する

  1. ターミナル1を起動する
  2. mosquitto_sub -t tank/stと入力する
  3. TANKが参加するとtank_st..のようなステータスが流れ始め、バケット軸のみ巻き込み動作を開始します(初期化完了通知用)
  4. もし45秒以上経過してもメッセージが流れ始めない場合には、RC本体の電源をOFF/ONして再起動を実施する(無線AP CHの問題)

[RP]シーケンスアプリを起動する

  1. ターミナル2を起動する
  2. 以下コマンドを入力する(ディレクトリの移動)

    cd work/python/30_sequence

  3. 以下コマンドを入力して仮想環境を起動します

    source ./venv_sequence/bin/activate

  4. Bluetooth(BT)コントローラの電源を入れる(HOMEボタン1秒程度押し)→成功したら振動
  5. BT接続に失敗したらメニューのBluetoothからコントローラ削除、再度ペアリング実行(HOME+X長押しで起動)
  6. 以下コマンドを入力します(シーケンスソフトの起動)

    python ./sequence.py –sequence-file ./tank_demo.txt

  7. シーケンスプログラムが起動します

シーケンスプログラムの操作法

  1. Bluetoothコントローラで操作する場合
    1. 正常起動してコマンド待ちになることを確認し、2と入力します(BTコントローラモード)
    2. コントローラの各ボタンを押して、RCを操作してください
    3. キー割当方法、現在の割当は、別途資料を参照ください
  2. シーケンス運転の場合
    1. 正常起動してコマンド待ちになることを確認し、1と入力します
    2. 起動時に指定したシーケンスリスト(上の例ではtank_demo.txt)の内容に従って、RCが自動運転を開始します
    3. 自動運転の最初には「エンコーダ初期化スクリプト」を組み込んでください
    4. シーケンスリストの作成方法、コマンド表記は別途資料を参照ください

エンコーダ位置の初期化(コントローラ操作での初期化)

  1. R2キーを押し続け、停止するまで待つ(バゲット上昇)
  2. L2キーを押し続け、停止するまで待つ(アーム上昇)
  3. Xキーを押し続け、停止するまで待つ(ブーム上昇)
  4. Y/Aキーで旋回の中心位置に設定する(旋回位置中央に回転させる)
  5. STARTキーを押して、エンコーダ位置を初期化する

ショベルカーの操作(コントローラ操作)

  1. [左]上下左右:キャタピラ前後移動、旋回
  2. [左]L1/L2:アーム上昇/下降
  3. [右]Y/A:左旋回/右旋回
  4. [右]X/B:ブーム上昇/加工
  5. [右]R1/R2:バゲット上昇/加工
  6. [右]START:エンコーダ位置の初期化 ** 初期化時以外は押さないこと

シーケンスプログラムの停止

  1. ターミナル2でCtrl+Cを押して、アプリを停止させてください

可動範囲(位置制御Pコマンドでの指定範囲、[ ]内はモータ軸No.)

  1. バケット[2] >2000~10000
  2. アーム[3] >2000~13000
  3. ブーム[0] >2000~15000(実際には22000以上あり)
  4. 旋回[1] >-14400~14400(±180deg、7200/90deg)
軸No. モータ 速度範囲 (電流制限) – 速度範囲 (電流制限) + 位置範囲 – 位置範囲 + コントローラ設定速度 ± 備考
2 バケット上下 ¹ -150 150 2000 10000 ±100
3 アーム上下 ¹ -150 150 2000 13000 ±110
0 ブーム上下 ¹ -150 150 2000 15000 ±100 +側は22000可能
1 旋回 ¹ -150 150 -14400 14400 ±80 7200/90deg
4 キャタピラ(L) -150 150 前進-、後退+
5 キャタピラ(R) -150 150 前進-、後退+

¹ 位置制御軸は、全て-側動作限界を0位置で初期化してください。