Repository navigation
Release/v2.1 - #194
Merged
Merged
Release/v2.1#194
Conversation
…ble() with SolveConstrainedIK()
pzhu-flexiv
requested review from
Aathitian-flexiv,
JinWu-flexiv,
Copilot,
shuyun-flexiv and
yzqian-flexiv
June 19, 2026 22:48
There was a problem hiding this comment.
Pull request overview
Release v2.1 update of Flexiv RDK that migrates the communication middleware from Fast DDS to Zenoh and expands multi–joint-group support across APIs, examples, docs, and CI.
Changes:
- Replaces Fast DDS dependency install flow with Zenoh (new installer + CMake dependency updates).
- Adds/updates API surface for multi-group operation (e.g., joint-group maps in
RobotInfo, newRobotActions, constrained IK, gripper/tool per-group APIs) and updates C++/Python examples accordingly. - Refreshes CI to separate C++ and Python workflows, and updates tests/docs for new serial/model conventions and v2.1 versioning.
Reviewed changes
Copilot reviewed 76 out of 77 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| thirdparty/scripts/install_zenoh.sh | Adds Zenoh (zenoh-c + zenoh-cpp) dependency install script, including Windows Rust toolchain handling. |
| thirdparty/scripts/install_foonathan_memory.sh | Removes Fast DDS vendor dependency install script. |
| thirdparty/scripts/install_Fast-DDS.sh | Removes Fast DDS install script. |
| thirdparty/scripts/install_Fast-CDR.sh | Removes Fast CDR install script. |
| thirdparty/patches/fastdds_qnx802.patch | Removes QNX patch previously needed for Fast DDS. |
| thirdparty/build_and_install_dependencies.sh | Switches dependency build sequence to install Zenoh instead of Fast DDS stack. |
| test/test_timeliness_monitor.cpp | Updates test to use RobotInfo::single_arm_groups and ServoOn(). |
| test/test_robot_constructor.py | Adds Python unit test covering offline robot construction/serial validation behavior. |
| test/test_robot_constructor.cpp | Adds C++ unit test covering offline robot construction/serial validation behavior. |
| test/test_repeated_instantiation.cpp | Updates example/test to ServoOn() and new serial format hint text. |
| test/test_loop_latency.cpp | Updates example/test to ServoOn() and new serial format hint text. |
| test/test_endurance.cpp | Updates endurance test for Home(), single-arm group constraints, and joint-group map usage. |
| test/test_dynamics_engine.cpp | Updates dynamics test to use JointGroup::ALL, Home(), and per-group Tool APIs. |
| test/CMakeLists.txt | Refactors test build (functional vs unit tests), adds GTest FetchContent, switches to C++20. |
| README.md | Updates badges, notes formatting, Windows runtime guidance, serial examples, and minimum CMake version. |
| llms.txt | Updates repository guidance for v2.1 API (groups from robot.info(), ServoOn(), wait helper pattern). |
| LICENSE | Updates third-party license list to reflect Zenoh instead of Fast DDS dependencies. |
| lib/libflexiv_rdk.x86_64-linux-gnu.a.sha256 | Updates expected hash for released static library artifact. |
| lib/libflexiv_rdk.arm64-darwin.a.sha256 | Updates expected hash for released static library artifact. |
| lib/libflexiv_rdk.aarch64-linux-gnu.a.sha256 | Updates expected hash for released static library artifact. |
| lib/flexiv_rdk.win_amd64.lib.sha256 | Updates expected hash for released static library artifact. |
| include/flexiv/rdk/work_coord.hpp | Switches to nested namespace declaration style. |
| include/flexiv/rdk/utility.hpp | Adds primitive-state wait helpers and single-arm group helper; switches to nested namespace declarations. |
| include/flexiv/rdk/tool.hpp | Updates Tool API to be joint-group aware (name/group, params/group, Switch(group, ...)). |
| include/flexiv/rdk/scheduler.hpp | Switches to nested namespace declaration style. |
| include/flexiv/rdk/safety.hpp | Migrates limits data to per-group maps and updates APIs to accept joint groups. |
| include/flexiv/rdk/model.hpp | Adds constrained IK structs/API, updates Update() naming, group-aware configuration score. |
| include/flexiv/rdk/mode.hpp | Makes mode-name map inline and updates doc references. |
| include/flexiv/rdk/maintenance.hpp | Switches to nested namespace declaration style and updates docs for group parameter. |
| include/flexiv/rdk/gripper.hpp | Makes gripper operations joint-group aware and returns per-group params/states. |
| include/flexiv/rdk/file_io.hpp | Removes file-size limit mentions and switches to nested namespace declaration style. |
| include/flexiv/rdk/device.hpp | Switches to nested namespace declaration style. |
| include/flexiv/rdk/data.hpp | Adds ProductModel, RobotActions, SyncMotionMode, new JointGroup entries, and various data-structure updates. |
| example/intermediate7_robot_dynamics.cpp | Updates dynamics example for Home(), JointGroup::ALL, and constrained IK API. |
| example/intermediate6_realtime_cartesian_motion_force_control.cpp | Updates example for Home(), ServoOn(), and group restrictions + primitive-state helper. |
| example/intermediate5_realtime_cartesian_pure_motion_control.cpp | Updates example for Home(), ServoOn(), group restrictions, and per-group nominal stiffness usage. |
| example/intermediate4_realtime_joint_floating.cpp | Updates example for Home() and ServoOn(). |
| example/intermediate3_realtime_joint_torque_control.cpp | Updates example for Home() and ServoOn(). |
| example/intermediate2_realtime_joint_impedance_control.cpp | Updates example for Home(), ServoOn(), group restrictions, and per-group nominal stiffness usage. |
| example/intermediate1_realtime_joint_position_control.cpp | Updates example for Home() and ServoOn(). |
| example/CMakeLists.txt | Enables CMP0167 policy workaround; switches examples to C++20; updates example list after removals. |
| example/basics9_logging_behavior.cpp | Fixes example annotation name and updates serial hint. |
| example/basics8_global_variables.cpp | Fixes example annotation name; updates to ServoOn(). |
| example/basics7_update_robot_tool.cpp | Fixes example annotation name; updates Tool APIs to be per-group and uses ServoOn(). |
| example/basics7_auto_recovery.cpp | Removes auto-recovery tutorial example per certification/feature removal. |
| example/basics6_gripper_control.cpp | Updates gripper example to per-group APIs and separate device/tool names; uses ServoOn(). |
| example/basics5_zero_force_torque_sensors.cpp | Updates primitive execution to single-arm groups and uses primitive-state helper; uses ServoOn(). |
| example/basics4_plan_execution.cpp | Updates to ServoOn() and serial hint changes. |
| example/basics3_primitive_execution.cpp | Updates to Home() convenience wrapper, single-arm groups, and primitive-state helper; uses ServoOn(). |
| example/basics2_clear_fault.cpp | Updates serial hint text. |
| example/basics1_display_robot_states.cpp | Updates to list groups via robot.info(), prints actions() and digital outputs, uses ServoOn(). |
| example_py/utility.py | Adds primitive-state wait helper in Python and documents module usage pattern. |
| example_py/intermediate5_robot_dynamics.py | Updates for Home(), JointGroup.ALL, and constrained IK API. |
| example_py/intermediate4_non_realtime_cartesian_motion_force_control.py | Uses Home(), ServoOn(), single_arm_groups, and Python primitive-state helper. |
| example_py/intermediate3_non_realtime_cartesian_pure_motion_control.py | Uses Home(), ServoOn(), single_arm_groups, and Python primitive-state helper. |
| example_py/intermediate2_non_realtime_joint_impedance_control.py | Uses Home(), ServoOn(), group restrictions, and per-group nominal stiffness usage. |
| example_py/intermediate1_non_realtime_joint_position_control.py | Uses Home() and ServoOn(). |
| example_py/basics8_global_variables.py | Fixes docstring filename and updates to ServoOn(). |
| example_py/basics7_update_robot_tool.py | Fixes docstring filename; updates Tool APIs to per-group and uses ServoOn(). |
| example_py/basics7_auto_recovery.py | Removes auto-recovery tutorial example per certification/feature removal. |
| example_py/basics6_gripper_control.py | Updates gripper example to per-group APIs and separate device/tool names; uses ServoOn(). |
| example_py/basics5_zero_force_torque_sensors.py | Updates primitive execution to single-arm groups and uses Python primitive-state helper; uses ServoOn(). |
| example_py/basics4_plan_execution.py | Updates to ServoOn() and serial hint changes. |
| example_py/basics3_primitive_execution.py | Uses Home() convenience wrapper, single-arm groups, improved primitive-state printing, and helper; uses ServoOn(). |
| example_py/basics2_clear_fault.py | Updates serial hint text. |
| example_py/basics1_display_robot_states.py | Updates to list groups via robot.info(), prints actions() and digital outputs, uses ServoOn(). |
| example_py/AGENT_REFERENCE_primitives_only.py | Updates agent reference to v2.1 group APIs, Home(), ServoOn(), and Python helper for transitions. |
| doc/Doxyfile.in | Bumps documentation version to 2.1. |
| CMakeLists.txt | Bumps project version to 2.1, swaps Fast DDS deps for Zenoh deps, enforces C++20, adds CMP0167 policy handling. |
| cmake/flexiv_rdk-config.cmake.in | Updates exported dependency list to Zenoh instead of Fast DDS. |
| .gitignore | Adds .venv ignore entry. |
| .github/workflows/shared_python_steps/action.yml | Adds shared composite action for Python checks (byte-compile + unit test). |
| .github/workflows/shared_cpp_steps/action.yml | Renames and extends shared C++ steps to run unit tests via ctest. |
| .github/workflows/cmake.yml | Removes monolithic CMake CI workflow in favor of split workflows. |
| .github/workflows/ci-python.yml | Adds dedicated Python CI workflow using shared steps across OS/Python matrix. |
| .github/workflows/ci-cpp.yml | Adds dedicated C++ CI workflow using shared steps across OS matrix. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…to ensure proper signaling and joining on exit
munseng-flexiv
approved these changes
Jun 22, 2026
munseng-flexiv
requested changes
Jun 24, 2026
This was referenced Jun 25, 2026
munseng-flexiv
approved these changes
Jun 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
COMPATIBILITY
ADD
RobotActionsstruct to define robot actions data in joint and Cartesian space, withRobot::actions()to retrieve the current actions data per joint groupSyncMotionModeenum for synchronous motion controlRobot::Home()to move the robot to its home postureRobot::SendCartesianMotionForceMultiWaypoint()and theNrtCartesianMultiWaypointCmdstruct for multi-waypoint Cartesian motion-force controlRobot::digital_outputs()to read the current digital output portsIKParamsandIKResultstructs andModel::SolveConstrainedIK()inmodel.hppProductModelenum andkProductModelNamesmap indata.hppALLandEXT_AXISentries added to theJointGroupenumRobotInfo::all_groupsandRobotInfo::single_arm_groupsmapsfriction_comp_scaleinput parameter toRtJointTorqueCmdutility::PrimitiveStateTrueForGroups()(with overload) andutility::IsSingleArmGroup()CHANGE
Robot::Enable()toRobot::ServoOn()andOperationalStatus::NOT_ENABLEDtoNOT_SERVO_ONto be consistent with the UIenabling_button_pressed()toenabling_device_on()and updatedRobot::estop_released()to cover all connected enabling/e-stop devicesRobotStates::tau_deswithRobotActions::tau_dSafetyLimitsto maps; changedGripper::Init()input parameter from vector to scalarRobotfunctionsRobot::LockExternalAxes()andSyncWithPositioner()with new entries inPrimitiveArgsRobot::primitive_states()to return only the joint groups that currently have a running primitive[groups]input parameter fromRobot::Brake()(now applies to all groups)Robot::groups()(info migrated toRobotInfo)RobotInfoupdates: replacedmodel_namestring withproduct_modelenum; combined all DoF variants into a single DoF map; changed limits and nominal values to maps; removedhas_FT_sensorRobotconstructor; removed thenetwork_interface_whitelistparameter from theRobotconstructorRobot::RunAutoRecovery()— recovery is now only permitted during manual mode per new certification requirementsRobot::ExecutePrimitive()andSetGlobalVariables(), and the file-size limit inFileIOinlineto const mapsllms.txtFIX
install_zenoh.shwait_primitive_transition()inAGENT_REFERENCE_primitives_only.py