Robotica - Posicionamiento RB-VOGUI de Robotnik

<<>>
 
Vista:

Posicionamiento RB-VOGUI de Robotnik

Publicado por Sacar datos de coordenadas del RB-VOGUI de Robotnik (1 intervención) el 20/07/2023 14:14:25
Hola me llamo Jorge,

He utilizado el robot RB-VOGUI de Robotnik para dar una vuelta y quiero sacar una gráfica de las coordenadas de su trayectoria en XY. El robot no proporciona directamente sus coordenadas, sino que da las transformadas entre sus sistemas de referencia. Conozco el punto de inicio del robot con respecto a una referencia del terreno.

Lo que he hecho ha sido generar en Matlab las matrices de transformación para pasar del sistema footprint a odom (A_foot_odom) y de odom a map (A_odom_map). Para después multiplicar por el vector de coordenadas iniciales (Xo).

Así es como genero las matrices:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
quat_foot_odom=[tf_foot_odom.orientation.x(i) tf_foot_odom.orientation.y(i) tf_foot_odom.orientation.z(i)
    tf_foot_odom.orientation.w(i)];
    foot_odom_euler = quat2eul(quat_foot_odom,'XYZ');
    rx_foot_odom=rotx(foot_odom_euler(1));
    ry_foot_odom=roty(foot_odom_euler(2));
    rz_foot_odom=rotz(foot_odom_euler(3));
 
    quat_odom_map=[tf_odom_map.orientation.x(i) tf_odom_map.orientation.y(i) tf_odom_map.orientation.z(i)
    tf_odom_map.orientation.w(i)];
    odom_map_euler = quat2eul(quat_odom_map,'XYZ');
    rx_odom_map=rotx(odom_map_euler(1));
    ry_odom_map=roty(odom_map_euler(2));
    rz_odom_map=rotz(odom_map_euler(3));
 
    R_foot_odom = rx_foot_odom*ry_foot_odom*rz_foot_odom;
    d_foot_odom = [tf_foot_odom.position.x(i); tf_foot_odom.position.y(i); tf_foot_odom.position.z(i)];
    A_foot_odom = [R_foot_odom d_foot_odom;
                   0 0 0 1];
    R_odom_map = rx_odom_map*ry_odom_map*rz_odom_map;
    d_odom_map = [tf_odom_map.position.x(i); tf_odom_map.position.y(i); tf_odom_map.position.z(i)];
    A_odom_map = [R_odom_map d_odom_map;
                   0 0 0 1];

Y este el cálculo de las coordenadas transformadas, teniendo en cuenta que las coordenadas en X e Y son las 2 primeras columnas de explorer_final_Xo:
1
2
Xo = [4.39; 0.435; 0; 1];
    explorer_final_Xo(i,1:4) = (A_foot_odom*A_odom_map*Xo)';

Por otro lado, el fichero csv que obtengo me da valores de traslaciones multiplicadas por 10^16, lo cual no comprendo.

Si alguno ha trabajado ya con este robot y sabe qué transformaciones hay que realizar o si alguno ve un error en el código, os agradecería mucho vuestra ayuda.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder