1- import { vec3 , vec4 , mat4 , quat } from 'https://esm.sh/gl-matrix' ;
1+ import { vec3 , mat3 , vec4 , mat4 , quat } from 'https://esm.sh/gl-matrix' ;
22
33export default class Controller {
44 constructor ( ) { }
@@ -23,13 +23,11 @@ export default class Controller {
2323 const k_q = params [ 'dynamics' ] [ 'rotor_torque_constants' ] [ 0 ] ;
2424 const [ a , b , c ] = params [ 'dynamics' ] [ 'rotor_thrust_coefficients' ] [ 0 ] ;
2525
26- // Gains
2726 const k_p = 3.0 ;
2827 const k_d = 2.0 ;
2928 const k_R = 1.0 ;
3029 const k_omega = 0.1 ;
3130
32- // Desired states
3331 const p_des = vec3 . fromValues ( 0 , 0 , 0 ) ;
3432 const v_des = vec3 . fromValues ( 0 , 0 , 0 ) ;
3533 const q_des = quat . fromValues ( 0 , 0 , 0 , 1 ) ;
@@ -55,12 +53,24 @@ export default class Controller {
5553 const A_inv = mat4 . invert ( mat4 . create ( ) , A ) ;
5654
5755 const T = vec3 . dot ( F_des , vec3 . transformQuat ( vec3 . create ( ) , [ 0 , 0 , 1 ] , q ) ) ;
58- const tau = vec3 . add (
59- vec3 . create ( ) ,
60- vec3 . scale ( vec3 . create ( ) , omega , - k_omega ) ,
61- vec3 . scale ( vec3 . create ( ) , e_p , - k_R )
56+
57+ const R = mat3 . fromQuat ( mat3 . create ( ) , q ) ;
58+ const R_des = mat3 . fromQuat ( mat3 . create ( ) , q_des ) ;
59+
60+ const R_err = mat3 . create ( ) ;
61+ mat3 . multiply ( R_err , mat3 . transpose ( mat3 . create ( ) , R_des ) , R ) ;
62+ mat3 . subtract ( R_err , R_err , mat3 . multiply ( mat3 . create ( ) , mat3 . transpose ( mat3 . create ( ) , R ) , R_des ) ) ;
63+
64+ const e_R = vec3 . fromValues (
65+ R_err [ 5 ] , - R_err [ 2 ] , R_err [ 1 ]
6266 ) ;
6367
68+ const tau = vec3 . create ( ) ;
69+ vec3 . scale ( tau , e_R , - k_R ) ;
70+ const temp = vec3 . create ( ) ;
71+ vec3 . scale ( temp , omega , - k_omega ) ;
72+ vec3 . add ( tau , tau , temp ) ;
73+
6474 const controlInputs = vec4 . fromValues ( T , tau [ 0 ] , tau [ 1 ] , tau [ 2 ] ) ;
6575 const f = vec4 . transformMat4 ( vec4 . create ( ) , controlInputs , A_inv ) ;
6676
@@ -78,4 +88,3 @@ export default class Controller {
7888
7989 reset ( ) { }
8090}
81-
0 commit comments