I’m programming an under 250g quadcopter to fly indoors autonomously, but I’m probably doing something wrong. I’ve followed the tips from @dollop and @ppoirier in this post and other few tips available on the web, but I couldn’t get it working in LOITER mode. So, basically, my small quadcopter setup is composed of a Kakute F7 AIO flight controller, Benewake TFMini LiDAR, ThoneFlow optical flow, and Matek GPS+Compass module. The parameters file is attached. All sensors were tested and are working outdoors and indoors. In GUIDED_NOGPS mode, it can take off smoothly with 0.51 of thrust. When the target altitude is reached, the thurst is set to 0.5 to keep it hovering. This code is below:
def takeoffGuidedNoGPS(self): # check if drone is ready to takeoff vstate = self.vehicle.system_status.state if vstate != "STANDBY": print(">> ERROR arming motors: vehicle is not ready for arming!") return False # change flight mode to GUIDE_NOGPS self.vehicle.mode = VehicleMode("GUIDED_NOGPS") while self.vehicle.mode.name != "GUIDED_NOGPS": print("Changing flight mode...\n") time.sleep(1) # arms the vehicle self.vehicle.armed = True while not self.vehicle.armed: print("Trying to arm vehicle...\n") time.sleep(1) # takeoff up to 0.7m and hover thrust = 0.51 while True: current_altitude = self.vehicle.rangefinder.distance print("Hovering at %f meters.\n" % current_altitude) if current_altitude >= 0.7: thrust = 0.5 break else: thrust = 0.51 time.sleep(0.2) self.setAttitude(thrust=thrust) # hovering altitude reached print("Stationary hovering at %f meters.\n" % current_altitude) return True
The video below shows how it behaves executing the code above.
Initially, it goes a bit above the desired altitude and after goes down to the target altitude and stays hovering, but sliding horizontally. I’d like to use LOITER mode to fix position using LiDAR and optical flow, but nothing works in LOITER mode. It starts the motors for ~5 seconds and disarms. Any help will be very welcome.
Thanks in advance and best regards!
maroquio.sub250quad.indoors.setup.param (19.5 KB)