Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Indoor (GPS denied area) fly using GUIDED_NOGPS #492

Open
borhanreo opened this issue Jul 16, 2019 · 0 comments
Open

Indoor (GPS denied area) fly using GUIDED_NOGPS #492

borhanreo opened this issue Jul 16, 2019 · 0 comments

Comments

@borhanreo
Copy link

borhanreo commented Jul 16, 2019

I'm using pixhawk for indoor mission. i am familiar with the controlling with gps signal available area. My copter wrok good in gps signal available area. But i want to flying in GPS denied area. I have successfully install maxbotix range finder and get altitude value. I’ve got a very basic script that puts the drone to GUIDED_NOGPS mode, arms it and forces it to takeoff for the altitude say 1m, then it wains for a while and lands. When i armed then it takeoff then drone going straight up. Did not stay in 1m altitude. Anyone help me.

sonar_alt = -5
def range_finder():
    def rangefinder_callback(self, attr_name, value):
        global sonar_alt
        sonar_alt = value.distance
    print ("Rangefinder ", value.distance, value.voltage)

vehicle.add_attribute_listener('rangefinder', rangefinder_callback)
def main_arm_and_takeoff_nogps(aTargetAltitude):
    DEFAULT_TAKEOFF_THRUST = 0.6
    SMOOTH_TAKEOFF_THRUST = 0.5
    print("Basic pre-arm checks")
    while not vehicle.is_armable:
        print(" Waiting for vehicle to initialise...")
        time.sleep(1)
    print("Arming motors")
    vehicle.mode = VehicleMode("GUIDED_NOGPS")
    vehicle.armed = True
    while not vehicle.armed:
        print(" Waiting for arming...")
        vehicle.armed = True
        time.sleep(1)
    print("Taking off!")
    thrust = DEFAULT_TAKEOFF_THRUST
    while True:
        current_altitude = sonar_alt
        print(" Altitude: %f  Desired: %f" % (current_altitude, aTargetAltitude))
        if current_altitude >= aTargetAltitude * 0.95:
            print("Reached target altitude ")
            break
        elif current_altitude >= aTargetAltitude * 0.6:
            thrust = SMOOTH_TAKEOFF_THRUST
        main_set_attitude(thrust=thrust)
        time.sleep(0.2)
def modeLand():
    vehicle.mode = VehicleMode("LAND")
    time.sleep(5)
    print("-------------Vehicle is in:-------%s" % vehicle.mode)
def main_send_attitude_target(roll_angle = 0.0, pitch_angle = 0.0,
                     yaw_angle = None, yaw_rate = 0.0, use_yaw_rate = False,
                     thrust = 0.5):
    if yaw_angle is None:
        yaw_angle = vehicle.attitude.yaw
        msg = vehicle.message_factory.set_attitude_target_encode(
        0, # time_boot_ms
        1, # Target system
        1, # Target component
        0b00000000 if use_yaw_rate else 0b00000100,
        main_to_quaternion(roll_angle, pitch_angle, yaw_angle), # Quaternion
        0, # Body roll rate in radian
        0, # Body pitch rate in radian
        math.radians(yaw_rate), # Body yaw rate in radian/second
        thrust  # Thrust
    )
    vehicle.send_mavlink(msg)
def main_set_attitude(roll_angle = 0.0, pitch_angle = 0.0,
             yaw_angle = None, yaw_rate = 0.0, use_yaw_rate = False,
             thrust = 0.5, duration = 0):

    main_send_attitude_target(roll_angle, pitch_angle,
                     yaw_angle, yaw_rate, False,
                     thrust)
    start = time.time()
    while time.time() - start < duration:
        main_send_attitude_target(roll_angle, pitch_angle,
                         yaw_angle, yaw_rate, False,
                         thrust)
        time.sleep(0.1)
    # Reset attitude, or it will persist for 1s more due to the timeout
    main_send_attitude_target(0, 0,
                     0, 0, True,
                     thrust)
def main_to_quaternion(roll = 0.0, pitch = 0.0, yaw = 0.0):
    """
    Convert degrees to quaternions
    """
    t0 = math.cos(math.radians(yaw * 0.5))
    t1 = math.sin(math.radians(yaw * 0.5))
    t2 = math.cos(math.radians(roll * 0.5))
    t3 = math.sin(math.radians(roll * 0.5))
    t4 = math.cos(math.radians(pitch * 0.5))
    t5 = math.sin(math.radians(pitch * 0.5))

    w = t0 * t2 * t4 + t1 * t3 * t5
    x = t0 * t3 * t4 - t1 * t2 * t5
    y = t0 * t2 * t5 + t1 * t3 * t4
    z = t1 * t2 * t4 - t0 * t3 * t5

    return [w, x, y, z]
if __name__ == '__main__':
    range_finder()
    main_arm_and_takeoff_nogps(1)  ## 1 miter
    time.sleep(3)
    modeLand()`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant