Object Detection
Possible Algorithms
In order to successfully run the bike on the street, we need to navigate around obstacles. There are several parts to this objective, including classifying objects based on their movement and size, and creating algorithms to navigate around a type of obstacle. This paper by CMU provides background: http://www.cs.cmu.edu/~mmv/papers/05sbai-juan.pdf. In this method, the robot either follows its goal or follows the contours of obstacles. It calculates three different angles using a rectangle starting at the center of the robot and towards the angle intended. There are three angles, 0 degrees, which is immediately in front of the robot, 22.5 degrees, and 45 degrees, which is half-way towards the obstacle. Then, the robot picks an angle to follow from which follows the contour of the obstacle. Every 300 ms, the robot checks the direction of the obstacle and changes its heading accordingly. We are researching using this approach for our algorithms, and also other algorithms for obstacle avoidance.
ROS also has a package for obstacle avoidance, http://wiki.ros.org/teb_local_planner/Tutorials/Obstacle%20Avoidance%20and%20Robot%20Footprint%20Model. It uses cost factors and optimization weights with the distance to the closest point on the obstacle. The Robot Footprint Model estimates the size of the robot (or bike) using different shapes: point, circular, line, two circles, and polygon. Polygon approximation requires extra computation time and would reduce the bike's ability to respond to the obstacle while draining its battery.
We classified objects based on their size and their movement. We are working on traffic signals separately. For size, there are two groups, one where the obstacle’s diameter is less than the width of the sidewalk combined with the width of the bike, and one where the obstacle prevents the bike from moving on that path. We are currently developing Python algorithms to navigate around objects in these two groups. We receive a Point32 message of type geometry_msgs from vision, and that contains x,y, and z coordinates for the obstacle, which we can use to find the diameter of the obstacle. Then, to detect moving objects, we are researching neural networks to allow the bike to learn how to navigate around different moving objects through simulation. Another possibility is to create algorithms for categories of moving objects, such as small animals, mid-sized animals, and pedestrians.