A few days ago I had the last components of my machines installed and the last pieces of code downloaded on the on-board computers. Seeing my creations finally moving without the need of external cables is quite a rewarding sensation. Well, thoughts like “will it be in one piece after the first test run” crossed my mind a couple of times. In the end it was all good (except for a few screws that keep unscrewing in time no matter to what lengths I have gone to keep them in their places).
The only thing left to do was a test drive, and so i did it.
The test run
I have done some tests using the web controls on all separate elements and didn’t expect any surprises, so I directly jumped to try to First Person Control mode. In this mode, all the standard commands are connected to shortcut keys on the keyboard and the movements of the mouse. Similar to a computer game, the arrow keys are used to move the chassis and the mouse is used to control camera direction.
Doing some basic actions with the machine was easy. Just move the mouse pointer to the left, and the camera will turn left. Move it in circles and the pan/tilt mechanism will move in circles. However, making some complex and meaningful actions have proven to be a bit more challenging.
One reason for that is my poor piloting skill. Another one is the 150-200 milliseconds lag between entering the command and receiving the visual feedback from the camera. When moving slowly, the lag is not a problem. But as the speed increase, the pilot have to take into account that anything he/she sees in the camera panel is about 200 milliseconds in the past. In other words, when you give the stop command, the machine might already be falling from the table.
Same problem goes for the camera as well. The servos on the pan/tilt mechanism can rotate quite fast. When they are at full speed, moving from one end of the limited rotation space to the other can happen a few times in a second. Event thought I have limited the rotating speed to about 100 degrees a second, the lag can still result in about 20 degrees more rotation until the stop command is given.
I’d like to think of these little machines as my “Hello World!” in the world of robotics. In other words, it’s just a starting point. During my work on both machines, I learned a lot. But in order to move to the next level, there are still many things to be done and a lot of new skills to be gained:
- Fix the model – With the current programming model and used technologies, there is a large lag between commands and actions. Another problem that I am facing is the slow performance (able to process up to 15 images from the camera at resolution 320 * 200). And let’s not forget the horrible control station. To fix this, I will have to rethink a lot of the software.
- Research the existing software – I have written most of the code in this project from scratch. However, there are a lot of existing open source libraries that can greatly help with the development of robots. One logical next step is to research them.
- Last but not least – To make an autopilot mode that follows different predefined scenarios. As seen in the video, I am a horrible pilot. Having an option to record and then replay all of the movements from a session, will be very helpful in a various situations. The one that is on top of my mind is shooting a new video. With this they wont have to rely on me to control them (yep … even they think it’s a bad idea).