During the summer of 2016, I worked at a series A startup as a software engineering intern on application development, computer vision, and robotics.
For a mobile robot (including any self-driving vehicle), the ability to navigate in its environment while avoiding dangerous situations such as collisions and unsafe conditions (temperature, radiation, exposure to weather, uneven surface, etc.) is critically important. Autonomous navigation or semi-autonomous navigation (such as the so-called “follow-me” function) requires a robot to determine its own position and orientation within the frame of reference or coordinates (i.e., localization) and then to plan a path towards some goal location (i.e., path planning).
The follow-me function of a mobile robot is an important and useful function. With this function, a mobile robot can carry heavy items for a user and follow the user to move around. Also, the follow-me function can serve as a mechanism for training the mobile robot. For example, a user can use the follow-me function to train a mobile robot to learn a particular navigation path so that it can navigate the same path autonomously.
One way of implementing the follow-me function of a mobile robot is to determine whether the distance and/or orientation between the mobile robot and the user has changed. If so, the mobile robot will move accordingly to maintain the same distance and/or orientation with the user. Although this mechanism is easy to implement, it makes the mobile robot too “sensitive” to the user's movement, no matter how small the movement may be. Thus, it may cause the robot to move unnecessarily and/or unnaturally sometime, therefore affecting user experience and consuming unnecessary battery power of the mobile robot. Furthermore, if a mobile robot is too “sensitive” to a user's movement, it could change its position, speed, or state too abruptly, therefore can pose a potential physical threat to people nearby.
Thus, a new and better follow-me solution is needed to allow a mobile robot to shadow a user's movement more naturally and smoothly and avoid abrupt changes of direction or motions. See patent application for more details.
Using C++ and OpenCV, I created a decision-making module for a robot to autonomously track a moving person, and collaborated with the engineers and researchers to improve and test code, as well as:
presented the technology to stakeholders, investors, and vendors
collaborated with design team to create an Android application