Franka Emika Multiple Pandas with Different System Versions - gkgkgk1215/else GitHub Wiki

  • The purpose of this documentation is to set up the Franka Emika Panda as quick as possible with the required bash commands.

Install libfranka

  • Remove the previous lib.
sudo apt remove "*libfranka*"
  • Install the dependencies.
sudo apt install build-essential cmake git libpoco-dev libeigen3-dev
  • Download the source code for Panda & Fr3
cd ~
git clone --recursive https://github.com/frankaemika/libfranka
mv libfranka libfranka_panda && cd libfranka_panda
git checkout 0.9.1 && git submodule update

cd ~
git clone --recursive https://github.com/frankaemika/libfranka
mv libfranka libfranka_fr3 && cd libfranka_fr3
git checkout 0.10.0 && git submodule update
  • Remove the enforced "Real-time" option from "robot.h" Modify from "RealtimeConfig::kEnforce" to "RealtimeConfig::kIgnore"
gedit ~/libfranka_panda/include/franka/robot.h
gedit ~/libfranka_fr3/include/franka/robot.h
  • Build
cd ~/libfranka_panda && mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF ..
cmake --build . -j4

cd ~/libfranka_fr3 && mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF ..
cmake --build . -j4
  • Test the set-up:
~/libfranka_panda/build/examples/echo_robot_state 172.16.0.2
~/libfranka_panda/build/examples/echo_robot_state 172.16.0.3
~/libfranka_panda/build/examples/communication_test 172.16.0.2
~/libfranka_panda/build/examples/communication_test 172.16.0.3
~/libfranka_panda/build/examples/cartesian_impedance_control 172.16.0.2
~/libfranka_panda/build/examples/cartesian_impedance_control 172.16.0.3

~/libfranka_fr3/build/examples/echo_robot_state 172.16.0.4
~/libfranka_fr3/build/examples/communication_test 172.16.0.4
~/libfranka_fr3/build/examples/cartesian_impedance_control 172.16.0.4

Install ROS driver for Panda

  • Create catkin workspace:
cd ~ && mkdir -p catkin_ws_panda/src && cd catkin_ws_panda
source /opt/ros/noetic/setup.sh
catkin_init_workspace src

git clone --recursive https://github.com/frankaemika/franka_ros src/franka_ros
cd ~/catkin_ws_panda/src/franka_ros
git checkout 0.8.0
git submodule update
  • Build the Catkin src:
cd ~/catkin_ws_panda
rosdep install --from-paths src --ignore-src --rosdistro noetic -y --skip-keys libfranka
catkin_make -DCMAKE_BUILD_TYPE=Release -DFranka_DIR:PATH=~/libfranka_panda/build
source devel/setup.sh
  • Remove the enforced "Real-time" option from "franka_control_node.yaml" "realtime_config: enforce" -> "realtime_config: ignore"
gedit ~/catkin_ws_panda/src/franka_ros/franka_control/config/franka_control_node.yaml

Install ROS driver for Fr3

  • Create catkin workspace:
cd ~ && mkdir -p catkin_ws_fr3/src && cd catkin_ws_fr3
source /opt/ros/noetic/setup.sh
catkin_init_workspace src

git clone --recursive https://github.com/frankaemika/franka_ros src/franka_ros
cd ~/catkin_ws_fr3/src/franka_ros
git checkout 0.10.0
git submodule update
  • Build the Catkin src:
cd ~/catkin_ws_fr3
rosdep install --from-paths src --ignore-src --rosdistro noetic -y --skip-keys libfranka
catkin_make -DCMAKE_BUILD_TYPE=Release -DFranka_DIR:PATH=~/libfranka_fr3/build
source devel/setup.sh
  • Remove the enforced "Real-time" option from "franka_control_node.yaml" "realtime_config: enforce" -> "realtime_config: ignore"
gedit ~/catkin_ws_fr3/src/franka_ros/franka_control/config/franka_control_node.yaml

Test the ROS driver:

  • Cartesian impedance package
source ~/catkin_ws_panda/devel/setup.bash
roslaunch franka_example_controllers cartesian_impedance_example_controller.launch robot_ip:=172.16.0.2 load_gripper:=false robot:=panda

source ~/catkin_ws_fr3/devel/setup.bash
roslaunch franka_example_controllers cartesian_impedance_example_controller.launch robot_ip:=172.16.0.4 load_gripper:=false robot:=fr3
  • Control package
source ~/catkin_ws_panda/devel/setup.bash
roslaunch franka_control franka_control.launch robot_ip:=172.16.0.2 load_gripper:=false robot:=panda

source ~/catkin_ws_fr3/devel/setup.bash
roslaunch franka_control franka_control.launch robot_ip:=172.16.0.4 load_gripper:=false robot:=fr3
  • For joint position control, spawn "position_joint_trajectory_controller" in "franka_control.launch"
  <node name="state_controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" args="franka_state_controller position_joint_trajectory_controller"/>

Launch Multiple Pandas

  • Add namespace to the following file to avoid topics with the same name
gedit ~/catkin_ws_panda/src/franka_ros/franka_control/launch/franka_control.launch
<arg name="ns_name" default="panda" />
<group ns="$(arg ns_name)">
..
..
</group>
  • Comment this part for Panda. Otherwise, "/joint_states" topic will be duplicated.
  <!--node name="joint_state_desired_publisher" type="joint_state_publisher" pkg="joint_state_publisher" output="screen">
    <rosparam if="$(arg load_gripper)" param="source_list">[franka_state_controller/joint_states_desired, franka_gripper/joint_states] </rosparam>
    <rosparam unless="$(arg load_gripper)" param="source_list">[franka_state_controller/joint_states_desired] </rosparam>
    <param name="rate" value="30"/>
    <remap from="/joint_states" to="/joint_states_desired" />
  </node-->
  • In terminal 1:
source ~/catkin_ws_panda/devel/setup.bash
roslaunch franka_control franka_control.launch robot_ip:=172.16.0.2 load_gripper:=false ns_name:="panda1"

In terminal 2:

source ~/catkin_ws_panda/devel/setup.bash
roslaunch franka_control franka_control.launch robot_ip:=172.16.0.3 load_gripper:=false ns_name:="panda2"

In terminal 3:

source ~/catkin_ws_fr3/devel/setup.bash
roslaunch franka_control franka_control.launch robot_ip:=172.16.0.4 load_gripper:=false ns_name:="fr3"

Just for Reference

To launch combined control,

roslaunch franka_control franka_combined_control.launch robot_ips:="{panda_1/robot_ip: 172.16.0.2, panda_2/robot_ip: 172.16.0.3}"
ROS_PACKAGE_PATH=$(REMOVE_PART="/home/surglab/catkin_ws_fr3/src" sh -c 'echo ":$ROS_PACKAGE_PATH:" | sed "s@:$REMOVE_PART:@:@g;s@^:\(.*\):\$@\1@"')
export ROS_PACKAGE_PATH=/home/surglab/catkin_ws_panda/src:$ROS_PACKAGE_PATH

PYTHONPATH=$(REMOVE_PART="/home/surglab/catkin_ws_fr3/devel/lib/python3/dist-packages" sh -c 'echo ":$PYTHONPATH:" | sed "s@:$REMOVE_PART:@:@g;s@^:\(.*\):\$@\1@"')
export PYTHONPATH=/home/surglab/catkin_ws_panda/devel/lib/python3/dist-packages:$PYTHONPATH

echo $ROS_PACKAGE_PATH
echo $PYTHONPATH
source ~/catkin_ws_panda/devel/setup.bash


ROS_PACKAGE_PATH=$(REMOVE_PART="/home/surglab/catkin_ws_panda/src" sh -c 'echo ":$ROS_PACKAGE_PATH:" | sed "s@:$REMOVE_PART:@:@g;s@^:\(.*\):\$@\1@"')
export ROS_PACKAGE_PATH=/home/surglab/catkin_ws_fr3/src:$ROS_PACKAGE_PATH

PYTHONPATH=$(REMOVE_PART="/home/surglab/catkin_ws_panda/devel/lib/python3/dist-packages" sh -c 'echo ":$PYTHONPATH:" | sed "s@:$REMOVE_PART:@:@g;s@^:\(.*\):\$@\1@"')
export PYTHONPATH=/home/surglab/catkin_ws_fr3/devel/lib/python3/dist-packages:$PYTHONPATH

echo $ROS_PACKAGE_PATH
echo $PYTHONPATH
⚠️ **GitHub.com Fallback** ⚠️