1+ <?xml version =" 1.0" ?>
2+ <!--
3+ Based on:
4+ https://github.com/frankaemika/franka_description/blob/0.4.0/robots/common/franka_arm.ros2_control.xacro
5+ A copy of the original file is located in the /original directory.
6+ To compare the two files in VSCode, see:
7+ https://code.visualstudio.com/docs/editing/codebasics#_compare-files
8+ -->
9+ <robot xmlns : xacro =" http://www.ros.org/wiki/xacro" >
10+
11+ <xacro : macro name =" franka_arm_ros2_control"
12+ params =" arm_id
13+ robot_ip
14+ use_fake_hardware:=^|false
15+ fake_sensor_commands:=^|false
16+ gazebo:=^|false
17+ hand:=^|false
18+ gazebo_effort:=^|false
19+ arm_prefix:=''
20+ multi_arm:=false
21+ namespace:=''" >
22+
23+ <xacro : property name =" arm_prefix_modified" value =" ${'' if arm_prefix == '' else arm_prefix + '_'}" />
24+ <ros2_control name =" ${arm_prefix_modified}FrankaHardwareInterface" type =" system" >
25+ <hardware >
26+ <param name =" arm_id" >${arm_id}</param >
27+ <param name =" prefix" >${arm_prefix}</param >
28+ <xacro : if value =" ${use_fake_hardware}" >
29+ <plugin >fake_components/GenericSystem</plugin >
30+ <param name =" fake_sensor_commands" >${fake_sensor_commands}</param >
31+ <param name =" state_following_offset" >0.0</param >
32+ </xacro : if >
33+
34+ <xacro : if value =" ${gazebo}" >
35+ <plugin >ign_ros2_control/IgnitionSystem</plugin >
36+ </xacro : if >
37+
38+ <xacro : if value =" ${use_fake_hardware == 0 and gazebo == 0 and multi_arm == 0}" >
39+ <plugin >franka_hardware/FrankaHardwareInterface</plugin >
40+ <param name =" robot_ip" >${robot_ip}</param >
41+ <param name =" arm_prefix" >${arm_prefix}</param >
42+ </xacro : if >
43+ <xacro : if value =" ${use_fake_hardware == 0 and gazebo == 0 and multi_arm == 1}" >
44+ <plugin >franka_hardware/MultiFrankaHardwareInterface</plugin >
45+ <param name =" robot_ip" >${robot_ip}</param >
46+ <param name =" arm_prefix" >${arm_prefix}</param >
47+ </xacro : if >
48+ </hardware >
49+
50+ <xacro : macro name =" configure_joint" params =" joint_name initial_position" >
51+ <joint name =" ${joint_name}" >
52+ <!--
53+ deactivated for gazebo velocity and position interface due to a bug
54+ https://github.com/ros-controls/gz_ros2_control/issues/343
55+
56+ Command Interfaces -->
57+ <xacro : if value =" ${multi_arm == 0}" >
58+ <command_interface name =" position" />
59+ <command_interface name =" velocity" />
60+ </xacro : if >
61+ <xacro : if value =" ${gazebo == 0 or gazebo_effort == 1}" >
62+ <command_interface name =" effort" />
63+ </xacro : if >
64+
65+ <!-- State Interfaces -->
66+ <state_interface name =" position" >
67+ <param name =" initial_value" >${initial_position}</param >
68+ </state_interface >
69+ <state_interface name =" velocity" />
70+ <param name =" initial_value" >0.0</param >
71+ <state_interface name =" effort" />
72+ </joint >
73+ </xacro : macro >
74+
75+ <xacro : configure_joint joint_name =" ${arm_prefix_modified}${arm_id}_joint1" initial_position =" 0.0" />
76+ <xacro : configure_joint joint_name =" ${arm_prefix_modified}${arm_id}_joint2" initial_position =" ${-pi/4}" />
77+ <xacro : configure_joint joint_name =" ${arm_prefix_modified}${arm_id}_joint3" initial_position =" 0.0" />
78+ <xacro : configure_joint joint_name =" ${arm_prefix_modified}${arm_id}_joint4" initial_position =" ${-3*pi/4}" />
79+ <xacro : configure_joint joint_name =" ${arm_prefix_modified}${arm_id}_joint5" initial_position =" 0.0" />
80+ <xacro : configure_joint joint_name =" ${arm_prefix_modified}${arm_id}_joint6" initial_position =" ${pi/2}" />
81+ <xacro : configure_joint joint_name =" ${arm_prefix_modified}${arm_id}_joint7" initial_position =" ${pi/4}" />
82+ <xacro : if value =" ${gazebo and hand}" >
83+ <xacro : configure_joint joint_name =" ${arm_id}_finger_joint1" initial_position =" 0.0" />
84+ <!-- Add finger_joint2, required when controlling gripper in simulation: -->
85+ <joint name =" ${arm_id}_finger_joint2" >
86+ <param name =" mimic" >${arm_id}_finger_joint1</param >
87+ <param name =" multiplier" >1</param >
88+ </joint >
89+ </xacro : if >
90+
91+ </ros2_control >
92+ <xacro : if value =" ${gazebo}" >
93+ <gazebo >
94+ <plugin filename =" ign_ros2_control-system" name =" ign_ros2_control::IgnitionROS2ControlPlugin" >
95+ <parameters >$(find rcdt_franka)/config/simulation_controllers.yaml</parameters >
96+ <ros >
97+ <namespace >${namespace}</namespace >
98+ <xacro : include filename =" $(find rcdt_gazebo)/urdf/remappings.urdf.xacro" />
99+ <xacro : remappings />
100+ </ros >
101+ </plugin >
102+ </gazebo >
103+ </xacro : if >
104+
105+ </xacro : macro >
106+ </robot >
0 commit comments