Releases: flexivrobotics/flexiv_rdk
Releases · flexivrobotics/flexiv_rdk
v1.5.1
COMPATIBILITY
- Flexiv software package v3.7.1
ADD
- Expose read/write of the two pairs of digital input/output ports inside the robot's wrist connector.
- Add input parameter
network_interface_whitelist
tordk::Robot
constructor to allow limiting the network interface(s) that can be used for establishing connection with the robot. - Add input parameter
properties
toRobot::ExecutePrimitive()
. - Add struct
JPos
to represent the customized data type JPOS in Flexiv Elements. Update examples accordingly.
CHANGE
- Remove linking to
fastcdr
, not needed. - Use shared steps in GitHub workflow.
- Use GitHub-hosted runner for macOS workflow jobs.
- Improve resource efficiency of background communication services.
- Update README.
FIX
- Fix definition for member of
rdk::Coord
struct. - Fix a bug that causes occasional "Failed to sync server version" error when trying to establish connection with the robot.
v1.5
COMPATIBILITY
- Flexiv software package v3.7
ADD
- Add support to use Cartesian motion-force control modes with the Moonlight delta robot.
- Add an overload of
Robot::SetGlobalVariables()
that takes in anstd::map
instead of a long string. The old version will be deprecated. - Add an overload of
Robot::global_variables()
that returns anstd::map
instead of a string list. The old version will be deprecated. - Add an overload of
Robot::ExecutePrimitive()
that takes in anstd::map
instead of long sting. The old version will be deprecated. - Add an overload of
Robot::primitive_states()
that returns anstd::map
instead of a string list. The old version will be deprecated. - Add type alias
FlexivDataTypes
to represent a variant that holds all possible types of data exchanged with Flexiv robots using the new overloaded functions above. - Add
utility::FlexivTypes2Str()
to convert data held inFlexivDataTypes
to a single string. - Add
rdk::Coord
struct to be used withFlexivDataTypes
variant. - Add function
Robot::SetNullSpaceObjectives()
to set weights of the three optimization objectives while computing the robot's null-space posture. - Add API
flexiv::rdk::WorkCoord
to online update and interact with the robot's work coordinates (#58, #66). - Add enum
rdk::CoordType
to represent commonly-used reference coordinates. - Add
Robot::operational_status()
with enum return type (#67, #81). - Add
Robot::reduced()
to check for safety system's reduced state (#67). - Add new input parameter block_until_started to
Robot::ExecutePlan()
andRobot::ExecutePrimitive()
(#76). - Add input parameter
velocity
toRobot::StreamCartesianMotionForce()
so users have the option to improve the robot's tracking performance at the cost of reduced robustness or vice versa. - Add
Device::exist()
to check if the specified device exists. - Add
Model::SyncURDF()
to cync the actual kinematic parameters of the connected robot into the template URDF (#82). - Add
RobotInfo::license_type
. - Add external axes states to
RobotStates
. - Add
RobotStates::ext_wrench_in_tcp_raw
andRobotStates::ext_wrench_in_world_raw
that contain unfiltered external wrench data. - Add C++ and Python examples for global variable functions.
- Add urgency scale to feature request template.
CHANGE
- Allow
Robot::SetGlobalVariables()
to be called in any control mode instead of only inNRT_PLAN_EXECUTION
mode. - Change
Robot::SetCartesianImpedance()
to blocking, and the robot will not reset to nominal Cartesian impedance upon re-entering the applicable control modes; the setting will persist. - Remove
Robot::ResetCartesianImpedance()
, the user has enough info to reset the impedance usingRobot::SetCartesianImpedance()
. - Change
Robot::SetJointImpedance()
to blocking, and the robot will not reset to nominal joint impedance upon re-entering the applicable control modes; the setting will persist. - Remove
Robot::ResetJointImpedance()
, the user has enough info to reset the impedance usingRobot::SetJointImpedance()
. - Change
Robot::SetMaxContactWrench()
to blocking, and the robot will not reset to disable contact wrench regulation upon re-entering the applicable control modes; the setting will persist. - Remove
Robot::ResetMaxContactWrench()
, the user has enough info to disable contact wrench regulation usingRobot::SetMaxContactWrench()
. - Change
Robot::SetNullSpacePosture()
to blocking. - Remove
Robot::ResetNullSpacePosture()
, the user has enough info to reset to initial reference positions usingRobot::SetNullSpacePosture()
. - Change
Robot::SetForceControlAxis()
to blocking, and allow it to be called when in motion force-control modes. - Change
Robot::SetForceControlFrame()
to blocking, and allow it to be called when in motion force-control modes. - Support setting a user-defined arbitrary force control frame with regard to either WORLD or TCP frame using
Robot::SetForceControlFrame()
(#78). - Change
Robot::SetPassiveForceControl()
to blocking. - Flip the force command direction in motion-force control modes to make the behavior consistent with Flexiv Elements.
- Throw exception in
Tool::Add()
,Tool::Switch()
,Tool::Update()
,Tool::Remove()
, andTool::params()
if the specified tool does not exist. - Throw exception in
Device::Enable()
,Device::Disable()
, andDevice::Command()
if the specified device does not exist. - Throw exception in
Device::Command()
if the commanded device is not enabled. Device::Command()
uses variant to represent command values.- Remove mandatory blocking of
Gripper::Init()
, user needs to implement the wait accordingly. - Change
enum Mode
to scopedenum class Mode
. - Use
Robot::SetDigitalOutputs()
to deprecateWriteDigitalOutput()
. - Use
Robot::digital_inputs()
to deprecateReadDigitalInput()
. - Remove
utility::ParsePtStates()
, no longer needed. - The "Home" primitive now does not terminate by itself, thus change termination check condition from
busy() == false
toreachedTarget == true
. - Update warning doc of
Robot::ExecutePrimitive()
about primitives' self-termination. - Internal plans (those not created by user) now cannot be resumed from pause due to safety concerns.
- Remove input parameter
trailing_space
fromutility::Vec2Str()
andArr2Str()
. - Change the term "preferred positions" to "reference positions" to be consistent with Flexiv Elements.
- Decrease the nominal rotation stiffness from 3000 to 1500 Nm/rad for Rizon 4 variants and from 6000 to 3000 Nm/rad for Rizon 10 varients due to stability concerns.
- Remove excessive prints.
- Update API usages in examples.
- Update website links.
FIX
- Fix
cmake/FlexivInstallLibrary.cmake
that exports the wrong project version. - Specify
-DCMAKE_PREFIX_PATH
in thirdparty build scripts so they don't accidentally link to existing dependencies in system path. - Fix connection loss with the robot when network condition is bad.
- Fix the issue where spdlog's log level is not reset when the construction of
rdk::Robot
is incomplete.
v1.4
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 becomesflexiv::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. Addintermediate5_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. RemovekJointDOF
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. Addintermediate2_realtime_joint_impedance_control.cpp
andintermediate2_non_realtime_joint_impedance_control.py
examples accordingly. - Add
Robot::SetJointImpedance()
andRobot::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 theflexiv::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
toutility::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
andRobotStates
data structures from fixed-size arrays to dynamic-size vectors. Also change input arrays ofRobot::StreamJointTorque()
,Robot::StreamJointPosition()
,Robot::SendJointPosition()
,Robot::SetJointImpedance()
,Robot::SetNullSpacePosture()
, andModel::Update()
to vectors. Update examples accordingly. - Rename
RobotInfo::nominal_K
toRobotInfo::K_x_nom
. - Update function documentation of
Robot::StreamJointPosition()
andRobot::SendJointPosition()
to include joint impedance control modes. - Change
Robot::SetCartesianStiffness()
toRobot::SetCartesianImpedance()
andRobot::ResetCartesianStiffness()
toRobot::ResetCartesianImpedance()
. Cartesian motion damping ratio is added as a new input parameter. Update examples accordingly. - Rename
kCartDOF
tokCartDoF
. 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()
, andTool::
functions. - Use pip installed
spdlog
in Python examples. - Merge
PrintDescription()
tomain()
in all examples. - Change
maxVel=
tovel=
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 afterRobot::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.
v0.10
COMPATIBILITY
- Flexiv software package v2.11.5
ADD
(None)
CHANGE
- Change the behavior of
Robot::setNullSpacePosture()
. Before: null-space posture will be reset to default upon entering the applicable control modes. Now: null-space posture will maintain the current posture upon entering the applicable control modes (#45). - Provide explicit safe values for the input parameters of
Robot::sendCartesianMotionForce()
. - Increase nominal Cartesian stiffness of Rizon 4 and its variants from [linear: 6000 N/m, angular: 400 Nm/rad] to [linear: 10000 N/m, angular: 1000 Nm/rad].
- Increase nominal Cartesian stiffness of Rizon 10 and its variants from [linear: 12000 N/m, angular: 1200 Nm/rad] to [linear: 20000 N/m, angular: 2000 Nm/rad].
- Use MSVC 14.1 (VS 2017) to compile Windows libraries (#46).
- Improve code documentation.
FIX
- Fix a bug in
Robot::getPrimitiveStates()
that has a chance to cause program crash (#47). - Fix a bug in
Robot::switchTcp()
that causes this function unable to deliver the command.
v1.3
COMPATIBILITY
- Internal pre-release
ADD
- Add new API
flexiv::Device
for general device control over RDK. - Add
Robot::mu_log()
to access the multilingual log messages of the connected robot; removeRobot::getErrorMessage()
accordingly. - Add
Robot::SetVelocityScale()
as a standalone function to change velocity scale during plan/primitive execution; removevelocity_scale
input parameter fromRobot::ExecutePlan()
andRobot::ExecutePrimitive()
accordingly. - Add input parameter
acceleration
toRobot::StreamCartesianMotionForce()
to feed-forward target TCP acceleration. - Add input parameters
max_linear_acc
andmax_angular_acc
toRobot::SendCartesianMotionForce()
. - Provide explicit default values to input parameters of
Robot::SendCartesianMotionForce()
. - Add bool return to
Robot::ClearFault()
to indicate whether the fault is cleared successfully; update usage in examples accordingly. - Add
Gripper::moving()
to replaceGripperStates::isMoving
. - Add
Gripper::Init()
to manually trigger gripper initialization; update gripper control examples accordingly. - Add string names array
kModeNames
for robot control modes. - Add more supported formats for robot SN input when constructing
flexiv::Robot
.
CHANGE
- Update format requirement of input parameter with ARRAY_COORD type for
Robot::ExecutePrimitive()
. - Adopt the Google C++ Style Guide globally.
- Increase nominal Cartesian stiffness of Rizon 4/4s from 6000/400 to 10000/1000, Rizon 10/10s from 12000/1200 to 20000/2000.
- Replace
Robot::getRobotStates()
withRobot::states()
direct accessor. - Replace
Robot::getMode()
withRobot::mode()
direct accessor. - Replace
Robot::getPlanNameList()
withRobot::plan_list()
direct accessor. - Replace
Robot::getPlanInfo()
withRobot::plan_info()
direct accessor. - Replace
Robot::getGlobalVariables()
withRobot::global_variables()
direct accessor. - Replace
Robot::getPrimitiveStates()
withRobot::primitive_states()
direct accessor. - Rename
Gripper::getGripperStates()
toGripper::states()
. - Rename
Tool::switchTo()
toTool::Switch()
. - Rename
Tool::getToolList()
toTool::list()
. - Rename
Tool::getCurrentToolName()
toTool::name()
. - Rename
Tool::getToolParams()
toTool::params()
; add function overload forTool::getCurrentToolParams()
. - Rename functions in
flexiv::Model
to math symbol representations. - Revert Windows action runner version to 2022 as the MSVC compatibility issue is fixed. Remove temporary warning from README accordingly.
- Remove
RobotInfo::qHome
. - Improve API docs.
- Update examples and tests with new function naming.
- Bump supported Python version from 3.8/3.10 to 3.10/3.12.
- Update
.gitignore
. - Update Windows compilation toolkit requirement in README.
FIX
- Fix singularity bug under
NRT_CARTESIAN_MOTION_FORCE
control mode (#42). - Fix data corruption when requesting primitive states (#47).
- Fix discontinuous null-space posture transition (#45).
- Fix robot tool update examples.
- Fix control mode mismatch bug in real-time control modes.
- Upgrade Fast-DDS version to v2.6.7, this fixed the compatibility issue with MSVC v143 (Visual Studio 2022).
- Remove incorrect comment from
basics3_primitive_execution.py
.
v0.9.1
COMPATIBILITY
- Flexiv software package v2.11.3
ADD
(None)
CHANGE
(None)
FIX
- Fix a bug where the second consecutive plan execution command won't execute.
v1.2
COMPATIBILITY
- Internal pre-release
ADD
- Add API access of
flexiv::Model
to Windows. - Add new API
flexiv::Tool
to online update the robot tools. Add C++ and Python examples. - Add
ToolParams
data struct toData.hpp
. - Add new API
flexiv::FileIO
to do file transfer with the robot. - Add
Robot::setBreakpointMode()
andRobot::stepBreakpoint()
to do breakpoint control when executing plans. - Add
PlanInfo::waitingForStep
variable to indicate breakpoint status. - Add more generic Cartesian motion-force control modes
RT/NRT_CARTESIAN_MOTION_FORCE
to replace the old ones which areRT/NRT_CARTESIAN_MOTION_FORCE_TCP
andRT/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
continueExec
toRobot::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
Robot::isEnablingButtonPressed()
to check if the enabling button on the robot motion bar is pressed. - Add
Robot::getErrorMessage()
to get error message if the robot is in fault state. - 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.
- Overload
Gripper::getGripperStates()
with a variant that directly returnsGripperStates
data struct. - Overload
Robot::getRobotStates()
with a variant that directly returnsRobotStates
data struct. - Add GitHub workflow for macOS build.
CHANGE
- Split RDK license to Standard license and Professional license. The standard license provides access to essential and non-real-time functionalities such as reading robot states, sending plan/primitive commands, etc. The professional license provides access to everything included with the standard license, plus robot dynamics and real-time functionalities such as joint torque/position streaming, Cartesian motion/force streaming, etc.
- Change
Robot::streamCartesianMotionForce()
andRobot::sendCartesianMotionForce()
to use the same controller asMoveHybrid
primitive. Update Cartesian motion-force control examples accordingly. - Change
Robot::getPlanInfo()
to returnPlanInfo
data struct directly. - Change the term "base" to "world" when referring to the robot's global coordinate.
- Change
RobotStates::extWrenchInBase
toRobotStates::extWrenchInWorld
. - Make the effect of
Robot::setNullSpacePosture()
persistent: not resetting preferred joint positions to nominal when switching modes. - Remove input parameter
isBlocking
fromScheduler::start()
, the user should implement their own blocking from the calling thread if needed. Update examples accordingly. - Remove check on elapsed waiting time of
Robot::isOperational()
from the examples. - Remove
RobotStates::camPose
: the ownership of camera pose is transferred to Noema AI system. - Merge
test_dynamics_with_tool
intotest_dynamics_engine
. - Improve function docs.
- Remove Ubuntu 18.04 from supported OS list.
- Rename C++ libs to the same pattern as the Python libs.
- Format Python examples using Black Formatter.
- Update MSVC compatible version in README.
FIX
- Fix a root link bug in
flexiv::Model
. - Fix memory leak of
flexiv::Scheduler
. - Fix initial timer fluctuation of
flexiv::Scheduler
. - Fix
Robot::runAutoRecovery()
.
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
maxLinearVel
andmaxAngularVel
input 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_FORCE
to replace the old ones which areRT/NRT_CARTESIAN_MOTION_FORCE_TCP
andRT/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
continueExec
toRobot::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 asMoveHybrid
primitive. 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
gravityEarth
from the constructor offlexiv::Model
. The value will now be auto-synced from the connected robot. - Remove input parameter
isBlocking
fromScheduler::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::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
ofRobot::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::Robot
functions. - Add
maxLinearVel
andmaxAngularVel
input 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.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 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_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
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