CRAM Plan Transformation
In the scope of his bachelor's thesis, Arthur Niedzwiecki researched the topic of plan transformations in CRAM. He implemented new transformation rules for pick and place scenarios and developed a plan transformation pipeline. The video explains three possible transformations that are applied to the plans used on our PR2 (and Boxy) robot in the projected as well as real world environments. By analyzing the task tree of an executed CRAM plan, improvable patterns are found and altered to generate a better performing plan.
The code is currently under review and will be merged soon. So keep an eye open for a new
cram_plan_transformation
package!
CRAM v0.6.0
Yet another version is out, yay!
- New feature: using plan projection for adapting a plan to its environment:
- changed PERFORM from cram function into goal to use execution trace tools
- moved CET:*EPISODE-KNOWLEDGE* projection var declaration into pr2-proj package
- TASK-TREE-NODE now has an optional NODE param
- added predicates and testing functions for traversing task tree
- AT and DURING and THROUGHOUT are now from cet package
- implemented finding best projection round according to driving distance
- fixed (HOLDS ?TIMELINE ?OCC …)
- LOC occasion now returns a designator with pose-stamped
- made relevant desigs of fetch and deliver plans into explicit args
- implemented WITH-PROJECTED-TASK-TREE
- projection reasoning works on the real robot
- Fetch and deliver plans are now cleaner and nicer:
- GRASP is now an attribute of PICKING-UP action desig
- moved SEARCHING out of FETCHING into TRANSPORTING
- world is now simulated after spawning a perceived obj
- in the demo placing locations are now more easily reachable
- ROBOT-STATE-CHANGED is asserted even if navigation action failed
- stopped using CAD model fitter for perception for CUP and BOWL
- added second lift pose to GET-OBJECT-GRASPING-POSES.
- Various smaller new features:
- implemented broadcasting of TF from projection (robot + items)
- added *SPAWN-DEBUG-WINDOW* parameters for belief state setup
- added virtual links of the robot's URDF into projection TF tree.
- Bugfixes and small improvements:
- allow asking CURRENT-DESIG also on NULL objects
- fixed PROJECTION-RUNNING predicate
- WITH-REAL-ROBOT now creates a named top level
- RS now only supports input parameters such as TYPE and CAD-MODEL
- added null pointer guards in CPL constructs
- bugfix: when checking for collisions ignoring attached objects
- bugfix: IK solver only works if every arm movement is asserted into TF
Please see the detailed changelog on GitHub.
CRAM v0.5.0
New features:
- Created new package CRAM-PR2-FETCH-DELIVER-PLANS with FETCHING and DELIVERING plans that fetch an object from a surface in the environment and deliver it at the specified location on a surface.
- Created new types of plan failures, mostly high-level ones, such as OBJECT-UNFETCHABLE.
- Created new package CRAM-PR2-PROJ-REASONING where projection-based reasoning is done, etc. reasoning about collisions.
- Created new package CRAM-PR2-PICK-PLACE-DEMO with a pick and place scenario in the kitchen.
- Manipulation configuration calculations have been majorly improved:
- Pregrasp and postgrasp are now transforms and not poses to enable easy multiplication
- The gripper coordinate frame of different robots does not influence object grasping configuration anymore
- Pregrasp configuration is now calculated w.r.t the object, such that the gripper approaches the object without tipping it over.
- Grasping actions can now also accept a list like “'(left right)”
- Some new objects have been added, such as cereal, etc.
- Old offsets have been fixed to work better on the real robot.
- Basic logging for pick and place actions has been implemented, see “cram_cloud_logger” package:
- Object designators can be logged.
- Poses can be logged.
- Location designators can be logged.
- Fetch and deliver action designators can be logged with their parameters but without action hierarchy.
- Success or failure boolean of an action can be logged.
- When picking action asks for IK solutions, now a torso angle sampling is also done to increase the robot's reachability area.
- Implemented a caching mechanism for IK solver as it seemed to have a problem with configurations that have already been processed.
- A pretty printer for DESIGNATOR class has been implemented.
- TF utilities from “cram_pr2_cloud” package were moved into “cram_tf” package, they're quite useful (multiplying transform-stamped-s etc.), check them out.
- Perceived object events are now handled correctly by the belief state, such that perceived objects get spawned in the bullet world etc.
- Object attachment and detachment events are now handled correctly, including Bullet world attachments.
- (a location (of (an object (pose … ) now returns the pose of the object.
- Added ROBOT-CARRYING-POSES to go together with ROBOT-PARKING-POSES.
- Implemented WITH-PROJECTED-ROBOT & WITH-SIMULATED-ROBOT & WITH-REAL-ROBOT macros for running plans accordingly.
- Renamed:
- cram_pr2_pick_place_plans → cram_mobile_pick_place_plans
- cram_pr2_plans → cram_pr2_plans_deprecated
- Rearranged and cleaned up a lot of code, especially the pick and place plans.
- An initial version of a script for checking ASDF dependencies and configuring workspaces with CATKIN_IGNORES was implemented.
See ChangeLog for more details.
CRAM v0.4 is out
The development of CRAM continues and we have a new version out!
The biggest changes in CRAM v0.4.0 is comparison to v0.3.0 is the restructuring:
all main CRAM repositories got merged into one big repo, which makes maintenance and installation easier. Now we can be sure that all the packages have compatible with each other versions. Moreover, to install CRAM you now only need to clone one repository from GitHub, run rosdep install
and you're ready to go.
For those who worry about huge repositories with enormous dependencies: don't worry! With the new script for managing dependencies, only the dependencies of a particular high-level package you want to use or a particular tutorial code, will be installed on your system. It's a smart script that crawls the package.xml
file of the entry high-level package and all its dependencies and adds CATKIN_IGNORE
files automatically to all the unused packages. More about this in the v0.4.1 blog post, stay tuned.
The tutorial on using PR2 for pick and place tasks in a fast simulation environment has been updated with new cool plans, so do check it out. The beginner tutorials have also been updated and majorly improved, with these tutorials learning CRAM hasn't ever been more fun than it is now.
CRAM v0.3.0
A new version of CRAM is out!
Here is what's new since v0.2.0:
- In cram_core, we've got 2 new features together with small nicifications and fixes, no API breakage. Now we have motion designators, which are a new class of designators used to interface with process modules, calling PERFORM on them results in calls to process modules. PERFORMing action designators, on the other hand, now calls other plans. Check out the tutorial for this new feature.
- In cram_3rdparty,
yason
has been updated to a newer version with no API breakage
- cram_plans got renamed into
cram_common
, which seems to be a much more fitting name for the repo. Also,cram_transforms_stamped
got renamed intocram_tf
, which is shorter. No API breakage except the renamings. There have been important bugfixes in the location costmap functionality, better initialization ofcram_tf
variables, some new utility functions incram_tf
andcram_robot_interfaces
and a new packagecram_commander
to execute CRAM actions over ROS.
- cram_json_prolog got a minor cleanup.
- cram_semantic_maps got renamed into
cram_knowrob
and there were some bugfixes and updates to support newer KnowRob APIs and the new semantic map of the kitchen.
- cram_3d_world got rid of some unused dependencies, moveit-specific things were moved away into the
cram_pr2
repo, household objects were renamed into items to support other domains than human household, new utility functions, nicifications etc.
- in cram_pr2 there have been lots of changes: process module bugfixes, a new cram_motion_manager package to support different motion planners, reachability costmap now supports moveit IK interface, there are new low-level interfaces, designators and plans also available for PR2, etc.
- the rosinstall file for CRAM has been updated to use the newest version.
All the main CRAM repositories now contain a CHANGELOG.md
file!
On the aforementioned repositories, there have been 39 PRs merged, 15 issues solved, and there are currently no PRs or issues open!
Bug reports and requests for new features are as always most welcome.