@@ -24,7 +24,11 @@ public class ZOSpotController : ZOROSUnityGameObjectBase {
2424 private TwistMessage _twistMessage = new TwistMessage ( ) ;
2525 private TwistWithCovarianceStampedMessage _twistPublishMessage = new TwistWithCovarianceStampedMessage ( ) ;
2626 private ZOROSFakeOdometryPublisher _odomPublisher = null ;
27- private bool IsClaimed {
27+ public bool IsClaimed {
28+ get ; set ;
29+ } = false ;
30+
31+ public bool IsPowered {
2832 get ; set ;
2933 } = false ;
3034
@@ -86,12 +90,13 @@ public override void OnROSBridgeConnected(ZOROSUnityManager rosUnityManager) {
8690 ROSBridgeConnection . Advertise ( "/odometry/twist" , TwistWithCovarianceStampedMessage . Type ) ;
8791
8892 // advertise services
93+ // claim robot
8994 ROSBridgeConnection . AdvertiseService < TriggerServiceRequest > ( "claim" ,
9095 TriggerServiceRequest . Type ,
9196 ( rosBridge , msg , id ) => {
9297 TriggerServiceRequest triggerServiceRequest = msg as TriggerServiceRequest ;
9398
94- Debug . Log ( "INFO: ZOSpotController::TriggerServiceRequest" ) ;
99+ Debug . Log ( "INFO: ZOSpotController::TriggerServiceRequest claim " ) ;
95100
96101 if ( IsClaimed == true ) {
97102 ROSBridgeConnection . ServiceResponse < TriggerServiceResponse > ( new TriggerServiceResponse ( false , "Already claimed" ) , "claim" , false , id ) ;
@@ -100,22 +105,19 @@ public override void OnROSBridgeConnected(ZOROSUnityManager rosUnityManager) {
100105 IsClaimed = true ;
101106 ROSBridgeConnection . ServiceResponse < TriggerServiceResponse > ( new TriggerServiceResponse ( true , "success" ) , "claim" , false , id ) ;
102107
103-
104108 }
105109
106-
107-
108110 return Task . CompletedTask ;
109111
110112 } ) ;
111113
112- // advertise services
114+ // release robot claim
113115 ROSBridgeConnection . AdvertiseService < TriggerServiceRequest > ( "release" ,
114116 TriggerServiceRequest . Type ,
115117 ( rosBridge , msg , id ) => {
116118 TriggerServiceRequest triggerServiceRequest = msg as TriggerServiceRequest ;
117119
118- Debug . Log ( "INFO: ZOSpotController::TriggerServiceRequest" ) ;
120+ Debug . Log ( "INFO: ZOSpotController::TriggerServiceRequest release " ) ;
119121
120122 if ( IsClaimed == false ) {
121123 ROSBridgeConnection . ServiceResponse < TriggerServiceResponse > ( new TriggerServiceResponse ( false , "Not claimed" ) , "release" , false , id ) ;
@@ -124,10 +126,61 @@ public override void OnROSBridgeConnected(ZOROSUnityManager rosUnityManager) {
124126 IsClaimed = false ;
125127 ROSBridgeConnection . ServiceResponse < TriggerServiceResponse > ( new TriggerServiceResponse ( true , "success" ) , "release" , false , id ) ;
126128
129+ }
130+
131+ return Task . CompletedTask ;
132+
133+ } ) ;
134+
135+ // power on
136+ ROSBridgeConnection . AdvertiseService < TriggerServiceRequest > ( "power_on" ,
137+ TriggerServiceRequest . Type ,
138+ ( rosBridge , msg , id ) => {
139+ TriggerServiceRequest triggerServiceRequest = msg as TriggerServiceRequest ;
140+
141+ Debug . Log ( "INFO: ZOSpotController::TriggerServiceRequest power_on" ) ;
142+
143+ if ( IsPowered == true ) {
144+ ROSBridgeConnection . ServiceResponse < TriggerServiceResponse > ( new TriggerServiceResponse ( false , "Already powered on" ) , "power_on" , false , id ) ;
145+
146+ } else {
147+ if ( IsClaimed == true ) {
148+ IsPowered = true ;
149+ ROSBridgeConnection . ServiceResponse < TriggerServiceResponse > ( new TriggerServiceResponse ( true , "success" ) , "power_on" , false , id ) ;
150+
151+ } else { // can't power if not claimed
152+ ROSBridgeConnection . ServiceResponse < TriggerServiceResponse > ( new TriggerServiceResponse ( false , "Not claimed. Run /claim service" ) , "power_on" , false , id ) ;
153+
154+ }
127155
128156 }
129157
158+ return Task . CompletedTask ;
159+
160+ } ) ;
161+
162+ // power off
163+ ROSBridgeConnection . AdvertiseService < TriggerServiceRequest > ( "power_off" ,
164+ TriggerServiceRequest . Type ,
165+ ( rosBridge , msg , id ) => {
166+ TriggerServiceRequest triggerServiceRequest = msg as TriggerServiceRequest ;
167+
168+ Debug . Log ( "INFO: ZOSpotController::TriggerServiceRequest power_off" ) ;
130169
170+ if ( IsPowered == false ) {
171+ ROSBridgeConnection . ServiceResponse < TriggerServiceResponse > ( new TriggerServiceResponse ( false , "Already powered off" ) , "power_off" , false , id ) ;
172+
173+ } else {
174+ if ( IsClaimed == true ) {
175+ IsPowered = false ;
176+ ROSBridgeConnection . ServiceResponse < TriggerServiceResponse > ( new TriggerServiceResponse ( true , "success" ) , "power_off" , false , id ) ;
177+
178+ } else { // can't power if not claimed
179+ ROSBridgeConnection . ServiceResponse < TriggerServiceResponse > ( new TriggerServiceResponse ( false , "Not claimed. Run /claim service" ) , "power_on" , false , id ) ;
180+
181+ }
182+
183+ }
131184
132185 return Task . CompletedTask ;
133186
0 commit comments