3
3
import os
4
4
import logging
5
5
import time
6
-
7
- import roslibpy
6
+ import rclpy
7
+ import rclpy .node
8
+ from std_srvs .srv import Empty , SetBool
9
+ import traceback
8
10
9
11
from .cabot_ace_battery_driver import BatteryDriver , BatteryDriverDelegate , BatteryStatus
10
12
from cabot import util
@@ -28,87 +30,75 @@ def battery_status(self, status):
28
30
logger .info ("lowpower shutdown requested" )
29
31
30
32
31
- class BatteryDriverNode :
32
- def __init__ (self , client , driver ):
33
- self . client = client
33
+ class BatteryDriverNode ( rclpy . node . Node ) :
34
+ def __init__ (self , driver ):
35
+ super (). __init__ ( "battery_driver_node" , start_parameter_services = False )
34
36
self .driver = driver
35
37
self .connected = False
36
38
37
- self .service0 = roslibpy .Service (self .client , '/ace_battery_control/turn_jetson_switch_on' , 'std_srvs/Empty' )
38
- self .service1 = roslibpy .Service (self .client , '/ace_battery_control/set_12v_power' , 'std_srvs/SetBool' )
39
- self .service2 = roslibpy .Service (self .client , '/ace_battery_control/set_5v_power' , 'std_srvs/SetBool' )
40
- self .service3 = roslibpy .Service (self .client , '/ace_battery_control/set_odrive_power' , 'std_srvs/SetBool' )
41
- self .service4 = roslibpy .Service (self .client , '/ace_battery_control/shutdown' , 'std_srvs/Empty' )
42
- #self.service5 = roslibpy.Service(self.client, '/ace_battery_control/set_lowpower_shutdown_threshold', 'cabot_msgs/SetUInt8')
43
- self .polling_ros ()
44
-
45
- @util .setInterval (1.0 )
46
- def polling_ros (self ):
47
- if not self .client .is_connected :
48
- self .connected = False
49
- else :
50
- if not self .connected :
51
- logger .info ("advertise services" )
52
- self .init_services ()
53
- self .connected = True
54
-
55
- def init_services (self ):
56
- self .service0 .advertise (self .turn_jetson_switch_on )
57
- self .service1 .advertise (self .set_12v_power )
58
- self .service2 .advertise (self .set_5v_power )
59
- self .service3 .advertise (self .set_odrive_power )
60
- self .service4 .advertise (self .shutdown )
61
- #self.service5.advertise(self.set_lowpower_shutdown_threshold)
39
+ self .service0 = self .create_service (Empty , '/ace_battery_control/turn_jetson_switch_on' , self .turn_jetson_switch_on )
40
+ self .service1 = self .create_service (SetBool , '/ace_battery_control/set_12v_power' , self .set_12v_power )
41
+ self .service2 = self .create_service (SetBool , '/ace_battery_control/set_5v_power' , self .set_5v_power )
42
+ self .service3 = self .create_service (SetBool , '/ace_battery_control/set_odrive_power' , self .set_odrive_power )
43
+ self .service4 = self .create_service (Empty , '/ace_battery_control/shutdown' , self .shutdown )
44
+ #self.service5 = self.create_service(cabot_msgs.msg.SetUInt8, '/ace_battery_control/set_lowpower_shutdown_threshold', self.set_lowpower_shutdown_threshold)
45
+
46
+ def start (self ):
47
+ try :
48
+ rclpy .spin (self )
49
+ except :
50
+ logger .error (traceback .format_exc ())
62
51
63
52
def turn_jetson_switch_on (self , req , res ):
64
53
self .driver .turn_jetson_switch_on ()
65
- return True
54
+ return res
66
55
67
56
def set_12v_power (self , req , res ):
68
- if req [ ' data' ] :
57
+ if req . data :
69
58
self .driver .set_12v_power (1 )
70
59
else :
71
60
self .driver .set_12v_power (0 )
72
- res [ ' success' ] = True
73
- return True
61
+ res . success = True
62
+ return res
74
63
75
64
def set_5v_power (self , req , res ):
76
- if req [ ' data' ] :
65
+ if req . data :
77
66
self .driver .set_5v_power (1 )
78
67
else :
79
68
self .driver .set_5v_power (0 )
80
- res [ ' success' ] = True
81
- return True
69
+ res . success = True
70
+ return res
82
71
83
72
def set_odrive_power (self , req , res ):
84
- if req [ ' data' ] :
73
+ if req . data :
85
74
self .driver .set_odrive_power (1 )
86
75
else :
87
76
self .driver .set_odrive_power (0 )
88
- res [ ' success' ] = True
89
- return True
77
+ res . success = True
78
+ return res
90
79
91
80
def shutdown (self , req , res ):
92
81
self .driver .shutdown ()
93
- return True
82
+ return res
94
83
95
84
def set_lowpower_shutdown_threshold (self , req , res ):
96
85
self .driver .set_lowpower_shutdown_threshold (msg ['value' ])
97
- res ['success' ] = True
98
- return True
86
+ return res
99
87
100
88
def main ():
101
- client = roslibpy . Ros ( host = 'localhost' , port = 9091 )
89
+ rclpy . init ( )
102
90
103
91
port_name = os .environ ['CABOT_ACE_BATTERY_PORT' ] if 'CABOT_ACE_BATTERY_PORT' in os .environ else '/dev/ttyACM0'
104
92
baud = int (os .environ ['CABOT_ACE_BATTERY_BAUD' ]) if 'CABOT_ACE_BATTERY_BAUD' in os .environ else 115200
105
93
delegate = Delegate ()
106
94
driver = BatteryDriver (port_name , baud , delegate = delegate )
107
- BatteryDriverNode (client , driver )
108
-
109
- client .run ()
110
- driver .start ()
95
+ node = BatteryDriverNode (driver )
111
96
97
+ try :
98
+ rclpy .spin (node )
99
+ except :
100
+ logger .error (traceback .format_exc ())
101
+ rclpy .destroy_node (node )
112
102
113
103
if __name__ == "__main__" :
114
104
logging .basicConfig (format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' )
0 commit comments