33
33
__author__ = 'Bitcraze AB'
34
34
__all__ = ['Commander' ]
35
35
36
+ SET_SETPOINT_CHANNEL = 0
37
+ META_COMMAND_CHANNEL = 1
38
+
36
39
TYPE_STOP = 0
37
40
TYPE_VELOCITY_WORLD = 1
38
41
TYPE_ZDISTANCE = 2
39
42
TYPE_HOVER = 5
40
43
TYPE_POSITION = 7
41
44
45
+ TYPE_META_COMMAND_NOTIFY_SETPOINT_STOP = 0
46
+
42
47
43
48
class Commander ():
44
49
"""
@@ -82,6 +87,18 @@ def send_setpoint(self, roll, pitch, yawrate, thrust):
82
87
pk .data = struct .pack ('<fffH' , roll , - pitch , yawrate , thrust )
83
88
self ._cf .send_packet (pk )
84
89
90
+ def send_notify_setpoint_stop (self , remain_valid_milliseconds = 0 ):
91
+ """
92
+ Sends a packet so that the priority of the current setpoint to the lowest non-disabled value,
93
+ so any new setpoint regardless of source will overwrite it.
94
+ """
95
+ pk = CRTPPacket ()
96
+ pk .port = CRTPPort .COMMANDER_GENERIC
97
+ pk .channel = META_COMMAND_CHANNEL
98
+ pk .data = struct .pack ('<BI' , TYPE_META_COMMAND_NOTIFY_SETPOINT_STOP ,
99
+ remain_valid_milliseconds )
100
+ self ._cf .send_packet (pk )
101
+
85
102
def send_stop_setpoint (self ):
86
103
"""
87
104
Send STOP setpoing, stopping the motors and (potentially) falling.
@@ -100,6 +117,7 @@ def send_velocity_world_setpoint(self, vx, vy, vz, yawrate):
100
117
"""
101
118
pk = CRTPPacket ()
102
119
pk .port = CRTPPort .COMMANDER_GENERIC
120
+ pk .channel = SET_SETPOINT_CHANNEL
103
121
pk .data = struct .pack ('<Bffff' , TYPE_VELOCITY_WORLD ,
104
122
vx , vy , vz , yawrate )
105
123
self ._cf .send_packet (pk )
@@ -116,6 +134,7 @@ def send_zdistance_setpoint(self, roll, pitch, yawrate, zdistance):
116
134
"""
117
135
pk = CRTPPacket ()
118
136
pk .port = CRTPPort .COMMANDER_GENERIC
137
+ pk .channel = SET_SETPOINT_CHANNEL
119
138
pk .data = struct .pack ('<Bffff' , TYPE_ZDISTANCE ,
120
139
roll , pitch , yawrate , zdistance )
121
140
self ._cf .send_packet (pk )
@@ -132,6 +151,7 @@ def send_hover_setpoint(self, vx, vy, yawrate, zdistance):
132
151
"""
133
152
pk = CRTPPacket ()
134
153
pk .port = CRTPPort .COMMANDER_GENERIC
154
+ pk .channel = SET_SETPOINT_CHANNEL
135
155
pk .data = struct .pack ('<Bffff' , TYPE_HOVER ,
136
156
vx , vy , yawrate , zdistance )
137
157
self ._cf .send_packet (pk )
@@ -146,6 +166,7 @@ def send_position_setpoint(self, x, y, z, yaw):
146
166
"""
147
167
pk = CRTPPacket ()
148
168
pk .port = CRTPPort .COMMANDER_GENERIC
169
+ pk .channel = SET_SETPOINT_CHANNEL
149
170
pk .data = struct .pack ('<Bffff' , TYPE_POSITION ,
150
171
x , y , z , yaw )
151
172
self ._cf .send_packet (pk )
0 commit comments