Skip to content

Lab 8: Cozmo Manipulation

Maya Cakmak edited this page Apr 28, 2020 · 5 revisions

In this lab you will make Cozmo manipulate an everyday object, using a combination of programming and environment design, engineering, and low fidelity prototyping. Note that there is no starter code for this lab.


Step 1: Choose an everyday object that you would like to make Cozmo pick-up and place. The object should be light enough so it can be lifted by Cozmo, i.e. about the weight of the blocks that come with Cozmo. You will test two different strategies for enabling Cozmo to pick and place the object.

  • Strategy 1: Modify Cozmo's manipulator.
  • Strategy 2: Modify the object or the environment.

Modifications can be done with simple materials you find in your environment such as paper, tape, LEGOs, clay, among others. You are also welcome to take advantage of prototyping tools, such as a 3D printer, you have access to. Ensure that no permanent modifications are made to the Cozmo at this point (we might allow it for projects later). Two examples for picking up a pill bottle are shown below. Experiment with different designs by manually trying to lift the object to find the best option.

Cozmo with manipulator modification. Cozmo manipulating a modified object.

Next you will design two robot actions to (1) pick up and (2) place/drop/release the objects with each of the two strategies (i.e. four actions total). You do not need to implement object perception capabilities for this lab; you can assume that the robot and the object start at the same initial relative pose before the action is executed. As in Lab 7, the action can be open-loop, it does not need to use perception to check or monitor the effect of the action. In addition to the two strategies, you can make assumptions about environmental constraints--for example, you can assume the object is in front of a wall when it is being picked up so that your action could take advantage of the wall. Or you can assume the object is being dropped off the table rather than being placed onto the table. Make a video of the robot performing all four actions successfully. Make sure all your modifications can be seen clearly in the video and all your assumptions are listed.


Step 2: Next you will make Cozmo manipulate an object without picking it up, by pushing it on the surface. You can use the same object as in Step 1 if appropriate, but you can also choose a different object making sure it can be easily pushed on the surface that you operate Cozmo and will not easily tip over. You can use one or both of the modification strategies to enable or simplify this task--for example you can stick a soft heavy platform below your object so it slides better and it is more stable; or you can add side panels to Cozmo's fork lift so it can better control the object, as in the image below.

Cozmo with side panels for pushing object.

Next you will write a program that transports the object to a given target position (you can ignore orientation of the object). You can assume that the object starts at (0,0) and the robot starts a fixed relative pose facing the object--you might want to mark these poses on the surface.

Depending on your setup, you might not need to implement any object perception for this lab. However, if you feel that keeping track of the object will be necessary, you can use custom markers that you can print and attach to your objects; see cozmo.objects.CustomObjectMarkers. You can also use other perception capabilities you implemented earlier in the quarter.

Your program should first make the robot get in contact with the object. It should then execute a sequence of movements to bring the object to a specified goal. If your robot motions directly translated into object motions, you could simply make the robot navigate to the a pose relative to the specified object target. However, in non-prehensile manipulation the robot motion might not fully transfer to the object. Hence you need to model how robot movements translate to object movements and you might want to use an alternative navigation strategy. For example:

  • You can move the object using only straight line pushes by making the robot move around the object to change the direction of the push.
  • Using side panels as in the picture above, you can use a combination of straight line pushes, where the robot movements are translated to the object, and in-place rotations, where the object moves only once it touches the opposite panel and rotates around a particular point afterwards.

Your program needs to be able to take arbitrary target poses and move the object there. Choose two different target poses that are at least 10cm away from the starting pose and mark them on the surface. Measure their (x, y) position and run your program for both positions. The final pose does not have to be exact, try to make sure it is within a 2cm radius from the target. Make a video of the robot successfully transporting the object to the two targets.

Clone this wiki locally