Arm
A robotic manipulator will be on top of each roomba, attached to an acrylic resin platform. The manipulator will be a CrustCrawler AX-12 Smart Arm, sold by CrustCrawler, with three degrees of freedom plus two in the gripper, controlled by seven Robotis AX-12+ servo motors.
The manipulator's specifications can be found at the CrustCrawler website.
Arm Control
To control the AX-12+ Servomotors, was used the USB2Dynamixel controllers, plugged to the eeePC Netbooks. To write the Software that controls the servos, we use the USB2DXL Linux SDK, available for download Here, at Robotis website.
In order to acquire a better control, a library was created to control the arm. The library have functions that makes easier to control and make possible to control the arm by its position, not by each servo's angle. The library, with its instructions and its list of functions, is available for download in its Subversion repository, here.
To install the USB2DXL Linux SDK, just follow the instructions in it's download page. If you're having difficulties in modifying the FTDI Chip Driver configurations (the first steps in the instalation), you can just ignore this part. The libraries will still work, but with lower communication speed. Include the libraries, as well as the SDK, in your project files.
Arm Calibration
Although the manipulator's dimensions are specified in its specifications sheet and it is possible to read the motors' angles from their drivers by software, calibration is needed to obtain higher precision for the manipulator. The calibration will be done by image analysis. In each joint, will be placed a fiduciary marker, with its center aligned to the joint's axis. A camera, plugged in a computer with an image analysis software, will scan the manipulator placed in four poses. Then, with the image analysis software, the coordinates of each joint will be displayed. Thus, we will have the theoretical and the real coordinates of each joint and that can be used to determine the difference between the nominal angles and dimensions and the real ones for each joint. The data obtained by the calibration will correct the angle of each servomotor when controlling the robot.
Mathematical Model of the Manipulator
To simulate the operation and to make easier the calibration, a mathematical model is required for the manipulator. You can do it manually, using Inverse Kinematics, but it requires a lot of time and knowdlege and you'll have to do it all again if you want to modify the manipulator. Easy ways to do it are using tools that altomatically do it, provided the Denavit-Hartenberg parameters. Examples of these tools are the Robot toolbox for Matlab, by Peter Corke, and the OpenRave software. Both of them Open Source and available for Download.
Robot Toolbox for Matlab: http://petercorke.com/Robotics_Toolbox.html
OpenRave: http://openrave.programmingvision.com/ We are having some trouble compiling and installing OpenRave on Ubuntu 10.04. Some repositories names have changed and a fatal error is ocurring in the final of the compilation. A bug report have been submited to ProgrammingVision and we are waiting for an answer. So, althrough OpenRave is a more powerful environment for planning and simulating robotic manipulators, we are using the Robot Toolbox temporarilly.
To make a model of a manipulator using Peter Corke's Robot Toolbox for Matlab, you just need the Denavit-Hartenberg (DH) Parameters. In our case, those would be the parameters:
alpha | a | theta | d | |
---|---|---|---|---|
Link 1 | pi/2 | L1 | theta1* | BASE |
Link 2 | 0 | L3 | theta2* | 0 |
Link 3 | 0 | L2 | theta3* | 0 |
(asterisk marked parameters are variable)
L1, L2, L3 and BASE values are specified in the following image.
In the libax12arm SVN repository, there's an .m file called “ax12armcalib”. Add it to your MATLAB path, and execute to create a kinematic model called “ax12arm” already with it's dimensions.