Inspiration
Currently, a major area of investigation in the field of autonomous vehicle design is obstacle avoidance, enabling an autonomous vehicle, such as a car to respond to a dynamically changing environment. An autonomous vehicle relies on path planning and control algorithms in order to make a decision on which way to move based on sensor and visual data, but this can get complicated when other objects, especially moving objects interfere with a vehicle’s environment. The goal of our project is to enable an F 1/10 autonomous race car to avoid obstacles, making use of the various sensors the car has onboard, while building our own functionality on top of the existing system.
What it does
The car autonomously avoids obstacles primarily by using Lidar scan data to detect the largest region of free space to navigate towards. We keep the car traveling at a constant, moderate speed and only alter the steering angle in order to direct the car towards the region we want it to travel towards.
How we built it
This is mostly a software heavy project. We programmed the car using its microcontroller, the Jetson and most of our code is in the form of Python scripts. In our final version of our code, we utilize the following steps to avoid objects in the car's field of view:
Step 1: Receive Lidar scan data Step 2: Run average filter on data (convolution) Step 3: Find closest obstacle using the distance data given by sensor Step 4: Find all scan points that are above a certain threshold distance away from this obstacle Step 5: Go through this region of free space and find the optimal consecutive set of points within said region Step 6: Interpolate between these points and center steering angle Step 7: Change steering angle accordingly Step 8: Repeat
Challenges we ran into
One challenge we ran into early on was with our initial choice to use the camera mounted on the car to detect and avoid obstacles. This did not work well because the particular camera we were using could not detect objects less than a certain distance (approximately a foot) in front of it, which meant that as the car got closer to an object it would lose sight of it and stop trying to avoid it. Another challenge was when our car's electronic speed controller stopped working, which was a problem because it rendered us unable to drive the car. It turned out the issue was that the USB port on it had to be resoldered onto the board.
Accomplishments that we're proud of
We were able to accomplish all of our goals with this project, including our reach goal of autonomously overtaking another car. We are most proud of the fact that we were able to build a mostly stable path finding algorithm for an autonomous vehicle.
What we learned
We gained a lot of skills with this project, including learning how to use ROS, and getting a good idea of what goes into building an autonomous system.
Built With
- jetson
- python
- ros
Log in or sign up for Devpost to join the conversation.