ros2_control
frameworkThis 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.
Work is ongoing to integrate FR3 into the architecture.
As of 15.07.24, both the real and simulation robot interfaces are complete. GARMI (a robot platform with 2 panda arms and a non-holonomic base) is also available.
This repository is a copy of an internal repo, that we try to keep up to date. Unfortunately, it means it doesn't get nearly as much attention as it should. We plan to migrate fully over to this public repo in the near future.
Documentation for this project is available here.
More thorough information is available in the documentation.
~/service_server/error_recovery
franka_ros2
O_T_EE
and O_F_ext_hat
.pose
, zeroJacobian
, bodyJacobian
, mass
, gravity
, coriolis
.
qfrc_gravcomp
force from mujoco.qfrc_bias - qfrc_gravcomp
franka_moveit_config
package depends on warehouse_ros_mongo
, which has been deprecated. It has been changed to warehouse_ros_sqlite
for now to ensure that rosdep install
works properly. For now, please refer to this discussion here for a potential solution; once a proper solution has been identified, it will be added.Dockerfile
is located), run
sudo docker build -t "bimanual:garmi" ./
, or whatever name you want; just adjust them in the docker-compose.yml
or the docker run
command below.rosdep
.docker compose
(for iGPUs):
xhost +; sudo docker compose -f docker-compose.yml up
xhost +
is needed to give the Docker container access to the host's screen.docker-compose.yml
file defines configurations that allow the container to run on the realtime kernel of the host, assuming that the host has one. The instructions were found in here.docker run
(this has no RT kernel, so only the sim would work)
xhost +
sudo docker run \
-dit \
-v /tmp/.X11-unix:/tmp/.X11-unix \
--device=/dev/dri:/dev/dri \
--env="DISPLAY=$DISPLAY" \
--name=my_container \
--network="host" \
bimanual:garmi
--network="host"
is what enables the FCI IP address to be found from inside Docker without any additional configuration. TODO: Add a more elegant way to handle this.compose
, sudo docker exec -it realtime_humble bash
run
, sudo docker exec -it my_container bash
ros2 run rviz2 rviz2
or~/Libraries/mujoco/bin/simulate
~/Libraries/libfranka/bin/communication_test <robot-ip>
(Tested on Ubuntu 22.04, ROS2 Humble, Panda 4.2.2 & 4.2.1, libfranka
0.9.2 and MuJoCo 3.1.6)
On a computer running Ubuntu 22.04 and real-time kernel (if you wish to use it with a real robot), do the following:
libfranka
0.9.2 from source by following the instructions.sudo apt-get install libglfw3;sudo apt-get install libglfw3-dev
libfranka
steps.
dq-robotics
C++ versionsrc
folder.rosdep install --from-paths src -y --ignore-src
{mujoco/libfranka}/lib/cmake
directories as a CMAKE_PREFIX_PATH
in your environment, i.e.
~/.bashrc
, export CMAKE_PREFIX_PATH={path to mujoco installation}/lib/cmake}:{path to libfranka installation}/lib/cmake
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
CMAKE_PREFIX_PATH
, so no separate args are needed.LD_LIBRARY_PATH
by adding the following line to your ~/.bashrc
: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:{path to libfranka install}/lib:{path to mujoco's install}/lib
lib
folder should only have the two .so
files, and a folder called cmake
.libfranka
path should contain the cmake
folder and the .so
files.ros2 launch franka_bringup franka.launch.py robot_ip:=<fci-ip>
.ros2 launch franka_bringup multimode_franka.launch.py robot_ip:=<fci-ip>
.arm_id
is fixed to panda
.ros2 launch franka_bringup franka_sim.launch.py
.ros2 launch franka_bringup multimode_sim.launch.py
.arm_id
is fixed to panda
.ros2 launch franka_bringup dual_franka.launch.py robot_ip_1:=<robot-1-fci-ip> robot_ip_2:=<robot-2-fci-ip> arm_id_1=<robot-1-name> arm_id_2=<robot-2-name>
.ros2 launch franka_bringup dual_multimode_franka.launch.py robot_ip_1:=<robot-1-fci-ip> robot_ip_2:=<robot-2-fci-ip> arm_id_1=<robot-1-name> arm_id_2=<robot-2-name>
.arm_id
.hand_n=false
to disable this.ros2 launch franka_bringup dual_franka_sim.launch.py
.ros2 launch franka_bringup dual_multimode_sim.launch.py
arm_id_1=mj_left
and arm_id_2=mj_right
by default.ros2 launch franka_bringup sim_garmi.launch.py
The original version is forked from mcbed's port of franka_ros2 for humble.
All packages of multipanda_ros2
are licensed under the Apache 2.0 license, following franka_ros2
.