All programming tasks were done in C++.
I developed the path-planning system based on Rapidly-Exploring Random Tree (RRT). The path-planning system takes the coordinates of the obstacles detected by stereo camera, creating a path to avoid the obstacles.
Here is an example of my RRT implementation:
![]() |
![]() |
step 0: tree reaches goal | step 1: intial path |
  |   |
![]() |
![]() |
step 2: shorten path | step 3: trim unnecessary points |
The source code of RRT and a simple GUI(developed using Qt) are on Github
In real situation, the path-planning system only discovered the square area around the vehicle, and the area followed the position of the vehicle. In addition to the path points generated by RRT, the path-planning system utilized hermite curve interpolation to generate full path. See Case 1 in the result page for real test.
I integrated the path-planning system with the ultrasonic sensor system, which was employed as a real-time obstacle avoidance method. The characteristics of these systems are:
RRT-based Path-planning System:
Pro:
Con:
Ultrasonic Sensor System:
Pro:
Con:
I developed a decision flow to integrate these systems so that they complement each other:
See Case 2 in the Result page for real test.
Since the vehicle walks on the ground, the lower part of stereo camera should be ground where the exposure value is close to the obstacle. The specialized auto-exposure method can be expressed as following steps:
![]() |
![]() |
Built-in auto-exposure method | Specialized auto-exposure method |
With the specialized auto-exposure method, the images captured by stereo camera contained more details. Consequently, the result of obstacle detection was improved. This algorithm was inspired by a common technique of photography which was my personal interest.
Position vectors of all pixels in the left eye image were obtained by the disparity map calculated by SRI Stereo Engine accompanied with our stereo camera. The disparity map is illustrated as below:
![]() |
![]() |
Left Eye Image | Disparity Map by SRI Stereo Engine |
  |   |
All pixels of the disparity map were put to a grid in front of the vehicle according to their coordinate, like:
The grids I used to modeling the obstacles. Each block is 1mx1m
If the cumulative pixels of a block were higher than a specific threshold and the average height was higher than ground, that block was considered as an obstacle, represented by its central point, and sent to main station program for path planning.