Coder Social home page Coder Social logo

kuka_drivers's People

Contributors

altex111 avatar fazakaserik avatar gavanderhoorn avatar groebehavn avatar kovacsge11 avatar oprezz avatar resizoltan avatar svastits avatar vx792 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kuka_drivers's Issues

fix Initial control mode

Currently when changing control mode before activation the control mode will not change immediately. After activation the hardware interface activating earlier then the controller handler so it starts in the initial state, and changes control mode immediately.

Goal is it should start with the new control mode

Rework Sunrise driver

Currently the sunrise driver does not support the use_fake_hardware argument, as the robot_manager also contains hardware-specific commands. The driver should be reworked to move these out of the robot_manager node.
Additionally a few other modifications are needed:

  • add controller_ip parameter
  • add client_ip and client_port parameters that sets the remote ip and port of the sunrise application

ECI Mock driver not starting in Docker Container

Hi there,

I am currently trying to get the ECI driver running in a Docker Container.
I am following the tutorial from the docs to start the ECI driver in a mocked test environment to control the simulated robot with ROS.

TL:DR

When trying to run ros2 launch kuka_rox_hw_interface startup.launch.py:

...
[control_node-1] [INFO] [1695046574.399726173] [resource_manager]: Loading hardware 'LBRiisy3R760' 
[control_node-1] terminate called after throwing an instance of 'pluginlib::LibraryLoadException'
[control_node-1]   what():  Failed to load library /custom_ws/install/kuka_rox_hw_interface/lib/kuka_rox_hw_interface/libkuka_rox_hw_interface.so. Make sure that you are calling the PLUGINLIB_EXPORT_CLASS macro in the library code, and that names are consistent between this macro and your XML. Error string: Could not load library dlopen error: libos-core-udp-communication.so: cannot open shared object file: No such file or directory, at ./src/shared_library.c:99
...

Setup

  • Ubuntu 20.04
  • Docker version 24.0.6
  • KUKA libs are mocked (set(MOCK_KUKA_LIBS TRUE))

Steps to reproduce

  • Copy Dockerfile below
  • Run docker build -t eci_issue .
  • Enter Docker container via docker run -it eci_issue /bin/bash (if you want a display passthrough add -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY and on the host execute xhost +)
  • Execute the command above ros2 launch kuka_rox_hw_interface startup.launch.py

Files and Outputs

This is my Dockerfile (currently using the default ros:humble entrypoint)

FROM ros:humble

RUN apt-get update &&  apt-get install -y \
    libnanopb-dev \
    ros-humble-controller-manager \
    ros-humble-moveit \
    ros-humble-moveit-visual-tools \
    ros-humble-joint-trajectory-controller \
    ros-humble-joint-state-broadcaster \
    ros-humble-joint-state-publisher \
    ros-humble-ros2-controllers \
    libprotobuf-dev \
    protobuf-compiler \
    libprotoc-dev \
    libgrpc++-dev \
    byobu \
 && rm -rf /var/lib/apt/lists/* # byobu is like tmux only for testing

RUN mkdir -p /custom_ws/src

WORKDIR /custom_ws/src

RUN git clone https://github.com/kroshu/kroshu_ros2_core.git
RUN git clone https://github.com/kroshu/ros2_kuka_drivers.git
RUN git clone https://github.com/kroshu/kuka_simulators.git

WORKDIR /custom_ws

RUN /bin/bash -c "source /opt/ros/humble/setup.bash && colcon build"
RUN /bin/bash -c "echo 'source /custom_ws/install/setup.bash' >> ~/.bashrc"

This should install all dependencies and successfully builds.
It is possible to start the rsi simulation, but when I want to start the eci startup.launch.py file it appears not to be working:

Console output when running ros2 launch kuka_rox_hw_interface startup.launch.py:

[INFO] [launch]: All log files can be found below /root/.ros/log/2023-09-18-14-16-13-840313-5c6f4854484c-53611
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [control_node-1]: process started with pid [53642]
[INFO] [robot_manager_node-2]: process started with pid [53644]
[INFO] [robot_state_publisher-3]: process started with pid [53646]
[INFO] [spawner-4]: process started with pid [53648]
[INFO] [spawner-5]: process started with pid [53650]
[INFO] [spawner-6]: process started with pid [53652]
[INFO] [spawner-7]: process started with pid [53654]
[INFO] [spawner-8]: process started with pid [53656]
[control_node-1] [INFO] [1695046574.399726173] [resource_manager]: Loading hardware 'LBRiisy3R760' 
[control_node-1] terminate called after throwing an instance of 'pluginlib::LibraryLoadException'
[control_node-1]   what():  Failed to load library /custom_ws/install/kuka_rox_hw_interface/lib/kuka_rox_hw_interface/libkuka_rox_hw_interface.so. Make sure that you are calling the PLUGINLIB_EXPORT_CLASS macro in the library code, and that names are consistent between this macro and your XML. Error string: Could not load library dlopen error: libos-core-udp-communication.so: cannot open shared object file: No such file or directory, at ./src/shared_library.c:99
[robot_manager_node-2] [INFO] [1695046574.408373075] [robot_manager]: Starting Robot Manager Node init
[robot_state_publisher-3] [INFO] [1695046574.410060310] [robot_state_publisher]: got segment base
[robot_state_publisher-3] [INFO] [1695046574.411010976] [robot_state_publisher]: got segment base_link
[robot_state_publisher-3] [INFO] [1695046574.411682061] [robot_state_publisher]: got segment base_link_inertia
[robot_state_publisher-3] [INFO] [1695046574.412352606] [robot_state_publisher]: got segment flange
[robot_state_publisher-3] [INFO] [1695046574.413030209] [robot_state_publisher]: got segment link_1
[robot_manager_node-2] [INFO] [1695046574.413413854] [robot_manager]: Control mode change requested
[robot_manager_node-2] [INFO] [1695046574.413516440] [robot_manager]: Control mode change process has started
[robot_manager_node-2] [INFO] [1695046574.413538579] [robot_manager]: Successfully changed control mode to JOINT_POSITION_CONTROL
[robot_state_publisher-3] [INFO] [1695046574.414565928] [robot_state_publisher]: got segment link_2
[robot_state_publisher-3] [INFO] [1695046574.414583618] [robot_state_publisher]: got segment link_3
[robot_state_publisher-3] [INFO] [1695046574.414595747] [robot_state_publisher]: got segment link_4
[robot_state_publisher-3] [INFO] [1695046574.414606986] [robot_state_publisher]: got segment link_5
[robot_state_publisher-3] [INFO] [1695046574.414617416] [robot_state_publisher]: got segment link_6
[robot_state_publisher-3] [INFO] [1695046574.414628271] [robot_state_publisher]: got segment tool0
[ERROR] [control_node-1]: process has died [pid 53642, exit code -6, cmd '/custom_ws/install/kroshu_ros2_core/lib/kroshu_ros2_core/control_node --ros-args --params-file /tmp/launch_params_72gydy78 --params-file /custom_ws/install/kuka_rox_hw_interface/share/kuka_rox_hw_interface/config/ros2_controller_config.yaml'].
[spawner-4] [INFO] [1695046576.717837119] [spawner_joint_state_broadcaster]: Waiting for '/controller_manager' node to exist
[spawner-5] [INFO] [1695046576.728134712] [spawner_joint_trajectory_controller]: Waiting for '/controller_manager' node to exist
[spawner-7] [INFO] [1695046576.803097720] [spawner_effort_controller]: Waiting for '/controller_manager' node to exist
[spawner-6] [INFO] [1695046577.132476945] [spawner_joint_impedance_controller]: Waiting for '/controller_manager' node to exist
[spawner-8] [INFO] [1695046577.132582531] [spawner_control_mode_handler]: Waiting for '/controller_manager' node to exist
[spawner-4] [INFO] [1695046578.745568844] [spawner_joint_state_broadcaster]: Waiting for '/controller_manager' node to exist
[spawner-5] [INFO] [1695046578.755452458] [spawner_joint_trajectory_controller]: Waiting for '/controller_manager' node to exist
[spawner-7] [INFO] [1695046578.834907075] [spawner_effort_controller]: Waiting for '/controller_manager' node to exist
[spawner-8] [INFO] [1695046579.162785457] [spawner_control_mode_handler]: Waiting for '/controller_manager' node to exist
[spawner-6] [INFO] [1695046579.164068878] [spawner_joint_impedance_controller]: Waiting for '/controller_manager' node to exist
[spawner-4] [INFO] [1695046580.781078237] [spawner_joint_state_broadcaster]: Waiting for '/controller_manager' node to exist
[spawner-5] [INFO] [1695046580.791397289] [spawner_joint_trajectory_controller]: Waiting for '/controller_manager' node to exist
[spawner-7] [INFO] [1695046580.865754205] [spawner_effort_controller]: Waiting for '/controller_manager' node to exist
[spawner-6] [INFO] [1695046581.197786033] [spawner_joint_impedance_controller]: Waiting for '/controller_manager' node to exist
[spawner-8] [INFO] [1695046581.197796166] [spawner_control_mode_handler]: Waiting for '/controller_manager' node to exist
[spawner-4] [INFO] [1695046582.815092923] [spawner_joint_state_broadcaster]: Waiting for '/controller_manager' node to exist
[spawner-5] [INFO] [1695046582.823404779] [spawner_joint_trajectory_controller]: Waiting for '/controller_manager' node to exist
[spawner-7] [INFO] [1695046582.898616650] [spawner_effort_controller]: Waiting for '/controller_manager' node to exist
[spawner-6] [INFO] [1695046583.233161777] [spawner_joint_impedance_controller]: Waiting for '/controller_manager' node to exist
[spawner-8] [INFO] [1695046583.233161784] [spawner_control_mode_handler]: Waiting for '/controller_manager' node to exist
[spawner-4] [ERROR] [1695046584.848466131] [spawner_joint_state_broadcaster]: Controller manager not available
[spawner-5] [ERROR] [1695046584.855268016] [spawner_joint_trajectory_controller]: Controller manager not available
[spawner-7] [ERROR] [1695046584.924453910] [spawner_effort_controller]: Controller manager not available
[ERROR] [spawner-4]: process has died [pid 53648, exit code 1, cmd '/opt/ros/humble/lib/controller_manager/spawner joint_state_broadcaster -c /controller_manager -p --inactive --ros-args'].
[ERROR] [spawner-5]: process has died [pid 53650, exit code 1, cmd '/opt/ros/humble/lib/controller_manager/spawner joint_trajectory_controller -c /controller_manager -p /custom_ws/install/kuka_rox_hw_interface/share/kuka_rox_hw_interface/config/joint_trajectory_controller_config.yaml --inactive --ros-args'].
[ERROR] [spawner-7]: process has died [pid 53654, exit code 1, cmd '/opt/ros/humble/lib/controller_manager/spawner effort_controller -c /controller_manager -p /custom_ws/install/kuka_rox_hw_interface/share/kuka_rox_hw_interface/config/effort_controller_config.yaml --inactive --ros-args'].
[spawner-8] [ERROR] [1695046585.272609936] [spawner_control_mode_handler]: Controller manager not available
[spawner-6] [ERROR] [1695046585.273111428] [spawner_joint_impedance_controller]: Controller manager not available
[ERROR] [spawner-8]: process has died [pid 53656, exit code 1, cmd '/opt/ros/humble/lib/controller_manager/spawner control_mode_handler -c /controller_manager -p --inactive --ros-args'].
[ERROR] [spawner-6]: process has died [pid 53652, exit code 1, cmd '/opt/ros/humble/lib/controller_manager/spawner joint_impedance_controller -c /controller_manager -p /custom_ws/install/kuka_rox_hw_interface/share/kuka_rox_hw_interface/config/joint_impedance_controller_config.yaml --inactive --ros-args'].
[WARNING] [launch]: user interrupted with ctrl-c (SIGINT)
[robot_manager_node-2] [INFO] [1695046604.619778206] [rclcpp]: signal_handler(signum=2)
[INFO] [robot_state_publisher-3]: process has finished cleanly [pid 53646]
[INFO] [robot_manager_node-2]: process has finished cleanly [pid 53644]
[robot_state_publisher-3] [INFO] [1695046604.619803602] [rclcpp]: signal_handler(signum=2)

Output, when trying to run ros2 lifecycle set robot_manager configure:

root@d354a4fe0b00:/custom_ws# ros2 lifecycle set robot_manager configure
Transitioning failed
[robot_manager_node-2][ERROR] [robot_manager]: Could not configure hardware interface

As you can see, the control node throws an exception when Loading the Mock library for the udp communication, which probably is the point of failure here. But when we look into the CMakeLists the library should be added.

Do you also encounter this error or have an idea how to fix it?

kind regards

Moritz

Enable controlling multiple robots on the same machine

If one has to start multiple drivers for a multi-robot scenario, some of the nodes will have the same name, which will lead to undefined behaviour. To solve this:

  • a namespace option should be added to the launch files to be able to start the manager nodes in a different namespace
  • a solution should be found to change the name of the controller_manager nodes in these cases

[BUG] - Unable to connect to KUKA lbr iisy3 r760 using ROS2 Humble driver

Description

Prequisites:

I have ROS2, and all the necessary packages from here cloned and compiled successfully.
I have all the dependencies installed correctly.
I have the KUKA iiQKA.ExternalAPI Control 1.0.3 installed on the robot.
I have installed and verified the RT kernel correctly as described here.

Problem:

Until recently I was able to connect with the robot, send commands through moveit-rviz and make the robot move.

Recently I pulled changes from all the Kroshu GitHub packages and recompiled and suddenly saw it complain about missing ExternalAPI control toolbox. I assumed this was because the external API may have been updated, so I backed up my current installation, cloned a fresh version from here, followed the instructions, and compiled it successfully. After this, I was able to colcon build successfully but started running into communication issues.

I found a very similar issue logged on the GitHub repo [here](https://github.com/kroshu/kuka_drivers/issues/150](https://github.com/kroshu/kuka_drivers/issues/150), and the developer seems to point to the externalAPI as the source of the problem.

I've raised a ticket with KUKA Global (case #: 00973371) but haven't heard back in a few days. Please help. I'm working on a very strict deadline and need to get things operational soon!

@Svastits

KUKA robot OS

iiQKA

KUKA robot OS version

iiQKA.OS 1.2

KUKA external interface version

1.0.3

Affected robot model(s)

lbr iisy 3 r760

Version or commit hash of the driver

No response

Setup

I have all the ROS2 packages installed inside ~/colcon_ws/src and the externalAPI installed at ~/

I put the robot on AUT mode and release SPOC and then on the host machine run:
 
ros2 launch iiqka_moveit_example moveit_planning_example.launch.py with the correct controller and client ip

Reproduction steps

I just followed the step-by-step instructions provided on the Kroshu GitHub readme and instructions provided by customer support representatives from KUKA USA to get everything set up and running.

This problem started last week out of the blue.

Logs

**_CASE 1: When configure succeeds but still can't communicate with the robot_**

    [control_node-1] [INFO] [1712268704.734354956] [control_mode_handler]: Control mode changed to 1
    [control_node-1] [WARN] [1712268704.734893341] [controller_manager]: Could not 'activate' controller with name 'event_broadcaster' because no controller with this name exists
    [control_node-1] [ERROR] [1712268704.734946983] [controller_manager]: Aborting, no controller is switched! ('STRICT' switch)
    [robot_manager_node-2] [ERROR] [1712268704.735179233] [robot_manager]: Could not activate control mode handler or event broadcaster
    [control_node-1] [WARN] [1712268704.735475618] [controller_manager]: Could not 'deactivate' controller with name 'event_broadcaster' because no controller with this name exists
    [control_node-1] [ERROR] [1712268704.735603469] [controller_manager]: Aborting, no controller is switched! ('STRICT' switch)
    [control_node-1] [INFO] [1712268704.736181340] [resource_manager]: 'cleanup' hardware 'lbr_iisy3_r760' 
    [control_node-1] [INFO] [1712268704.736216757] [resource_manager]: Successful 'cleanup' of hardware 'lbr_iisy3_r760'
    [robot_manager_node-2] [ERROR] [1712268704.735858614] [robot_manager]: Could not deactivate control mode handler and event broadcaster
    [control_node-1] [INFO] [1712268723.019401331] [control_mode_handler]: Control mode changed to 1
    [control_node-1] [INFO] [1712268723.019449171] [resource_manager]: 'configure' hardware 'lbr_iisy3_r760' 
    [control_node-1] [INFO] [1712268723.022803538] [KukaEACHardwareInterface]: Set QoS profile with 2 consequent and 1 packet losses allowed in 5000 milliseconds
    [control_node-1] [INFO] [1712268723.022865201] [resource_manager]: Successful 'configure' of hardware 'lbr_iisy3_r760'
    [control_node-1] [WARN] [1712268723.023563206] [controller_manager]: Could not 'activate' controller with name 'event_broadcaster' because no controller with this name exists
    [control_node-1] [ERROR] [1712268723.023642165] [controller_manager]: Aborting, no controller is switched! ('STRICT' switch)
    [robot_manager_node-2] [ERROR] [1712268723.023853978] [robot_manager]: Could not activate control mode handler or event broadcaster
    [control_node-1] [WARN] [1712268723.024017142] [controller_manager]: Could not 'deactivate' controller with name 'event_broadcaster' because no controller with this name exists
    [control_node-1] [ERROR] [1712268723.024057560] [controller_manager]: Aborting, no controller is switched! ('STRICT' switch)
    [robot_manager_node-2] [ERROR] [1712268723.024162152] [robot_manager]: Could not deactivate control mode handler and event broadcaster
    [control_node-1] [INFO] [1712268723.024301990] [resource_manager]: 'cleanup' hardware 'lbr_iisy3_r760' 
    [control_node-1] [INFO] [1712268723.024325660] [resource_manager]: Successful 'cleanup' of hardware 'lbr_iisy3_r760'

    **_CASE 2: When configure fails_**

    [control_node-1] [INFO] [1712347470.988823482] [resource_manager]: 'configure' hardware 'lbr_iisy3_r760' 
    [control_node-1] [INFO] [1712347470.989018744] [control_mode_handler]: Control mode changed to 1
    [control_node-1] [ERROR] [1712347470.990987946] [KukaEACHardwareInterface]: QoS configuration failed, error message: failed to connect to all addresses
    [control_node-1] [INFO] [1712347470.991089417] [resource_manager]: Failed to 'configure' hardware 'lbr_iisy3_r760'
    [robot_manager_node-2] [ERROR] [1712347470.991469636] [robot_manager]: Could not configure hardware interface

    **_Some additional recent logs:_**

     [spawner-8] [INFO] [1712691090.634063134] [spawner_control_mode_handler]: Loaded control_mode_handler
    [spawner-7] [FATAL] [1712691090.634563429] [spawner_effort_controller]: Failed loading controller effort_controller
    [control_node-1] [INFO] [1712691090.635660190] [joint_trajectory_controller]: Controller state will be published at 50.00 Hz.
    [control_node-1] [INFO] [1712691090.637709818] [joint_trajectory_controller]: Action status changes will be monitored at 20.00 Hz.
    [control_node-1] [INFO] [1712691090.645277838] [controller_manager]: Configuring controller 'control_mode_handler'
    [control_node-1] [INFO] [1712691090.646438658] [control_mode_handler]: Control mode handler configured
    [INFO] [spawner-4]: process has finished cleanly [pid 183368]
    [INFO] [spawner-6]: process has finished cleanly [pid 183372]
    [ERROR] [spawner-7]: process has died [pid 183374, exit code 1, cmd '/opt/ros/humble/lib/controller_manager/spawner effort_controller -c /controller_manager -n --inactive --ros-args'].
    [INFO] [spawner-5]: process has finished cleanly [pid 183370]
    [INFO] [spawner-8]: process has finished cleanly [pid 183376]
    [control_node-1] [INFO] [1712691103.646620724] [control_mode_handler]: Control mode changed to 1
    [control_node-1] [WARN] [1712691103.647040309] [controller_manager]: Could not 'activate' controller with name 'event_broadcaster' because no controller with this name exists
    [control_node-1] [ERROR] [1712691103.647126353] [controller_manager]: Aborting, no controller is switched! ('STRICT' switch)
    [robot_manager_node-2] [ERROR] [1712691103.647303042] [robot_manager]: Could not activate control mode handler or event broadcaster
    [robot_manager_node-2] [ERROR] [1712691103.647635759] [robot_manager]: Could not deactivate control mode handler and event broadcaster
    [control_node-1] [WARN] [1712691103.647504963] [controller_manager]: Could not 'deactivate' controller with name 'event_broadcaster' because no controller with this name exists
    [control_node-1] [ERROR] [1712691103.647528412] [controller_manager]: Aborting, no controller is switched! ('STRICT' switch)
    [control_node-1] [INFO] [1712691103.647895328] [resource_manager]: 'cleanup' hardware 'lbr_iisy3_r760' 
    [control_node-1] [INFO] [1712691103.647959225] [resource_manager]: Successful 'cleanup' of hardware 'lbr_iisy3_r760'

[BUG] - iiQKA Communication with LBR iisy R1300

Description

Cannot get communication between iiQKA and the robot driver possibly due to missing toolbox installation of ExternalAPI.Control
The documentation states as a first step to install the toolbox to the controller but the installation process is not documented and there are no results regarding the toolbox online.
Wireshark shows the traffic from the client to the controller after trying to configure the robot manager but gets no response.
Possibly the toolbox is not installed and the ports are closed.

KUKA robot OS

iiQKA

KUKA robot OS version

KUKA Linux OS 2.0.14

KUKA external interface version

iiQKA OS 1.2.6

Affected robot model(s)

LBR iisy R1300

Version or commit hash of the driver

master

Setup

The LBR iisy R1300 controller is freshly upgraded from the teach pendant.
Network is configured and accessible between the controller and client PC
Client is on 192.168.10.102 and controller on 192.168.10.100.
All 3 ROS2 packages are built and the external SDK is build prior to that.
The test was performed both in T1 and AUT and as User and Admin.

Reproduction steps

colcon build
source install/setup.bash
ros2 launch kuka_iiqka_eac_driver startup.launch.py client_ip:=192.168.10.102 controller_ip:=192.168.10.100
Release SPOC on Teach Pendant
ros2 lifecycle set robot_manager configure

Logs

[INFO] [launch]: All log files can be found below /home/ekampourakis/.ros/log/2024-03-13-11-24-41-600258-ekampourakis-pc-15372
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [control_node-1]: process started with pid [15385]
[INFO] [robot_manager_node-2]: process started with pid [15387]
[INFO] [robot_state_publisher-3]: process started with pid [15389]
[INFO] [spawner-4]: process started with pid [15391]
[INFO] [spawner-5]: process started with pid [15393]
[INFO] [spawner-6]: process started with pid [15395]
[INFO] [spawner-7]: process started with pid [15397]
[INFO] [spawner-8]: process started with pid [15399]
[INFO] [spawner-9]: process started with pid [15401]
[robot_manager_node-2] [INFO] [1710321881.814935552] [robot_manager]: Control mode change requested
[robot_manager_node-2] [INFO] [1710321881.814969437] [robot_manager]: Successfully changed control mode to 1
[robot_state_publisher-3] [INFO] [1710321881.817378138] [robot_state_publisher]: got segment base
[robot_state_publisher-3] [INFO] [1710321881.817417704] [robot_state_publisher]: got segment base_link
[robot_state_publisher-3] [INFO] [1710321881.817422060] [robot_state_publisher]: got segment flange
[robot_state_publisher-3] [INFO] [1710321881.817424690] [robot_state_publisher]: got segment link_1
[robot_state_publisher-3] [INFO] [1710321881.817427028] [robot_state_publisher]: got segment link_2
[robot_state_publisher-3] [INFO] [1710321881.817429247] [robot_state_publisher]: got segment link_3
[robot_state_publisher-3] [INFO] [1710321881.817431342] [robot_state_publisher]: got segment link_4
[robot_state_publisher-3] [INFO] [1710321881.817433545] [robot_state_publisher]: got segment link_5
[robot_state_publisher-3] [INFO] [1710321881.817435767] [robot_state_publisher]: got segment link_6
[robot_state_publisher-3] [INFO] [1710321881.817438102] [robot_state_publisher]: got segment tool0
[robot_state_publisher-3] [INFO] [1710321881.817440282] [robot_state_publisher]: got segment world
[control_node-1] [WARN] [1710321881.823327978] [controller_manager]: [Deprecated] Passing the robot description parameter directly to the control_manager node is deprecated. Use '~/robot_description' topic from 'robot_state_publisher' instead.
[control_node-1] [INFO] [1710321881.823503142] [resource_manager]: Loading hardware 'lbr_iisy11_r1300' 
[control_node-1] [INFO] [1710321881.827741443] [resource_manager]: Initialize hardware 'lbr_iisy11_r1300' 
[control_node-1] [INFO] [1710321881.827955847] [KukaEACHardwareInterface]: Init successful with controller ip: 192.168.10.100 and client ip: 192.168.10.102
[control_node-1] [INFO] [1710321881.827966065] [resource_manager]: Successful initialization of hardware 'lbr_iisy11_r1300'
[control_node-1] [INFO] [1710321881.828104522] [controller_manager]: Setting component 'lbr_iisy11_r1300' to 'unconfigured' state.
[control_node-1] [INFO] [1710321882.277147371] [controller_manager]: Loading controller 'effort_controller'
[spawner-7] [INFO] [1710321882.282809153] [spawner_effort_controller]: Loaded effort_controller
[control_node-1] [INFO] [1710321882.283082479] [controller_manager]: Configuring controller 'effort_controller'
[control_node-1] [INFO] [1710321882.283219171] [effort_controller]: configure successful
[control_node-1] got gains for joint_1 as (5.000000, 0.000000, 0.100000)
[control_node-1] got gains for joint_2 as (5.000000, 0.000000, 0.100000)
[control_node-1] got gains for joint_3 as (5.000000, 0.000000, 0.100000)
[control_node-1] got gains for joint_4 as (5.000000, 0.000000, 0.100000)
[control_node-1] got gains for joint_5 as (5.000000, 0.000000, 0.100000)
[control_node-1] got gains for joint_6 as (5.000000, 0.000000, 0.100000)
[control_node-1] [INFO] [1710321882.287311155] [controller_manager]: Loading controller 'joint_group_impedance_controller'
[control_node-1] [INFO] [1710321882.290604323] [controller_manager]: Loading controller 'event_broadcaster'
[spawner-6] [INFO] [1710321882.291083987] [spawner_joint_group_impedance_controller]: Loaded joint_group_impedance_controller
[control_node-1] [INFO] [1710321882.294587349] [controller_manager]: Configuring controller 'joint_group_impedance_controller'
[control_node-1] [INFO] [1710321882.294722745] [joint_group_impedance_controller]: configure successful
[spawner-9] [INFO] [1710321882.294743370] [spawner_event_broadcaster]: Loaded event_broadcaster
[control_node-1] [INFO] [1710321882.298595774] [controller_manager]: Loading controller 'joint_trajectory_controller'
[control_node-1] [WARN] [1710321882.301196491] [joint_trajectory_controller]: [Deprecated]: "allow_nonzero_velocity_at_trajectory_end" is set to true. The default behavior will change to false.
[control_node-1] [INFO] [1710321882.302832277] [controller_manager]: Configuring controller 'event_broadcaster'
[spawner-5] [INFO] [1710321882.302901455] [spawner_joint_trajectory_controller]: Loaded joint_trajectory_controller
[control_node-1] [INFO] [1710321882.306512800] [controller_manager]: Loading controller 'joint_state_broadcaster'
[control_node-1] [INFO] [1710321882.310543431] [controller_manager]: Loading controller 'control_mode_handler'
[spawner-4] [INFO] [1710321882.311023391] [spawner_joint_state_broadcaster]: Loaded joint_state_broadcaster
[control_node-1] [INFO] [1710321882.314485137] [controller_manager]: Configuring controller 'joint_trajectory_controller'
[control_node-1] [INFO] [1710321882.314569534] [joint_trajectory_controller]: No specific joint names are used for command interfaces. Using 'joints' parameter.
[control_node-1] [INFO] [1710321882.314579151] [joint_trajectory_controller]: Command interfaces are [position] and state interfaces are [position].
[control_node-1] [INFO] [1710321882.314584101] [joint_trajectory_controller]: Using 'splines' interpolation method.
[spawner-8] [INFO] [1710321882.314874339] [spawner_control_mode_handler]: Loaded control_mode_handler
[control_node-1] [INFO] [1710321882.314883357] [joint_trajectory_controller]: Controller state will be published at 50.00 Hz.
[control_node-1] [INFO] [1710321882.315850127] [joint_trajectory_controller]: Action status changes will be monitored at 20.00 Hz.
[control_node-1] [INFO] [1710321882.318542760] [controller_manager]: Configuring controller 'joint_state_broadcaster'
[control_node-1] [INFO] [1710321882.318569939] [joint_state_broadcaster]: 'joints' or 'interfaces' parameter is empty. All available state interfaces will be published
[control_node-1] [INFO] [1710321882.322498885] [controller_manager]: Configuring controller 'control_mode_handler'
[control_node-1] [INFO] [1710321882.323566965] [control_mode_handler]: Control mode handler configured
[INFO] [spawner-7]: process has finished cleanly [pid 15397]
[INFO] [spawner-6]: process has finished cleanly [pid 15395]
[INFO] [spawner-4]: process has finished cleanly [pid 15391]
[INFO] [spawner-8]: process has finished cleanly [pid 15399]
[INFO] [spawner-5]: process has finished cleanly [pid 15393]
[INFO] [spawner-9]: process has finished cleanly [pid 15401]



[control_node-1] [INFO] [1710322015.382291688] [resource_manager]: 'configure' hardware 'lbr_iisy11_r1300' 
[control_node-1] [INFO] [1710322015.382369347] [control_mode_handler]: Control mode changed to 1
[robot_manager_node-2] [ERROR] [1710322017.382186975] [robot_manager]: Could not configure hardware interface
[control_node-1] [ERROR] [1710322035.383135890] [KukaEACHardwareInterface]: QoS configuration failed, error message: failed to connect to all addresses
[control_node-1] [INFO] [1710322035.383167251] [resource_manager]: Failed to 'configure' hardware 'lbr_iisy11_r1300'

Update travis-ci and sonar-cloud configuration files

With the new repository structure it should be checked if the configuration files are still correct and updated if not. It looks like industrial-ci is building all packages found in the repository, so the pipeline should work (once the linter issues are solved), but the sonar-cloud analysis definitely won't.

I think should find a solution to handle the packages in sonar-cloud as individual projects, and maybe even configure the pipeline so that only those packages are being built and tested that contain changes.

Driver activation fails after deactivation [Sunrise]

This bug is related to the ros2_control integration on branch feature/ros2_control

Activation of the driver is successful, but if one deactivates the system and tries to activate it again, the starting of FRI fails

Log outputs
ROS2 terminal:
[sunrise_control_node-1] [ERROR] [KUKAFRIHardwareInterface]: Failed to read data from controller
[robot_manager_node-2] [ERROR] [robot_manager]: Could not start FRI
SmartPad:
FRI-Session could not be established.

Steps to reproduce
Start driver, configure, activate, deactivate and activate again:
ros2 launch kuka_sunrise kuka_sunrise_control.launch.py
ros2 lifecycle set robot_manager configure
ros2 lifecycle set robot_manager activate
ros2 lifecycle set robot_manager deactivate
ros2 lifecycle set robot_manager activate

However, if one cleans up the manager node and configures it again, reactivation is successful

Error from fri client lib: "Error: incompatible IDs for received message"

Why not just create a hardware interface for ros2_control?

The de-facto control framework for ROS is ros_control, which is currently being ported to ROS2. A detailed reasoning should be provided why nodes are created for the driver instead of just implementing a hardware interface so that the robot can be used with ros2_control.

Nanopb dependency issue

Hi,

I am currently trying to build your fri package, however I am having issues with the required nanopb dependency. Could you advise on the correct installation procedure of nanopb in order for your cmake file to discover everything that's needed?

Thanks,
Jeffrey

Test torque command mode and I/O-s [Sunrise]

Currently only the joint position command mode is tested, although implementation is done for torque command mode and for reading and writing I/O vales of FRI. These should be tested too, and improved, if necessary

Testing torque command mode:

  • edit kuka_sunrise_driver/config/fri_config.yaml: change control_mode ("joint_impedance"), command_mode ("torque") and send_period_ms (<=5)
  • start controller with joint torque output (add in launch file and configure in iiwa_ros2_controller_config.yaml)

Testing I/O-s:

  • edit kuka_sunrise_driver/config/gpio_config.xacro: change interface names and data_types according to real setup
  • implement controller to change command interface values and add it to launch file

Controller manager interfaces "freeze" during configuration

Using the is_configured flag in the sunrise control node and configuring the robot manager stops all controller manager interfaces: controller activation fails, requests from ros2 control CLI are not responding.
(is_configured flag is used to sleep in control loop if read-write methods are not call in unconfigured state)

Workaround available on master

Connection quality is not stable [feature/ros2_control]

This issue is related to the ros2_control integration on branch feature/ros2_control

Starting the driver and activating control requires stable connection between robot controller and client application. In most cases the hardware_interface is able to fulfill requirements (quality is usually EXCELLENT), but sporadically quality worsens and control mode is stopped. This issue comes forth more frequently, if the cycle time (send_period_ms parameter) is smaller.

Driver with original implementation is stable with cycle times above 1 ms, with 1 ms cycle time it can stop after a few seconds. New implementation can run for longer times with even 1 ms cycle time, but it is unstable on every frequency.

To be investigated:

  • produce logs on the controller to see which attribute (jitter/latency/dropped packets) is not fulfilled in these cases
  • measure overhead of getting every possible state available (operation mode, drive state, etc)
  • check hardware interface code and try to increase performance, avoid unnecessary copies
  • implement dummy controller with empty body and try to reproduce issue
  • call mlockall() and sched_setscheduler() functions for hardware interface and controllers
  • run RT-component of the driver on a dedicated, isolated thread and check if issue is still present

Evaluate GitHub actions for pipeline builds

Industrial CI also runs on GitHub actions. Main reason to consider switching: Travis-CI does not support skipping builds if only certain files or directories have changed (travis-ci/travis-ci#6301). This would be quite relevant for the documentation folder - it makes no sense to trigger a build when updating it.

Reorganize & update

All ROS2 packages and other code (e.g. Sunrise Project) should be located in the same repository. For a reference, see the motoman driver. Inside the repository, the ros2_ prefixes could be then also removed.

Proposed structure:

  • kroshu/ros2_kuka_sunrise (repo)
    • kuka_sunrise (ROS2 metapackage)
    • kuka_sunrise_driver (ROS2 package)
    • kuka_sunrise_interfaces (ROS2 interface package)
    • kuka_sunrise_ros2_robot_application (Sunrise Project)
      • This could actually be 'shipped' independently from ROS2 and be a generic state-machine based Robot Application for external control through FRI, like the abb driver, but since this is not really required, imo we should just keep specific to ROS2 and deploy alongside the ROS2 driver
    • kuka_sunrise_hardware_interface (for ros2_control support in the future)

Cannot start controller for iiwa7

Hello,

I have a problem starting the ros2 driver when working with an iiwa robot. Is this a way to get some support on this? If not, just let me know.

Setup:
ros2 humble (current)
ros2_kuka_drivers v0.0.2-402-gf93987c
FRI 1.15 on iiwa 14 R820

I'm able to run FRI Demo applications, e.g. "JointSineOverlay" .
To reproduce the bug, first I start the different control nodes like this:

> ros2 launch kuka_sunrise lbr_iiwa7_control.launch.py

Trigger configuration

> ros2 lifecycle set /robot_manager configure
Transitioning failed

Output of ros2 launch

[control_node-1] [INFO] [1691617776.610808798] [resource_manager]: 'configure' hardware 'iiwa_hardware'
[control_node-1] [INFO] [1691617776.610896167] [resource_manager]: Successful 'configure' of hardware 'iiwa_hardware'
[robot_manager_node-2] [INFO] [1691617776.616033648] [robot_manager]: Successfully set 'controller_ip' parameter
[robot_manager_node-2] Request timed out
[robot_manager_node-2] [ERROR] [1691617779.616487786] [robot_manager]: Could not start controllers
[robot_manager_node-2] [INFO] [1691617779.618349611] [robot_manager]: Successfully connected to FRI
[robot_manager_node-2] Request timed out
[robot_manager_node-2] [ERROR] [1691617781.619562099] [robot_manager]: Could not stop controllers

On the smartPAD the output is:

Waiting for connection...
Connection established.
New data received: 01, [B@83969e 
Command received: CONNECT
Command executed.
New data received: 02, [B@1159092
Command receivda?: DISCONNECT
Command executed.
Error: connection lost. FRI ended.
Waiting for connection...

I've investigate in the source why this happens. Right now it is not clear to me why the controller sends DISCONNECT.

Create base class for joint_controller

The node sending the commands to the sunrise driver must have a few members and functions, which are necessary for proper functioning:

  • Control loop with send_period_ms_ and receive_multiplier_ member variables
  • Server for syncing these variables with the driver
  • lifecycle management and parameter handling (should come from ROS2BaseNode)

A base class with some pure virtual functions should be implemented, which contains these must-have functionalities

Interface starts but stops immediatly after that

initialisation works and robot shows up in rviz with the angles of the real robot but then the comunication stops immediatly after that

[control_node-1] [INFO] [1695728579.810712266] [UDPServer]: 192.168.1.140: 49152
[control_node-1] [INFO] [1695728579.810831246] [KukaRSIHardwareInterface]: Connecting to robot . . .
[control_node-1] [INFO] [1695728585.019093222] [KukaRSIHardwareInterface]: Got data from robot
[control_node-1] [INFO] [1695728585.019692347] [KukaRSIHardwareInterface]: System Successfully started!
[control_node-1] [INFO] [1695728585.019737103] [resource_manager]: Successful 'activate' of hardware 'kr6_r700_sixx'
[control_node-1] [ERROR] [1695728586.022863020] [KukaRSIHardwareInterface]: No data received from robot

I got RSI 3.2 on my KUKA
KSS 8.3.528

Here is my Config:

2023-09-26 16 33 41

2023-09-26 16 33 19

2023-09-26 14 50 03

2023-09-26 14 49 14

2023-09-26 14 48 48

2023-09-26 14 48 41

2023-09-26 16 31 13

2023-09-26 14 57 14

2023-09-26 14 57 14-1

2023-09-26 14 56 41

2023-09-26 14 56 54

2023-09-26 14 56 32

2023-09-26 14 49 58

2023-09-26 14 56 28

Monitoring loop stops before activation [sporadic] [sunrise_driver_original]

When activating the system manager, sporadically a log message is seen about stopping the monitoring loop. In these cases this message does not show by deactivation, so the monitoring loop is stopped at its first tick.
Possible reason:
the loop is created on a new thread in the on_activate function of the system_manager (at system_manager.cpp L174), as one of the last steps of the activation. The loop terminates if the system manager node is not active, so if the condition is evaluated before the activation finishes, it terminates immediately.

Proposed solution:
use a mutex to wait for finished activation

Logs:
[robot_control_node-2] LBRiiwaClient state changed from 0 to 1
[robot_control_node-2] LBRiiwaClient state changed from 1 to 2
[system_manager-3] [WARN] [system_manager]: Stopping monitoring loop
[robot_control_node-2] LBRiiwaClient state changed from 2 to 3
[robot_control_node-2] LBRiiwaClient state changed from 3 to 4
[----------deactivating----------]
[robot_control_node-2] LBRiiwaClient state changed from 4 to 2
[robot_control_node-2] LBRiiwaClient state changed from 2 to 0

Document drivers

Documentation should contain:

  • how to set up the driver (both ROS2 and controller side)
  • what are the supported functionalities
  • what are the functionalities that are supported by the external interface, but not by the driver
  • how to run examples
  • known issues/ FAQ

Use base class of kroshu_ros2_core

When I took a look at the sonar issues, I realized that we have the ROS2BaseClass class in this repo, which we don't use here at the moment. We could benefit from it, e.g. it would reduce code duplication and introduce greater modularity. I'll take a look at it and give it a go on a separate branch.

possible typo in `kuka_drivers/examples/iiqka_moveit_example/include/iiqka_moveit_example/moveit_example.hpp`

Hi! I am trying to build the project in order to control a KUKA KR4 robotic arm. Following the instructions in the readme the colcon build command gave me the following error:

In file included from /home/uriel/ws_moveit/src/kuka_drivers/examples/iiqka_moveit_example/src/MoveitCollisionAvoidanceExample.cpp:18:
/home/uriel/ws_moveit/src/kuka_drivers/examples/iiqka_moveit_example/include/iiqka_moveit_example/moveit_example.hpp: In member function ‘moveit_msgs::msg::RobotTrajectory_<std::allocator<void> >::SharedPtr MoveitExample::planToPoint(const Isometry3d&, const string&, const string&)’:
/home/uriel/ws_moveit/src/kuka_drivers/examples/iiqka_moveit_example/include/iiqka_moveit_example/moveit_example.hpp:109:71: error: ‘struct moveit::planning_interface::MoveGroupInterface::Plan’ has no member named ‘trajectory_’; did you mean ‘trajectory’?
  109 |       return std::make_shared<moveit_msgs::msg::RobotTrajectory>(plan.trajectory_);
      |                                                                       ^~~~~~~~~~~
      |                                                                       trajectory

Changing trajectory_ to trajectory in lines 109, 125 and 150 seems to fix the issue and the build finishes successfully. I'm not a very experienced ROS user and I don't know if this is an actual fix or if the error was somewhere else.

I'm writing this issue to see if you can help me find out which is the case. Thanks in advance and apologies in case this is not the way to proceed.

ROS2 IP Setup KR4

I got a question reguarding the IP Configurations: What am i doing wrong i dont get why it doesnt work.

IP: 192.168.1.147
Subnet: 255.255.255.0

IMG20230926102312

IMG20230926102328
IP of the ROS2 PC
IMG20230926102353
This will be set accordingly to the ROS2 PC
IMG20230926102413
This will be set accordingly to the ROS2 PC - specified port like set above

RSI Moveit Lauch

I want to integrate pilz planner into the launch file for the RSI HW Interface.
How can this be added ?

Add minimal documentation

There is currently no public documentation on the usage of the driver. Add minimal documentation describing the architecture, system setup and a quick-start guide.

Proposal: create a doc folder with Markdown files that are then exported to the repository Wiki using the GitHub action wiki-page-creator-action

[KukaRoXHardwareInterface]: SetQoSProfile failed

Relevant Info:

  • OS: Ubuntu 22.04 with real-time patch.
  • ROS version: Humble (default DDS).
  • ros2_kuka_drivers branch: 0.6.0.

Issue:
Trying to follow readme https://github.com/kroshu/ros2_kuka_drivers/wiki. The error appears in the life cycle management, when executing the command:

ros2 lifecycle set robot_manager configure

No hardware is involved. Appears for both torque and position interface.

Log:

1678376094.9377315 [INFO] [launch]: All log files can be found below /home/ros2/.ros/log/2023-03-09-16-34-54-937012-ros2-Precision-Tower-5810-20489
1678376094.9379082 [INFO] [launch]: Default logging verbosity is set to INFO
1678376095.3964398 [INFO] [rox_control_node-1]: process started with pid [20503]
1678376095.3967752 [INFO] [robot_manager_node-2]: process started with pid [20505]
1678376095.3969758 [INFO] [robot_state_publisher-3]: process started with pid [20507]
1678376095.3971589 [INFO] [spawner-4]: process started with pid [20509]
1678376095.3973446 [INFO] [spawner-5]: process started with pid [20511]
1678376095.3975382 [INFO] [spawner-6]: process started with pid [20513]
1678376095.3977170 [INFO] [spawner-7]: process started with pid [20515]
1678376095.4304569 [rox_control_node-1] [INFO] [1678376095.430076332] [resource_manager]: Loading hardware 'iisy_hardware' 
1678376095.4364066 [robot_state_publisher-3] [INFO] [1678376095.435909475] [robot_state_publisher]: got segment LBR3R760_iisy_axis1
1678376095.4366567 [robot_state_publisher-3] [INFO] [1678376095.436030796] [robot_state_publisher]: got segment LBR3R760_iisy_axis2
1678376095.4367929 [robot_state_publisher-3] [INFO] [1678376095.436048584] [robot_state_publisher]: got segment LBR3R760_iisy_axis3
1678376095.4369311 [robot_state_publisher-3] [INFO] [1678376095.436057980] [robot_state_publisher]: got segment LBR3R760_iisy_axis4
1678376095.4370553 [robot_state_publisher-3] [INFO] [1678376095.436066488] [robot_state_publisher]: got segment LBR3R760_iisy_axis5
1678376095.4371786 [robot_state_publisher-3] [INFO] [1678376095.436074846] [robot_state_publisher]: got segment LBR3R760_iisy_axis6
1678376095.4373093 [robot_state_publisher-3] [INFO] [1678376095.436083197] [robot_state_publisher]: got segment LBR3R760_iisy_fixedbase
1678376095.4374912 [robot_state_publisher-3] [INFO] [1678376095.436091720] [robot_state_publisher]: got segment LBR3R760_iisy_flange
1678376095.4377170 [robot_state_publisher-3] [INFO] [1678376095.436100070] [robot_state_publisher]: got segment base_link
1678376095.4441547 [robot_manager_node-2] [INFO] [1678376095.443825865] [robot_manager]: Starting Robot Manager Node init
1678376095.4446981 [rox_control_node-1] [INFO] [1678376095.444162690] [resource_manager]: Initialize hardware 'iisy_hardware' 
1678376095.4454660 [rox_control_node-1] [INFO] [1678376095.445255036] [KukaRoXHardwareInterface]: Init successful
1678376095.4456372 [rox_control_node-1] [INFO] [1678376095.445277722] [resource_manager]: Successful initialization of hardware 'iisy_hardware'
1678376095.4460344 [rox_control_node-1] [INFO] [1678376095.445288258] [KukaRoXHardwareInterface]: Export state interfaces
1678376095.4463315 [rox_control_node-1] [INFO] [1678376095.445393494] [KukaRoXHardwareInterface]: Export command interfaces
1678376095.4465237 [rox_control_node-1] [INFO] [1678376095.445544403] [resource_manager]: Hardware Component with name '' does not exists
1678376095.4470041 [robot_manager_node-2] [INFO] [1678376095.446758321] [robot_manager]: Control mode changed to POSITION_CONTROL
1678376095.4473732 [robot_manager_node-2] [INFO] [1678376095.446975492] [robot_manager]: IP address of controller: 0.0.0.0
1678376095.7861826 [rox_control_node-1] [INFO] [1678376095.784359823] [controller_manager]: Loading controller 'joint_impedance_controller'
1678376095.7997952 [rox_control_node-1] [INFO] [1678376095.799545779] [controller_manager]: Loading controller 'joint_state_broadcaster'
1678376095.8100915 [spawner-5] [INFO] [1678376095.809854318] [spawner_joint_impedance_controller]: �[94mLoaded �[1mjoint_impedance_controller�[0m
1678376095.8257384 [spawner-6] [INFO] [1678376095.825405834] [spawner_joint_state_broadcaster]: �[94mLoaded �[1mjoint_state_broadcaster�[0m
1678376095.8272803 [rox_control_node-1] [INFO] [1678376095.827105517] [controller_manager]: Configuring controller 'joint_state_broadcaster'
1678376095.8275547 [rox_control_node-1] [INFO] [1678376095.827242192] [joint_state_broadcaster]: 'joints' or 'interfaces' parameter is empty. All available state interfaces will be published
1678376095.8940248 [spawner-5] [INFO] [1678376095.893787919] [spawner_joint_impedance_controller]: �[96mLoaded parameters file "/home/ros2/ws_spirit/install/kuka_rox_hw_interface/share/kuka_rox_hw_interface/config/joint_impedance_controller_config.yaml" for �[1mjoint_impedance_controller�[0m
1678376095.8943746 [spawner-5] [INFO] [1678376095.894141864] [spawner_joint_impedance_controller]: Loaded /home/ros2/ws_spirit/install/kuka_rox_hw_interface/share/kuka_rox_hw_interface/config/joint_impedance_controller_config.yaml into joint_impedance_controller
1678376095.8950522 [rox_control_node-1] [INFO] [1678376095.894917865] [controller_manager]: Configuring controller 'joint_impedance_controller'
1678376095.8974588 [spawner-5] Set parameter joints successful
1678376095.9738901 [INFO] [spawner-6]: process has finished cleanly [pid 20513]
1678376096.0183399 [rox_control_node-1] [INFO] [1678376096.018006449] [controller_manager]: Loading controller 'effort_controller'
1678376096.0247312 [spawner-7] [INFO] [1678376096.024540409] [spawner_effort_controller]: �[94mLoaded �[1meffort_controller�[0m
1678376096.0320768 [spawner-7] [INFO] [1678376096.031883254] [spawner_effort_controller]: �[96mLoaded parameters file "/home/ros2/ws_spirit/install/kuka_rox_hw_interface/share/kuka_rox_hw_interface/config/effort_controller_config.yaml" for �[1meffort_controller�[0m
1678376096.0324244 [spawner-7] [INFO] [1678376096.032213767] [spawner_effort_controller]: Loaded /home/ros2/ws_spirit/install/kuka_rox_hw_interface/share/kuka_rox_hw_interface/config/effort_controller_config.yaml into effort_controller
1678376096.0330479 [rox_control_node-1] [INFO] [1678376096.032885108] [controller_manager]: Configuring controller 'effort_controller'
1678376096.0335348 [rox_control_node-1] [INFO] [1678376096.033365241] [effort_controller]: configure successful
1678376096.0339060 [rox_control_node-1] got gains for joint_a1 as (5.000000, 0.000000, 0.100000)
1678376096.0340159 [rox_control_node-1] got gains for joint_a2 as (5.000000, 0.000000, 0.100000)
1678376096.0341234 [rox_control_node-1] got gains for joint_a3 as (5.000000, 0.000000, 0.100000)
1678376096.0342226 [rox_control_node-1] got gains for joint_a4 as (5.000000, 0.000000, 0.100000)
1678376096.0343087 [rox_control_node-1] got gains for joint_a5 as (5.000000, 0.000000, 0.100000)
1678376096.0343895 [rox_control_node-1] got gains for joint_a6 as (5.000000, 0.000000, 0.100000)
1678376096.0348134 [spawner-7] Set parameter joints successful
1678376096.0348995 [spawner-7] Set parameter gains.joint_a1.p successful
1678376096.0349646 [spawner-7] Set parameter gains.joint_a1.i successful
1678376096.0350225 [spawner-7] Set parameter gains.joint_a1.d successful
1678376096.0350804 [spawner-7] Set parameter gains.joint_a2.p successful
1678376096.0351362 [spawner-7] Set parameter gains.joint_a2.i successful
1678376096.0351901 [spawner-7] Set parameter gains.joint_a2.d successful
1678376096.0352433 [spawner-7] Set parameter gains.joint_a3.p successful
1678376096.0352964 [spawner-7] Set parameter gains.joint_a3.i successful
1678376096.0353498 [spawner-7] Set parameter gains.joint_a3.d successful
1678376096.0354033 [spawner-7] Set parameter gains.joint_a4.p successful
1678376096.0354564 [spawner-7] Set parameter gains.joint_a4.i successful
1678376096.0355091 [spawner-7] Set parameter gains.joint_a4.d successful
1678376096.0355620 [spawner-7] Set parameter gains.joint_a5.p successful
1678376096.0356154 [spawner-7] Set parameter gains.joint_a5.i successful
1678376096.0356700 [spawner-7] Set parameter gains.joint_a5.d successful
1678376096.0357244 [spawner-7] Set parameter gains.joint_a6.p successful
1678376096.0357773 [spawner-7] Set parameter gains.joint_a6.i successful
1678376096.0358300 [spawner-7] Set parameter gains.joint_a6.d successful
1678376096.0362647 [rox_control_node-1] [INFO] [1678376096.035078196] [controller_manager]: Loading controller 'joint_trajectory_controller'
1678376096.0377002 [INFO] [spawner-5]: process has finished cleanly [pid 20511]
1678376096.0449889 [spawner-4] [INFO] [1678376096.044517753] [spawner_joint_trajectory_controller]: �[94mLoaded �[1mjoint_trajectory_controller�[0m
1678376096.0503695 [spawner-4] [INFO] [1678376096.050110692] [spawner_joint_trajectory_controller]: �[96mLoaded parameters file "/home/ros2/ws_spirit/install/kuka_rox_hw_interface/share/kuka_rox_hw_interface/config/joint_trajectory_controller_config.yaml" for �[1mjoint_trajectory_controller�[0m
1678376096.0507314 [spawner-4] [INFO] [1678376096.050452283] [spawner_joint_trajectory_controller]: Loaded /home/ros2/ws_spirit/install/kuka_rox_hw_interface/share/kuka_rox_hw_interface/config/joint_trajectory_controller_config.yaml into joint_trajectory_controller
1678376096.0520666 [rox_control_node-1] [INFO] [1678376096.051793678] [controller_manager]: Configuring controller 'joint_trajectory_controller'
1678376096.0575621 [rox_control_node-1] [INFO] [1678376096.057280263] [joint_trajectory_controller]: No specific joint names are used for command interfaces. Using 'joints' parameter.
1678376096.0579619 [rox_control_node-1] [INFO] [1678376096.057560475] [joint_trajectory_controller]: Command interfaces are [position] and state interfaces are [position].
1678376096.0580404 [rox_control_node-1] [INFO] [1678376096.057682009] [joint_trajectory_controller]: Using 'splines' interpolation method.
1678376096.0619559 [rox_control_node-1] [INFO] [1678376096.061357064] [joint_trajectory_controller]: Action status changes will be monitored at 20.00 Hz.
1678376096.0662417 [spawner-4] Set parameter joints successful
1678376096.0663369 [spawner-4] Set parameter command_interfaces successful
1678376096.0663784 [spawner-4] Set parameter state_interfaces successful
1678376096.0664136 [spawner-4] Set parameter state_publish_rate successful
1678376096.0664463 [spawner-4] Set parameter action_monitor_rate successful
1678376096.1906300 [INFO] [spawner-7]: process has finished cleanly [pid 20515]
1678376096.2113073 [INFO] [spawner-4]: process has finished cleanly [pid 20509]
1678376106.6389141 [rox_control_node-1] [INFO] [1678376106.637892812] [resource_manager]: 'configure' hardware 'iisy_hardware' 
1678376106.6394484 [rox_control_node-1] [ERROR] [1678376106.638781104] [KukaRoXHardwareInterface]: SetQoSProfile failed
1678376106.6405642 [rox_control_node-1] [INFO] [1678376106.638840063] [resource_manager]: Failed to 'configure' hardware 'iisy_hardware'
1678376106.6409507 [robot_manager_node-2] [ERROR] [1678376106.639119470] [robot_manager]: Could not configure hardware interface
1678376108.7426581 [rox_control_node-1] [INFO] [1678376108.741051418] [resource_manager]: 'configure' hardware 'iisy_hardware' 
1678376108.7431395 [rox_control_node-1] [ERROR] [1678376108.741319842] [KukaRoXHardwareInterface]: SetQoSProfile failed
1678376108.7432718 [rox_control_node-1] [INFO] [1678376108.741348443] [resource_manager]: Failed to 'configure' hardware 'iisy_hardware'
1678376108.7435489 [robot_manager_node-2] [ERROR] [1678376108.741479164] [robot_manager]: Could not configure hardware interface
1678376113.8028290 [WARNING] [launch]: user interrupted with ctrl-c (SIGINT)
1678376114.7504675 [robot_manager_node-2] [INFO] [1678376113.802577929] [rclcpp]: signal_handler(signum=2)
1678376114.7506933 [INFO] [robot_state_publisher-3]: process has finished cleanly [pid 20507]
1678376114.7508323 [INFO] [robot_manager_node-2]: process has finished cleanly [pid 20505]
1678376114.7509809 [INFO] [rox_control_node-1]: process has finished cleanly [pid 20503]
1678376114.7512724 [robot_state_publisher-3] [INFO] [1678376113.802612500] [rclcpp]: signal_handler(signum=2)
1678376114.7515290 [rox_control_node-1] [INFO] [1678376113.802612543] [rclcpp]: signal_handler(signum=2)

More information can be provided.

[BUG] - Broken links in Wiki for iiqka controllers

Description

In the wiki of iiQKA_EAC there are 3 broken links that should send the reader to the configuration files of:

  • joint_trajectory_controller
  • joint_group_impedance_controller
  • effort_controller

If the documentation is open locally, this error does not happen since the path to the file is relative to the file itself (iiQKA_EAC.md). However, such a relative path is broken if opened from the Wiki in Git Hub.

Unfortunately, Git Hub does not allow pull requests limited to the Wiki. Therefore, I made a fork of the repo at the following link, where I fixed the path of the three files.

I hope it helps,

Niccolo

KUKA robot OS

No response

KUKA robot OS version

None

KUKA external interface version

None

Affected robot model(s)

None

Version or commit hash of the driver

No response

Setup

None

Reproduction steps

None

Logs

No response

Monitoring mode is not available [sunrise_driver_original]

When activating only the 2 driver nodes, the monitoring mode is activated on the robot controller, but the activate() function of the RobotObserver class is not called, therefore the publisher is not activated and the joint states are not sent to the ROS2 side
Besides, the ConfigurationManager contains two client requests to sync the receive_multiplier and the send_period parameters with the joint_controller, which is not available with only the 2 drivers started, so configuration fails

Solution proposal:

  • if monitoring mode is a wanted feature, add a commanding (bool) parameter to the node and call these syncing requests only if the parameter is false + move the activation of the RobotObserver to the LifeCycleNode activation function
  • if monitoring mode is not needed, the syncing should remain as it is, and the whole commanding mode activation should be moved to the activation callback of the robot_manager_node (currently done in the changeRobotCommandingState() method of the system_manager)

Add support for cartesian motions

Cartesian position and wrench control are supported by FRI, but not by our driver, these functionalities should be added -> also to the application running on the controller

Client app thread can't be joined if START_FRI fails [sunrise_driver_original]

If the START_FRI command fails, the driver tries to transition back to inactive state, which means joining the client_app_thread_ of the robot_control_node. In this specific case, the thread blocks at the following command:
success = client_application_->step();

Reason:
The robot_control_node is activated before the starting of FRI, so the loop of the client app starts, but FRI is not started, therefore the step() function blocks forever, the loop condition is not tested again.

Possible solutions:

  • change the order of activation?
  • add synchronization method to force client application thread to wait for successful starting of FRI

[BUG] - "No kinematics plugins defined. Fill and load kinematics.yaml!" MoveIt planning keeps failing.

Description

Hi @Svastits,

I'm currently using kuka_drivers/iiqka_moveit_example/moveit_planning_example.launch.py with use_fake_hardware:=true.

I'm able to launch successfully, see the robot with the tf frames after I do configure and activate and plan and execute motions within moveit2-rviz.

The problem begins when I start trying to programmatically plan motions. Every time I run my node, I see this warning:

[WARN] [1716557929.990758924] [moveit_ros.robot_model_loader]: No kinematics plugins defined. Fill and load kinematics.yaml!

and eventually, it just times out and fails to plan:

[ERROR] [1716559618.572070969] [move_group_interface]: MoveGroupInterface::plan() failed or timeout reached
[ERROR] [1716559618.572111417] [first_test]: Planning failed!

I have tried many different poses and tried giving it more time to plan, etc. This is what my code looks like:

int main(int argc, char *argv[]) {
    // Initialize ROS and create the Node
    rclcpp::init(argc, argv);
    auto const node = std::make_shared<rclcpp::Node>(
        "first_test",
        rclcpp::NodeOptions().automatically_declare_parameters_from_overrides(
            true));
    // We spin up a SingleThreadedExecutor for the current state monitor to get information
    // about the robot's state.
    rclcpp::executors::SingleThreadedExecutor executor;
    executor.add_node(node);
    std::thread([&executor]() { executor.spin(); }).detach();

    // Create a ROS logger
    auto const logger = rclcpp::get_logger("first_test");

    static const std::string PLANNING_GROUP = "manipulator";

    // Create the MoveIt MoveGroup Interface
    using moveit::planning_interface::MoveGroupInterface;
    auto move_group = MoveGroupInterface(node, PLANNING_GROUP);
 
    // Create planning request using RRTConnectkConfigDefault motion planner
    move_group.setPlanningPipelineId("ompl");
    move_group.setPlannerId("RRTConnectkConfigDefault");
    std::copy(move_group.getJointModelGroupNames().begin(), move_group.getJointModelGroupNames().end(),
            std::ostream_iterator<std::string>(std::cout, ", "));
    moveit::core::RobotState start_state(*move_group.getCurrentState());
    // Set a target Pose
    // 0.387434 -0.022426 0.320466 0.038751 0.996789 -0.019382 0.067334
    auto const target_pose = [] {
        geometry_msgs::msg::Pose msg;
        msg.orientation.x = 0.38751;
        msg.orientation.y = 0.996789;
        msg.orientation.z = -0.019382;
        msg.orientation.w = 0.067334;
        msg.position.x = 0.3874;
        msg.position.y = -0.022426;
        msg.position.z = 0.3205;
        return msg;
    }();

    move_group.setStartState(start_state);
    move_group.setPoseTarget(target_pose);
    move_group.setPlanningTime(20.0);
    // Create a plan to that target pose
    auto const [success, plan] = [&move_group] {
        moveit::planning_interface::MoveGroupInterface::Plan msg;
        auto const ok = static_cast<bool>(move_group.plan(msg));
        return std::make_pair(ok, msg);
    }();

    // Execute the plan
    if (success) {
        move_group.execute(plan);
    } else {
        RCLCPP_ERROR(logger, "Planning failed!");
    }

    // print current pose
    geometry_msgs::msg::Pose current_pose = move_group.getCurrentPose().pose;

    // Print the current pose of the end effector
    RCLCPP_INFO(node->get_logger(), "Current pose: %f %f %f %f %f %f %f",
        current_pose.position.x,
        current_pose.position.y,
        current_pose.position.z,
        current_pose.orientation.x,
        current_pose.orientation.y,
        current_pose.orientation.z,
        current_pose.orientation.w);

    // Shutdown ROS
    rclcpp::shutdown();
    return 0;
}

As you can see, it is quite simple and straightforward. I see that the kinematics.yaml is present here and being loaded into rosparam here. However, when I do:

ros2 param get /move_group manipulator.kinematics_solver

It is empty, while:

ros2 param get /move_group robot_description_kinematics.manipulator.kinematics_solver

Shows the correct KDL kinematics solver. Shouldn't the /move_group manipulator.kinematics_solver also be loaded correctly?

Am I missing something? Please help! Thanks.

KUKA robot OS

iiQKA

KUKA robot OS version

iiQKA.OS 1.2

KUKA external interface version

1.0.3

Affected robot model(s)

lbr iisy 3 r760

Version or commit hash of the driver

No response

Setup

N/A.

Reproduction steps

N/A.

Logs

No response

Remove duplications from drivers

  • The control nodes for the 3 driver (identical) should be moved to the kroshu_ros2_core
  • The common parts in the robot manager nodes should be somehow combined (e.g. move hw_if state changers to common / create base class with the common tasks )

Refactor changes on rox driver

  • Torque states handling
  • scheduler setup move to robot control node
  • Hardware interface write function: changes to make it more cleen
  • After failed activation the robot manager node should set to configured state not unconfigured
  • #65

Add joint impedance support for FRI

The hardware IF currently does not have stiffness and damping interfaces.
The manager node's control mode and command mode parameters could also be combined

[help wanted] KUKA KMR iiwa

The autonomous KMR iiwa robot is HRC-capable and mobile. It combines the strengths of the sensitive LBR iiwa lightweight robot with those of a mobile, autonomous platform.

I'm wondering if it's possible to add support for the KMR iiwa omnimove LBR iiwa 14 R820.

Thanks so much.

Active Controller handler class

create a class that handles active controllers, at control mode change tells witch controller need to be activated and deactivated.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.