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

 ver. 1.06

著者

 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に設定

 

セキュリティ

 Basic 認証の実装を予定しておりますが、次回以降のアップデートとなります。

 

基本的なフロー

 基本的な運⽤⽅法は以下とする。

  1. M1 マップの選択
  2. M2 現在位置の設定
  3. T1 タスクセットの再⽣ または T2 タスクセットのダイレクト再⽣
  4. T3 タスクセットの再⽣停⽌
  5. 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

タスクセットの取得

GET

/v2/taskset

T6-2

タスクセットの追加

POST

/v2/taskset

T6-3

タスクセットの削除

DELETE

/v2/taskset/delete

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

M1

マップのリスト取得

GET

/v2/map/maps

M2

マップの選択

POST

/v2/map/select

M3

現在位置の設定

POST

/v2/map/initial_position

M4

マップの取得

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

STG1

KeiganALIの基本設定情報を取得 GET /v2/settings

STG2

KeiganALIの最高速度を変更 POST /v2/settings/max_speed

STG3

スピーカーの音量を変更 POST /v2/settings/speaker_volume

STG4

フットプリントを設定 POST /v2/settings/amr_footprint

S1

システムのシャットダウン

POST

/v2/system/shutdown

S2

システムの再起動

POST

/v2/system/restart

S3

ロボットコントローラの再起動

POST

/v2/system/controller/reboot

T1 タスクセットの再⽣

Path

Method

Function

/v2/taskset/exec

POST

指定idの taskSet を再生する

 

Request Body

json
{
"cmdSetId": <int32> #taskset ID
}

Response Body

json
{
"success": <bool>
}

 

APIプラットフォーム(例:Postman)

mceclip0.png

 

参考コード例 Python

import requests                                        #「requests」ライブラリのインストールが必要です
import json

url = 'http://192.XXX.X.XX:9085/v2/taskset/exec'      #IPアドレスを入力
params = {"cmdSetId":XXX}                              #cmdSetIdを入力
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}; #cmdSetIdを入力

  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":[{
   "arg":{
            "ignoreTheta":false,
            "passingPoint":false,
            "theta":1,
            "y":1,
            "x":1,
           "name":"test"
           },
"cmdType":100
}]
}

※ cmds については、本ドキュメント後半 の「cmds について」を参照下さい。

 

Response Body

json
{
"success": <bool>
}

 

APIプラットフォーム(例:Postman)

mceclip1.png

 

参考コード例 Python

import requests                                            #「requests」ライブラリのインストールが必要です
import json

url = 'http://192.XXX.X.XX:9085/v2/taskset/direct_exec'    #IPアドレスを入力
params = {
     "cmds":[{
       "arg": {
                …                                       #cmdTypeに合ったcmdsの内容を記述
                   },
       "cmdType":XXX                                      #cmdTypeを入力
              }]
}
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':[{'arg':{…}, 'cmdType':XXX}]}; #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)

mceclip1.png

 

参考コード例 Python

import requests                                        #「requests」ライブラリのインストールが必要です
import json

url = 'http://192.xxx.x.xx:9085/v2/taskset/abort'     #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/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 の再⽣を再開する

NOTE) タスクセットの再⽣停⽌状態から、復帰できる場合は再開する

 

Request Body

なし

 

Response Body

json
{
"success": <bool>
}

 

 

APIプラットフォーム(例:Postman)

mceclip2.png

 

参考コード例 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":{           
"ignoreTheta":<bool>,
"name":<string>,
                    "passingPoint":<bool>,
                   "theta":<float32>,
                   "type": <int32>,                  #拡張予約
                   "x": <float32>,
                   "y": <float32>
},
                   "cmdType": <int32>                       # cmdType
}]
"id": <uint32>                        # cmdSet id
"mapid": <uint32>                                 # map id
"name": <string >                                 #map name
"success": <bool >
}],
}

※ cmds については、本ドキュメント後半 の「cmds について」を参照下さい。

 

APIプラットフォーム(例:Postman)

mceclip4.png

 

参考コード例 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 タスクセットの取得

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>               # cmdSetId
"mapId": <uint32 >               # mapId
"success": <bool >
}

※ cmds については、本ドキュメント後半 の「cmds について」を参照下さい。

 

APIプラットフォーム(例:Postman)

mceclip5.png

 

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

mceclip6.png

 

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

mceclip7.png

 

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

 

T7 エラー状態から復帰

Path

Method

Function

/v2/error/reset

POST

エラー状態から復帰する

 

Request Body

なし

 

Response Body

json
{
"success":<bool>
}

 

APIプラットフォーム(例:Postman)

mceclip8.png

 

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

mceclip9.png

 

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

mceclip0.png

 

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

mceclip1.png

 

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

mceclip2.png

 

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

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)

mceclip10.png

 

参考コード例 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 マップの選択

Path

Method

Function

/v2/map/select

POST

idを指定してマップを選択する

※「M10: マップデータの走行可能領域を変更」/v2/map/map_edits または

 「M11: マップデータの走行不可領域を変更」/v2/map/virtual_obstacles を送信後は

  マップへ正しく反映させるために、必ず本APIを送信してください。

 

Request Body

json
{
"mapId":<int32>
}

 

Response Body

json
{
"success":<bool>
}

 

APIプラットフォーム(例:Postman)

mceclip11.png

 

参考コード例 Python

import requests                                        #「requests」ライブラリのインストールが必要です
import json

url = 'http://192.XXX.X.XX:9085/v2/map/select'         #IPアドレスを入力
params = {"mapId":XXX}                                 #mapIdを入力
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を入力
   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)

mceclip12.png

 

参考コード例 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 マップの取得

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
"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
"yaml": <string>                                   #map yaml including origin and resolution
}

 

APIプラットフォーム(例:Postman)

mceclip13.png

 

参考コード例 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初期位置情報

 

yaml について

KeiganALI でマップを作成した場合⾃動で⽣成され、マップに紐付けられる。以下のようなデータとなる。

image: map.png                                    #マップの画像データ名
resolution: 0.050000               #地図の解像度(5cm=0.05), 固定値
origin: [-8.000000, -11.200000, 0.000000]     #マップの原点座標
negate: 0 #固定値 (内部仕様)
occupied_thresh: 0.65               #固定値 (内部仕様)
free_thresh: 0.196                #固定値 (内部仕様)

resolution は 0.05 (単位 m) 固定。

origin は、マップ原点に対する、マップ左下のコーナー点の座標(マップ原点の定義)となる。

詳細は後半「座標指定について」を参照下さい。

 

M5-1 マップの削除

Path

Method

Function

/v2/map

DELETE

指定idのマップを削除

 

Request Body

json
{
"mapId": <int32>
}

Response Body

json
{
"success": <bool>
}

 

APIプラットフォーム(例:Postman)

mceclip3.png

 

参考コード例 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": <uint8[]> #map png
"map_edits": <uint8[]> #edits png
"virtual_obstacles": <uint8[]> #obst png
"map_yaml": <string> #map yaml including origin and resolution
"init_yaml": <string> #initial_pose yaml
}

Response Body

json
{
"mapId": <int32>
"success": <bool>
}

 

APIプラットフォーム(例:Postman)

mceclip4.png

 

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

mceclip5.png

 

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

mceclip6.png

 

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

mceclip7.png

 

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

mceclip0.png

 

参考コード例 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": <uint8[]> #map_edits png
}

Response Body

json
{
"success": <bool>
}

 

APIプラットフォーム(例:Postman)

mceclip1.png

 

参考コード例 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": <uint8[]> #virtual_obstacles png
}

Response Body

json
{
"success": <bool>
}

 

APIプラットフォーム(例:Postman)

mceclip2.png

 

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

 

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>
}
"success: <bool>
}

 

APIプラットフォーム(例:Postman)

mceclip3.png

 

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

mceclip4.png

 

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

mceclip5.png

 

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

mceclip6.png

 

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

S1 メインコントローラのシャットダウン

Path

Method

Function

/v2/system/shutdown

POST

メインコントローラ のシャットダウンを⾏う

 

Request Body

なし

 

Response Body

json
{
"success":<bool>
}

 

APIプラットフォーム(例:Postman)

mceclip14.png

 

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

mceclip15.png

 

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

mceclip16.png

 

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

cmdsについて

cmds の配列内には、cmd(タスク)を格納する。

cmd 内で タスクの種類は cmdType で定義する。

タスクは上から順番に実⾏される。

 

cmds の例

cmd Type 100の例を以下に示す。

{
"arg":{
        "ignoreTheta": false,
        "passingPoint": false,
        "theta": -0.01285116881368381,
       "y": 0.42400127009455757,
        "x": -0.4271011599274086,
        "name": ""
       },
"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

  }]

}

100

Move To Postion

座標移動

{

  "cmds":[{

  "arg":{

        "x":<float32>,

              # Relative pos on MAP.ros_native_x

        "y": <float32>,

              # Relative pos on MAP.ros_native_y

        "theta": <float32>,

              # Machine angle (radian)

       "ignoreTheta":<bool>, 

# if true, the direction(angle) isn’t considered.

      "passingPoint":<bool>,

#if true, AMR will pass the point without stopping

      "name":<string>

#name of operation

#(for UI indication ignored by AMR.)

       },

   "cmdType":100

}]

}

{

"cmds":[{

"arg":{

"x":10.0,

"y":10.0,

"theta":2.20,

"ignoreTheta":"true",

 "passingPoint":"true",

"name":"is a Entrance"

},

"cmdType":100

}]

}

200

LineTracer

ライントレーサ

{

  "cmds":[{

     "arg":{

                "mode":<int>,

#{0:STOP_INTERSECTION,1: STOP_ARUCO}

# mode assignment

                "marker_id":<uint32>

 # aruco marker for stopping etc.

               },

     "cmdType":200

  }]

}

{

"cmds":[{

"arg":{

"mode":0,

"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

}]

}

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":<float32>

# radius of robot footprint.

#Only used if footprint is empty.

                 },

      "cmdType":610

   }]

}

{

"cmds":[{

"arg":{

"footprint":"[[0.1,0.1],[0.3,0.3]]"

"robot_radius":0.0

},

"cmdType":610

}]

}

620

Set OBS

Sensor State

障害物センサ

切替

{

  "cmds":[{

       "arg":{

           "enable": <bool>

#if true, obstacle sensors detection should be enabled.

                },

       "cmdType":620

   }]

}

{

"cmds":[{

"arg":{

"enable":true

},

"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

}]

}

 

マップ座標指定

マップ原点(origin) 

先ず、マップ原点(origin)の定義が必要となる。KeiganALI でマップを作成した場合には、マップ原点は⾃動的に設定される。マップ原点は、M4 /map API で取得できる response 内の、yaml 情報に格納される。

origin の, x, y は、下図におけるそれぞれ X0, Y0 となる。 (基本的にマイナスまたは0の値)

mceclip17.png

AMRの位置指定

このとき、AMRの位置はマップ原点に対する位置 (x, y) = (X, Y) として指定できる。

AMRの向きは、θ(theta)で指定され、x軸からの⾓度で定義できる。

θの範囲は、-π 〜 +π (-180°〜 +180°)となる。

MoveToPosition 等の命令では、AMRの⽬標位置 x, y 及び向き θ を指定する必要がある。

MQTT API /status で取得できる location も同様となる。