Releases: adamheins/pyb_utils
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).
v1.2.0
v1.1.0
v1.0.0
This major version release introduces a number of additions and some API changes.
- Python 3.11 is now supported, while Python 3.7 support has been dropped.
- The array of points returned from
Camera.get_point_cloud
now has dimensions(height, width, 3)
rather than(width, height, 3)
, to match the other parts of theCamera
API. - The
CollisionDetector
API has now been changed so that an articulated robot is not required. - A
getJointInfo
function wrapper has been added to the set of wrapped functions returning named tuples. - Some minor bug fixes to the camera and ghost object examples.
- A number of tests have been added, and
tox
can be used to run them against the supported Python versions.
v0.3.1
This minor release fixes a bug with the named tuples, where not passing the physicsClientId
argument by name to the underlying PyBullet functions caused unexpected behaviour. All arguments in the named tuple wrapper functions are now passed by name (i.e., as keyword arguments) to avoid this.