COMPATIBILITY
* Flexiv robot software **v2.10.3** and **v2.10.4**
ADD
* Add GitHub action for Windows.
* Add support for Python 3.10.
* Add support for the real-time scheduler ``flexiv::Scheduler`` on macOS.
* Add support for setting CPU affinity in ``flexiv::Scheduler``.
* Add ``Scheduler::maxPriority()`` to get the maximum available priority for the user task under the current system.
* Add contact control C++ and Python example.
* Add new exception types: ``ClientException`` and ``LogicException``.
* Add ``flexiv::GripperStates`` struct and corresponding output stream operator ``<<`` to ``StatesData.hpp``: the general gripper feedback states, update examples accordingly.
* Add ``Gripper::getGripperStates()`` to request the latest gripper states from robot server, update examples accordingly.
* Add ``Robot::setNullSpacePosture()`` to do null-space posture control during Cartesian control modes, update examples accordingly.
* Add detailed description to items in ``flexiv::RobotStates`` struct.
* Add ``RobotStates::ftSensorRaw``: the raw reading from the end-effector force-torque (FT) sensor, if available.
* Add output stream operator ``<<`` for ``flexiv::PlanInfo`` struct.
* Add URDF and mesh files for Rizon 10 robot arm.
* Add DAE format visual mesh files.
CHANGE
* Remove ``flexiv::Visualization`` and related contents: users now need to use their own visualization methods.
* Remove ``RobotStates::endLinkPose``.
* Improve API docs.
* Improve the performance, compatibility, and stability of ``flexiv::Scheduler``.
* Rename ``Scheduler::getTaskCount()`` to ``Scheduler::numTasks()``.
* Rename ``RobotStates::extForceInTcpFrame`` to ``RobotStates::extWrenchInTcp``.
* Rename ``RobotStates::extForceInBaseFrame`` to ``RobotStates::extWrenchInBase``.
* Update all examples to pass by (const) reference.
* Update primitive execution examples to demonstrate how to express target coordinate in TCP frame.
* Update the constructor of ``flexiv::Gripper`` to pass by const reference.
* Update the constructor of ``flexiv::Model`` to pass by const reference.
* Update ``Robot::isBusy()`` to also cover primitives that can auto-terminate upon completion (some primitives won't auto-terminate upon completion, for example, the [Move] series).
* Update CMakeLists to auto-detect OS and processor type.
* Update README.
FIX
* Fix a bug in series operation example where the specified plan no longer exists.
* Fix a bug where ``Robot::setGlobalVariables()`` can be used in other modes other than the plan execution mode.
* Fix a bug where ``Robot::setGlobalVariables()`` returns too soon and the processing may have not fully completed.