Rhoban / placo

Rhoban Planning and Control
https://placo.readthedocs.io/
MIT License
48 stars 5 forks source link

kinematics problems dt #5

Closed kassasin closed 1 month ago

kassasin commented 1 month ago

I found some problems in kinematics_solver.cpp: https://github.com/Rhoban/placo/blob/4d8119a623ad73e4f3536b11cd72f706054810f5/src/placo/kinematics/kinematics_solver.cpp#L374 When dt is not zero,robot.state.q should be integrate with dt? But if I integrate robot.state.q with dt,robot tracking end effector is very slow . I try to modify position task's weight or orientation task's weight,I found no effect .

Gregwar commented 1 month ago

Hello,

The kinematics solver's décision variable is $\Delta q$ and not $\dot q$ The dt is thus not necessary for integration, since $\Delta q$ lives in the same space as a velocity (you can think of it as a velocity applied for an unit time)

dt is only used for some constraints, such as velocity limits

Keep in mind that this is not a planner but a controller, if you want a smooth trajectory, it is up to you to build it in task space

kassasin commented 1 month ago

@Gregwar thank you very much ,i understand .So here should be "// Retrieving Δq"? https://github.com/Rhoban/placo/blob/4d8119a623ad73e4f3536b11cd72f706054810f5/src/placo/kinematics/kinematics_solver.cpp#L361 . As I have methioned above ,I found there is no effect when i modify weight of position task and orientation task .And I can't found these parameters are used in other place,is it because these parameters are temporarily unavailable?

Gregwar commented 1 month ago

Maybe we can rename some variables to make it more explicit what is q dot and delta q indeed

If both the target position and orientation can be reached, the weight will have no effect, the weights only affect the trade-off happening when one task is not entirely feasible, maybe this is why you don't see the difference in your case?

kassasin commented 1 month ago

I can't find the relevant code to use these weights, can you point me to it?

Gregwar commented 1 month ago

The task weights are the arguments of relevant task.configure method

configure first argument is the task name, second argument is either soft or hard and the third argument is it's weight

For frame tasks, which actually are wrapper for position+orientation tasks, you can pass two different weight (this is equivalent to configuring separately the position and orientation)

kassasin commented 1 month ago

@Gregwar Thanks,I just get more deep into code .These parameters finally through this line: https://github.com/Rhoban/placo/blob/4d8119a623ad73e4f3536b11cd72f706054810f5/src/placo/kinematics/kinematics_solver.cpp#L338 and the problem will use slack variables to make effect .Am I right?

Gregwar commented 1 month ago

Slack variables are only needed for soft inequalities Soft equalities they will be turned into a term in the objective function

See https://placo.readthedocs.io/en/latest/kinematics/concepts.html

kassasin commented 1 month ago

Thank you very much, I understand totally .