Skip to content

MQTT API マニュアル(Ver1.12.0)

MQTT API マニュアル 情報

  • ALIファームウェア バージョン: ver. 1.12.0

  • 著者: Keigan

MQTT API 共通

基本

MQTT の仕組みにより、Topicsubscribe (購読)することにより、⾃動的にデータが publish (発⾏)される。ステータスの取得 により、⾃機の状態を把握することができる。

アドレス

MQTT API にアクセスするためのアドレスは以下となる。

MQTTプロトコルで接続mqtt://[IP Address]:9075/[Topic]
WebSocketプロトコル経由で接続 (ブラウザ等で使用時)ws://[IP Address]:9076/[Topic]

[IP Address]

  1. 直接 AMR のアクセスポイントに接続する場合・・・10.0.60.1

  2. ローカルエリアネットワークLAN経由で接続する場合・・・192.XXX.X.XX

LAN経由の場合は、ルーター側でIPアドレスを割り当て、または固定設定を行うことにより、決定される。

[Topic]

次項 MQTT API リスト で定義される Topic (トピック)を使⽤する。

MQTT API リスト

No.FunctionDirectionTopic
QS-1マシンのステータスを取得するPublishstatus
QS-2マシンの名前を取得Publishstatus/machine_name
QS-3バッテリの残量を取得Publishstatus/battery
QS-4エラー情報を取得Publishstatus/error_info
QS-5マシンの操作状態を取得Publishstatus/operation_state
QS-6マシンの制御状態を取得Publishstatus/control_state
QS-7マシンのコマンド状態を取得Publishstatus/command_state
QS-8マシンのハードウェア状態を取得Publishstatus/hardware
QS-9GPIOの状態を取得Publishstatus/gpio
QS-10LiDARの情報を取得Publishstatus/lidar
QS-11スロープでロック状態の取得Publishstatus/slope_lock
QS-12速度、角速度情報の取得Publishstatus/odometry
QT-1タスクセットidを取得Publishtaskset/id
QT-2実行中のタスクidを取得Publishtaskset/index
QT-3タスクセットの名前を取得Publishtaskset/name
QT-4タスクセットの状態を取得Publishtaskset/state
QT-5MQTTメッセージを送信Publishtaskset/message
QT-6実行中タスクのcmdsを取得Publishtaskset/current_task
QT-7MQTTメッセージを受信Subscribetaskset/message_in
QN-1マシンの原点情報を取得Publishnav/amr_pose
QN-2マップ情報を取得Publishnav/map_png
QN-3マップの名前を取得Publishnav/map_name
QN-4マップidの取得Publishnav/map_id
QN-5正規化された自己位置スコアを取得Publishlocalization/nrmse
QN-6自己位置スコアを取得Publishlocalization/rmse
QC-1マニュアル操作を行うSubscribecontrol/joy

QS-1 ステータスの取得

TopicFunctionDirection送信タイミング
statusマシンのステータスを取得するPublish100ms毎

データの取得例:

※location内の x, y, およびangle の theta についてはREST API ドキュメント(v1.0.2以降)を参照すること。
json
{
 "map": {
         "mapId" : <uint32>            # mapId
         },
 "operation_state" : <string>,         # ex) "idle"
 "battery" : {
             "percentage" : <uint32>,  # 0 to 100 [%]
             "voltage" : <float32>     # battery voltage [V]
              },
 "timestamp": <string>,                # ex)"2012-04-21T18:25:43-05:00"
 "location": {
              "x": <float64>,
              "y": <float64>,
              "angle": {
                       "theta": <float64>, #radian
                       "y": <float64>,      #常に0
                       "z": <float64>,      #常に0
                       "x": <float64>       #常に0
                       }
              },
 "taskset" : {
             "state" : <string>,      # "idle"または"exectuing"
             "cmdSetId" : <uint32>,   # cmdSetId
             "cmdIndex" : <uint32>,   # number of cmdSetId
             "resume_cmd_index": <uint32>,
             "resume_available": <bool>
              },
 "error" : {
           "code" : <uint32>,      # error code
           "description" : <string>
            }
}
キー値の説明備考
mapマップ情報mapId:選択されているマップのId
operation_stateAMRの状態 Idle:アイドル中
Executing:タスクセットの実行中
Mapping:マップの作成中
Error:エラー
batteryバッテリー状態 Percentage:残量 [%]
Voltage:電圧 [V]
time stamp発行された時刻(UNIX_TIME)
locationAMRの現在位置
(選択されているマップの
原点座標を基準とする
位置座標と向き)
x:現在位置のx座標
y:現在位置のy座標
angle{
theta:現在位置の角度
y:0 #予約領域
z:0 #予約領域
x:0 #予約領域
}
tasksetタスクセットの状態 State:タスクセットの実行状態
cmdSetId:現在実行中のタスクセットid
cmdIndex:現在実行中のタスクインデックス
     (何番目のタスクか)
resume_cmd_index:
  タスクセット再開時に実行するタスクid
resume_available:タスクセットの再開可否
errorエラー状態 code:エラーコード
description:エラー内容の説明

コード参考例 Python

python
import paho.mqtt.client as paho       #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("status", 0)                 #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",                        // Address of broker(IPアドレス)
            9076,                                  // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)               // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,              // 接続に成功したときのコールバック
            onFailure: doFail                  // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("status");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
        </script>
</body>
</html>

QS-2 マシンの名前を取得

TopicFunctionDirection送信タイミング
status/machine_nameマシンの名前を取得PublishALI起動時に1回のみ送信

データの取得例:

json
{
  "data": ali-default <string>   //マシンの名前
}

コード参考例 Python

python
import paho.mqtt.client as paho      #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("status/machine_name", 0)                 #TOPIC
    mqttc.loop_forever() ()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
<script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",           // Address of broker(IPアドレス)
            9076,                     // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)  // Client ID(単一の任意の値)
        );

        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,       // 接続に成功したときのコールバック
            onFailure: doFail          // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("status/machine_name");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QS-3 バッテリの残量を取得

TopicFunctionDirection送信タイミング
status/batteryバッテリの残量を取得Publish100ms毎

データの取得例:

json
{
 "data": 72 <uint32>   #バッテリの残量 [%]
}

コード参考例 Python

python
import paho.mqtt.client as paho      #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("status/battery", 0)         #TOPIC
    mqttc.loop_forever() )

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",              // Address of broker(IPアドレス)
            9076,                        // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)     // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,           // 接続に成功したときのコールバック
            onFailure: doFail               // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("status/battery");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html> >

QS-4 エラー情報を取得

TopicFunctionDirection送信タイミング
status/error_infoエラー情報を取得Publish異常検出時または異常解除時

データの取得例:

json
{
 "code": 80  <uint32>,                            #エラーコードNO.
 "description": "Battery Door Open" <string>,    #エラーの内容
 "timestamp": "2022-04-01T09:00:00+09:00"
}

コード参考例 Python

python
import paho.mqtt.client as paho    #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("status/error_info", 0)       #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",                 // Address of broker(IPアドレス)
            9076,                            // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)        // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,    // 接続に成功したときのコールバック
            onFailure: doFail        // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("status/error_info");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QS-5 マシンの操作状態を取得

TopicFunctionDirection送信タイミング
status/operation_stateマシンの操作状態を取得Publishstateが変化する毎

データの取得例:

json
{
 "state": 1 <uint32>,             # 1:自動走行中 (ルート走行、ライントレーサ)
                                 # 2:待機中(ゴールに到着含む)
                                 # 3:SLAM中
                                 # 9:エラー停止中
 "error_code": 0 <uint32>,         #エラーコードNo. (0:エラーなし)
 "timestamp": "2012-04-21T18:25:43-05:00"
}

コード参考例 Python

python
import paho.mqtt.client as paho      #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("status/operation_state", 0)  #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",                  // Address of broker(IPアドレス)
            9076,                            // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)        // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,      // 接続に成功したときのコールバック
            onFailure: doFail          // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("status/operation_state");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QS-6 マシンの制御状態を取得

TopicFunctionDirection送信タイミング
status/control_stateマシンの制御状態を取得Publishstateが変化する毎

データの取得例:

json
{
 "data": 1 <uint32>     # 0:ビジー状態、処理中(コマンドを貰っても処理できない)
                        # 1:制御可能 コマンドの受信と応答が可能
                        # 2:制御不可 コマンドを受信しても応答しない
                        #   (ルート走行中またはライントレーサ中)
}

コード参考例 Python

python
import paho.mqtt.client as paho             #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("status/control_state", 0)                 #TOPIC
    mqttc.loop_forever()

参考コード例 Javascript

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX ",                // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)       // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,        // 接続に成功したときのコールバック
            onFailure: doFail            // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("status/control_state");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QS-7 マシンのコマンド状態を取得

TopicFunctionDirection送信タイミング
status/command_stateマシンのコマンド状態を取得Publishstateが変化する毎

データの取得例:

json
{
 "data": 1 <uint32>      # 0:ビジー状態、処理中(コマンドを貰っても処理できない)
                         # 1:制御可能 コマンドの受信と応答が可能
                         # 2:制御不可 コマンドを受信しても応答はしない
                         # 3:マッピング中 (中止以外のコマンドは処理できない)
}

コード参考例 Python

python
import paho.mqtt.client as paho        #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("status/command_state", 0)    #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.168.3.105",                // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)       // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,        // 接続に成功したときのコールバック
            onFailure: doFail            // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("status/command_state");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QS-8 マシンのハードウェア状態を取得

TopicFunctionDirection送信タイミング
status/hardwareマシンのマンド状態を取得Publish200ms毎

データの取得例:

json
{
  "battery": {
    "current": 0.3644208014011383, <float32>
    "overcurrent": false, <bool>
    "overvoltage": false, <bool>
    "undervoltage": false, <bool>
    "voltage": 24.356325149536133 <float32>
  },
  "battery_door_open": false, <bool>
  "center_cliff_sensor": {
    "connected": true, <bool>
    "range": 286, <int32>,
    "status": 0 <int32>,
  },
  "crc_match": true, <bool>
  "emergency_switch_pressed": false, <bool>
  "front_center_tof": {
    "connected": true, <bool>
    "range": 8888, <int32>,
    "status": 22 <int32>,
  },
  "front_left_tof": {
    "connected": true, <bool>
    "range": 8888, <int32>,
    "status": 6 <int32>,
  },
  "front_right_tof": {
    "connected": true, <bool>
    "range": 8888, <int32>,
    "status": 6 <int32>,
  },
  "imu": true, <bool>
  "left_cliff_sensor": {
    "connected": true, <bool>
    "range": 564, <int32>,
    "status": 0 <int32>,
  },
  "left_motor": {
    "connected": true, <bool>
    "current": 0.0, <float32>
    "stalling": false <bool>
  },
  "left_tof": {
    "connected": true, <bool>
    "range": 1433, <int32>,
    "status": 0 <int32>,
  },
  "lidar_connected": true, <bool>
  "lidar_sample_rate": 35883, <int32>,
  "lidar_scan_freq": 10.018754005432129, <float32>
  "lidar_scanning": true, <bool>
  "lidar_status_normal": true, <bool>
  "lidar_zero_percentage": 0.0, <float32>
  "microcontroller": {
    "bad_sensor_data": false, <bool>
    "connected": true, <bool>
    "restarting": false <bool>
  },
  "right_cliff_sensor": {
    "connected": true, <bool>
    "range": 478, <int32>,
    "status": 0 <int32>,
  },
  "right_motor": {
    "connected": true, <bool>
    "current": 0.0, <float32>
    "stalling": false <bool>
  },
  "right_tof": {
    "connected": true, <bool>
    "range": 50, <int32>,
    "status": 0 <int32>,
  },
  "timestamp": "2024-11-01T15:01:05+09:00",
  "tof_data_valid": true <bool>
}

コード参考例 Python

python
import paho.mqtt.client as paho             #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("status/hardware", 0)         #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",                // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)       // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,        // 接続に成功したときのコールバック
            onFailure: doFail            // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("status/hardware");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QS-9 GPIOの状態を取得

TopicFunctionDirection送信タイミング
status/gpioGPIOの状態を取得PublishGPIOの状態が変化する毎

データの取得例:

json
[
	{
 	"state": 0,	<int32>		# 0:LOW, 1:HIGH
	“pin”:101	<int32>
	},
	{
 	"state": 0, 	<int32>
	“pin”:102	<int32>
	},
	{
 	"state": 0, 	<int32>
	“pin”:201	<int32>
	},
	{
 	"state": 0, 	<int32>
	“pin”:202	<int32>
	}
]

コード参考例 Python

python
import paho.mqtt.client as paho             #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("status/gpio", 0)            #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",                // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)       // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,        // 接続に成功したときのコールバック
            onFailure: doFail            // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("status/gpio");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QS-10 LiDARの情報を取得

TopicFunctionDirection送信タイミング
status/lidarLiDARの情報を取得Publish電源ON時

データの取得例:

json
{
 	"name": ydlidar <string>
}

コード参考例 Python

python
import paho.mqtt.client as paho       #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("status/lidar", 0)           #TOPIC
    mqttc.loop_forever())

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",                // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)       // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,        // 接続に成功したときのコールバック
            onFailure: doFail            // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("status/lidar");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QS-11 スロープでのロック状態を取得

TopicFunctionDirection送信タイミング
status/slope_lockスロープでのロック状態を取得Publishスロープロック発生時

データの取得例:

json
{
 	"data": false <bool>
}

コード参考例 Python

python
import paho.mqtt.client as paho       #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("status/slope_lock", 0)      #TOPIC
    mqttc.loop_forever())

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",                // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)       // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,        // 接続に成功したときのコールバック
            onFailure: doFail            // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("status/slope_lock");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QS-12 速度・回転速度の情報を取得

TopicFunctionDirection送信タイミング
status/odometry速度・角速度情報を取得Publish100ms毎

データの取得例:

json
{
 	"angular": 0.1, <float32>	#角速度
	"linear": 0.5 <float32>	#速度
}

コード参考例 Python

python
import paho.mqtt.client as paho       #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("status/odometry", 0)      #TOPIC
    mqttc.loop_forever())

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",                // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)       // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,        // 接続に成功したときのコールバック
            onFailure: doFail            // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("status/odometry");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QT-1 タスクセットidを取得

TopicFunctionDirection送信タイミング
taskset/idタスクセットidを取得PublishALI起動時およびタスクセット実行時

データの取得例:

json
{
 "data": 143 <uint32>    #選択されているタスクセットid
}

コード参考例 Python

python
import paho.mqtt.client as paho  #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60) #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("taskset/id", 0)        #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",                // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)       // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,        // 接続に成功したときのコールバック
            onFailure: doFail            // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("taskset/id");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QT-2 実行中のタスクidを取得

TopicFunctionDirection送信タイミング
taskset/index実行中のタスクidを取得PublishALI起動時およびタスク実行中100ms毎

データの取得例:

json
{
 "data": 2 <uint32>          #実行中のタスクid
}

コード参考例 Python

python
import paho.mqtt.client as paho        #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("taskset/index", 0)          #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",                // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)       // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,        // 接続に成功したときのコールバック
            onFailure: doFail            // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("taskset/index");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QT-3 タスクセットの名前を取得

TopicFunctionDirection送信タイミング
taskset/nameタスクセットの名前を取得PublishALI起動時およびタスク実行時に都度

データの取得例:

json
{
 "data": "Pickup and deliver" <string>    #タスクセットの名前
}

コード参考例 Python

python
import paho.mqtt.client as paho #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60) #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("taskset/name", 0)      #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",                // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)       // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,        // 接続に成功したときのコールバック
            onFailure: doFail            // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("taskset/name");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QT-4 タスクセットの状態を取得

TopicFunctionDirection送信タイミング
taskset/state タスクセットの状態を取得PublishALI起動時およびタスクセットの
状態(停止、実行、再開)が 変化したとき

データの取得例:

json
{
  "timestamp": "2012-04-21T18:25:43-05:00",
 "cmdset_id": 1 <int32>,                      #タスクセットのID  
 "resume_cmd_id": 1 <int32>,         #タスクセットを再開する時のタスクid
 "resume_available": true <bool>,       #タスクセットの再開可否
 "executing": true <bool>,          #タスクセット実行中か否か
 "completed": false <bool>,          #タスクセットを最後まで完了したか否か
“path_blocked”:false  <bool>                #経路がブロックされているか否か
}

コード参考例 Python

python
import paho.mqtt.client as paho        #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("taskset/state", 0)           #TOPIC
    mqttc.loop_forever())

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.168.3.228",                // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)       // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,        // 接続に成功したときのコールバック
            onFailure: doFail            // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("taskset/state");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QT-5 MQTTメッセージを取得

TopicFunctionDirection送信タイミング
taskset/messageALIから送信されるMQTTメッセージを取得PublishALIがMQTTメッセージを送信した時

データの取得例:

json
{
  "message": "Arrived"   #送信メッセージ
}

コード参考例 Python

python
import paho.mqtt.client as paho       #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("taskset/message", 0)         #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.168.3.228",                // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)       // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,        // 接続に成功したときのコールバック
            onFailure: doFail            // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("taskset/message");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QT-6 実行中タスクのcmdsを取得

TopicFunctionDirection送信タイミング
taskset/current_task実行中タスクのcmdsを取得PublishALI起動時およびタスク実行時に都度

データの取得例:

json
{
    "data": 
        "{
            //"arg//": 
                {
                    //"ignoreTheta//": true, 
                    //"passingPoint//": false, 
                    //"enableObstacleAvoidance//": true, 
                    //"disableStartAnnouncement//": false, 
                    //"disableStopAnnouncement//": false, 
                    //"fastRotation//": false, 
                    //"mode//": 1, 
                    //"fastStopping//": false, 
                    //"x//": -3.0464999999999995, 
                    //"y//": 4.781000000000001, 
                    //"theta//": -4.682194784325188, 
                    //"pathWidth//": 2, 
                    //"obstacleTimeout//": 0, 
                    //"type//": 0, 
                    //"enableRerouteRecovery//": false, 
                    //"disableReplanning//": false, 
                    //"name//": //"//"
                }, 
            //"cmdType//": 100
        }"
}
 データ デコード例 (詳細は、REST APIのcmdsの項目参照)
json
{
    'arg': {
        'ignoreTheta': True,
        'passingPoint': False,
        'enableObstacleAvoidance': True,
        'disableStartAnnouncement': False,
        'disableStopAnnouncement': False,
        'fastRotation': False,
        'mode': 1,
        'fastStopping': False,
        'x': -3.0464999999999995,
        'y': 4.781000000000001,
        'theta': -4.682194784325188,
        'pathWidth': 2,
        'obstacleTimeout': 0,
        'type': 0,
        'enableRerouteRecovery': False,
        'disableReplanning': False,
        'name': ''
    },
    'cmdType': 100
}

データの取得例:

json
{
    'arg': {
        'ignoreTheta': True,
        'passingPoint': False,
        'enableObstacleAvoidance': True,
        'disableStartAnnouncement': False,
        'disableStopAnnouncement': False,
        'fastRotation': False,
        'mode': 1,
        'fastStopping': False,
        'x': -3.0464999999999995,
        'y': 4.781000000000001,
        'theta': -4.682194784325188,
        'pathWidth': 2,
        'obstacleTimeout': 0,
        'type': 0,
        'enableRerouteRecovery': False,
        'disableReplanning': False,
        'name': ''
    },
    'cmdType': 100
}

コード参考例 Python

python
import paho.mqtt.client as paho        #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("taskset/current_task", 0)                 #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.168.3.228",                // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)       // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,        // 接続に成功したときのコールバック
            onFailure: doFail            // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("taskset/current_task");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QT-7 MQTTメッセージを受信

TopicFunctionDirection送信タイミング
taskset/message_inALIでMQTTメッセージを待ち受けSubscribe上位システムがMQTTメッセージを送信した時

データの送信例 Python:

python
import paho.mqtt.client as paho     #「paho.mqtt.client」ライブラリのインストールが必要です。
import json
def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))
def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))
def on_publish(self, obj, mid):
    print("mid: "+str(mid))
def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))
def on_log(self, obj, level, string):
    print(string)
topic = "taskset/message_in"
message = {
    "message":"go"       # 例として「go」文字列を送信
    }
if __name__ == '__main__':
    mqttc = paho.Client()    #mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_publish = on_publish
    message_json = json.dumps(message)
    mqttc.connect("192.XXX.X.XX", 9075, 60)     #IPアドレス, ポート, キープアライブ
    mqttc.publish(topic, message_json)          #TOPIC
    mqttc.loop_forever())

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>MQTT with JavaScript</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js"></script>
</head>
<body>
    <h1>MQTT Client with JavaScript</h1>
    <script>
        // MQTTクライアントの設定
        const host = "192.XXX.X.XX";
        const port = 9076;  // ポート番号
        const topic = "taskset/message_in";
        const message = JSON.stringify({ "message": "go" });
	// 例として「go」文字列を送信
        // ランダムなクライアントIDを生成(例:Math.randomを使用)
        const clientId = "clientId-" + Math.random().toString(16).substr(2, 8);
        // クライアントの作成
        const client = new Paho.MQTT.Client(host, Number(port), clientId);
        // コールバック関数
        client.onConnectionLost = function(responseObject) {
            if (responseObject.errorCode !== 0) {
                console.log("onConnectionLost:" + responseObject.errorMessage);
            }
        };
        client.onMessageArrived = function(message) {
            console.log("onMessageArrived: " + message.destinationName + " " + message.payloadString);
        };
        // 接続
        client.connect({
            onSuccess: onConnect,
            onFailure: function(message) {
                console.log("Connection failed: " + message.errorMessage);
            },
            keepAliveInterval: 60,  // キープアライブ60秒
            useSSL: false  // SSLを使用しない
        });
        // 接続成功時の処理
        function onConnect() {
            console.log("Connected with clientId: " + clientId);
            // メッセージを発行
            const mqttMessage = new Paho.MQTT.Message(message);
            mqttMessage.destinationName = topic;
            client.send(mqttMessage);
        }
    </script>
</body>
</html> > 

<!-- end -->
<!-- start -->

QN-1 マシンの位置情報を取得

TopicFunctionDirection送信タイミング
nav/amr_poseマシンの位置情報を取得Publish200ms毎

データの取得例 データの取得例:

json
{
    "data": 
        "{
            //"origin_x//": -12.1,<float32> 		# 原点x座標
            //"origin_y//": -14.925, <float32> 		# 原点y座標
            //"map_height//": 597, <int32> 			# マップの高さ(pixel)
            //"x//": -2.97655, <float32> 			# x座標
            //"y//": 2.71426, <float32> 			# y座標
            //"resolution//": 0.05, <float32> 		# マップ解像度(5cm)
            //"theta//": -1.88392, <float32>		# 角度(rad)
            //"nrmse//": 0.159324, <float32> 		# 自己位置スコア
            //"pitch//": 0.0601453 <float32>              # 走行面に対する傾き
        }"
}

データ デコード例:

json
{
    "data": {
        "origin_x": -12.1,
        "origin_y": -14.925,
        "map_height": 597,
        "x": -2.97655,
        "y": 2.71426,
        "resolution": 0.05,
        "theta": -1.88392,
        "nrmse": 0.159324,
        "pitch": 0.0601453
    }
}

コード参考例 Python

python
import paho.mqtt.client as paho        #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("nav/amr_pose", 0)           #TOPIC
    mqttc.loop_forever())

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",             // Address of broker(IPアドレス)
            9076,                       // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)    // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,       // 接続に成功したときのコールバック
            onFailure: doFail           // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("nav/amr_pose");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html> >

QN-2 マップ情報を取得

TopicFunctionDirection送信タイミング
nav/map_pngマップ情報を取得PublishALI起動時およびマップ変更時

データの取得例:

json
{
 "timestamp": "2024-11-05T18:25:43-05:00",
 "format": "png" <string>,
 "data": "iVBORw0KGgoAAAANSUhEUgAAAN4AAA… <string(base64)>
}

コード参考例 Python

python
import paho.mqtt.client as paho     #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("nav/map_png", 0)                 #TOPIC
    mqttc.loop_forever())

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX,X,XX",                   // Address of broker(IPアドレス)
            9076,                              // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)          // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,         // 接続に成功したときのコールバック
            onFailure: doFail            // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("nav/map_png");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html> >

QN-3 マップの名前を取得

TopicFunctionDirection送信タイミング
nav/map_nameマップの名前を取得PublishALI起動時およびマップ名変更時

データの取得例:

json
{
 "data": "test_map" <string>      #mapの名前
}

コード参考例 Python

python
import paho.mqtt.client as paho       #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("nav/map_name", 0)            #TOPIC
    mqttc.loop_forever())

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",                // Address of broker(IPアドレス)
            9076,                          // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)       // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,           // 接続に成功したときのコールバック
            onFailure: doFail              // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("nav/map_name");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html> >

QN-4 マップidを取得

TopicFunctionDirection送信タイミング
nav/map_idマップidを取得PublishALI起動時およびマップ変更時

データの取得例:

json
{
 "data": 176 <uint32>       #mapのid
}

コード参考例 Python

python
import paho.mqtt.client as paho       #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("nav/map_id", 0)              #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.168.3.228",                     // Address of broker(IPアドレス)
            9076,                               // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)           // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,            // 接続に成功したときのコールバック
            onFailure: doFail                // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("nav/map_id");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }

        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }

        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QN-5 正規化された自己位置スコアの取得

TopicFunctionDirection送信タイミング
Localization/nrmse正規化された自己位置スコアを取得Publish100ms毎(走行時)

データの取得例:

json
{
 "data": 0.6438644919924806 <float64>       #自己位置スコア 
}

コード参考例 Python

python
import paho.mqtt.client as paho      #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("localization/nrmse", 0)                 #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",                 // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)        // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,             // 接続に成功したときのコールバック
            onFailure: doFail                // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("localization/nrmse");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QN-6 自己位置スコアの取得

TopicFunctionDirection送信タイミング
Localization/nrmse自己位置スコアを取得Publish100ms毎(走行時)

データの取得例:

json
{
 "data": 0.19273970848864136 <float64>       #自己位置スコア 
}

コード参考例 Python

python
import paho.mqtt.client as paho      #「paho.mqtt.client」ライブラリのインストールが必要です。

def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))

def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))

def on_publish(self, obj, mid):
    print("mid: "+str(mid))

def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_log(self, obj, level, string):
    print(string)

if __name__ == '__main__':
    mqttc = paho.Client()#mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_subscribe = on_subscribe
    mqttc.connect("192.XXX.X.XX", 9075, 60)      #IPアドレス, ポート, キープアライブ
    mqttc.subscribe("localization/rmse", 0)                 #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MQTT Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
    <!-- 外部スクリプト(paho-mqtt)のURIを指定 -->
</head>
<body>
    <script>
        // MQTTクライアント生成
        let client = new Paho.MQTT.Client(
            "192.XXX.X.XX",                 // Address of broker(IPアドレス)
            9076,                           // Websocketへの接続時は”9076”
            "web_" + (Date.now() + 1)        // Client ID(単一の任意の値)
        );
        // 接続
        let options = {
            useSSL: false,
            onSuccess: onConnect,             // 接続に成功したときのコールバック
            onFailure: doFail                // 接続に失敗したときのコールバック
        };
        // 接続に成功したとき
        function onConnect() {
            window.alert("onConnect");
            // トピックを購読する
            client.subscribe("localization/rmse");
            // トピックにメッセージを発行
            let message = new Paho.MQTT.Message("");
            message.destinationName = "test";
            client.send(message);
        }
        // 接続に失敗したとき
        function doFail(e) {
            window.alert(e);
        }
        // 接続が切れたとき
        function onConnectionLost(responseObject) {
            if (responseObject.errorCode !== 0) {
                window.alert("onConnectionLost:" + responseObject.errorMessage);
            }
        }
        // メッセージを受信したとき
        function onMessageArrived(message) {
            window.alert("onMessageArrived:" + message.payloadString);
        }
        // コールバックの定義
        client.onConnectionLost = onConnectionLost; // 接続が切れたとき
        client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
        client.connect(options);
    </script>
</body>
</html>

QC-1 マニュアル操作を行う

TopicFunctionDirection
control/joyマニュアル操作を行うSubscribe

データの取得例:

json
{
 "data" : 0 <uint32>
   # 0:No operation
   # 1:forward
   # 2:Diagonal right forward(Curve diameter is constant)
   # 3:Turn right
   # 4:Right back retreat(Curve diameter is constant)
   # 5:back
   # 6:Left back retreat(Curve diameter is constant)
   # 7:Turn left
   # 8:Diagonal left forward(Curve diameter is constant)
}

コード参考例 Python

python
import paho.mqtt.client as paho   #「paho.mqtt.client」ライブラリのインストールが必要です。
import json
def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))
def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))
def on_publish(self, obj, mid):
    print("mid: "+str(mid))
def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))
def on_log(self, obj, level, string):
    print(string)
topic = "control/joy"
message = {
    "data":5    # 5:back
    }
# 0:No operation
#1:forward
# 2:Diagonal right forward(Curve diameter is constant)
# 4:Right back retreat(Curve diameter is constant)
# 5:back
# 6:Left back retreat(Curve diameter is constant)
# 7:Turn left
# 8:Diagonal left forward(Curve diameter is constant
if __name__ == '__main__':
    mqttc = paho.Client()    #mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_publish = on_publish
    message_json = json.dumps(message)
    mqttc.connect("192.XXX.X.XX", 9075, 60)     #IPアドレス, ポート, キープアライブ
    mqttc.publish(topic, message_json)          #TOPIC
    mqttc.loop_forever()

コード参考例 Python

python
import paho.mqtt.client as paho   #「paho.mqtt.client」ライブラリのインストールが必要です。
import json
def on_connect(client, userdata, flags, rc):
    print("rc: "+str(rc))
def on_message(self, obj, msg):
    print(msg.topic + " " + str(msg.payload))
def on_publish(self, obj, mid):
    print("mid: "+str(mid))
def on_subscribe(self, obj, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))
def on_log(self, obj, level, string):
    print(string)
topic = "control/joy"
message = {
    "data":5    # 5:back
    }
# 0:No operation
#1:forward
# 2:Diagonal right forward(Curve diameter is constant)
# 4:Right back retreat(Curve diameter is constant)
# 5:back
# 6:Left back retreat(Curve diameter is constant)
# 7:Turn left
# 8:Diagonal left forward(Curve diameter is constant
if __name__ == '__main__':
    mqttc = paho.Client()    #mqtt
    mqttc.on_message = on_message
    mqttc.on_connect = on_connect
    mqttc.on_publish = on_publish
    message_json = json.dumps(message)
    mqttc.connect("192.XXX.X.XX", 9075, 60)     #IPアドレス, ポート, キープアライブ
    mqttc.publish(topic, message_json)          #TOPIC
    mqttc.loop_forever()

コード参考例 Java script / html

html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>MQTT with JavaScript</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js"></script>
</head>
<body>
    <h1>MQTT Client with JavaScript</h1>
    <script>
        // MQTTクライアントの設定
        const host = "192.XXX.X.XX";
        const port = 9076;  // ポート番号
        const topic = "control/joy";
        const message = JSON.stringify({ "data": 5 }); // 5:back

        // ランダムなクライアントIDを生成(例:Math.randomを使用)
        const clientId = "clientId-" + Math.random().toString(16).substr(2, 8);

        // クライアントの作成
        const client = new Paho.MQTT.Client(host, Number(port), clientId);

        // コールバック関数
        client.onConnectionLost = function(responseObject) {
            if (responseObject.errorCode !== 0) {
                console.log("onConnectionLost:" + responseObject.errorMessage);
            }
        };

        client.onMessageArrived = function(message) {
            console.log("onMessageArrived: " + message.destinationName + " " + message.payloadString);
        };

        // 接続
        client.connect({
            onSuccess: onConnect,
            onFailure: function(message) {
                console.log("Connection failed: " + message.errorMessage);
            },
            keepAliveInterval: 60,  // キープアライブ60秒
            useSSL: false  // SSLを使用しない
        });

        // 接続成功時の処理
        function onConnect() {
            console.log("Connected with clientId: " + clientId);
            // メッセージを発行
            const mqttMessage = new Paho.MQTT.Message(message);
            mqttMessage.destinationName = topic;
            client.send(mqttMessage);
        }
    </script>
</body>
</html>

関連記事

© 株式会社Keigan