ghost command generated by ruckig
jessicaleu24 opened this issue · 7 comments
Hi,
I'm using ruckig to control a single joint.
However, I have observed that ruckig generates "ghost command" for other joints at the same time (theoretically, these joints should not move at all, since the input_parameter.current_position = input_parameter.target_position).
Any reason as to why?
Thank you!
Hey @jessicaleu24,
can you provide a complete example (e.g. the input parameters) for these "ghost commands"? I assume that all current and target velocities and accelerations are zero in your case?
HI
"I assume that all current and target velocities and accelerations are zero in your case?" -> correct
it is a 6 dof robot
with input_parameter.current_position = [0 0.5 0 0 0 0] and input_parameter.target_position = [0 0 0 0 0 0]
ruckig::Ruckig<max_arm_dof> otg{0.000001} (0.000001 second)
for some reason, the output command the first joint to quickly move to around 0.1 and comes back (so something like 0.0 ->0.1-> 0.0)
For me, these parameters
inp.current_position = [0, 0.5, 0, 0, 0, 0]
inp.target_position = [0] * 6
inp.max_velocity = [1000] * 6
inp.max_acceleration = [10000] * 6
inp.max_jerk = [10000] * 6
otg = Ruckig(inp.degrees_of_freedom, 0.000001)
or similar values result in a trajectory without any undesired motions.
Can you provide the exact input parameter (including the limits) or maybe even a standalone C++ or Python script?
hi, not sure how to reopen this ticket
here is one of the setup when the ghost command happens
J1 | J2 | J3 | J4 | J5 | J6 | vel_limit1 | vel_limit2 | vel_limit3 | vel_limit4 | vel_limit5 | vel_limit6 | acc_limit1 | acc_limit2 | acc_limit3 | acc_limit4 | acc_limit5 | acc_limit6 | jerk_limit1 | jerk_limit2 | jerk_limit3 | jerk_limit4 | jerk_limit5 | jerk_limit6 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0.2618 | 0 | 0 | 0 | 2.6704 | 4.71238898038 | 4.71238898038 | 4.71238898038 | 5.75958653158 | 7.330382849 | 20 | 500 | 500 | 500 | 500 | 500 | 20 | 1000 | 1000 | 1000 | 1000 | 1000 |
0 | 0 | -0.2618 | 0 | 0 | 0 | 2.6704 | 4.71238898038 | 4.71238898038 | 4.71238898038 | 5.75958653158 | 7.330382849 | 20 | 500 | 500 | 500 | 500 | 500 | 20 | 1000 | 1000 | 1000 | 1000 | 1000 |
(the ghost command did not show up when I lower the vel_limit
Unfortunately I still can't reproduce the issue with the given command.
Can you copy the exact output of print(input_parameter)
(Python) or std::cout << input_parameter.to_string() << std::endl;
(C++)? Or better even uploading a minimal working Python or C++ script that shows the ghost commands. Thanks!
here is the input when the ghost command happens (J3 moving -0.2618 -> 0.2618)
inp.current_position = [-2.817385524393703e-20, 0.03213189153211701, -0.224397151083723, 0, 0, 0, 0, 0, 0, 0]
inp.current_velocity = [-4.695642540656168e-19, 1.287437771650503, 1.847073487610664, 0, 0, 0, 0, 0, 0, 0]
inp.current_acceleration = [0, 14.72032560410805, 60.78975574464604, 0, 0, 0, 0, 0, 0, 0]
inp.target_position = [0, 0, 0.2618, 0, 0, 0, 0, 0, 0, 0]
inp.target_velocity = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
inp.target_acceleration = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
inp.max_velocity = [2.6704, 4.71238898038, 4.71238898038, 4.71238898038, 5.75958653158, 7.330382849, 1, 1, 1, 1]
inp.max_acceleration = [20, 500, 500, 500, 500, 500, 1, 1, 1, 1]
inp.max_jerk = [20, 1000, 1000, 1000, 1000, 1000, 1, 1, 1, 1]