Skip to content

Releases: flexivrobotics/flexiv_rdk

v0.9

29 Nov 02:03
00cd9c7

Choose a tag to compare

COMPATIBILITY

  • Flexiv software package v2.11.3

ADD

  • Add notification service to receive and print info/warning/error messages that would also be prompted in the Elements UI (#29).
  • Add new input parameters maxLinearVel and maxAngularVel input parameters to Robot::sendCartesianMotionForce() to specify maximum Cartesian linear and angular velocity when moving to the target pose.
  • Add Robot::setMaxContactWrench() to specify the maximum contact wrench for the motion control part of the Cartesian motion-force control modes. Also add Robot::resetMaxContactWrench() to disable max contact wrench regulation.
  • Add more generic Cartesian motion-force control modes RT/NRT_CARTESIAN_MOTION_FORCE to replace the old ones which are RT/NRT_CARTESIAN_MOTION_FORCE_TCP and RT/NRT_CARTESIAN_MOTION_FORCE_BASE.
  • Add functions to configure force control parameters for the new Cartesian motion-force control modes: Robot::setForceControlAxis(), Robot::setForceControlFrame(), and Robot::setPassiveForceControl().
  • Add behavior description to the function doc of Robot::sendJointPosition().
  • Add input parameter continueExec to Robot::executePlan() to specify whether to continue executing the plan when the RDK program is closed or the connection is lost. Set this parameter to true in the plan execution examples.
  • Add optional verbose warning print to Robot::isOperational() to indicate why the robot is not operational when this function returns false.
  • Add Robot::isEnablingButtonPressed() to check if the enabling button on the robot motion bar is pressed.
  • Add Model::reload() to sync the latest robot model and tool model data from the connected robot.
  • Add Scheduler::minPriority() to get the OS' minimum available priority for user tasks.
  • Add check on user-specified task priority against the OS' minimum available priority to Scheduler::addTask().
  • Add [Blocking] or [Non-blocking] tag to function doc.
  • Add Log::critical() to print critical error message.
  • Add utility::arr2Str().

CHANGE

  • Change Robot::streamCartesianMotionForce() and Robot::sendCartesianMotionForce() to use the same controller as MoveHybrid primitive. Update Cartesian motion-force control examples accordingly (#35).
  • Divide Robot::setCartesianStiffness() to setCartesianStiffness() and resetCartesianStiffness().
  • Divide Robot::setNullSpacePosture() to setNullSpacePosture() and resetNullSpacePosture().
  • Change Robot::readDigitalInput() to read all digital input ports at once. Also change it from a non-real-time blocking function to a real-time non-blocking function (#27).
  • Change Robot::writeDigitalOutput() to support writing to one or multiple digital output ports at once.
  • Change Robot::enable() to print warning instead of throwing exception if E-Stop is not released.
  • Change Gripper::getGripperStates() from a non-real-time blocking function to a real-time non-blocking function (#25).
  • Change the term "operation mode" to "control mode" to avoid confusion with the robot's Auto/Manual operational mode.
  • Replace Robot::startAutoRecovery() with Robot::runAutoRecovery(), which blocks until the automatic recovery process is finished. Update examples accordingly.
  • Remove input parameter gravityEarth from the constructor of flexiv::Model. The value will now be auto-synced from the connected robot.
  • Remove input parameter isBlocking from Scheduler::start(), the user should implement their own blocking from the calling thread if needed. Update examples accordingly.
  • Rename Model::updateModel() to Model::update(). Update examples accordingly.
  • Remove check on elapsed waiting time of Robot::isOperational() from the examples.
  • Improve function docs.
  • Increase CMake minimum version to 3.16.3.
  • Rename C++ libs to all lower-case.
  • Remove Ubuntu 18.04 from supported OS list.
  • Format Python examples using Black Formatter.

FIX

  • Fix occasional false negative of Robot::isBusy() (#26).
  • Reduce mode transition time when calling Robot::setMode().
  • Fix a gripper control bug where the primitive/plan loses control of the gripper after any function from flexiv::Gripper API is called.
  • Fix memory leak of flexiv::Scheduler (#37).
  • Fix initial timer fluctuation of flexiv::Scheduler.
  • Fix a bug where the input parameter enableGravityComp of Robot::streamJointTorque() cannot disable gravity compensation (#39).
  • Fix a bug where the executing plan will be terminated when Robot::setGlobalVariables() is called.
  • Fix a bug in heartbeat service where the connection will be closed immediately upon reconnection after disconnected for a while (#30).
  • Fix a bug in timeliness monitor (#38).
  • Fix incorrect description in the function doc of Robot::executePrimitive().

v1.1

11 Aug 00:57
8137e3d

Choose a tag to compare

v1.1 Pre-release
Pre-release

COMPATIBILITY

  • Internal pre-release

ADD

  • Add [Blocking] and [Non-blocking] tag to doc of all flexiv::Robot functions.
  • Add maxLinearVel and maxAngularVel input parameters to Robot::sendCartesianMotionForce().
  • Add Robot::resetCartesianStiffness() to replace the default parameter of Robot::setCartesianStiffness().
  • Add Robot::resetNullSpacePosture() to replace the default parameter of Robot::setNullSpacePosture().
  • Add Robot::setMaxContactWrench() and Robot::resetMaxContactWrench() for Cartesian motion-force control modes to maintain the contact wrench under the specified limit.
  • Add script argument to thirdparty/build_and_install_dependencies.sh to specify number of parallel compilation jobs.
  • Add automatic print of info, warning, error, and critical error messages that are also displayed on Flexiv Elements.

CHANGE

  • Replace dynamic-sized vectors with fixed-sized array for most functions and data structures. Update examples accordingly.
  • Remove flexiv::Exception, replace with std::exception. Update examples accordingly.
  • Change Robot::setMode() to block for the actual time used by the robot to decelerate and come to a complete stop.
  • Replace Robot::startAutoRecovery() to with Robot::runAutoRecovery(), which blocks until the auto recovery process is finished. Update examples accordingly.
  • Increase joint position auto recovery distance from 5 degrees to 10 degrees.
  • Rewrite Robot::writeDigitalOutput() to allow writing to one or multiple digital output ports in a single function call.
  • Change Robot::readDigitalInput() from non-real-time blocking to real-time non-blocking, change to read values from all digital input ports at once.
  • Increase maximum allowed input string size from 5 Kb to 10 Kb for Robot::executePrimitive() and Robot::setGlobalVariables().
  • Bump CMake minimum required version to 3.18.6.
  • Remove explicit linking to librt.
  • Specify C++17 as one target property for examples.
  • Remove setting CMAKE_CXX_STANDARD globally.
  • Decrease control mode switching time from 1 second to 100 ms plus any additional time needed to decelerate the robot.

FIX

  • Remove incorrect function doc from Robot::executePrimitive().
  • Fix auto recovery.
  • Fix a potential race condition between DDS entities.
  • Fix occasional false negative returned by Robot::isBusy().
  • Fix occasional delivery delay of real-time motion commands.
  • Fix an issue where plan and primitive will lose the gripper control after a function from flexiv::Gripper is called.

v1.0

08 May 16:52
52043d1

Choose a tag to compare

v1.0 Pre-release
Pre-release

COMPATIBILITY

  • Internal pre-release

ADD

  • Upgrade to DDS based communication framework.
  • Add real-time communication QoS.
  • Add RPC-over-DDS.
  • Add IP-less server discovery.
  • Add support to set velocity scale for Robot::executePrimitive() and Robot::executePlan().
  • Add option to make Robot::isOperational() verbose and print detailed reasons why the robot is not operational.

CHANGE

  • Optimize network bandwidth consumption.
  • Improve check logic of timeliness monitor.
  • Change Robot::writeDigitalOutput() and Robot::readDigitalInput() to handle all ports at once.
  • Replace exception with warning in Robot::enable() if E-Stop is not released.
  • Re-write delivery logic of non-real-time commands to avoid undesired behaviors.
  • Improve CMake installation interface.
  • Increase clang-format column limit from 80 to 100.
  • Rename "operation mode" to "control mode".
  • Change digital IO data communication from non-real-time asynchronous to real-time synchronous.

KNOWN ISSUE

  • Robot::startAutoRecovery() is temporarily not working

v0.8

02 May 21:03
a9931cb

Choose a tag to compare

COMPATIBILITY

  • Flexiv robot software v2.10.5

ADD

  • Add new API for Cartesian unified motion-force control in base or TCP frame. For real-time access, use modes RT_CARTESIAN_MOTION_FORCE_BASE and RT_CARTESIAN_MOTION_FORCE_TCP. For non-real-time access, use modes NRT_CARTESIAN_MOTION_FORCE_BASE and NRT_CARTESIAN_MOTION_FORCE_TCP.
  • Add real-time and non-real-time examples for the new motion-force control mode.
  • Add new method Robot::info() to access general information of the robot.
  • Add new method Robot::pausePlan() to pause or resume the execution of the current plan.

CHANGE

  • Replace Robot::streamTcpPose() with newly added motion-force control method Robot::streamCartesianMotionForce().
  • Replace Robot::sendTcpPose() with newly added motion-force control method Robot::sendCartesianMotionForce().
  • Replace Robot::executePlanByIndex() and Robot::executePlanByName() with overloaded function Robot::executePlan().
  • Remove contact_control examples, replace with direct motion force control examples.
  • Remove series_operation examples, no longer relevant.
  • Replace RT_cartesian_impedance_control example with RT_cartesian_pure_motion_control example, using the newly added motion-force control API.
  • Add blocking check on whether the desired mode is successfully set to Robot::setMode(). Remove manual check using Robot::getMode() from examples.
  • Rename StatesData.hpp to Data.hpp.
  • Update enums naming of flexiv::Mode.
  • Update Robot::setCartesianStiffness() to reset to default values based on detected robot model.
  • Update Robot::setNullSpacePosture() to reset to default values based on detected robot model.
  • Update README.
  • Re-organize examples into basic and intermediate tutorials.

FIX

  • Improve server-client compatibility check.
  • Minor fixes to examples.

v0.7

11 Jan 22:53
b3e2f6c

Choose a tag to compare

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.

v0.6.1

03 Oct 02:40
c44b184

Choose a tag to compare

COMPATIBILITY

  • Flexiv robot software v2.10.1 and v2.10.2

ADD

  • Add GitHub workflow for Ubuntu 22.04.

CHANGE

  • Remove Robot::setSwivelAngle(): the swivel angle-based robot posture control is now replaced by the null space optimization-based posture control.
  • Remove contents related to Robot::setSwivelAngle() from examples.
  • Make all flexiv::utility methods explicit inline.

FIX

  • None

v0.6

17 Aug 05:56
45708b2

Choose a tag to compare

COMPATIBILITY

  • Flexiv robot software v2.10

ADD

  • Add ROS2 support, see flexiv_ros2.
  • Add C++ and Python support for macOS.
  • Add Python support for Windows.
  • Add new parameter forceLimit to Gripper::move() to specify max gripping force.
  • Add Robot::isBusy() to check if the robot is currently executing a task.
  • Add Robot::isEstopReleased() to check if E-stop is released.
  • Add check on the size of input string of Robot::executePrimitive(), cannot exceed 5kb.
  • Add Robot::setGlobalVariables() and Robot::getGlobalVariables() to interact with the robot system's global variables.
  • Add flexiv::utility namespace with useful helper functions.
  • Add Visualization::updateScene() function overloading to update the color of a specified object in the scene.

CHANGE

  • Change the C++ interface to a unified modern CMake project that can be installed and linked to as a CMake target package on all supported OS.
  • Remove Windows Visual Studio project and solution file, replaced by the unified CMake framework.
  • Remove m_ prefix for struct members in StatesData.hpp.
  • Remove Robot::isTimeout(), connection quality is auto-handled.
  • Remove Robot::getSystemStatus(), also remove SystemStatus data struct, the members are either outdated or handled by dedicated API methods.
  • Change input parameters of Robot::streamTcpPose(): remove target velocity and acceleration to guarantee a passive impedance behavior; add optional parameter maxWrench to specify maximum contact wrench during operation.
  • Change input parameter maxWrench of Robot::sendTcpPose() to optional.
  • Change the output parameter of Robot::getRobotStates() and Robot::getPlanInfo () from pass by pointer to pass by reference.
  • Increase the maximum size of input string of Robot::executePrimitive() from 1kb to 5kb.
  • Re-organize C++ and Python libraries, add system and processor identifiers.
  • Rename spec folder to resources.
  • Improve API docs.
  • Improve examples.
  • Update README with compilation quick start for all supported OS.

FIX

  • A command execution bug in the primitive execution mode.

v0.5.1

29 Apr 11:07
0b9d3fe

Choose a tag to compare

COMPATIBILITY

  • Flexiv robot software v2.9

ADD

  • Static RDK libraries for Windows on x64 and x86 processor platforms.
  • Example Visual Studio projects that link to the static libraries.

CHANGE

  • Re-organize lib/ directory: group libraries by OS, programming language, and processor platform.

FIX

  • A bug that caused delay in the execution of a primitive command.

v0.5.0

13 Apr 15:53
10a57dc

Choose a tag to compare

COMPATIBILITY

  • Flexiv robot software v2.9

ADD

  • C++ and Python library for arm64 processors.
  • flexiv::Scheduler class for users to add and run periodic tasks with user-defined interval and priority. Update all examples with this scheduler.
  • flexiv::Exception class that contains customized exceptions thrown by RDK's APIs. Update all examples with exception handling.
  • flexiv::Gripper class to control grippers that use the communication protocol template provided by Flexiv.
  • flexiv::Robot::setCartesianStiffness() to online change the stiffness of the Cartesian impedance controller during Cartesian impedance modes.
  • flexiv::Robot::setSwivelAngle() to online change the robot arm's elbow swivel angle during Cartesian impedance modes.
  • flexiv::Visualization::updateScene() to update position of objects added to the visualizer scene.
  • Default initialization for all members in StatesData.hpp.
  • New example: clear minor fault on robot server.
  • New example: gripper control.
  • Fault check of robot server to all examples.

CHANGE

  • Move all header files to flexiv sub-directory.
  • Replace error return of all methods with customized exception defined in flexiv::Exception.
  • Merge flexiv::Robot::Init() with its class constructor.
  • Merge flexiv::Visualization::Init() with its class constructor.
  • Change flexiv::Robot::readDigitalInput() to output result through function return instead of an output pointer parameter.
  • Rename RobotStates.hpp to StatesData.hpp.
  • Rename flexiv::Visualization::update() to flexiv::Visualization::updateRobot().
  • Remove flexiv::Robot::loadModel(): replaced by the constructor of flexiv::Model.
  • Remove flexiv::SystemStatus::m_motionCmdSuccessRate: no longer useful.
  • Remove flexiv::SystemStatus::m_errorMsg: accurate error message can be found on the UI tablet.
  • Remove flexiv::SystemStatus::m_ptStates: replaced with a dedicated method flexiv::Robot::getPrimitiveStates().
  • Remove flexiv::Model::setTool(), the tool dynamics update is now automated.
  • Remove unnecessary smart pointers from all examples.
  • Replace unnecessary heap allocation with stack allocation in all examples.
  • Reduce continuous network bandwidth consumption by 75%, increasing connection robustness under bad network connections.
  • Increase round-trip communication latency tolerance to 1000 ms (only for non-real-time APIs).
  • Upgrade Eigen library in thirdparty/ to 3.3.7.

FIX

  • Missing color in the provided robot URDF.
  • Compatibility issue of flexiv::Log with some versions of the fmt library.

v0.4.0

17 Jan 15:08
1865733

Choose a tag to compare

COMPATIBILITY

  • Flexiv robot software v2.8.1

ADD

  • Python (3.8) support for selected non-real-time APIs
  • Example Python scripts under example_py
  • New joint-space non-real-time API flexiv::Robot::sendJointPosition(), activated with new robot mode flexiv::Mode::MODE_JOINT_POSITION_NRT
  • New Cartesian-space non-real-time API flexiv::Robot::sendTcpPose(), activated with new robot mode flexiv::Mode::MODE_CARTESIAN_IMPEDANCE_NRT

CHANGE

  • Rename API flexiv::Robot::timeout() to isTimeout()
  • Rename struct member flexiv::SystemStatus::m_jntLimitTriggered to m_jointLimitTriggered
  • Simplify example auto_recovery

FIX

  • A bug in example robot_dynamics that might block the state transition