Nuisance V1 - Lessons Learned

  • Bumpers - Soft bumpers are essential, especially during debugging and development phases. Even so, I still ended up with many marks and scrapes on the walls.
  • Weight distribution - Originally, the drive wheels were much closer to the center of mass. This was fine unless stopping quickly or accelerating quickly in reverse. I moved the wheels forward and that helped a lot.
  • R/C signal interference - The older FM R/C radio/receiver I have is susceptible to interference. With the radio off but the receiver on, I got many false signals. I used some software filtering and a minimum number of required good pulses to work around the problem.
  • Isolation of power leads on Sabertooth - The Sabertooth puts out its own Vcc even on the input connectors. This caused power problems when interfacing with the Axon since one was powered by 12v and one by 6v. To get around this, I simply removed the Vcc connector pin from the housing on the Sabertooth inputs.
  • R/C pinouts - Older R/C servos had many different kinds of connectors each with its own pinouts. I had to build customer connectors to convert from these to the current universal connector.
  • Servo pulse requirements - Each servo has different requirements for pulse width. This is especially true of older servos from before the move to a universal standard. I also found that the HiTec HS-422 servos that came with the pan/tilt module are also not standard. Rather than the standard 1ms - 2ms, they required .5ms - 2.5 ms to get full range.
  • Alignment - When I moved the wheels forward, I did not dismantle the robot completely, so I was not able to use my precision tools to mark and drill the new motor mount holes. The end result was a slight misalignment causing a left turn when told to go straight. I was able to correct the alignment with shims.
  • Unplug USB before moving - The Axon USB connector was not able to withstand the violent force of yanking the USB cable out sideways when moving the robot off the desk before unplugging the cable. With help from SoR Admin, I was able to glue it back down and re-solder the connections. I now have a big orange ribbon attached to the cable so I can't miss seeing it when moving the robot.
  • Personality - Until I get the camera, I have put a purple-haired troll head on the pan/tilt module. I found people were much more at ease and interested in the robot with the head attached. It can now "look" around and appears to have a limited personality. If nothing else, it is fun to watch.
  • Limitations of Omniwheel - While the Onmiwheel is a great solution for smooth surfaces, it does not work well in rough or soft surfaces or with small obstacles. I am considering a large swiveling caster or going to 4WD to solve this issue.
  • Turn off as many interrupts as possible during servo pulse output - When may interrupts are enabled, the software servo code can produce pulses of different durations. This causes significant jitter in the servos. I redefined the servo macro to turn off the external interrupts during the output pulse.
  • Timer overflow counters - I found that the timer overflow counters depend on global interrupts to function. I initially turned off all interupts during the servo pulse, but found that this cause many problems. The most noticeable was with the Ping input routine that uses timer0. The overflow counter was not getting updated, so at approximately 10' the timer would overflow but my calculation would not see the overflow and think the distance was close to zero.
  • Limits of sensors - If fired too quickly, the Ping sees lots of ghost returns. Slowing down the rate of firing helped considerably. Also, the Ping has a wide field of view, so this needs to be taken into account when mapping the point on the map. I solved this by mapping 3 points for each return on the Ping: left, right, and center of the current servo angle. Also, none of the sensors are picking up objects above or below their level. This causes the robot to run into desk chair legs, furniture with rails, and to try to drive under the bed only to hit its head. I am going to use some whisker switches to try to detect some of these objects and plot them on the map. Pillows and blankets are also not detected well.
  • Sabertooth R/C sensitivity to base period - The Sabertooth R/C is not nearly as forgiving as normal servos to the base period of the PWM input. If the pulses are a bit late or too far apart, it will randomly change the output to the wheels. To correct this, I used the hardware PWM functions of the atMega640 to drive the PWM to the Sabertooth.

[Next] [Back to index]