-
Notifications
You must be signed in to change notification settings - Fork 92
Physical robot movement stutters a lot. #89
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
@MrVolans Hello, could you please provide an update on what you were able to discover? We are seeing a similar shuttering in our case, and just like you, we are using the |
I forgot to send the response, sorry for the wait. Yes I tested out remapping the simulator to a dummy topic, this did nothing as far as i can see. Looking at the source code I figured the simulator is needed to dissect the trajectory into waypoints that the driver then executes. I did not manage to bypass the simulator. I found the stuttering might be related to Real Time performance of the device running MoveIt, and so tried compiling an RT kernel for my system. (For reference, could you provide some specs of the pc you're using?) This appears to provide minimal improvements, but compared to the desired smooth movement, this is a marginal difference and probably not the root cause. I suspect the control pc might need the same treatment, but without deeper insight into the routing on the control pc side I really can't say I am sure that this is the solution. This was part of my b.eng. thesis, so please do report any findings back, I would be very interested in some insight into a possible solution. |
@MrVolans thank you for providing more information. I tried to investigate the potential topic pollution by recording the sources of the messages from the following topics: My next best suggestion was about using Real-Time kernel, that's why I am glad that you shared your experience with that. Right now I have no access to the PC utilized in the testing scenario, but I will try to provide the specs later. At the same time, I am not 100% sure if I understood your steps: you've compiled RT kernel for your system, but what did you mean by "control PC" ? Do you mean you have a distributed ROS graph, where a low-end unit (Jetson Nano?) is running the driver node and high-end "control PC" is running MoveIt? |
By Control PC I am referring to the linux machine in the robot control box, which I checked the kernel on and its just a generic 14.04 kernel, I apologize for the confusion. |
Could you, please, also provide information on which ROS distro and which MoveIt version you are using? Have you also applied the "MoveIt update" from the |
I am running MoveIt: Version: 1.1.13-2focal.20230801.171807 Priority: optional Section: misc Maintainer: Dave Coleman [email protected] Installed-Size: 22.5 kB Depends: ros-noetic-moveit-commander, ros-noetic-moveit-core, ros-noetic-moveit-planners, ros-noetic-moveit-plugins, ros-noetic-moveit-ros, ros-noetic-moveit-setup-assistant` ROS: Version: 1.5.0-1focal.20230620.211638 Priority: optional Section: misc Maintainer: Mikael Arguedas [email protected] Installed-Size: 14.3 kB Depends: ros-noetic-angles, ros-noetic-common-tutorials, ros-noetic-geometry-tutorials, ros-noetic-joint-state-publisher-gui, ros-noetic-robot, ros-noetic-ros-tutorials, ros-noetic-roslint, ros-noetic-urdf-tutorial, ros-noetic-visualization-tutorials, ros-noetic-viz |
I am also having the same issue with just the aubo_driver and aubo_controller. The robot will stutter even at normal looking joint speeds. I thought the problem had to do with the rib_buffer_size_, which is used in aubo_driver.cpp. It seems like the robot stores a buffer of the joint commands sent through the command robotServiceSetRobotPosData2Canbus. I thought the stuttering had to do with the rib_buffer_size_ dropping to 0 while the robot was running a trajectory. However even after disabling the publishIOMsg thread and reducing the rate of the timerCallback, which seems to help keep the buffer size above 0, I still get stuttering though not as bad. I have been in contact with some people at Aubo about developing a ServoJ feature similar to that on the Universal Robot. They actually sent a demo ServoJ function that they were already working on but it suffers from the same issue where the TCP/Canbus connection is unreliable and can cause stuttering. I have been trying to work with them for months since around January, but they aren't very responsive and I still haven't been able to get into direct contact with one of their software engineers. I proposed a solution to them about implementing a version of ServoJ akin to that on the Universal Robot ROS Driver, where you essentially run servoj in a loop locally on the robot and then remotely update the target joint positions for it. This ensures that even with an inconsistent network that servoj can run continuously. See these links here for how it works: However, they haven't responded to me about this at all. The reason we need a reliable ServoJ function is because the ROS driver only supports joint trajectory control and it still stutters. With servoj, it can allow us to integrate aubo robot with ros_control, ros hardware interface, and all of the already-made ros controllers (joint trajectory control, force control, compliance control, twist control) I apologize for going on this tangent but I've been having a really hard time working with Aubo and wanted to share it with others about what I've found so far. |
@ian-chuang thanks for sharing. I agree with your points and share the same experience with AUBO communication. We sell their robots where I work, but still have a hard time getting response on emails. |
RT kernel was not an effective way for me in my case, and aubo_robot_simulator node will not pollute any topic actually, which not pub any msg on joint state topic and you can comment it. I have connect aubo many times, but no effective response to me |
I will provide additional information regarding my (unsuccessful) attempts to identify the root cause of stuttering. TL;DR;The most accurate assumption at this point is that the problem lies within the waypoint transformation calculation in the Detailed description of experiments:I have experimented with the following approaches:
Despite these tests, it remained unclear whether the issue might be concealed in how the AUBO driver processes the trajectory within its intricate pipelines. Here, I'll briefly describe my understanding of the internal organization of the driver and the relationships between nodes in the AUBO Driver:
Somewhere in this processing (over-)complexity, there may be a point causing the transformed MoveIt-generated trajectory to become invalid, resulting in stuttering (potentially due to race conditions or invalid computed accelerations/velocities). To isolate the influence of MoveIt path planning (which inherently involves randomness), I prepared a script script allowing the recording and replaying of the same Moveit-generated trajectory consistently. Using this script, I ran and recorded multiple executions of the same trajectory (ROS bags, and videos of robot movement from the Teach Pendant), analyzing joint variables, velocity, and acceleration data from the The graph also highlights another "issue" - the disparity between the data published by MoveIt and Apologies for the lengthy explanation, but I hope it proves helpful to someone on the "quest for the truth". If you require any data from the experiments I conducted, please let me know. |
@anion0278 Thank you for your work.I also found that the joint_path_command topic they posted was wrong.The correct order of the first three joint angles is 1, 2, 3, but the published order is 3, 1, 2.This has bothered me for a long time.Thank you. |
would you mind point out where code is wrong about your said ? |
Sorry,I didn't look at their code in detail.As @anion0278 said, this problem has been noticed in aubo_robot_simulator, so it does not affect the actual execution effect. If you are like me and just want to use the data published by the joint_path_command topic, just pay attention to changing the order.Thanks. |
@Joinjiang if you would like to find a precise location where this swap is occurring, try to investigate the joint order provided in Snippet from
Snippet from controller definition:
As you can see the order is swapped exactly as me and @Hunger-beat described. |
thank you for your kindly help! i have got it |
to my investigation, it seems that the joint name order in actionclient goal message is not corresponding to the order in the controller.yaml, so it has to remap order and it is not aubo package error! if someone has another ideas about solving this problem, please let me konw. |
i have got the exact reasons: follow_joint_trajectory/goal organizes the joint data in the alphabetical form. |
@Joinjiang however I think the swapped order is not the reason for the observed shuttering (because if it was, then the robot would completely go haywire and neither segment of the trajectory would have been executed properly). |
yes, may be use the velocity control better than position control in this package |
Running a robot movement using moveit commander over a direct ethernet connection produces highly jittery movement at any speed. Its naturally less perceptible at the stock speeds that moveit configured it to run at, but since I actually intend it to run an industrial application over ROS Just need it to run at normal operation speeds. Uncapping the joints_limits.yaml gave me the speed increase, but it revealed just how rough the robot runs.
Edit: The speculations below are likely totally unrelated and not the cause:
I suspect its not an actual issue with the driver nor the connection, but the fact that I am also running a simulator in the background which is polluting the joint_state feedback topic causing the trajectory execution to behave sporadically.

See the image below. I have two nodes publishing to the state topic:
This is due to this issue: #88
Since the documentation is rudimentary at best I can't say i haven't missed something, but if anybody has any idea what to do about it, please let me know.
The text was updated successfully, but these errors were encountered: