Tutorial: Robot Safety
From Tekkotsu Wiki
Educational robots are not indestructable. The two principal dangers people need to be wary of are: (1) uncommanded motion, and (2) joint wear.
Uncommanded motion means the robot moved when you weren't expecting it to, or in a manner you didn't expect. For example, if the robot is sitting next to your keyboard, and you use the ControllerGUI to activate some "chase an object" behavior, the robot may happily run right off the edge of the table, and probably sustain serious damage. To prevent this, it's a good idea to keep the robot pointed away from the edge of the table. When you do want the robot to move, monitor its motion so that it doesn't walk face-first into a wall or get trapped under a chair caster. Continuous motion against an obstacle (like trying to walk through a wall) puts unnecessary strain on the motors.
If you would prefer to work with the robot at tabletop level, it's a good idea to do so using a robot-safe "playpen" with walls around the edges so it cannot get into trouble. such as the one shown at right.
Tekkotsu's "Emergency Stop" (E-Stop) mode can be used to stop the robot if it is heading for trouble. Click on the Stop/Go icon in the ControllerGUI window to toggle E-Stop mode. For robots based on the iRobot Create, lifting the robot off the floor will activate the "cliff detector" and put the robot into E-stop mode. When the robot enters E-stop mode it plays a squealing brakes sound.
Joint wear is inevitable in mechanical systems, but it can be minimized by avoiding actions that cause stress on the components. If you have a legged robot, keep it on a carpeted surface, as walking on concrete or tile causes increased shock to the legs. We use indoor/outdoor carpeting with a thick carpet pad underneath.
When programming motion commands that move the robot's head, legs, or arm, do not make rapid or jerky motions, as the sudden acceleration and deceleration increases stress on the joints. There are hardware and software speed limits on joint movement, but the limits are fairly liberal; it's up to you not to abuse them. You can find the limits in, e.g., CalliopeInfo::MaxOutputSpeed, expressed in radians/second.
To control the speed of motion in a MotionSequence motion command, use setPlayTime(). To control it in a HeadPointerMC or ArmMC motion command, use setMaxSpeed().
Also avoid excessive repetitive motion. Making the robot bob its head up and down is cute; having it bob repeatedly for thousands of cycles, until the battery runs down, is not a good idea.