InformationThis program was created as part of a three months work at University of Karlsruhe (Germany). It consists of a robot control program (μC), a 3d-visualisation program (PC) and the main control program (PC):
- Robot controller:
This μC-program reads and writes data from the servos and sensors. It supports linear and jolt-limited acceleration profiles, asynchronous, message-based communication with the pc-program via RS-232 and complete control of the Ax12s and AxS1s.
The viewer-program reads polygonal data from a shared memory and displays it on screen.
- Main control program:
This program controls the robot in a closed loop by sending messages to and receiving messages from the robot (the robot and pc have to be connected via the serial cable). See the feature-list below for a complete description.
- Supports both Windows and Linux machines
- Simulation mode (can be used without a robot)
- Supports custom robot configurations (the geometric and kinematic model, frames and collision objects can be configured in a xml file)
- Easy hardware and software configuration via PC (f.e. Ax12-, PID-controller-, timing-parameters, selection of a movement profiles)
- 3d-Visualisation of the robot (OpenGL)
- Forward kinematics (based on Denavit Hartenberg matrices)
- Inverse kinematics (analytic solution for custom humanoid and custom hexapod (see section robots), rudimentary numerical solution (transpose jacobian technique))
- Fast collision checking (Oriented Boundary Boxes)
- Online robot information in custom console (Linux only, needs ncurses)
- Fail-proof (CRC) communication via RS-232
- Scripting language: Complete control of the robot, extendable
- Capture (continuous and discrete), load, store and join robot movements
- Play motions with different interpolation types (linear, bezier (and splines) in cartesian and joint space)
- Point-To-Point movement in robot and joint space (can be mixed)
- Command system (f.e. walk, turnright)
- Supports Motion Editor files (thanks to Bullit)
VideosHere are some short clips I've created in the context of a discussion at robosavvy: S-Curves discussion.
All motions were created without parameter tweaking and without control of the max. torque and max. speed (which would produce smoother results):
- Comparison of:
- sinoidal s-curve (1x acceleration)
- sinoidal s-curve (2x)
- sinoidal s-curve (4x)
- sinoidal s-curve (8x)
- sinoidal s-curve (16x)
- Simple swinging motion (the two extreme positions were recorded (see next video) and a spline was used for interpolation):
Bioloid picks up a box:
Demonstration of simple playback (teach-in, kinaesthetic) programming:
- Robot stands upright (torque is enabled).
- Capturing begins: torque is disabled, so the limbs can be moved by hand.
- Every time my left arm is not in view I hit the return key and the current robot pose is stored (additionally it's possible to automatically capture a keyframe every X milliseconds).
- I record 6 keyframes one after another.
- After the "stand" script has been executed and the robot is standing upright again I play the motion (with linear interpolation in joint space).
- 6 steps forward (1x speed)
- 8 steps forward and left (1x speed)
- 20 steps forward and left (0.5x speed)
- 6 steps forward (1x speed)
Bioloid kneels down (written in custom scripting language):
- Bioloid swings his left arm. You can see the following interpolation types:
- splines in joint space
- linear in cartesian space
- linear in joint space
- Show by stevo3d (robosavvy forums) converted to own format (without timing parameters by BCP). It doesn't fit very well to my customized robot (robot falls at the end)).