NOTE
This release note is based on changes since v1.3. If you are switching from v0.x to v1.x for the first time, you might want to review all release notes since the v1.0 pre-release,
COMPATIBILITY
* Flexiv software package **v3.6**
ADD
- Add sub-namespace: `flexiv::` now becomes `flexiv::rdk::`.
- Add support for Rizon medical model `Rizon4M`.
- Add support for the force-controlled delta robot `Moonlight`.
- Add support of `flexiv::rdk::Model` API for Python RDK. Add `intermediate5_robot_dynamics.py` example accordingly.
- Add installation of Python RDK libraries to the user site packages path, using CMake. Remove `sys.path.insert()` from Python examples accordingly.
- Add `RobotInfo::K_q_nom`, nominal motion stiffness of the joint impedance control modes of the connected robot.
- Add `RobotInfo::model_name`, model name of the connected robot, e.g. Rizon4, Rizon10, Moonlight, etc.
- Add `RobotInfo::DoF`, joint-space degrees of freedom of the connected robot. Remove `kJointDOF` constant accordingly. The joint DoF now varies according to the model of the connected robot. Update examples accordingly.
- Add real-time joint impedance (`RT_JOINT_IMPEDANCE`) and non-real-time joint impedance (`NRT_JOINT_IMPEDANCE`) control modes. Add `intermediate2_realtime_joint_impedance_control.cpp` and `intermediate2_non_realtime_joint_impedance_control.py` examples accordingly.
- Add `Robot::SetJointImpedance()` and `Robot::ResetJointImpedance()` that sets and resets stiffness and damping ratio of the robot's joint motion controller used in the joint impedance control modes.
- Add `Robot::Brake()` to force engaging or releasing robot brakes during normal operation. Only available to the medical model.
- Add `Model::reachable()` to check reachability of a given Cartesian pose and return the corresponding IK solution if reachable.
- Add error code prefix to Robot Log messages.
- Add new dependency `spdlog` to replace the `flexiv::Log` API. Update examples and tests accordingly.
- Add new C++ example to show how to change logging behavior of RDK client, as well as how to log to file.
- Add input parameter `separator` to `utility::Arr2Str()`.
- Add `utility::Vec2Str()`.
CHANGE
- Change header file extension from `.h` to `.hpp` to prevent C++ IntelliSense tool from mistaking certain system headers for RDK headers.
- To accommodate the newly added support of the Moonlight delta robot, change joint-space variables in `RobotInfo` and `RobotStates` data structures from fixed-size arrays to dynamic-size vectors. Also change input arrays of `Robot::StreamJointTorque()`, `Robot::StreamJointPosition()`, `Robot::SendJointPosition()`, `Robot::SetJointImpedance()`, `Robot::SetNullSpacePosture()`, and `Model::Update()` to vectors. Update examples accordingly.
- Rename `RobotInfo::nominal_K` to `RobotInfo::K_x_nom`.
- Update function documentation of `Robot::StreamJointPosition()` and `Robot::SendJointPosition()` to include joint impedance control modes.
- Change `Robot::SetCartesianStiffness()` to `Robot::SetCartesianImpedance()` and `Robot::ResetCartesianStiffness()` to `Robot::ResetCartesianImpedance()`. Cartesian motion damping ratio is added as a new input parameter. Update examples accordingly.
- Rename `kCartDOF` to `kCartDoF`. Update examples accordingly.
- Update `Robot::ClearFault()` to support clearing critical robot faults, if the hardware for hot-reset is installed.
- Increase nominal Cartesian stiffness of Rizon 4 series from [10000-1000] to [10000-2500], and Rizon 10 series from [20000-2000] to [20000-6000].
- Greatly reduce blocking time of `Robot::ExecutePrimitive()`, `Robot::ExecutePlan()`, `Robot::SwitchMode()`, and `Tool::` functions.
- Use pip installed `spdlog` in Python examples.
- Merge `PrintDescription()` to `main()` in all examples.
- Change `maxVel=` to `vel=` in primitive execution examples.
- Use f-string formatting in Python examples.
- Upgrade `doc/Doxyfile.in`.
- Improve function documentations.
- Improve README.
- Improve dependencies build script.
FIX
- Fix `Robot::global_variables()` does not return updated values if called immediately after `Robot::SetGlobalVariables()`.
- Fix a bug where re-switching control mode before sending commands is not enforced after disconnected then reconnected with the robot.
- Fix a bug in `test/test_dynamics_engine.cpp`.
- Fix keyboard interruption handling for Python examples.
- Fix compatibility issue with Eigen for Python 3.12 libraries.