{"id":38974869,"url":"https://github.com/flexivrobotics/flexiv_ros2","last_synced_at":"2026-01-17T16:45:14.096Z","repository":{"id":60782936,"uuid":"516288924","full_name":"flexivrobotics/flexiv_ros2","owner":"flexivrobotics","description":"ROS 2 integration of RDK for Flexiv robots.","archived":false,"fork":false,"pushed_at":"2026-01-13T08:01:57.000Z","size":5865,"stargazers_count":48,"open_issues_count":2,"forks_count":14,"subscribers_count":5,"default_branch":"humble","last_synced_at":"2026-01-13T10:45:43.365Z","etag":null,"topics":["flexiv","moveit2","robotics","ros2","ros2-humble","ros2-jazzy"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flexivrobotics.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-07-21T08:32:21.000Z","updated_at":"2026-01-12T15:24:53.000Z","dependencies_parsed_at":"2026-01-05T22:06:14.686Z","dependency_job_id":null,"html_url":"https://github.com/flexivrobotics/flexiv_ros2","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/flexivrobotics/flexiv_ros2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flexivrobotics%2Fflexiv_ros2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flexivrobotics%2Fflexiv_ros2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flexivrobotics%2Fflexiv_ros2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flexivrobotics%2Fflexiv_ros2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flexivrobotics","download_url":"https://codeload.github.com/flexivrobotics/flexiv_ros2/tar.gz/refs/heads/humble","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flexivrobotics%2Fflexiv_ros2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28511869,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T13:38:16.342Z","status":"ssl_error","status_checked_at":"2026-01-17T13:37:44.060Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flexiv","moveit2","robotics","ros2","ros2-humble","ros2-jazzy"],"created_at":"2026-01-17T16:45:13.551Z","updated_at":"2026-01-17T16:45:14.084Z","avatar_url":"https://github.com/flexivrobotics.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Flexiv ROS 2\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![docs](https://img.shields.io/badge/docs-sphinx-yellow)](https://www.flexiv.com/software/rdk/manual/ros2_bridge.html)\n\nFor ROS 2 users to easily work with [RDK](https://github.com/flexivrobotics/flexiv_rdk), the APIs of RDK are wrapped into ROS packages in `flexiv_ros2`. Key functionalities like realtime and non-realtime joint torque and position control are supported, and the integration with `ros2_control` framework and MoveIt! 2 is also implemented.\n\n## References\n\n[Flexiv RDK main webpage](https://www.flexiv.com/software/rdk) contains important information like RDK user manual and network setup.\n\n## Compatibility\n\n| **Supported OS** | **Supported ROS 2 distribution**                              |\n| ---------------- | ------------------------------------------------------------- |\n| Ubuntu 20.04     | [Foxy Fitzroy](https://docs.ros.org/en/foxy/index.html)       |\n| Ubuntu 22.04     | [Humble Hawksbill](https://docs.ros.org/en/humble/index.html) |\n| Ubuntu 24.04     | [Jazzy Jalisco](https://docs.ros.org/en/jazzy/index.html)     |\n\n### Release Status\n\n| **ROS 2 Distro**   | Foxy                 | Humble               | Jazzy                |\n| ------------------ | -------------------- | -------------------- | -------------------- |\n| **Branch**         | [foxy](https://github.com/flexivrobotics/flexiv_ros2/tree/foxy) *Last release: v0.9* | [humble](https://github.com/flexivrobotics/flexiv_ros2/tree/humble) | [jazzy](https://github.com/flexivrobotics/flexiv_ros2/tree/jazzy) |\n| **Release Status** | [![Foxy Binary Build](https://github.com/flexivrobotics/flexiv_ros2/actions/workflows/foxy-binary-build.yml/badge.svg?branch=foxy)](https://github.com/flexivrobotics/flexiv_ros2/actions/workflows/foxy-binary-build.yml) | [![Humble Binary Build](https://github.com/flexivrobotics/flexiv_ros2/actions/workflows/humble-binary-build.yml/badge.svg?branch=humble)](https://github.com/flexivrobotics/flexiv_ros2/actions/workflows/humble-binary-build.yml) | [![Jazzy Binary Build](https://github.com/flexivrobotics/flexiv_ros2/actions/workflows/jazzy-binary-build.yml/badge.svg?branch=jazzy)](https://github.com/flexivrobotics/flexiv_ros2/actions/workflows/jazzy-binary-build.yml) |\n\n## Getting Started\n\nThis project was developed for ROS 2 Foxy (Ubuntu 20.04), Humble (Ubuntu 22.04) and Jazzy (Ubuntu 24.04). Other versions of Ubuntu and ROS 2 may work, but are not officially supported.\n\n1. Install [ROS 2 Humble via Debian Packages](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html)\n\n2. Install `colcon` and additional ROS packages:\n\n   ```bash\n   sudo apt install -y \\\n   python3-colcon-common-extensions \\\n   python3-rosdep2 \\\n   libeigen3-dev \\\n   ros-humble-xacro \\\n   ros-humble-tinyxml2-vendor \\\n   ros-humble-ros2-control \\\n   ros-humble-realtime-tools \\\n   ros-humble-control-toolbox \\\n   ros-humble-moveit \\\n   ros-humble-ros2-controllers \\\n   ros-humble-test-msgs \\\n   ros-humble-joint-state-publisher \\\n   ros-humble-joint-state-publisher-gui \\\n   ros-humble-robot-state-publisher \\\n   ros-humble-rviz2\n   ```\n\n3. Setup workspace:\n\n   ```bash\n   mkdir -p ~/flexiv_ros2_ws/src\n   cd ~/flexiv_ros2_ws/src\n   git clone https://github.com/flexivrobotics/flexiv_ros2.git\n   cd flexiv_ros2/\n   git submodule update --init --recursive\n   ```\n\n4. Install dependencies:\n\n   ```bash\n   cd ~/flexiv_ros2_ws\n   rosdep update\n   rosdep install --from-paths src --ignore-src --rosdistro humble -r -y\n   ```\n\n\u003e [!NOTE]\n\u003e Skip step 5 and 6 if you have compile and install [flexiv_rdk](https://github.com/flexivrobotics/flexiv_rdk).\n\n5. Choose a directory for installing `flexiv_rdk` library and all its dependencies. For example, a new folder named `rdk_install` under the home directory: `~/rdk_install`. Compile and install to the installation directory:\n\n   ```bash\n   cd ~/flexiv_ros2_ws/src/flexiv_ros2/flexiv_hardware/rdk/thirdparty\n   bash build_and_install_dependencies.sh ~/rdk_install\n   ```\n\n6. Configure and install `flexiv_rdk`:\n\n   ```bash\n   cd ~/flexiv_ros2_ws/src/flexiv_ros2/flexiv_hardware/rdk\n   mkdir build \u0026\u0026 cd build\n   cmake .. -DCMAKE_INSTALL_PREFIX=~/rdk_install\n   cmake --build . --target install --config Release\n   ```\n\n7. Build and source the workspace:\n\n   ```bash\n   cd ~/flexiv_ros2_ws\n   source /opt/ros/humble/setup.bash\n   colcon build --symlink-install --cmake-args -DCMAKE_PREFIX_PATH=~/rdk_install\n   source install/setup.bash\n   ```\n\n\u003e [!NOTE]\n\u003e Remember to source the setup file and the workspace whenever a new terminal is opened:\n\u003e ```bash\n\u003e source /opt/ros/humble/setup.bash\n\u003e source ~/flexiv_ros2_ws/install/setup.bash\n\u003e ```\n\n## Usage\n\n\u003e [!NOTE]\n\u003e The instruction below is only a quick reference, see the [Flexiv ROS 2 Documentation](https://www.flexiv.com/software/rdk/manual/ros2_bridge.html) for more information.\n\nThe prerequisites of using ROS 2 with Flexiv Rizon robot are [enable RDK on the robot server](https://www.flexiv.com/software/rdk/manual/activate_rdk_server.html) and [establish connection](https://www.flexiv.com/software/rdk/manual/establish_connection.html) between the workstation PC and the robot.\n\nThe main launch file to start the robot driver is the `rizon.launch.py` - it loads and starts the robot hardware, joint states broadcaster, Flexiv robot states broadcasters, and robot controller and opens RViZ. The arguments for the launch file are as follows:\n\n- `robot_sn` (*required*) - Serial number of the robot to connect to. Remove any space, for example: Rizon4s-123456\n- `rizon_type` (default: *Rizon4*) - type of the Flexiv Rizon robot. (Rizon4, Rizon4M, Rizon4R, Rizon4s, Rizon10 or Rizon10s)\n- `rdk_control_mode` (default: *joint_position*) - Flexiv RDK control mode for ROS 2 joint position and velocity interfaces. Options: *joint_position* or *joint_impedance*\n- `load_gripper` (default: *false*) - loads the Flexiv Grav gripper as the end-effector of the robot and the gripper control node.\n- `use_fake_hardware` (default: *false*) - starts `FakeSystem` instead of real hardware. This is a simple simulation that mimics joint command to their states.\n- `start_rviz` (deafult: *true*) - starts RViz automatically with the launch file.\n- `fake_sensor_commands` (default: *false*) - enables fake command interfaces for sensors used for simulations. Used only if `use_fake_hardware` parameter is true.\n- `robot_controller` (default: *rizon_arm_controller*) - robot controller to start. Available controllers: *rizon_arm_controller*\n\n*(Details about other launch files can be found in [`flexiv_bringup`](/flexiv_bringup))*\n\n### Example Commands\n\n1. Start robot, or fake hardware:\n\n   - Test with real robot:\n\n     ```bash\n     ros2 launch flexiv_bringup rizon.launch.py robot_sn:=[robot_sn] rizon_type:=Rizon4\n     ```\n\n   - Test with fake hardware (`ros2_control` capability):\n\n     ```bash\n     ros2 launch flexiv_bringup rizon.launch.py robot_sn:=Rizon4-123456 use_fake_hardware:=true\n     ```\n\n\u003e [!TIP]\n\u003e To test whether the connection between ROS and the robot is established, you could disable the starting of RViz first by setting the `start_rviz` launch argument to false.\n\n2. Publish commands to controllers\n\n   - To send the goal position to the controller by using the node from `flexiv_test_nodes`, start the following command in a new terminal:\n\n     ```bash\n     ros2 launch flexiv_bringup test_joint_trajectory_controller.launch.py robot_sn:=[robot_sn]\n     ```\n\n     The joint position goals can be changed in `flexiv_bringup/config/joint_trajectory_position_publisher.yaml`\n\n### Using MoveIt\n\nYou can also run the MoveIt example and use the `MotionPlanning` plugin in RViZ to start planning:\n\n```bash\nros2 launch flexiv_bringup rizon_moveit.launch.py robot_sn:=[robot_sn]\n```\n\nTest with fake hardware:\n\n```bash\nros2 launch flexiv_bringup rizon_moveit.launch.py robot_sn:=Rizon4-123456 use_fake_hardware:=true\n```\n\n### Robot States\n\nThe robot driver (`rizon.launch.py`) publishes the following feedback states to the respective ROS topics:\n\n- `/${robot_sn}/flexiv_robot_states`: [Flexiv robot states](https://www.flexiv.com/software/rdk/api/structflexiv_1_1rdk_1_1_robot_states.html) including the joint- and Cartesian-space robot states. [[`flexiv_msgs/msg/RobotStates.msg`](flexiv_msgs/msg/RobotStates.msg)]\n- `/joint_states`: Measured joint states of the robot: joint position, velocity and torque. [[`sensor_msgs/JointState.msg`](https://docs.ros.org/en/noetic/api/sensor_msgs/html/msg/JointState.html)]\n- `/${robot_sn}/tcp_pose`: Measured TCP pose expressed in world frame $^{0}T_{TCP}$ in position $[m]$ and quaternion. [[`geometry_msgs/PoseStamped.msg`](https://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/PoseStamped.html)]\n- `/${robot_sn}/external_wrench_in_tcp`: Estimated external wrench applied on TCP and expressed in TCP frame $^{TCP}F_{ext}$ in force $[N]$ and torque $[Nm]$. [[`geometry_msgs/WrenchStamped.msg`](https://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/WrenchStamped.html)]\n- `/${robot_sn}/external_wrench_in_world`: Estimated external wrench applied on TCP and expressed in world frame $^{0}F_{ext}$ in force $[N]$ and torque $[Nm]$. [[`geometry_msgs/WrenchStamped.msg`](https://docs.ros.org/en/noetic/api/geometry_msgs/html/msg/WrenchStamped.html)]\n\n### GPIO\n\nAll digital inputs on the robot control box can be accessed via the ROS topic `/{robot_sn}/gpio_inputs`, which publishes the current state of all the 18 *(16 on control box + 2 inside the wrist connector)* digital input ports *(True: port high, false: port low)*.\n\nThe digital output ports on the control box can be set by publishing to the topic `/{robot_sn}/gpio_outputs`. For example:\n\n```bash\nros2 topic pub /Rizon4_123456/gpio_outputs flexiv_msgs/msg/GPIOStates \"{states: [{pin: 0, state: true}, {pin: 2, state: true}]}\"\n```\n\n### Gripper Control\n\nThe gripper control is implemented in the `flexiv_gripper` package to interface with the gripper that is connected to the robot.\n\nStart the `flexiv_gripper_node` with the following launch file, the default gripper is Flexiv Grav (Flexiv-GN01):\n\n```bash\nros2 launch flexiv_gripper flexiv_gripper.launch.py robot_sn:=[robot_sn] gripper_name:=Flexiv-GN01\n```\n\nOr, you can also start the gripper control with the robot driver if the gripper is Flexiv Grav:\n\n```bash\nros2 launch flexiv_bringup rizon.launch.py robot_sn:=[robot_sn] load_gripper:=true\n```\n\n#### Gripper Actions\n\nIn a new terminal, send the gripper action `move` goal to open or close the gripper:\n\n```bash\n# Closing the gripper\nros2 action send_goal /flexiv_gripper_node/move flexiv_msgs/action/Move \"{width: 0.01, velocity: 0.1, max_force: 20}\"\n# Opening the gripper\nros2 action send_goal /flexiv_gripper_node/move flexiv_msgs/action/Move \"{width: 0.09, velocity: 0.1, max_force: 20}\"\n```\n\nThe `grasp` action enables the gripper to grasp with direct force control, but it requires the mounted gripper to support direct force control. Send a `grasp` command to the gripper:\n\n```bash\nros2 action send_goal /flexiv_gripper_node/grasp flexiv_msgs/action/Grasp \"{force: 0}\"\n```\n\nTo stop the gripper, send a `stop` service call:\n\n```bash\nros2 service call /flexiv_gripper_node/stop std_srvs/srv/Trigger {}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflexivrobotics%2Fflexiv_ros2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflexivrobotics%2Fflexiv_ros2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflexivrobotics%2Fflexiv_ros2/lists"}