How does precision landing works? how is it triggered ?



  • My question is because based on the video I do not know how precision landing is activated or does it work on all the landings?

    What happened if there is not apriltags on the ground ?


  • Dev Team

    At a high level, the april tags provide a mechanism for the system to "relocalize", which can take out possible small drifts that can occur over time.

    Without the april tag, the vehicle can still land just fine, you just might be off target slightly due the noise (think of 1% over 100m could get 1m in drift). If this isn't a problem for your use case then all good. But if you want better precision, you can use something like april tags.

    The april tags have generic IDs like 0, 1, 2... You could set them up at specific locations (at some X, Y, Z), and then put them into a config file on VOXL, and when the system is flying around, the tracking camera can observe a tag and get an "update" that improves its real location.

    Some good relevant content from our wizard can be found in this talk: https://www.youtube.com/watch?v=P0YM2zK0qRc



  • My question is how do you get a drone to land on the tag? Do you connect to in offboard mode and set the landing point on the tag?


  • Dev Team

    Hi @Aldo-Castro-Freire ,

    The tag's location is pre-programmed as a known location. I might be crossing threads a bit with another one you have, but we have some documentation here

    Here's a demo video: https://www.youtube.com/watch?v=V3vVs8fEOZs

    You can imagine, you have a program flying "waypoints" (in this case, all VIO "derived" and without a GPS), like this one: https://gitlab.com/voxl-public/voxl-docker-images/voxl-docker-mavsdk-python

    Check out a command like this:
    https://gitlab.com/voxl-public/voxl-docker-images/voxl-docker-mavsdk-python/-/blob/master/offboard_position_ned2.py#L41

    Now, say the drone is near the end of this programmed flight, and it "sees" the april tag, the system can then correct itself for a more precise localization (say on top of a landing perch).

    You can configure the last 'waypoint' in the program to the location of the april tag (which is programmed in the config file described in the first link).

    This isn't using GPS... I still need to respond to your other question once I get some more input from the team! 😉



  • Using this as a reference: https://gitlab.com/voxl-public/voxl-docker-images/voxl-docker-mavsdk-python/-/blob/master/offboard_position_ned2.py#L41

    I have an idea on how this works I know that the drone sets the position of the using the apriltag. so for example I can put the position of the tag 1 to be at the origin {0,0,0}. and I can have tag 2 programmed to be at { 1,0,0}.

    Mini Question does local coordinate system means in front is north, right is east, back is south, and left is west ?

    My flow process is this I can use mission mode using a GPS to fly on top of the tag, a mission without landing directly. Then offboard mode is kicked in and when it sees the tag it corrects its position using the tag position as a reference. Then I use:

    await drone.offboard.set_position_ned(PositionNedYaw(0.0, 0.0, 20, 180.0))
    

    This will make the drone descend to 20 meters above the tag. Fair question how high can the drone see the tag ? Also in a NED system does a negative number means going up ?
    the angle is depending if you want the drone facing in a direction.
    then continuing in offboard mode:

     try:
            await drone.action.land()
    

    This will land the drone. Will this work ?


  • Dev Team

    Yes, front is north, east right, etc. I too have to experiment when messing with this, it's not my strongest area of knowledge and I get lost!

    Also yet, negative is going up (NED is north east down, so positive D is down, negative D is up).

    I think 20 meters high depends on the size of the tag... But that seems a bit far, experimentation will show though.

    The angle is going to be referenced from bootup of the VIO system. 0 on bootup is straight forward.

    drone.action.land() doesn't have an idea about location, I think it will just descend until it can't, or stop at 20 meters (in this case, 20 meters below take off point!)

    But imagine you set a position (set_postition_ned) that is the SAME location as the tag, the drone will go to that location based upon it's current reference, and it will see the tag, and correct for any small errors.



  • So Basically when drone sees the tag. it marks the position of the tag as 0,0,0. And the position of the drone will be based of that tag ? so if I tell the drone go to 0,0,-10 it will correct its position for x and y, and its altitude z in this case -10 means ten meters up above the tag.

    I am wondering if there is a way to make the drone to land on the tag, at a specified orientation. Because I am not sure if the drone will change its location when it is told to land cause there are not coordinates given.


  • Dev Team

    The tag won't be 0, 0, 0 unless you program it to be. You can set it to any values, and you can have multiple tags in the array (see here https://docs.modalai.com/voxl-vision-px4-apriltag-relocalization/#configuration-file)

    Yes, you can put a tag at say (100, 100, 0). You can fly to say (97, 100, -3), and the vehicle can see the tag and then 'infer' the tag is at exactly (100, 100, 0), and you can have the drone then fly to (100, 100, -0.5) and then land, for example.


Log in to reply