Releases: adamheins/pyb_utils
Releases · adamheins/pyb_utils
v2.3.1
v2.3.0
v2.2.1
v2.2.0
Additions
- Add a dedicated
GhostObject.box
constructor (thanks to @ags-dy). - Add
client_id
argument to GhostObject. - Add
FrameRecorder
class, which is an alternative way to record videos of the simulation as a sequence of frames (images). - Add principal rotation matrix functions
rotx
,roty
,rotz
, as well asrot2d
for 2D rotation matrices. This was added because scipy is now used internally for rotations, and it does not provide these functions directly.
Changes
- Internal: use
scipy
for rotation math instead ofspatialmath
.
v2.1.0
This release adds contact wrench and more quaternion utility functions.
Contact wrench utilities
- The functions
get_point_contact_wrench
,get_points_contact_wrench
, andget_total_contact_wrench
have been added for computing the contact wrench exerted on one object through contact with another.
Quaternion utilities
- The functions
quatx
,quaty
, andquatz
have been added to construct quaternions representing rotations about the major axes. - Under the hood, the quaternion functions have all been rewritten to use
spatialmath.UnitQuaternion
.
Future
- The field
localInerialPos
of theDynamicsInfo
named tuple is misspelled; this will be fixed in a future major release.
v2.0
A new major release! (which means breaking changes!)
Breaking Changes
Robot
- The robot class now distinguishes between three sets of joints: all joints (including all fixed joints), moveable joints (excludes fixed joints), and actuated joints (the ones that the user actually wants to control). There are corresponding properties
num_total_joints
,num_moveable_joints
, andnum_actuated_joints
, as well asall_joint_names
,moveable_joint_names
, andactuated_joint_names
. The previous attributenum_joints
has been removed, withnum_moveable_joints
being its replacement. - The constructor argument
tool_joint_name
has been removed and is replaced withtool_link_name
to be more intuitive: the end effector/tool is a link.
Collision Detector
The collision detector API has been revised to be simpler and less verbose, which also means that every method of the CollisionDetector
class now has a slightly different signature.
- Collision pairs are now specified as plain tuples, each a pair of collision objects. A collision object is either a single
int
representing a body UID, a tuple(body_uid, link_uid)
, or a tuple(body_uid, link_name)
. This also means the verboseNamedCollisionObject
dataclass is no longer with us. - The
CollisionDetector
no longer takes a dictionary mapping body names to indices anymore; this was cumbersome. - The
CollisionDetector
no longer knows anything about commanding robots. This should be handled by the user outside of the detector (see the updated example script).
Other Changes
- The
Robot
class now has the convenience methodsget_link_index
andget_joint_index
for convenient look-up by name. - The
Robot
class now has the propertylink_names
, a list of all its link names. - Added the
as_rotation_matrix
parameter toBulletBody.get_pose
. - Some additional tests and typo fixes.
v1.3.1
v1.3.0
This release primarily focuses on improving the Robot
class:
- Only parse the non-fixed joints of the robot by default.
- Allow manually specifying which joints are actuated.
- Add the
set_joint_friction_force
method to enable free-moving joints. - Add the
command_effort
method for torque joint. - Add the
as_rotation_matrix
argument to theget_link_pose
methods to automatically convert the quaternion to a rotation matrix before returning it.
Two new examples have also been added: an under-actuated 2-link planar pendulum and a task-space robot arm control demo.
Finally, the function get_urdf_path
has also been added to obtain URDFs packaged with pyb_utils
(currently only the two-link pendulum mentioned above).