Aum is a robot testing platform where we are developing different basic robot modules to be used in future projects that we already planning. It tries to be autonomous, (it is, but quite dumb).
The main idea of Aum 1.0 is to ve a “body” controled by an Arduino, and a “brain” controled by a Android cellphone.
We consider that almost any robot needs basic functionality to be able to start doing something usefull. This is the list we have today.
- Autonomous obstacle avoidance (Almost achieved)
- Remote navigation (Ongoing, using gamepad)
- Environment Mapping
- Going to base to recharge
- A better and resistant platform
- Nahuel Taibo
- Ariel Saban
- Adrian Claret
The code of the project is hosted in Assembla, and it is open: https://subversion.assembla.com/svn/aum-robot/
The robot is based on a kit bought on DealExtreme, (when we still where able to import things to Argentina…) The kit consits in the two plastic layers, 4 motors, 4 wheels, the H bridge to control them, and an Arduino Uno. We have two of there kits, so soon we will have to Aums moving through the office.
We are working on an Arduino Uno. It is the responsible of handling the motors and range sensors.
The Arduino code basically establishes a serial connection with the Brain, and after that sends sonar measures and respond to the requests from the Brain, like moving motors at some speed in some direction.
We are using a Samsung Galaxy S2 as brain, and it is responsible for desition making.
Being software developers, we deside to use Android to be able to make a better code.. at least that was the initial aproach, I am not sure if we where able to achieve that objective.
The Brain uses the library usbSerialForAndroid to comunicate with the Body through a usb OTG cable. The library has a good example as how should the Java code be written, and also an Arduino example app, that can be used as starting point.
These are some of the most important classes we have and its responsibilities
This class inherits from thread, and it is the main entry point for the robot. It contains the main loop.
It creates and replace the Behaviors
For us, a Behavior is a way of behaving that the robot knows, an example can be
DefaultBehavior: Navigate the robot’s environment without colliding
JoystickBehavior: To enable the remote control of the robot, with a PlayStation Joystick
IddleBehavior: It should stay still doing nothing
The idea is that we introduce a new way of behaving for the robot, (ie follow light, navigate with GPS, etc) we would implement a new Behavior, so the code keeps clean. The behavior can also switch to another behavior if it considers that it is necessary. (ie: the robot is navigating with GPS, and finds a human pressence and needs to avoid it…)
This is the class that represents a message from to the Body. It has a message code, and its parameters (depending on the message code.
Is the responsible to move the robot. We created this abstraction to ba able to handle changes in the speed, for example it is not the same to set the speed directly to full trust, than to make the change gradually, to avoid something to fell from the robot.
This class handles the communication with the robot. We have a ArduinoHardware that inherits from this Interface, who knows what our body can do, for example change wheels velocities, receive the sonar measures, etc. It also can call Android code, to get for example the compass measures, camera, accelerations, etc. If we for example change to a electronic compass on the arduino, then we should change the way we get this information only in this class.
Maybe it is too complex for the things that the robot really does, but well, we are thinking on getting this code bigger and bigger, so we help this structure help us.
If you have ideas to improve its structure, and make it more understandable, we are more than happy to listen 🙂
As I give Aum 1.0 as a gift to a friend, this project is now considered completed, in the status it is 🙂 I will start focusing in my third Robot now.. post will be added as soon as I have something to show.