Precision poshold

Hey everyone,

I am working on a research project at uni and the simple version of my goal is to bring a multirotor to a specific height (about 30 feet) and a certain distance from a target horizontally and hold that location with as much precision as possible for about 5 minutes.

I spent a long time writing some computer vision software to extrapolate X Y and Z offsets from an IR webcam looking at a constellation of IR leds. So I have code right now that’s running on an ODroid that spits out those three offsets from frame center.

The idea now was to just send current offsets vs desired offsets into a PID on the ODroid and then use Mavlink SEND_NED_VELOCITY to the vehicle. Well, it’s not working. The command is being sent successfully, I’m in guided, but nothing is happening.

I’ve been working at this for over a year and I am about ready to give up on this LED thing. So my question is: is there a simpler yet effective solution? Can I just use a down pointing lidar with position hold? What should I do?

Thanks guys!

Hi, have you looked at precision landing in ArduCopter?
http://ardupilot.org/copter/docs/precision-landing-with-irlock.html

Precision Landing has multiple backends, not just IRLock (docs need updated), and it can also do ‘Precision Loiter’. If you set a channel option to 39 and set it high (ie. assign that channel to a switch on your RX transmitter and flip the switch high), then when you enter normal loiter mode it will attempt to use Precision Landing just to hold position (it won’t try to land). You can also set offset parameters to precision landing, so you could probably use those to offset horizontally that you need to do:
http://ardupilot.org/copter/docs/parameters.html#plnd-parameters

Lastly, I have a project that probably does what you want - uses CV to look for a target and command precision landing/loiter:
https://github.com/fnoop/vision_landing

1 Like

Oh shoot that looks good. I’ll check that out and let you know how that goes.