ALIファームウェア バージョン
ver. 1.04
著者
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-1 ステータスの取得
TOPIC |
Function |
Direction |
status |
マシンのステータスを取得する |
Publish |
データの取得例
※location内の x, y, およびangle の theta については
REST API ドキュメント(ver1.04以降)を参照すること。
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" : <float32>,
"y" : <float32>,
"angle" : {
"theta" : <float32>,
"x" : <float32>, #予約領域
"y" : <float32>, #予約領域
"z" : <float32> #予約領域
}
},
"taskset" : {
"state" : <string>, # "idle"または"exectuing"
"cmdSetId" : <uint32>, # cmdSetId
"cmdIndex" : <uint32> # number of cmdSetId
"resume_cmd_index": <uint32>
"resume_available": <bool>
},
"error" : {
"errorCode" : <uint32>, # error code
"description" : <string>
}
}
キー |
値の説明 |
備考 |
operation_state |
AMRの状態 |
Idle:アイドル中 Executing:タスクセットの実行中 Mapping:マップの作成中 Error:エラー |
battery |
バッテリー状態 |
Percentage:残量 [%] Voltage:電圧 [V] |
time stamp |
発行された時刻(UNIX_TIME) |
|
location |
AMRの現在位置 (選択されているマップの |
x: x座標 |
taskset |
タスクセットの状態 |
State:タスクセットの実行状態 cmdSetId:現在実行中のタスクセットid cmdIndex:現在実行中のタスクインデックス (何番目のタスクか) |
error |
エラー状態 |
code:エラーコード description:エラー内容の説明 |
コード参考例 Python
import paho.mqtt.client as paho #「paho.mqtt.client」ライブラリのインストールが必要です。
def on_connect(self,mqttc, obj, 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>