@@ -10676,6 +10676,78 @@ def MAV_CMD_NAV_TAKEOFF_command_int(self):
10676
10676
10677
10677
self .reboot_sitl () # unlock home position
10678
10678
10679
+ def Clamp (self ):
10680
+ '''test Copter docking clamp'''
10681
+ clamp_ch = 11
10682
+ self .set_parameters ({
10683
+ "SIM_CLAMP_CH" : clamp_ch ,
10684
+ })
10685
+
10686
+ self .takeoff (1 , mode = 'LOITER' )
10687
+
10688
+ self .context_push ()
10689
+ self .context_collect ('STATUSTEXT' )
10690
+ self .progress ("Ensure can't take off with clamp in place" )
10691
+ self .run_cmd (mavutil .mavlink .MAV_CMD_DO_SET_SERVO , p1 = 11 , p2 = 2000 )
10692
+ self .wait_statustext ("SITL: Clamp: grabbed vehicle" , check_context = True )
10693
+ self .arm_vehicle ()
10694
+ self .set_rc (3 , 2000 )
10695
+ self .wait_altitude (0 , 5 , minimum_duration = 5 , relative = True )
10696
+ self .run_cmd (mavutil .mavlink .MAV_CMD_DO_SET_SERVO , p1 = 11 , p2 = 1000 )
10697
+ self .wait_statustext ("SITL: Clamp: released vehicle" , check_context = True )
10698
+ self .wait_altitude (5 , 5000 , minimum_duration = 1 , relative = True )
10699
+ self .do_RTL ()
10700
+ self .set_rc (3 , 1000 )
10701
+ self .change_mode ('LOITER' )
10702
+ self .context_pop ()
10703
+
10704
+ self .progress ("Same again for repeatability" )
10705
+ self .context_push ()
10706
+ self .context_collect ('STATUSTEXT' )
10707
+ self .run_cmd (mavutil .mavlink .MAV_CMD_DO_SET_SERVO , p1 = 11 , p2 = 2000 )
10708
+ self .wait_statustext ("SITL: Clamp: grabbed vehicle" , check_context = True )
10709
+ self .arm_vehicle ()
10710
+ self .set_rc (3 , 2000 )
10711
+ self .wait_altitude (0 , 1 , minimum_duration = 5 , relative = True )
10712
+ self .run_cmd (mavutil .mavlink .MAV_CMD_DO_SET_SERVO , p1 = 11 , p2 = 1000 )
10713
+ self .wait_statustext ("SITL: Clamp: released vehicle" , check_context = True )
10714
+ self .wait_altitude (5 , 5000 , minimum_duration = 1 , relative = True )
10715
+ self .do_RTL ()
10716
+ self .set_rc (3 , 1000 )
10717
+ self .change_mode ('LOITER' )
10718
+ self .context_pop ()
10719
+
10720
+ here = self .mav .location ()
10721
+ loc = self .offset_location_ne (here , 10 , 0 )
10722
+ self .takeoff (5 , mode = 'GUIDED' )
10723
+ self .do_reposition (loc , frame = mavutil .mavlink .MAV_FRAME_GLOBAL )
10724
+ self .wait_location (loc , timeout = 120 )
10725
+ self .land_and_disarm ()
10726
+
10727
+ # explicitly set home so we RTL to the right spot
10728
+ self .set_home (here )
10729
+
10730
+ self .context_push ()
10731
+ self .context_collect ('STATUSTEXT' )
10732
+ self .run_cmd (mavutil .mavlink .MAV_CMD_DO_SET_SERVO , p1 = 11 , p2 = 2000 )
10733
+ self .wait_statustext ("SITL: Clamp: missed vehicle" , check_context = True )
10734
+ self .run_cmd (mavutil .mavlink .MAV_CMD_DO_SET_SERVO , p1 = 11 , p2 = 1000 )
10735
+ self .context_pop ()
10736
+
10737
+ self .takeoff (5 , mode = 'GUIDED' )
10738
+ self .do_RTL ()
10739
+
10740
+ self .takeoff (5 , mode = 'GUIDED' )
10741
+ self .land_and_disarm ()
10742
+
10743
+ self .context_push ()
10744
+ self .context_collect ('STATUSTEXT' )
10745
+ self .run_cmd (mavutil .mavlink .MAV_CMD_DO_SET_SERVO , p1 = 11 , p2 = 2000 )
10746
+ self .wait_statustext ("SITL: Clamp: grabbed vehicle" , check_context = True )
10747
+ self .context_pop ()
10748
+
10749
+ self .reboot_sitl () # because we set home
10750
+
10679
10751
def tests2b (self ): # this block currently around 9.5mins here
10680
10752
'''return list of all tests'''
10681
10753
ret = ([
@@ -10749,6 +10821,7 @@ def tests2b(self): # this block currently around 9.5mins here
10749
10821
self .MAV_CMD_SET_EKF_SOURCE_SET ,
10750
10822
self .MAV_CMD_NAV_TAKEOFF ,
10751
10823
self .MAV_CMD_NAV_TAKEOFF_command_int ,
10824
+ self .Clamp ,
10752
10825
])
10753
10826
return ret
10754
10827
0 commit comments