Saturday, June 29, 2013

Larger Arduino robot platform

I started to build a larger platform for my robot. The old platform has three levels and is quite packed with sensors and cables. Since most cables are connected to the Arduino board, I need to dismantle most of the robot when I make changes. Also I wanted to be able to make distance readings in all directions
The old robot is packed with sensors.
I made cardboard templates for most of the hardware to be able to play with layout a bit easier. I decided to make the robot round-ish but ended up making it an octagonal-ish. With centered wheels so it will turn around its center. 
The third wheel is placed on one side and weight is distributed accordingly.

Plywood with cutouts for wheels and cardboard templates for parts
Parts:
  • Plywood 30*30 cm
  • Raspberry Pi Model A
  • Arduino Duemilanove
  • LiPo battery
  • H-bridge 7.4V  3300
  • Power converter
  • 2 * 6V geared motors
  • Servo
  • 2 * IR Sensors Sharp GP2Y0A02YK0F
  • 2 * Ultrasonic sensors HC-SR04
  • Compass HMC5883L
  • Accelerometer and Gyro MPU6050
  • USB-Hub

Before dismantling the old robot 
Lots of parts and cables, My Raspberry Pi model A to the right
The old robot was dismantled in order to find more precise measurements for drilling.

Testing layout with real hardware instead of cardboard
I intend to make distance measurements in all directions. I have mounted two IR-distance sensors and two ultrasonic sensors on a piece of wood. It is going to be placed on top of a servo. An unsolved problem is that I must be able to shut the sensors on and off independently since I have noticed that they interfere with each other.
The new two directional sensor IR and ultrasonic
Most parts are assembled and I have glued the support for the third wheel as well as the servo.

Now waiting for the glue... to be continued...


Thursday, June 20, 2013

Odometry Sensor

Home made optical encoder odometry sensor.
I want to improve the dead reckoning ability of my robot and I intended to build my own odometry sensor for this. A rotary encoder seemed simplest and i bought a IR-cheap sensor for the purpose.


The sensor has been tuned so it senses the relative color of the backside of the wheel and I drew a black and white circle encoder for the backsides of the wheel.

Unfortunately I get very bad results. The sensor is not really intended for this. I have adjusted it so its very sensitive to the black and white color changes but I guess the motors interfere with the measurements.

I think I'm going to buy a better sensor and perhaps new motors.

I also found this resource giving a good overview of odometry sensors.

Wednesday, June 19, 2013

SLAM with imperfect sensors

SLAM from 5 positions joined into a best belief map. Red is particle filter position likelihood estimation.  Green lines are Sonar and yellow are IR distance readings. Rectangles + line shows old and current poses. Circles are 10 cm apart.
I have been very sparse with my blogging but I'm actually getting somewhere with my SLAM attempts. I can now combine sensor-readings from multiple location and the robot moves between poses.

The sensor-readings consists of IR and Ultrasonic distance sensors on a servo taking readings 1 degree apart. resulting in 170 distance readings per pose. I have a compass but I'm not using it right now. These sensor-readings are used to estimate the new position using a particle filter.
Robot with LiPo battery. IR-sensor and Ultrasonic sensor on a servo in the front.
My biggest problem right now is that the sensors behave a bit uncertainly, not just noisy but also depending on material, angle and size of the object you get different readings. I have tried to mediate this by combining the IR with the ultrasonic.

IR has small angle but is sensitive to reflective, transparent and luminescent materials. It also behaves badly on striped materials. And my IR sensor also works ok between 20 and 100 cm.

Ultrasonic sensor has wide angle 15-20 degrees, is quite precise, works on most materials that I know of but is sensitive to steep angles.