Difference between revisions of "Stability of an Assembly Project"

From Mech
Jump to navigationJump to search
Line 5: Line 5:
[[image:leaning.png|thumb|right|x300px|An assembly consisting of two planar rigid bodies in contact with each other and stationary ground.]]
[[image:leaning.png|thumb|right|x300px|An assembly consisting of two planar rigid bodies in contact with each other and stationary ground.]]


You will write a program to determine if an assembly of planar rigid bodies, in frictional contact with each other, can remain standing in gravity, or if the assembly must collapse. An example assembly is shown in the image at right.
You will write a program to determine if an assembly of planar rigid bodies, in frictional contact with each other, can remain standing in gravity, or if the assembly must collapse. (See Example 12.11 in Chapter 12.3 of '''[http://modernrobotics.org the book]'''.) An example assembly is shown in the image at right.


Your program will take as input:
Your program will take as input:

Revision as of 16:06, 1 May 2018

This page describes the "Stability of an Assembly" Project from the Coursera course "Modern Robotics, Course 5: Robot Manipulation and Wheeled Mobile Robots."

Program Specification

An assembly consisting of two planar rigid bodies in contact with each other and stationary ground.

You will write a program to determine if an assembly of planar rigid bodies, in frictional contact with each other, can remain standing in gravity, or if the assembly must collapse. (See Example 12.11 in Chapter 12.3 of the book.) An example assembly is shown in the image at right.

Your program will take as input:

  • a description of the static mass properties of each of the bodies: the location of the center of mass and the total mass (e.g., in kg); and
  • a description of the contacts. Each contact consists of a list of the two bodies involved in the contact (0 means ground, 1 means body 1, 2 means body 2, etc.); the (x,y) location of the contact; the contact normal

Your program will take as input a list of stationary point contacts on the body, each specified by the contact location and the direction of the contact normal. The contact normal direction can be specified by a single number (e.g., the angle of the inward-pointing normal, in degrees or radians) or by a 2-vector, as you prefer. Ideally the input would be in the form of arguments to your function, or would be read from an external input file that is easily edited.

The output of your program will be binary: the body is either in form closure or not in form closure.

As an example, the image on the right shows a six-sided polygon contacted by four point contacts. In the case on the left, the polygon is not in form closure; there is a cone of feasible twists, as represented by the rotation center region labeled . In the case on the right, the polygon is in form closure, and there is no feasible twist cone; the altered contact normal direction of the top-left contact makes the difference.

Your program will likely use linear programming, as described in Chapter 12.1.7 in the book. In MATLAB, the function is called linprog. In Mathematica, it is LinearProgramming. In Python, it is scipy.optimize.linprog.

Testing Your Program

You will test your program on two sets of contacts, one that yields form closure and one that does not. Ideally the two sets of contacts would differ from each other by a change in just one of the contacts (either its location, its contact normal, or both), just as the sets of contacts in the image on this page differ by just one contact. But, I encourage you to come up with your own sets of contacts; don't just use the contacts shown in the image on this page. For each set of contacts, you should draw the feasible twist cone as rotation-center regions, as shown in the image on this page. Your drawings should show the coordinate frame, so the reader can understand the coordinates for the contact points, and they should confirm the answers provided by your program.

What to Submit

You will submit a single .zip file with the following contents:

  1. Your commented code in a directory called "code." Your code should be lightly commented, so it is clear to the reader what the code is doing. No need to go overboard, but keep in mind your reviewer may not be fluent in your programming language. Your code comments must include an example of how to use the code. You can write your program in any language, provided it is clearly structured, reasonably modular, easy to understand for a reader with no experience in your programming language, and with sufficient comments. Your program can span multiple files, or it can be a single file, if appropriate. If your code is in Mathematica, turn in (a) your .nb notebook file and (b) a .pdf printout of your code, so a reviewer can read your code without having to have the Mathematica software.
  2. A directory called "results". In this directory you should have pictures of the two contact cases you used for testing. Each picture should show the coordinate frame so the coordinates of the contacts are clear; each picture should show the contact locations and normal directions; and each picture should show the body's feasible twist cone as a region of rotation centers using the graphical methods from Chapter 12.1. If the body is in form closure, then there is no twist cone. This directory should also have the output logs of your program when given the input for these two cases, showing your program being called with the input corresponding to your pictures and showing the output (form closure or not form closure).
  3. (OPTIONAL) A plain text file called "README.txt" or other explanatory file. This has any other information that may help the reviewer understand your submission.