@@ -50,13 +50,15 @@ class MultiController {
5050 this . controllers . forEach ( controller => controller . reset ( ) )
5151 }
5252 get_reference ( states ) {
53- console . assert ( this . controllers . length == states . length )
54- return this . controllers . map ( ( c ) => c . get_reference ( ) )
53+ // console.assert(this.controllers.length == states.length)
54+ // return this.controllers.map((c) => c.get_reference())
55+ return null
5556 }
5657}
5758
5859let model = null
5960let trajectory = null
61+ let trajectory_x_offset = 0
6062class Policy {
6163 constructor ( ) {
6264 this . step = 0
@@ -87,7 +89,7 @@ class Policy{
8789 if ( delay === 0 ) {
8890 return full_observation . slice ( 15 , 18 )
8991 } else {
90- const s = get_state ( )
92+ const s = get_state ( 0 )
9193 return s [ "angular_velocity_history" ] [ s [ "angular_velocity_history" ] . length - delay ]
9294 }
9395 case obs . startsWith ( "ActionHistory" ) :
@@ -109,12 +111,13 @@ class Policy{
109111 this . policy_states = states . map ( ( ) => null )
110112 }
111113 this . step += 1
114+ const references = this . get_reference ( states )
112115 return states . map ( ( state , i ) => {
113116 state . observe ( )
114117 const observation_description = document . getElementById ( "observations" ) . observation
115118 let input = math . matrix ( [ observation_description . split ( "." ) . map ( x => this . get_observation ( state , x ) ) . flat ( ) ] )
116- const input_offset = this . _get_reference ( )
117- input_offset . forEach ( ( x , i ) => {
119+ const reference = references [ i ]
120+ reference . forEach ( ( x , i ) => {
118121 input . _data [ 0 ] [ i ] = input . _data [ 0 ] [ i ] - x
119122 } )
120123 const [ output , new_state ] = model . evaluate_step ( input , this . policy_states [ i ] )
@@ -131,7 +134,11 @@ class Policy{
131134 }
132135 get_reference ( states ) {
133136 const ref = this . _get_reference ( )
134- return states . map ( ( ) => ref )
137+ return states . map ( ( _ , i ) => {
138+ const new_ref = ref . slice ( )
139+ new_ref [ 0 ] += trajectory_x_offset * i
140+ return new_ref
141+ } )
135142 }
136143}
137144
@@ -178,6 +185,13 @@ async function load_model(checkpoint) {
178185}
179186
180187async function main ( ) {
188+ const trajectory_x_offset_container = document . getElementById ( "reference-trajectory-offset-container" )
189+ const trajectory_x_offset_slider = trajectory_x_offset_container . querySelector ( "input[type=range]" )
190+ const trajectory_x_offset_label = trajectory_x_offset_container . querySelectorAll ( ".control-container-label" ) [ 1 ]
191+ trajectory_x_offset_slider . addEventListener ( "input" , ( event ) => {
192+ trajectory_x_offset = parseFloat ( event . target . value )
193+ trajectory_x_offset_label . textContent = trajectory_x_offset . toFixed ( 2 )
194+ } )
181195 const trajectory_select = document . getElementById ( "reference-trajectory" )
182196 const trajectories = { "Position" : Position , "Lissajous" : Lissajous , "Langevin" : SecondOrderLangevin }
183197 trajectory_select . innerHTML = ""
0 commit comments