Releases: flexivrobotics/flexiv_rdk
Releases · flexivrobotics/flexiv_rdk
v0.9
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
maxLinearVelandmaxAngularVelinput parameters toRobot::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 addRobot::resetMaxContactWrench()to disable max contact wrench regulation. - Add more generic Cartesian motion-force control modes
RT/NRT_CARTESIAN_MOTION_FORCEto replace the old ones which areRT/NRT_CARTESIAN_MOTION_FORCE_TCPandRT/NRT_CARTESIAN_MOTION_FORCE_BASE. - Add functions to configure force control parameters for the new Cartesian motion-force control modes:
Robot::setForceControlAxis(),Robot::setForceControlFrame(), andRobot::setPassiveForceControl(). - Add behavior description to the function doc of
Robot::sendJointPosition(). - Add input parameter
continueExectoRobot::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()andRobot::sendCartesianMotionForce()to use the same controller asMoveHybridprimitive. Update Cartesian motion-force control examples accordingly (#35). - Divide
Robot::setCartesianStiffness()tosetCartesianStiffness()andresetCartesianStiffness(). - Divide
Robot::setNullSpacePosture()tosetNullSpacePosture()andresetNullSpacePosture(). - 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()withRobot::runAutoRecovery(), which blocks until the automatic recovery process is finished. Update examples accordingly. - Remove input parameter
gravityEarthfrom the constructor offlexiv::Model. The value will now be auto-synced from the connected robot. - Remove input parameter
isBlockingfromScheduler::start(), the user should implement their own blocking from the calling thread if needed. Update examples accordingly. - Rename
Model::updateModel()toModel::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::GripperAPI is called. - Fix memory leak of
flexiv::Scheduler(#37). - Fix initial timer fluctuation of
flexiv::Scheduler. - Fix a bug where the input parameter
enableGravityCompofRobot::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
COMPATIBILITY
- Internal pre-release
ADD
- Add [Blocking] and [Non-blocking] tag to doc of all
flexiv::Robotfunctions. - Add
maxLinearVelandmaxAngularVelinput parameters toRobot::sendCartesianMotionForce(). - Add
Robot::resetCartesianStiffness()to replace the default parameter ofRobot::setCartesianStiffness(). - Add
Robot::resetNullSpacePosture()to replace the default parameter ofRobot::setNullSpacePosture(). - Add
Robot::setMaxContactWrench()andRobot::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.shto 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 withstd::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 withRobot::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()andRobot::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_STANDARDglobally. - 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::Gripperis called.
v1.0
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()andRobot::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()andRobot::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
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_BASEandRT_CARTESIAN_MOTION_FORCE_TCP. For non-real-time access, use modesNRT_CARTESIAN_MOTION_FORCE_BASEandNRT_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 methodRobot::streamCartesianMotionForce(). - Replace
Robot::sendTcpPose()with newly added motion-force control methodRobot::sendCartesianMotionForce(). - Replace
Robot::executePlanByIndex()andRobot::executePlanByName()with overloaded functionRobot::executePlan(). - Remove
contact_controlexamples, replace with direct motion force control examples. - Remove
series_operationexamples, no longer relevant. - Replace
RT_cartesian_impedance_controlexample withRT_cartesian_pure_motion_controlexample, 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 usingRobot::getMode()from examples. - Rename
StatesData.hpptoData.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
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::Scheduleron 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:
ClientExceptionandLogicException. - Add
flexiv::GripperStatesstruct and corresponding output stream operator<<toStatesData.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::RobotStatesstruct. - Add
RobotStates::ftSensorRaw: the raw reading from the end-effector force-torque (FT) sensor, if available. - Add output stream operator
<<forflexiv::PlanInfostruct. - Add URDF and mesh files for Rizon 10 robot arm.
- Add DAE format visual mesh files.
CHANGE
- Remove
flexiv::Visualizationand 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()toScheduler::numTasks(). - Rename
RobotStates::extForceInTcpFrametoRobotStates::extWrenchInTcp. - Rename
RobotStates::extForceInBaseFrametoRobotStates::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::Gripperto pass by const reference. - Update the constructor of
flexiv::Modelto 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
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::utilitymethods explicit inline.
FIX
- None
v0.6
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
forceLimittoGripper::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()andRobot::getGlobalVariables()to interact with the robot system's global variables. - Add
flexiv::utilitynamespace 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 inStatesData.hpp. - Remove
Robot::isTimeout(), connection quality is auto-handled. - Remove
Robot::getSystemStatus(), also removeSystemStatusdata 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 parametermaxWrenchto specify maximum contact wrench during operation. - Change input parameter
maxWrenchofRobot::sendTcpPose()to optional. - Change the output parameter of
Robot::getRobotStates()andRobot::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
specfolder toresources. - 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
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
COMPATIBILITY
- Flexiv robot software v2.9
ADD
- C++ and Python library for arm64 processors.
flexiv::Schedulerclass for users to add and run periodic tasks with user-defined interval and priority. Update all examples with this scheduler.flexiv::Exceptionclass that contains customized exceptions thrown by RDK's APIs. Update all examples with exception handling.flexiv::Gripperclass 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
flexivsub-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.hpptoStatesData.hpp. - Rename
flexiv::Visualization::update()toflexiv::Visualization::updateRobot(). - Remove
flexiv::Robot::loadModel(): replaced by the constructor offlexiv::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 methodflexiv::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
Eigenlibrary in thirdparty/ to 3.3.7.
FIX
- Missing color in the provided robot URDF.
- Compatibility issue of
flexiv::Logwith some versions of thefmtlibrary.
v0.4.0
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 modeflexiv::Mode::MODE_JOINT_POSITION_NRT - New Cartesian-space non-real-time API
flexiv::Robot::sendTcpPose(), activated with new robot modeflexiv::Mode::MODE_CARTESIAN_IMPEDANCE_NRT
CHANGE
- Rename API
flexiv::Robot::timeout()toisTimeout() - Rename struct member
flexiv::SystemStatus::m_jntLimitTriggeredtom_jointLimitTriggered - Simplify example
auto_recovery
FIX
- A bug in example
robot_dynamicsthat might block the state transition