Open eladpar opened 4 weeks ago
This seems like there's something wrong with the controller configuration passed to the controller manager. The joint_state_broadcaster
's type cannot be deduced. This could result from an illegal config file or from the config file not being properly forwarded to the controller manager.
Note: I would recommend using one controller manager for both robots. This way, you would only have to provide one description containing both arms and then start the control node as usual. This would require one common controller file containing all controllers for both arms. I haven't tried this myself, yet, though.
We are currently working on a dual-arm setup tutorial, but this will be targeting rolling/jazzy. Most of that should be backportable to humble, though.
@eladpar Let me know if you still need help. We have an running dual-arm setup for more than a year now. So it is definitely possible. But there are quite a few things you have to take care of.
As @fmauch said I would recommend to use a single controller manager. But then you need to make sure that you set non_blocking_read: true
and you need to use the default ros2 control controller manager:
from my launch.py
Node(
package="controller_manager",
executable="ros2_control_node",
parameters=[robot_description_parameter, controller_config_file],
Other than that I would recommend you to write your own minimal launch file that just starts the controller manager at the beginning. If that works you can continue!
Thank you guys I will keep track with the tutorial in the making..
I managed fixing the controllers errors seems to happen because I didn't address in the controller yaml the namespace of each arm.
Now when activating the remote control in them arm I get
Received 16 bytes on script command interface. Expecting 4 bytes, so ignoring this message
Did you make sure to set different ports for both arms ?
These are the reverse ports (on your PC) that are used for the communication afterwards. You need to make sure that for both arms you use different ports.
reverse_port: 50001 script_sender_port: 50002 trajectory_port: 50004 script_command_port: 50005
Did you make sure to set different ports for both arms ?
These are the reverse ports (on your PC) that are used for the communication afterwards. You need to make sure that for both arms you use different ports.
reverse_port: 50001 script_sender_port: 50002 trajectory_port: 50004 script_command_port: 50005
yes you can see at my first file (launch file ) dual.launch.py that each arm gets different ports
It is way easier and less error prone to build your own urdf with both arms. There you make sure to use the correct parameters and instantiate the controller manager with that urdf.
What you are trying to do reminds me of my first try. There I had the issue that it looked fine with mocked hardware but it did not properly propagate the parameter to the correct instance in the urdf.
Just as a reminder: ros2control takes the parameter from the urdf. What we do in the example launch script is passing all arm parameters as xacro args. But they are not unique for both arms as far as I can remember
Affected ROS2 Driver version(s)
2.2.10
Used ROS distribution.
Humble
Which combination of platform is the ROS driver running on.
Ubuntu Linux with standard kernel
How is the UR ROS2 Driver installed.
Build both the ROS driver and UR Client Library from source
Which robot platform is the driver connected to.
UR E-series robot
Robot SW / URSim version(s)
5.16
How is the ROS driver used.
Through the robot teach pendant using External Control URCap
Issue details
Summary
Hey, iv'e been trying to make 2 UR arms work together on moveit2 and ros2. I tried doing similar to this: https://github.com/catmulti7/dual_ur_ros_2 but I guess Im using a newer driver than that project.. im trying to load both ur arms but I get failed to load controllers
this is my launch file: dual.launch.py:
and this launchs a modified ur_control.launch.py called ur_control_dual.launch.py
any ideas?
Relevant log output
Accept Public visibility