REST interface#
The ARI robot has a REST interface available for integrators to use. This REST interface simplifies tasks of monitoring and management of the robot, allowing simple and robust integration.
General considerations#
The REST interface is offered on port 80 on the robot. This document assumes you either connects to the robot’s WiFi (robot set as access point), or, if the robot is connected to your network, it has been added to the DNS with the appropriate name (ari**-Xc**, where X is the serial number).
Standard html codes are used for the different interfaces, according to the following table:
HTML Code |
Status |
---|---|
200 |
Success on |
201 |
Success on |
204 |
Success on |
400 |
Protocol is not readable (Content-type must be set to |
403 |
Code returned when an operation is not allowed. |
500 |
There was an internal error on the server. |
Robot monitoring interfaces#
There are several endpoints that convey general information on the state of the hardware of the robot.
Docked state#
Indicates if the robot is connected to a dock station.
Endpoint: http://ari-Xc/topic/is_docked
Request type: GET
Result:
1{
2 "msg": {
3 "data": false
4 },
5 "topic_name": "is_docked"
6}
The msg.data
field is true if the robot is docked, false otherwise.
The topic_name
field contains the name of the topic endpoint accessed.
Charging state#
Indicates the charging state of the robot.
Endpoint: http://ari-Xc/topic/is_charging
Request type: GET
Result:
1{
2 "msg": {
3 "data": false
4 },
5 "topic_name": "is_charging"
6}
The msg.data
field is set true if the robot is charging (either on the
dock or from the back port), false otherwise.
The topic_name
field contains the name of the topic endpoint accessed.
Power diagnostic#
Contains information about the power state of the robot.
Endpoint: http://ari-Xc/topic/power_diagnostic
Request Type: GET
Result:
1{
2 "msg": {
3 "header": {
4 "stamp": {
5 "secs": 1592840672,
6 "nsecs": 856730268
7 },
8 "frame_id": "power_status",
9 "seq": 3570
10 },
11 "charger": 0.1,
12 "pc": 19.3,
13 "charge": 80,
14 "dock": 0.1,
15 "input": 38.2,
16 "is_emergency": false,
17 "is_connected": false
18 },
19 "topic_name": "power_diagnostic"
20}
The msg field contains:
header.stamp
: Epoch time split in seconds and nanoseconds at which the message was sent.header.frame_id
: identifier of the messageheader.seq
: internal sequence number of the messagecharger
: Voltage received from the chargerpc
: Voltage received on the PCcharge
: Voltage of the batterydock
: Voltage received through the dock portinput
: Voltage received from the back portis_emergency
: True if the emergency button is pressed, false otherwiseis_connected
: True if the robot is being charged, wither from the front or from the back port
The topic_name
field contains the name of the topic endpoint accessed.
Text-to-Speech
Triggers robot speech given an input text.
Endpoint: http://ari-Xc/action/tts
Request Type: POST
Payload:
1{
2 "rawtext": {
3 "text": "Hey, Juana, how are you?",
4 "lang_id": "en_GB"
5 }
6}
rawtext.text
is the string of the user input that is to be said
rawtext.lang_id
is RFC 3006 code to select the language the text will
be said in (e.g. en_GB
for British English).
Optional parameters:
speakerName:
gives the option to choose a variety of speakers for the
same language, if the platform allows it
wait_before_speaking:
indicates how many seconds the platform has to
wait before saying the text
Response:
1{
2 "response": {
3 "msg": {
4 "rawtext": {
5 "text": "Hello people! How are you doing?",
6 "lang_id": "en_GB"
7 }
8 },
9 "goal_id": "goal_6487fd70-d508-4bd7-a909-08fbd59e9b3f",
10 "action_name": "tts"
11 }
12}
The response.msg
field contains a copy of the received message.
The response.goal_id
field contains the internal goal id for the
created goal.
The response.action_name
field contains the action endpoint to which
the message has been sent.
Variations#
In order to execute motions alongside speech, it is possible to include the desired motion as a tag name.
Endpoint: http://ari-Xc/action/tts
Request Type: POST
Payload:
1{"rawtext": {"text": "Hey, Juana, <mark name='doTrick trickName=show_left'/>", "lang_id": "en_GB"}}
The above request will result in ARI showing its left arm as it says the text given.
A second usage of this method is to define a configuration file on the robot that lists different possible sentences classified into sections and keys. It is useful when a same behaviour is to be done in multiple languages.
Endpoint: http://ari-Xc/action/tts
Request Type: POST
Payload:
1{"section": "receptionist", "key": "greetings", "lang_id": "en_GB"}
section/key
refers to the group of sentences that will be randomly
selected.
In the above example, [receptionist] would be the name of the section, “greetings” the key name. The robot will select one of the three sentences at random. There can be as many sections and keys as desired.
1[receptionist]
2
3greetings=Hello! Touch my screen to interact with me!
4greetings= How are you? I am ARI. Do you want to play with me?
5greetings=Hey, nice to meet you! Can I help you with something?
lang_id
is RFC 3006 code to select the language the text will be said
in (e.g. “en_GB” for British English).
arguments
(optional) contain the values by which occurrences of ‘%s’
of the configuration file will be replaced in the main text. For
example:
1{
2 "section": "receptionist",
3 "key": "greetings",
4 "lang_id": "en_GB",
5 "arguments": ["Maria", "Tic Tac Toe"]
6}
1[receptionist]
2
3greetings=Hello %s! Touch my screen to play %s with me!
It will result in “Hello Maria! Touch my screen to play Tic Tac Toe with me!
Response:
1{
2 "response": {
3 "msg": {
4 "text": {
5 "section": "receptionist",
6 "key": "greetings",
7 "lang_id": "en_GB"
8 }
9 },
10 "goal_id": "goal_6487fd70-d508-4bd7-a909-08fbd59e9b3f",
11 "action_name": "tts"
12 }
13}
The response.msg
field contains a copy of the received message.
The response.goal_id
field contains the internal goal id for the
created goal.
The response.action_name
field contains the action endpoint to which
the message has been sent.
To visualize the feedback or result of the request, execute a GET
request, defining the goal id of the request that was executed in the
first place.
Endpoint: http://ari-Xc/action/tts?goal_a78f2947-6ddb-4a58-b4f3-cf7bd2e8f7ba
Request Type: GET
Payload:
Payload:
1{}
Response:
1{
2 "goal_6487fd70-d508-4bd7-a909-08fbd59e9b3f": "SUCCEEDED"
3}
It indicates that the text-to-speech was successful.
Executing motions#
The following endpoint enables triggering motions on ARI.
Request URL: http://ari-Xc/action/motion_manager
Request Method: POST
Payload:
1{"filename": "shake_left"}
The filename
field contains the name of the motion to be executed.
Response:
1{
2 "response": {
3 "msg": {
4 "filename": "shake_left"
5 },
6 "goal_id": "goal_0bc3677e-8579-4447-bada-9ffe965626d4",
7 "action_name": "motion_manager"
8 }
9}
The response.msg
field contains a copy of the received message.
The response.goal_id
field contains the internal goal id for the
created goal
The response.action_name
field contains the endpoint to which the
message has been sent.
In order to review the status of the request, you may do the following
GET
request, by adding a question mark ? and the goal ID obtained
previously.
Request URL: http://ari-Xc/action/motion_manager?goal_0bc3677e-8579-4447-bada-9ffe965626d4
Request Method: GET
Payload:
1{}
Response:
1{
2 "/interaction_profile_manager-232-1613745938.6713457": "SUCCEEDED",
3 "/interaction_profile_manager-229-1613745919.206712378": "SUCCEEDED",
4 "/interaction_profile_manager-228-1613745912.406713513": "SUCCEEDED",
5 "/interaction_profile_manager-244-1613746029.6708203": "SUCCEEDED",
6 "/interaction_profile_manager-241-1613746011.6671771": "SUCCEEDED",
7 "/interaction_profile_manager-231-1613745932.106732579": "SUCCEEDED",
8 "/interaction_profile_manager-234-1613745954.306731998": "SUCCEEDED",
9 "/interaction_profile_manager-240-1613746002.206710218": "SUCCEEDED",
10 "/interaction_profile_manager-247-1613746051.206706584": "SUCCEEDED",
11 "/interaction_profile_manager-233-1613745947.506710338": "SUCCEEDED",
12 "/interaction_profile_manager-246-1613746045.606716141": "SUCCEEDED",
13 "/interaction_profile_manager-239-1613745993.406716273": "SUCCEEDED",
14 "/interaction_profile_manager-236-1613745971.906710098": "ABORTED",
15 "/interaction_profile_manager-227-1613745902.606728662": "SUCCEEDED",
16 "/interaction_profile_manager-237-1613745979.6731839": "SUCCEEDED",
17 "goal_cb938245-1ad9-4fec-94f0-5b8f017db6b3": "ACTIVE",
18 "/interaction_profile_manager-245-1613746038.806699379": "SUCCEEDED",
19 "/interaction_profile_manager-238-1613745984.906711559": "SUCCEEDED",
20 "/interaction_profile_manager-230-1613745926.206720104": "SUCCEEDED",
21 "/interaction_profile_manager-235-1613745963.106722929": "SUCCEEDED",
22 "/interaction_profile_manager-243-1613746023.406714303": "SUCCEEDED",
23 "/interaction_profile_manager-242-1613746017.806672347": "SUCCEEDED"
24}
In the above example, it indicates the goal has succeeded and the time when it was active.
Docking#
The following endpoint triggers autonomous docking of the robot.
Request URL: http://ari-Xc/action/dock
Request Method: POST
Payload:
1{"retry_delay": {"secs": "0", "nsecs": "0"}, "use_current_pose": "False"}
retry_delay
indicates the maximum time the docking mechanism should
start retrying
If use_current_pose
is set to true, it will use the current pose for
detection.
Response:
1{
2 "response": {
3 "msg": {
4 "retry_delay": {
5 "secs": "0",
6 "nsecs": "0"
7 },
8 "use_current_pose": "False"
9 },
10 "goal_id": "goal_26752d4b-1c0d-494c-9048-5ac3c6096c5b",
11 "action_name": "dock"
12 }
13}
The response.msg
field contains a copy of the received message.
The response.goal_id
field contains the internal goal id for the
created goal
The response.action_name
field contains the endpoint to which the
message has been sent.
Request URL: http://ari-Xc/action/dock
Request Method: POST
Payload:
1{"retry_delay": {"secs": "0", "nsecs": "0"}, "use_current_pose": "True"}
In this case, as use_current_pose
is set to True, it will use a
pre-defined position of the dock station to reach for the dock.
Response:
1{
2 "response": {
3 "msg": {
4 "retry_delay": {
5 "secs": "0",
6 "nsecs": "0"
7 },
8 "use_current_pose": "True"
9 },
10 "goal_id": "goal_095b986c-e7ce-4d56-a30e-7f097b650abb",
11 "action_name": "dock"
12 }
13}
Undocking#
The following endpoint triggers autonomous undocking of the robot.
Request URL: http://ari-Xc/action/undock
Request Method: POST
Payload:
1{}
Response:
1{
2 "response": {
3 "msg": {},
4 "goal_id": "goal_80b0669f-bea4-4814-9241-cd17baaf18cc",
5 "action_name": "undock"
6 }
7}
Access head camera#
The following endpoint enables accessing data stream from ARI’s head RGB camera.
Request URL: http://ari-Xc/topic/head_front_camera
Request Method: GET
Response:
1{
2 "msg": {
3 "header": {
4 "stamp": {
5 "secs": 1592840672,
6 "nsecs": 856730268
7 },
8 "frame_id": "",
9 "seq": 1
10 },
11 "data": "/9j/4AAQSkZJRgABAQAAAQ"
12 "format": "rgb8; jpeg compressed bgr8"
13 },
14 "topic_name": "head_front_camera"
15}
format
specifies the format of the data (jpeg, png)
data
is a compressed image buffer consisting of a uint8 array