All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added
compas_fab.robots.Waypoints
class to represent a sequence of targets. It has two child classes:FrameWaypoints
andPointAxisWaypoints
. - Added
compas_fab.robots.Target
class to represent a motion planning target. - Added also child classes
FrameTarget
,PointAxisTarget
,ConfigurationTarget
,ConstraintSetTarget
- Unlike previous constraints,
Targets
do not containgroup
as parameter. Instead, group parameter is passed to the planning call. - Target scaling function is now embeded in the code for Targets.
scaled()
should be called by the user before passing the target to theplan_motion
function.
- Renamed
PybulletClient.get_cached_robot
toPybulletClient.get_cached_robot_model
to avoid confusion between theRobotModel
andRobot
class. - Renamed
PybulletClient.ensure_cached_robot
toPybulletClient.ensure_cached_robot_model
. - Renamed
PybulletClient.ensure_cached_robot_geometry
toPybulletClient.ensure_cached_robot_model_geometry
. - Renamed
PybulletClient.cache_robot
toPybulletClient.cache_robot_model
. - Backend planners now use multi-inherence instead of
__call__
to include the backend functions. This allows for better generated documentation. Robot.plan_carteisan_motion()
now acceptsWaypoints
as target. Implementation forFrameWaypoints
is supported with same functionality as before. Simply wrapFrame
objects usingFrameWaypoints(frames)
.- Changed
BoundingVolume
,Constraint
,JointConstraint
,OrientationConstraint
,PositionConstraint
to inherit fromcompas.data.Data
class. - Change the signature of
plan_motion()
to usetarget
(Target
class) instead ofgoal_constraints
. Only one target is accepted. Users who wish to compose their own constraint sets can still useConstraintSetTarget
. - Moved
Robot.orientation_constraint_from_frame()
toOrientationConstraint.from_frame()
, as constraints are no longer intended for users to use directly. - Moved
Robot.position_constraint_from_frame()
toPositionConstraint.from_frame()
, as constraints are no longer intended for users to use directly. - Moved
Robot.constraints_from_frame()
to ros.backend_features and is handled byconvert_target_to_goal_constraints()
. Users who wish to use a frame as target should use aFrameTarget
instead. - Changed the behavior of Duration class when accepting both seconds (float) and nanoseconds (int) where the decimal point of seconds and the nanoseconds add up to more than 1 second.
- Changed GH Component
ConstraintsFromPlane
toFrameTargetFromPlane
. - Changed GH Component
ConstraintsFromTargetConfiguration
toConfigurationTarget
. - Changed
RosClient
constructor to take a type for planner backend instead of a string. This also changes the name of the argument fromplanner_backend
toplanner_type
.
- Removed
plan_cartesian_motion_deprecated
andplan_motion_deprecated
methods fromRobot
class - Removed
forward_kinematics_deprecated
andinverse_kinematics_deprecated
method fromRobot
class
- Raise
BackendFeatureNotSupportedError
exceptions when a features is not supported by the planner, instead of genericException
.
- Add parameter to control which link the tool is connected to in Grasshopper.
- Introduced
compas_fab.robots.RobotLibrary
class with 4 built-in robots. - Added a script to extract URDF, SRDF and meshes from a Docker MoveIt instance.
- Changed
CollisionMesh
inherit fromcompas.data.Data
- Changed
AttachedCollisionMesh
to inherit fromcompas.data.Data
- Changed
Robot
inherit fromcompas.data.Data
- Changed
RobotSemantics
inherit fromcompas.data.Data
- Changed
Tool
to inherit fromcompas.data.Data
- Renamed
Tool.link_name
toTool.connected_to
- Migrate to COMPAS 2.x: add dependency to
compas_robots
- Migrate to COMPAS 2.x: use
compas.tolerance
module instead ofcompas.PRECISION
- Add
attributes
toTrajectory
class. - Fixed
data
serialization API to comply withCOMPAS 2.0
private data API. - Use the tool's
connected_to
link when showing end-effector frames in Grasshopper. - Change default end-effector link name from
ee_link
totool0
.
- Removed V-Rep backend.
- Removed outdated
PathPlan
class. - Removed outdated rfl demo class.
- Remove deprecated aliases for artists (currently on
compas_robots
). - Removed
compas_fab.robots.ur5
because it is now part ofcompas_fab.robots.RobotLibrary
. - Removed data files of ur5 and ur10e from
src/compas_fab/data/universal_robots
because they are now in ofsrc/compas_fab/data/robot_library
.
- Added
Forward Kinematics
GH component.
- Updated install process of GH components.
- Added caching to the GH component that visualizes scene, to avoid retrieving the whole scene too often.
- Fixed pre-Noetic support on the MoveIt planner when a tool is attached to the robot.
- Added support for attached and non-attached collision mesh visualization to the
Robot Visualize
GH component. - Added a prefix to all GH components.
- Added
append
to the operations of theCollision Mesh
GH component.
- Changed behavior of
Attach Tool
GH component to only attach the tool but not add it to the planning scene state. - Duration class takes floats as
sec
variable. - Changed the behavior of
forward_kinematics
,inverse_kinematics
,iter_inverse_kinematics
,plan_cartesian_motion
and constraints construction methods (orientation_constraint_from_frame
,position_constraint_from_frame
,constraints_from_frame
) inRobot
class to use the frame of the attached tool if a tool is attached. This behavior can be reverted back (ie. only calculate T0CF) using the flaguse_attached_tool_frame
of all these methods. - Fixed usage of
tangent_points_to_circle_xy
in Spherical Wrist solver to work with COMPAS v1.16 and older.
- Fixed DH params for analytical IK solver of UR3e and UR10e.
- Fixed Kinetic support on IK, FK, and motion planning calls.
- Fixed
Publish to topic
Grasshopper component when theros_client
has been replaced (eg. disconnected and reconnected).
- Added a new GH component -
ConstraintsFromTargetConfiguration
- Added some missing information to GH and V-REP docs.
- Added a
Robot().attached_tools
property to allow attaching tools to multiple planning groups simultaneously.
- Replaced icon for GH component -
ConstraintsFromPlane
Robot().attached_tool
now points to the tool attached to therobot.main_group_name
.- Added parameter
group
to theAttachToolComponent
- Attaching a tool to a planning group doesn't overwrite the tool attached to other groups.
- Changed
Trajectory
to inherit fromcompas.data.Data
class to fix a serialization error that expects guid to be present.
- Changed Grasshopper components to default to icon display.
- Changed to use
compas_rhino.conversions
to coerce frames.
- Fixed link parameter name when doing FK inside the GH component to display attached collision meshes.
- Fixed transform of the attached collision mesh frame inside the GH component.
- Fixed uninstall process not removing GH components.
- Added
compas_fab.robots.ReachabilityMap
- Added
compas_fab.robots.DeviationVectorsGenerator
- Added
compas_fab.robots.OrthonormalVectorsFromAxisGenerator
- Fixed
ROSmsg
import on GH components for publish/subscribe.
- Added
compas_fab.backends.PyBulletClient.load_ur5()
method to simplify some examples. - Added Grasshopper components to get a zero configuration and to merge two configurations.
- Moved all public API classes in
compas_fab.backends
to second-level imports. - Updated to COMPAS 1.14.
- Simplified call to remove an attached tool by also removing the remaining collision mesh from the world automatically.
- Fixed PyBullet loading of meshes.
- Fixed missing flag in reset planning scene call.
- Fixed issue on cartesian and kinematic planning when model contains passive joints.
- Fixed pose of collision mesh in ROS Noetic being ignored.
- Deprecated
compas_fab.utilities.write_data_to_json
in favor ofcompas.data.json_dump
. - Deprecated
compas_fab.utilities.read_data_from_json
in favor ofcompas.data.json_load
.
- Added
Attach Tool
GH component: crowd-coded at McNeel's Robotic Fabrication Workshop!
- Changed default wire visibility to hidden in some GH components for cleaner Grasshopper files.
- Added a new backend: analytical kinematics for spherical-wrist and offset-wrist robots.
- Consider
AttachedCollisionMesh
inAnalyticalInverseKinematics
.
- Removed the bundled binary files for the
VrepClient
remote API. To use V-REP, use theremoteApi
binaries provided with the software.
- Added
PoseArray
,MultiArrayDimension
,MultiArrayLayout
,Int8MultiArray
,Float32MultiArray
,Int32
tocompas_fab.backends.ros.messages
- Added
unordered_disabled_collisions
attribute toPyBulletClient
andRobotSemantics
- Added better support for concave meshes in the
PyBulletClient
- Added
Robot.iter_inverse_kinematics
to allow iterating over all IK solutions provided by a solver
- Changed the backend feature
InverseKinematics.inverse_kinematics
to be a generator. As a consequence of this,ClientInterface.inverse_kinematics
andPlannerInterface.inverse_kinematics
have changed to generators as well - Standardized the yielded type of
InverseKinematics.inverse_kinematics
across the PyBullet, MoveIt and V-REP planners - Added iterative accurate IK resolution for PyBullet
- Fixed
UnsupportedOperation
error when usingPyBulletClient
in Jupyter notebook (raised byredirect_stdout
) - Fixed
JointTrajectoryPoint.from_data
to be backward-compatible with JSON data generated beforecompas_fab
0.18 - Fixed
JointTrajectory.from_data
to be backward-compatible with JSON data generated beforecompas_fab
0.17
- Fixed bundling of ghuser components
- Added documentation for Grasshopper components.
- Added Grasshopper components to publish and subscribe to ROS topics.
- Updated
build-ghuser-components
task - Updated to COMPAS 1.7
- Made consistent use of
repr
in nested objects
- Fixed bug in
compas.backends.PyBulletClient.convert_mesh_to_body
circumventing PyBullet's propensity to cache
- Fix error message during uninstall of Grasshopper components
- Grasshopper components now also for Mac
- Added support for MoveIt on ROS Noetic
- Added support for Python 3.9
- The
Configuration
class has moved tocompas.robots
, but is still aliased withincompas_fab.robots
- Lazily load
V-REP remoteApi
library
- Fixed
repr()
ofROSmsg
class - Fixed data type of secs and nsecs in
Time
ROS message - Fixed
CollisionObject.to_collision_meshes
- Fixed serialization of joint names for
compas_fab.robots.JointTrajectoryPoint
- Fixed deserialization of
AttachedCollisionMesh
compas_fab.robots.Configuration
is being deprecated in favor ofcompas.robots.Configuration
- Added python components library for Grasshopper
- Added
compas_fab.robots.PyBulletClient.get_robot_configuration
- Added
compas_fab.robots.Robot.ensure_geometry
- Added serialization methods to
compas_fab.robots.CollisionMesh
andcompas_fab.robots.AttachedCollisionMesh
- Added
attached_collision_meshes
attribute tocompas_fab.robots.JointTrajectory
- Added
compas_fab.backends.PlanningSceneComponents.__ne__
- Added dictionary behavior to
compas_fab.robots.JointTrajectoryPoint.merge
- Added length limitations to attributes of
compas_fab.robots.JointTrajectoryPoint.merge
- Updated to
COMPAS 1.1
Configuration
&JointTrajectoryPoint
: the attributesvalues
andtypes
changed tojoint_values
andjoint_types
respectively.
- Fixed bug in the PyBullet client where one could not update the configuration of a robot with an attached collision mesh
- Fixed bug existing since version 0.12 where
compas_fab.backends.RosClient.add_attached_collision_mesh
added collision objects to the scene, but did not attached them to the robot - Fixed bug when keys with
None
values were passed to the planner.
- Remove
compas_fab.robots.JointTrajectoryPoint.merge
- Updated to
COMPAS 1.0
- Updated to
COMPAS 0.19
- Added new backend feature
ResetPlanningScene
- Added
MoveItResetPlanningScene
- Updated to
COMPAS 0.18
- Use
compas.IPY
to check for IronPython
- Fixed bug in
remove_attached_tool
ofPlanningScene
- Added
name
property toTool
class.
- Fixed bug in
add_attached_tool
ofPlanningScene
- Fixed
frame_id
generation when tool name changes - Fixed freeze with some sync planning scene methods on Grasshopper/IronPython
- Updated to
COMPAS 0.17
- PyBullet integration: added support for PyBullet client and forward/inverse kinematic solver
- Added
ClientInterface
,PlannerInterface
and various backend feature interfaces - Added implementations of these interfaces for ROS and V-REP
- Added
attributes
dictionary toRobot
class - Added
compas_fab.robots.Tool.from_t0cf_to_tcf
- Added
compas_fab.robots.Tool.from_tcf_to_t0cf
- Added
joint_names
as optional parameter for allcompas_fab.robots.Configuration
constructors - Added
compas_fab.robots.Configuration.iter_differences
- Added
compas_fab.robots.Configuration.max_difference
- Added
compas_fab.robots.Configuration.close_to
- Added
compas_fab.robots.Configuration.merge
- Added
compas_fab.robots.JointTrajectoryPoint.merge
- Added
compas_fab.robots.Semantics.group_states
- Added
compas_fab.robots.Robot.get_configuration_from_group_state
- Updated to
COMPAS 0.16.9
- Renamed
compas_fab.robots.Robot.to_local_coords
tocompas_fab.robots.Robot.to_local_coordinates
- Renamed
compas_fab.robots.Robot.to_world_coords
tocompas_fab.robots.Robot.to_world_coordinates
- Backend clients have been restructured according to the new interfaces
- Parameter
backend
of forward kinematics has been renamed tosolver
- The signatures of all kinematics, motion planning and planning scene management methods have been homogenized across backend clients and within
Robot
- All examples have been updated to reflect these changes
- The installer to Rhino has been unified with COMPAS core. Now running
python -m compas_rhino.install
will also detect and install COMPAS FAB and its dependencies. - Renamed all
RobotArtist
implementations toRobotModelArtist
to reflect the fact they depend oncompas.robots.RobotModel
. - Renamed
compas_fab.robots.Robot.from_tool0_to_attached_tool
tocompas_fab.robots.Robot.from_t0cf_to_tcf
- Renamed
compas_fab.robots.Robot.from_attached_tool_to_tool0
tocompas_fab.robots.Robot.from_tcf_to_t0cf
- Changed ROS planning scene methods to be synchronous.
- Attached collision meshes are included in inverse kinematics calculations in ROS
- The methods
forward_kinematics
,inverse_kinematics
,plan_cartesian_motion
andplan_motion
ofRobot
class have been refactored, but a backwards-compatible deprecated version with the old signatures still exists suffixed by_deprecated
, e.g.forward_kinematics_deprecated
. RobotArtist
are deprecated in favor ofRobotModelArtist
.
- Added optional
joint_names
toConfiguration
- Added
Configuration.scaled
- Added
full_joint_state
toRobot.inverse_kinematics
- Added
Semantics.get_all_configurable_joints
- Updated to
COMPAS 0.15
- Construct
full_configuration
withvalues
,types
,joint_names
inRobot
rather than inMoveItPlanner
MoveItPlanner
returnsstart_configuration
with setjoint_names
- Removed parameter
names
fromRobotArtist.update
- Updated Grasshopper examples
Robot
:forward_kinematics
returns nowframe_WCF
MoveItPlanner
:forward_kinematics
takes now instance ofConfiguration
androbot
MoveItPlanner
:inverse_kinematics
takes now instance ofConfiguration
androbot
- Property :class:
compas_fab.robots.Robot.artist
does not try to scale robot geometry if links and/or joints are not defined. - In :class:
compas_fab.robots.constraints.JointConstraint
, addedtolerance_above
andtolerance_below
for allowing asymmetrical constraints. - In :class:
compas_fab.robots.Robot
, changed theconstraints_from_configuration
function withtolerances_above
andtolerances_below
. - :meth:
compas_fab.robots.CollisionMesh.scale
now takes a scale factor instead of a :class:compas.geometry.Scale
instance as an argument.
- Convert constraints on inverse kinematics and cartesian planner to ROS messages
- Fix support for trajectory constraints on kinematic planner
- Added Python 3.8 support
- Updated to
COMPAS 0.13
- Fix DAE parser to handle
polylist
meshes - Bumped
roslibpy
dependency to0.7.1
to fix blocking service call issue on Mac OS
- Added
attach_tool
,detach_tool
,draw_attached_tool
,from_tool0_to_attached_tool
andfrom_attached_tool_to_tool0
toRobot
- Added
attach_tool
anddetach_tool
toArtist
- Added
add_attached_tool
andremove_attached_tool
toPlanningScene
- Added redraw/clear layer support to :class:
~compas_fab.rhino.RobotArtist
for Rhino - Added material/color support for DAE files on ROS file loader
- Changed
inverse_kinematics
,plan_cartesian_motion
andplan_motion
to use the attached_tool'sAttachedCollisionMesh
if set
- Fixed mutable init parameters of
Configuration
,JointTrajectoryPoint
,JointTrajectory
andRobot.basic
. - Fixed interface of :class:
~compas_fab.blender.RobotArtist
for Blender - Fixed DAE parsing of meshes with multiple triangle sets
- Added
load_robot
method to ROS client to simplify loading robots from running ROS setup. - Added
compas_fab.robots.Wrench
: a Wrench class representing force in free space, separated into its linear (force) and angular (torque) parts. - Added
compas_fab.robots.Inertia
: a Inertia class representing spatial distribution of mass in a rigid body
- Updated to
COMPAS 0.11
- Updated to
COMPAS 0.10
- Add better support for passive joints on IK, Cartesian and Kinematic planning
- Use WorldXY's origin as default for robots that are have no parent join on their base
- Fixed parsing of semantics (SRDF) containing nested groups
- Fixed DAE support on ROS File loader
- Fixed Python 2 vs Python 3 incompatibilities in
compas_fab.sensors
module - Changed example for loading PosConCM (includes parity argument, differs from PosCon3D)
- Changed format
compas_fab.sensors.baumer.PosConCM.set_flex_mount()
- Changed tasks.py to run
invoke test
- Renamed
compas_fab.backends.CancellableTask
tocompas_fab.backends.CancellableFutureResult
- ROS client: changed joint trajectory follower (
follow_joint_trajectory
) to support genericJointTrajectory
arguments. - ROS client: changed return type of trajectory execution methods to
CancellableFutureResult
- Added
compas_fab.sensors.baumer.PosCon3D.reset()
- Added
compas_fab.sensors.baumer.PosConCM.reset()
- ROS client: added support for MoveIt! execution action via
client.execute_joint_trajectory
. - Added
compas_fab.backends.FutureResult
class to deal with long-running async tasks
- Removed
compas_fab.sensors.baumer.PosConCM.get_live_monitor_data()
- Removed non-implemented methods from
compas_fab.robots.Robot
:send_frame
,send_configuration
,send_trajectory
- Fixed missing planner initialization when used without context manager.
- Updated
COMPAS
dependency to0.8.1
- Base robot artist functionality moved to
compas.robots.RobotModel
Robot
:inverse_kinematics
returns now group configurationRobot
:forward_kinematics
has new parameterbackend
to select eitherclient
FK ormodel
FK.Robot
:forward_kinematics
returns nowframe_RCF
Robot
:forward_kinematics
doesn't need full configuration anymore- Fixed delays when modifying the planning scene of ROS.
- Added
jump_threshold
parameter toplan_cartesian_motion
- Added
action_name
parameter to reconfigure joint trajectory follower action. - Added support to retrieve the full planning scene.
- Removed
compas_fab.Robot.get_configuration
- ROS Client: renamed
compute_cartesian_path
toplan_cartesian_motion
- ROS Client: renamed
motion_plan_goal_frame
andmotion_plan_goal_configuration
toplan_motion
- ROS Client: removed methods from
Robot
that are now handled withPlanningScene
, e.g.add_collision_mesh
andadd_attached_collision_mesh
- ROS Client: change the return type of
plan_motion
andplan_cartesian_motion
to the new trajectory classes. - ROS File Server Loader: moved to
compas_fab.backends
package - ROS File Server Loader: renamed
load
toload_urdf
and sync'd API to other loaders. - V-REP Client: renamed
get_end_effector_pose
toforward_kinematics
- V-REP Client: renamed
find_robot_states
toinverse_kinematics
- V-REP Client: renamed
find_path_plan_to_config
toplan_motion_to_config
- V-REP Client: renamed
find_path_plan
toplan_motion
- V-REP Client: changed
is_connected
to become a property - Made
robot_artist
defaultNone
onRobot
constructor - Changed
PathPlan
class to use the new trajectory classes
- Added
scale
method toConfiguration
- Implemented Constraints (
OrientationConstraint
,PositionConstraint
,JointConstraint
) to use withplan_motion
- Implemented
PlanningScene
,CollisionMesh
andAttachedCollisionMesh
- Added generic representations for motion planning requests (
JointTrajectory
,JointTrajectoryPoint
,Duration
) - Added UR5 robot model data for example purposes
- Added several doc examples
- Aliases for
Frame
andTransformation
. Import fromcompas.geometry
instead.
- Fixed missing library for V-REP on macOS
- The aliases for
Frame
andTransformation
will be removed, in the future, import directly fromcompas
core.
- Color parameter to Rhino robot artist
- Updated to
COMPAS 0.4.10
- Deeper integration with MoveIt! motion planning services
- Added sync and async versions of many ROS service calls
- Added support for cancellable tasks/actions
- Renamed
UrdfImporter
toRosFileServerLoader
- Updated to
COMPAS 0.4.8
- Robot artist for Blender
- First open source release!
- V-REP and ROS clients
- Updated to
COMPAS 0.3.2
- Initial version