Skip to content

REST API マニュアル(Ver1.06)

REST API マニュアル 情報

  • ALIファームウェア バージョン: ver. 1.06
  • 著者: Keigan

REST API 共通

基本

REST API を使⽤して、AMRの動作を制御します。

コンテンツ形式

リクエスト及びレスポンスの Body について、基本的に JSON 形式で情報のやり取りを⾏います。

ヘッダー

JSONを送信するため、以下を追加します。

HTTP
Content-Type: application/json

URL(アドレス)

REST API にアクセスするためのアドレスは以下です。

http://[IP Address]:9085/[Path]

[IP Address]

LAN経由の場合は、ルーター側でIPアドレスを割り当て、または固定設定を行うことにより、決定される。

  • 直接 AMR のアクセスポイントに接続する場合・・・10.0.60.1
  • ローカルエリアネットワーク LAN 経由で接続する場合・・・192.XXX.X.XX

[Path]

次項 REST API リスト で定義する Path を⽤いる。

HTTPメソッド

HTTPメソッド内容
GETリソースを取得します。
POSTリソースを新しく追加します。
PUT指定されたリソースを修正します。
DELETE指定されたリソースを削除します。
※注意: ブラウザ「JavaScript」では、引数を「Body」に設定して「GET」リクエストを送信することはできません。

GET ・・・・・・引数をクエリパラメータに設定(URLPath 末尾に「?」を付随)
POSTPUTDELETE・・・・引数を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-1Idでタスクセットの取得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
STG1KeiganALIの基本設定情報を取得GET/v2/settings
STG2KeiganALIの最高速度を変更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 タスクセットの再⽣

PathMethodFunction
/v2/taskset/execPOST指定idの taskSet を再生する

Request Body

json
{
  "cmdSetId": <int32>,     //taskset ID
}

Response Body

json
{
  "success": <bool>
}

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

image

参考コード例 Python

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

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

html
<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 タスクセットのダイレクト再⽣

PathMethodFunction
/v2/taskset/direct_execPOSTtaskSet を直接再生する

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)

image

参考コード例 Python

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

html
<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 タスクセットの再⽣停⽌

PathMethodFunction
/v2/taskset/abortPOSTtaskSet の再⽣を停⽌する

Request Body: なし

Response Body

json
{
  "success": <bool>
}

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

image

参考コード例 Python

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

html
<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 タスクセットの再開

PathMethodFunction
/v2/taskset/resumePOSTtaskSet の再⽣を再開する
※タスクセットの再⽣停⽌状態から、復帰できる場合は再開する。

Request Body: なし

Response Body

json
{
  "success": <bool>
}

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

image

参考コード例 Python

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

html
<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 タスクセットのリスト取得

PathMethodFunction
/v2/taskset/tasksetsGETtaskSet のリストを取得する

Request Body

json
{
  "mapId" : <int32>
}

Request Body

json
{
  "lists": [
    {
      "appData": {},                                // 拡張予約
      "cmdSetType": "<uint32>",                     // コマンドセットタイプ
      "cmds": [                                     // コマンドリスト (JSON配列)
        {
          "arg": {
            "ignoreTheta": "<bool>",                // 方向角度の無視
            "name": "<string>",                     // 名前
            "passingPoint": "<bool>",               // 通過ポイント
            "theta": "<float32>",                   // 角度 (ラジアン)
            "type": "<int32>",                      // タイプ (拡張予約)
            "x": "<float32>",                       // X座標
            "y": "<float32>"                        // Y座標
          },
          "cmdType": "<int32>"                      // コマンドタイプ
        }
      ],
      "id": "<uint32>",                             // コマンドセットID
      "mapid": "<uint32>",                           // マップID
      "name": "<string>",                            // マップ名
      "success": "<bool>"                            // 成功フラグ
    }
  ]
}
※ cmds については、本ドキュメント後半 の「cmds について」を参照下さい。

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

image

参考コード例 Python

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

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

js
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でタスクセットの取得

PathMethodFunction
/v2/tasksetGET指定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)

image

参考コード例 Python

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

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

js
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 タスクセットの追加

PathMethodFunction
/v2/tasksetPOSTtaskSet を追加する

Request Body

json
{
 "mapId": <int32>,
 "cmdSetName": <string>,
 "cmdSetType":30,           //固定値
 "cmds": <string>,
 "appData": <string>        //拡張予約
}
※ cmds については、本ドキュメント後半 の「cmds について」を参照下さい。

Response Body

json
{
 "success": <bool>,
 "cmdSetId": <int32>
}

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

image

参考コード例 Python

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

html
<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 タスクセットの削除

PathMethodFunction
/v2/taskset/deleteDELETEtaskSet を削除する

Request Body

json
{
  "cmdSetId" <int32>
}

Response Body

json
{
  "success":<bool>
}

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

image

参考コード例 Python

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

html
<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 エラー状態から復帰

PathMethodFunction
/v2/error/resetPOSTエラー状態から復帰する

Request Body: なし

Response Body

json
{
  "success": <bool>
}

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

image

参考コード例 Python

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

html
<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 指定位置へ移動

PathMethodFunction
/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)

image

参考コード例 Python

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

html
<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 タスクセットの名前変更

PathMethodFunction
/v2/taskset/namePUT指定idのタスクセットの名前変更

Request Body

json
{
  "cmdSetId": <int32>,
  "name": <string>
}

Response Body

json
{
  "success": <bool>
}

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

image

参考コード例 Python

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

html
<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 タスクセットを他のマップへ移動

PathMethodFunction
/v2/taskset/mapIdPUT指定idのタスクセットを他のマップへ移動

Request Body

json
{
  "cmdSetId": <int32>,
  "mapId": <int32>
}

Response Body

json
{
  "success": <bool>
}

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

image

参考コード例 Python

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

html
<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を変更

PathMethodFunction
/v2/taskset/tasks PUT指定idのタスクセットのcmdsを変更

Request Body

json
{
  "cmdSetId": <int32>,
  "cmds": <string>
}

Response Body

json
{
  "success": <bool>
}

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

image

参考コード例 Python

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

html
<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 マップのリスト取得

PathMethodFunction
/v2/map/mapsGETマップのリストを取得する

Request Body: なし

Response Body

json
{
  "success": <bool>,
  "lists": [], //JSON
}

Lists

json
[
    {
      "info": <string>,  // map info (Reserved, not used)
      "id": <uint32>,    // map id
      "name": <string>   // map name
    }
]

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

image

参考コード例 Python

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

html
<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 マップの選択

PathMethodFunction
/v2/map/selectPOSTidを指定してマップを選択する
「M10: マップデータの走行可能領域を変更」/v2/map/map_edits

または

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

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

Request Body

json
{
  "mapId":XXX,               //mapIdを入力
}

Response Body

json
{
  "success":<bool>
}

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

image

参考コード例 Python

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

html
<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 現在位置の設定

PathMethodFunction
/v2/map/initial_positionPOST選択中のマップに対して⾃機の現在位置を設定する

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)

image

参考コード例 Python

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

html
<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 マップの取得

PathMethodFunction
/v2/mapGET指定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)

image

参考コード例 Python

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

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

js
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 でマップを作成した場合⾃動で⽣成され、マップに紐付けられる。以下のようなデータとなる。

yaml
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 マップの削除

PathMethodFunction
/v2/mapDELETE指定idのマップを削除

Request Body

json
{
  "mapId": <int32>
}

Response Body

json
{
  "success": <bool>
}

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

image

参考コード例 Python

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

html
<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 マップの追加

PathMethodFunction
/v2/mapPOSTマップを追加する

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)

image

参考コード例 Python

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]\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

html
<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 マップスキャンの開始、中止

PathMethodFunction
/v2/map/mapping/startPOSTマップのスキャンの開始・中止

Request Body

json
{
  "type": <uint32>  // 1:start, 2:stop
}

Response Body

json
{
  "success": <bool>
}

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

image

参考コード例 Python

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

html
<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 スキャンしたマップの保存

PathMethodFunction
/v2/map/mapping/save_mapPOSTスキャンしたマップの保存

Request Body

json
{
  "mapName": <string>  //マップ名
}

Response Body

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

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

image

参考コード例 Python

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

html
<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 マップデータを変更

PathMethodFunction
/v2/map/mapPUT指定idのマップを変更する

Request Body

json
{
  "mapId": <int32>,   //map id
  "map": <uint8[]>   //map png
}

Response Body

json
{
  "success": <bool>
}

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

image

参考コード例 Python

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

html
<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 マップデータの名前を変更

PathMethodFunction
/v2/map/namePUT指定idのマップの名前を変更する

Request Body

json
{
  "mapId": <int32>,   //map id
  "name": <string>   //map name
}

Response Body

json
{
 "success": <bool>
}

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

image

参考コード例 Python

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

html
<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 マップデータの走行可能領域を変更

PathMethodFunction
/v2/map/map_editsPUT指定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)

image

参考コード例 Python

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

html
<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 マップデータの走行不可領域を変更

PathMethodFunction
/v2/map/virtual_obstaclesPUT指定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)

image

参考コード例 Python

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

html
<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の基本設定情報を取得

PathMethodFunction
/v2/settingsGETKeiganALIの基本情報を取得する

Request Body: なし

Response Body

json
{
  "message": {
    "maxRunningSpeed": "<float64>",      
    "speakerVolume": "<int32>",        
    "mqttAddress": "<string>",           
    "logRecording": "<int32>",           // Log recording (-1 or 1)
    "footprint": "<string>",            
    "robot_radius": "<float64>"         
  },
  "success": "<bool>"                    
}

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

image

参考コード例 Python

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

html
<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の最高速度を変更

PathMethodFunction
/v2/settings/max_speedPOSTKeiganALIの最高速度を変更する

Request Body

json
{
  "data": <float32>   //max_speed: 0.5m/s
}

Response Body

json
{
  "success": <bool>
}

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

image

参考コード例 Python

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

html
<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 スピーカーの音量を変更

PathMethodFunction
/v2/settings/speaker_volumePOSTKeiganALIのスピーカーの音量を変更する

Request Body

json
{
  "data": <int32>   //0 to 100
}

Response Body

json
{
  "success": <bool>
}

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

image

参考コード例 Python

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

html
<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 フットプリントを設定

PathMethodFunction
/v2/settings/amr_footprintPOSTKeiganALIのフットプリントの値を変更する

Request Body

json
{
  "footprint": <string>
  "robot_radius": <float64>
}

Response Body

json
{
  "success": <bool>
}

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

image

参考コード例 Python

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

html
<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 メインコントローラのシャットダウン

PathMethodFunction
/v2/system/shutdownPOSTメインコントローラ のシャットダウンを⾏う

Request Body: なし

Response Body

json
{
  "success":<bool>
}

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

image

参考コード例 Python

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

html
<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 メインコントローラの再起動

PathMethodFunction
/v2/system/restartPOSTメインコントローラ の再起動を⾏う

Request Body: なし

Response Body

json
{
  "success":<bool>
}

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

image

参考コード例 Python

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

html
<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 ロボットコントローラの再起動

PathMethodFunction
/v2/system/controller/rebootPOSTロボットコントローラ の再起動を⾏う

Request Body: なし

Response Body

json
{
  "success":<bool>
}

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

image

参考コード例 Python

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

html
<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 の例を以下に示す。

json
{
  "arg":{
         "ignoreTheta": false,
         "passingPoint": false,
         "theta": -0.01285116881368381,
         "y": 0.42400127009455757,
         "x": -0.4271011599274086,
         "name": ""
         },
  "cmdType": 100
 }

cmdType の定義は次項参照。

cmdType の定義

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

Cmd TypeName
10
Wait For Time
一定時間待機
100Move To Postion
座標移動
200LineTracer
ライントレーサ
300Wait For GPIO Input
GPIO入力待機
310Write GPIO Output
GPIO出力書込
400Turn In Place
回転
410Move Straight
直進
500Play Sound
サウンド再生
600Enable Power Output
電源出⼒
610Set Footprint
フットプリント変更
620Set OBS Sensor State
障害物センサ切替
630Set Max Speed
最⼤速度変更
※cmds type 610:フットプリント変更 はタスクセットを実行している間のみ変更が反映されます。

タスクセットの実行が完了して 「Idle」 状態となったとき、フットプリントは元の設定値に戻ります。

cmd 10: 一定時間待機


Data Scheme:
コードを表示するためにクリックしてください
json
{
  "cmds":[{
      "arg":{
        "time":<unit> //Wait times in ms
    },
      "cmdType":10
  }]
}
Example:
コードを表示するためにクリックしてください
json
{
 "cmds":[{
   "arg":{
     "time":3000
   },
   "cmdType":10
 }]
}


cmd 100: 座標移動


Data Scheme:
コードを表示するためにクリックしてください
json
{
  "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
      }
    }
  ]
}
Example:
コードを表示するためにクリックしてください
json
{
 "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
     }
   }
 ]
}


cmd 200: ライントレーサ


Data Scheme:
コードを表示するためにクリックしてください
json
{
  "cmds": [
    {
      "cmdType": 200,
      "arg": {
        "distance": "<float64>",  // only available in 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>"
      }
    }
  ]
}
Example:
コードを表示するためにクリックしてください
json
 {
 "cmds": [
   {
     "cmdType": 200,
     "arg": {
       "distance": 1.0,
       "disableStartAnnouncement": true,
       "marker_size": 0.05,
       "mode": 2,
       "marker_distance": 0.3,
       "speed": 0.25,
       "marker_id": 1
     }
   }
 ]
}


cmd 300: GPIO入力待機


Data Scheme:
コードを表示するためにクリックしてください
json
  {
  "cmds": [
    {
      "cmdType": 300,
      "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": "<float32>"  
        // Timeout in seconds to go to error "110". A value of 0 waits indefinitely.
      }
    }
  ]
}
Example:
コードを表示するためにクリックしてください
json
 {
 "cmds": [
   {
     "cmdType": 300,
     "arg": {
       "pin": 101,
       "action": 2,
       "timeout": 2000
     }
   }
 ]
}


cmd 310: GPIO出力書込


Data Scheme:
コードを表示するためにクリックしてください
json
{
  "cmds": [
    {
      "cmdType": 310,
      "arg": {
        "pin": "<int>", // Pin number {201: OUT1, 202: OUT2}
        "action": "<int>" // {1: HIGH, 2: LOW, 3: TOGGLE} - action of signal
      }
    }
  ]
}
Example:
コードを表示するためにクリックしてください
json
{
 "cmds": [
   {
     "cmdType": 310,
     "arg": {
       "pin": 201,
       "action": 2
     }
   }
 ]
}


cmd 400: 回転


Data Scheme:
コードを表示するためにクリックしてください
json
{
  "cmds": [
    {
      "cmdType": 400,
      "arg": {
        "angle": "<float32>", // degrees
        "velocity": "<float32>",// degrees/sec
        "direction": "<int>" // {0: clockwise, 1: counterclockwise}
      }
    }
  ]
}
Example:
コードを表示するためにクリックしてください
json
{
 "cmds": [
   {
     "cmdType": 400,
     "arg": {
       "angle": 90,
       "velocity": 30,
       "direction": 0
     }
   }
 ]
}


cmd 410: 直進


Data Scheme:
コードを表示するためにクリックしてください
json
{
  "cmds": [
    {
      "cmdType": 410,
      "arg": {
        "direction": "<int>",  // {0: FORWARD, 1: BACKWARD} - direction to move
        "distance": "<float32>",  // meters to move
        "velocity": "<float32>"  // meters per second
      }
    }
  ]
}
Example:
コードを表示するためにクリックしてください
json
{
 "cmds": [
   {
     "cmdType": 410,
     "arg": {
       "direction": 0,
       "distance": 1,
       "velocity": 0.3
     }
   }
 ]
}


cmd 500: サウンド再生


Data Scheme:
コードを表示するためにクリックしてください
json
{
  "cmds": [
    {
      "cmdType": 500,
      "arg": {
        "track": "<int32>",  
        // track number choose from menu, -1 for stopping ping sound
        "loop": "<bool>"  // if true, play sound continuously on repeat
      }
    }
  ]
}
Example:
コードを表示するためにクリックしてください
json
{
 "cmds": [
   {
     "cmdType": 500,
     "arg": {
       "track": 1,
       "loop": false
     }
   }
 ]
}


cmd 600: 電源出⼒


Data Scheme:
コードを表示するためにクリックしてください
json
  {
  "cmds": [
    {
      "cmdType": 600,
      "arg": {
        "enable_5V": "<bool>",  // enable/disable 5 V output via relay
        "enable_24V": "<bool>"  // enable/disable 24 V output via relay
      }
    }
  ]
}
Example:
コードを表示するためにクリックしてください
json
{
 "cmds": [
   {
     "cmdType": 600,
     "arg": {
       "enable_5V": true,
       "enable_24V": true
     }
   }
 ]
}


cmd 610: フットプリント変更


Data Scheme:
コードを表示するためにクリックしてください
json
{
  "cmds": [
    {
      "cmdType": 610,
      "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.
      }
    }
  ]
}
Example:
コードを表示するためにクリックしてください
json
{
 "cmds": [
   {
     "cmdType": 610,
     "arg": {
       "footprint": "[[0.3,0.3],[0.3,-0.3],
                     [-0.3,-0.3],[-0.3,0.3]]",
       "robot_radius": 0.0
     }
   }
 ]
}


cmd 620: 障害物センサ切替


Data Scheme:
コードを表示するためにクリックしてください
json
  {
  "cmds": [
    {
      "cmdType": 620,
      "arg": {
        "enable_cliff_center": true,
        "enable_cliff_left": true,
        "enable_cliff_right": true,
        "enable_front_center": true,
        "enable_front_left": true,
        "enable_front_right": true,
        "enable_left": true,
        "enable_right": true
        //if true, obstacle sensors detection should be enabled.
      }
    }
  ]
}
Example:
コードを表示するためにクリックしてください
json
{
 "cmds": [
   {
     "cmdType": 620,
     "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>
     }
   }
 ]
}


cmd 630: 最⼤速度変更


Data Scheme:
コードを表示するためにクリックしてください
json
{
  "cmds": [
    {
      "cmdType": 630,
      "arg": {
        "max_speed": "<float32>" //maximum forward velocity,
                                 //must be equal or less than 0.5 [m/s]
      }
    }
  ]
}
Example:
コードを表示するためにクリックしてください
json
{
 "cmds": [
   {
     "arg": {
       "max_speed": 0.3
     },
     "cmdType": 630
   }
 ]
}


マップ座標指定

マップ原点 (Origin)

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

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

image

AMRの位置指定

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

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

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

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

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

関連記事

© 株式会社Keigan