戦車ラジコンのコントローラについて

戦車ラジコンのコントローラには、以下の機能が求められる。スティックやボタンへの機能割り当てはさまざまである。本格的なプロポを使う場合には自由に割り当てることもできる。

  • 走行系 (前進/後退、左旋回/右旋回 または 左履帯の前進/後退、右履帯の前進/後退)
  • 砲塔系 (砲塔の左回転/右回転、砲身のアップ/ダウン) ※
  • 砲撃系 (機銃の掃射、主砲の発射)
  • その他 (エンジン音ON/OFF、機銃回転、ライトなど)

※ 砲身のアップ/ダウンに関しては、クランク機構によるため、1ボタンで往復の場合もある

スティックの操作割り当て

2chスティックの場合には、スティックで操作できるのは走行系のみである。これには2通りある。

  • カーラジコンと同様に、左スティックで前進/後退、右スティックで左旋回/右旋回を行う
  • 実際の戦車と同様に、左スティックで左履帯の前進/後退、右スティックで右履帯の前進/後退を行う

4chスティックの場合には、走行系と砲塔系の両方をスティックで操作できる。これにも2通りある。

  • カーラジコン型の拡張で、左スティック左右で砲塔の左回転/左回転、右スティックの上下で砲身のアップ/ダウンをおこなう
  • 走行系を左スティックにまとめ、砲塔系を右スティックにまとめる (またはその逆)

画像


また、トイラジコンではスティックの代わりに十字ボタンになっているものや、スティックではあるが比例制御ではなくボタン同様のON/OFF制御にすぎないものもある。一方で、ボタンであっても1速・2速・3速といった変速を備えているものもあり、さまざまである。

ボタンの操作割り当て

スティックで操作できない機能は、ボタンやスイッチなどで操作する。それらの配置は特に定番の方式はない。いずれにせよ、2chスティックより4chスティックのほうが、ボタン数が少なくてすむのは言うまでもない。スティック調整用のトリマとスティックを同時に動かすことで砲撃を行うといった変則的な操作の場合もある。

画像

iReceiverについて

京商のiReceiverは、スマートフォン(Android/iOS)でコントロールできるWiFiラジコン受信機である。6chのラジコン受信のほか、カメラユニットも接続可能である。専用のスマートフォンアプリは、カメラ映像の上にプロポ風のコントローラがオーバーレイ表示されたUIになっている。FPV(First Person View; 一人称視点)で操縦できるのは魅力である。

1/16 M1エイブラムスの解析

改造用に1/16 M1エイブラムス(童友社)を借りてきた。デカい。
基板をオレオレ基板に交換して遊ぼうと思う。
写真

分解

デカいわりに中はわりとスッカスカ。基板はメイン基板と無線基板の2枚。
駆動系がマブチ260ぽいモータが2個で、いかにも非力に見える。が、駆動電圧を測るとほぼ7.2Vフルなので260ではないのかもしれない。その他にLEDが4個(左右のヘッドライトとテールライト)。底面の前のほうにはわりと大きいスピーカを備えている。
写真


砲塔にはモータ3個とリミットスイッチ1個とLED1個。モータは砲塔の回転用と砲身の上下用、そして砲撃アクション用であり、マブチ130モータのように見えるが、こちらも砲撃アクションは約7.2V、砲塔回転と砲身上下も約5Vで駆動されているので、通常の130ではないかもしれない。砲身の上下はクランク機構によるもので、モータを回し続けると上下動を繰り返すというわりと残念な仕様である。機銃を持った米兵が砲身の上下と連動して左右に動く機構になっている。謎仕様である。砲撃アクションはカムとバネによるもので、1回転(1回の砲撃)を検出するためにリミットスイッチが設けられている。
写真


メイン基板にはRX5 ATS305Rというラジコン用の制御チップが使われている。黒い樹脂で封止された子基板が刺さっているが、サウンドデータが入っているのではないかと思われる。電源は7.2Vのニッカドバッテリー。
写真


無線基板は27MHz帯ということしか分からないが、どうせWiFiBluetoothで置き換えるので、深く詮索しないことにする。
写真


まとめると、メイン基板に接続されているデバイスは、バッテリー1個、モータ5個、スピーカ1個、LED5個、リミットスイッチ1個、および無線基板である。

メイン基板のコネクタ

メイン基板のコネクタは全て日圧のXHを使用。電源のみ基板に直接ハンダ付け。
XHは2.5mmピッチなので、ユニバーサル基板でもオレオレ基板が作りやすそうである。
(厳密には2.54mmピッチではないので、12ピンのコネクタは刺さらないかも…)

J1
ピン番号 ケーブル色 接続先
1 右駆動輪-
2 左テールライト アノード
3 左テールライト カソード
4 左ヘッドライト カソード
5 左ヘッドライト アノード
6 右駆動輪+
7 左駆動輪+
8 右テールライト カソード
9 右テールライト アノード
10 右ヘッドライト アノード
11 右ヘッドライト カソード
12 左駆動輪-
J2
ピン番号 ケーブル色 接続先
1 砲撃+
2 砲撃-
3 × N.C.
4 × N.C.
5 砲撃 リミットSW
6 砲撃 リミットSW
7 砲塔ライト アノード
8 砲塔ライト カソード
9 スピーカ+
10 スピーカ-
J3
ピン番号 ケーブル色 接続先
1 砲塔回転-
2 砲塔回転+
3 砲身上下-
4 砲身上下+
J4

無線部との接続。改造に不要なので解析しない。

歩くミニ四駆をWebからコントロール

Webブラウザからインターネット経由で歩くミニ四駆をコントロールできるようにしてみました。
Web系・クラウド系はまったくの未経験なので、お手軽に使えるともっぱらの噂のMilkcocoaを使うことにしました。GPduinoにはBLEしか通信機能がないので、Android端末を介してネットワークに接続しています。



先日の大阪版IoT縛りの勉強会!IoTLT大阪 Vol.2で発表してきました。


送信側 (Webブラウザアプリ/JavaScript)

HTMLでUIを記述し、milkcocoa.js と アプリのスクリプト(ここではcontroller.js)を読み込みます。

<script src='https://cdn.mlkcca.com/v2.0.0/milkcocoa.js'></script>
<script src="controller.js"></script>

スクリプトはいたって簡単です。

  1. MilkCocoaのオブジェクトを生成する
  2. データストアのオブジェクトを生成する
  3. ボタンが押されたらデータをsendする

これだけです。

window.onload = function(){
  var buttonUp    = document.getElementById('up');
  (中略)
  var milkcocoa = new MilkCocoa("アプリのID.mlkcca.com");
  var ds = milkcocoa.dataStore('gpduino');
  (中略)
  buttonUp.onclick = function() {
    (中略)
    ds.send({direction: 'up'});
    (後略)

つまらないものですが、ソースを置いておきます。使うときはアプリのIDを書き換えてください。
ソース

受信側 (Androidアプリ/Java)

KonashiのSDKを使う都合上、WebアプリではなくJavaのネイティブアプリで実装しました。
JavaでMilkcocoaにアクセスするためにMilkcocoa SDK for Androidを利用します。こちらからダウンロードします。


GitHubにもあがっていますが、2016年4月日現在、メンテが滞っており最新版ではないようです。こちらを使うとsendのイベントリスナーでヌルポインタ例外が発生します。かならず、上記のページからダウンロードしてください。


とりあえず、使うクラスは4つだけ。

import com.mlkcca.client.DataElement;
import com.mlkcca.client.DataStore;
import com.mlkcca.client.MilkCocoa;
import com.mlkcca.client.DataStoreEventListener;

public class MilkKoshianUI extends ActionBarActivity implements View.OnClickListener, DataStoreEventListener {
  private MilkCocoa m_milkcocoa;
  private DataStore m_dataStore;

はじめに以下の処理をします。

  1. MilkCocoaのオブジェクトを生成する
  2. データストアのオブジェクトを生成する
  3. イベントリスナーを登録する
  4. sendを監視する
  (中略)
  public void onCreate(Bundle savedInstanceState) {
       (中略)
    m_milkcocoa = new MilkCocoa("アプリのID.mlkcca.com");
    m_dataStore = m_milkcocoa.dataStore("gpduino");
    m_dataStore.addDataStoreEventListener(this);
    m_dataStore.on("send");
  }

そして、sendがあったらデータを取り出します。あとはBLEでミニ四駆に送信するだけです。

  public void onSended(DataElement dataElement) {
        
    String direction =
      dataElement.getValue("direction");
    (後略)
  }

こちらもソースを置いておきます。使うときはアプリのIDを書き換えてください。
ソース

相補フィルタ

6軸センサ(ジャイロ3軸+加速度3軸)で姿勢を推定する場合、ジャイロのみでも加速度のみでも姿勢角の推定はできますが、それぞれ一長一短があります。


ジャイロによる推定
角速度の積分で姿勢角を推定する。
長所:自身の並進運動の影響を受けない。
短所:積分によって誤差が蓄積される。


加速度による推定
重力加速度の方向で姿勢角を推定する。
長所:現在の値のみで計算できる。(誤差の蓄積が無い。)
短所:自身の運動による加速度が重畳され外乱となる。
   ヨー軸の推定はできない。


すなわち、短期的にはジャイロによる推定が、長期的には加速度による推定が有利。
そこで、両者の特性を補い合う相補フィルタを用います。


ここでは、ピッチ軸の姿勢角推定について考えます。
ジャイロG=(Gx,Gy,Gz), 加速度A=(Ax,Ay,Az)
ジャイロによるピッチ角変化推定 Δθg = Gy×Δt
加速度によるピッチ角推定 θa = atan2(Ax,Az)
相補フィルタによるピッチ角推定 θ(n+1) = k×(θ(n)+Δθg) + (1-k)×θa
係数 k = 0.996くらい?


すなわち、短期的にはジャイロによる推定が支配的ですが、長期的には加速度による推定によって誤差の蓄積が補償されます。

ミニ四駆型ラジコン4号

NT金沢にむけて製作していたミニ四駆型ラジコン4号がようやく動くようになり、先日のメイカーズバザール大阪でも展示してきました。
ミニ四駆型ラジコン4号


4号機では新規に制御ボードを設計しました。メインCPUはAVR ATmega328P-AU、BLEモジュールはKoshianです。DCモータ2チャンネル、サーボ1チャンネル、LEDなど(PWM)2チャンネルを駆動できます。AVRはISPでのファーム書き込みとなりますが、ファームはArduinoで開発しました。回路設計もArduino ProMiniがベースです。レッツ&ゴーのGPチップにちなんでGPduinoと名づけました。
GPチップ


1号機〜3号機は前輪にステアリング機構を採用していましたが、4号機はモータを2個搭載して後輪を左右独立2輪駆動としました。これにより、戦車のような超信地旋回ができるようになります。
左右独立二輪駆動


ヘッドライトにLEDを仕込みました。PWM駆動できます。電球色のLEDを使ってみました。
ヘッドライト


前輪のゴムタイヤのグリップが思いのほか強く、後輪を左右逆回転させてもうまく超信地旋回できませんでした。いろいろ試行錯誤した結果、前輪にメンディングテープを巻いたらサクサク旋回するようになりました。
前輪にメンディングテープ