CoroWare CoroBot
The CoroWare CoroBot module provides an interface to the CoroBot robot created by CoroWare and distributed
by RoadNarrows. The CoroBot is a PC based
robot that is capable of running RoboRealm onboard (WinXP version). The robot is constructed using
several standard interface cards that allow the PC to communicate to the underlying hardware using
both serial and USB connections. The CoroBot uses the Lynxmotion SSC for motor and arm control,
the Phidgets Encoder board for motor encoders and the Phidgets 888 Interface Kit to read the
battery voltage, gripper switch and front/back IR distance sensors.
While the CoroBot module provides connection to all the required boards to command the robot you can also disable
the appropriate segments and instead add in the full board modules supported by RoboRealm if you need lower
level interfacing or require more aspects of that particular board. For example, if you need to add additional IR sensors
you can disable the Sensor group in this interface and add in the Phidgets 888 Interface Kit board
to provide you with the current 4 sensors (Battery, Front/Back IR, Gripper Touch) and any additional
channels you may need.
The CoroBot contains a full PC, therefore all other modules within RoboRealm such as the Play Wave File
and Speech Recognition will work with the appropriate attachment of speakers, mic, etc.
Interface
Instructions
1. Motors - Select the checkbox next to "Motors" to enable the motor channels.
To test the motors slowly move the
appropriate sliders. If everything is
working the motors should slowly start to move. If this does not happen check that your SSC
is connected and configured on COM2.
If the motors move you can then select a variable (or type one in) that will be populated
from another module that will contain the values to send to the CoroBot.
1500 is considered neutral whilst 1000 and 2000 are the opposite backward/forward extremes.
When a variable is selected the slider and value controls will be disabled to indicate that
control is now performed through the use of a variable.
You can change the Min and Max values for the motors. This will ensure that regardless of
the variable's value that the motors will never be sent a command beyond those limits. You can
tighten the limits to 1250 and 1750 to ensure that the robot moves slowly regardless of variable
errors.
Keep in mind that the CoroBot runs both wheels on either side at the same speed. So to pivot
set one side to a value higher than 1500 and the other side to less than 1500. Speeds
while moving forward versus turning will differ due to the stress placed on the wheels when
turning. Also keep in mind that the CoroBot runs better over floors than carpet largely due
to the wheel friction during turning on carpet.
The Motor commands are passed to the Lynxmotion SSC to perform the actual servo movements.
2. Enable PID - Enables Proportional, Integral, Derivative control over motor movements. This
formula will adjust the actual motor values to be different than that of the desired motor values
to ensure that the motors are actually moving in such a way that best represents the desired
speed. For example, if you are traveling along a flat surface with motor speeds set at 1300 (slowly
forward) and suddenly encounter a hill this slow speed will not suffice to get the robot over the
hill. With the PID loop enabled the lack of actual motion will be sensed by the reduced encoder
count and cause the actual motor values to increase such that the encoders continue to report
the same count. Thus the robot will not slow down when encountering a hill. See Wikipedia for more
information about PID loops.
3. Arm - Select the checkbox next to "Arm" to enable the optional Lynxmotion Arm controls. Please note
that as the arm moves beyond its actual abilities increasing X or Y may cause the arm to move in
unexpected ways. Also note that it is possible to position the arm in a destructive position such as
against the robot or below the floor. The following controls are very unrestricted and limits should
be reduced depending on your application to prevent the arm from damage.
The Arm commands are passed to the Lynxmotion SSC to perform the actual servo movements.
4. Arm X - Select or type in a variable that will contain the desired X location of the arm.
X is always positive and moves the arm horizontally parallel to the floor plane. The numbers specified
are in millimeters. Modifying the X location will change the Shoulder and Elbow angles
accordingly (inverse kinematics).
5. Arm Y - Select or type in a variable that will contain the desired Y location of the arm.
Y can be negative (touching the floor) and moves the arm vertically. The numbers specified are in millimeters.
Modifying the X location will change the Shoulder and Elbow angles
accordingly (inverse kinematics).
6. Arm Wrist - Select or type in a variable that will contain the desired wrist degree that ranges from -90 to 90
with 0 being horizontal.
7. Arm Gripper - Select or type in a variable that will contain the desired width of the gripper
that ranges from 0 (Open) to 254 (Closed).
8. Arm Shoulder - Select or type in a variable that will contain the desired shoulder degree of
the arm. Changing this value will change the X and Y location of the arm accordingly (forward kinematics).
9. Arm Elbow - Select or type in a variable that will contain the desired elbow degree of
the arm. Changing this value will change the X and Y location of the arm accordingly (forward kinematics).
10. Arm Speed - Select how quickly that the arm will move. Higher millisecond times will case the arm to
move slower. Smaller times will cause the arm to move faster but become much more jerky when moving
due to servo torques.
11. Sensors - Check the checkbox to enable sensor readings. The Sensors use the Phidgets 888 Interface Kit
to read the appropriate values.
12. Front Sensor - Select or type in a variable that will contain the IR sensor reading in the front of the robot.
This sensor will typically range from around 0 to 500 with 500 being very close. Once objects pass
nearer than the 500 mark the values may actually decrease slightly before the object contacts with the robot.
13. Back Sensor - Select or type in a variable that will contain the IR sensor reading in the back of the robot.
This sensor will typically range from around 0 to 500 with 500 being very close. Once objects pass
nearer than the 500 mark the values may actually decrease slightly before the object contacts with the robot.
14. Battery Sensor - Select or type in a variable that will contain the battery voltage. The voltage will range
from a peak of 12 volts down to zero (note that the robot will stop functioning well before 0 is reached!).
15. Gripper Sensor - Select or type in a variable that will contain the pressure value of the touch sensor
within the gripper. A value of 1000 means the gripper is very securely closed with a value of 0 meaning nothing
is touching.
16. Encoders Left/Right - Select or type in a variable that will contain the left and right encoder values
read from the motor encoders. These values are also used internally by the PID loop to ensure constant
motor movement.
17. Rotate Image - Often the CoroBot camera is mounted upside down. Select this checkbox to flip the image over
for easier viewing.
Examples
It is HIGHLY recommended to place the CoroBot on a stand before accessing any of the below examples. Some
tests will require the joystick #1 button to be pressed in order to start but others will not. Thus accessing
any of the following examples and running them on the CoroBot may suddenly cause the robot to start moving
in a possibly hazardous direction.
Due to the high friction of the CoroBot wheels most of these demos will NOT work correctly on thick carpet
as the robot is unable (even with PID enabled) to pivot in place. Try it with the Joystick demo to see if
your carpet passes the test!
Joystick
Click Here to load a robofile that will allow you to drive your CoroBot using a joystick. When you load this configuration
you will need to edit the Joystick module to select which joystick to use to control the robot.
This robofile is configured for a playstation type of joystick with the first knob providing motion control. Moving
the knob forward/backward moves the robot forward/backward. Moving the knob left/right pivots the robot in
the appropriate direction (if not on carpet!). Moving the second knob forward/backwards moves the arm up/down (Y axis) and
moving left/right moves the arm forward/backward (X axis). Clicking buttons 6 and 8 opens and closes the
gripper with buttons 5 and 7 twisting the arm.
If you do not like the configuration we have chosen simply edit the Joystick module and change the
variables around to different buttons.
Once that is done have a safe and happy drive!
Laser Steering
Click Here to load a robofile that will allow you to drive your CoroBot using a red laser light spot placed in front of the
robot visible from the camera. You should adjust the camera to a higher location than
installed by default and angled down towards the floor in order for this example to work. The higher location of the camera will allow
more coverage in front of the robot. The default camera has a narrow field of view and cannot see much floor space
in front of the robot as installed.
By moving the laser forward the robot will move forward, placing the laser spot close to the robot will
cause it to back up. Moving it to the side will cause the robot to pivot. Be sure not to move the laser
too quickly and keep it within view of the camera.
Be warned that any spot lights maybe detected as laser lights and cause the robot to move at random. Be sure
to test on blocks before releasing the robot.
IR Avoidance
Click Here to load a robofile that will cause the CoroBot to avoid objects using the forward IR sensor. The strategy is
to run forward until a close object is detected, back up for a few encoder counts, rotate and then
proceed forward. Be sure to test this while the robot is elevated before committing the robot to moving
towards a wall!
Laser Line Avoidance
Click Here to load a robofile that will cause the CoroBot to avoid objects using a red laser line
as seen in the Laser line module. The CoroBot does NOT come with
a laser line and thus you will have to purchase one in order to use this example.
Using the red laser line (ideally in a low light situation) the robot can detect objects and turn to avoid
them with more reliability than using the IR detector. The additional reliability is due to the larger
field of view that is possible with the camera + laser line than what the IR detector will provide.
You should adjust the camera to a higher location than
installed by default and angled down towards the floor.
Keep pressing the Joystick button #1 in order for this demo to run. Releasing the button will cause the CoroBot to
stop.
Line Following
Click Here to load a robofile that will cause the CoroBot to follow a line using the build in camera.
You should adjust the camera to a higher location than
installed by default and angled down towards the floor in order for this example to work.
The line is ideally black electrical tape against a white floor. If you instead have a white line
on a black floor disable or delete the Negative module in this example.
Keep pressing the Joystick button #1 in order for this demo to run. Releasing the button will cause the CoroBot to
stop.
See Also
Lynxmotion SSC
Phidgets 888 Interface Kit
Phidgets Encoder
Rotate
For more information
RoadNarrows
|