Skip to content

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

MQTT API マニュアル 情報

  • ALIファームウェア バージョン: ver. 1.10.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
QT-1タスクセットidを取得Publishtaskset/id
QT-2実行中のタスクidを取得Publishtaskset/index
QT-3タスクセットの名前を取得Publishtaskset/name
QT-4タスクセットの状態を取得Publishtaskset/state
QT-5MQTTメッセージを取得Publishtaskset/message
QN-1マシンの原点情報を取得Publishnav/amr_pose
QN-2マップ情報を取得Publishnav/map_png
QN-3マップの名前を取得Publishnav/map_name
QN-4マップidの取得Publishnav/map_id
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"または"executing"
    "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座標

json
{
"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()

参考コード例 Javascript

html
    <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js"     
            type="text/javascript"> //外部スクリプト(paho-mqtt)のURIを指定 
        // 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 マシンの名前を取得

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

参考コード例 Javascript

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
        // 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 バッテリの残量を取得

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

データの取得例:

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

参考コード例 Javascript

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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 エラー情報を取得

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

参考コード例 Javascript

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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 マシンの操作状態を取得

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

参考コード例 Javascript

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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 マシンの制御状態を取得

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
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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 マシンのコマンド状態を取得

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

参考コード例 Javascript

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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 マシンのハードウェア状態を取得

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

データの取得例:

json
{
  "timestamp": "2012-04-21T18:25:43-05:00",
  "lidar_connected": <bool>,
  "lidar_scanning": <bool>,
  "lidar_scan_freq": <float32>,
  "lidar_sample_rate": <int32>,
  "lidar_zero_percentage": <float32>,
  "microcontroller": {
    "connected": true,
    "bad_sensor_data": false,
    "restarting": false
  },
  "imu": <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

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

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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の状態を取得

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

データの取得例:

json
[
  {
    "state": 0,
    "pin": 101
  },
  {
    "state": 0,
    "pin": 102
  },
  {
    "state": 0,
    "pin": 201
  },
  {
    "state": 0,
    "pin": 202
  }
]

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

参考コード例 Javascript

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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を取得

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

参考コード例 Javascript

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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を取得

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

参考コード例 Javascript

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js"
        type="text/javascript">
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 タスクセットの名前を取得

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

参考コード例 Javascript

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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 タスクセットの状態を取得

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(

参考コード例 Javascript

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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メッセージを取得

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

参考コード例 Javascript

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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 マシンの位置情報を取得

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

データの取得例:

json
{
  "data": {
    "nrmse": 0.4347776065557921, //自己位置スコア
    "origin_x": -0.5,
    "origin_y": -0.33,
    "map_height": 10000,
    "x": 0.72,
    "y": -1.2,
    "resolution": 0.05,
    "theta": 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("nav/amr_pose", 0)      #TOPIC
    mqttc.loop_forever()

参考コード例 Javascript

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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 マップ情報を取得

TopicFunctionDirection送信タイミング
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

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

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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 マップの名前を取得

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

参考コード例 Javascript

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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を取得

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

参考コード例 Javascript

html
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" 
        type="text/javascript">
// 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 マニュアル操作を行う

TopicFunctionDirection送信タイミング
control/joyマニュアル操作を行うPublishSubscribe

データの取得例:

json
{
  "data": 0   //<unit32>  // 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":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

html
<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>

関連記事

© 株式会社Keigan