REST API マニュアル 情報
ALIファームウェア バージョン
ver. 1.10.0
著者
Keigan
REST API 共通
基本
REST API を使⽤して、AMRの動作を制御します。
コンテンツ形式
リクエスト及びレスポンスの Body について、基本的に JSON 形式で情報のやり取りを⾏います。
ヘッダー
JSONを送信するため、以下を追加します。
Content-Type: application/json
URL(アドレス)
REST API にアクセスするためのアドレスは以下です。
http://[IP Address]:9085/[Path]
[IP Address]
LAN経由の場合は、ルーター側でIPアドレスを割り当て、または固定設定を行うことにより、決定される。
1. 直接 AMR のアクセスポイントに接続する場合・・・10.0.60.1
2. ローカルエリアネットワーク(LAN)経由で接続する場合・・・192.XXX.X.XX
[Path]
次項 REST API リスト で定義する [Path] を⽤いる。
HTTPメソッド
HTTPメソッド | 内容 |
GET | リソースを取得します。 |
POST | リソースを新しく追加します。 |
PUT | 指定されたリソースを修正します。 |
DELETE | 指定されたリソースを削除します。 |
※ブラウザ(javascript)では、Body含むGETリクエストを送信することはできません。
GET ・・・・・・・・・・・引数をクエリパラメータに設定(URLの [Path] 末尾に「?」を付随)
POST、PUT、DELETE・・・・引数をBodyに設定
REST API の基本的な使い方
基本的な運⽤⽅法は以下とする。
- M1 マップの選択
- M2 現在位置の設定
- T1 タスクセットの再⽣ または T2 タスクセットのダイレクト再⽣
- T3 タスクセットの再⽣停⽌
- T4 タスクセットの再開
エラーからの復帰
- T6-3 エラー状態から復帰 を使⽤します
単体の地点に移動
- T7 指定位置へ移動 を使⽤します
マップの取得
- M4 マップの取得を⾏います。
REST API リスト
No. | 機能 | HTTPメソッド | Path |
T1 | タスクセットの再⽣ | POST | /v2/taskset/exec |
T2 | タスクセットの直接再⽣ | POST | /v2/taskset/direct_exec |
T3 | タスクセットの再⽣停⽌ | POST | /v2/taskset/abort |
T4 | タスクセットの再開 | POST | /v2/taskset/resume |
T5 | タスクセットのリスト取得 | GET | /v2/taskset/tasksets |
T6-1 | Idでタスクセットの取得 | GET | /v2/taskset |
T6-2 | タスクセットの追加 | POST | /v2/taskset |
T6-3 | タスクセットの削除 | DELETE | /v2/taskset/delete |
T6-4 | 名前でタスクセットの取得 | GET | /v2/taskset |
T7 | エラー状態から復帰 | POST | /v2/error/reset |
T8 | 指定位置へ移動 | POST | /v2/task/move_position |
T9 | タスクセットの名前変更 | PUT | /v2/taskset/name |
T10 | タスクセットを他のマップへ移動 | PUT | /v2/taskset/mapid |
T11 | タスクセットのcmdsを変更 | PUT | /v2/taskset/tasks |
T12 | タスクセットの一時停止 | POST | /v2/taskset/pause |
M1 | マップのリスト取得 | GET | /v2/map/maps |
M2-1 | Idでマップの選択 | POST | /v2/map/select |
M2-2 | 名前でマップの選択 | POST | /v2/map/select |
M3 | 現在位置の設定 | POST | /v2/map/initial_position |
M4-1 | マップidでマップを取得 | GET | /v2/map |
M4-2 | マップ名で、マップを取得 | GET | /v2/map |
M5-1 | マップの削除 | DELETE | /v2/map |
M5-2 | マップの追加 | POST | /v2/map |
M6 | マップスキャンの開始、中止 | POST | /v2/map/mapping/start |
M7 | スキャンしたマップの保存 | POST | /v2/map/mapping/save |
M8 | マップデータを変更 | PUT | /v2/map/map |
M9 | マップデータの名前を変更 | PUT | /v2/map/name |
M10 | マップデータの走行可能領域を変更 | PUT | /v2/map/map_edits |
M11 | マップデータの走行不可領域を変更 | PUT | /v2/map/virtual_obstacles |
M12 | マップデータの減速エリアを変更 | PUT | /v2/map/speed_limit_zones[KJ6] |
M13 | マップデータのランドマークを変更 | PUT | V2/map/landmarks[KJ7] |
STG1 | KeiganALIの基本設定情報を取得 | GET | /v2/settings |
STG2 | KeiganALIの最高速度を変更 | POST | /v2/settings/max_speed |
STG3 | スピーカーの音量を変更 | POST | /v2/settings/speaker_volume |
STG4 | フットプリントを設定 | POST | /v2/settings/amr_footprint |
STG5 | JOG運転時の直進速度の変更 | POST | /v2/settings/manual_control/translational_speed |
STG6 | JOG運転時の旋回速度の変更 | POST | /v2/settings/manual_control/rotational_speed |
STG7 | クリフ(崖)センサの有効/無効設定 | POST | /v2/settings/manual_control/cliff_detection |
STG8 | ライントレースゲイン(PID)値の設定 | POST | /v2/settings/manual_control/line_tracer_pid_gains |
S1 | システムのシャットダウン | POST | /v2/system/shutdown |
S2 | システムの再起動 | POST | /v2/system/restart |
S3 | ロボットコントローラの再起動 | POST | /v2/system/controller/reboot |
C1 | ライントレースオフセット(前後)値の取得 | GET | /v2/system/calibration/line_tracer_offset |
C2 | ライントレースオフセット(前後)値の設定 | POST | /v2/system/calibration/line_tracer_offset |
C3 | ライントレースオフセット(左右)値の取得 | GET | /v2/calibration/line_tracer_side_offset |
C4 | ライントレースオフセット(左右)値の設定 | POST | /v2/calibration/line_tracer_side_offset |
T1 タスクセットの再⽣
Path |
Method |
Function |
/v2/taskset/exec | POST | 指定idの taskSet を再生する |
Request Body
{
"cmdSetId": <int32> #taskset ID
"count" :<int32> #Unused,Number of repeat
"startIndex" :<int32> #Index of starting task
}
Response Body
{
"message": <string>
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/taskset/exec' #IPアドレスを入力
params = {"cmdSetId":XXX} #tasksetIdを入力
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/taskset/exec' #IPアドレスを入力
params = {"cmdSetId":XXX, "count":XXX, "startIndex":XXX} #cmdSetId, count, startIndexを入力
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/taskset/exec', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {'cmdSetId':XXX,'count':XXX, 'startIndex':XXX }; //cmdSetId, count, startIndexを入力
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
T2 タスクセットのダイレクト再⽣
Path |
Method |
Function |
/v2/taskset/direct_exec | POST | taskSet を直接再生する |
Request Body
json
{
"cmds" <string> # taskset json
}
例
json
{
"cmds":[{
"cmdType":100,
"arg":{
"disableReplanning":false,
"enableObstacleAvoidance":true,
"enableRerouteRecovery":false,
"mode":1,
"obstacleTimeout":0,
"pathWidth":2,
"x":5.2308,
"y":1.0413,
"theta":0.3915,
"ignoreTheta":false,
"passingPoint":false,
"name":"TEST",
"disableStartAnnouncement":true,
"disableStopAnnouncement":true
}
}]
}
※ cmds については、本ドキュメント後半 の「cmds について」を参照下さい。
Response Body
json
{
"message": <string>
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/taskset/direct_exec' #IPアドレスを入力
params = {
"cmds":[{
"cmdType":XXX, #cmdTypeを入力
"arg": {
… #cmdTypeに合ったcmdsの内容を記述
}
}]
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/taskset/direct_exec', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {'cmds':[{'cmdType':XXX', arg':{…}}]}; //cmdTypeに合ったcmdsの内容を記述
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
T3 タスクセットの再⽣停⽌
Path |
Method |
Function |
/v2/taskset/abort | POST | taskSet の再⽣を停⽌する |
Request Body
なし
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.xxx.x.xx:9085/v2/taskset/abort' #IPアドレスを入力
res = requests.post(url)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/taskset/abort', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
T4 タスクセットの再開
Path |
Method |
Function |
/v2/taskset/resume | POST | taskSet の再⽣を再開する |
※タスクセットの再⽣停⽌状態から、復帰できる場合は再開する
Request Body
なし
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.xxx.x.xx:9085/v2/taskset/resume' #IPアドレスを入力
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/taskset/resume', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
T5 タスクセットのリスト取得
Path |
Method |
Function |
/v2/taskset/tasksets | GET | taskSet のリストを取得する |
Request Body
json
{
"mapId" :<int32>
}
Response Body
json
{
"lists": [{
"appData":{}, #拡張予約
"cmdSetType":<uint32>
"cmds":[{ #JSON[]
"arg":{
"disableStartAnnouncement":true,
"disableStopAnnouncement":true
"disableReplanning":false,
"enableObstacleAvoidance":true,
"enableRerouteRecovery":false,
"mode":1,
"obstacleTimeout":0,
"pathWidth":2,
"ignoreTheta":<bool>,
"name":<string>,
"passingPoint":<bool>,
"theta":<float32>,
"type": <int32>, #拡張予約
"x": <float32>,
"y": <float32>
},
"cmdType": <int32> # cmdType
}],
"id": <uint32>, # taskSet id
"mapid": <uint32>, # map id
"name": <string > #map name
}],
"success": <bool >
}
※ cmds については、本ドキュメント後半 の「cmds について」を参照下さい。
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.xxx.x.xx:9085/v2/taskset/tasksets' #IPアドレスを入力
params = {'mapId':XXX} #mapIdを入力
res = requests.get(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('GET', 'http://192.XXX.X.XX:9085/v2/taskset/tasksets?mapId=XXX', true);//IPアドレス、mapIdを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
※注意
ブラウザ(javascript)では、引数をBodyに設定してGETリクエストを送信することはできません。
- NG例
request.open('GET', 'http://192.XXX.X.XX:9085/v2/taskset/taskset, true);
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send(JSON.stringify({mapId:XXX})); //GETメソッドでは引数をBodyにして送信できません
T6-1 idでタスクセットの取得
Path |
Method |
Function |
/v2/taskset | GET | 指定idのtaskSetを取得する |
Request Body
json
{
"cmdSetId":<int32> #taskset ID
}
Response Body
json
{
"appData": <string> #拡張予約
"cmdSetName": <string> #taskSet Name
"cmdSetType": <uint32>
"cmds":[
{ #JSON [ ]
"arg":{
…
},
"cmdType":<int32>
},
…
{
"arg":{
…
},
"cmdType": <int32>
}
]
"id": <int32> # taskSetId
"mapId": <uint32 > # mapId
"success": <bool >
}
※ cmds については、本ドキュメント後半 の「cmds について」を参照下さい。
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/taskset' #IPアドレスを入力
params = {'cmdSetId':XXX} #cmdSetIdを入力
res = requests.get(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('GET', 'http://192.XXX.X.XX:9085/v2/taskset?cmdSetId=XXX', true);//IPアドレス、cmdSetIdを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
※注意
ブラウザ(javascript)では、引数をBodyに設定してGETリクエストを送信することはできません。
- NG例
request.open('GET', 'http://192.XXX.X.XX:9085/v2/taskset, true);
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send(JSON.stringify({cmdSetId:XXX})); //GETメソッドでは引数をBodyにして送信できません
T6-2 タスクセットの追加
Path | Method | Function |
/v2/taskset | POST | taskSet を追加する |
Request Body
json
{
"mapId":<int32>
"cmdSetName":<string>
"cmdSetType":30 #固定値
"cmds":<string>
"appData":<string> #拡張予約
}
※cmds については、本ドキュメント後半 の「cmds について」を参照下さい。
Response Body
json
{
"success":<bool>
"cmdSetId":<int32>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライフ���ラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/taskset' #IPアドレスを入力
params = {'mapId':XXX, 'cmdSetName':XXX, 'cmdSetType':30, 'cmds':[{'arg':{…},'cmdType':XXX}]}
# cmdSetTypeは30の固定値
# mapId, cmdSetName, cmdsを入力
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/taskset', true); #IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {'mapId':XXX, 'cmdSetName':'XXX', 'cmdSetType':30,//cmdSetTypeは30の固定値
'cmds':[{'arg':{…}, 'cmdType':XXX}]}; # mapId, cmdSetName, cmdsを入力
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
T6-3 タスクセットの削除
Path |
Method |
Function |
/v2/taskset/delete | DELETE | taskSet を削除する |
Request Body
json
{
"cmdSetId" <int32>
}
Response Body
json
{
"success":<bool>
}
APIプラットフォーム��例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/taskset/delete' #IPアドレスを入力
params = {'cmdSetId': XXX } #cmdSetIdを入力
res = requests.delete(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('DELETE', 'http://192.XXX.X.XX:9085/v2/taskset/delete', true);#IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body ={'cmdSetId':XXX}; #cmdSetIdを入力
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
T6-4 名前でタスクセットの取得
Path |
Method |
Function |
/v2/taskset | GET | 指定名前のtaskSetを取得する |
Request Body
json
{
"cmdSetname":<string> #taskset name
}
Response Body
json
{
"appData": <string> #拡張予約
"cmdSetName": <string> #taskSet Name
"cmdSetType": <uint32>
"cmds":[
{ #JSON [ ]
"arg":{
…
},
"cmdType":<int32>
},
…
{
"arg":{
…
},
"cmdType": <int32>
}
]
"id": <int32> # cmdSetId
"mapId": <uint32 > # mapId
"success": <bool >
}
※ cmds については、本ドキュメント後半 の「cmds について」を参照下さい。
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/taskset' #IPアドレスを入力
params = {'cmdSetname':XXX} #cmdSetIdを入力
res = requests.get(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('GET', 'http://192.XXX.X.XX:9085/v2/taskset?cmdSetname=XXX', true);//IPアドレス、cmdSetIdを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
※注意
ブラウザ(javascript)では、引数をBodyに設定してGETリクエストを送信することはできません。
- NG例
request.open('GET', 'http://192.XXX.X.XX:9085/v2/taskset, true);
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send(JSON.stringify({cmdSetname:XXX})); //GETメソッドでは引数をBodyにして送信できません
T7 エラー状態から復帰
Path |
Method |
Function |
/v2/error/reset | POST | エラー状態から復帰する |
Request Body
なし
Response Body
json
{
"success":<bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/error/reset' #IPアドレスを入力
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/error/reset', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
T8 指定位置へ移動
Path |
Method |
Function |
/v2/task/move_position | POST | 指定位置へ移動 |
Request Body
json
{
"x": <float32> # x, (マップ原点に対する AMR 座標)
"y": <float32> # y, (マップ原点に対する AMR 座標)
"theta": <float32> # Machine angle (radian) (実機の⽅向)
"type":<int32> # 拡張予約
}
Response Body
json
{
"success":<bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/task/move_position' #IPアドレスを入力
params = {'x':XXX, 'y':XXX, 'theta':XXX} #x, y, thetaを入力
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/task/move_position', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {'x':XXX, 'y':XXX, 'theta':XXX}; //x, y, thetaを入力
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
T9 タスクセットの名前変更
Path |
Method |
Function |
/v2/taskset/name | PUT | 指定idのタスクセットの名前変更 |
Request Body
json
{
"cmdSetId": <int32>
"name": <string>
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/taskset/name' #IPアドレスを入力
params = { "cmdSetId":XXX, "name":XXX } #cmdSetId, nameを入力
res = requests.put(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('PUT', 'http://192.XXX.X.XX:9085/v2/taskset/name', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {'cmdSetId':XXX, 'name':XXX}; #cmdSetId, nameを入力
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
T10 タスクセットを他のマップへ移動
Path |
Method |
Function |
/v2/taskset/mapId | PUT | 指定idのタスクセットを他のマップへ移動 |
Request Body
json
{
"cmdSetId": <int32>
"mapId": <int32>
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/taskset/name' #IPアドレスを入力
params = { "cmdSetId":XXX, "mapId":XXX } #cmdSetId, mapIdを入力
res = requests.put(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('PUT', 'http://192.XXX.X.XX:9085/v2/taskset/mapId', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {'cmdSetId':XXX, 'mapId':XXX}; #cmdSetId, mapIdを入力
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
T11 タスクセットのcmdsを変更
Path |
Method |
Function |
/v2/taskset/tasks | PUT | 指定idのタスクセットのcmdsを変更 |
Request Body
json
{
"cmdSetId": <int32>
"cmds": <string>
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/taskset/tasks' #IPアドレスを入力
params = { "cmdSetId":XXX,
"cmds":[{
"arg":{
… #cmdTypeに合ったcmdsの内容を記述
},
"cmdType":XXX #cmdTypeを入力
}]
}
res = requests.put(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('PUT', 'http://192.XXX.X.XX:9085/v2/taskset/tasks', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {'cmdSetId':XXX,'cmds':[{'arg':{…}, 'cmdType':XXX}]}; #cmdTypeに合ったcmdsの内容を記述
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
T12 タスクセットの一時停止
Path | Method | Function |
/v2/taskset/pause | POST | タスクセットの再生を一時停止する |
Request Body
なし
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.xxx.x.xx:9085/v2/taskset/pause' #IPアドレスを入力
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/taskset/pause', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
M1 マップのリスト取得
Path | Method | Function |
/v2/map/maps | GET | マップのリストを取得する |
Request Body
なし
Response Body
json
{
"success": <bool >
"lists": [] #JSON
}
"lists"
[
{
"info":<string> # map info (Reserved, not used)
"id":<uint32> # map id
"name":<string> # map name
}
]
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map/maps' #IPアドレスを入力
res = requests.get(url)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('GET', 'http://192.XXX.X.XX:9085/v2/map/maps', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
M2‐1 マップの選択
Path | Method | Function |
/v2/map/select | POST | idを指定してマップを選択する |
※「M10: マップデータの走行可能領域を変更」/v2/map/map_edits
「M11: マップデータの走行不可領域を変更」/v2/map/virtual_obstacles
「M12: マップデータの減速エリアを変更」/v2/map/speed_limit_zones
「M13: マップデータのランドマークを変更」/v2/map/landmarks
を送信後は、マップへ正しく反映させるために、必ず本APIを送信してください。
Request Body
json
{
"mapId":XXX, #mapIdを入力
"set_initial_pose":<bool>, #イニシャルポジションを有効/無効
"x":<float64>, #イニシャルポジションのx座標
"y":<float64>, #イニシャルポジションのx座標
"theta":<float64> #イニシャルポジションの向き
}
Response Body
json
{
"success":<bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map/select' #IPアドレスを入力
params = {
"mapId":XXX, #mapIdを入力
"set_initial_pose":<bool>, #イニシャルポジションを有効/無効
"x":<float64>, #イニシャルポジションのx座標
"y":<float64>, #イニシャルポジションのx座標
"theta":<float64> #イニシャルポジションの向き
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/map/select', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
‘mapId’:XXX, #mapIdを入力
‘set_initial_pose’:<bool>, #イニシャルポジションを有効/無効
‘x’:<float64>, #イニシャルポジションのx座標
‘y’:<float64>, #イニシャルポジションのx座標
‘theta’:<float64> #イニシャルポジションの向き
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
M2-2 マップの選択
Path | Method | Function |
/v2/map/select_by_name | POST | 名前を指定してマップを選択する |
※「M10: マップデータの走行可能領域を変更」/v2/map/map_edits
「M11: マップデータの走行不可領域を変更」/v2/map/virtual_obstacles
「M12: マップデータの減速エリアを変更」/v2/map/speed_limit_zones
「M13: マップデータのランドマークを変更」/v2/map/landmarks
を送信後は、マップへ正しく反映させるために、必ず本APIを送信してください。
Request Body
json
{
"map_name":<string> #MapNameを入力
"set_initial_pose":<bool>, #イニシャルポジションを有効/無効
"x":<float64>, #イニシャルポジションのx座標
"y":<float64>, #イニシャルポジションのx座標
"theta":<float64> #イニシャルポジションの向き
}
Response Body
json
{
"success":<bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map/select_by_name' #IPアドレスを入力
params = {
"map_name":XXX #map_nameを入力
"set_initial_pose":<bool>, #イニシャルポジションを有効/無効
"x":<float64>, #イニシャルポジションのx座標
"y":<float64>, #イニシャルポジションのx座標
"theta":<float64> #イニシャルポジションの向き
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/map/select_by_name', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
'mapname':XXX #map_nameを入力
"set_initial_pose":<bool>, #イニシャルポジションを有効/無効
"x":<float64>, #イニシャルポジションのx座標
"y":<float64>, #イニシャルポジションのx座標
"theta":<float64> #イニシャルポジションの向き
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
M3 現在位置の設定
Path | Method | Function |
/v2/map/initial_position | POST | 選択中のマップに対して⾃機の現在位置を設定する |
Request Body
json
{
"x": <float32> # ros_native_x, (マシン相対座標)
"y": <float32> # ros_native_y, (マシン相対座標)
"theta": <float32> # Machine angle (radian) (実機の⽅向)
}
Response Body
json
{
"success":<bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/initial_position' #IPアドレスを入力
params = {"x":XXX, "y":XXX, "theta":XXX} #x, y, thetaを入力
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/map/initial_position', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {'x':XXX, 'y':XXX, 'theta':XXX}; //x, y, thetaを入力
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
M4-1 マップの取得
Path | Method | Function |
/v2/map | GET | 指定idのマップを取得する |
Request Body
json
{
"mapId":<int32>
}
Response Body
json
{
"id" : <uint32>, #map id
"info": <string>, #map info reservation. Not used.
"iniYaml": <string>, #initial_pose yaml
"landmarks":[
{
"info":<string>, #Not used.
"other:{"defaultHome":<bool>}, #Default setting
"name":<string>, #landmark name
"location":{
"y":<float32>, #y, (マップ原点に対するlandmark座標)
"x":<float32>, #x, (マップ原点に対するlandmark座標)
"theta":<float32> #angle (radian) (Landmarkの⽅向)
}
}
] ,
"map": <string (base64)>, #map png
"map_edits": <string (base64)>, #edits png
"map_h: <uint32>, #ADD map png width pixel
"map_w: <uint32>, #ADD map png width pixel
"name": <string>, #map name
"success" : <bool>, #true:Done, false:failure
"virtual_obstacles": <string (base64)>, #obst png
"speed_limit_zones":[
{
"color"<color hex code>, #color of speed limit zone
"speed":<float32>, #setting spped of speed limit zone
"zone:[
[<float32>,<float32>] #corner1 of speed limit zone
[<float32>,<float32>] #corner2 of speed limit zone
[<float32>,<float32>] #corner3 of speed limit zone
[<float32>,<float32>] #corner4 of speed limit zone
]
}
"yaml": <string>, #map yaml including origin and resolution}
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map' #IPアドレスを入力
params = {'mapId':XXX} #mapIdを入力
res = requests.get(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('GET', 'http://192.XXX.X.XX:9085/v2/map?mapId=XXX', true); //IPアドレス, mapIdを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
※注意
ブラウザ(javascript)では、引数をBodyに設定してGETリクエストを送信することはできません。
- NG例
request.open('GET', 'http://192.XXX.X.XX:9085/v2/map, true);
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send(JSON.stringify({mapId:XXX})); //GETメソッドでは引数をBodyにして送信できません
説明
map: マップの画像データ (拡張子 png)
map_edits: マップの形状編集データ (拡張子 png)
virtual_obstacles: 走行不可領域のデータ (拡張子 png)
map_w: マップ幅(単位 pixel)
map_h: マップ高さ(単位 pixel)
yaml: マップ原点情報と解像度情報を含む
iniYaml: AMR初期位置情報
landmarks: ランドマーク位置情報
speedlimitzones: 減速エリア領域情報
yaml について
KeiganALI でマップを作成した場合⾃動で⽣成され、マップに紐付けられる。以下のようなデータとなる。
image: map.png #マップの画像データ名
resolution: 0.050000 #地図の解像度(5cm=0.05), 固定値
origin: [-8.000000, -11.200000, 0.000000] #マップの原点座標
resolution は 0.05 (単位 m) 固定。
origin は、マップ原点に対する、マップ左下のコーナー点の座標(マップ原点の定義)となる。
詳細は後半「座標指定について」を参照下さい。
M4-2 マップ名で、マップを取得
Path | Method | Function |
/v2/map | GET | 指定マップ名のマップを取得する |
Request Body
json
{
"map_name":<string>
}
Response Body
json
{
"id" : <uint32>, #map id
"info": <string>, #map info reservation. Not used.
"iniYaml": <string>, #initial_pose yaml
"landmarks":[
{
"info":<string>, #landmark info reservation. Not used.
"other:{"defaultHome":<bool>}, #Default setting
"name":<string>, #landmark name
"location":{
"y":<float32>, #y, (マップ原点に対するlandmark座標) "x":<float32>, #x, (マップ原点に対するlandmark座標)
"theta":<float32> #angle (radian) (Landmarkの⽅向)
}
}
] ,
"map": <string (base64)>, #map png
"map_edits": <string (base64)>, #edits png
"map_h: <uint32>, #ADD map png width pixel
"map_w: <uint32>, #ADD map png width pixel
"name": <string>, #map name
"success" : <bool>, #true:Done, false:failure
"virtual_obstacles": <string (base64)>, #obst png
"speed_limit_zones":[
[
"color"<color hex code>, #color of speed limit zone
"speed":<float32>, #setting spped of speed limit zone
"zone:[
[<float32>,<float32>] #corner1 of speed limit zone
[<float32>,<float32>] #corner2 of speed limit zone
[<float32>,<float32>] #corner3 of speed limit zone
[<float32>,<float32>] #corner4 of speed limit zone
]
]
"yaml": <string>, #map yaml including origin and resolution}
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map' #IPアドレスを入力
params = {'map_name':XXX} #map_nameを入力
res = requests.get(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('GET', 'http://192.XXX.X.XX:9085/v2/map?map_name=XXX', true); //IPアドレス, mapIdを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
※注意
ブラウザ(javascript)では、引数をBodyに設定してGETリクエストを送信することはできません。
- NG例
request.open('GET', 'http://192.XXX.X.XX:9085/v2/map, true);
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send(JSON.stringify({map_name:XXX})); //GETメソッドでは引数をBodyにして送信できません
M5-1 マップの削除
Path | Method | Function |
/v2/map | DELETE | 指定idのマップを削除 |
Request Body
json
{
"mapId": <int32>
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map' #IPアドレスを入力
params = { "mapId":XXX } #mapIdを入力
res = requests.delete(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('DELETE', 'http://192.XXX.X.XX:9085/v2/map', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {'mapId':XXX }; #mapIdを入力
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
M5-2 マップの追加
Path |
Method |
Function |
/v2/map | POST | マップを追加する |
Request Body
json
{
"map_name": <string> #map name
"map": <string(base64)> #map png
"map_edits": < string(base64)> #edits png
"virtual_obstacles": < string(base64)> #obst png
"map_yaml": <string> #map yaml including origin and resolution
"init_yaml": <string> #initial_pose yaml
"landmarks":[
{
"info":<string>, #landmark info reservation. Not used.
"other:{"defaultHome":<bool>}, #Default setting
"name":<string>, #landmark name
"location":{
"y":<float32>, #y, (マップ原点に対するlandmark座標) "x":<float32>, #x, (マップ原点に対するlandmark座標)
"theta":<float32> #angle (radian) (Landmarkの⽅向)
}
}
] ,
"speed_limit_zones":[
{
"color"<color hex code>, #color of speed limit zone
"speed":<float32>, #setting spped of speed limit zone
"zone:[
[<float32>,<float32>] #corner1 of speed limit zone
[<float32>,<float32>] #corner2 of speed limit zone
[<float32>,<float32>] #corner3 of speed limit zone
[<float32>,<float32>] #corner4 of speed limit zone
}
}
Response Body
json
{
"mapId": <int32>
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map' #IPアドレスを入力
params = {
"map_name":XXX.png, #任意のマップ名を入力
"map":"iVB0Rw0KGg~~中省略~~SuQmCC", #追加するマップデータ(png)
"map_edits":"", #追加する走行可能領域のマップデータ(png), 必要な場合のみ
"virtual_obstacles":"", #追加する走行不可領域のマップデータ(png), 必要な場合のみ
"map_yaml":"image: map.png\nresolution: 0.050000\norigin: [-6.400000, -9.600000, 0.000000]\nnegate: 0\noccupied_thresh: 0.65\nfree_thresh: 0.196\n",
#originの値のみ変更可, 他は固定値
"init_yaml":"initial_pos_x: 0.11\ninitial_pos_y: 0.15\ninitial_pos_a: -3.00\n"
#KeiganALIの初期位置情報, 必要な場合のみ
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/map', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
'map_name':XXX.png, #任意のマップ名を入力
'map':"iVB0Rw0KGg~~中省略~~SuQmCC", #追加するマップデータ(png)
'map_edits':"", #追加��る走行可能領域のマップデータ(png), 必要な場合のみ
'virtual_obstacles':"", #追加する走行不可領域のマップデータ(png), 必要な場合のみ
'map_yaml':"image: map.png\nresolution: 0.050000\norigin: [-6.400000, -9.600000, 0.000000]\nnegate: 0\noccupied_thresh: 0.65\nfree_thresh: 0.196\n",
#originの値のみ変更可, 他は固定値
'init_yaml':"initial_pos_x: 0.11\ninitial_pos_y: 0.15\ninitial_pos_a: -3.00\n"
#KeiganALIの初期位置情報, 必要な場合のみ
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
M6 マップスキャンの開始、中止
Path |
Method |
Function |
/v2/map/mapping/start | POST | マップのスキャンの開始・中止 |
Request Body
json
{
"type": <uint32> # 1:start, 2:stop
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map/mapping/start' #IPアドレスを入力
params = {
"type":1 #マップスキャンの開始
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/map/mapping/start', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
'type':1
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
M7 スキャンしたマップの保存
Path |
Method |
Function |
/v2/map/mapping/save_map | POST | スキャンしたマップの保存 |
Request Body
json
{
"mapName": <string> #マップ名
}
Response Body
json
{
"success": <bool>
"mapId": <int32>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map/mapping/save_map' #IPアドレスを入力
params = {
"mapName":"XXX" #追加したいマップ名を入力
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/map/mapping/save_map', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
'mapName':"XXX" //追加したいマップ名を入力
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
M8 マップデータを変更
Path |
Method |
Function |
/v2/map/map | PUT | 指定idのマップを変更する |
Request Body
json
{
"mapId": <int32> #map id
"map": <uint8[]> #map png
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map/map' #IPアドレスを入力
params = {
"mapId":XXX, #任意のmapIdを入力
"map": "iVB0Rw0KGg~~中省略~~SuQmCC" #追加するマップデータ(png)
}
res = requests.put(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('PUT', 'http://192.XXX.X.XX:9085/v2/map/map', true); #IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
'mapId':XXX, //任意のmapIdを入力
'map':"iVB0Rw0KGg~~中省略~~SuQmCC" //追加するマップデータ(png)
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
M9 マップデータの名前を変更
Path |
Method |
Function |
/v2/map/name | PUT | 指定idのマップの名前を変更する |
Request Body
json
{
"mapId": <int32> #map id
"name": <string> #map name
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map/name' #IPアドレスを入力
params = {
"mapId":XXX, #任意のmapIdを入力
"name":"ABCD" #変更したいマップの名前を入力
}
res = requests.put(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('PUT', 'http://192.XXX.X.XX:9085/v2/map/name', true); #IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
'mapId':XXX, //任意のmapIdを入力
'name':"ABCD" //変更したいマップの名前を入力
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
M10 マップデータの走行可能領域を変更
Path |
Method |
Function |
/v2/map/map_edits | PUT | 指定idのマップデータの走行可能領域を変更 |
※このAPIを送信後、必ずREST API「M2 マップの選択 /v2/map/select」を送信してください。
「M2 マップの選択 /v2/map/select」を送信しないと、正しくマップへ反映されません。
Request Body
json
{
"mapId": <int32> #map id
"map_edits": <string(base64)> #map_edits png
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map/map_edits' #IPアドレスを入力
params = {
"mapId":XXX, #任意のmapIdを入力
"map_edits":"iVB0Rw0KGg~~中省略~~SuQmCC" #追加する走行可能領域のマップデータ(png)
}
res = requests.put(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('PUT', 'http://192.XXX.X.XX:9085/v2/map/map_edits', true); #IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
'mapId':XXX, //任意のmapIdを入力
'map_edits':"iVB0Rw0KGg~~中省略~~SuQmCC" //追加する走行可能領域のマップデータ(png)
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
M11 マップデータの走行不可領域を変更
Path |
Method |
Function |
/v2/map/virtual_obstacles | PUT | 指定idのマップデータの走行不可領域を変更 |
※このAPIを送信後は、必ずREST API「M2 マップの選択 /v2/map/select」を送信してください。
「M2 マップの選択 /v2/map/select」を送信しないと、正しくマップへ反映されません。
Request Body
json
{
"mapId": <int32> #map id
"virtual_obstacles": <string(base64)> #virtual_obstacles png
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map/virtual_obstacles' #IPアドレスを入力
params = {
"mapId":XXX, #任意のmapIdを入力
"virtual_obstacles":"iVB0Rw0KGg~~中省略~~SuQmCC" #追加する走行不可領域のマップデータ(png)
}
res = requests.put(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('PUT', 'http://192.XXX.X.XX:9085/v2/map/virtual_obstacles', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
'mapId':XXX, //任意のmapIdを入力
'virtual_obstacles':"iVB0Rw0KGg~~中省略~~SuQmCC" //追加する走行不可領域のマップデータ(png)
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
M12 マップデータの減速エリアを変更
Path |
Method |
Function |
/v2/map/speed_limit_zones | PUT | 指定idのマップデー���の走行不可領域を変更 |
※このAPIを送信後は、必ずREST API「M2 マップの選択 /v2/map/select」を送信してください。
��M2 マップの選択 /v2/map/select」を送信しないと、正しくマップへ反映されません。
Request Body
json
{
"mapId": <int32> #map id
"zones":[
{
"color":<string, hex color>,
"speed":<float64>,
"zone"[
[<float64>,<float64>],[<float64>,<float64>],[<float64>,<float64>],[<float64>,<float64>]
]
}
]
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map/speed_limit_zones' #IPアドレスを入力
params = {
"mapId":XXX, #任意のmapIdを入力
"speed_limit_zones":[
{
"color":<string, hex color>,
"speed":<float64>,
"zone"[
[<float64>,<float64>],[<float64>,<float64>],[<float64>,<float64>],[<float64>,<float64>]
]
}
#追加する減速エリアのマップデータ(color,speed,zone)
}
res = requests.put(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('PUT', 'http://192.XXX.X.XX:9085/v2/map/speed_limit_zones', true); #IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
'mapId':XXX, //任意のmapIdを入力
‘speed_limit_zones":[
{
‘color’:<string, hex color>,
‘speed’:<float64>,
‘zone’[
[<float64>,<float64>],[<float64>,<float64>],[<float64>,<float64>],[<float64>,<float64>]
]
}
//追加する減速エリアのマップデータ(color,speed,zone)
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
M13 マップのランドマークを変更
Path |
Method |
Function |
/v2/map/landmarks | PUT | 指定idのマップデータの走行不可領域を変更 |
※このAPIを送信後は、必ずREST API「M2 マップの選択 /v2/map/select」を送信してください。
「M2 マップの選択 /v2/map/select」を送信しないと、正しくマップへ反映されません。
Request Body
json
{
"mapId": <int32> #map id
"landmarks":[
{
"info":<string>, # reserve
"other": {"defaultHome":<boo;>},
"name":<string>,
"location":{
"x":<float64>,
"y":<float64>,
"theta":<float64>
}
}
]
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/map/landmarks' #IPアドレスを入力
params = {
"mapId":XXX, #任意のmapIdを入力
"landmarks":[
{
"info":<string>,
"other": {"defaultHome":<boo;>},
"name":<string>,
"location":{
"x":<float64>,
"y":<float64>,
"theta":<float64>
}
}
]
#追加するランドマークのデータ()
}
res = requests.put(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('PUT', 'http://192.XXX.X.XX:9085/v2/map/landmarks', true); #IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
‘mapId’:XXX, //任意のmapIdを入力
‘landmarks’:[
{
‘info’:<string>,
‘other’: {"defaultHome":<boo;>},
‘name’:<string>,
‘location’:{
‘x’:<float64>,
‘y’:<float64>,
‘theta’:<float64>
}
}
]
//#追加するランドマークのデータ()
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
STG1 KeiganALIの基本設定情報を取得
Path |
Method |
Function |
/v2/settings | GET | KeiganALIの基本情報を取得する |
Request Body
なし
Response Body
json
{
"message":
{
"maxRunningSpeed": <float64>
"speakerVolume": <int32>
"mqttAddress": <string>
"logRecording": <int32> # -1 or 1
"footprint": <string>
"robot_radius": <float64>
"left_cliff_is_enabled":<bool>, #クリフセンサ(左)を有効
"right_cliff_is_enabled":<bool>, #クリフセンサ(左)を有効
"lineTracerKd":0.0, #ライントレースゲインKd
"lineTracerKi":0.0, #ライントレースゲインKi
"lineTracerKp":0.003, #ライントレースゲインKp
"manualControlRotationalSpeed":<float64>, #マニュアル操作 旋回速度
"manualControlTranslationalSpeed":<float64>, #マニュアル操作 最高速度
"maxRunningSpeedLowerLimit":<float64>, #自動運転 最低速度
"maxRunningSpeedUpperLimit":<float64> #自動運転 最高速度 }
"success: <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/settings' #IPアドレスを入力
res = requests.get(url)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('GET', 'http://192.XXX.X.XX:9085/v2/settings', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
STG2 KeiganALIの最高速度を変更
Path |
Method |
Function |
/v2/settings/max_speed | POST | KeiganALIの最高速度を変更する |
Request Body
json
{
"data": <float32> #max_speed: 0.5m/s
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/settings/max_speed' #IPアドレスを入力
params = {
"data":XXX, #ALIの最高速度を入力
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/settings/max_speed', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
'data':XXX, //ALIの最高速度を入力
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
STG3 スピーカーの音量を変更
Path |
Method |
Function |
/v2/settings/speaker_volume | POST | KeiganALIのスピーカーの音量を変更する |
Request Body
json
{
"data": <int32> # 0 to 100
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/settings/speaker_volume' #IPアドレスを入力
params = {
"data":XXX, #スピーカーの音量を入力
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/settings/speaker_volume', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
'data':XXX, //スピーカーの音量を入力
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
STG4 フットプリントを設定
Path |
Method |
Function |
/v2/settings/amr_footprint | POST | KeiganALIのフットプリントの値を変更する |
Request Body
json
{
"footprint": <string>
"robot_radius": <float64>
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/settings/amr_footprint' #IPアドレスを入力
params = {
"footprint":XXX, #フットプリントの値を入力
"robot_radius":0.0
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/settings/amr_footprint', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
'footprint':XXX, //フットプリントの値を入力
'robot_radius':0.0
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
STG5 JOG運転時の直進速度の変更
Path |
Method |
Function |
/v2/settings/manual_control/translational_speed | POST | JOG運転時の直進速度を変更する |
Request Body
json
{
"data": <float32> #設定可能範囲は0.05~0.5 [m/s]
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/settings/manual_control/translational_speed' #IPアドレスを入力
params = {
"data":XXX, #直進速度(単位:m/s)を設定
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/settings/manual_control/translational_speed', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
'data':XXX, //直進速度(単位:m/s)を設定
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
STG6 JOG運転時の旋回速度の変更
Path |
Method |
Function |
/v2/settings/manual_control/rotational_speed | POST | JOG運転時の旋回速度を変更する |
Request Body
json
{
"data": <float32> #設定可能範囲は0.1~0.7 [rad/s]
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/settings/manual_control/rotational_speed' #IPアドレスを入力
params = {
"data":XXX, #旋回速度(単位:rad/s)を設定
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/settings/manual_control/rotational_speed', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
'data':XXX, //旋回速度(単位:rad/s)を設定
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
STG7 クリフセンサ(崖)センサの有効/無効設定
Path |
Method |
Function |
/v2/settings/cliff_detection | POST | クリフ(崖)センサ左右の有効/無効を設定する |
Request Body
json
{
"enable_left": <bool>, #true:有効, false:無効
"enable_right": <bool>, #true:有効, false:無効
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/settings/settings/cliff_detection' #IPアドレスを入力
params = {
"enable_left": <bool>, #true:有効, false:無効
"enable_right": <bool>, #true:有効, false:無効
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/settings/cliff_detection', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
‘enable_left’: <bool>, //true:有効, false:無効
‘enable_right’: <bool> //true:有効, false:無効
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
STG8ライントレースゲイン(PID) 値の設定
Path |
Method |
Function |
/v2/settings/cliff_detection | POST | ライントレースゲイン(PID)値を設定する |
Request Body
json
{
"Kp": <float64>, #ライントレースゲインKp値
"Ki": <float64>, #ライントレースゲインKi値
"Kd": <float64> #ライントレースゲインKd値
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/settings/line_tracer_pid_gains' #IPアドレスを入力
params = {
"Kp": <float64>, #ライントレースゲインKp値
"Ki": <float64>, #ライントレースゲインKi値
"Kd": <float64> #ライントレースゲインKd値
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/settings/line_tracer_pid_gains', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
‘Kp’: <float64>, //ライントレースゲインKp値
‘Ki’: <float64>, //ライントレースゲインKi値
‘Kd’: <float64> //ライントレースゲインKd値
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
S1 メインコントローラのシャットダウン
Path |
Method |
Function |
/v2/system/shutdown | POST | メインコントローラ のシャットダウンを⾏う |
Request Body
なし
Response Body
json
{
"success":<bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/system/shutdown' #IPアドレスを入力
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/system/shutdown', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
S2 メインコントローラの再起動
Path |
Method |
Function |
/v2/system/restart | POST | メインコントローラ の再起動を⾏う |
Request Body
なし
Response Body
json
{
"success":<bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/system/restart' #IPアドレスを入力
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/system/restart', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
S3 ロボットコントローラの再起動
Path |
Method |
Function |
/v2/system/controller/reboot | POST | ロボットコントローラ の再起動を⾏う |
Request Body
なし
Response Body
json
{
"success":<bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/system/controller/reboot' #IPアドレスを入力
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/system/controller/reboot', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
C1ライントレースのオフセット値(前後)の取得
Path |
Method |
Function |
/v2/calibration/line_tracer_offset | GET | ライントレースのオフセット値(前後)を取得する |
Request Body
なし
Response Body
json
{
"offset_correction": <float32>, #ライントレースのオフセット値(前後)
"success": <bool >
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085//v2/calibration/line_tracer_offset' #IPアドレスを入力
res = requests.get(url)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('GET', 'http://192.XXX.X.XX:9085//v2/calibration/line_tracer_offset', true); //IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
request.send();
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
C2ライントレースのオフセット値(前後)の取得
Path |
Method |
Function |
/v2/calibration/line_tracer_offset | POST | ライントレースのオフセット値(前後)を設定する |
Request Body
json
{
"offset_correction": <float32>, #ライントレースのオフセット値(前後)
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/settings//v2/calibration/line_tracer_offset' #IPアドレスを入力
params = {
"offset_correction": <float32> #ライントレースのオフセット値(前後)
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/settings/line_tracer_pid_gains', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
‘offset_correction’: <float32> //ライントレースのオフセット値(前後)
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
C3ライントレースのオフセット値(左右)の取得
Path |
Method |
Function |
/v2/calibration/line_tracer_side_offset | GET | ライントレースのオフセット値(左右)を取得する |
Request Body
なし
Response Body
json
{
"side_offset_correction": <int32>, #ライントレースのオフセット値(前後)
"success": <bool >
}
APIプラットフォーム(例:Postman)
C4ライントレースのオフセット値(左右)の取得
Path |
Method |
Function |
/v2/calibration/line_tracer_side_offset | POST | ライントレースのオフセット値(左右)を設定する |
Request Body
json
{
"side_offset_correction": <int32>, #ライントレースのオフセット値(左右)
"auto_calibrate": <bool> #自動キャリブレーション機能の有効/無効設定
}
Response Body
json
{
"success": <bool>
}
APIプラットフォーム(例:Postman)
参考コード例 Python
import requests #「requests」ライブラリのインストールが必要です
import json
url = 'http://192.XXX.X.XX:9085/v2/settings//v2/calibration/line_tracer_offset' #IPアドレスを入力
params = {
"side_offset_correction": <int32>, #ライントレースのオフセット値(左右)
"auto_calibrate": <bool> #自動キャリブレーション機能の有効/無効設定
}
res = requests.post(url, json=params)
data = json.loads(res.text)
print(data)
参考コード例 Javascript
<script>
let request = new XMLHttpRequest();
request.open('POST', 'http://192.XXX.X.XX:9085/v2/settings/line_tracer_pid_gains', true);//IPアドレスを入力
request.setRequestHeader('content-type', 'application/json;charset=UTF-8');
request.responseType = 'json';
let body = {
‘side_offset_correction’: <int32>, //ライントレースのオフセット値(左右)
‘auto_calibrate’: <bool> //自動キャリブレーション機能の有効/無効設定
};
request.send(JSON.stringify(body));
request.onload = function() {
window.alert( JSON.stringify( this.response ) );
};
</script>
cmdsについて
cmds の配列内には、cmd(タスク)を格納する。
cmd 内で タスクの種類は cmdType で定義する。
タスクは上から順番に実⾏される。
cmds の例
cmd Type 100の例を以下に示す。
{
"arg":{
"disableReplanning": false,
"disableStartAnnouncement": false,
"disableStopAnnouncement": false,
"enableObstacleAvoidance": true,
"enableRerouteRecovery": false,
"ignoreTheta": true,
"mode": 1,
"name": "",
"obstacleTimeout": 0,
"passingPoint": false,
"pathWidth": 2,
"theta": 0.2104844733192039,
"type": 0,
"x": -2.4687551467702415,
"y": 0.11556883023304287
},
"cmdType": 100
}
cmdType の定義は次項参照。
cmdType の定義
MoveToPosition の座標指定について、詳細は後半「座標指定について」を参照下さい。
Cmd Type |
name |
Data schema |
Example |
10 |
Wait For Time 一定時間待機 |
{ "cmds":[{ "arg":{ "time":<uint32> #Wait time ms }, "cmdType":10 }] } |
{ "cmds":[{ "arg":{ "time":3000 }, "cmdType":10 }] } |
20 | Pause taskset execution タスクセットの 一時停止 |
{ "cmds":[{ "arg":{}, "cmdType":20 }] } |
{ "cmds":[{ "arg":{}, "cmdType":20 }] } |
100 |
Move To Postion 座標移動 |
{ "cmds":[{ "cmdTpe":100, "arg":{ "disableReplanning":<bool>, # if true, AMR will not replan the route. "disableStartAnnouncement":<bool>, # if true, AMR will not announce at start. "disableStopAnnouncement":<bool>, # if true, AMR will not announce at end of task. "enableObstacleAvoidance": <bool>, # if true, AMR will stop at an obstacle. "enableRerouteRecovery": <bool> # if true, AMR will reroute. "ignoreTheta":<bool>, # if true, the direction(angle) isn’t considered. "mode": <uint32>, #modes: 0 normal, 1 no rerouting "name":<string>, #name of operation "obstacleTimeout": <float64>, "passingPoint":<bool>, #if true, AMR will pass the point without stopping "pathWidth": <float64>, #Avoid obstacles in a range of [m] in diameter. "theta": <float32>, # Machine angle (radian) "type": 0, "x":<float32>, # Relative pos on MAP.ros_native_x "y": <float32>, # Relative pos on MAP.ros_native_y } }] } |
{ "cmds":[{ "cmdType":100, "arg":{ "disableReplanning": false, "disableStartAnnouncement": false, "disableStopAnnouncement": false, "enableObstacleAvoidance": true, - "enableRerouteRecovery": false, "ignoreTheta": true, "mode": 1, "name": "", "obstacleTimeout": 0, "passingPoint": false, "pathWidth": 2, "theta": 0.2104844733192039, "type": 0, "x": -2.4687551467702415, "y": 0.11556883023304287 } }] } |
110 |
Follow path 経路移動 |
{ "cmds":[{ "cmdType":110, "arg":{ "disableStartAnnouncement":<bool>, "disableStopAnnouncement":<bool>, "enableObstacleAvoidance":<bool>, "ignoreTheta":<bool>, # if true, the direction(angle) isn’t considered. "path":[{"x":<float64>, "y":<float64>}, ・・・ {"x":<float64>, "y":<float64>}] "width":<float64>, #Avoid obstacles in a range of [m] in diameter. "theta":<float64>, "passingPoint":<bool>, #if true, AMR will pass the point without stopping } }] } |
{ "cmds":[{ "cmdType":110, "arg":{ "disableStartAnnouncement": true, "disableStopAnnouncement": true, "enableObstacleAvoidance": true, "ignoreTheta": true "path":[{"x":3.947, "y":0.134}, {"x":5.126, "y":0.320}], "width":1.0, "theta":1.343, "passingPoint":false, } }] } |
200 |
LineTracer ライントレーサ |
{ "cmds":[{ "arg":{ "distance":<float64>, #only available mode:2, unit:[m] "disableStartAnnouncement":<bool>, "marker_size":<float64>, #Reserve "mode":<int>, #0:STOP_INTERSECTION,2:STOP_DISTANCE "marker_distance":<float64>, #Reserve "speed":<float64>, #line trace speed. "marker_id":<int> }, "cmdType":200 }] } |
{ "cmds":[{ "arg":{ "distance":1.0, "disableStartAnnouncement":true, "marker_size":0.05, "mode":2, "marker_distance":0.3, "speed":0.25, "marker_id":1, }, "cmdType":200 }] } |
300 |
Wait For GPIO Input GPIO入力待機 |
{ "cmds":[{ "arg":{ "pin":<int>, #pin number {101: IN1, 102: IN2} "action":<int>, #{1: LOW->HIGH, 2: HIGH->LOW, # 3: TOGGLE, 4: HIGH, 5: LOW} # action of signal timeout "timeout":<float32> # timeout (sec) to go to error "110" }, "cmdType":300 }] } # timeout :0 waits indefinitely # action HIGH / LOW moves to next task # if it is already in the state. |
{ "cmds":[{ "arg":{ "pin":101, "action":2, "timeout":2000 }, "cmdType":300 }] } |
310 |
Write GPIO Output GPIO出力書込 |
{ "cmds":[{ "arg":{ "pin":<int>, #pin number {201: OUT1, 202: OUT2} "action":<int> #{1: HIGH, 2: LOW, 3: TOGGLE} # action of signal }, "cmdType":310 }] } |
{ "cmds":[{ "arg":{ "pin":201, "action":2 }, "cmdType":310 }] } |
320 | Send message by MQTT MQTTメッセージの送信 |
{ #MQTT message |
{ |
400 |
Turn In Place 回転 |
{ "cmds":[{ "arg":{ "angle":<float32>, #degrees "velocity":<float32>, #degrees/sec "direction":<int> #{0:clockwise, 1:counterclockwise} }, "cmdType":400 }] } |
{ "cmds":[{ "arg":{ "angle":90, "velocity":30, "direction":0 }, "cmdType":400 }] } |
410 |
Move Straight 直進 |
{ "cmds":[{ "arg":{ "direction":<int>, #{0: FORWARD, 1: BACKWARD} #direction to move "distance":<float32>, #meters to "velocity":<float32> #meters /sec }, "cmdType":410 }] } |
{ "cmds":[{ "arg":{ "direction":0, "distance":1, "velocity":0.3 }, "cmdType":410 }] } |
500 |
Play Sound サウンド再生 |
{ "cmds":[{ "arg":{ "track": <int32>, #track number choose from menu. #-1 for stop ping sound "loop": <bool> # if true, play sound continuously on repeat # (e.g. sound while moving) }, "cmdType":500 }] } |
{ "cmds":[{ "arg":{ "track":1, "loop":false }, "cmdType":500 }] } |
600 |
EnablePower Output 電源出⼒ |
{ "cmds":[{ "arg":{ "enable_5V":<bool> , # enable/disable 5 V output via relay "enable_24V":<bool> # enable/disable 24 V output via relay }, "cmdType":600 }] } |
{ "cmds":[{ "arg":{ "enable_5V":true, "enable_24V":true }, "cmdType":600 }] } |
610 |
Set Footprint フットプリント 変更 |
{ "cmds":[{ "arg":{ "footprint":<string>, # list of 2d points to make footprint "robot_radius":0.0 # robot_radius is always 0. #Only used if footprint is empty. }, "cmdType":610 }] } |
{ "cmds":[{ "arg":{ "footprint":"[[0.3,0.3],[0.3,-0.3].[-0.3,-0.3],[-0.3,0.3]]", "robot_radius":0.0 }, "cmdType":610 }] } |
620 |
Set OBS Sensor State 障害物センサ 切替 |
{ "cmds":[{ "arg":{ "enable_cliff_center":<bool>, "enable_cliff_left":<bool>, "enable_cliff_right":<bool>, "enable_front_center":<bool>, "enable_front_left":<bool>, "enable_front_right":<bool>, "enable_left":<bool>, "enable_right":<bool> #if true, obstacle sensors detection should be enabled. }, "cmdType":620 }] } |
{ "cmds":[{ "arg":{ "enable_cliff_center": true, "enable_cliff_left":<bool>, "enable_cliff_right":<bool>, "enable_front_center":<bool>, "enable_front_left":<bool>, "enable_front_right":<bool>, "enable_left":<bool>, "enable_right":<bool> }, "cmdType":620 }] } |
630 |
Set Max Speed 最⼤速度変更 |
{ "cmds":[{ "arg":{ "max_speed":<float32> # maximum forward velocity, #must be equal or less than 0.5 [m/s] }, "cmdType":630 }] } |
{ "cmds":[{ "arg":{ "max_speed":0.3 }, "cmdType":630 }] } |
※cmds type 610:フットプリント変更 はタスクセットを実行している間のみ変更が反映されます。
タスクセットの実行が完了してIdle状態となったとき、フットプリントは元の設定値に戻ります。
マップ座標指定
マップ原点 (Origin)
先ず、マップ原点(origin)の定義が必要となる。KeiganALI でマップを作成した場合には、マップ原点は⾃動的に設定される。マップ原点は、M4 /map API で取得できる response 内の、yaml 情報に格納される。origin の, x, y は、下図におけるそれぞれ X0, Y0 となる。 (基本的にマイナスまたは0の値)
AMRの位置指定
このとき、AMRの位置はマップ原点に対する位置 (x, y) = (X, Y) として指定できる。
AMRの向きは、θ(theta)で指定され、x軸からの⾓度で定義できる。
θの範囲は、-π 〜 +π (-180°〜 +180°)となる。
MoveToPosition 等の命令では、AMRの⽬標位置 x, y 及び向き θ を指定する必要がある。
MQTT API /status で取得できる location も同様となる。