 |
 |
 |
Project Description: The goal of Animate! is to enable people with severe disabilities
to create simple animations of an anthropomorphic figure via an interface compatible with
the camera mouse (i.e. no physical clicking capabilities - only cursor motion). Current
implementation allows the user to animate a simple anthropomorphic character from a single
camera viewpoint by setting poses in key frames.
Created by: Maria Shugrina of Boston University,
supervised by Prof. Margrit Betke. Special thanks to Wajeeha Akram and Gary Kazantsev.
|
| |
| |
| Installation Notes: |
The program is made to work under Windows only. However, the source may be modified to create Mac and Linux versions (if anyone is interested in doing it).
All the necessary dependencies are included into the bundle. Please contact Maria (shumash@gmail.com) if you experience problems running the program.
To install, download the package below, unzip it using WinZip (make sure that the subdirectories remain intact), and double click on the file Animate.exe to
run the program. In addition to the main window, you will see a black console window when you run the program. Do not
close this window before you quit the main application window; the text output in the console may inform you of possible errors.
After you have tried the software, please write us an email with your comments.
|
| Functionality: |
- Modes: The pose of the character can be set in two modes: by selecting an end effector and adjusting its X, Y and Z values to determine the joint angles(Translation mode), or by selecting a segment (e.g. lower arm) and rotating it around its parent segment (Rotation mode). The mode can be changed by dwell-clicking on one of the two mode buttons in the left panel.
- Selection: When the cursor moves in the display area, if it dwells s.t. a given selectable (selectable joints are shown in red) joint/segment is closest to it (the closest joint/segment is shown in orange), that joint/segment is selected (selected joints/segments are shown in cyan). Once the joint/segment has been selected the user can dwell-click on the widgets in the interface that will translate/rotate the joint/segment, depending upon the current mode. If selection does not seem to work as expected, please bring the cursor outside of the black
display area and re-enter the area.
- Navigating Keyframes: Once the pose has been set, it can be saved by moving to the next frame using the frame forward and back widgets in the bottom panel. Previously saved frame can be modified by returning to it using the back frame arrow, editing the pose, and moving forward again to save.
- Saving/Opening File: The animated file can be saved in a special format and then loaded into the program at a later date. If the animation the user is currently working on has an associated file (if it has been opened or saved-as before), the user can periodically save the animation by pressing the save icon in the upper panel. Otherwise, to avoid saving by the default name, the care-taker who can use a clicking mouse should save/open the file for the user before the session.
- Record Avi: After the animation has been created, the caretaker can record the animation in an avi file that can then be viewed on any computer. To do this, press the Record Avi button on the left panel, type a file name of the form something.avi, and press SaveAs. A dialog with a selection of possible VideoCompressions will come up; experiment with different compressions for desired results.
- Buttons for Caretaker: The four buttons with text in the left panel are intended only for caretaker's use. The Settings button enables the caretaker to change the button size and the dwell time for clicking. The options in the button size area are adjusted based on the resolution of your screen. Experiment with screen resolutions for
the best user configuration (with lower resolutions, extra-large button size causes the window to occupy almost the entire screen. Caretaker may also help the user during the session: all the widgets work with the regular clicking as well as dwell-clicking.
- Pause: If the user is working with the software alone and feels tired, he/she may temporarily deactivate the interface buttons by dwell-clicking on the pause icon in the top panel to avoid the Midas touch problem. The interface can be reactivated by dwell-clicking on the same button again.
- Change View: The icons on the right side of the upper panel rotate the view clockwise and counterclockwise.
- Translation Mode: This mode does not provide very flexible control over the model. The red, green and blue axes mark the X, Y and Z
directions respectively. If the waist is selected, the arrow buttons will translate the entire character in a given direction. If a hand or a foot is selected, the program will adjust the angle of the elbow or knee to translate the hand/foot in the chosen direction.

- Rotation Mode: This mode gives precise control over the character's pose. To select a segment, move close to its associated joint. Once the segment is selected, two or more rotation axes will appear. The rotation axis around which the segment can rotate with the most freedom
is marked in red (X), the next axis of the most freedom is green (Y) and the next is blue (Z). For most joints, no rotation around Z-axis is possible due to human body limitations, and so only two axes will show up.

|
| Implementation Notes: |
Anybody interested in looking at or developing the project is welcome to download the source.
Dependencies: Apart from the standard C++ libraries, the program uses
OpenCV , OpenGL, GLUT, Gtk+ and its Gtkmm wrapper.
See the Project Properties for dependencies. To develop the project further, install Gtk+, Gtkmm, OpenCV and GLUT; the project may also require installation of cygwin.
Source Files: Seek more detailed information within the files.
- geometry.h/cpp - contains the Skeleton which is the basis for the animated character and all the supporting classes.
- main_window.h/cpp - contains the main application window that has all the widgets and a Skeleton as children.
- button.h/cpp - contains more generic widgets derived from Gtkmm classes.
- specific_widgets.h/cpp - contains more specific widgets derived from those in button.h
- const.h - contains all constants
- textures.h - contains macros for the names of button icons that are in the textures subfolder
- triple.h - custom utility class, like a Multivariate calculus vector
- main.cpp - contains the main Gtk event loop
Hopes for Future Work: Currently the project provides only very rudimentary animating capabilities, and can be developed much further. Here are some ideas.
- Create an Undo Button (source has a stub for it now).
- Additional higher-level modes can be added. For example, the user may save sequences of motion as actions, or to select a limb and then select a limb-specific command s.a. raise arm. Predefined sequences of motions can be included (e.g. sit, walk, dance). Also a facial animation mode could be included - to make the character smile, frown, etc.
- The underlying Skeleton could be linked to an arbitrary mesh rigged with the Skeleton of the same structure. Mesh deformation based on vertex weights could be easily implemented to allow animation of varied characters.
- The animation could become more of a filmmaker's work if camera could take arbitrary position with relation to the camera while a film sequence were recorded.
- More than one character could be animated at once.
|