spaceuma / ADE-Mobile_Manipulation

C++ code for European H2020 Project ADE
Other
1 stars 3 forks source link

Problemas con el modelo cinemático del manipulador #20

Closed carlibiri closed 4 years ago

carlibiri commented 4 years ago

@gonzalopd96 me envía captura de pantalla de los problemas del modelo cinemático y lo reportamos a Raúl y Florian.

carlibiri commented 4 years ago

Debemos pedirles la posibilidad de configurar codo arriba y codo abajo, y hombro derecho o izquierdo.

gonzalopd96 commented 4 years ago

Hola Carlos:

He estado dándole vueltas y efectivamente los giros extraños aparecen cuando el brazo pasa por una singularidad. Es el típico problema de representación de la orientación, cuando un coseno pasa de ser 1 a -1 y al hacer la arcotangente se dispara el ángulo bruscamente. Entiendo que utilizando el jacobiano no deberían tener demasiadas complicaciones para solucionarlo.

Te dejo aqui algunas capturas de pantalla donde se ve el giro extraño y las coordenadas que le comando al simulador. Básicamente, es un movimiento lineal sencillo en la dirección del eje Y, de 0'4 a 0'6 m, con el efector final apuntando al suelo. Esto mismo ocurre en más situaciones, pero esta es la una de las más representativas para lo que nosotros necesitamos.

La situación inicial:

start_config

La intermedia, con el brazo girado:

mid_config

La final, de nuevo con el brazo en una posición correcta pero con las articulaciones 4 y 6 en diferentes posiciones:

end_config

En cuanto a los otros giros extraños, ocurren con los cambios de codo, por lo que sería sencillo evitarlos con lo que hemos dicho esta mañana de poder configurar el codo nosotros. He estado investigando la API y la GUI y no he visto esa posibilidad en ningún lugar, así que sería genial si pudieran añadirlo.

Un saludo, Gonzalo

gonzalopd96 commented 4 years ago

Dejo aquí el gif donde se ve mejor el movimiento:

singularity_sherpa

carlibiri commented 4 years ago

Envío email y pongo en copia a @gonzalopd96

carlibiri commented 4 years ago

Vuelvo a recordar a Florian lo del modelo cinemático.

gonzalopd96 commented 4 years ago

Hola Carlos:

He estado mirando el uso de quaternios en el Siciliano y estoy convencido de que solucionaría el problema con la singularidad. Necesitamos entonces el modelo cinemático inverso con quaternios (que ya intentamos implementar el año pasado):

https://www.researchgate.net/publication/262391661_The_Unit_Quaternion_A_Useful_Tool_for_Inverse_Kinematics_of_Robot_Manipulators

Lo único malo de ese modelo es que es iterativo, con lo que los tiempos de computación no están acotados, incluso puede que nunca converja. Eso puede ser un problema si queremos utilizarlo para la planificación en línea, pero no si lo utilizamos para el movimiento de barrido, que va a ser preprogramado y además es en el que pueden aparecer las singularidades...

Lo vamos comentando.

Un saludo, Gonzalo

carlibiri commented 4 years ago

Quedamos en probarlo y ver si sería fácil de implementar.

En cualquier caso, te adelanto también que en el TFG de Juanma, usamos el Jacobiano realimentado con un controlador LQR, osea que nos vendría bien probarlo de cara a resolver este problema y de cara también a planificación cinemática.

El vie., 29 nov. 2019 a las 11:49, gonzalopd96 (notifications@github.com) escribió:

Hola Carlos:

He estado mirando el uso de quaternios en el Siciliano y estoy convencido de que solucionaría el problema con la singularidad. Necesitamos entonces el modelo cinemático inverso con quaternios (que ya intentamos implementar el año pasado):

https://www.researchgate.net/publication/262391661_The_Unit_Quaternion_A_Useful_Tool_for_Inverse_Kinematics_of_Robot_Manipulators

Lo único malo de ese modelo es que es iterativo, con lo que los tiempos de computación no están acotados, incluso puede que nunca converja. Eso puede ser un problema si queremos utilizarlo para la planificación en línea, pero no si lo utilizamos para el movimiento de barrido, que va a ser preprogramado y además es en el que pueden aparecer las singularidades...

Lo vamos comentando.

Un saludo, Gonzalo

— You are receiving this because you were assigned. Reply to this email directly, view it on GitHub https://github.com/spaceuma/ADE-Mobile_Manipulation/issues/20?email_source=notifications&email_token=ABYHWS7KTKF4O4Q6R73NM3LQWDXSBA5CNFSM4JP7JGB2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEFOROYQ#issuecomment-559748962, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABYHWS6MQVWMC77D5INHKH3QWDXSBANCNFSM4JP7JGBQ .

--


Carlos J. Pérez del Pulgar Mancebo Departamento de Ingeniería de Sistemas y Automática UNIVERSIDAD DE MALAGA www.isa.uma.es/cperez


gonzalopd96 commented 4 years ago

Hola Carlos:

He implementado el CLIK (closed loop inverse kinematics) en python y funciona de maravilla. He probado a comandarle al brazo la misma trayectoria que nos daba problemas anteriormente y ahora las variables articulares no tienen ningún cambio brusco, como se ve en la siguiente figura:

Screenshot from 2019-12-02 19-58-13

El tiempo de ejecución es además despreciable, de hecho solo necesita dos iteraciones para converger si la posición comandada está cercana a la anterior (que en nuestro caso debe ocurrir siempre).

Además, como lo he implementado en Python pasarlo a C++ va a ser muy sencillo (teniendo en cuenta que ya tengo los modelos directo e inverso en C++).

Un saludo

carlibiri commented 4 years ago

Estupendo!!

Me alegro mucho, me lo enseñas cuando nos veamos.

El lun., 2 dic. 2019 a las 20:06, gonzalopd96 (notifications@github.com) escribió:

Hola Carlos:

He implementado el CLIK (closed loop inverse kinematics) en python y funciona de maravilla. He probado a comandarle al brazo la misma trayectoria que nos daba problemas anteriormente y ahora las variables articulares no tienen ningún cambio brusco, como se ve en la siguiente figura:

[image: Screenshot from 2019-12-02 19-58-13] https://user-images.githubusercontent.com/37618448/69986974-c7a73080-153e-11ea-98b4-5aa77fa024aa.png

El tiempo de ejecución es además despreciable, de hecho solo necesita dos iteraciones para converger si la posición comandada está cercana a la anterior (que en nuestro caso debe ocurrir siempre).

Además, como lo he implementado en Python pasarlo a C++ va a ser muy sencillo (teniendo en cuenta que ya tengo los modelos directo e inverso en C++).

Un saludo

— You are receiving this because you were assigned. Reply to this email directly, view it on GitHub https://github.com/spaceuma/ADE-Mobile_Manipulation/issues/20?email_source=notifications&email_token=ABYHWS55RPYNVVEZMFGH3GTQWVMCRA5CNFSM4JP7JGB2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEFURRRY#issuecomment-560535751, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABYHWSY7JPQIGZWFYTBQCFLQWVMCRANCNFSM4JP7JGBQ .

--


Carlos J. Pérez del Pulgar Mancebo Departamento de Ingeniería de Sistemas y Automática UNIVERSIDAD DE MALAGA www.isa.uma.es/cperez