{"date":"2026-10-03","basic_contact":{"description":"Fresh bounded 2-D DER implicit-Euler/Newton simulation with node-wise PI soft contact; original solver, recorded states only. No AI-generated imagery.","ai_generated":false,"source_file":"/home/xinlei/Data/SoftRobot/src/softrobot/contact/dynamic_pi_2d.py","source_sha256":"9a1413950c10c4d458ac562752f14fbd6f4613680bfb2fa63daa788765e55230","source_git_commit":"b4a30ad963d22804168410c258048356ad3618f0","command":["/home/xinlei/Data/robotics_ws/miniconda3/envs/pendulum-rl/bin/python","/home/xinlei/Data/SoftRobot/src/softrobot/contact/dynamic_pi_2d.py","--total-time","0.12","--no-show","--output-prefix","/tmp/guidewire-contact-20261003/contact-result"],"environment":{"python":"3.10.20 (main, Mar 11 2026, 17:46:40) [GCC 14.3.0]","numpy":"2.2.6","torch":"2.11.0+cu130","device":"cpu","dtype":"float64","OPENBLAS_NUM_THREADS":"1","OMP_NUM_THREADS":"1"},"parameters":{"total_length":1.0,"diameter":0.001,"density":7850.0,"num_nodes":30,"EA":150000.0,"EI":0.01,"dt":0.001,"relax_dt":0.01,"min_dt":0.00025,"contact_clear_hold_time":0.05,"total_time":0.12,"damping":0.003,"pulse_force":0.01,"pulse_duration":0.01,"pulse_node":null,"tip_velocity":-0.2,"wall_half_gap":0.005,"safe_distance":0.002,"Kp":400.0,"Ki":200.0,"max_pi_force":10.0,"integral_leak_rate":5.0,"max_newton_iters":40,"residual_tol":1e-7,"step_tol":1e-10,"settle_speed_tol":1e-7,"settle_residual_tol":1e-9,"settle_hold_time":0.1,"disable_auto_stop":false,"output_prefix":"/tmp/guidewire-contact-20261003/contact-result","animation_stride":1,"animation_fps":8.0,"skip_animation":false,"show":false,"smoke_test":false,"output_dir":"."},"checks":{"finite_positions":true,"finite_velocities":true,"all_newton_converged":true,"max_newton_residual_N":1.070609375736715e-5,"contact_observed":true,"max_wall_penetration_m":0.0,"peak_pi_force_N":0.5463845815222099,"contact_event_time_s":0.013000000000000001,"recorded_frames":114,"final_time_s":0.12,"peak_force_frame":15,"peak_force_time_s":0.014000000000000002},"newton_acceptance_note":"The solver marks convergence for residual below tolerance OR Newton step norm below 1e-10 m. Some accepted residuals exceed the nominal 1e-7 N residual tolerance; consult recorded maximum.","success_criteria":"Finite states, all recorded Newton steps converged, nonzero PI protection-layer contact. This is a short transient demo, not a convergence or accuracy study.","plot_dimensions_px":[1400,780],"video":{"dimensions_px":[1400,780],"fps":12,"frame_count":114,"duration_s":9.5,"timing":"Recorded states played sequentially at 12 fps, not real-time."},"artifacts":{"contact-result.npz":{"sha256":"f4ba60baf78e2f3920b87bea76e0dc67df2abd782a72091ff345401b313f5982","bytes":110372},"contact-pi-shape.png":{"sha256":"a7f128ee2f1862b924b1ae330a36708296b8b345c88a652caedfd4f5deb74211","bytes":101112},"generate_contact_media.py":{"sha256":"ac0d66a5df4340404219036dc57c47228422548107315e85200feaa4ae16e0ca","bytes":7254},"contact-pi-process.mp4":{"sha256":"d4a4a5070a36241a0d9d2aeedc3f66fb3f8821ba8fd29045136a9856de680d25","bytes":828259}},"render_provenance":{"mode":"bundled-result-replay","simulation_rerun":false,"command":["/home/xinlei/Data/robotics_ws/miniconda3/envs/pendulum-rl/bin/python","/tmp/contact-replay-check/generate_contact_media.py","--reuse-result","--source","/nonexistent","--ffmpeg","/home/xinlei/Data/robotics_ws/miniconda3/envs/lerobot/bin/ffmpeg"],"generator_sha256":"ac0d66a5df4340404219036dc57c47228422548107315e85200feaa4ae16e0ca","input_npz_sha256":"f4ba60baf78e2f3920b87bea76e0dc67df2abd782a72091ff345401b313f5982","environment":{"python":"3.10.20 (main, Mar 11 2026, 17:46:40) [GCC 14.3.0]","numpy":"2.2.6","matplotlib":"3.10.9","ffmpeg":"/home/xinlei/Data/robotics_ws/miniconda3/envs/lerobot/bin/ffmpeg"},"checks_recomputed_from_npz":{"finite_positions":true,"finite_velocities":true,"all_newton_converged":true,"max_newton_residual_N":1.070609375736715e-5,"contact_observed":true,"max_wall_penetration_m":0.0,"peak_pi_force_N":0.5463845815222099,"contact_event_time_s":0.013000000000000001,"recorded_frames":114,"final_time_s":0.12,"peak_force_frame":15,"peak_force_time_s":0.014000000000000002}}},"video_conversions":[{"source":"straight-contact-process.gif","source_sha256":"e9aad7985b13d7b913a73f957748a8ec932055a9313c60c1295e2db2c06326ae","source_frames":20,"video":"straight-contact-process.mp4","video_sha256":"31dd441865d99fd8edf85839ad44429fce2d46376e0f5ae2078a1ebf58fcc134","poster":"straight-contact-process-poster.webp","poster_sha256":"f06a020fecd347ea2ad3bab549b9e29d9b36c9862a129d19554b4722530e5496","poster_frame":19,"command":["/home/xinlei/Data/robotics_ws/miniconda3/envs/lerobot/bin/ffmpeg","-hide_banner","-loglevel","error","-y","-ignore_loop","1","-i","/home/xinlei/Data/Xinlei143.github.io/assets/img/projects/soft-robot/straight-contact-process.gif","-vf","pad=ceil(iw/2)*2:ceil(ih/2)*2","-fps_mode","vfr","-c:v","libx264","-crf","18","-pix_fmt","yuv420p","-movflags","+faststart","/tmp/guidewire-media-20261003/straight-contact-process.mp4"],"note":"One GIF cycle, original presentation order and variable frame timing; poster is final source frame."},{"source":"curved-paired-process.gif","source_sha256":"b6f2c93fb436c35745c514e862e8a242ed05ed8dbff8f835214ffe1f34c57e80","source_frames":20,"video":"curved-paired-process.mp4","video_sha256":"1273b8461b8ad4c6d3fcaa98e115f722cda557815291050ffcdcbace1b50553d","poster":"curved-paired-process-poster.webp","poster_sha256":"b7c714b7b4ee3d7c790926102adf9d89c8a9afec88112fe916b206c9bd3f39bf","poster_frame":19,"command":["/home/xinlei/Data/robotics_ws/miniconda3/envs/lerobot/bin/ffmpeg","-hide_banner","-loglevel","error","-y","-ignore_loop","1","-i","/home/xinlei/Data/Xinlei143.github.io/assets/img/projects/soft-robot/curved-paired-process.gif","-vf","pad=ceil(iw/2)*2:ceil(ih/2)*2","-fps_mode","vfr","-c:v","libx264","-crf","18","-pix_fmt","yuv420p","-movflags","+faststart","/tmp/guidewire-media-20261003/curved-paired-process.mp4"],"note":"One GIF cycle, original presentation order and variable frame timing; poster is final source frame."},{"source":"free_insert_pair.gif","source_sha256":"32c903e7bc3144cc0283634be1424dafe9f8b90f09c6ec8114790249ba2fe402","source_frames":41,"video":"free_insert_pair.mp4","video_sha256":"ab7f1bf15d659f6b1aba5c5db878c1b62a96814cc4d08e629e4a334e5a7d85bb","poster":"free_insert_pair-poster.webp","poster_sha256":"60b4d74f55ee5192e575392238d54d32a09ebfe44d44593adc0a9c2df7ae22c4","poster_frame":40,"command":["/home/xinlei/Data/robotics_ws/miniconda3/envs/lerobot/bin/ffmpeg","-hide_banner","-loglevel","error","-y","-ignore_loop","1","-i","/home/xinlei/Data/Xinlei143.github.io/assets/img/projects/soft-robot/free_insert_pair.gif","-vf","pad=ceil(iw/2)*2:ceil(ih/2)*2","-fps_mode","vfr","-c:v","libx264","-crf","18","-pix_fmt","yuv420p","-movflags","+faststart","/tmp/guidewire-media-20261003/free_insert_pair.mp4"],"note":"One GIF cycle, original presentation order and variable frame timing; poster is final source frame."}],"reproduction_package":"/assets/data/guidewire-contact-reproduction-2026-10-03.zip","original_evidence_index":"/assets/data/guidewire-evidence-2026-09-29.json","artifacts":{"assets/img/projects/soft-robot/basic-pi-contact.png":{"sha256":"a7f128ee2f1862b924b1ae330a36708296b8b345c88a652caedfd4f5deb74211","bytes":101112},"assets/img/projects/soft-robot/basic-pi-contact.mp4":{"sha256":"d4a4a5070a36241a0d9d2aeedc3f66fb3f8821ba8fd29045136a9856de680d25","bytes":828259},"assets/data/guidewire-contact-reproduction-2026-10-03.zip":{"sha256":"db434a7960278cd761ea7f3dfffa65fef7ce4fccfdc336176f7c15f74e0d34e7","bytes":116117},"assets/img/projects/soft-robot/straight-contact-process-poster.webp":{"sha256":"f06a020fecd347ea2ad3bab549b9e29d9b36c9862a129d19554b4722530e5496","bytes":39828},"assets/img/projects/soft-robot/straight-contact-process.mp4":{"sha256":"31dd441865d99fd8edf85839ad44429fce2d46376e0f5ae2078a1ebf58fcc134","bytes":173349},"assets/img/projects/soft-robot/curved-paired-process-poster.webp":{"sha256":"b7c714b7b4ee3d7c790926102adf9d89c8a9afec88112fe916b206c9bd3f39bf","bytes":15706},"assets/img/projects/soft-robot/curved-paired-process.mp4":{"sha256":"1273b8461b8ad4c6d3fcaa98e115f722cda557815291050ffcdcbace1b50553d","bytes":51287},"assets/img/projects/soft-robot/free_insert_pair-poster.webp":{"sha256":"60b4d74f55ee5192e575392238d54d32a09ebfe44d44593adc0a9c2df7ae22c4","bytes":37752},"assets/img/projects/soft-robot/free_insert_pair.mp4":{"sha256":"ab7f1bf15d659f6b1aba5c5db878c1b62a96814cc4d08e629e4a334e5a7d85bb","bytes":129536},"assets/img/projects/soft-robot/basic-pi-contact.gif":{"sha256":"cdff0013560d8962f594e472f78e39da3074db78c03694139f8dd208c6a74b5d","bytes":2250323}},"gif_presentation":{"date":"2026-10-03","basic_contact":{"source":"assets/img/projects/soft-robot/basic-pi-contact.mp4","output":"assets/img/projects/soft-robot/basic-pi-contact.gif","conversion":"ffmpeg -i basic-pi-contact.mp4 -filter_complex \"[0:v]split[a][b];[a]palettegen=stats_mode=diff[p];[b][p]paletteuse=dither=sierra2_4a\" -loop 0 basic-pi-contact.gif","note":"All 114 source frames in original order. GIF timing is quantized to centiseconds; no new simulation."},"reused_original_gifs":["straight-contact-process.gif","curved-paired-process.gif","free_insert_pair.gif"],"original_gif_hashes":"/assets/data/guidewire-evidence-2026-09-29.json"}}