概要

Alius RC は単なるリモコンではなく、オープンなロボット制御プラットフォームです。本文書はシステムインテグレーターとロボットソリューションアーキテクト向けに、Alius RC を既存のロボットシステムに統合する方法を紹介します。通信アーキテクチャ設計、プロトコル適応方案、および典型的な応用シーンの統合事例を含みます。

通信アーキテクチャ

全体トポロジー

Alius RC 統合方案は3つの基本通信トポロジーをサポートします:

トポロジーA:直接制御

Alius RC ──── OcuSync 4.0 ──── ロボット(DJI 基盤)

最もシンプルな方案で、Alius RC が OcuSync 4.0 経由で DJI フライトコントロール/基盤搭載ロボットに直接接続し、追加のミドルウェアは不要です。適応シーン:野外巡回、単一ロボット制御。

トポロジーB:ブリッジ制御

Alius RC ──── WiFi 6 / 4G ──── 地上局/エッジゲートウェイ ──── 独自プロトコル ──── ロボット

Alius RC が IP ネットワーク経由で地上局またはエッジゲートウェイに接続し、ゲートウェイがプロトコル変換を行った後、非 DJI 基盤のロボットを制御します。適応シーン:産業用 AGV スケジューリング、無人船フリート。

トポロジーC:ハイブリッド制御

              ┌── OcuSync 4.0 ── ドローン(DJI)
Alius RC ──────┤
              └── WiFi 6 ──── ゲートウェイ ──── CAN/EtherCAT ──── ロボットアーム/AGV

1台の Alius RC が異なるリンクを通じて同時に複数の異種ロボットを制御します。適応シーン:複合作業現場のマルチロボット協調。

通信リンク選択ガイド

シーン推奨リンク理由
視界内 DJI ロボット制御OcuSync 4.0最小遅延、最高の映像品質
屋内 非DJI ロボット制御WiFi 6屋内カバレッジ良好、高帯域幅
クロスリージョン遠隔制御4G距離制限なし
高信頼性シーンOcuSync + 4G デュアルリンク自動切替、リンク冗長

プロトコル適応

非 DJI ロボットを Alius RC に接続

Alius RC SDK は ProtocolAdapter 抽象レイヤーを提供し、任意のロボットプラットフォームの通信プロトコルを Alius RC の標準制御指令とテレメトリデータ構造にマッピングできます。

public class CustomRobotAdapter extends ProtocolAdapter {

    private Socket tcpSocket;
    private OutputStream outputStream;
    private InputStream inputStream;

    @Override
    public void connect(String address, int port) {
        // ロボット/ゲートウェイとの TCP 接続を確立
        new Thread(() -> {
            try {
                tcpSocket = new Socket(address, port);
                outputStream = tcpSocket.getOutputStream();
                inputStream = tcpSocket.getInputStream();
                startReceiveLoop();
                notifyConnected();
            } catch (IOException e) {
                notifyConnectionFailed(e.getMessage());
            }
        }).start();
    }

    @Override
    public void sendMovementCommand(MovementCommand cmd) {
        // 標準移動指令をロボットプロトコルに変換
        byte[] packet = new byte[16];
        ByteBuffer buf = ByteBuffer.wrap(packet);
        buf.order(ByteOrder.LITTLE_ENDIAN);
        buf.put((byte) 0xAA);               // フレームヘッダー
        buf.put((byte) 0x01);               // コマンドタイプ:移動制御
        buf.putFloat(cmd.getThrottle());    // スロットル
        buf.putFloat(cmd.getYaw());         // ヨー
        buf.putFloat(cmd.getPitch());       // ピッチ
        buf.putFloat(cmd.getRoll());        // ロール
        buf.put((byte) calcChecksum(packet));

        try {
            outputStream.write(packet);
            outputStream.flush();
        } catch (IOException e) {
            Log.e("Adapter", "Send failed", e);
        }
    }

    private void startReceiveLoop() {
        // ロボットからの状態データを継続受信
        byte[] buffer = new byte[256];
        while (tcpSocket != null && tcpSocket.isConnected()) {
            try {
                int len = inputStream.read(buffer);
                if (len > 0) {
                    RobotStatus status = parseStatusPacket(buffer, len);
                    // ロボット状態を標準テレメトリデータに変換
                    notifyTelemetry(status);
                }
            } catch (IOException e) {
                notifyDisconnected();
                break;
            }
        }
    }
}

カスタムアダプターの登録

ConnectionManager connMgr = AliusRCManager.getInstance()
    .getConnectionManager();

// アダプターを登録
CustomRobotAdapter adapter = new CustomRobotAdapter();
connMgr.registerProtocolAdapter("custom_robot_v1", adapter);

// アダプターを使用して接続
connMgr.connectViaAdapter("custom_robot_v1", "192.168.1.100", 8888);

標準制御指令構造

プロトコル適応を容易にするため、Alius RC SDK は統一された標準制御指令構造を定義しています:

public class MovementCommand {
    private float throttle;  // スロットル/前進後退 (-1.0 ~ 1.0)
    private float yaw;       // ヨー/旋回 (-1.0 ~ 1.0)
    private float pitch;     // ピッチ (-1.0 ~ 1.0)
    private float roll;      // ロール/平行移動 (-1.0 ~ 1.0)
    private float altitude;  // 高度制御 (-1.0 ~ 1.0)
    private long timestamp;  // 指令タイムスタンプ (ms)
    private int sequenceId;  // シーケンス番号、パケットロス検出用
}

public class StandardTelemetry {
    private double latitude, longitude;  // GPS 座標
    private double altitude;             // 高度 (m)
    private double speedX, speedY, speedZ; // 速度 (m/s)
    private double roll, pitch, yaw;     // 姿勢角 (度)
    private int batteryPercent;          // バッテリー残量 (%)
    private double voltage;              // 電圧 (V)
    private int gpsSatellites;           // GPS 衛星数
    private int signalStrength;          // 信号強度 (0-100)
    private long timestamp;              // データタイムスタンプ
}

典型的な統合事例

事例1:野外電力巡視ドローン

システム構成:Alius RC + DJI Matrice 350 RTK + 赤外線サーモグラフィジンバル

統合方案:トポロジーA(直接制御)

通信リンク:OcuSync 4.0、作業半径 5-10km

主要統合ポイント

  1. 飛行経路計画:Alius RC 上でカスタム経路計画アプリを実行し、MSDK WaypointMission 経由でウェイポイントを送信
  2. ジンバル制御:ダイヤルをジンバルチルトにマッピング、C1 キーで可視光/赤外線切替
  3. AI 欠陥認識:リモコン側で軽量 AI モデルを実行し、赤外線画像をリアルタイム分析して疑わしい発熱点をマーク
  4. 巡視レポート:飛行終了後に GPS 座標、サーモグラフィスクリーンショット、欠陥分類を含むレポートを自動生成
// ウェイポイントミッション例
WaypointMission.Builder builder = new WaypointMission.Builder();
builder.addWaypoint(new Waypoint(39.9087, 116.3975, 50.0f));
builder.addWaypoint(new Waypoint(39.9090, 116.3980, 50.0f));
builder.setMaxFlightSpeed(10.0f);
builder.setFinishedAction(FinishedAction.GO_HOME);

WaypointMissionOperator operator = 
    SDKManager.getInstance().getWaypointMissionOperator();
operator.loadMission(builder.build());
operator.startMission(e -> {
    if (e == null) {
        Log.i("Mission", "Waypoint mission started");
    }
});

事例2:産業用 AGV スケジューリング端末

システム構成:Alius RC + エッジゲートウェイ + AGV フリート(非 DJI 基盤)

統合方案:トポロジーB(ブリッジ制御)

通信リンク:WiFi 6 → エッジゲートウェイ → CAN/EtherCAT → AGV

主要統合ポイント

  1. プロトコル適応:ProtocolAdapter 経由で AGV の CAN プロトコルを標準制御指令にマッピング
  2. マルチ車両切替:リモコン画面上で現在制御する AGV 番号を選択し、制御対象を切り替え
  3. 状態監視:各 AGV のバッテリー残量、位置、タスク状態を受信・表示
  4. 安全インターロック:緊急ブレーキは OcuSync と WiFi デュアルリンクで同時送信、安全性を確保

事例3:緊急救助消防ロボット

システム構成:Alius RC + 消防ロボット + ガスセンサー + サーマルイメージング

統合方案:トポロジーC(ハイブリッド制御)

通信リンク:OcuSync 4.0(映像帰還) + 4G(センサーデータと制御指令バックアップ)

主要統合ポイント

  1. デュアルリンク冗長:OcuSync をメインリンクとして映像と制御指令を伝送、4G をバックアップリンクとして使用
  2. センサーフュージョン表示:ガス濃度、温度などのセンサーデータを映像伝送画面の OSD レイヤーに重畳表示
  3. サーマルイメージング PiP:可視光とサーマル映像を同時表示し、火元特定を支援
  4. ワンキー帰還/脱出:信号喪失時にプリセットされた脱出/帰還戦略を自動実行
// センサーデータ OSD 重畳例
OSDOverlayManager osm = fpvView.getOSDOverlayManager();

osm.addOverlayItem(new OSDTextItem.Builder()
    .setText("CO: 12ppm")
    .setPosition(OSDPosition.TOP_LEFT)
    .setColor(Color.YELLOW)
    .build());

osm.addOverlayItem(new OSDTextItem.Builder()
    .setText("TEMP: 156°C")
    .setPosition(OSDPosition.TOP_LEFT, 0, 30)
    .setColor(Color.RED)
    .build());

osm.addOverlayItem(new OSDGaugeItem.Builder()
    .setLabel("Signal")
    .setValue(signalStrength)
    .setPosition(OSDPosition.TOP_RIGHT)
    .build());

セキュリティ機構

通信セキュリティ

レイヤー対策
OcuSyncAES-256 暗号化、周波数ホッピング拡散
WiFiWPA3-Enterprise、証明書認証
4GIPSec VPN トンネル、エンドツーエンド暗号化
アプリケーション層指令署名検証、リプレイ攻撃防止

安全インターロック

Alius RC SDK は複数の安全インターロック機構を内蔵:

  • ハートビート検出:コントローラーとアプリ間の 10Hz ハートビート、500ms 以上受信不能で自動ホバリング発動
  • ジョイスティック喪失保護:ジョイスティック信号中断 > 200ms で全制御チャネルを自動ゼロ化
  • ジオフェンス:飛行/走行エリア境界を設定可能、境界越え時にプリセット動作を自動実行
  • 指令制限:単一指令の振幅変化をプリセット安全範囲内に制限し、制御不能を防止
// 安全設定例
SafetyConfig config = new SafetyConfig.Builder()
    .setHeartbeatTimeout(500)              // ms
    .setStickLostAction(SafetyAction.HOVER)
    .setGeofenceEnabled(true)
    .setMaxCommandDelta(0.3f)              // 単一フレーム最大変化幅
    .setFailsafeAction(SafetyAction.RETURN_HOME)
    .build();

AliusRCManager.getInstance().setSafetyConfig(config);

地上局マルチスクリーン方案

リモコン画面を大画面またはヘッドマウントディスプレイに投射する必要がある場合:

Alius RC (タッチ操作)

    ├── HDMI 2.0 ──── 外部大画面(映像伝送画面 + ダッシュボード)

    └── OcuSync 4.0 ──── ロボット

HDMI 出力は独立表示モードに対応し、Alius RC Manager で設定可能:

  • ミラーモード:外部画面にリモコン画面と同じ内容を表示
  • 拡張モード:リモコン画面に操作インターフェース、外部画面に映像伝送画面を全画面表示
  • ダッシュボードモード:外部画面にダッシュボード(地図 + 状態パネル)、リモコンに映像と制御を表示

統合チェックリスト

システム統合完了後、以下の項目を逐次検証してください:

  • 通信リンクが正常に確立され、遅延と帯域幅が期待値を満たしている
  • 制御指令の応答が正しく、異常な遅延やジッターがない
  • テレメトリデータが正確で、更新頻度が仕様に適合している
  • 安全インターロック機構が正常に動作(ハートビート、喪失保護、ジオフェンス)
  • 緊急ブレーキがすべての動作条件下で発動可能
  • 複数通信リンクの切替が途切れなく行える
  • HDMI 外部表示が正常
  • 長時間稼働でメモリリークや性能劣化がない
  • 極限環境下(高温/低温/振動)で正常動作

次のステップ

  • MSDK 開発ガイド —— MSDK API とコントロール開発に戻る
  • 技術仕様 —— 詳細なハードウェアパラメータの確認
  • Alius テクニカルサポート —— 統合に関する問題は support@alius.tech までご連絡ください