Power lane finding
note: this project is inspired by udacity nanoprogram and is not complete yet
Usage
- cd build
- cmake ..
- make
- ./PowerLaneFinding
Motivation
Lane finding is one of the most important topics in auto-driving. Traditionaly we use computer vision techniques to make use of camera images. However, camera images will be hugely affected when the weather is bad or the environment is noisy. For example, if the image is shadowed or overexposed, it will lead computer vision process to a bad result, or it may took too much effort to deal with it(ex: shadow removal, brightness and contrast adjustment).
As a result, we choose LiDAR as our second sensor. LiDAR uses nearly-infrared laser to map the land, which is unaffected by visible light. Based on the characteristic that the reflective intensity of road lanes is higher than other regions, we can use the data of LiDAR as second standard. The final goal of this project is using the fusion of camera and LiDAR to
achieve powerful lane finding.
Pipeline
- LiDAR & Camera fusion (not introduced in this project)
- Image preprocess (resize, undistortion...etc)
- Perspective transform
- Edge detection
- Lane detection
Current Result
- camera succeed, lidar succeed
original image
lane detection without lidar data
lane detection with lidar data
- camera succeed, lidar fail
original image
lane detection without lidar data
lane detection with lidar data
- camera fail, lidar succeed
original image
lane detection without lidar data
lane detection with lidar data
- camera fail, lidar fail
original image
lane detection without lidar data
lane detection with lidar data
Future Work
- Find an adaptive method for edge detection:
We have mutiple methods to deal with different scenes. For example, sobel filter is good at most most scenes but bad at shadowy image. R channel in BGR color space and S channel in HSV color space is good at shadowy image, but is afraid of bright spots.
Currently we change our edge detection method manually according to each frame. It's bad because in this way we can't apply the program on video, which means we can't use it on auto-driving car.
As a result, we have to find some way to differentiate scenes by scenes, and then we can apply edge detection adaptively.
- Find a reliable way to adopt camera or lidar data:
As you can see in the result above, camera is good sometimes but bad in another frame, so does lidar.
As a result, we have to find some way to let program know when to adopt camera result and when to adopt lidar result.
- ROI selection:
Currently we choose ROI manually. We have to find a reliable way to choose ROI automatically so we can apply program on auto-driving car.
- Lane tracking:
Once we find the road lanes, we can just track the lane, which take much less effort and make the program more reliable.