code wiki / (root) / nx_gait_contact_gate_t139.nx

nx_gait_contact_gate_t139.nx source

↩ module page · 106 lines · 4831 B

1// nx_gait_contact_gate_t139.nx -- Validates and initializes gait contact data for a robotic system using SHA-256 and NXA format. 2import "nx_syscalls.nx" 3import "nx_nxa.nx" 4import "nx_sha256.nx" 5import "nx_gate_verdict.nx" 6import "nx_nxa_anim_gait_candidate_t139.nx" 7func main(argc:i64,argv:*i64)->i64 { 8 let ctr:*i64=gv_ctr() 9 if argc<2 {return 2} 10 let path:*u8=argv[1] as *u8 11 let fd:i64=sys_openat_rd(path) 12 if fd<0 {return 3} 13 let bytes:i64=12449344 14 let b:*u8=sys_mmap(bytes) 15 var off:i64=0 16 while off<bytes {let n:i64=sys_read(fd,((b as i64)+off) as *u8,bytes-off);if n<=0 {sys_close(fd);return 4};off=off+n} 17 sys_close(fd) 18 let digest:*u8=sys_mmap(32) 19 sha256_digest(b,bytes,digest) 20 var mismatch:i64=0 21 if digest[0] != 49 as u8 {mismatch=mismatch+1} 22 if digest[1] != 119 as u8 {mismatch=mismatch+1} 23 if digest[2] != 129 as u8 {mismatch=mismatch+1} 24 if digest[3] != 52 as u8 {mismatch=mismatch+1} 25 if digest[4] != 181 as u8 {mismatch=mismatch+1} 26 if digest[5] != 22 as u8 {mismatch=mismatch+1} 27 if digest[6] != 114 as u8 {mismatch=mismatch+1} 28 if digest[7] != 88 as u8 {mismatch=mismatch+1} 29 if digest[8] != 176 as u8 {mismatch=mismatch+1} 30 if digest[9] != 91 as u8 {mismatch=mismatch+1} 31 if digest[10] != 24 as u8 {mismatch=mismatch+1} 32 if digest[11] != 174 as u8 {mismatch=mismatch+1} 33 if digest[12] != 154 as u8 {mismatch=mismatch+1} 34 if digest[13] != 224 as u8 {mismatch=mismatch+1} 35 if digest[14] != 98 as u8 {mismatch=mismatch+1} 36 if digest[15] != 192 as u8 {mismatch=mismatch+1} 37 if digest[16] != 115 as u8 {mismatch=mismatch+1} 38 if digest[17] != 253 as u8 {mismatch=mismatch+1} 39 if digest[18] != 3 as u8 {mismatch=mismatch+1} 40 if digest[19] != 251 as u8 {mismatch=mismatch+1} 41 if digest[20] != 63 as u8 {mismatch=mismatch+1} 42 if digest[21] != 70 as u8 {mismatch=mismatch+1} 43 if digest[22] != 210 as u8 {mismatch=mismatch+1} 44 if digest[23] != 18 as u8 {mismatch=mismatch+1} 45 if digest[24] != 227 as u8 {mismatch=mismatch+1} 46 if digest[25] != 81 as u8 {mismatch=mismatch+1} 47 if digest[26] != 45 as u8 {mismatch=mismatch+1} 48 if digest[27] != 40 as u8 {mismatch=mismatch+1} 49 if digest[28] != 102 as u8 {mismatch=mismatch+1} 50 if digest[29] != 12 as u8 {mismatch=mismatch+1} 51 if digest[30] != 79 as u8 {mismatch=mismatch+1} 52 if digest[31] != 237 as u8 {mismatch=mismatch+1} 53 gv_check_eq("exact served asset SHA256",mismatch,0,ctr) 54 if mismatch!=0 {return 5} 55 let w:*i64=b as *i64 56 let so:i64=nxa_counted_section(b,bytes,nxa_tag4("SKEL" as *u8),NA_SKEL_W) 57 let ae:i64=nxa_section_entry(b,bytes,nxa_tag4("ANIM" as *u8)) 58 if so<0||ae<0 {return 6} 59 let nj:i64=w[so] 60 let skel:*i64=((b as i64)+(so+1)*8) as *i64 61 let anim:*i64=((b as i64)+w[ae+1]) as *i64 62 let idx:*i64=sys_mmap(nj*NA_IDX_W*8) as *i64 63 let order:*i64=sys_mmap(nj*8) as *i64 64 let scr:*i64=sys_mmap(NA_SCR_W*8) as *i64 65 let rv:*i64=sys_mmap(NA_RV_W*8) as *i64 66 let feet:*i64=sys_mmap(NA_GAIT_INPUT_W*8) as *i64 67 feet[0]=8 68 feet[1]=7682 69 feet[2]=2438 70 feet[3]=9129 71 feet[4]=4711 72 feet[5]=0-10330 73 feet[6]=1478 74 feet[7]=0-1027 75 feet[8]=3965 76 feet[9]=24 77 feet[10]=0-7684 78 feet[11]=2361 79 feet[12]=9099 80 feet[13]=0-4707 81 feet[14]=0-10441 82 feet[15]=1474 83 feet[16]=0-1073 84 feet[17]=3953 85 let header:*i64=sys_mmap(NA_GAIT_HEADER_W*8) as *i64 86 let cap:i64=w[ae+2]/NA_CH2_KEY_W 87 let table:*i64=sys_mmap(cap*NA_GAIT_ROW_W*8) as *i64 88 let duration:i64=na_index(anim,w[ae+2],nj,idx) 89 na_index_order(anim,idx,nj,order) 90 na_fit_root(anim,idx,na_root_joint(skel,nj),rv,scr) 91 let rc:i64=na_gait_fit(anim,idx,order,skel,nj,rv,feet,header,table,cap,scr) 92 gv_check_eq("actual in-place contact calibration",rc,0,ctr) 93 gv_check_eq("actual clip duration",duration,17919,ctr) 94 gv_check_eq("calibration retains all left keys",header[0],544,ctr) 95 if rc!=0 {return 7} 96 var monotonic:i64=1;var i:i64=1 97 while i<header[0] {if table[i*NA_GAIT_ROW_W+1]<table[(i-1)*NA_GAIT_ROW_W+1] {monotonic=0};i=i+1} 98 gv_check_eq("contact distance monotonic",monotonic,1,ctr) 99 gv_check_eq("cycle wraps without whole-clip support assumption",na_gait_time(table,header[0],header[1]),na_gait_time(table,header[0],0),ctr) 100 gv_puts("GAIT samples=" as *u8);gv_num(header[0]);gv_puts(" model_distance=" as *u8);gv_num(header[1]);gv_puts(" transitions=" as *u8);gv_num(header[2]);gv_puts(" supported_intervals=" as *u8);gv_num(header[3]);gv_puts(" unknown_intervals=" as *u8);gv_num(header[4]);gv_puts(" duration_ms=" as *u8);gv_num(header[5]);gv_puts(" measured_mpb=" as *u8);gv_num(header[6]);gv_puts("\n" as *u8) 101 let count:i64=header[0];let total:i64=header[1] 102 feet[0]=0-1 103 gv_check_eq("invalid foot refuses calibration",na_gait_fit(anim,idx,order,skel,nj,rv,feet,header,table,cap,scr),0-81,ctr) 104 gv_check_eq("failed calibration clears validity",header[7],0,ctr) 105 return gv_verdict("GAIT-CONTACT-T139" as *u8,ctr,"real served in-place clip; sole-derived distance map; contact labels remain inferred" as *u8) 106}