Although the car was able to complete the entire path and make the turn, we recognize that there is room for improvements to our design. Specifically, an issue we often ran into was keeping the car straight on the path. The camera imposed limitations to our design in this way due to the poor quality of images taken during cloudy days and because the framerate of low resolution images was arguably slow. During our testing we found that the camera performed best in direct sunlight. We finely tuned our hsv values to work extremely well for these conditions, however, when a cloud would block the sunlight, the camera would not pick up any of the grass pixels. To mitigate this issue, we tried to find new hsv values for a cloudy day–but the images produced by the camera were quite poor, and made it nearly impossible to even see the grass in the pre-processed image. As a result, we were only able to run tests during sunny days. The image below shows the imperfection of our design.
The team’s choice to manually multithread the python program as opposed to setting up ROS for sensor management worked for the low number of sensors the team was using. However, had the team decided to implement many more high latency sensors in addition to the camera, the manual programming necessary to manage these new sensors would have been cumbersome. To manage this change with the current program design would have required the management of 3 or more different asynchronous program threads. Considering the team’s Raspberry Pi has only 4 cpu cores the management of these program threads would become significantly more complex the more sensors were added to the system. The best way to manage a system with greater numbers of sensors would be to set up and utilize ROS.
In the Future
If future research is done, more work with the PID and encoder could be very beneficial to increasing the speed performance of the PiCar. We were able to get the PID controller working, it allowed us to change the speed of the car at a controlled rate. However, because of time limitations, we were not able to implement it into our final design. The PID and encoder would have best been used after the turn, as the sidewalk was easier to navigate and so the speed could have been increased.