Repository Summary
| Description | |
| Checkout URI | https://github.com/tenfoldpaper/multipanda_ros2.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-02-05 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| franka_bringup | 0.0.0 |
| franka_control2 | 0.0.0 |
| franka_description | 0.0.0 |
| franka_example_controllers | 0.0.0 |
| franka_gripper | 0.0.0 |
| franka_hardware | 0.0.0 |
| franka_moveit_config | 0.0.0 |
| franka_msgs | 0.0.0 |
| multi_mode_control_msgs | 0.0.0 |
| multi_mode_controller | 0.0.0 |
| multi_mode_controller_impl | 0.0.0 |
| panda_motion_generator_msgs | 0.0.0 |
| panda_motion_generators | 0.0.0 |
| franka_robot_state_broadcaster | 0.0.1 |
| franka_semantic_components | 0.0.0 |
| franka_simple_publishers | 0.0.0 |
| garmi_bringup | 0.0.0 |
| garmi_controllers | 0.0.0 |
| garmi_description | 0.0.0 |
| garmi_moveit_config | 0.0.0 |
README
multipanda_ros2
A sim- and real Panda robot integration based on the ros2_control framework

This project implements most features from the original franka_ros repository in ROS2 Humble, specifically for the Franka Emika Robot (Panda).
This project significantly expands upon the original franka_ros2 from the company, who dropped the support for the Pandas.
Additionally, multi-arm mujoco simulation has been integrated, meaning you can now run the same controller on both simulated and real robots.
The simulation is designed as a plugin to the mujoco_ros_pkg.
The current version relies on a fork of the repository, which implements the ros2_control plugin as well as a generic SystemInterface for simple robot setups (e.g. a Panda arm mounted on a mobile base). This means, you should install the fork, not the original repo, until the two have been merged.
Work is ongoing to integrate FR3 into the architecture.
Documentation
Documentation for this project is available here.
Working features
More thorough information is available in the documentation.
- Real robot:
- FrankaState broadcaster
- All control interfaces (torque, position, velocity, Cartesian).
- Example controllers for all interfaces
- Controllers are swappable using rqt_controller_manager
- Runtime franka::ControlException error recovery via
~/service_server/error_recovery- Upon recovery, the previously executed control loop will be executed again, so no reloading necessary.
- Runtime internal parameter setter services much like what is offered in the updated
franka_ros2
- Sim robot:
- Same as the real robot, except Cartesian command interface is not available, and there is no plan to implement this for now.
- Gripper server with identical interface to the real gripper (i.e. action servers)
- Example controllers for the real single-arm listed above, that correspond to those interfaces, work out of the box.
- FrankaState implements the basics: torque, joint position/velocity,
O_T_EEandO_F_ext_hat. - Model provides all the existing functions:
pose,zeroJacobian,bodyJacobian,mass,gravity,coriolis.- Gravity for now just returns the corresponding
qfrc_gravcompforce from mujoco. - Coriolis =
qfrc_bias - qfrc_gravcomp
- Gravity for now just returns the corresponding
- Camera is available as part of
mujoco_ros_pkg’s features. You can simply add a<camera>object in your mujoco XML file, and the package will handle them. - With the forked repository’s
mujoco_ros2_control_systempackage, you can easily add components with additional degrees of freedom to your robot. Take a look atgarmi_packages/garmi_description/robots/*.ros2_control.xacrofor an example on how to do this.
Known issues
- Joint position controller might cause some bad motor behaviors. Suggest using torque or velocity for now.
- The default
franka_moveit_configpackage depends onwarehouse_ros_mongo, which has been deprecated. It has been changed towarehouse_ros_sqlitefor now to ensure thatrosdep installworks properly. For now, please refer to this discussion here for a potential solution; once a proper solution has been identified, it will be added.
Installation with One-Click Installer (Recommended)
- Clone the repository recursively to include mujoco_ros_pkgs:
git clone --recursive https://github.com/tenfoldpaper/multipanda_ros2.git
- Then cd into the cloned repository:
cd multipanda_ros2
- Build the docker image by running one command (takes some time):
./tools/setup_env
- Once the image is built, start the development container:
./run
Default config allows for communication in the network, gpu access, display forwarding for GUI applications, hardware devices, etc. By default the script opens a bash shell inside the container as a developer user (password can be modified in Dockerfile) in ros2 workspace under ~/multipanda_ws.
- Build ROS2 packages with:
colcon build
- In case there are some problems with missing packages, try running the following commands inside the container before
colcon build:
sudo apt update && \
rosdep update && \
rosdep install --from-paths src --ignore-src -y -r
- To verify that the installation was successful, run:
source ~/multipanda_ws/install/setup.bash && \
ros2 launch franka_bringup franka_sim.launch.py
- This should open up MuJoCo simulation with one Franka Panda arm
- To open the docker container in additional terminal, use docker exec command:
docker exec -it --user developer multipanda-container bash
- (OPTIONAL) Check that the connection to the robot, RT kernel and screen are all working fine (make sure that FCI feature is activated).
- You can check if docker is properly linked to your screen by running:
-
ros2 run rviz2 rviz2or ~/Libraries/mujoco/bin/simulate
-
- For RT kernel and robot connection, run
~/Libraries/libfranka/bin/communication_test <robot-ip>
- You can check if docker is properly linked to your screen by running:
Manual Installation Guide (Not recommended)
(Tested on Ubuntu 22.04, ROS2 Humble, Panda 4.2.2 & 4.2.1, libfranka 0.9.2 and MuJoCo 3.2.0)
On a computer running Ubuntu 22.04 and real-time kernel (if you wish to use it with a real robot), do the following:
- Install ROS2 Humble by following their [instructions][humble-instructions] and create a workspace.
- Install library dependencies:
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
libfrankasteps.- Some functions will break if you use Eigen 3.4.0, and will fail to compile.
- Install
dq-roboticsC++ version
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/tenfoldpaper/multipanda_ros2.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-02-05 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| franka_bringup | 0.0.0 |
| franka_control2 | 0.0.0 |
| franka_description | 0.0.0 |
| franka_example_controllers | 0.0.0 |
| franka_gripper | 0.0.0 |
| franka_hardware | 0.0.0 |
| franka_moveit_config | 0.0.0 |
| franka_msgs | 0.0.0 |
| multi_mode_control_msgs | 0.0.0 |
| multi_mode_controller | 0.0.0 |
| multi_mode_controller_impl | 0.0.0 |
| panda_motion_generator_msgs | 0.0.0 |
| panda_motion_generators | 0.0.0 |
| franka_robot_state_broadcaster | 0.0.1 |
| franka_semantic_components | 0.0.0 |
| franka_simple_publishers | 0.0.0 |
| garmi_bringup | 0.0.0 |
| garmi_controllers | 0.0.0 |
| garmi_description | 0.0.0 |
| garmi_moveit_config | 0.0.0 |
README
multipanda_ros2
A sim- and real Panda robot integration based on the ros2_control framework

This project implements most features from the original franka_ros repository in ROS2 Humble, specifically for the Franka Emika Robot (Panda).
This project significantly expands upon the original franka_ros2 from the company, who dropped the support for the Pandas.
Additionally, multi-arm mujoco simulation has been integrated, meaning you can now run the same controller on both simulated and real robots.
The simulation is designed as a plugin to the mujoco_ros_pkg.
The current version relies on a fork of the repository, which implements the ros2_control plugin as well as a generic SystemInterface for simple robot setups (e.g. a Panda arm mounted on a mobile base). This means, you should install the fork, not the original repo, until the two have been merged.
Work is ongoing to integrate FR3 into the architecture.
Documentation
Documentation for this project is available here.
Working features
More thorough information is available in the documentation.
- Real robot:
- FrankaState broadcaster
- All control interfaces (torque, position, velocity, Cartesian).
- Example controllers for all interfaces
- Controllers are swappable using rqt_controller_manager
- Runtime franka::ControlException error recovery via
~/service_server/error_recovery- Upon recovery, the previously executed control loop will be executed again, so no reloading necessary.
- Runtime internal parameter setter services much like what is offered in the updated
franka_ros2
- Sim robot:
- Same as the real robot, except Cartesian command interface is not available, and there is no plan to implement this for now.
- Gripper server with identical interface to the real gripper (i.e. action servers)
- Example controllers for the real single-arm listed above, that correspond to those interfaces, work out of the box.
- FrankaState implements the basics: torque, joint position/velocity,
O_T_EEandO_F_ext_hat. - Model provides all the existing functions:
pose,zeroJacobian,bodyJacobian,mass,gravity,coriolis.- Gravity for now just returns the corresponding
qfrc_gravcompforce from mujoco. - Coriolis =
qfrc_bias - qfrc_gravcomp
- Gravity for now just returns the corresponding
- Camera is available as part of
mujoco_ros_pkg’s features. You can simply add a<camera>object in your mujoco XML file, and the package will handle them. - With the forked repository’s
mujoco_ros2_control_systempackage, you can easily add components with additional degrees of freedom to your robot. Take a look atgarmi_packages/garmi_description/robots/*.ros2_control.xacrofor an example on how to do this.
Known issues
- Joint position controller might cause some bad motor behaviors. Suggest using torque or velocity for now.
- The default
franka_moveit_configpackage depends onwarehouse_ros_mongo, which has been deprecated. It has been changed towarehouse_ros_sqlitefor now to ensure thatrosdep installworks properly. For now, please refer to this discussion here for a potential solution; once a proper solution has been identified, it will be added.
Installation with One-Click Installer (Recommended)
- Clone the repository recursively to include mujoco_ros_pkgs:
git clone --recursive https://github.com/tenfoldpaper/multipanda_ros2.git
- Then cd into the cloned repository:
cd multipanda_ros2
- Build the docker image by running one command (takes some time):
./tools/setup_env
- Once the image is built, start the development container:
./run
Default config allows for communication in the network, gpu access, display forwarding for GUI applications, hardware devices, etc. By default the script opens a bash shell inside the container as a developer user (password can be modified in Dockerfile) in ros2 workspace under ~/multipanda_ws.
- Build ROS2 packages with:
colcon build
- In case there are some problems with missing packages, try running the following commands inside the container before
colcon build:
sudo apt update && \
rosdep update && \
rosdep install --from-paths src --ignore-src -y -r
- To verify that the installation was successful, run:
source ~/multipanda_ws/install/setup.bash && \
ros2 launch franka_bringup franka_sim.launch.py
- This should open up MuJoCo simulation with one Franka Panda arm
- To open the docker container in additional terminal, use docker exec command:
docker exec -it --user developer multipanda-container bash
- (OPTIONAL) Check that the connection to the robot, RT kernel and screen are all working fine (make sure that FCI feature is activated).
- You can check if docker is properly linked to your screen by running:
-
ros2 run rviz2 rviz2or ~/Libraries/mujoco/bin/simulate
-
- For RT kernel and robot connection, run
~/Libraries/libfranka/bin/communication_test <robot-ip>
- You can check if docker is properly linked to your screen by running:
Manual Installation Guide (Not recommended)
(Tested on Ubuntu 22.04, ROS2 Humble, Panda 4.2.2 & 4.2.1, libfranka 0.9.2 and MuJoCo 3.2.0)
On a computer running Ubuntu 22.04 and real-time kernel (if you wish to use it with a real robot), do the following:
- Install ROS2 Humble by following their [instructions][humble-instructions] and create a workspace.
- Install library dependencies:
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
libfrankasteps.- Some functions will break if you use Eigen 3.4.0, and will fail to compile.
- Install
dq-roboticsC++ version
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/tenfoldpaper/multipanda_ros2.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-02-05 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| franka_bringup | 0.0.0 |
| franka_control2 | 0.0.0 |
| franka_description | 0.0.0 |
| franka_example_controllers | 0.0.0 |
| franka_gripper | 0.0.0 |
| franka_hardware | 0.0.0 |
| franka_moveit_config | 0.0.0 |
| franka_msgs | 0.0.0 |
| multi_mode_control_msgs | 0.0.0 |
| multi_mode_controller | 0.0.0 |
| multi_mode_controller_impl | 0.0.0 |
| panda_motion_generator_msgs | 0.0.0 |
| panda_motion_generators | 0.0.0 |
| franka_robot_state_broadcaster | 0.0.1 |
| franka_semantic_components | 0.0.0 |
| franka_simple_publishers | 0.0.0 |
| garmi_bringup | 0.0.0 |
| garmi_controllers | 0.0.0 |
| garmi_description | 0.0.0 |
| garmi_moveit_config | 0.0.0 |
README
multipanda_ros2
A sim- and real Panda robot integration based on the ros2_control framework

This project implements most features from the original franka_ros repository in ROS2 Humble, specifically for the Franka Emika Robot (Panda).
This project significantly expands upon the original franka_ros2 from the company, who dropped the support for the Pandas.
Additionally, multi-arm mujoco simulation has been integrated, meaning you can now run the same controller on both simulated and real robots.
The simulation is designed as a plugin to the mujoco_ros_pkg.
The current version relies on a fork of the repository, which implements the ros2_control plugin as well as a generic SystemInterface for simple robot setups (e.g. a Panda arm mounted on a mobile base). This means, you should install the fork, not the original repo, until the two have been merged.
Work is ongoing to integrate FR3 into the architecture.
Documentation
Documentation for this project is available here.
Working features
More thorough information is available in the documentation.
- Real robot:
- FrankaState broadcaster
- All control interfaces (torque, position, velocity, Cartesian).
- Example controllers for all interfaces
- Controllers are swappable using rqt_controller_manager
- Runtime franka::ControlException error recovery via
~/service_server/error_recovery- Upon recovery, the previously executed control loop will be executed again, so no reloading necessary.
- Runtime internal parameter setter services much like what is offered in the updated
franka_ros2
- Sim robot:
- Same as the real robot, except Cartesian command interface is not available, and there is no plan to implement this for now.
- Gripper server with identical interface to the real gripper (i.e. action servers)
- Example controllers for the real single-arm listed above, that correspond to those interfaces, work out of the box.
- FrankaState implements the basics: torque, joint position/velocity,
O_T_EEandO_F_ext_hat. - Model provides all the existing functions:
pose,zeroJacobian,bodyJacobian,mass,gravity,coriolis.- Gravity for now just returns the corresponding
qfrc_gravcompforce from mujoco. - Coriolis =
qfrc_bias - qfrc_gravcomp
- Gravity for now just returns the corresponding
- Camera is available as part of
mujoco_ros_pkg’s features. You can simply add a<camera>object in your mujoco XML file, and the package will handle them. - With the forked repository’s
mujoco_ros2_control_systempackage, you can easily add components with additional degrees of freedom to your robot. Take a look atgarmi_packages/garmi_description/robots/*.ros2_control.xacrofor an example on how to do this.
Known issues
- Joint position controller might cause some bad motor behaviors. Suggest using torque or velocity for now.
- The default
franka_moveit_configpackage depends onwarehouse_ros_mongo, which has been deprecated. It has been changed towarehouse_ros_sqlitefor now to ensure thatrosdep installworks properly. For now, please refer to this discussion here for a potential solution; once a proper solution has been identified, it will be added.
Installation with One-Click Installer (Recommended)
- Clone the repository recursively to include mujoco_ros_pkgs:
git clone --recursive https://github.com/tenfoldpaper/multipanda_ros2.git
- Then cd into the cloned repository:
cd multipanda_ros2
- Build the docker image by running one command (takes some time):
./tools/setup_env
- Once the image is built, start the development container:
./run
Default config allows for communication in the network, gpu access, display forwarding for GUI applications, hardware devices, etc. By default the script opens a bash shell inside the container as a developer user (password can be modified in Dockerfile) in ros2 workspace under ~/multipanda_ws.
- Build ROS2 packages with:
colcon build
- In case there are some problems with missing packages, try running the following commands inside the container before
colcon build:
sudo apt update && \
rosdep update && \
rosdep install --from-paths src --ignore-src -y -r
- To verify that the installation was successful, run:
source ~/multipanda_ws/install/setup.bash && \
ros2 launch franka_bringup franka_sim.launch.py
- This should open up MuJoCo simulation with one Franka Panda arm
- To open the docker container in additional terminal, use docker exec command:
docker exec -it --user developer multipanda-container bash
- (OPTIONAL) Check that the connection to the robot, RT kernel and screen are all working fine (make sure that FCI feature is activated).
- You can check if docker is properly linked to your screen by running:
-
ros2 run rviz2 rviz2or ~/Libraries/mujoco/bin/simulate
-
- For RT kernel and robot connection, run
~/Libraries/libfranka/bin/communication_test <robot-ip>
- You can check if docker is properly linked to your screen by running:
Manual Installation Guide (Not recommended)
(Tested on Ubuntu 22.04, ROS2 Humble, Panda 4.2.2 & 4.2.1, libfranka 0.9.2 and MuJoCo 3.2.0)
On a computer running Ubuntu 22.04 and real-time kernel (if you wish to use it with a real robot), do the following:
- Install ROS2 Humble by following their [instructions][humble-instructions] and create a workspace.
- Install library dependencies:
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
libfrankasteps.- Some functions will break if you use Eigen 3.4.0, and will fail to compile.
- Install
dq-roboticsC++ version
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/tenfoldpaper/multipanda_ros2.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-02-05 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| franka_bringup | 0.0.0 |
| franka_control2 | 0.0.0 |
| franka_description | 0.0.0 |
| franka_example_controllers | 0.0.0 |
| franka_gripper | 0.0.0 |
| franka_hardware | 0.0.0 |
| franka_moveit_config | 0.0.0 |
| franka_msgs | 0.0.0 |
| multi_mode_control_msgs | 0.0.0 |
| multi_mode_controller | 0.0.0 |
| multi_mode_controller_impl | 0.0.0 |
| panda_motion_generator_msgs | 0.0.0 |
| panda_motion_generators | 0.0.0 |
| franka_robot_state_broadcaster | 0.0.1 |
| franka_semantic_components | 0.0.0 |
| franka_simple_publishers | 0.0.0 |
| garmi_bringup | 0.0.0 |
| garmi_controllers | 0.0.0 |
| garmi_description | 0.0.0 |
| garmi_moveit_config | 0.0.0 |
README
multipanda_ros2
A sim- and real Panda robot integration based on the ros2_control framework

This project implements most features from the original franka_ros repository in ROS2 Humble, specifically for the Franka Emika Robot (Panda).
This project significantly expands upon the original franka_ros2 from the company, who dropped the support for the Pandas.
Additionally, multi-arm mujoco simulation has been integrated, meaning you can now run the same controller on both simulated and real robots.
The simulation is designed as a plugin to the mujoco_ros_pkg.
The current version relies on a fork of the repository, which implements the ros2_control plugin as well as a generic SystemInterface for simple robot setups (e.g. a Panda arm mounted on a mobile base). This means, you should install the fork, not the original repo, until the two have been merged.
Work is ongoing to integrate FR3 into the architecture.
Documentation
Documentation for this project is available here.
Working features
More thorough information is available in the documentation.
- Real robot:
- FrankaState broadcaster
- All control interfaces (torque, position, velocity, Cartesian).
- Example controllers for all interfaces
- Controllers are swappable using rqt_controller_manager
- Runtime franka::ControlException error recovery via
~/service_server/error_recovery- Upon recovery, the previously executed control loop will be executed again, so no reloading necessary.
- Runtime internal parameter setter services much like what is offered in the updated
franka_ros2
- Sim robot:
- Same as the real robot, except Cartesian command interface is not available, and there is no plan to implement this for now.
- Gripper server with identical interface to the real gripper (i.e. action servers)
- Example controllers for the real single-arm listed above, that correspond to those interfaces, work out of the box.
- FrankaState implements the basics: torque, joint position/velocity,
O_T_EEandO_F_ext_hat. - Model provides all the existing functions:
pose,zeroJacobian,bodyJacobian,mass,gravity,coriolis.- Gravity for now just returns the corresponding
qfrc_gravcompforce from mujoco. - Coriolis =
qfrc_bias - qfrc_gravcomp
- Gravity for now just returns the corresponding
- Camera is available as part of
mujoco_ros_pkg’s features. You can simply add a<camera>object in your mujoco XML file, and the package will handle them. - With the forked repository’s
mujoco_ros2_control_systempackage, you can easily add components with additional degrees of freedom to your robot. Take a look atgarmi_packages/garmi_description/robots/*.ros2_control.xacrofor an example on how to do this.
Known issues
- Joint position controller might cause some bad motor behaviors. Suggest using torque or velocity for now.
- The default
franka_moveit_configpackage depends onwarehouse_ros_mongo, which has been deprecated. It has been changed towarehouse_ros_sqlitefor now to ensure thatrosdep installworks properly. For now, please refer to this discussion here for a potential solution; once a proper solution has been identified, it will be added.
Installation with One-Click Installer (Recommended)
- Clone the repository recursively to include mujoco_ros_pkgs:
git clone --recursive https://github.com/tenfoldpaper/multipanda_ros2.git
- Then cd into the cloned repository:
cd multipanda_ros2
- Build the docker image by running one command (takes some time):
./tools/setup_env
- Once the image is built, start the development container:
./run
Default config allows for communication in the network, gpu access, display forwarding for GUI applications, hardware devices, etc. By default the script opens a bash shell inside the container as a developer user (password can be modified in Dockerfile) in ros2 workspace under ~/multipanda_ws.
- Build ROS2 packages with:
colcon build
- In case there are some problems with missing packages, try running the following commands inside the container before
colcon build:
sudo apt update && \
rosdep update && \
rosdep install --from-paths src --ignore-src -y -r
- To verify that the installation was successful, run:
source ~/multipanda_ws/install/setup.bash && \
ros2 launch franka_bringup franka_sim.launch.py
- This should open up MuJoCo simulation with one Franka Panda arm
- To open the docker container in additional terminal, use docker exec command:
docker exec -it --user developer multipanda-container bash
- (OPTIONAL) Check that the connection to the robot, RT kernel and screen are all working fine (make sure that FCI feature is activated).
- You can check if docker is properly linked to your screen by running:
-
ros2 run rviz2 rviz2or ~/Libraries/mujoco/bin/simulate
-
- For RT kernel and robot connection, run
~/Libraries/libfranka/bin/communication_test <robot-ip>
- You can check if docker is properly linked to your screen by running:
Manual Installation Guide (Not recommended)
(Tested on Ubuntu 22.04, ROS2 Humble, Panda 4.2.2 & 4.2.1, libfranka 0.9.2 and MuJoCo 3.2.0)
On a computer running Ubuntu 22.04 and real-time kernel (if you wish to use it with a real robot), do the following:
- Install ROS2 Humble by following their [instructions][humble-instructions] and create a workspace.
- Install library dependencies:
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
libfrankasteps.- Some functions will break if you use Eigen 3.4.0, and will fail to compile.
- Install
dq-roboticsC++ version
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/tenfoldpaper/multipanda_ros2.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-02-05 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| franka_bringup | 0.0.0 |
| franka_control2 | 0.0.0 |
| franka_description | 0.0.0 |
| franka_example_controllers | 0.0.0 |
| franka_gripper | 0.0.0 |
| franka_hardware | 0.0.0 |
| franka_moveit_config | 0.0.0 |
| franka_msgs | 0.0.0 |
| multi_mode_control_msgs | 0.0.0 |
| multi_mode_controller | 0.0.0 |
| multi_mode_controller_impl | 0.0.0 |
| panda_motion_generator_msgs | 0.0.0 |
| panda_motion_generators | 0.0.0 |
| franka_robot_state_broadcaster | 0.0.1 |
| franka_semantic_components | 0.0.0 |
| franka_simple_publishers | 0.0.0 |
| garmi_bringup | 0.0.0 |
| garmi_controllers | 0.0.0 |
| garmi_description | 0.0.0 |
| garmi_moveit_config | 0.0.0 |
README
multipanda_ros2
A sim- and real Panda robot integration based on the ros2_control framework

This project implements most features from the original franka_ros repository in ROS2 Humble, specifically for the Franka Emika Robot (Panda).
This project significantly expands upon the original franka_ros2 from the company, who dropped the support for the Pandas.
Additionally, multi-arm mujoco simulation has been integrated, meaning you can now run the same controller on both simulated and real robots.
The simulation is designed as a plugin to the mujoco_ros_pkg.
The current version relies on a fork of the repository, which implements the ros2_control plugin as well as a generic SystemInterface for simple robot setups (e.g. a Panda arm mounted on a mobile base). This means, you should install the fork, not the original repo, until the two have been merged.
Work is ongoing to integrate FR3 into the architecture.
Documentation
Documentation for this project is available here.
Working features
More thorough information is available in the documentation.
- Real robot:
- FrankaState broadcaster
- All control interfaces (torque, position, velocity, Cartesian).
- Example controllers for all interfaces
- Controllers are swappable using rqt_controller_manager
- Runtime franka::ControlException error recovery via
~/service_server/error_recovery- Upon recovery, the previously executed control loop will be executed again, so no reloading necessary.
- Runtime internal parameter setter services much like what is offered in the updated
franka_ros2
- Sim robot:
- Same as the real robot, except Cartesian command interface is not available, and there is no plan to implement this for now.
- Gripper server with identical interface to the real gripper (i.e. action servers)
- Example controllers for the real single-arm listed above, that correspond to those interfaces, work out of the box.
- FrankaState implements the basics: torque, joint position/velocity,
O_T_EEandO_F_ext_hat. - Model provides all the existing functions:
pose,zeroJacobian,bodyJacobian,mass,gravity,coriolis.- Gravity for now just returns the corresponding
qfrc_gravcompforce from mujoco. - Coriolis =
qfrc_bias - qfrc_gravcomp
- Gravity for now just returns the corresponding
- Camera is available as part of
mujoco_ros_pkg’s features. You can simply add a<camera>object in your mujoco XML file, and the package will handle them. - With the forked repository’s
mujoco_ros2_control_systempackage, you can easily add components with additional degrees of freedom to your robot. Take a look atgarmi_packages/garmi_description/robots/*.ros2_control.xacrofor an example on how to do this.
Known issues
- Joint position controller might cause some bad motor behaviors. Suggest using torque or velocity for now.
- The default
franka_moveit_configpackage depends onwarehouse_ros_mongo, which has been deprecated. It has been changed towarehouse_ros_sqlitefor now to ensure thatrosdep installworks properly. For now, please refer to this discussion here for a potential solution; once a proper solution has been identified, it will be added.
Installation with One-Click Installer (Recommended)
- Clone the repository recursively to include mujoco_ros_pkgs:
git clone --recursive https://github.com/tenfoldpaper/multipanda_ros2.git
- Then cd into the cloned repository:
cd multipanda_ros2
- Build the docker image by running one command (takes some time):
./tools/setup_env
- Once the image is built, start the development container:
./run
Default config allows for communication in the network, gpu access, display forwarding for GUI applications, hardware devices, etc. By default the script opens a bash shell inside the container as a developer user (password can be modified in Dockerfile) in ros2 workspace under ~/multipanda_ws.
- Build ROS2 packages with:
colcon build
- In case there are some problems with missing packages, try running the following commands inside the container before
colcon build:
sudo apt update && \
rosdep update && \
rosdep install --from-paths src --ignore-src -y -r
- To verify that the installation was successful, run:
source ~/multipanda_ws/install/setup.bash && \
ros2 launch franka_bringup franka_sim.launch.py
- This should open up MuJoCo simulation with one Franka Panda arm
- To open the docker container in additional terminal, use docker exec command:
docker exec -it --user developer multipanda-container bash
- (OPTIONAL) Check that the connection to the robot, RT kernel and screen are all working fine (make sure that FCI feature is activated).
- You can check if docker is properly linked to your screen by running:
-
ros2 run rviz2 rviz2or ~/Libraries/mujoco/bin/simulate
-
- For RT kernel and robot connection, run
~/Libraries/libfranka/bin/communication_test <robot-ip>
- You can check if docker is properly linked to your screen by running:
Manual Installation Guide (Not recommended)
(Tested on Ubuntu 22.04, ROS2 Humble, Panda 4.2.2 & 4.2.1, libfranka 0.9.2 and MuJoCo 3.2.0)
On a computer running Ubuntu 22.04 and real-time kernel (if you wish to use it with a real robot), do the following:
- Install ROS2 Humble by following their [instructions][humble-instructions] and create a workspace.
- Install library dependencies:
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
libfrankasteps.- Some functions will break if you use Eigen 3.4.0, and will fail to compile.
- Install
dq-roboticsC++ version
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/tenfoldpaper/multipanda_ros2.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-02-05 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| franka_bringup | 0.0.0 |
| franka_control2 | 0.0.0 |
| franka_description | 0.0.0 |
| franka_example_controllers | 0.0.0 |
| franka_gripper | 0.0.0 |
| franka_hardware | 0.0.0 |
| franka_moveit_config | 0.0.0 |
| franka_msgs | 0.0.0 |
| multi_mode_control_msgs | 0.0.0 |
| multi_mode_controller | 0.0.0 |
| multi_mode_controller_impl | 0.0.0 |
| panda_motion_generator_msgs | 0.0.0 |
| panda_motion_generators | 0.0.0 |
| franka_robot_state_broadcaster | 0.0.1 |
| franka_semantic_components | 0.0.0 |
| franka_simple_publishers | 0.0.0 |
| garmi_bringup | 0.0.0 |
| garmi_controllers | 0.0.0 |
| garmi_description | 0.0.0 |
| garmi_moveit_config | 0.0.0 |
README
multipanda_ros2
A sim- and real Panda robot integration based on the ros2_control framework

This project implements most features from the original franka_ros repository in ROS2 Humble, specifically for the Franka Emika Robot (Panda).
This project significantly expands upon the original franka_ros2 from the company, who dropped the support for the Pandas.
Additionally, multi-arm mujoco simulation has been integrated, meaning you can now run the same controller on both simulated and real robots.
The simulation is designed as a plugin to the mujoco_ros_pkg.
The current version relies on a fork of the repository, which implements the ros2_control plugin as well as a generic SystemInterface for simple robot setups (e.g. a Panda arm mounted on a mobile base). This means, you should install the fork, not the original repo, until the two have been merged.
Work is ongoing to integrate FR3 into the architecture.
Documentation
Documentation for this project is available here.
Working features
More thorough information is available in the documentation.
- Real robot:
- FrankaState broadcaster
- All control interfaces (torque, position, velocity, Cartesian).
- Example controllers for all interfaces
- Controllers are swappable using rqt_controller_manager
- Runtime franka::ControlException error recovery via
~/service_server/error_recovery- Upon recovery, the previously executed control loop will be executed again, so no reloading necessary.
- Runtime internal parameter setter services much like what is offered in the updated
franka_ros2
- Sim robot:
- Same as the real robot, except Cartesian command interface is not available, and there is no plan to implement this for now.
- Gripper server with identical interface to the real gripper (i.e. action servers)
- Example controllers for the real single-arm listed above, that correspond to those interfaces, work out of the box.
- FrankaState implements the basics: torque, joint position/velocity,
O_T_EEandO_F_ext_hat. - Model provides all the existing functions:
pose,zeroJacobian,bodyJacobian,mass,gravity,coriolis.- Gravity for now just returns the corresponding
qfrc_gravcompforce from mujoco. - Coriolis =
qfrc_bias - qfrc_gravcomp
- Gravity for now just returns the corresponding
- Camera is available as part of
mujoco_ros_pkg’s features. You can simply add a<camera>object in your mujoco XML file, and the package will handle them. - With the forked repository’s
mujoco_ros2_control_systempackage, you can easily add components with additional degrees of freedom to your robot. Take a look atgarmi_packages/garmi_description/robots/*.ros2_control.xacrofor an example on how to do this.
Known issues
- Joint position controller might cause some bad motor behaviors. Suggest using torque or velocity for now.
- The default
franka_moveit_configpackage depends onwarehouse_ros_mongo, which has been deprecated. It has been changed towarehouse_ros_sqlitefor now to ensure thatrosdep installworks properly. For now, please refer to this discussion here for a potential solution; once a proper solution has been identified, it will be added.
Installation with One-Click Installer (Recommended)
- Clone the repository recursively to include mujoco_ros_pkgs:
git clone --recursive https://github.com/tenfoldpaper/multipanda_ros2.git
- Then cd into the cloned repository:
cd multipanda_ros2
- Build the docker image by running one command (takes some time):
./tools/setup_env
- Once the image is built, start the development container:
./run
Default config allows for communication in the network, gpu access, display forwarding for GUI applications, hardware devices, etc. By default the script opens a bash shell inside the container as a developer user (password can be modified in Dockerfile) in ros2 workspace under ~/multipanda_ws.
- Build ROS2 packages with:
colcon build
- In case there are some problems with missing packages, try running the following commands inside the container before
colcon build:
sudo apt update && \
rosdep update && \
rosdep install --from-paths src --ignore-src -y -r
- To verify that the installation was successful, run:
source ~/multipanda_ws/install/setup.bash && \
ros2 launch franka_bringup franka_sim.launch.py
- This should open up MuJoCo simulation with one Franka Panda arm
- To open the docker container in additional terminal, use docker exec command:
docker exec -it --user developer multipanda-container bash
- (OPTIONAL) Check that the connection to the robot, RT kernel and screen are all working fine (make sure that FCI feature is activated).
- You can check if docker is properly linked to your screen by running:
-
ros2 run rviz2 rviz2or ~/Libraries/mujoco/bin/simulate
-
- For RT kernel and robot connection, run
~/Libraries/libfranka/bin/communication_test <robot-ip>
- You can check if docker is properly linked to your screen by running:
Manual Installation Guide (Not recommended)
(Tested on Ubuntu 22.04, ROS2 Humble, Panda 4.2.2 & 4.2.1, libfranka 0.9.2 and MuJoCo 3.2.0)
On a computer running Ubuntu 22.04 and real-time kernel (if you wish to use it with a real robot), do the following:
- Install ROS2 Humble by following their [instructions][humble-instructions] and create a workspace.
- Install library dependencies:
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
libfrankasteps.- Some functions will break if you use Eigen 3.4.0, and will fail to compile.
- Install
dq-roboticsC++ version
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/tenfoldpaper/multipanda_ros2.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-02-05 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| franka_bringup | 0.0.0 |
| franka_control2 | 0.0.0 |
| franka_description | 0.0.0 |
| franka_example_controllers | 0.0.0 |
| franka_gripper | 0.0.0 |
| franka_hardware | 0.0.0 |
| franka_moveit_config | 0.0.0 |
| franka_msgs | 0.0.0 |
| multi_mode_control_msgs | 0.0.0 |
| multi_mode_controller | 0.0.0 |
| multi_mode_controller_impl | 0.0.0 |
| panda_motion_generator_msgs | 0.0.0 |
| panda_motion_generators | 0.0.0 |
| franka_robot_state_broadcaster | 0.0.1 |
| franka_semantic_components | 0.0.0 |
| franka_simple_publishers | 0.0.0 |
| garmi_bringup | 0.0.0 |
| garmi_controllers | 0.0.0 |
| garmi_description | 0.0.0 |
| garmi_moveit_config | 0.0.0 |
README
multipanda_ros2
A sim- and real Panda robot integration based on the ros2_control framework

This project implements most features from the original franka_ros repository in ROS2 Humble, specifically for the Franka Emika Robot (Panda).
This project significantly expands upon the original franka_ros2 from the company, who dropped the support for the Pandas.
Additionally, multi-arm mujoco simulation has been integrated, meaning you can now run the same controller on both simulated and real robots.
The simulation is designed as a plugin to the mujoco_ros_pkg.
The current version relies on a fork of the repository, which implements the ros2_control plugin as well as a generic SystemInterface for simple robot setups (e.g. a Panda arm mounted on a mobile base). This means, you should install the fork, not the original repo, until the two have been merged.
Work is ongoing to integrate FR3 into the architecture.
Documentation
Documentation for this project is available here.
Working features
More thorough information is available in the documentation.
- Real robot:
- FrankaState broadcaster
- All control interfaces (torque, position, velocity, Cartesian).
- Example controllers for all interfaces
- Controllers are swappable using rqt_controller_manager
- Runtime franka::ControlException error recovery via
~/service_server/error_recovery- Upon recovery, the previously executed control loop will be executed again, so no reloading necessary.
- Runtime internal parameter setter services much like what is offered in the updated
franka_ros2
- Sim robot:
- Same as the real robot, except Cartesian command interface is not available, and there is no plan to implement this for now.
- Gripper server with identical interface to the real gripper (i.e. action servers)
- Example controllers for the real single-arm listed above, that correspond to those interfaces, work out of the box.
- FrankaState implements the basics: torque, joint position/velocity,
O_T_EEandO_F_ext_hat. - Model provides all the existing functions:
pose,zeroJacobian,bodyJacobian,mass,gravity,coriolis.- Gravity for now just returns the corresponding
qfrc_gravcompforce from mujoco. - Coriolis =
qfrc_bias - qfrc_gravcomp
- Gravity for now just returns the corresponding
- Camera is available as part of
mujoco_ros_pkg’s features. You can simply add a<camera>object in your mujoco XML file, and the package will handle them. - With the forked repository’s
mujoco_ros2_control_systempackage, you can easily add components with additional degrees of freedom to your robot. Take a look atgarmi_packages/garmi_description/robots/*.ros2_control.xacrofor an example on how to do this.
Known issues
- Joint position controller might cause some bad motor behaviors. Suggest using torque or velocity for now.
- The default
franka_moveit_configpackage depends onwarehouse_ros_mongo, which has been deprecated. It has been changed towarehouse_ros_sqlitefor now to ensure thatrosdep installworks properly. For now, please refer to this discussion here for a potential solution; once a proper solution has been identified, it will be added.
Installation with One-Click Installer (Recommended)
- Clone the repository recursively to include mujoco_ros_pkgs:
git clone --recursive https://github.com/tenfoldpaper/multipanda_ros2.git
- Then cd into the cloned repository:
cd multipanda_ros2
- Build the docker image by running one command (takes some time):
./tools/setup_env
- Once the image is built, start the development container:
./run
Default config allows for communication in the network, gpu access, display forwarding for GUI applications, hardware devices, etc. By default the script opens a bash shell inside the container as a developer user (password can be modified in Dockerfile) in ros2 workspace under ~/multipanda_ws.
- Build ROS2 packages with:
colcon build
- In case there are some problems with missing packages, try running the following commands inside the container before
colcon build:
sudo apt update && \
rosdep update && \
rosdep install --from-paths src --ignore-src -y -r
- To verify that the installation was successful, run:
source ~/multipanda_ws/install/setup.bash && \
ros2 launch franka_bringup franka_sim.launch.py
- This should open up MuJoCo simulation with one Franka Panda arm
- To open the docker container in additional terminal, use docker exec command:
docker exec -it --user developer multipanda-container bash
- (OPTIONAL) Check that the connection to the robot, RT kernel and screen are all working fine (make sure that FCI feature is activated).
- You can check if docker is properly linked to your screen by running:
-
ros2 run rviz2 rviz2or ~/Libraries/mujoco/bin/simulate
-
- For RT kernel and robot connection, run
~/Libraries/libfranka/bin/communication_test <robot-ip>
- You can check if docker is properly linked to your screen by running:
Manual Installation Guide (Not recommended)
(Tested on Ubuntu 22.04, ROS2 Humble, Panda 4.2.2 & 4.2.1, libfranka 0.9.2 and MuJoCo 3.2.0)
On a computer running Ubuntu 22.04 and real-time kernel (if you wish to use it with a real robot), do the following:
- Install ROS2 Humble by following their [instructions][humble-instructions] and create a workspace.
- Install library dependencies:
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
libfrankasteps.- Some functions will break if you use Eigen 3.4.0, and will fail to compile.
- Install
dq-roboticsC++ version
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/tenfoldpaper/multipanda_ros2.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-02-05 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| franka_bringup | 0.0.0 |
| franka_control2 | 0.0.0 |
| franka_description | 0.0.0 |
| franka_example_controllers | 0.0.0 |
| franka_gripper | 0.0.0 |
| franka_hardware | 0.0.0 |
| franka_moveit_config | 0.0.0 |
| franka_msgs | 0.0.0 |
| multi_mode_control_msgs | 0.0.0 |
| multi_mode_controller | 0.0.0 |
| multi_mode_controller_impl | 0.0.0 |
| panda_motion_generator_msgs | 0.0.0 |
| panda_motion_generators | 0.0.0 |
| franka_robot_state_broadcaster | 0.0.1 |
| franka_semantic_components | 0.0.0 |
| franka_simple_publishers | 0.0.0 |
| garmi_bringup | 0.0.0 |
| garmi_controllers | 0.0.0 |
| garmi_description | 0.0.0 |
| garmi_moveit_config | 0.0.0 |
README
multipanda_ros2
A sim- and real Panda robot integration based on the ros2_control framework

This project implements most features from the original franka_ros repository in ROS2 Humble, specifically for the Franka Emika Robot (Panda).
This project significantly expands upon the original franka_ros2 from the company, who dropped the support for the Pandas.
Additionally, multi-arm mujoco simulation has been integrated, meaning you can now run the same controller on both simulated and real robots.
The simulation is designed as a plugin to the mujoco_ros_pkg.
The current version relies on a fork of the repository, which implements the ros2_control plugin as well as a generic SystemInterface for simple robot setups (e.g. a Panda arm mounted on a mobile base). This means, you should install the fork, not the original repo, until the two have been merged.
Work is ongoing to integrate FR3 into the architecture.
Documentation
Documentation for this project is available here.
Working features
More thorough information is available in the documentation.
- Real robot:
- FrankaState broadcaster
- All control interfaces (torque, position, velocity, Cartesian).
- Example controllers for all interfaces
- Controllers are swappable using rqt_controller_manager
- Runtime franka::ControlException error recovery via
~/service_server/error_recovery- Upon recovery, the previously executed control loop will be executed again, so no reloading necessary.
- Runtime internal parameter setter services much like what is offered in the updated
franka_ros2
- Sim robot:
- Same as the real robot, except Cartesian command interface is not available, and there is no plan to implement this for now.
- Gripper server with identical interface to the real gripper (i.e. action servers)
- Example controllers for the real single-arm listed above, that correspond to those interfaces, work out of the box.
- FrankaState implements the basics: torque, joint position/velocity,
O_T_EEandO_F_ext_hat. - Model provides all the existing functions:
pose,zeroJacobian,bodyJacobian,mass,gravity,coriolis.- Gravity for now just returns the corresponding
qfrc_gravcompforce from mujoco. - Coriolis =
qfrc_bias - qfrc_gravcomp
- Gravity for now just returns the corresponding
- Camera is available as part of
mujoco_ros_pkg’s features. You can simply add a<camera>object in your mujoco XML file, and the package will handle them. - With the forked repository’s
mujoco_ros2_control_systempackage, you can easily add components with additional degrees of freedom to your robot. Take a look atgarmi_packages/garmi_description/robots/*.ros2_control.xacrofor an example on how to do this.
Known issues
- Joint position controller might cause some bad motor behaviors. Suggest using torque or velocity for now.
- The default
franka_moveit_configpackage depends onwarehouse_ros_mongo, which has been deprecated. It has been changed towarehouse_ros_sqlitefor now to ensure thatrosdep installworks properly. For now, please refer to this discussion here for a potential solution; once a proper solution has been identified, it will be added.
Installation with One-Click Installer (Recommended)
- Clone the repository recursively to include mujoco_ros_pkgs:
git clone --recursive https://github.com/tenfoldpaper/multipanda_ros2.git
- Then cd into the cloned repository:
cd multipanda_ros2
- Build the docker image by running one command (takes some time):
./tools/setup_env
- Once the image is built, start the development container:
./run
Default config allows for communication in the network, gpu access, display forwarding for GUI applications, hardware devices, etc. By default the script opens a bash shell inside the container as a developer user (password can be modified in Dockerfile) in ros2 workspace under ~/multipanda_ws.
- Build ROS2 packages with:
colcon build
- In case there are some problems with missing packages, try running the following commands inside the container before
colcon build:
sudo apt update && \
rosdep update && \
rosdep install --from-paths src --ignore-src -y -r
- To verify that the installation was successful, run:
source ~/multipanda_ws/install/setup.bash && \
ros2 launch franka_bringup franka_sim.launch.py
- This should open up MuJoCo simulation with one Franka Panda arm
- To open the docker container in additional terminal, use docker exec command:
docker exec -it --user developer multipanda-container bash
- (OPTIONAL) Check that the connection to the robot, RT kernel and screen are all working fine (make sure that FCI feature is activated).
- You can check if docker is properly linked to your screen by running:
-
ros2 run rviz2 rviz2or ~/Libraries/mujoco/bin/simulate
-
- For RT kernel and robot connection, run
~/Libraries/libfranka/bin/communication_test <robot-ip>
- You can check if docker is properly linked to your screen by running:
Manual Installation Guide (Not recommended)
(Tested on Ubuntu 22.04, ROS2 Humble, Panda 4.2.2 & 4.2.1, libfranka 0.9.2 and MuJoCo 3.2.0)
On a computer running Ubuntu 22.04 and real-time kernel (if you wish to use it with a real robot), do the following:
- Install ROS2 Humble by following their [instructions][humble-instructions] and create a workspace.
- Install library dependencies:
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
libfrankasteps.- Some functions will break if you use Eigen 3.4.0, and will fail to compile.
- Install
dq-roboticsC++ version
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
File truncated at 100 lines see the full file
CONTRIBUTING
Repository Summary
| Description | |
| Checkout URI | https://github.com/tenfoldpaper/multipanda_ros2.git |
| VCS Type | git |
| VCS Version | humble |
| Last Updated | 2026-02-05 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| franka_bringup | 0.0.0 |
| franka_control2 | 0.0.0 |
| franka_description | 0.0.0 |
| franka_example_controllers | 0.0.0 |
| franka_gripper | 0.0.0 |
| franka_hardware | 0.0.0 |
| franka_moveit_config | 0.0.0 |
| franka_msgs | 0.0.0 |
| multi_mode_control_msgs | 0.0.0 |
| multi_mode_controller | 0.0.0 |
| multi_mode_controller_impl | 0.0.0 |
| panda_motion_generator_msgs | 0.0.0 |
| panda_motion_generators | 0.0.0 |
| franka_robot_state_broadcaster | 0.0.1 |
| franka_semantic_components | 0.0.0 |
| franka_simple_publishers | 0.0.0 |
| garmi_bringup | 0.0.0 |
| garmi_controllers | 0.0.0 |
| garmi_description | 0.0.0 |
| garmi_moveit_config | 0.0.0 |
README
multipanda_ros2
A sim- and real Panda robot integration based on the ros2_control framework

This project implements most features from the original franka_ros repository in ROS2 Humble, specifically for the Franka Emika Robot (Panda).
This project significantly expands upon the original franka_ros2 from the company, who dropped the support for the Pandas.
Additionally, multi-arm mujoco simulation has been integrated, meaning you can now run the same controller on both simulated and real robots.
The simulation is designed as a plugin to the mujoco_ros_pkg.
The current version relies on a fork of the repository, which implements the ros2_control plugin as well as a generic SystemInterface for simple robot setups (e.g. a Panda arm mounted on a mobile base). This means, you should install the fork, not the original repo, until the two have been merged.
Work is ongoing to integrate FR3 into the architecture.
Documentation
Documentation for this project is available here.
Working features
More thorough information is available in the documentation.
- Real robot:
- FrankaState broadcaster
- All control interfaces (torque, position, velocity, Cartesian).
- Example controllers for all interfaces
- Controllers are swappable using rqt_controller_manager
- Runtime franka::ControlException error recovery via
~/service_server/error_recovery- Upon recovery, the previously executed control loop will be executed again, so no reloading necessary.
- Runtime internal parameter setter services much like what is offered in the updated
franka_ros2
- Sim robot:
- Same as the real robot, except Cartesian command interface is not available, and there is no plan to implement this for now.
- Gripper server with identical interface to the real gripper (i.e. action servers)
- Example controllers for the real single-arm listed above, that correspond to those interfaces, work out of the box.
- FrankaState implements the basics: torque, joint position/velocity,
O_T_EEandO_F_ext_hat. - Model provides all the existing functions:
pose,zeroJacobian,bodyJacobian,mass,gravity,coriolis.- Gravity for now just returns the corresponding
qfrc_gravcompforce from mujoco. - Coriolis =
qfrc_bias - qfrc_gravcomp
- Gravity for now just returns the corresponding
- Camera is available as part of
mujoco_ros_pkg’s features. You can simply add a<camera>object in your mujoco XML file, and the package will handle them. - With the forked repository’s
mujoco_ros2_control_systempackage, you can easily add components with additional degrees of freedom to your robot. Take a look atgarmi_packages/garmi_description/robots/*.ros2_control.xacrofor an example on how to do this.
Known issues
- Joint position controller might cause some bad motor behaviors. Suggest using torque or velocity for now.
- The default
franka_moveit_configpackage depends onwarehouse_ros_mongo, which has been deprecated. It has been changed towarehouse_ros_sqlitefor now to ensure thatrosdep installworks properly. For now, please refer to this discussion here for a potential solution; once a proper solution has been identified, it will be added.
Installation with One-Click Installer (Recommended)
- Clone the repository recursively to include mujoco_ros_pkgs:
git clone --recursive https://github.com/tenfoldpaper/multipanda_ros2.git
- Then cd into the cloned repository:
cd multipanda_ros2
- Build the docker image by running one command (takes some time):
./tools/setup_env
- Once the image is built, start the development container:
./run
Default config allows for communication in the network, gpu access, display forwarding for GUI applications, hardware devices, etc. By default the script opens a bash shell inside the container as a developer user (password can be modified in Dockerfile) in ros2 workspace under ~/multipanda_ws.
- Build ROS2 packages with:
colcon build
- In case there are some problems with missing packages, try running the following commands inside the container before
colcon build:
sudo apt update && \
rosdep update && \
rosdep install --from-paths src --ignore-src -y -r
- To verify that the installation was successful, run:
source ~/multipanda_ws/install/setup.bash && \
ros2 launch franka_bringup franka_sim.launch.py
- This should open up MuJoCo simulation with one Franka Panda arm
- To open the docker container in additional terminal, use docker exec command:
docker exec -it --user developer multipanda-container bash
- (OPTIONAL) Check that the connection to the robot, RT kernel and screen are all working fine (make sure that FCI feature is activated).
- You can check if docker is properly linked to your screen by running:
-
ros2 run rviz2 rviz2or ~/Libraries/mujoco/bin/simulate
-
- For RT kernel and robot connection, run
~/Libraries/libfranka/bin/communication_test <robot-ip>
- You can check if docker is properly linked to your screen by running:
Manual Installation Guide (Not recommended)
(Tested on Ubuntu 22.04, ROS2 Humble, Panda 4.2.2 & 4.2.1, libfranka 0.9.2 and MuJoCo 3.2.0)
On a computer running Ubuntu 22.04 and real-time kernel (if you wish to use it with a real robot), do the following:
- Install ROS2 Humble by following their [instructions][humble-instructions] and create a workspace.
- Install library dependencies:
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
libfrankasteps.- Some functions will break if you use Eigen 3.4.0, and will fail to compile.
- Install
dq-roboticsC++ version
- Install Eigen 3.3.9. Remove Eigen 3.4.0 if that was installed from following the
File truncated at 100 lines see the full file