Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
9279d6c
initial commit: added restapi state of work
niemsoen Sep 30, 2021
b542011
Merge pull request #9 from niemsoen/foxy-devel
relffok Oct 13, 2021
2a0dde8
added mir_ready publisher
niemsoen Oct 14, 2021
6093bb8
Merge pull request #1 from niemsoen/adding-mirbridge-ready-signal
niemsoen Oct 14, 2021
7cf0903
added reliable QOS for mir_bridge_ready topic
niemsoen Oct 15, 2021
4fe0c37
added mir_bridge_ready=false on crash/shutdown
niemsoen Oct 15, 2021
02ee545
attribute bugfix
niemsoen Oct 15, 2021
137c7a5
added readiness polling and simplified ready publishing
niemsoen Oct 15, 2021
f2d0e04
uneccesary main->publish_mir_ready_state: button checks bridge alive
niemsoen Oct 18, 2021
ab51022
uneccesary main->publish_mir_ready_state: button checks bridge alive
niemsoen Oct 18, 2021
39e025e
Merge branch 'galactic-devel' of https://github.com/niemsoen/mir_robo…
niemsoen Oct 18, 2021
1ba188c
changed mir_ready pub/sub to Trigger-service
niemsoen Oct 18, 2021
e91279e
possible bugfix
niemsoen Oct 19, 2021
f31efb8
changed response to success=True always and message=True/False
niemsoen Oct 20, 2021
6e00df4
Revert "changed response to success=True always and message=True/False"
niemsoen Oct 20, 2021
9dbda46
Merge branch 'relffok:foxy-devel' into mir-bridge-as-service-server
niemsoen Oct 22, 2021
c84ccb6
added custom CheckReady srv-definition
niemsoen Oct 22, 2021
d7a1eb2
Merge branch 'mir-bridge-as-service-server' of https://github.com/nie…
niemsoen Oct 22, 2021
691f574
find bug in service
niemsoen Oct 22, 2021
34cb67c
renamed interface to match usb_pushbutton
niemsoen Oct 22, 2021
eb07640
fixed dependency
niemsoen Oct 22, 2021
28b8218
fixed another dependency
niemsoen Oct 22, 2021
cf0f5c1
Merge pull request #2 from niemsoen/mir-bridge-as-service-server
niemsoen Oct 22, 2021
69de4f7
Revert "Merge pull request #2 from niemsoen/mir-bridge-as-service-ser…
Nov 10, 2021
bb0eba0
Use std_srvs/Trigger as mir-ready-service Type
Nov 10, 2021
49e035d
Merge branch 'relffok:galactic-devel' into galactic-devel
niemsoen Nov 25, 2021
e1564f1
Merge branch 'galactic-devel' into implementing-restapi-client
niemsoen Dec 9, 2021
cbd49ee
changed structure to service-client communication
niemsoen Dec 9, 2021
f93c28b
fix for build error?
niemsoen Dec 9, 2021
701a0db
wrong directory name
niemsoen Dec 9, 2021
dbf24fb
added logging output
niemsoen Dec 9, 2021
d275c20
bugfix
niemsoen Dec 9, 2021
e7242c5
better logging
niemsoen Dec 9, 2021
611d487
added message to response of service call
niemsoen Dec 9, 2021
179cf08
bugfix
niemsoen Dec 9, 2021
fcac368
added auth as parameter
niemsoen Dec 9, 2021
d3e8750
catch token not set
niemsoen Dec 9, 2021
533d1f0
bugfix response
niemsoen Dec 9, 2021
197aac1
added check for error in setting as response to service call
niemsoen Dec 9, 2021
fbee422
better log
niemsoen Dec 9, 2021
a78fb9f
introduced parameters for hostname and auth-token
niemsoen Dec 20, 2021
5f2348f
make sure api handle is setup at launch
niemsoen Jan 7, 2022
90960ce
better function names
niemsoen Jan 7, 2022
05cadf1
file rename
niemsoen Jan 7, 2022
a629aaa
launch of mir driver triggers launch of restapi_server
niemsoen Jan 7, 2022
ae01300
mir_bridge creates restapi_client node
niemsoen Jan 7, 2022
50c4463
import error in mir_bridge for MirRestAPIClient
niemsoen Jan 11, 2022
770c2ee
include test client for rest api
niemsoen Jan 11, 2022
b839166
add sleep for test call
niemsoen Jan 11, 2022
c83122b
working, launch file not needed
niemsoen Jan 11, 2022
58f5f94
add client in mir_bridge.py
niemsoen Jan 12, 2022
1a97c70
trying to fix import
niemsoen Jan 12, 2022
a75c1ff
Revert "trying to fix import"
niemsoen Jan 12, 2022
83bb973
fix for import bug
Jan 18, 2022
bb3dbda
fix message type error
Jan 19, 2022
cc6f54f
try to fix connection refusal of rosbridge after restapi
Jan 19, 2022
89841d6
try to replace sleep after setTime waiting for reboot
Jan 19, 2022
6ad1ccc
catch CannotSendRequest
Jan 19, 2022
ed8edc6
replace print with logger
Jan 19, 2022
38f644c
disable status call
Jan 19, 2022
caf504d
try output of get status call
Jan 19, 2022
8eeab98
wait for restapi restart working
Jan 19, 2022
758a853
make waiting for availability more elegant
Jan 19, 2022
40675b6
clean-up
Jan 19, 2022
f0cd3dc
Merge pull request #3 from niemsoen/implementing-restapi-client
niemsoen Jan 19, 2022
9c47b43
Merge branch 'relffok:galactic-devel' into galactic-devel
niemsoen Jan 20, 2022
1d1a3d5
removed unused imports
Jan 20, 2022
45820ab
Merge branch 'galactic-devel' of https://github.com/niemsoen/mir_robo…
Jan 20, 2022
28a8e76
add potential fix
Jan 26, 2022
1f0f1c2
Call mir_restapi_server in tendobot_driver
Jan 26, 2022
788a739
Merge pull request #4 from niemsoen/mir-restapi-launch-no-apitoken-bu…
niemsoen Jan 26, 2022
2683c2b
Added api-call abstarction layer & tested api call while bridge conne…
niemsoen Jan 26, 2022
3083ba7
init (#6)
niemsoen Jan 26, 2022
0a52e67
readme section: time sync in ros2 /w restapi
Feb 3, 2022
8b27a65
remove automatic time sync call at driver start
Feb 3, 2022
f20d342
improved naming style in mir_restapi
Feb 3, 2022
a4b7a4c
catch case of no api token set, warn user
Feb 10, 2022
8de5868
added more untested calls
Feb 17, 2022
702be63
added waiting condition for honking
Feb 17, 2022
e04224f
failed try to find system time in restapi
Feb 17, 2022
367e585
added client for time sync
Feb 17, 2022
5f5a6f3
Merge branch 'mir-restapi-sounds' of https://github.com/niemsoen/mir_…
Feb 17, 2022
37fca29
wait for service available
Feb 17, 2022
17859cf
Merge branch 'mir-restapi-sounds' of github.com:niemsoen/mir_robot in…
Feb 17, 2022
3dd409b
Merge branch 'galactic-devel' into galactic-devel
niemsoen Mar 1, 2022
8f1a38d
Merge branch 'galactic-devel' of github.com:niemsoen/mir_robot into g…
Mar 2, 2022
0088f26
added requested changes
Mar 2, 2022
09c0394
Add emergency publisher (#7)
niemsoen Mar 29, 2022
726447e
merged upstream changes
Mar 29, 2022
72f7f8b
changed logger level to debug for emergency message
Mar 29, 2022
e8cde06
Merge branch 'relffok-galactic-devel' into galactic-devel
Mar 29, 2022
b5b6203
Merge branch 'galactic-devel' of github.com:niemsoen/mir_robot into g…
Mar 29, 2022
4e1beb0
fixed merge conflicts
Mar 29, 2022
6adb4f8
Merge branch 'relffok-galactic-devel2' into galactic-devel
Mar 29, 2022
2db27a0
fixes python setuptools error
Jun 30, 2022
880e9cd
Merge branch 'relffok:galactic-devel' into galactic-devel
niemsoen Aug 3, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 37 additions & 2 deletions mir_driver/mir_driver/mir_bridge.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from rclpy.qos import qos_profile_system_default, qos_profile_sensor_data
from rclpy.qos import qos_profile_system_default, qos_profile_sensor_data, qos_profile_services_default

import time
import copy
Expand All @@ -15,6 +15,7 @@
from sensor_msgs.msg import LaserScan
from tf2_msgs.msg import TFMessage
from std_srvs.srv import Trigger
from std_msgs.msg import Bool

tf_prefix = ''

Expand Down Expand Up @@ -454,8 +455,42 @@ def __init__(self):
if ('/' + sub_topic.topic) not in subscribed_topics:
self.get_logger().warn(
"Topic '%s' is not yet subscribed to by the MiR!" % sub_topic.topic)



emergency_pub = self.create_publisher(Bool, 'emergency_halt', qos_profile_services_default)
cli_mir_restapi_emergency = self.create_client(Trigger, 'mir_100_is_emergency_halt')
cli_mir_restapi_emergency.wait_for_service()
self.mir_bridge_ready = True

last_check = time.time()
emergency = False
while True:
rclpy.spin_once(self)
if time.time() - last_check < 1:
continue
last_check = time.time()

req = Trigger.Request()
future = cli_mir_restapi_emergency.call_async(req)
rclpy.spin_until_future_complete(self, future, timeout_sec=1)
if future.done():
if future.result().message == str(True):
if not emergency:
msg = Bool()
msg.data = True
emergency_pub.publish(msg)
self.get_logger().info('Emergency Halt triggered')
emergency = True
else:
if emergency:
msg = Bool()
msg.data = True
emergency_pub.publish(msg)
self.get_logger().info('Emergency Halt released')
emergency = False




def get_topics(self):
srv_response = self.robot.callService('/rosapi/topics', msg={})
Expand Down
1 change: 1 addition & 0 deletions mir_restapi/mir_restapi/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

8 changes: 4 additions & 4 deletions mir_restapi/mir_restapi/mir_restapi_lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import http.client
from datetime import datetime


class HttpConnection():

def __init__(self, logger, address, auth, api_prefix):
Expand Down Expand Up @@ -79,7 +78,7 @@ def is_connected(self, print=True):
self.http.connection.connect()
self.http.connection.close()
if print:
self.logger.info("REST API: Connected!")
self.logger.debug("REST API: Connected!")
except Exception as e:
if print:
self.logger.warn('REST API: Attempt to connect failed: ' + str(e))
Expand All @@ -92,7 +91,7 @@ def is_available(self):
return False
else:
return True

def wait_for_available(self):
while True:
if self.is_connected(print=False):
Expand All @@ -111,6 +110,7 @@ def get_state_id(self):
status = self.get_status()
state_id = status["state_id"]
return state_id

""" Choices are: {3, 4, 11}, State: {Ready, Pause, Manualcontrol}
"""
def set_state_id(self, stateId):
Expand Down Expand Up @@ -241,7 +241,7 @@ def add_mission_to_queue(self, mission_name):
self.logger.warn("Couldn't schedule mission")
self.logger.warn(str(data))
return False, -1

def is_mission_done(self, mission_queue_id):
try:
# mis_guid = self.get_mission_guid(mission_name)
Expand Down
36 changes: 18 additions & 18 deletions mir_restapi/mir_restapi/mir_restapi_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def setup_api_handle(self):
self.get_logger().info("created MirRestAPI handle")
self.create_services()
self.get_logger().info("created services")

def parameters_callback(self, params):
for param in params:
if param.name == "mir_restapi_auth":
Expand All @@ -52,7 +52,7 @@ def parameters_callback(self, params):
self.hostname = param.value
self.setup_api_handle()
return SetParametersResult(successful=True)

def create_services(self):
self.create_service(
Trigger,
Expand Down Expand Up @@ -101,12 +101,12 @@ def create_services(self):
'mir_100_get_settings',
self.get_settings_callback)
self.get_logger().info("Listening on 'mir_100_get_settings'")

def test_api_connection(self):
if self.api_handle is None:
if self.api_handle == None:
return -1

self.get_logger().info('REST API: Waiting for connection')
self.get_logger().debug('REST API: Waiting for connection')
i = 1
while not self.api_handle.is_connected():
if not rclpy.ok():
Expand All @@ -117,13 +117,13 @@ def test_api_connection(self):
i += 1
time.sleep(1)
return 1

def reponse_api_handle_not_exists(self, response):
response.success = False
response.message = 'API token and/or hostname not set yet'
self.get_logger().error(response.message)
return response

def call_restapi_function(self, service_fct, request, response, args=None):
if self.test_api_connection() == -1:
response = self.reponse_api_handle_not_exists(response)
Expand Down Expand Up @@ -153,33 +153,33 @@ def get_status_callback(self, request, response):
self.get_logger().info('Getting status from REST API...')
response = self.call_restapi_function(self.api_handle.get_status, request, response)
return response

def get_sounds_callback(self, request, response):
self.get_logger().info('Getting sounds from REST API...')
response = self.call_restapi_function(self.api_handle.get_sounds, request, response)
return response

def is_emergency_halt_callback(self, request, response):
self.get_logger().info('Checking REST API for emergency halt...')
self.get_logger().debug('Checking REST API for emergency halt...')
response = self.call_restapi_function(self.api_handle.get_state_id, request, response)

if response.success:
state_id = int(response.message)
# self.get_logger().info("Returned state_id as %i" % state_id)
self.get_logger().debug("Returned state_id as %i" % state_id)
STATE_ID_EMERGENCY = 10
if state_id == STATE_ID_EMERGENCY:
response.message = str(True)
self.get_logger().info("Emergency Halt")
self.get_logger().debug("Emergency Halt")
else:
response.message = str(False)
# self.get_logger().info("no emergency halt")
self.get_logger().debug("no emergency halt")
return response

def get_missions_callback(self, request, response):
self.get_logger().info('Getting missions from REST API...')
response = self.call_restapi_function(self.api_handle.get_missions, request, response)
return response

def honk_callback(self, request, response):
self.get_logger().info('Honking horn over REST API...')

Expand Down Expand Up @@ -214,7 +214,7 @@ def honk_callback(self, request, response):
self.api_handle.http.__del__()
response.success = True
return response

def get_system_info_callback(self, request, response):
self.get_logger().info('Getting system info from REST API...')
response = self.call_restapi_function(self.api_handle.get_system_info, request, response)
Expand Down
2 changes: 1 addition & 1 deletion mir_restapi/mir_restapi/mir_restapi_sync_time.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def call_trigger_service(self, client):

def sync_time(self):
self.call_trigger_service(self.restAPI_setTime)

def get_status(self):
self.call_trigger_service(self.restAPI_getStatus)

Expand Down