-
Notifications
You must be signed in to change notification settings - Fork 42
3_Sunrise_FRI
- It is recommended to use the driver on a real-time capable client machine (further information about setting up the PREEMPT_RT patch can be found here).
- Set a fixed IP in the subnet of the controller for the real-time machine.
- Upload the robot application under
robot_application/srcto the controller using Sunrise Workbench. The driver only supports Sunrise 1.X.
The following configuration files are available in the config directory of the package:
-
driver_config.yaml: : contains runtime parameters of therobot_managernode -
ros2_controller_config.yaml: contains the controller types for every controller name. Should be only modified if a different controller is to be used. - configuration files for specific controllers, for further information, see the documentation of the given controller
-
gpio_config.xacro: contains the I/O setup of the system, but this was not tested yet
The IP address of robot controller must be provided as a launch argument. For further information see section launch arguments. Please note that currently the driver only works using the KLI interface of the robot controller, KONI is not yet supported.
The parameters in the driver configuration file can be also changed during runtime using the parameter interface of the robot_manager node:
-
cycle_time(integer): this parameter defines the send rate in milliseconds (with which the controller sends robot state updates). It must be between 1 and 10 for control and can be only changed ininactiveandconfiguringstates. -
receive_multiplier(integer): this parameter defines the answer rate factor (the client should sends commands in everyreceive_multiplier*cycle_timemilliseconds). It must be at least 1 and can be only changed ininactiveandconfiguringstates. -
control_mode: The enum value of the control mode should be given, which updates theControlModeandClientCommandModeparameters of FRI. It cannot be changed in active state. -
joint_damping,joint_stiffness(double vectors): these parameters change the stiffness and damping attributes of joint impedance control mode. The updated values are sent to the hardware interface using thejoint_group_impedance_controllerto adapt to conventions, but it is not possible to change them in active state due to the constraints of FRI. (Therefore thejoint_group_impedance_controlleris deactivated at driver activation.) -
position_controller_name: The name of the controller (string) that controls thepositioninterface of the robot. It can't be changed in active state. -
torque_controller_name: The name of the controller (string) that controls theeffortinterface of the robot. It can't be changed in active state.
-
On the controller, start the uploaded robot application (ROS2_Control).
-
To start the driver, two launch file are available, with and without
rviz. To launch (withoutrviz), runros2 launch kuka_sunrise_fri_driver startup.launch.py controller_ip:=0.0.0.0 client_ip:=0.0.0.0
This starts the 3 core components of every driver (described in the Non-real-time interface section of the project overview) and the following controllers:
-
joint_state_broadcaster(no configuration file, all state interfaces are published) -
joint_trajectory_controller(configuration file) -
fri_configuration_controller(no configuration file) -
fri_state_broadcaster(no configuration file) -
joint_group_impedance_controller(configuration file) -
effort_controller(of typeJointGroupEffortController, configuration file) -
control_mode_handler(no configuration file) -
external_torque_broadcaster(of typeJointStateBroadcaster, configuration file, publishes aJointStatemessage type on the topicexternal_torque_broadcaster/joint_statescontaining the measured external torques for every joint)
-
-
After successful startup, the
robot_managernode has to be activated to start the cyclic communication with the robot controller (before this only a collapsed robot is visible inrviz):ros2 lifecycle set robot_manager configure ros2 lifecycle set robot_manager activate
On successful activation the brakes of the robot will be released and external control is started using the requested control mode. To test moving the robot, the rqt_joint_trajectory_controller is not recommended, use the launch file in the moveit_example package instead (usage is described in the Additional packages section of the project overview).
Both launch files support the following argument:
-
controller_ip: KLI IP address of the robot controller -
client_ip: IP address of the client PC -
client_port: port of the client machine (default: 30200) -
robot_model: defines which LBR iiwa robot to use. Available options:lbr_iiwa14_r820(default) -
mode: if set to 'mock', theKukaMockHardwareInterfacewill be used instead of theKukaFRIHardwareInterface. This enables trying out the driver without actual hardware. -
namespace: adds a namespace to all nodes and controllers of the driver, and modifies theprefixargument of the robot description macro tonamespace_ -
x,y,z: define the position ofbase_linkrelative to theworldframe in meters (default: [0, 0, 0]) -
roll,pitch,yaw: define the orientation ofbase_linkrelative to theworldframe in radians (default: [0, 0, 0]) -
roundtrip_time: The roundtrip time (in microseconds) to be enforced by the KUKA mock hardware interface, (defaults to 5000 us, only used ifmodeis set to 'mock') -
controller_config: the location of theros2_controlconfiguration file (defaults tokuka_sunrise_fri_driver/config/ros2_controller_config.yaml) -
jtc_config: the location of the configuration file for thejoint_trajectory_controller(defaults tokuka_sunrise_fri_driver/config/joint_trajectory_controller_config.yaml) -
jic_config: the location of the configuration file for thejoint_impedance_controller(defaults tokuka_sunrise_fri_driver/config/joint_impedance_controller_config.yaml) -
ec_config: the location of the configuration file for theeffort_controller(defaults tokuka_sunrise_fri_driver/config/effort_controller_config.yaml) -
etb_config: the location of the configuration file for theexternal_torque_broadcaster(defaults tokuka_sunrise_fri_driver/config/external_torque_broadcaster._config.yaml) -
rt_core: CPU core index for taskset pinning of the realtime control thread. (default: -1 = do not pin) -
rt_prio: The realtime priority of the thread that runs the control loop [0-99] (default: 70) -
non_rt_cores: Comma-separated CPU core indices for taskset pinning of non-RT threads (e.g. '2,3,4'). Leave empty to disable pinning. (defaults to empty string) -
lock_memory: Whether to lock memory of the control loop with mlockall to avoid paging (defaults to true)
Note
The rt_core and rt_prio, parameters are not applied to asynchronous hardware interfaces. For async hardware configuration, use the async_thread_priority and async_affinity xacro arguments instead.
The startup_with_rviz.launch.py additionally contains one argument:
-
rviz_config: the location of thervizconfiguration file (defaults tokuka_resources/config/view_6_axis_urdf.rviz)
Details about the mode parameter can be viewed in the kuka_robot_descriptions README.
To stop external control, all components have to be deactivated with ros2 lifecycle set robot_manager deactivate
BEWARE, that this is a non-realtime process including lifecycle management, so the connection is not terminated immediately, in cases where an abrupt stop is needed, the safety stop of the Teach Pendant should be used! (This will also deactivate all components to allow reactivation without a restart.)
- I/O control was not tested
- Cartesian modes are not yet supported