Enviromentally Friendly Wild Thumper
- Control method: Autonomous / Remote
- Power source: 2x 5000mAh, 7.2V NiMh battery packs
- Programming language: Arduino C
- Target environment: Outdoors
Recently my company has been asked to demonstrate a robot that can perform an enviromentally friendly task. I only have about 1 month to complete the robot and I'm not sure what it will do yet. I decided to build a robot that could perform many different tasks and then it should just be a matter of programming it.
As all the ideas I've had so far are outdoor activities I decided I had to use a Wild Thumper 6WD chassis.The ideas so fare are:
- Water conservation on farms by mapping out a field using GPS and moister probe to determine when to water crops.
- Collecting soil samples tagged with GPS locations to look for contamination near factories.
- Planting seeds or saplings.
I've installed 2x 7.2V NiMh 5000mAh battery packs. A Wild Thumper high power switch on the back controls power to the robot. This switch can be remotely controlled using either a 3.3V or 5V logic signal making it possible for the robot to be turned on or off by a low power receiver.
I want this robot to be able to pick things up so i decided I wanted robot arms. I have put a 6DOF robot arm on a 6WD before but I wanted this arm to move more like a human arm so I modified a DAGU 6DOF robot arm to make it a 7DOF robot arm. I need to build a second arm.
The torso of the robot is made with 2 top decks from a 4WD Wild Thumper. The front section can be removed for easy maintenance. Inside the torso is a Spider controller which will control the two arms. A heavy duty servo shield allows the servos to be powered directly from the 7.2V batteries.
Behind the Spider controller is a second high power switch. This switch is controlled by D12 of the Spider controller and switches power to the arm servos. This allows the Spider to initialize the servo pins before the servos are powered up. This prevents random and sometimes violent twitching that can occur when servos are first powered.
By the time I added the second arm it was obvious that the front suspension could not handle the load. I had considered just adjusting the original suspension to full hardness but as the two arms are so heavy I decided to double the springs instead. I drilled extra holes to remount the cable in a new position.The entire robot is now about 6.1kg with the arms and torso being 2.5Kg.
The arms are made from 3mm thick aluminium and all the servos are metal gears. The gripper and wrist rotation servos are small and only rated at about 2.5Kg/cm each. The other servos are 13Kg/cm each except for the shoulder servos which are 40Kg/cm. Each arm has a span of 500mm from shoulder to claw tip.
Originally I tried mounting 4x HC-SR04 ultrasonic rangefinders on the chest of the robot to track objects within range of the arms but the field of detection for the ultrsound sensors is only about ±15° so it became obvious the sensors needed to move and track objects in range.
I have now added a pan / tilt assembly and made a simple head with the sensors mounted about 100mm (4 inches) apart. The first video shows my first attempt to track my hand movement. The readings from the sensors have a lot of noise which is made worse when the head moves so I need to experiment some more with noise filtering (currently I average the last 10 samples) and maybe some PID control. After spending half a day trying to improve the tracking I have left it where it is in the second video.
The big problem with the ultrasound is the relatively narrow detection range of the sensors. When an object is in range and detected by all 4 sensors then the difference in readings is very slight due to the 100mm difference in spacing of the sensors. As soon as the object gets too far to one side, The readings from one or more of the sensors change abruptly.
this is a simple test of the I²C communications in this robot. Speed and direction are determined by the angle of the pan servo and the distance between the robot and an object. The robot attempts to turn and face the object while maintaning a certain distance.
The Spider controller is the I²C bus master and the Wild Thumper controller is the I²C bus slave. The master sends 5 bytes of information to the slave. These bytes are:
- acknowledgment of battery status
- left motor direction
- left motor speed
- right motor direction
- right motor speed
If the Wild Thumper controller does not receive these commands regularly (at least every 200mS) then it will assume a bad I²C connection and ramp the motors speeds down to 0.
The third video shows my second attempt at "follow me". The First attempt failed due to flat batteries. I need to find the right balance between responce to changing sensor inputs and ramping of motor speed. As I am using 75:1 gearboxes, ramping the motors speed is important. The high gear ratio means it is possible to break the metal gears by forcing the wheel to turn against the motor.
I've added a small switch that connects D11 to either Gnd or Vcc. The code uses the state of D11 input to enable / disable the "follow me" function.
With Maker's Faire ShengZhen coming up fast I needed to get the arms working quickly. Video 4 shows some simple code running so that when an object is within 200mm to 500mm the arms will reach out towards it. This code only operates 4 of the 14 servos and is controlled by the tracking. Unfortunately, because the tracking is jittery the arms shake a bit as well.
Later I will try to write some simple "inverse kinematic" code for the arms.