Initially I will use two different sensors for obstacle avoidance. lidar for closer range 2D image of space (obscale avoidance, scanning ground before landing, maybe SLAM)
and laser rangefinder for long range 1D distance sensing (looking for high buildings, maintaining altitude precisely, maybe high speed obstacle avoidance)
I went with cheapo robopeak hobby lidar, which seems to work well, here is a git repo for the library (node and beaglebone) (I also considered a lightweight hokuyo lidar) and for laser range finder I'll go with something like SF02 from paralax
these might be used in combination with some simple IR or just cameras (need more CPU but could double as optical flow sensors) used to locate becaons for landing or grabbing things
Ideally, both sensors should have an unobstructed front view on pitch dimension, with aditional unobstructed jaw dimension for LIDAR. Both sensors need to be able to independantly rotate on pitch axis for compensation of the angle of the drone when flying, and for scanning up and down (going in through windows, looking down when landing, etc) maybe rangefinder should also rotate on jaw axis on some fast servos for looking around independant of the drone orientation. not sure yet.
--
IR and ultrasound were also options, they are cheap but tricky and unreliable, (ultrasound behaves extra badly due to propeller noise on drones) These things can be compensated for, but laser rangefinding will always afaik give more accuracy and reliability at a price.
I've been hoping to write this for a while, its not a very exciting project so I've been working on this when I'm tired.
its a bit unusual, nodejs-blosxom, ~400 lines of coffescript. this is very much a work in progress, I'd advise you to use it as inspiration more then as a code you run. templates related to my own homepage are included in the repo. might move them laters.