MQTT API マニュアル 情報

ALIファームウェア バージョン

 ver. 1.10.0

著者

 Keigan

 

MQTT API 共通

基本

MQTT の仕組みにより、Topic subscribe (購読)することにより、動的にデータが 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.

Function

Direction

TOPIC

QS-1 マシンのステータスを取得する Publish status
QS-2 マシンの名前を取得 Publish status/machine_name
QS-3 バッテリの残量を取得 Publish status/battery
QS-4 エラー情報を取得 Publish status/error_info
QS-5 マシンの操作状態を取得 Publish status/operation_state
QS-6 マシンの制御状態を取得 Publish status/control_state
QS-7 マシンのコマンド状態を取得 Publish status/command_state
QS-8 マシンのハードウェア状態を取得 Publish status/hardware
QS-9 GPIOの状態を取得 Publish status/gpio
QT-1 タスクセットidを取得 Publish taskset/id
QT-2 実行中のタスクidを取得 Publish taskset/index
QT-3 タスクセットの名前を取得 Publish taskset/name
QT-4 タスクセットの状態を取得 Publish taskset/state
QT-5 MQTTメッセージを取得 Publish taskset/message
QN-1 マシンの原点情報を取得 Publish nav/amr_pose
QN-2 マップ情報を取得 Publish nav/map_png
QN-3 マップの名前を取得 Publish nav/map_name
QN-4 マップidの取得 Publish nav/map_id
QC-1 マニュアル操作を行う Subscribe control/joy

 

QS-1 ステータスの取得

TOPIC Function Direction 送信タイミング
status マシンのステータスを取得する Publish 100ms毎

 

データの取得例

※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_state AMRの状態

Idle:アイドル中

Executing:タスクセットの実行中

Mapping:マップの作成中

Error:エラー

battery バッテリー状態

Percentage:残量 [%]

Voltage:電圧 [V]

time stamp 発行された時刻(UNIX_TIME)  
location

AMRの現在位置

(選択されているマップの
原点座標を基準とする
位置座標と向き)

 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

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()

 

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>                      // 外部スクリプト(paho-mqtt)のURIを指定
    <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");
                // トピックにメッセージを発行
                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>

 

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

TOPIC Function Direction 送信タイミング
status/machine_name マシンの名前を取得 Publish ALI起動時に1回のみ送信

 

データの取得例

json

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

コード参考例 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()

 

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></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");
                  // トピックにメッセージを発行してみる
                  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>

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

TOPIC Function Direction 送信タイミング
status/battery バッテリの残量を取得 Publish 5000ms毎

 

データの取得例

json

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

コード参考例 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()

 

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></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");
// トピックにメッセージを発行してみる
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>

 

QS-4 エラー情報を取得

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

 

データの取得例

json

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

コード参考例 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()

 

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></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");
// トピックにメッセージを発行してみる
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>

 

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

TOPIC

Function

Direction

送信タイミング

status/operation_state マシンの操作状態を取得 Publish stateが変化する毎

データの取得例

json

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

コード参考例 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()

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
<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");
// トピックにメッセージを発行してみる
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>

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

TOPIC Function Direction 送信タイミング
status/control_state マシンの制御状態を取得 Publish stateが変化する毎

 

データの取得例

json

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

コード参考例 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

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></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");
// トピックにメッセージを発行してみる
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>

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

TOPIC

Function

Direction

送信タイミング

status/command_state マシンのコマンド状態を取得 Publish stateが変化する毎

 

データの取得例

json

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

コード参考例 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()

 

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></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/command_state");
// トピックにメッセージを発行してみる
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>

 

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

TOPIC

Function

Direction

送信タイミング

status/hardware マシンの��マンド状態を取得 Publish 200ms毎

 

データの取得例

json

{
 "timestamp": "2012-04-21T18:25:43-05:00",
 "lidar_connected": true <bool>,
 "lidar_scanning": true <bool>,
 "lidar_scan_freq": 10 <float32>,
 "lidar_sample_rate": 2020 <int32>,
 "lidar_zero_percentage": 10 <float32>,
 "microcontroller": {
                     "connected": true,
                     "bad_sensor_data": false,
                     "restarting": false
                     },
 "imu": true <bool>,
 "left_motor": {
                "connected": true,
                "current": 0.12,
                "stalling": false
                },
 "right_motor": {
                 "connected": true,
                 "current": 0.12,
                 "stalling": false
                 },
 "left_tof": {


             "status": 6, 
              "range": 2041,
              "connected": true
              },
 "front_left_tof": {


                    "status": 6 
                    "range": 2041,
                    "connected": true
                    },
 "front_center_tof": {


                      "status": 6, 
                      "range": 2041,
                      "connected": true
                      },
 "front_right_tof": {


                    "status": 6,
                     "range": 2041,
                     "connected": true
                     },
 "right_tof": {


               "status": 6, 
               "range": 2041,
               "connected": true
               },
 "left_cliff_sensor": {


                      "status": 0,
                       "range": 2041,
                       "connected": true
                       },
 "right_cliff_sensor": {


                       "status": 0, 
                        "range": 2041,
                        "connected": true
                        },
 "center_cliff_sensor": {


                        "status": 0,
                         "range": 2041,
                         "connected": true
                         },
 "battery": {
             "current":0.44,
             "undervoltage":false,
             "overcurrent":false,
             "overvoltage":false,
             "voltage":25.92
             },
 "emergency_switch_pressed": false,
 "battery_door_open": false,
 "tof_data_valid": true,

"Lidar_status_normal[KJ13] ":"true"
}

コード参考例 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()

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></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");
// トピックにメッセージを発行してみる
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>

QS-9 GPIOの状態を取得

TOPIC

Function

Direction

送信タイミング

status/gpio GPIOの状態を取得 Publish GPIOの状態が変化する毎

 

データの取得例

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

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()

 

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></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
 ");
//
トピックにメッセージを発行してみる
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>

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

TOPIC

Function

Direction

送信タイミング

taskset/id タスクセットidを取得 Publish ALI起動時およびタスクセット実行時

 

データの取得例

json

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

コード参考例 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()

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
<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");
// トピックにメッセージを発行してみる
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>

 

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

TOPIC

Function

Direction

送信タイミング

taskset/index 実行中のタスクidを取得 Publish ALI起動時およびタスク実行中100ms毎

 

データの取得例

json

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

コード参考例 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()

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
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");
// トピックにメッセージを発行してみる
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>

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

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

 

データの取得例

json

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

コード参考例 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()

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
<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");
// トピックにメッセージを発行してみる
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>

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

TOPIC

Function

Direction

送信タイミング

taskset/state タスクセットの状態を取得 Publish ALI起動時およびタスクセットの
状態(停止、実行、再開)が
変化したとき

 

データの取得例

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

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(

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
<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/state");
// トピックにメッセージを発行してみる
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>

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

TOPIC

Function

Direction

送信タイミング

taskset/message ALIから送信されるMQTTメッセージを取得 Publish ALIがMQTTメッセージを送信した時

 

データの取得例

json

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

コード参考例 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()

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
<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/message
 ");
//
トピックにメッセージを発行してみる
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>

 

 

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

TOPIC

Function

Direction

送信タイミング

nav/amr_pose マシンの位置情報を取得 Publish 200ms毎

 

データの取得例

json

{
"data": "{
/"origin_x/": -1.74184,
/"origin_y/": -11.2238,
/"map_height/": 422,
/"x/": 0.760985,
/"y/": 0.0896266,
/"resolution/": 0.05,
/"theta/": -3.11892,
/"nrmse/": 0.637647,
/"pitch/": 0.00659122}"
}

コード参考例 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()

 

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
<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");
// トピックにメッセージを発行してみる
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>

 

QN-2 マップ情報を取得

TOPIC

Function

Direction

送信タイミング

nav/map_png マップ情報を取得 Publish ALI起動時および
マップの選択、変更時
走行不可領域の追加、修正時
走行可能領域の追加、修正時

 

データの取得例

json

{
 "timestamp": "2012-04-21T18:25:43-05:00",
 "format": "png" <string>,
 "data": [255, 255, 255, 0, 0....] <uint8>
}

コード参考例 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()

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></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");
// トピックにメッセージを発行してみる
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>

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

TOPIC

Function

Direction

送信タイミング

nav/map_name マップの名前を取得 Publish ALI起動時およびマップ名変更時

 

データの取得例

json

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

コード参考例 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()

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></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");
// トピックにメッセージを発行してみる
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>

 

QN-4 マップidを取得

TOPIC

Function

Direction

送信タイミング

nav/map_id マップidを取得 Publish ALI起動時およびマップ変更時

 

データの取得例

json

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

コード参考例 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()

コード参考例 Javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></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_id");
// トピックにメッセージを発行してみる
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>

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

TOPIC

Function

Direction

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

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":x  #:動作モード
  }
        # 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("xxx.xxx.xxx.xxx", 9075, 60)     #IPアドレス, ポート, キープアライブ
  mqttc.publish(topic, message_json)           #TOPIC
  mqttc.loop_forever()

     
コード参考例 Javascript

 

    <script>
      // MQTTクライアント生成 
      let client = new Paho.MQTT.Client(
          "xxx.xxx.xxx.xxx", //IPアドレス, ポート, キープアライブ
          9076,
          "web_" + (Date.now() + 1)
      ); //client ID
      // 接続
      let options = {
          useSSL: false,
          onSuccess: onConnect, // 接続したときのコールバック
          onFailure: doFail // 失敗したときのコールバック
      };
      // 接続したとき
      function onConnect() {
          console.log("onConnect");
          // トピックを出版する
          //# 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
          client.send("control/joy", JSON.stringify({ "data": x }));  // TOPIC
      }
      // 失敗したとき
      function doFail(e) {
          console.error(e);
      }
      // 接続が切れたとき
      function onConnectionLost(responseObject) {
          if (responseObject.errorCode !== 0) {
              console.error("onConnectionLost: " + responseObject.errorMessage);
          }
      }
      // メッセージを受信したとき
      function onMessageArrived(message) {
          console.log("onMessageArrived: " + message.payloadString);
      }
      // コールバックの定義
      client.onConnectionLost = onConnectionLost; // 接続が切れたとき
      client.onMessageArrived = onMessageArrived; // メッセージ受信したとき
      client.connect(options);
  </script>