15-494/694 Cognitive Robotics Lab 10: Collision Detection
I. Software Update, SDK Update, and Initial Setup
Note: You can do this lab either individually, or in teams of two.
At the beginning of every lab you should update your copy of the
cozmo-tools package. Do this:
$ cd ~/cozmo-tools
$ git pull
II. Collision Detection
A recent upgrade to the Cozmo SDK introduced an attempt at collision
detection by comparing what the wheels are doing with what the
accelerometer is sensing. If the robot isn't moving the way it's
supposed to, the SDK signals EvtUnexpectedMovement. In cozmo-tools
this is turned into an UnexpectedMovementEvent object. Run
the Lab10Demo.fsm demo and then
use Forward(100).now() to drive Cozmo into an obstacle,
which should generate some unexpected movement events.
Now read the documentation for the
SDK's EvtUnexpectedMovement
class to understand what information is available.
Unfortunately, the movement_side event parameter will
always be "unknown". Why? See the documentation for
cozmo.robot.UnexpectedMovementSide.
III. Reaction Triggers
Do robot.enable_all_reaction_triggers(True) to enable
reaction triggers. Now driving the robot into an obstacle with
Forward(100) will show the movement side as "Front".
- What sort of motion will generate events where the movement
side is "Back"? Try your idea and see if it works.
- How can you generate events where the movement side is "Left"
or "Right"? Try your idea and see if it works.
- Can something like
Turn(90).now() ever generate
unexpected movement events?
- You can use a DriveArc node (defined in nodes.py) to make
Cozmo drive in an arc. What unexpected movements are detectable
when driving in an arc?
IV. Gyro and Accelerometer
Cozmo's 3-axis accelerometer detects the gravity vector, from which pitch,
roll, and yaw angles can be inferred. His gyro detects angular
acceleration. The variables robot.accelerometer
and robot.gyro give the current readings of these
sensors.
Run the ShowAccelGyro.fsm demo
and see how these values change as you move the robot.
- What are normal values for these sensors when the robot is standing
still?
- What are normal values when the robot is driving forward at a steady rate?
- What are normal values when the robot is turning at a steady rate?
V. Practical Collision Detection
Develop a simple demonstration of a situation where collision
detection is useful. Here are some scenarios to consider:
- Cozmo is presented with a wall with two doorways. The doorways
have swinging panels like the entrance to a saloon in an old
Western movie. (You can make these panels from paper taped to
each side of the doorway.) Behind one door is an obstacle, so
the panels won't swing to let Cozmo through. Behind the other
door is nothing, so Cozmo can push the panels aside and go through
the door. But he doesn't know which door is which. You could use
collision detection to determine if Cozmo makes it through a
door successfully.
- Cozmo goes to pick up a cube, but there is an obstacle he
doesn't visually detect. When the effects of this obstacle are
felt, he could attempt a recovery by moving to a different
location, turning toward the cube to accurately locate it again,
and repeating the pick up attempt.
Hand In
Hand in the code you wrote in part V.
|