My first idea for the midterm was the ‘Trash Can Keeper’ but I found it would be too tough for the midterm project and changed my plan to build an autonomous robot that is claustrophobic.
The robot always tries to find and move forward ‘open area’ by scanning obstacles such as walls and pillars. The range sensor rotates, switching its rotation direction (clockwise <-> counter clockwise), gathers structural information surrounding it and finds out an optimal path to the new place. When it fails to find bigger area, it stops moving.



The robot has three servos and one range sensor. Two servos are for wheels and one servo is used to rotate the range sensor. Theoretically, the robot can move only after one whole scanning is done but as I designed the robot’s moving and sensing happen simultaneously, the sensor rotates at the servo’s maximum speed and the robot moves much slower than that. The measured distance data is sent to the Processing via the serial communication to visualize the radar map.

The prototype has basic functions though: Moving, rotating sensor and accumulating received data. Formulating a radar map and finding the path functions should be completed followed by accurate&intensive tuning.
The biggest problem is that the AVR MCU has only 2 KB SRAM, which is a lot smaller than I’ve expected. The analog-to-digital conversion speed for the range sensor is almost 10KHz and it takes around 1.1 second for one rotation. That means I can make use of approximately 11000 integer samples (= 22KB) which are appropriate, I think, to find paths but there’s no way to save this data. However, as I think deploying external SRAM is out of the scope, I’d like to both decrease the sampling rate to around 1~1.5KHz by inserting delay() functions and convert integer values to unsigned char scale. As I haven’t tested this yet, I have no idea how much the accuracy will be deteriorated.
Another problem that I don’t know the reason is unidentified resets. Whenever the robot is powered on, it is reset several times. I think I had better check the noise level on GND and +5V lines with an oscilloscope first and try not to use Arduino codes because they are too abstracted.
The last concern is that I have to think about the path finding algorithm. I’d like to try to find the optimal path by making use of all collected data around the robot not to make one that just avoids obstacles only in front of its moving path.
hi Hyung,
It seems that you’ve set high ambitions and struggled with the technical aspects of the project, rather than concentrating on the creative/expressive possibilities of the robot-creature. It would be good to see you take the robot’s behavior further conceptually and programmatically. From the technical perspective, your mechanism of using photointerrupters as stop triggers for the sensor head rotation is pretty clever.