Changelog

4.0.0

2026-10-05

API

  • Added path failure diagnostics. Enable Motion::PathRequest::diagnoseFailures to get extra diagnostics when a Motion::Planner::path call fails.

  • Added Motion::ReplaceableTool and Motion::ToolGeometry. Motion::Planner::setReplaceableTool now takes a Motion::ReplaceableTool, replacing the previous overload that took the tool meshes directly.

  • Replaced Goals with Motion::ConfigurationGoals, holding the new Motion::ConfigurationGoal. It is now constructed implicitly from a list of configurations or of goals, replacing fromConfigurations. The goals are now read with Motion::ConfigurationGoals::goals, replacing jointConfigurations.

  • Motion::Planner::computeInverseKinematics now takes Motion::PoseGoals, holding the new Motion::PoseGoal, instead of a list of poses. A list of poses still converts implicitly, but in C++ a braced list of poses now needs an extra pair of braces.

  • Motion::Mesh can no longer be modified after it is created. Removed transformInPlace and bottomCenterTransformInPlace, use Motion::Mesh::transform and Motion::Mesh::bottomCenterTransform instead, which return a copy. Replaced setColor with Motion::Mesh::withColor, which returns a copy.

C++

  • Motion::Mesh can now be copied.

Python

  • The zivid_pythonmotion wheel now also supports Python 3.12.

  • Python 3.10 reaches end of life in October 2026. Support for Python 3.10 is deprecated in this release and may be removed in a future release.

UserConfiguration.yml

  • The fields are now grouped into a Generation and a Runtime section.

  • Moved the escape directions of each region of interest to Runtime/RegionsOfInterest, matched to Generation/Workspace/RegionsOfInterest by Id.

  • Changing a field under Runtime no longer requires the cell data to be generated again.

  • Added the Generation/ConstrainedMovement section, configuring how the robot tool is oriented during movements.

  • SelfCollisionCheckLinks under Generation/Attachments and Generation/AdaptivePart now numbers the links from 1. Add one to each link in an existing file.

  • Loading the cell fails when SelfCollisionCheckLinks lists a link twice or a link the robot does not have.

  • Renamed StaticEnvironmentSafetyDistance and DynamicEnvironmentSafetyDistance to Runtime/PreferredMinClearance/StaticEnvironment and Runtime/PreferredMinClearance/DynamicEnvironment. The planner keeps this clearance when it can, but does not guarantee it.

General

  • Zivid Motion now requires an NVIDIA driver with support for CUDA 12.0, which is driver version 525.60.13 or newer.

  • Faster planner calls, planner startup and cell data generation, and lower memory use.

  • Fixed several bugs.

3.2.0

2026-09-01

API

  • Added Motion::Visualizer::setRobotConfiguration to set the robot configuration the Visualizer displays.

  • Motion::packageApiLog now includes the API log itself in the archive it creates, so the archive is all Zivid needs to reproduce a logged session. The archive is created next to the log as <name>.zip, replacing the previous <name>-resources.zip which left the log out.

UserConfiguration.yml

  • Added RobotBrand, the manufacturer of the robot.

General

  • Various performance improvements.

Bug fixes

  • Motion::Planner::path reports that the path is blocked, rather than that the goal is blocked, when the goal can be reached but no path leads to it.

  • An exported API log now replays with the obstacles it recorded.

  • Fixed several minor bugs.

3.1.0

2026-08-12

API

  • Added Motion::Pose::fromXyzRpy to construct a pose from a translation and roll, pitch and yaw angles.

  • Added Motion::Pose::compose to compose two poses.

  • Added an experimental Motion::Experimental::loadMesh function to read a mesh from a file on disk.

C++

  • Added stream operators for Motion::Tcp, Motion::Waypoint and Motion::Planner.

Python

  • The zivid_pythonmotion wheel now covers all supported Python versions, replacing the one wheel per Python version distributed previously.

  • The zivid_pythonmotion wheel now declares its dependency on NumPy.

RuntimeConfiguration.yml

  • Added Performance/FreeCpuThreads, which overrides the number of CPU threads Zivid Motion leaves free for the user when sizing its thread pool. This number was previously fixed to 2.

General

  • Installing a cell package now creates the Motion resources directory when it does not already exist.

  • Packaging a cell now includes the source URDF and mesh files also when packing without generated data.

  • Fixed several bugs.

3.0.0

2026-07-02

API

  • Motion::Pose, Motion::Configuration, Motion::Path and Motion::Triangle are now concrete types, replacing the previous typedefs.

  • Removed the PointXYZ and VectorXYZ typedefs, use Motion::Vector3f instead.

  • Renamed TransformedBox to Motion::BottomCenteredTransformedBox, and its bottomCenteredTransform member to transform.

  • Motion::Planner::computeInverseKinematics now takes a list of poses and returns Goals, instead of a single pose returning an optional configuration.

  • Replaced PathRequest.goalConfigurations with Motion::PathRequest::goals, using the new Goals type.

  • Motion::Profile is now lowercase (Testing/Production -> testing/production).

  • Added a new Motion::Mesh class, constructed from Motion::Triangles or from shapes (Motion::Mesh::createBox, Motion::Mesh::createCylinder, Motion::Mesh::createSphere).

    • Added Motion::Mesh::transform and Motion::Mesh::transformInPlace.

    • Added Motion::Mesh::bottomCenterTransform and Motion::Mesh::bottomCenterTransformInPlace.

    • Added an experimental Motion::Experimental::merge function to merge multiple meshes into one.

  • Motion::Planner::setCarriedObject and Motion::Planner::setReplaceableTool now accept Motion::Mesh as their argument(s). All other overloads have been removed.

  • Motion::Planner::setObstacles now accepts a list of Motion::Mesh as its argument. The previous overloads accepting Motion::Triangles were removed.

  • Added Motion::Planner::replayApiLog to restore the planner state and replay a previously exported API log.

  • Added the Motion::Pose and Motion::Matrix4x4 classes, with conversions between them.

  • Added the Goals type and Goals::fromConfigurations.

C++

  • Motion::Application now verifies that the header and library versions match.

Python

  • Obstacle.PointCloud, Obstacle.Colors and Triangles can be constructed directly from a numpy array, providing a more performant interface for large point clouds and triangle meshes.

  • BlendRadius and ColorRGBA are now exposed as classes.

  • Importing the zividmotion wheel now warns when its version does not match the installed C++ library.

Bug fixes

  • Motion::Planner::path returns an error result when all goal configurations are invalid.

Python

  • Fixed the PathRequest constructor argument order so positional construction works.

2.0.0

2026-03-31

API

  • Initial public release of the Zivid Motion API.