doosan-robotics / doosan-robot

ROS for Doosan Robot
BSD 3-Clause "New" or "Revised" License
127 stars 63 forks source link

Documentation or examples using RT API capabilities in ROS #130

Open tf-maam opened 1 year ago

tf-maam commented 1 year ago

Could you please provide some documentation, e.g., in the README.md or a working example of using the RT interface with ROS services and topics? It took us quite some time and reverse engineering using the example from the API package to establish a connection through the interface and move the robot.

We can also share our code on setting up the interface and executing a simple trajectory when issues #126, #127, #128, and #129 are fixed.

doosan-robotics commented 1 year ago

@tf-maam We recognize that ROS examples for real-time control are very unfriendly. We are focusing on the maintenance of the ROS2 package first, and then we will increase the usability of real-time control on ROS. We try to respond as quickly as possible.

Jonathan-SYC commented 1 year ago

Hi @tf-maam, I'm trying to achieve RT motion with a Doosan M1013 arm. I tried to used your code (Python script) from the issue #129 but I can't get the robot to moves. The code stop at the line 148 res = connect_rt_control(ip_address, port) and doesn't continue.

Would you mind sharing how you were able to move the robot in real time?

tf-maam commented 1 year ago

@Jonathan-SYC Sorry for my late reply; I did not check my Github notifications regularly.

It seems that your connection cannot be established. The IP address must be set to the same IP address configured in your robot controller's settings. We found out that it is beneficial for the stability of the real-time connection to connect the robot controller directly to the network card on your PC instead of using a router in between. The port number must be set to 12347.

Nevertheless, we switched to using the ROS services and topics to access the Doosan RT. interface. The sequence of the commands is the same, and the desired values are published to the topics /doosan_manipulatorm1509/servoj_rt_stream or /doosan_manipulatorm1509/speedj_rt_stream. We also improved the stability of the real-time connection by using a Linux kernel with the RT_PREEMPT patch and setting the priority of the dsr_control node to the maximum with a FIFO scheduling policy

sudo chrt -a -p 98 -f $(pgrep dsr_control)
maomaowang-123 commented 9 months ago

Hi @tf-maam , We are testing the function speedj_rtand I would like to ask if you have configured the xenomai kernel because we successfully send data to the speedj_rtfunction but the doosan robot doesn't move, and I'm thinking if it's due to the lack of a real time kernel. Hope to get your reply!

tf-maam commented 9 months ago

No, we did not use the xenomai kernel. As stated above, we used a Linux kernel with the RT_PREEMPT patch. One other possible issue might be the quality of the network hardware. We used a Intel I350-T4V2 Ethernet Server Adapter (I350T4V2BLK) and at least Cat 5e Ethernet cables. Make sure that you connect and start the RT control by calling the corresponding ROS services. You might also have to set appropriate limits for the Cartesian and joint velocities and accelerations using the ROS services. Good luck!