From d09798e9da137bf7d5ca77034e6168d7ff11fdd9 Mon Sep 17 00:00:00 2001 From: schluis Date: Sun, 10 Mar 2024 18:26:24 +0100 Subject: [PATCH 01/16] use other kick_decision parameters for PenaltyShootout disable turn and side kicks during PenaltyShootout tune kick penalty_shootout_reached_thresholds fix behavior simulator refactoring allow explicit_auto_deref for code generation abbreviation use precision_pick_parameters also in other states fix kick-generation & behavior simulator decrease required accuracy added timeout to precison kick added SystemTime as an option Fix behavior simulator Co-authored-by: phillip kammradt fix order of time comparisons Co-authored-by: phillip kammradt muss noch bug fixen und lastfilteredgamecontrolerstatechange eingebaut fix rebase rebase die 2te fix kick variant enabling (#1181) * fix kick variant enabling * implement clippy hint rebase die 3te precicion_kick_position added Fix Penalized / Initial Pose & reduce stiffness (#1199) * revert default.json * adjust stiffnesses Deaf ref (#1192) * Make ref deaf and slightly blind Removes the ears from confidence filtering and demotes the eyes to the lower confidence treshold. Also adds a differentiation between the importance of the points in the twix pose detection overlay, based the confidence threshold of that point. * Reduce visual referee keypoint confidence thresholds Reduce `minimum_overall_keypoint_confidence` and `minimum_visual_referee_keypoint_confidence`. * Revert pose detection toggle hack * Address review comments Calib20240715 (#1209) * Calib 3 NAOs * Calib 7 NAOs * Move file location reintroduce check (#1207) Co-authored-by: okiwi6 Fix referee position overlay (#1228) Fix head joint stiffness (#1210) Co-authored-by: Julian Schuler add additional hysteresis_from_thresholds (#1172) * add additional hysteresis_from_thresholds * use easier to read logic Co-authored-by: Ole Felber <45100017+okiwi6@users.noreply.github.com> * clippy * typo * add test cases * clippyy * use ranges * use ranges * use all ranges * Update crates/filtering/src/hysteresis.rs Co-authored-by: Maximilian Schmidt * Update crates/filtering/src/hysteresis.rs Co-authored-by: Maximilian Schmidt * assert relative ranges * use RangeInclusive * use RangeInclusive * use RangeInclusive * test-found-typo * ahhhhhhhhhhhhh * ahhhhhhhhhhhhhhhhhhhhhhhhhhhh * ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh * renaming * renaming * doc strings * Monospace, monospace text blocks * fix WalkAndStand hysteresis * fix doc-strings --------- Co-authored-by: Ole Felber <45100017+okiwi6@users.noreply.github.com> Co-authored-by: Maximilian Schmidt remove accidental parameters object wrap (#1231) Color Ranges (#1203) * color ranges * tune parameters * off by one Add --prepare flag for pepsi upload and pregame (#1198) * Add prepare flag for upload and pregame * Bump pepsi version * Change println! to eprintln! --------- Co-authored-by: Julian Schuler Reduce `minimum_visual_referee_keypoint_confidence` (#1232) plot cb and cr in twix (#1234) Adjust catching steps (#1206) * add longitudinal offset to catching steps * cleanify * re-enable catching steps Fix saving camera matrix (#1229) Fix uninitialized cycler databases (#1202) Co-authored-by: Julian Schuler Co-authored-by: knoellle Co-authored-by: Maximilian Schmidt Bump image and pepsi version (#1235) * Bump image and pepsi version * Update Cargo.lock only Forward kicks as penalty kicks (#1204) * remove SideKicks from penalty kick variants Co-authored-by: pejotejo <149575214+pejotejo@users.noreply.github.com> * add luis comments * address review comments * add kick strength for penalty kick --------- Co-authored-by: pejotejo <149575214+pejotejo@users.noreply.github.com> Sample more pixels for color calculation of segments (#1179) implement precision kicks for more rename --- Cargo.lock | 771 ++++++++++++------ crates/code_generation/src/cyclers.rs | 2 +- crates/control/src/behavior/dribble.rs | 62 +- crates/control/src/behavior/mod.rs | 2 +- crates/control/src/behavior/node.rs | 5 +- crates/control/src/kick_selector.rs | 7 + crates/control/src/kick_target_provider.rs | 411 ++++++++++ crates/control/src/world_state_composer.rs | 8 + crates/types/src/parameters.rs | 1 + crates/types/src/world_state.rs | 2 + etc/parameters/default.json | 18 +- etc/parameters/head.P0000074A05S98U00019.json | 8 +- etc/parameters/head.P0000074A09S31C00037.json | 4 +- etc/parameters/head.P0000074A09S31T00003.json | 8 +- etc/parameters/head.P0000074A10S41M00040.json | 8 +- etc/parameters/head.P0000074A10S41M00047.json | 8 +- etc/parameters/head.P0000074A10S41M00048.json | 4 +- tools/behavior_simulator/src/cycler.rs | 382 +++++++++ tools/twix/src/panels/image_segments.rs | 36 + 19 files changed, 1440 insertions(+), 307 deletions(-) create mode 100644 crates/control/src/kick_target_provider.rs create mode 100644 tools/behavior_simulator/src/cycler.rs diff --git a/Cargo.lock b/Cargo.lock index e069447da7..ee18f3aedb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -159,9 +159,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.18" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alsa" @@ -237,7 +237,7 @@ dependencies = [ name = "annotato" version = "0.1.0" dependencies = [ - "clap 4.5.20", + "clap 4.5.22", "color-eyre", "eframe", "egui_extras", @@ -271,9 +271,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.17" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a1e53f0f5d86382dafe1cf314783b2044280f406e7e1506368220ad11b1338" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -320,9 +320,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.92" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f37166d7d48a0284b99dd824694c26119c700b53bf0d1540cdb147dbdaaf13" +checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" [[package]] name = "approx" @@ -340,7 +340,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -425,8 +425,8 @@ checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.1.1", - "futures-lite 2.4.0", + "fastrand 2.2.0", + "futures-lite 2.5.0", "slab", ] @@ -464,18 +464,18 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.4" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ "async-lock 3.4.0", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.4.0", + "futures-lite 2.5.0", "parking", - "polling 3.7.3", - "rustix 0.38.38", + "polling 3.7.4", + "rustix 0.38.41", "slab", "tracing", "windows-sys 0.59.0", @@ -520,7 +520,7 @@ dependencies = [ "cfg-if", "event-listener 3.1.0", "futures-lite 1.13.0", - "rustix 0.38.38", + "rustix 0.38.41", "windows-sys 0.48.0", ] @@ -532,7 +532,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -541,13 +541,13 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.3.4", + "async-io 2.4.0", "async-lock 3.4.0", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.38", + "rustix 0.38.41", "signal-hook-registry", "slab", "windows-sys 0.59.0", @@ -567,7 +567,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -722,7 +722,7 @@ dependencies = [ "shell-words", "syntect", "thiserror", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -786,7 +786,7 @@ checksum = "3fbfc33a4c6b80760bb8bf850a2cc65a1e031da62fd3ca8b552189104dc98514" dependencies = [ "bevy_macro_utils", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -833,7 +833,7 @@ dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -913,7 +913,7 @@ checksum = "bfc65e570012e64a21f3546df68591aaede8349e6174fb500071677f54f06630" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", "toml_edit 0.22.22", ] @@ -964,7 +964,7 @@ dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", "uuid", ] @@ -975,7 +975,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77865f310b1fc48fb05b7c4adbe76607ec01d0c14f8ab4caba4d714c86439946" dependencies = [ "async-executor", - "futures-lite 2.4.0", + "futures-lite 2.5.0", "wasm-bindgen-futures", ] @@ -1030,7 +1030,7 @@ checksum = "38f1ab8f2f6f58439d260081d89a42b02690e5fdd64f814edc9417d33fcf2857" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -1058,7 +1058,7 @@ dependencies = [ "bincode", "buffered_watch", "chrono", - "clap 4.5.20", + "clap 4.5.22", "code_generation", "color-eyre", "communication", @@ -1143,7 +1143,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.86", + "syn 2.0.90", "which", ] @@ -1166,7 +1166,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.86", + "syn 2.0.90", "which", ] @@ -1277,7 +1277,7 @@ dependencies = [ "async-channel", "async-task", "futures-io", - "futures-lite 2.4.0", + "futures-lite 2.5.0", "piper", ] @@ -1292,12 +1292,12 @@ dependencies = [ [[package]] name = "bstr" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" +checksum = "1a68f1f47cdf0ec8ee4b941b2eee2a80cb796db73118c0dd09ac63fbe405be22" dependencies = [ "memchr", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "serde", ] @@ -1323,9 +1323,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" +checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" dependencies = [ "bytemuck_derive", ] @@ -1338,7 +1338,7 @@ checksum = "bcfcc3cd946cb52f0bbfdbbcfa2f4e24f75ebb6c0e1002f7c25904fada18b9ec" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -1355,9 +1355,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "bytesize" @@ -1389,8 +1389,8 @@ checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" dependencies = [ "bitflags 2.6.0", "log", - "polling 3.7.3", - "rustix 0.38.38", + "polling 3.7.4", + "rustix 0.38.41", "slab", "thiserror", ] @@ -1403,8 +1403,8 @@ checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ "bitflags 2.6.0", "log", - "polling 3.7.3", - "rustix 0.38.38", + "polling 3.7.4", + "rustix 0.38.41", "slab", "thiserror", ] @@ -1416,7 +1416,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" dependencies = [ "calloop 0.12.4", - "rustix 0.38.38", + "rustix 0.38.41", "wayland-backend", "wayland-client", ] @@ -1428,7 +1428,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ "calloop 0.13.0", - "rustix 0.38.38", + "rustix 0.38.41", "wayland-backend", "wayland-client", ] @@ -1446,9 +1446,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.33" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3788d6ac30243803df38a3e9991cf37e41210232916d41a8222ae378f912624" +checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc" dependencies = [ "jobserver", "libc", @@ -1519,7 +1519,7 @@ checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", - "libloading 0.8.5", + "libloading 0.8.6", ] [[package]] @@ -1533,15 +1533,15 @@ dependencies = [ "bitflags 1.3.2", "strsim 0.8.0", "textwrap", - "unicode-width", + "unicode-width 0.1.14", "vec_map", ] [[package]] name = "clap" -version = "4.5.20" +version = "4.5.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" +checksum = "69371e34337c4c984bbe322360c2547210bf632eb2814bbe78a6e87a2935bd2b" dependencies = [ "clap_builder", "clap_derive", @@ -1549,9 +1549,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.20" +version = "4.5.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" +checksum = "6e24c1b4099818523236a8ca881d2b45db98dadfb4625cf6608c12069fcbbde1" dependencies = [ "anstream", "anstyle", @@ -1561,11 +1561,11 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.5.36" +version = "4.5.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86bc73de94bc81e52f3bebec71bc4463e9748f7a59166663e32044669577b0e2" +checksum = "d9647a559c112175f17cf724dc72d3645680a883c58481332779192b0d8e7a01" dependencies = [ - "clap 4.5.20", + "clap 4.5.22", ] [[package]] @@ -1577,14 +1577,14 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] name = "clap_lex" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" [[package]] name = "clipboard-win" @@ -1609,9 +1609,9 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.51" +version = "0.1.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" +checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e" dependencies = [ "cc", ] @@ -1626,7 +1626,7 @@ dependencies = [ "proc-macro2", "quote", "source_analyzer", - "syn 2.0.86", + "syn 2.0.90", "thiserror", ] @@ -1637,7 +1637,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" dependencies = [ "termcolor", - "unicode-width", + "unicode-width 0.1.14", ] [[package]] @@ -1791,7 +1791,7 @@ dependencies = [ "encode_unicode", "lazy_static", "libc", - "unicode-width", + "unicode-width 0.1.14", "windows-sys 0.52.0", ] @@ -1836,7 +1836,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -1952,9 +1952,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] @@ -2088,7 +2088,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -2137,13 +2137,24 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + [[package]] name = "dlib" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading 0.8.5", + "libloading 0.8.6", ] [[package]] @@ -2199,7 +2210,7 @@ dependencies = [ "glow", "glutin", "glutin-winit", - "image 0.25.4", + "image 0.25.5", "js-sys", "log", "objc2 0.5.2", @@ -2295,7 +2306,7 @@ dependencies = [ "ahash", "egui", "enum-map", - "image 0.25.4", + "image 0.25.5", "log", "mime_guess2", "serde", @@ -2451,7 +2462,7 @@ checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -2472,7 +2483,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -2484,7 +2495,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -2505,7 +2516,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -2516,7 +2527,7 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -2576,12 +2587,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2620,9 +2631,9 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" dependencies = [ "event-listener 5.3.1", "pin-project-lite", @@ -2657,7 +2668,7 @@ dependencies = [ name = "fanta" version = "0.1.0" dependencies = [ - "clap 4.5.20", + "clap 4.5.22", "color-eyre", "communication", "fern", @@ -2687,9 +2698,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" [[package]] name = "fdeflate" @@ -2740,9 +2751,9 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" -version = "1.0.34" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide 0.8.0", @@ -2781,7 +2792,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -2854,11 +2865,11 @@ dependencies = [ [[package]] name = "futures-lite" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f1fa2f9765705486b33fd2acf1577f8ec449c2ba1f318ae5447697b7c08d210" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ - "fastrand 2.1.1", + "fastrand 2.2.0", "futures-core", "futures-io", "parking", @@ -2873,7 +2884,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -3045,9 +3056,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" dependencies = [ "aho-corasick", - "bstr 1.10.0", + "bstr 1.11.0", "log", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "regex-syntax 0.8.5", ] @@ -3078,7 +3089,7 @@ dependencies = [ "glutin_glx_sys", "glutin_wgl_sys", "icrate", - "libloading 0.8.5", + "libloading 0.8.6", "objc2 0.4.1", "once_cell", "raw-window-handle 0.5.2", @@ -3186,7 +3197,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47f1288f0e06f279f84926fa4c17e3fcd2a22b357927a82f2777f7be26e4cec0" dependencies = [ - "bstr 1.10.0", + "bstr 1.11.0", "globset", "libc", "log", @@ -3206,7 +3217,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.6.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -3250,9 +3261,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.0" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "hassle-rs" @@ -3263,7 +3274,7 @@ dependencies = [ "bitflags 2.6.0", "com", "libc", - "libloading 0.8.5", + "libloading 0.8.6", "thiserror", "widestring", "winapi", @@ -3456,7 +3467,7 @@ dependencies = [ "alsa", "ball_filter", "chrono", - "clap 4.5.20", + "clap 4.5.22", "color-eyre", "constants", "ctrlc", @@ -3574,7 +3585,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.5.7", + "socket2 0.5.8", "tokio", "tower-service", "tracing", @@ -3640,14 +3651,143 @@ dependencies = [ "objc2 0.4.1", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] @@ -3670,9 +3810,9 @@ dependencies = [ [[package]] name = "image" -version = "0.25.4" +version = "0.25.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc144d44a31d753b02ce64093d532f55ff8dc4ebf2ffb8a63c0dda691385acae" +checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" dependencies = [ "bytemuck", "byteorder-lite", @@ -3698,25 +3838,25 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown 0.15.0", + "hashbrown 0.15.2", ] [[package]] name = "indicatif" -version = "0.17.8" +version = "0.17.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +checksum = "cbf675b85ed934d3c67b5c5469701eec7db22689d0a2139d856e0925fa28b281" dependencies = [ "console", - "instant", "number_prefix", "portable-atomic", - "unicode-width", + "unicode-width 0.2.0", + "web-time 1.1.0", ] [[package]] @@ -3812,9 +3952,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "ittapi" @@ -3878,10 +4018,11 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "a865e038f7f6ed956f788f0d7d60c541fff74c7bd74272c5d4cf15c63743e705" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -3892,7 +4033,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" dependencies = [ "libc", - "libloading 0.8.5", + "libloading 0.8.6", "pkg-config", ] @@ -3944,9 +4085,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.161" +version = "0.2.167" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" [[package]] name = "libloading" @@ -3960,9 +4101,9 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", "windows-targets 0.52.6", @@ -4036,6 +4177,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "litrs" version = "0.4.1" @@ -4195,11 +4342,10 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi 0.3.9", "libc", "wasi", "windows-sys 0.52.0", @@ -4247,7 +4393,7 @@ dependencies = [ "bitflags 2.6.0", "codespan-reporting", "hexf-parse", - "indexmap 2.6.0", + "indexmap 2.7.0", "log", "num-traits", "rustc-hash", @@ -4282,7 +4428,7 @@ checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -4493,7 +4639,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -4543,7 +4689,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -4785,7 +4931,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -4833,7 +4979,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d70e8103d2b9b52236efd8d785ef5fed04963ebfcfd7fbfa35aeea9d7d79f92" dependencies = [ "env_logger", - "libloading 0.8.5", + "libloading 0.8.6", "once_cell", "openvino-finder", ] @@ -5000,7 +5146,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -5016,7 +5162,7 @@ dependencies = [ "aliveness", "argument_parsers", "bat", - "clap 4.5.20", + "clap 4.5.22", "clap_complete", "color-eyre", "constants", @@ -5049,7 +5195,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset 0.4.2", - "indexmap 2.6.0", + "indexmap 2.7.0", ] [[package]] @@ -5071,7 +5217,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.1.1", + "fastrand 2.2.0", "futures-io", ] @@ -5088,7 +5234,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ "base64 0.22.1", - "indexmap 2.6.0", + "indexmap 2.7.0", "quick-xml 0.32.0", "serde", "time", @@ -5125,24 +5271,24 @@ dependencies = [ [[package]] name = "polling" -version = "3.7.3" +version = "3.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.38", + "rustix 0.38.41", "tracing", "windows-sys 0.59.0", ] [[package]] name = "portable-atomic" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "powerfmt" @@ -5172,7 +5318,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -5229,9 +5375,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -5421,7 +5567,7 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "regex-syntax 0.8.5", ] @@ -5436,9 +5582,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -5597,9 +5743,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.38" +version = "0.38.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa260229e6538e52293eeb577aabd09945a09d6d9cc0fc550ed7529056c2e32a" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" dependencies = [ "bitflags 2.6.0", "errno", @@ -5648,14 +5794,14 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] name = "schannel" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", ] @@ -5700,9 +5846,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" dependencies = [ "core-foundation-sys", "libc", @@ -5729,7 +5875,7 @@ source = "git+https://github.com/HULKs/serde.git?rev=73d5e8e404a874ad90023810d63 dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -5743,9 +5889,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.132" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ "itoa", "memchr", @@ -5761,7 +5907,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -5905,7 +6051,7 @@ dependencies = [ "libc", "log", "memmap2", - "rustix 0.38.38", + "rustix 0.38.41", "thiserror", "wayland-backend", "wayland-client", @@ -5930,7 +6076,7 @@ dependencies = [ "libc", "log", "memmap2", - "rustix 0.38.38", + "rustix 0.38.41", "thiserror", "wayland-backend", "wayland-client", @@ -5974,9 +6120,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -5990,7 +6136,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.86", + "syn 2.0.90", "thiserror", "threadbound", "toposort-scc", @@ -6048,6 +6194,12 @@ dependencies = [ "serde", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -6121,9 +6273,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.86" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89275301d38033efb81a6e60e3497e734dfcc62571f2854bf4b16690398824c" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ "proc-macro2", "quote", @@ -6136,6 +6288,17 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + [[package]] name = "syntect" version = "5.2.0" @@ -6194,14 +6357,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", - "fastrand 2.1.1", + "fastrand 2.2.0", "once_cell", - "rustix 0.38.38", + "rustix 0.38.41", "windows-sys 0.59.0", ] @@ -6220,27 +6383,27 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" dependencies = [ - "unicode-width", + "unicode-width 0.1.14", ] [[package]] name = "thiserror" -version = "1.0.66" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d171f59dbaa811dbbb1aee1e73db92ec2b122911a48e1390dfe327a821ddede" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.66" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b08be0f17bd307950653ce45db00cd31200d82b624b36e181337d9c7d92765b5" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -6272,9 +6435,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -6293,9 +6456,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", @@ -6327,25 +6490,20 @@ dependencies = [ ] [[package]] -name = "tinyvec" -version = "1.8.0" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ - "tinyvec_macros", + "displaydoc", + "zerovec", ] -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - [[package]] name = "tokio" -version = "1.41.0" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", "bytes", @@ -6354,7 +6512,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.7", + "socket2 0.5.8", "tokio-macros", "windows-sys 0.52.0", ] @@ -6367,7 +6525,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -6394,9 +6552,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -6432,7 +6590,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "toml_datetime", "winnow 0.5.40", ] @@ -6443,7 +6601,7 @@ version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "serde", "serde_spanned", "toml_datetime", @@ -6464,9 +6622,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -6475,20 +6633,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", "valuable", @@ -6496,9 +6654,9 @@ dependencies = [ [[package]] name = "tracing-error" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" +checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db" dependencies = [ "tracing", "tracing-subscriber", @@ -6517,9 +6675,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term 0.46.0", @@ -6562,9 +6720,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "ttf-parser" -version = "0.25.0" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5902c5d130972a0000f60860bfbf46f7ca3db5391eddfedd1b8728bd9dc96c0e" +checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" [[package]] name = "tungstenite" @@ -6595,7 +6753,7 @@ dependencies = [ "bincode", "buffered_watch", "chrono", - "clap 4.5.20", + "clap 4.5.22", "color-eyre", "communication", "convert_case 0.6.0", @@ -6687,26 +6845,11 @@ version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" -[[package]] -name = "unicode-bidi" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" - [[package]] name = "unicode-ident" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" - -[[package]] -name = "unicode-normalization" -version = "0.1.24" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" -dependencies = [ - "tinyvec", -] +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-segmentation" @@ -6720,6 +6863,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "unicode-width" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" + [[package]] name = "unicode-xid" version = "0.2.6" @@ -6728,9 +6877,9 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -6743,12 +6892,24 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + [[package]] name = "utf8-cstr" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55bcbb425141152b10d5693095950b51c3745d019363fc2929ffd8f61449b628" +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -6864,9 +7025,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "d15e63b4482863c109d70a7b8706c1e364eb6ea449b201a76c5b89cedcec2d5c" dependencies = [ "cfg-if", "once_cell", @@ -6875,36 +7036,37 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +checksum = "8d36ef12e3aaca16ddd3f67922bc63e48e953f126de60bd33ccc0101ef9998cd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.45" +version = "0.4.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +checksum = "9dfaf8f50e5f293737ee323940c7d8b08a66a95a419223d9f41610ca08b0833d" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "705440e08b42d3e4b36de7d66c944be628d579796b8090bfa3471478a2260051" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6912,22 +7074,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "98c9ae5a76e46f4deecd0f0255cc223cfa18dc9b261213b8aa0c7b36f61b3f1d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49" [[package]] name = "watch" @@ -6943,7 +7105,7 @@ checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6" dependencies = [ "cc", "downcast-rs", - "rustix 0.38.38", + "rustix 0.38.41", "scoped-tls", "smallvec", "wayland-sys", @@ -6956,7 +7118,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66249d3fc69f76fd74c82cc319300faa554e9d865dab1f7cd66cc20db10b280" dependencies = [ "bitflags 2.6.0", - "rustix 0.38.38", + "rustix 0.38.41", "wayland-backend", "wayland-scanner", ] @@ -6978,7 +7140,7 @@ version = "0.31.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32b08bc3aafdb0035e7fe0fdf17ba0c09c268732707dca4ae098f60cb28c9e4c" dependencies = [ - "rustix 0.38.38", + "rustix 0.38.41", "wayland-client", "xcursor", ] @@ -7071,9 +7233,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.72" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +checksum = "a98bc3c33f0fe7e59ad7cd041b89034fa82a7c2d4365ca538dda6cdaf513863c" dependencies = [ "js-sys", "wasm-bindgen", @@ -7101,9 +7263,9 @@ dependencies = [ [[package]] name = "webbrowser" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5f07fb9bc8de2ddfe6b24a71a75430673fd679e568c48b52716cef1cfae923" +checksum = "ea9fe1ebb156110ff855242c1101df158b822487e4957b0556d9ffce9db0f535" dependencies = [ "block2 0.5.1", "core-foundation 0.10.0", @@ -7180,7 +7342,7 @@ dependencies = [ "cfg_aliases 0.1.1", "codespan-reporting", "document-features", - "indexmap 2.6.0", + "indexmap 2.7.0", "log", "naga", "once_cell", @@ -7216,7 +7378,7 @@ dependencies = [ "js-sys", "khronos-egl", "libc", - "libloading 0.8.5", + "libloading 0.8.6", "log", "metal", "naga", @@ -7256,14 +7418,14 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.38", + "rustix 0.38.41", ] [[package]] name = "wide" -version = "0.7.28" +version = "0.7.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b828f995bf1e9622031f8009f8481a85406ce1f4d4588ff746d872043e855690" +checksum = "58e6db2670d2be78525979e9a5f9c69d296fd7d670549fe9ebf70f8708cb5019" dependencies = [ "bytemuck", "safe_arch", @@ -7378,7 +7540,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -7400,7 +7562,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", ] [[package]] @@ -7666,7 +7828,7 @@ dependencies = [ "raw-window-handle 0.5.2", "raw-window-handle 0.6.2", "redox_syscall 0.3.5", - "rustix 0.38.38", + "rustix 0.38.41", "sctk-adwaita", "smithay-client-toolkit 0.18.1", "smol_str", @@ -7713,6 +7875,18 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "x11-dl" version = "2.21.0" @@ -7733,9 +7907,9 @@ dependencies = [ "as-raw-xcb-connection", "gethostname", "libc", - "libloading 0.8.5", + "libloading 0.8.6", "once_cell", - "rustix 0.38.38", + "rustix 0.38.41", "x11rb-protocol", ] @@ -7782,9 +7956,9 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.22" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" +checksum = "ea8b391c9a790b496184c29f7f93b9ed5b16abb306c05415b68bcc16e4d06432" [[package]] name = "yaml-rust" @@ -7795,6 +7969,30 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", + "synstructure", +] + [[package]] name = "zbus" version = "3.15.2" @@ -7879,7 +8077,50 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.86", + "syn 2.0.90", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", + "synstructure", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", ] [[package]] diff --git a/crates/code_generation/src/cyclers.rs b/crates/code_generation/src/cyclers.rs index 6939302903..6acb04e3c3 100644 --- a/crates/code_generation/src/cyclers.rs +++ b/crates/code_generation/src/cyclers.rs @@ -58,7 +58,7 @@ fn generate_module(cycler: &Cycler, cyclers: &Cyclers, mode: CyclerMode) -> Toke let cycler_implementation = generate_implementation(cycler, cyclers, mode); quote! { - #[allow(dead_code, unused_mut, unused_variables, clippy::too_many_arguments, clippy::needless_question_mark, clippy::borrow_deref_ref)] + #[allow(dead_code, unused_mut, unused_variables, clippy::too_many_arguments, clippy::needless_question_mark, clippy::borrow_deref_ref, clippy::explicit_auto_deref)] pub(crate) mod #module_name { use color_eyre::eyre::WrapErr; use crate::structs::#module_name::{MainOutputs, AdditionalOutputs}; diff --git a/crates/control/src/behavior/dribble.rs b/crates/control/src/behavior/dribble.rs index 02fa323a23..b9dd8428db 100644 --- a/crates/control/src/behavior/dribble.rs +++ b/crates/control/src/behavior/dribble.rs @@ -1,10 +1,14 @@ use coordinate_systems::{Ground, UpcomingSupport}; +use std::time::{Duration, SystemTime}; + use geometry::look_at::LookAt; use linear_algebra::{Isometry2, Point, Pose2}; -use spl_network_messages::GamePhase; +use spl_network_messages::{GamePhase, Team}; use types::{ camera_position::CameraPosition, filtered_game_controller_state::FilteredGameControllerState, + filtered_game_state::FilteredGameState, + last_filtered_game_controller_state_change::LastFilteredGameControllerStateChanges, motion_command::{ ArmMotion, HeadMotion, ImageRegion, MotionCommand, OrientationMode, WalkSpeed, }, @@ -23,6 +27,9 @@ pub fn execute( parameters: &DribblingParameters, dribble_path: Option>, mut walk_speed: WalkSpeed, + game_controller_state: Option, + game_controller_state_change: Option, + precision_kick_timeout: u8, ) -> Option { let ball_position = world_state.ball?.ball_in_ground; let distance_to_ball = ball_position.coords().norm(); @@ -39,6 +46,11 @@ pub fn execute( }; let kick_decisions = world_state.kick_decisions.as_ref()?; let instant_kick_decisions = world_state.instant_kick_decisions.as_ref()?; + let do_precision_kick = precision_kick( + game_controller_state_change, + game_controller_state, + precision_kick_timeout, + ); let available_kick = kick_decisions .iter() @@ -48,6 +60,7 @@ pub fn execute( decision.kick_pose, &in_walk_kicks[decision.variant], world_state.robot.ground_to_upcoming_support, + do_precision_kick, ) }); if let Some(kick) = available_kick { @@ -106,11 +119,50 @@ fn is_kick_pose_reached( kick_pose: Pose2, kick_info: &InWalkKickInfoParameters, ground_to_upcoming_support: Isometry2, + precision_kick: bool, ) -> bool { let upcoming_kick_pose = ground_to_upcoming_support * kick_pose; - let is_x_reached = upcoming_kick_pose.position().x().abs() < kick_info.reached_thresholds.x; - let is_y_reached = upcoming_kick_pose.position().y().abs() < kick_info.reached_thresholds.y; - let is_orientation_reached = - upcoming_kick_pose.orientation().angle().abs() < kick_info.reached_thresholds.z; + let thresholds = if precision_kick { + kick_info.precision_kick_reached_thresholds + } else { + kick_info.reached_thresholds + }; + + let is_x_reached = upcoming_kick_pose.position().x().abs() < thresholds.x; + let is_y_reached = upcoming_kick_pose.position().y().abs() < thresholds.y; + let is_orientation_reached = upcoming_kick_pose.orientation().angle().abs() < thresholds.z; + is_x_reached && is_y_reached && is_orientation_reached } + +pub fn precision_kick( + game_controller_state_change: Option, + game_controller_state: Option, + precision_kick_timeout: u8, +) -> bool { + let game_controller_state = game_controller_state.unwrap_or_default(); + let game_controller_state_change = game_controller_state_change.unwrap_or_default(); + + let now = SystemTime::now(); + let time_difference = now + .duration_since(game_controller_state_change.game_state) + .expect("time ran backwards"); + + let precision_kick = matches!( + game_controller_state.game_phase, + GamePhase::PenaltyShootout { .. } + ) || game_controller_state.sub_state.is_some(); + + let own_kick_off = matches!( + game_controller_state.game_state, + FilteredGameState::Playing { + kick_off: true, + ball_is_free: true + } + ); + let sub_state = game_controller_state.sub_state.is_some(); + let kicking = matches!(game_controller_state.kicking_team, Team::Hulks); + + (precision_kick || own_kick_off || sub_state && kicking) + && time_difference < Duration::from_secs(precision_kick_timeout.into()) +} diff --git a/crates/control/src/behavior/mod.rs b/crates/control/src/behavior/mod.rs index c29029c489..a8f96e9e98 100644 --- a/crates/control/src/behavior/mod.rs +++ b/crates/control/src/behavior/mod.rs @@ -1,7 +1,7 @@ mod animation; mod calibrate; mod defend; -mod dribble; +pub mod dribble; mod fall_safely; mod head; mod initial; diff --git a/crates/control/src/behavior/node.rs b/crates/control/src/behavior/node.rs index b9700bb8b0..50f1ed07ef 100644 --- a/crates/control/src/behavior/node.rs +++ b/crates/control/src/behavior/node.rs @@ -62,7 +62,6 @@ pub struct CycleContext { world_state: Input, cycle_time: Input, is_localization_converged: Input, - parameters: Parameter, in_walk_kicks: Parameter, field_dimensions: Parameter, @@ -82,6 +81,7 @@ pub struct CycleContext { support_walk_speed: Parameter, walk_to_kickoff_walk_speed: Parameter, walk_to_penalty_kick_walk_speed: Parameter, + precision_kick_timeout: Parameter, } #[context] @@ -376,6 +376,9 @@ impl Behavior { &context.parameters.dribbling, dribble_path.clone(), *context.dribble_walk_speed, + world_state.filtered_game_controller_state.clone(), + world_state.last_filtered_game_controller_state_change, + *context.precision_kick_timeout, ), Action::Jump => jump::execute(world_state), Action::PrepareJump => prepare_jump::execute(world_state), diff --git a/crates/control/src/kick_selector.rs b/crates/control/src/kick_selector.rs index b720053c5a..d6ef4ed50b 100644 --- a/crates/control/src/kick_selector.rs +++ b/crates/control/src/kick_selector.rs @@ -108,6 +108,12 @@ impl KickSelector { context.in_walk_kicks, ); + kick_decisions.retain(|target| match target.variant { + KickVariant::Forward => context.in_walk_kicks.forward.enabled, + KickVariant::Turn => context.in_walk_kicks.turn.enabled, + KickVariant::Side => context.in_walk_kicks.side.enabled, + }); + kick_decisions.sort_by(|left, right| { compare_decisions( left, @@ -359,6 +365,7 @@ fn generate_decisions_for_instant_kicks( struct TargetAlignedBall; struct KickPose; let position: Point2 = Point2::wrap(kick_info.position); + let parameter_kick_pose = Pose2::from_parts(position, Orientation2::new(kick_info.orientation)); let target_aligned_ball_to_kick_pose = match kicking_side { diff --git a/crates/control/src/kick_target_provider.rs b/crates/control/src/kick_target_provider.rs new file mode 100644 index 0000000000..8c8ad3eb1d --- /dev/null +++ b/crates/control/src/kick_target_provider.rs @@ -0,0 +1,411 @@ +use color_eyre::Result; +use ordered_float::NotNan; + +use context_attribute::context; +use coordinate_systems::{Field, Ground}; +use framework::MainOutput; +use geometry::{circle::Circle, line_segment::LineSegment, two_line_segments::TwoLineSegments}; +use linear_algebra::{distance, point, Isometry2, Point2}; +use serde::{Deserialize, Serialize}; +use spl_network_messages::{GamePhase, SubState, Team}; +use types::{ + field_dimensions::FieldDimensions, + filtered_game_controller_state::FilteredGameControllerState, + filtered_game_state::FilteredGameState, + kick_target::{KickTarget, KickTargetWithKickVariants}, + motion_command::KickVariant, + obstacles::Obstacle, + parameters::FindKickTargetsParameters, + world_state::BallState, +}; + +#[derive(Deserialize, Serialize)] +pub struct KickTargetProvider; + +#[context] +pub struct CreationContext {} + +#[context] +pub struct CycleContext { + ball_state: RequiredInput, "ball_state?">, + ground_to_field: RequiredInput>, "ground_to_field?">, + obstacles: Input, "obstacles">, + filtered_game_controller_state: + Input, "filtered_game_controller_state?">, + + field_dimensions: Parameter, + + ball_radius_for_kick_target_selection: + Parameter, + find_kick_targets_parameters: + Parameter, + max_kick_around_obstacle_angle: + Parameter, + corner_kick_strength: Parameter, + kick_off_kick_strength: Parameter, + penalty_shot_kick_strength: Parameter, + kick_off_kick_variants: + Parameter, "kick_target_provider.kick_off_kick_variants">, + corner_kick_variants: Parameter, "kick_target_provider.corner_kick_variants">, + penalty_kick_kick_variants: + Parameter, "kick_target_provider.penalty_kick_kick_variants">, + goal_line_kick_variants: + Parameter, "kick_target_provider.goal_line_kick_variants">, +} + +struct CollectKickTargetsParameter<'cycle> { + find_kick_targets_parameter: &'cycle FindKickTargetsParameters, + max_kick_around_obstacle_angle: f32, + corner_kick_strength: f32, + kick_off_kick_strength: f32, + penalty_shot_kick_strength: f32, + kick_off_kick_variants: Vec, + corner_kick_variants: Vec, + penalty_kick_kick_variants: Vec, + goal_line_kick_variants: Vec, +} + +#[context] +#[derive(Default)] +pub struct MainOutputs { + pub kick_opportunities: MainOutput>, + pub obstacle_circles: MainOutput>>, + pub allow_instant_kicks: MainOutput, +} + +impl KickTargetProvider { + pub fn new(_context: CreationContext) -> Result { + Ok(Self {}) + } + + pub fn cycle(&self, context: CycleContext) -> Result { + let ball_position = context.ball_state.ball_in_ground; + + let obstacle_circles = match context.filtered_game_controller_state { + Some(FilteredGameControllerState { + game_phase: GamePhase::PenaltyShootout { .. }, + .. + }) => vec![], + Some(FilteredGameControllerState { + sub_state: Some(SubState::PenaltyKick), + .. + }) => vec![], + _ => generate_obstacle_circles( + context.obstacles, + *context.ball_radius_for_kick_target_selection, + ), + }; + + let collect_kick_targets_parameters = CollectKickTargetsParameter { + find_kick_targets_parameter: context.find_kick_targets_parameters, + max_kick_around_obstacle_angle: *context.max_kick_around_obstacle_angle, + corner_kick_strength: *context.corner_kick_strength, + kick_off_kick_strength: *context.kick_off_kick_strength, + penalty_shot_kick_strength: *context.penalty_shot_kick_strength, + kick_off_kick_variants: context.kick_off_kick_variants.clone(), + corner_kick_variants: context.corner_kick_variants.clone(), + penalty_kick_kick_variants: context.penalty_kick_kick_variants.clone(), + goal_line_kick_variants: context.goal_line_kick_variants.clone(), + }; + + let (kick_opportunities, allow_instant_kicks) = collect_kick_targets( + *context.ground_to_field, + context.field_dimensions, + &obstacle_circles, + ball_position, + collect_kick_targets_parameters, + context.filtered_game_controller_state, + ); + + Ok(MainOutputs { + kick_opportunities: kick_opportunities.into(), + obstacle_circles: obstacle_circles.into(), + allow_instant_kicks: allow_instant_kicks.into(), + }) + } +} + +fn generate_obstacle_circles( + obstacles: &[Obstacle], + ball_radius_for_kick_target_selection: f32, +) -> Vec> { + obstacles + .iter() + .map(|obstacle| { + let obstacle_radius = + obstacle.radius_at_foot_height + ball_radius_for_kick_target_selection; + Circle { + center: obstacle.position, + radius: obstacle_radius, + } + }) + .collect() +} + +fn collect_kick_targets( + ground_to_field: Isometry2, + field_dimensions: &FieldDimensions, + obstacle_circles: &[Circle], + ball_position: Point2, + collect_kick_targets_parameters: CollectKickTargetsParameter<'_>, + filtered_game_controller_state: Option<&FilteredGameControllerState>, +) -> (Vec, bool) { + let field_to_ground = ground_to_field.inverse(); + + let is_own_kick_off = matches!( + filtered_game_controller_state, + Some(FilteredGameControllerState { + game_state: FilteredGameState::Playing { kick_off: true, .. }, + game_phase: GamePhase::Normal, + .. + }) + ); + let is_not_free_for_opponent = matches!( + filtered_game_controller_state, + Some(FilteredGameControllerState { + opponent_game_state: FilteredGameState::Playing { + ball_is_free: false, + .. + }, + .. + }) + ); + let is_penalty_shot = matches!( + filtered_game_controller_state, + Some(FilteredGameControllerState { + game_phase: GamePhase::PenaltyShootout { .. }, + kicking_team: Team::Hulks, + .. + }) | Some(FilteredGameControllerState { + sub_state: Some(SubState::PenaltyKick), + kicking_team: Team::Hulks, + .. + }) + ); + + let (kick_opportunities, allow_instant_kicks): (Vec<_>, _) = + if is_own_kick_off && is_not_free_for_opponent { + ( + generate_kick_off_kick_targets( + field_dimensions, + field_to_ground, + collect_kick_targets_parameters.kick_off_kick_strength, + ) + .into_iter() + .map(|kick_target| KickTargetWithKickVariants { + kick_target, + kick_variants: collect_kick_targets_parameters + .kick_off_kick_variants + .clone(), + }) + .collect(), + true, + ) + } else if is_ball_in_opponents_corners( + ball_position, + collect_kick_targets_parameters.find_kick_targets_parameter, + field_dimensions, + ground_to_field, + ) { + ( + generate_corner_kick_targets( + collect_kick_targets_parameters.find_kick_targets_parameter, + field_dimensions, + field_to_ground, + collect_kick_targets_parameters.corner_kick_strength, + ) + .into_iter() + .map(|kick_target| KickTargetWithKickVariants { + kick_target, + kick_variants: collect_kick_targets_parameters.corner_kick_variants.clone(), + }) + .collect(), + true, + ) + } else if is_penalty_shot { + ( + generate_penalty_shot_kick_targets( + field_dimensions, + field_to_ground, + collect_kick_targets_parameters.penalty_shot_kick_strength, + ) + .into_iter() + .map(|kick_target| KickTargetWithKickVariants { + kick_target, + kick_variants: collect_kick_targets_parameters + .penalty_kick_kick_variants + .clone(), + }) + .collect(), + true, + ) + } else { + ( + generate_goal_line_kick_targets(field_dimensions, field_to_ground) + .into_iter() + .map(|kick_target| KickTargetWithKickVariants { + kick_target, + kick_variants: collect_kick_targets_parameters + .goal_line_kick_variants + .clone(), + }) + .collect(), + true, + ) + }; + + let obstacle_circles: Vec<_> = obstacle_circles + .iter() + .map(|circle| { + let ball_to_obstacle = circle.center - ball_position; + let safety_radius = circle.radius + / collect_kick_targets_parameters + .max_kick_around_obstacle_angle + .sin(); + let distance_to_obstacle = ball_to_obstacle.norm(); + let center = if distance_to_obstacle < safety_radius { + circle.center + + ball_to_obstacle.normalize() * (safety_radius - distance_to_obstacle) + } else { + circle.center + }; + Circle { + center, + radius: circle.radius, + } + }) + .collect(); + + let kick_opportunities = kick_opportunities + .iter() + .flat_map(|kick_opportunity| { + let ball_to_target = LineSegment(ball_position, kick_opportunity.kick_target.position); + let closest_intersecting_obstacle = obstacle_circles + .iter() + .filter(|circle| circle.intersects_line_segment(&ball_to_target)) + .min_by_key(|circle| NotNan::new(circle.center.coords().norm()).unwrap()); + let targets = match closest_intersecting_obstacle { + Some(circle) => { + let TwoLineSegments(left_tangent, right_tangent) = + circle.tangents_with_point(ball_position).unwrap(); + [left_tangent, right_tangent] + .into_iter() + .map(|tangent| { + let kick_direction = (tangent.0 - ball_position).normalize(); + // TODO: drop this constant? + ball_position + kick_direction * 2.0 + }) + .filter(|&position| { + field_dimensions.is_inside_field(ground_to_field * position) + }) + .map(KickTarget::new) + .collect() + } + None => vec![kick_opportunity.kick_target], + }; + targets + .into_iter() + .map(|target| KickTargetWithKickVariants { + kick_target: target, + kick_variants: kick_opportunity.kick_variants.clone(), + }) + }) + .collect(); + (kick_opportunities, allow_instant_kicks) +} + +fn is_ball_in_opponents_corners( + ball_position: Point2, + parameters: &FindKickTargetsParameters, + field_dimensions: &FieldDimensions, + ground_to_field: Isometry2, +) -> bool { + let ball_in_field = ground_to_field * ball_position; + let left_opponent_corner = point![field_dimensions.length / 2.0, field_dimensions.width / 2.0]; + let right_opponent_corner = + point![field_dimensions.length / 2.0, -field_dimensions.width / 2.0]; + let ball_near_left_opponent_corner = + distance(ball_in_field, left_opponent_corner) < parameters.distance_from_corner; + let ball_near_right_opponent_corner = + distance(ball_in_field, right_opponent_corner) < parameters.distance_from_corner; + ball_near_left_opponent_corner || ball_near_right_opponent_corner +} + +fn generate_corner_kick_targets( + parameters: &FindKickTargetsParameters, + field_dimensions: &FieldDimensions, + field_to_ground: Isometry2, + corner_kick_strength: f32, +) -> Vec { + let from_corner_kick_target_x = + field_dimensions.length / 2.0 - parameters.corner_kick_target_distance_to_goal; + let position = field_to_ground * point![from_corner_kick_target_x, 0.0]; + vec![KickTarget { + position, + strength: Some(corner_kick_strength), + }] +} + +fn generate_goal_line_kick_targets( + field_dimensions: &FieldDimensions, + field_to_ground: Isometry2, +) -> Vec { + let left_goal_half = field_to_ground + * point![ + field_dimensions.length / 2.0, + field_dimensions.goal_inner_width / 4.0 + ]; + let right_goal_half = field_to_ground + * point![ + field_dimensions.length / 2.0, + -field_dimensions.goal_inner_width / 4.0 + ]; + vec![ + KickTarget::new(left_goal_half), + KickTarget::new(right_goal_half), + ] +} + +fn generate_kick_off_kick_targets( + field_dimensions: &FieldDimensions, + field_to_ground: Isometry2, + kick_off_kick_strength: f32, +) -> Vec { + let left_kick_off_target = field_to_ground + * point![ + 0.0, + field_dimensions.width / 2.0 - field_dimensions.center_circle_diameter, + ]; + let right_kick_off_target = field_to_ground + * point![ + 0.0, + -(field_dimensions.width / 2.0 - field_dimensions.center_circle_diameter), + ]; + + vec![ + KickTarget::new_with_strength(left_kick_off_target, kick_off_kick_strength), + KickTarget::new_with_strength(right_kick_off_target, kick_off_kick_strength), + ] +} + +fn generate_penalty_shot_kick_targets( + field_dimensions: &FieldDimensions, + field_to_ground: Isometry2, + penalty_shot_kick_strength: f32, +) -> Vec { + let left_kick_off_target = field_to_ground + * point![ + field_dimensions.length / 2.0, + field_dimensions.goal_inner_width / 4.0 + ]; + let right_kick_off_target = field_to_ground + * point![ + field_dimensions.length / 2.0, + -field_dimensions.goal_inner_width / 4.0 + ]; + + vec![ + KickTarget::new_with_strength(left_kick_off_target, penalty_shot_kick_strength), + KickTarget::new_with_strength(right_kick_off_target, penalty_shot_kick_strength), + ] +} diff --git a/crates/control/src/world_state_composer.rs b/crates/control/src/world_state_composer.rs index 82c191bb71..0bbd286ded 100644 --- a/crates/control/src/world_state_composer.rs +++ b/crates/control/src/world_state_composer.rs @@ -12,6 +12,7 @@ use types::{ fall_state::FallState, filtered_game_controller_state::FilteredGameControllerState, kick_decision::KickDecision, + last_filtered_game_controller_state_change::LastFilteredGameControllerStateChanges, obstacles::Obstacle, primary_state::PrimaryState, roles::Role, @@ -33,6 +34,10 @@ pub struct CycleContext { rule_ball: Input, "rule_ball_state?">, filtered_game_controller_state: Input, "filtered_game_controller_state?">, + last_filtered_game_controller_state_changes: Input< + Option, + "last_filtered_game_controller_state_changes?", + >, ground_to_field: Input>, "ground_to_field?">, suggested_search_position: Input>, "suggested_search_position?">, kick_decisions: Input>, "kick_decisions?">, @@ -85,6 +90,9 @@ impl WorldStateComposer { kick_decisions: context.kick_decisions.cloned(), instant_kick_decisions: context.instant_kick_decisions.cloned(), filtered_game_controller_state: context.filtered_game_controller_state.cloned(), + last_filtered_game_controller_state_change: context + .last_filtered_game_controller_state_changes + .copied(), hypothetical_ball_positions: context.hypothetical_ball_position.clone(), calibration_command: context.calibration_command.copied(), }; diff --git a/crates/types/src/parameters.rs b/crates/types/src/parameters.rs index 3a1812eb21..2c1b235610 100644 --- a/crates/types/src/parameters.rs +++ b/crates/types/src/parameters.rs @@ -129,6 +129,7 @@ pub struct InWalkKickInfoParameters { pub position_offset: nalgebra::Vector2, pub orientation: f32, pub reached_thresholds: nalgebra::Vector3, + pub precision_kick_reached_thresholds: nalgebra::Vector3, pub shot_distance: f32, pub enabled: bool, } diff --git a/crates/types/src/world_state.rs b/crates/types/src/world_state.rs index ebd75bfc31..9cf8c755d0 100644 --- a/crates/types/src/world_state.rs +++ b/crates/types/src/world_state.rs @@ -11,6 +11,7 @@ use crate::{ ball_position::HypotheticalBallPosition, calibration::CalibrationCommand, fall_state::FallState, field_dimensions::Side, filtered_game_controller_state::FilteredGameControllerState, kick_decision::KickDecision, + last_filtered_game_controller_state_change::LastFilteredGameControllerStateChanges, obstacles::Obstacle, penalty_shot_direction::PenaltyShotDirection, primary_state::PrimaryState, roles::Role, rule_obstacles::RuleObstacle, }; @@ -21,6 +22,7 @@ pub struct WorldState { pub rule_ball: Option, pub hypothetical_ball_positions: Vec>, pub filtered_game_controller_state: Option, + pub last_filtered_game_controller_state_change: Option, pub obstacles: Vec, pub rule_obstacles: Vec, pub position_of_interest: Point2, diff --git a/etc/parameters/default.json b/etc/parameters/default.json index 0a1962db22..9e42d09cfd 100644 --- a/etc/parameters/default.json +++ b/etc/parameters/default.json @@ -7,7 +7,7 @@ "minimum_overall_keypoint_confidence": 0.5, "minimum_visual_referee_keypoint_confidence": 0.8, "minimum_shoulder_angle": 0.2, - "foot_z_offset": 0.025, + "foot_z_offset": 0.1, "referee_pose_queue_length": 8, "minimum_number_poses_before_message": 3, "override_pose_detection": false @@ -1071,15 +1071,18 @@ "position": [-0.22, -0.04], "position_offset": [0.0, 0.0], "orientation": 0.0, - "reached_thresholds": [0.04, 0.02, 0.05], + "reached_thresholds": [0.06, 0.03, 0.1], + "precision_kick_reached_thresholds": [ + 0.05999999865889549, 0.009999999776482582, 0.015000000596046448 + ], "shot_distance": 4.0, "enabled": true }, "turn": { - "position": [-0.15, -0.11], - "position_offset": [0.0, 0.0], - "orientation": 0.9, + "position": [-0.15, -0.08], + "orientation": 0.78, "reached_thresholds": [0.04, 0.04, 0.1], + "precision_kick_reached_thresholds": [0.0, 0.0, 0.0], "shot_distance": 3.5, "enabled": true }, @@ -1088,10 +1091,12 @@ "position_offset": [0.0, 0.0], "orientation": -1.57, "reached_thresholds": [0.05, 0.06, 0.1], - "shot_distance": 0.8, + "precision_kick_reached_thresholds": [0.0, 0.0, 0.0], + "shot_distance": 0.5, "enabled": true } }, + "precision_kick_timeout": 5, "kick_selector": { "distance_to_corner": 1.5, "corner_kick_target_distance_to_goal": 1.3, @@ -1101,6 +1106,7 @@ "corner_kick_variants": ["Forward", "Side", "Turn"], "kick_off_kick_variants": ["Forward", "Side", "Turn"], "penalty_shot_kick_variants": ["Forward"], + "goal_line_kick_variants": ["Forward", "Side", "Turn"], "default_kick_strength": 1.0, "corner_kick_strength": 0.25, "kick_off_kick_strength": 0.25, diff --git a/etc/parameters/head.P0000074A05S98U00019.json b/etc/parameters/head.P0000074A05S98U00019.json index a84ad62560..b5aff4f500 100644 --- a/etc/parameters/head.P0000074A05S98U00019.json +++ b/etc/parameters/head.P0000074A05S98U00019.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -1.4062178134918213, - 3.2122440338134766, - -1.0124963521957397 + -1.094749927520752, 6.574273109436035, -0.9893721342086792 ] }, "vision_top": { "extrinsic_rotations": [ - -3.4089455604553223, - 3.412630081176758, - -0.5929854512214661 + -3.026418685913086, 5.58524227142334, -0.7207059860229492 ] } } diff --git a/etc/parameters/head.P0000074A09S31C00037.json b/etc/parameters/head.P0000074A09S31C00037.json index 7cdfd420ab..e2eee1f6e9 100644 --- a/etc/parameters/head.P0000074A09S31C00037.json +++ b/etc/parameters/head.P0000074A09S31C00037.json @@ -2,12 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -0.8664080500602722, 3.553433418273926, -0.33780813217163086 + -3.7042431831359863, 4.5806427001953125, 1.1136245727539062 ] }, "vision_top": { "extrinsic_rotations": [ - -0.8014833927154541, 3.4765684604644775, -0.4619362950325012 + -4.110447883605957, 4.721715927124023, -1.4346160888671875 ] } } diff --git a/etc/parameters/head.P0000074A09S31T00003.json b/etc/parameters/head.P0000074A09S31T00003.json index f76ad14ca9..43bdd6566c 100644 --- a/etc/parameters/head.P0000074A09S31T00003.json +++ b/etc/parameters/head.P0000074A09S31T00003.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -3.411283493041992, - -1.2553954124450684, - 0.3223353624343872 + -3.5326740741729736, -3.0798349380493164, 0.040860772132873535 ] }, "vision_top": { "extrinsic_rotations": [ - -4.658981800079346, - -1.7291531562805176, - 1.808822751045227 + -4.496262073516846, -3.341855525970459, 1.0221058130264282 ] } } diff --git a/etc/parameters/head.P0000074A10S41M00040.json b/etc/parameters/head.P0000074A10S41M00040.json index 3775746d0a..939d8e6004 100644 --- a/etc/parameters/head.P0000074A10S41M00040.json +++ b/etc/parameters/head.P0000074A10S41M00040.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -4.511622428894043, - -2.427844524383545, - 0.01938164234161377 + -4.656322956085205, -1.4568310976028442, 0.4995846748352051 ] }, "vision_top": { "extrinsic_rotations": [ - -6.188063621520996, - -0.9570738673210144, - 1.2032711505889893 + -6.169203281402588, -0.28863340616226196, 1.1745715141296387 ] } } diff --git a/etc/parameters/head.P0000074A10S41M00047.json b/etc/parameters/head.P0000074A10S41M00047.json index 9e613bd77c..838954c09a 100644 --- a/etc/parameters/head.P0000074A10S41M00047.json +++ b/etc/parameters/head.P0000074A10S41M00047.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -4.459723949432373, - -1.5433313846588135, - -1.3483929634094238 + -4.755054950714111, 0.6511008739471436, -0.3200814127922058 ] }, "vision_top": { "extrinsic_rotations": [ - -6.355825901031494, - -0.49191176891326904, - -1.0342803001403809 + -6.378819465637207, 1.1614716053009033, -0.7613387703895569 ] } } diff --git a/etc/parameters/head.P0000074A10S41M00048.json b/etc/parameters/head.P0000074A10S41M00048.json index c493bed4d0..1a89f095c3 100644 --- a/etc/parameters/head.P0000074A10S41M00048.json +++ b/etc/parameters/head.P0000074A10S41M00048.json @@ -2,12 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - 0.5848163366317749, 1.0660958290100098, -0.8569559454917908 + -3.8277313709259033, 0.7709097862243652, -0.12641429901123047 ] }, "vision_top": { "extrinsic_rotations": [ - -1.2892045974731445, 3.788731098175049, 0.5328315496444702 + -5.975536346435547, 2.511253833770752, -0.15128731727600098 ] } } diff --git a/tools/behavior_simulator/src/cycler.rs b/tools/behavior_simulator/src/cycler.rs new file mode 100644 index 0000000000..2aabbe0df7 --- /dev/null +++ b/tools/behavior_simulator/src/cycler.rs @@ -0,0 +1,382 @@ +use std::{collections::BTreeMap, sync::Arc, time::SystemTime}; + +use color_eyre::{eyre::WrapErr, Result}; +use control::{ + active_vision::{self, ActiveVision}, + ball_state_composer::{self, BallStateComposer}, + behavior::node::{self, Behavior}, + kick_selector::{self, KickSelector}, + motion::look_around::LookAround, + role_assignment::{self, RoleAssignment}, + rule_obstacle_composer::RuleObstacleComposer, + search_suggestor::SearchSuggestor, + time_to_reach_kick_position::{self, TimeToReachKickPosition}, + world_state_composer::{self, WorldStateComposer}, +}; + +use framework::{AdditionalOutput, PerceptionInput}; +use serde::{Deserialize, Serialize}; +use serialize_hierarchy::SerializeHierarchy; +use tokio::sync::Notify; +use types::messages::IncomingMessage; + +use crate::{ + interfake::Interfake, + structs::{ + control::{AdditionalOutputs, CyclerState, MainOutputs}, + Parameters, + }, +}; + +#[derive(Clone, Default, Serialize, Deserialize, SerializeHierarchy)] +pub struct Database { + pub main_outputs: MainOutputs, + pub additional_outputs: AdditionalOutputs, +} + +pub struct BehaviorCycler { + hardware_interface: Arc, + own_changed: Arc, + search_suggestor: SearchSuggestor, + active_vision: ActiveVision, + ball_state_composer: BallStateComposer, + behavior: Behavior, + kick_selector: KickSelector, + look_around: LookAround, + role_assignment: RoleAssignment, + rule_obstacle_composer: RuleObstacleComposer, + world_state_composer: WorldStateComposer, + time_to_reach_kick_position: TimeToReachKickPosition, +} + +impl BehaviorCycler { + pub fn new( + hardware_interface: Arc, + own_changed: Arc, + parameters: &Parameters, + ) -> Result { + let search_suggestor = control::search_suggestor::SearchSuggestor::new( + control::search_suggestor::CreationContext::new( + ¶meters.field_dimensions, + ¶meters.search_suggestor, + ), + ) + .wrap_err("failed to create node `SearchSuggestor`")?; + let time_to_reach_kick_position = + TimeToReachKickPosition::new(time_to_reach_kick_position::CreationContext {}) + .wrap_err("failed to create node `TimeToReachKickPosition`")?; + let active_vision = ActiveVision::new(active_vision::CreationContext::new( + ¶meters.field_dimensions, + )) + .wrap_err("failed to create node `ActiveVision`")?; + let ball_state_composer = BallStateComposer::new(ball_state_composer::CreationContext {}) + .wrap_err("failed to create node `BallStateComposer`")?; + let behavior = Behavior::new(node::CreationContext::new()) + .wrap_err("failed to create node `Behavior`")?; + let kick_selector = KickSelector::new(kick_selector::CreationContext {}) + .wrap_err("failed to create node `KickSelector`")?; + let look_around = control::motion::look_around::LookAround::new( + control::motion::look_around::CreationContext::new(), + ) + .wrap_err("failed to create node `LookAround`")?; + let role_assignment = RoleAssignment::new(role_assignment::CreationContext::new()) + .wrap_err("failed to create node `RoleAssignment`")?; + let rule_obstacle_composer = control::rule_obstacle_composer::RuleObstacleComposer::new( + control::rule_obstacle_composer::CreationContext {}, + ) + .wrap_err("failed to create node `RuleObstacleComposer`")?; + let world_state_composer = + WorldStateComposer::new(world_state_composer::CreationContext::new()) + .wrap_err("failed to create node `WorldStateComposer`")?; + + Ok(Self { + hardware_interface, + own_changed, + search_suggestor, + active_vision, + time_to_reach_kick_position, + ball_state_composer, + behavior, + kick_selector, + look_around, + role_assignment, + rule_obstacle_composer, + world_state_composer, + }) + } + + pub fn cycle( + &mut self, + own_database: &mut Database, + cycler_state: &mut CyclerState, + parameters: &Parameters, + incoming_messages: BTreeMap>>, + ) -> Result<()> { + let main_outputs = { + self.search_suggestor + .cycle(control::search_suggestor::CycleContext::new( + ¶meters.search_suggestor, + own_database.main_outputs.ball_position.as_ref(), + &own_database.main_outputs.hypothetical_ball_positions, + own_database.main_outputs.ground_to_field.as_ref(), + framework::AdditionalOutput::new( + true, + &mut own_database.additional_outputs.ball_search_heatmap, + ), + )) + .wrap_err("failed to execute cycle of `SearchSuggestor`")? + }; + own_database.main_outputs.suggested_search_position = + main_outputs.suggested_search_position.value; + + if own_database + .main_outputs + .filtered_game_controller_state + .as_ref() + .is_some() + { + let main_outputs = { + self.rule_obstacle_composer + .cycle(control::rule_obstacle_composer::CycleContext::new( + own_database + .main_outputs + .filtered_game_controller_state + .as_ref() + .unwrap(), + own_database.main_outputs.ball_state.as_ref(), + ¶meters.rule_obstacles.center_circle_obstacle_increase, + ¶meters.field_dimensions, + ¶meters.rule_obstacles.free_kick_obstacle_radius, + ¶meters.rule_obstacles.penaltykick_box_extension, + )) + .wrap_err("failed to execute cycle of node `RuleObstacleComposer`")? + }; + own_database.main_outputs.rule_obstacles = main_outputs.rule_obstacles.value; + } else { + own_database.main_outputs.rule_obstacles = Default::default(); + } + { + let main_outputs = self + .role_assignment + .cycle(role_assignment::CycleContext::new( + own_database.main_outputs.ball_position.as_ref(), + &own_database.main_outputs.fall_state, + own_database + .main_outputs + .filtered_game_controller_state + .as_ref(), + &own_database.main_outputs.primary_state, + own_database.main_outputs.ground_to_field.as_ref(), + &own_database.main_outputs.cycle_time, + PerceptionInput { + persistent: incoming_messages, + temporary: Default::default(), + }, + None, + &mut cycler_state.time_to_reach_kick_position, + ¶meters.field_dimensions, + parameters.role_assignment.forced_role.as_ref(), + ¶meters + .role_assignment + .keeper_replacementkeeper_switch_time, + ¶meters.localization.initial_poses, + ¶meters.behavior.optional_roles, + ¶meters.player_number, + ¶meters.spl_network, + &self.hardware_interface, + )) + .wrap_err("failed to execute cycle of node `RoleAssignment`")?; + own_database.main_outputs.team_ball = main_outputs.team_ball.value; + own_database.main_outputs.network_robot_obstacles = + main_outputs.network_robot_obstacles.value; + own_database.main_outputs.role = main_outputs.role.value; + } + { + let main_outputs = self + .ball_state_composer + .cycle(ball_state_composer::CycleContext::new( + &own_database.main_outputs.cycle_time, + own_database.main_outputs.ball_position.as_ref(), + own_database.main_outputs.penalty_shot_direction.as_ref(), + own_database.main_outputs.ground_to_field.as_ref(), + own_database.main_outputs.team_ball.as_ref(), + &own_database.main_outputs.primary_state, + own_database + .main_outputs + .filtered_game_controller_state + .as_ref(), + ¶meters.field_dimensions, + )) + .wrap_err("failed to execute cycle of node `BallStateComposer`")?; + own_database.main_outputs.ball_state = main_outputs.ball_state.value; + own_database.main_outputs.rule_ball_state = main_outputs.rule_ball_state.value; + } + + { + let main_outputs = self + .active_vision + .cycle(active_vision::CycleContext::new( + own_database.main_outputs.ball_state.as_ref(), + own_database.main_outputs.ball_state.as_ref(), + &own_database.main_outputs.cycle_time, + &own_database.main_outputs.obstacles, + ¶meters.behavior.look_action, + own_database.main_outputs.ground_to_field.as_ref(), + )) + .wrap_err("failed to execute cycle of node `ActiveVision`")?; + own_database.main_outputs.position_of_interest = + main_outputs.position_of_interest.value; + } + { + if own_database.main_outputs.ground_to_field.as_ref().is_some() + && own_database.main_outputs.ball_state.as_ref().is_some() + { + let main_outputs = { + self.kick_selector + .cycle(control::kick_selector::CycleContext::new( + own_database.main_outputs.ground_to_field.as_ref().unwrap(), + own_database.main_outputs.ball_state.as_ref().unwrap(), + &own_database.main_outputs.obstacles, + own_database + .main_outputs + .filtered_game_controller_state + .as_ref(), + ¶meters.field_dimensions, + ¶meters.in_walk_kicks, + ¶meters.kick_selector.angle_distance_weight, + ¶meters.kick_selector.max_kick_around_obstacle_angle, + ¶meters.kick_selector.kick_pose_obstacle_radius, + ¶meters + .kick_selector + .ball_radius_for_kick_target_selection, + ¶meters.kick_selector.closer_threshold, + ¶meters.kick_selector.find_kick_targets, + ¶meters.kick_selector.goal_accuracy_margin, + ¶meters.precision_kick_timeout, + ¶meters.kick_selector.default_kick_strength, + ¶meters.kick_selector.corner_kick_strength, + framework::AdditionalOutput::new( + true, + &mut own_database.additional_outputs.kick_targets, + ), + framework::AdditionalOutput::new( + true, + &mut own_database.additional_outputs.instant_kick_targets, + ), + )) + .wrap_err("failed to execute cycle of node `KickSelector`")? + }; + own_database.main_outputs.kick_decisions = main_outputs.kick_decisions.value; + own_database.main_outputs.instant_kick_decisions = + main_outputs.instant_kick_decisions.value; + } else { + own_database.main_outputs.kick_decisions = Default::default(); + own_database.main_outputs.instant_kick_decisions = Default::default(); + } + } + { + let main_outputs = self + .world_state_composer + .cycle(world_state_composer::CycleContext::new( + own_database.main_outputs.ball_state.as_ref(), + &own_database.main_outputs.hypothetical_ball_positions, + own_database.main_outputs.rule_ball_state.as_ref(), + own_database + .main_outputs + .filtered_game_controller_state + .as_ref(), + own_database.main_outputs.ground_to_field.as_ref(), + own_database.main_outputs.suggested_search_position.as_ref(), + own_database.main_outputs.kick_decisions.as_ref(), + own_database.main_outputs.instant_kick_decisions.as_ref(), + ¶meters.player_number, + &own_database.main_outputs.fall_state, + &own_database.main_outputs.has_ground_contact, + &own_database.main_outputs.obstacles, + &own_database.main_outputs.rule_obstacles, + &own_database.main_outputs.primary_state, + &own_database.main_outputs.role, + &own_database.main_outputs.position_of_interest, + )) + .wrap_err("failed to execute cycle of node `WorldStateComposer`")?; + own_database.main_outputs.world_state = main_outputs.world_state.value; + } + { + let main_outputs = self + .behavior + .cycle(node::CycleContext::new( + AdditionalOutput::new( + true, + &mut own_database.additional_outputs.path_obstacles, + ), + AdditionalOutput::new( + true, + &mut own_database.additional_outputs.dribble_path_obstacles, + ), + AdditionalOutput::new(true, &mut own_database.additional_outputs.active_action), + own_database.main_outputs.expected_referee_position.as_ref(), + &true, + &own_database.main_outputs.world_state, + &own_database.main_outputs.cycle_time, + ¶meters.behavior, + ¶meters.in_walk_kicks, + ¶meters.field_dimensions, + ¶meters.behavior.lost_ball, + ¶meters.behavior.intercept_ball, + ¶meters.step_planner.max_step_size, + ¶meters.behavior.role_positions.striker_set_position, + ¶meters.precision_kick_timeout, + )) + .wrap_err("failed to execute cycle of node `Behavior`")?; + own_database.main_outputs.motion_command = main_outputs.motion_command.value; + own_database.main_outputs.dribble_path = main_outputs.dribble_path.value; + } + { + let main_outputs = { + self.look_around + .cycle(control::motion::look_around::CycleContext::new( + ¶meters.look_around, + &own_database.main_outputs.motion_command, + &own_database.main_outputs.cycle_time, + AdditionalOutput::new( + true, + &mut own_database.additional_outputs.look_around_mode, + ), + )) + .wrap_err("failed to execute cycle of node `LookAround`")? + }; + own_database.main_outputs.look_around = main_outputs.look_around.value; + } + { + let _main_outputs = self + .time_to_reach_kick_position + .cycle(control::time_to_reach_kick_position::CycleContext::new( + own_database.main_outputs.dribble_path.as_ref(), + &own_database.main_outputs.motion_command, + framework::AdditionalOutput::new( + true, + &mut own_database.additional_outputs.time_to_turn, + ), + framework::AdditionalOutput::new( + true, + &mut own_database + .additional_outputs + .time_to_reach_kick_position_output, + ), + &mut cycler_state.time_to_reach_kick_position, + ¶meters.behavior, + own_database + .main_outputs + .stand_up_back_estimated_remaining_duration + .as_ref(), + own_database + .main_outputs + .stand_up_front_estimated_remaining_duration + .as_ref(), + )) + .wrap_err("failed to execute cycle of `TimeToReachKickPosition`"); + } + self.own_changed.notify_one(); + Ok(()) + } +} diff --git a/tools/twix/src/panels/image_segments.rs b/tools/twix/src/panels/image_segments.rs index 4d7dd83cee..2da0fa6316 100644 --- a/tools/twix/src/panels/image_segments.rs +++ b/tools/twix/src/panels/image_segments.rs @@ -221,6 +221,42 @@ impl Widget for &mut ImageSegmentsPanel { for scanline in scan_lines { for segment in scanline.segments { self.draw_segment(scanline.position as f32, self.direction, segment, &painter); + let ycbcr_color = segment.color; + let rgb = Rgb::from(ycbcr_color); + let start = point![x, segment.start as f32]; + let end = point![x, segment.end as f32]; + let original_color = Color32::from_rgb(rgb.red, rgb.green, rgb.blue); + let high_color = Color32::YELLOW; + let chromaticity = RgChromaticity::from(rgb); + let visualized_color = match self.color_mode { + ColorMode::Original => original_color, + ColorMode::FieldColor => match segment.field_color { + types::color::Intensity::Low => original_color, + types::color::Intensity::High => high_color, + }, + ColorMode::Y => Color32::from_gray(ycbcr_color.y), + ColorMode::Cb => Color32::from_gray(ycbcr_color.cb), + ColorMode::Cr => Color32::from_gray(ycbcr_color.cr), + ColorMode::Red => Color32::from_gray(rgb.red), + ColorMode::Green => Color32::from_gray(rgb.green), + ColorMode::Blue => Color32::from_gray(rgb.blue), + ColorMode::RedChromaticity => { + Color32::from_gray((chromaticity.red * 255.0) as u8) + } + ColorMode::GreenChromaticity => { + Color32::from_gray((chromaticity.green * 255.0) as u8) + } + ColorMode::BlueChromaticity => Color32::from_gray( + ((1.0 - chromaticity.red - chromaticity.green) * 255.0) as u8, + ), + }; + painter.line_segment(start, end, Stroke::new(4.0, visualized_color)); + painter.line_segment( + start - vector![1.0, 0.0], + start + vector![1.0, 0.0], + Stroke::new(1.0, Color32::from_rgb(0, 0, 255)), + ); +>>>>>>> 798657c7 (use other kick_decision parameters for PenaltyShootout) } } From 0109a2b2bba88a555fac7ff9feba1574b8565c42 Mon Sep 17 00:00:00 2001 From: schluis Date: Fri, 19 Jul 2024 10:23:19 +0200 Subject: [PATCH 02/16] tune --- etc/parameters/default.json | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/etc/parameters/default.json b/etc/parameters/default.json index 9e42d09cfd..5e7658d15c 100644 --- a/etc/parameters/default.json +++ b/etc/parameters/default.json @@ -1071,16 +1071,14 @@ "position": [-0.22, -0.04], "position_offset": [0.0, 0.0], "orientation": 0.0, - "reached_thresholds": [0.06, 0.03, 0.1], - "precision_kick_reached_thresholds": [ - 0.05999999865889549, 0.009999999776482582, 0.015000000596046448 - ], + "reached_thresholds": [0.04, 0.03, 0.1], + "precision_kick_reached_thresholds": [0.02, 0.01, 0.015], "shot_distance": 4.0, "enabled": true }, "turn": { - "position": [-0.15, -0.08], - "orientation": 0.78, + "position": [-0.145, -0.08], + "orientation": 0.9, "reached_thresholds": [0.04, 0.04, 0.1], "precision_kick_reached_thresholds": [0.0, 0.0, 0.0], "shot_distance": 3.5, From be29182a570ab8ad1ebea1570a80ef970baa68a8 Mon Sep 17 00:00:00 2001 From: schluis Date: Fri, 19 Jul 2024 10:26:18 +0200 Subject: [PATCH 03/16] rebase fix --- tools/twix/src/panels/image_segments.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/twix/src/panels/image_segments.rs b/tools/twix/src/panels/image_segments.rs index 2da0fa6316..5af5c00ff2 100644 --- a/tools/twix/src/panels/image_segments.rs +++ b/tools/twix/src/panels/image_segments.rs @@ -256,7 +256,6 @@ impl Widget for &mut ImageSegmentsPanel { start + vector![1.0, 0.0], Stroke::new(1.0, Color32::from_rgb(0, 0, 255)), ); ->>>>>>> 798657c7 (use other kick_decision parameters for PenaltyShootout) } } From 764102a23342017088bf75e0457fc6f07f685abc Mon Sep 17 00:00:00 2001 From: schluis Date: Fri, 19 Jul 2024 10:27:52 +0200 Subject: [PATCH 04/16] format head-jsons --- etc/parameters/head.P0000074A04S8CP00037.json | 8 ++------ etc/parameters/head.P0000074A04S8CP00040.json | 8 ++------ etc/parameters/head.P0000074A04S8CP00042.json | 8 ++------ etc/parameters/head.P0000074A05S99M00009.json | 8 ++------ etc/parameters/head.P0000074A06S9A900006.json | 6 ++---- etc/parameters/head.P0000074A09S28J00025.json | 8 ++------ etc/parameters/head.P0000074A09S31C00023.json | 8 ++------ etc/parameters/head.P0000074A09S31C00028.json | 8 ++------ etc/parameters/head.P0000074A09S31C00029.json | 8 ++------ 9 files changed, 18 insertions(+), 52 deletions(-) diff --git a/etc/parameters/head.P0000074A04S8CP00037.json b/etc/parameters/head.P0000074A04S8CP00037.json index 8182b311cd..2a7b8098c2 100644 --- a/etc/parameters/head.P0000074A04S8CP00037.json +++ b/etc/parameters/head.P0000074A04S8CP00037.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -0.004406869411468506, - 1.5834367275238037, - -0.07958471775054932 + -0.004406869411468506, 1.5834367275238037, -0.07958471775054932 ] }, "vision_top": { "extrinsic_rotations": [ - -1.3073114156723022, - 0.08924603462219238, - 0.2492666244506836 + -1.3073114156723022, 0.08924603462219238, 0.2492666244506836 ] } } diff --git a/etc/parameters/head.P0000074A04S8CP00040.json b/etc/parameters/head.P0000074A04S8CP00040.json index 0c083e89ab..89cf3ca2c1 100644 --- a/etc/parameters/head.P0000074A04S8CP00040.json +++ b/etc/parameters/head.P0000074A04S8CP00040.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -0.7594603300094604, - 3.270902156829834, - -1.1424583196640017 + -0.7594603300094604, 3.270902156829834, -1.1424583196640017 ] }, "vision_top": { "extrinsic_rotations": [ - -1.3164067268371582, - -0.6832864880561829, - -0.7101461291313171 + -1.3164067268371582, -0.6832864880561829, -0.7101461291313171 ] } } diff --git a/etc/parameters/head.P0000074A04S8CP00042.json b/etc/parameters/head.P0000074A04S8CP00042.json index ee2194029c..d30c780986 100644 --- a/etc/parameters/head.P0000074A04S8CP00042.json +++ b/etc/parameters/head.P0000074A04S8CP00042.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -3.734440505504608, - -2.069501280784607, - -0.6296610832214355 + -3.734440505504608, -2.069501280784607, -0.6296610832214355 ] }, "vision_top": { "extrinsic_rotations": [ - -6.120299398899078, - -1.477270424365997, - 0.05594372749328613 + -6.120299398899078, -1.477270424365997, 0.05594372749328613 ] } } diff --git a/etc/parameters/head.P0000074A05S99M00009.json b/etc/parameters/head.P0000074A05S99M00009.json index 604b12ba43..8061879f79 100644 --- a/etc/parameters/head.P0000074A05S99M00009.json +++ b/etc/parameters/head.P0000074A05S99M00009.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -4.245383441448212, - -1.1069297790527344, - -0.3210371732711792 + -4.245383441448212, -1.1069297790527344, -0.3210371732711792 ] }, "vision_top": { "extrinsic_rotations": [ - -4.7881178855896, - -0.710999071598053, - 0.31591951847076416 + -4.7881178855896, -0.710999071598053, 0.31591951847076416 ] } } diff --git a/etc/parameters/head.P0000074A06S9A900006.json b/etc/parameters/head.P0000074A06S9A900006.json index 42fd3995fa..6ac2adf47a 100644 --- a/etc/parameters/head.P0000074A06S9A900006.json +++ b/etc/parameters/head.P0000074A06S9A900006.json @@ -1,13 +1,11 @@ { "camera_matrix_parameters": { "vision_bottom": { - "extrinsic_rotations": [ - -0.9637901186943054, 1.830570101737976, -0.9879335761070251 - ] + "extrinsic_rotations": [0.0, 1.0669934749603271, -0.004975497722625732] }, "vision_top": { "extrinsic_rotations": [ - -2.891505241394043, 4.0365118980407715, -0.8275419473648071 + -1.8400973081588745, 2.4051421880722046, 0.2623414993286133 ] } } diff --git a/etc/parameters/head.P0000074A09S28J00025.json b/etc/parameters/head.P0000074A09S28J00025.json index c8f3b41cee..7758c4646c 100644 --- a/etc/parameters/head.P0000074A09S28J00025.json +++ b/etc/parameters/head.P0000074A09S28J00025.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -5.823334217071533, - 2.5707240104675293, - 0.8289295434951782 + -6.421729564666748, 2.290815830230713, -0.1414141058921814 ] }, "vision_top": { "extrinsic_rotations": [ - -6.703361511230469, - 3.664271354675293, - -0.6644251942634583 + -6.871341228485107, 3.9096431732177734, -0.40609270334243774 ] } } diff --git a/etc/parameters/head.P0000074A09S31C00023.json b/etc/parameters/head.P0000074A09S31C00023.json index d48c9dbab9..a9164987b1 100644 --- a/etc/parameters/head.P0000074A09S31C00023.json +++ b/etc/parameters/head.P0000074A09S31C00023.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -3.8449547290802, - 0.8310127258300781, - -0.8390218019485474 + -4.24737274646759, -0.42051762342453, 0.5215591192245483 ] }, "vision_top": { "extrinsic_rotations": [ - -5.334465980529785, - 1.0237079858779907, - -0.3370177745819092 + -5.879413604736328, -0.2684551477432251, 1.308302879333496 ] } } diff --git a/etc/parameters/head.P0000074A09S31C00028.json b/etc/parameters/head.P0000074A09S31C00028.json index 230c288a84..a4067134be 100644 --- a/etc/parameters/head.P0000074A09S31C00028.json +++ b/etc/parameters/head.P0000074A09S31C00028.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -0.4714089632034302, - 2.6275885105133057, - -0.05077689886093139 + -0.38102924823760986, 1.616397500038147, -0.6749475002288818 ] }, "vision_top": { "extrinsic_rotations": [ - -2.88857364654541, - 3.5942726135253906, - -1.3512763977050781 + -3.1643271446228027, 2.430558681488037, -1.2855684757232666 ] } } diff --git a/etc/parameters/head.P0000074A09S31C00029.json b/etc/parameters/head.P0000074A09S31C00029.json index fa2ea99214..b25edecf39 100644 --- a/etc/parameters/head.P0000074A09S31C00029.json +++ b/etc/parameters/head.P0000074A09S31C00029.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -4.739768981933594, - 1.971403956413269, - 0.6792354583740234 + -4.096397399902344, 1.5083616971969604, 0.36477863788604736 ] }, "vision_top": { "extrinsic_rotations": [ - -4.132087707519531, - 2.4408602714538574, - -0.560128390789032 + -4.605247497558594, 1.7912685871124268, -0.8745011687278748 ] } } From 4a92b3a951e147b15bec0984682e8ea1e675b787 Mon Sep 17 00:00:00 2001 From: schluis Date: Fri, 19 Jul 2024 10:53:51 +0200 Subject: [PATCH 05/16] format head-jsons (really) --- etc/parameters/head.P0000074A03S85B00016.json | 8 ++++++-- etc/parameters/head.P0000074A04S8CP00037.json | 8 ++++++-- etc/parameters/head.P0000074A04S8CP00040.json | 8 ++++++-- etc/parameters/head.P0000074A04S8CP00042.json | 8 ++++++-- etc/parameters/head.P0000074A05S98U00019.json | 8 ++++++-- etc/parameters/head.P0000074A05S99M00009.json | 8 ++++++-- etc/parameters/head.P0000074A06S9A900006.json | 10 ++++++++-- etc/parameters/head.P0000074A09S28J00025.json | 8 ++++++-- etc/parameters/head.P0000074A09S31C00023.json | 8 ++++++-- etc/parameters/head.P0000074A09S31C00028.json | 8 ++++++-- etc/parameters/head.P0000074A09S31C00029.json | 8 ++++++-- etc/parameters/head.P0000074A09S31C00037.json | 8 ++++++-- etc/parameters/head.P0000074A09S31T00003.json | 8 ++++++-- etc/parameters/head.P0000074A10S41M00040.json | 8 ++++++-- etc/parameters/head.P0000074A10S41M00047.json | 8 ++++++-- etc/parameters/head.P0000074A10S41M00048.json | 8 ++++++-- 16 files changed, 98 insertions(+), 32 deletions(-) diff --git a/etc/parameters/head.P0000074A03S85B00016.json b/etc/parameters/head.P0000074A03S85B00016.json index 7630198191..9afe203e69 100644 --- a/etc/parameters/head.P0000074A03S85B00016.json +++ b/etc/parameters/head.P0000074A03S85B00016.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -2.72135853767395, 3.822335720062256, -0.8703884482383728 + -1.69705331325531, + -0.34364014863967896, + -0.41124433279037476 ] }, "vision_top": { "extrinsic_rotations": [ - -4.46786642074585, 0.42489588260650635, -0.18990039825439453 + -4.3482441902160645, + -0.47342777252197266, + 0.0392228364944458 ] } } diff --git a/etc/parameters/head.P0000074A04S8CP00037.json b/etc/parameters/head.P0000074A04S8CP00037.json index 2a7b8098c2..8182b311cd 100644 --- a/etc/parameters/head.P0000074A04S8CP00037.json +++ b/etc/parameters/head.P0000074A04S8CP00037.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -0.004406869411468506, 1.5834367275238037, -0.07958471775054932 + -0.004406869411468506, + 1.5834367275238037, + -0.07958471775054932 ] }, "vision_top": { "extrinsic_rotations": [ - -1.3073114156723022, 0.08924603462219238, 0.2492666244506836 + -1.3073114156723022, + 0.08924603462219238, + 0.2492666244506836 ] } } diff --git a/etc/parameters/head.P0000074A04S8CP00040.json b/etc/parameters/head.P0000074A04S8CP00040.json index 89cf3ca2c1..0c083e89ab 100644 --- a/etc/parameters/head.P0000074A04S8CP00040.json +++ b/etc/parameters/head.P0000074A04S8CP00040.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -0.7594603300094604, 3.270902156829834, -1.1424583196640017 + -0.7594603300094604, + 3.270902156829834, + -1.1424583196640017 ] }, "vision_top": { "extrinsic_rotations": [ - -1.3164067268371582, -0.6832864880561829, -0.7101461291313171 + -1.3164067268371582, + -0.6832864880561829, + -0.7101461291313171 ] } } diff --git a/etc/parameters/head.P0000074A04S8CP00042.json b/etc/parameters/head.P0000074A04S8CP00042.json index d30c780986..ee2194029c 100644 --- a/etc/parameters/head.P0000074A04S8CP00042.json +++ b/etc/parameters/head.P0000074A04S8CP00042.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -3.734440505504608, -2.069501280784607, -0.6296610832214355 + -3.734440505504608, + -2.069501280784607, + -0.6296610832214355 ] }, "vision_top": { "extrinsic_rotations": [ - -6.120299398899078, -1.477270424365997, 0.05594372749328613 + -6.120299398899078, + -1.477270424365997, + 0.05594372749328613 ] } } diff --git a/etc/parameters/head.P0000074A05S98U00019.json b/etc/parameters/head.P0000074A05S98U00019.json index b5aff4f500..53a1757fb0 100644 --- a/etc/parameters/head.P0000074A05S98U00019.json +++ b/etc/parameters/head.P0000074A05S98U00019.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -1.094749927520752, 6.574273109436035, -0.9893721342086792 + -1.094749927520752, + 6.574273109436035, + -0.9893721342086792 ] }, "vision_top": { "extrinsic_rotations": [ - -3.026418685913086, 5.58524227142334, -0.7207059860229492 + -3.026418685913086, + 5.58524227142334, + -0.7207059860229492 ] } } diff --git a/etc/parameters/head.P0000074A05S99M00009.json b/etc/parameters/head.P0000074A05S99M00009.json index 8061879f79..604b12ba43 100644 --- a/etc/parameters/head.P0000074A05S99M00009.json +++ b/etc/parameters/head.P0000074A05S99M00009.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -4.245383441448212, -1.1069297790527344, -0.3210371732711792 + -4.245383441448212, + -1.1069297790527344, + -0.3210371732711792 ] }, "vision_top": { "extrinsic_rotations": [ - -4.7881178855896, -0.710999071598053, 0.31591951847076416 + -4.7881178855896, + -0.710999071598053, + 0.31591951847076416 ] } } diff --git a/etc/parameters/head.P0000074A06S9A900006.json b/etc/parameters/head.P0000074A06S9A900006.json index 6ac2adf47a..af30a00a3f 100644 --- a/etc/parameters/head.P0000074A06S9A900006.json +++ b/etc/parameters/head.P0000074A06S9A900006.json @@ -1,11 +1,17 @@ { "camera_matrix_parameters": { "vision_bottom": { - "extrinsic_rotations": [0.0, 1.0669934749603271, -0.004975497722625732] + "extrinsic_rotations": [ + 0.0, + 1.0669934749603271, + -0.004975497722625732 + ] }, "vision_top": { "extrinsic_rotations": [ - -1.8400973081588745, 2.4051421880722046, 0.2623414993286133 + -1.8400973081588745, + 2.4051421880722046, + 0.2623414993286133 ] } } diff --git a/etc/parameters/head.P0000074A09S28J00025.json b/etc/parameters/head.P0000074A09S28J00025.json index 7758c4646c..e20bdf800c 100644 --- a/etc/parameters/head.P0000074A09S28J00025.json +++ b/etc/parameters/head.P0000074A09S28J00025.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -6.421729564666748, 2.290815830230713, -0.1414141058921814 + -6.421729564666748, + 2.290815830230713, + -0.1414141058921814 ] }, "vision_top": { "extrinsic_rotations": [ - -6.871341228485107, 3.9096431732177734, -0.40609270334243774 + -6.871341228485107, + 3.9096431732177734, + -0.40609270334243774 ] } } diff --git a/etc/parameters/head.P0000074A09S31C00023.json b/etc/parameters/head.P0000074A09S31C00023.json index a9164987b1..a94b187039 100644 --- a/etc/parameters/head.P0000074A09S31C00023.json +++ b/etc/parameters/head.P0000074A09S31C00023.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -4.24737274646759, -0.42051762342453, 0.5215591192245483 + -4.24737274646759, + 0.42051762342453, + 0.5215591192245483 ] }, "vision_top": { "extrinsic_rotations": [ - -5.879413604736328, -0.2684551477432251, 1.308302879333496 + -5.879413604736328, + -0.2684551477432251, + 1.308302879333496 ] } } diff --git a/etc/parameters/head.P0000074A09S31C00028.json b/etc/parameters/head.P0000074A09S31C00028.json index a4067134be..21d460e93b 100644 --- a/etc/parameters/head.P0000074A09S31C00028.json +++ b/etc/parameters/head.P0000074A09S31C00028.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -0.38102924823760986, 1.616397500038147, -0.6749475002288818 + -0.38102924823760986, + 1.616397500038147, + -0.6749475002288818 ] }, "vision_top": { "extrinsic_rotations": [ - -3.1643271446228027, 2.430558681488037, -1.2855684757232666 + -3.1643271446228027, + 2.430558681488037, + -1.2855684757232666 ] } } diff --git a/etc/parameters/head.P0000074A09S31C00029.json b/etc/parameters/head.P0000074A09S31C00029.json index b25edecf39..eee3e79af6 100644 --- a/etc/parameters/head.P0000074A09S31C00029.json +++ b/etc/parameters/head.P0000074A09S31C00029.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -4.096397399902344, 1.5083616971969604, 0.36477863788604736 + -4.096397399902344, + 1.5083616971969604, + 0.36477863788604736 ] }, "vision_top": { "extrinsic_rotations": [ - -4.605247497558594, 1.7912685871124268, -0.8745011687278748 + -4.605247497558594, + 1.7912685871124268, + -0.8745011687278748 ] } } diff --git a/etc/parameters/head.P0000074A09S31C00037.json b/etc/parameters/head.P0000074A09S31C00037.json index e2eee1f6e9..1a37049410 100644 --- a/etc/parameters/head.P0000074A09S31C00037.json +++ b/etc/parameters/head.P0000074A09S31C00037.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -3.7042431831359863, 4.5806427001953125, 1.1136245727539062 + -3.7042431831359863, + 4.5806427001953125, + 1.1136245727539062 ] }, "vision_top": { "extrinsic_rotations": [ - -4.110447883605957, 4.721715927124023, -1.4346160888671875 + -4.110447883605957, + 4.721715927124023, + -1.4346160888671875 ] } } diff --git a/etc/parameters/head.P0000074A09S31T00003.json b/etc/parameters/head.P0000074A09S31T00003.json index 43bdd6566c..699cd38deb 100644 --- a/etc/parameters/head.P0000074A09S31T00003.json +++ b/etc/parameters/head.P0000074A09S31T00003.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -3.5326740741729736, -3.0798349380493164, 0.040860772132873535 + -3.5326740741729736, + -3.0798349380493164, + 0.040860772132873535 ] }, "vision_top": { "extrinsic_rotations": [ - -4.496262073516846, -3.341855525970459, 1.0221058130264282 + -4.496262073516846, + -3.341855525970459, + 1.0221058130264282 ] } } diff --git a/etc/parameters/head.P0000074A10S41M00040.json b/etc/parameters/head.P0000074A10S41M00040.json index 939d8e6004..9cc2f9489f 100644 --- a/etc/parameters/head.P0000074A10S41M00040.json +++ b/etc/parameters/head.P0000074A10S41M00040.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -4.656322956085205, -1.4568310976028442, 0.4995846748352051 + -4.656322956085205, + -1.4568310976028442, + 0.4995846748352051 ] }, "vision_top": { "extrinsic_rotations": [ - -6.169203281402588, -0.28863340616226196, 1.1745715141296387 + -6.169203281402588, + -0.28863340616226196, + 1.1745715141296387 ] } } diff --git a/etc/parameters/head.P0000074A10S41M00047.json b/etc/parameters/head.P0000074A10S41M00047.json index 838954c09a..2231539be6 100644 --- a/etc/parameters/head.P0000074A10S41M00047.json +++ b/etc/parameters/head.P0000074A10S41M00047.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -4.755054950714111, 0.6511008739471436, -0.3200814127922058 + -4.755054950714111, + 0.6511008739471436, + -0.3200814127922058 ] }, "vision_top": { "extrinsic_rotations": [ - -6.378819465637207, 1.1614716053009033, -0.7613387703895569 + -6.378819465637207, + 1.1614716053009033, + -0.7613387703895569 ] } } diff --git a/etc/parameters/head.P0000074A10S41M00048.json b/etc/parameters/head.P0000074A10S41M00048.json index 1a89f095c3..8242d38a0f 100644 --- a/etc/parameters/head.P0000074A10S41M00048.json +++ b/etc/parameters/head.P0000074A10S41M00048.json @@ -2,12 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -3.8277313709259033, 0.7709097862243652, -0.12641429901123047 + -3.8277313709259033, + 0.7709097862243652, + -0.12641429901123047 ] }, "vision_top": { "extrinsic_rotations": [ - -5.975536346435547, 2.511253833770752, -0.15128731727600098 + -5.975536346435547, + 2.511253833770752, + -0.15128731727600098 ] } } From d34b7c49904329d14c8a6fdcfa832039c4403149 Mon Sep 17 00:00:00 2001 From: schluis Date: Fri, 19 Jul 2024 11:20:28 +0200 Subject: [PATCH 06/16] format head-jsons (really) --- etc/parameters/head.P0000074A06S9A900006.json | 2 +- etc/parameters/head.P0000074A09S31C00023.json | 2 +- etc/parameters/head.P0000074A10S41M00048.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/etc/parameters/head.P0000074A06S9A900006.json b/etc/parameters/head.P0000074A06S9A900006.json index af30a00a3f..344d25dbe5 100644 --- a/etc/parameters/head.P0000074A06S9A900006.json +++ b/etc/parameters/head.P0000074A06S9A900006.json @@ -5,7 +5,7 @@ 0.0, 1.0669934749603271, -0.004975497722625732 - ] + ] }, "vision_top": { "extrinsic_rotations": [ diff --git a/etc/parameters/head.P0000074A09S31C00023.json b/etc/parameters/head.P0000074A09S31C00023.json index a94b187039..fff6ae89d0 100644 --- a/etc/parameters/head.P0000074A09S31C00023.json +++ b/etc/parameters/head.P0000074A09S31C00023.json @@ -3,7 +3,7 @@ "vision_bottom": { "extrinsic_rotations": [ -4.24737274646759, - 0.42051762342453, + -0.42051762342453, 0.5215591192245483 ] }, diff --git a/etc/parameters/head.P0000074A10S41M00048.json b/etc/parameters/head.P0000074A10S41M00048.json index 8242d38a0f..4c5bbf93a2 100644 --- a/etc/parameters/head.P0000074A10S41M00048.json +++ b/etc/parameters/head.P0000074A10S41M00048.json @@ -3,7 +3,7 @@ "vision_bottom": { "extrinsic_rotations": [ -3.8277313709259033, - 0.7709097862243652, + 0.7709097862243652, -0.12641429901123047 ] }, From 24c7dbc842745ea6d72c1eb3b92890334a10edc9 Mon Sep 17 00:00:00 2001 From: schluis Date: Fri, 19 Jul 2024 12:10:44 +0200 Subject: [PATCH 07/16] fix rebase' --- tools/twix/src/panels/image_segments.rs | 35 ------------------------- 1 file changed, 35 deletions(-) diff --git a/tools/twix/src/panels/image_segments.rs b/tools/twix/src/panels/image_segments.rs index 5af5c00ff2..4d7dd83cee 100644 --- a/tools/twix/src/panels/image_segments.rs +++ b/tools/twix/src/panels/image_segments.rs @@ -221,41 +221,6 @@ impl Widget for &mut ImageSegmentsPanel { for scanline in scan_lines { for segment in scanline.segments { self.draw_segment(scanline.position as f32, self.direction, segment, &painter); - let ycbcr_color = segment.color; - let rgb = Rgb::from(ycbcr_color); - let start = point![x, segment.start as f32]; - let end = point![x, segment.end as f32]; - let original_color = Color32::from_rgb(rgb.red, rgb.green, rgb.blue); - let high_color = Color32::YELLOW; - let chromaticity = RgChromaticity::from(rgb); - let visualized_color = match self.color_mode { - ColorMode::Original => original_color, - ColorMode::FieldColor => match segment.field_color { - types::color::Intensity::Low => original_color, - types::color::Intensity::High => high_color, - }, - ColorMode::Y => Color32::from_gray(ycbcr_color.y), - ColorMode::Cb => Color32::from_gray(ycbcr_color.cb), - ColorMode::Cr => Color32::from_gray(ycbcr_color.cr), - ColorMode::Red => Color32::from_gray(rgb.red), - ColorMode::Green => Color32::from_gray(rgb.green), - ColorMode::Blue => Color32::from_gray(rgb.blue), - ColorMode::RedChromaticity => { - Color32::from_gray((chromaticity.red * 255.0) as u8) - } - ColorMode::GreenChromaticity => { - Color32::from_gray((chromaticity.green * 255.0) as u8) - } - ColorMode::BlueChromaticity => Color32::from_gray( - ((1.0 - chromaticity.red - chromaticity.green) * 255.0) as u8, - ), - }; - painter.line_segment(start, end, Stroke::new(4.0, visualized_color)); - painter.line_segment( - start - vector![1.0, 0.0], - start + vector![1.0, 0.0], - Stroke::new(1.0, Color32::from_rgb(0, 0, 255)), - ); } } From 3c5de7446f9483158e6ceda40e904889e26922a5 Mon Sep 17 00:00:00 2001 From: schluis Date: Fri, 19 Jul 2024 12:12:39 +0200 Subject: [PATCH 08/16] remove behavior cycler --- tools/behavior_simulator/src/cycler.rs | 382 ------------------------- 1 file changed, 382 deletions(-) delete mode 100644 tools/behavior_simulator/src/cycler.rs diff --git a/tools/behavior_simulator/src/cycler.rs b/tools/behavior_simulator/src/cycler.rs deleted file mode 100644 index 2aabbe0df7..0000000000 --- a/tools/behavior_simulator/src/cycler.rs +++ /dev/null @@ -1,382 +0,0 @@ -use std::{collections::BTreeMap, sync::Arc, time::SystemTime}; - -use color_eyre::{eyre::WrapErr, Result}; -use control::{ - active_vision::{self, ActiveVision}, - ball_state_composer::{self, BallStateComposer}, - behavior::node::{self, Behavior}, - kick_selector::{self, KickSelector}, - motion::look_around::LookAround, - role_assignment::{self, RoleAssignment}, - rule_obstacle_composer::RuleObstacleComposer, - search_suggestor::SearchSuggestor, - time_to_reach_kick_position::{self, TimeToReachKickPosition}, - world_state_composer::{self, WorldStateComposer}, -}; - -use framework::{AdditionalOutput, PerceptionInput}; -use serde::{Deserialize, Serialize}; -use serialize_hierarchy::SerializeHierarchy; -use tokio::sync::Notify; -use types::messages::IncomingMessage; - -use crate::{ - interfake::Interfake, - structs::{ - control::{AdditionalOutputs, CyclerState, MainOutputs}, - Parameters, - }, -}; - -#[derive(Clone, Default, Serialize, Deserialize, SerializeHierarchy)] -pub struct Database { - pub main_outputs: MainOutputs, - pub additional_outputs: AdditionalOutputs, -} - -pub struct BehaviorCycler { - hardware_interface: Arc, - own_changed: Arc, - search_suggestor: SearchSuggestor, - active_vision: ActiveVision, - ball_state_composer: BallStateComposer, - behavior: Behavior, - kick_selector: KickSelector, - look_around: LookAround, - role_assignment: RoleAssignment, - rule_obstacle_composer: RuleObstacleComposer, - world_state_composer: WorldStateComposer, - time_to_reach_kick_position: TimeToReachKickPosition, -} - -impl BehaviorCycler { - pub fn new( - hardware_interface: Arc, - own_changed: Arc, - parameters: &Parameters, - ) -> Result { - let search_suggestor = control::search_suggestor::SearchSuggestor::new( - control::search_suggestor::CreationContext::new( - ¶meters.field_dimensions, - ¶meters.search_suggestor, - ), - ) - .wrap_err("failed to create node `SearchSuggestor`")?; - let time_to_reach_kick_position = - TimeToReachKickPosition::new(time_to_reach_kick_position::CreationContext {}) - .wrap_err("failed to create node `TimeToReachKickPosition`")?; - let active_vision = ActiveVision::new(active_vision::CreationContext::new( - ¶meters.field_dimensions, - )) - .wrap_err("failed to create node `ActiveVision`")?; - let ball_state_composer = BallStateComposer::new(ball_state_composer::CreationContext {}) - .wrap_err("failed to create node `BallStateComposer`")?; - let behavior = Behavior::new(node::CreationContext::new()) - .wrap_err("failed to create node `Behavior`")?; - let kick_selector = KickSelector::new(kick_selector::CreationContext {}) - .wrap_err("failed to create node `KickSelector`")?; - let look_around = control::motion::look_around::LookAround::new( - control::motion::look_around::CreationContext::new(), - ) - .wrap_err("failed to create node `LookAround`")?; - let role_assignment = RoleAssignment::new(role_assignment::CreationContext::new()) - .wrap_err("failed to create node `RoleAssignment`")?; - let rule_obstacle_composer = control::rule_obstacle_composer::RuleObstacleComposer::new( - control::rule_obstacle_composer::CreationContext {}, - ) - .wrap_err("failed to create node `RuleObstacleComposer`")?; - let world_state_composer = - WorldStateComposer::new(world_state_composer::CreationContext::new()) - .wrap_err("failed to create node `WorldStateComposer`")?; - - Ok(Self { - hardware_interface, - own_changed, - search_suggestor, - active_vision, - time_to_reach_kick_position, - ball_state_composer, - behavior, - kick_selector, - look_around, - role_assignment, - rule_obstacle_composer, - world_state_composer, - }) - } - - pub fn cycle( - &mut self, - own_database: &mut Database, - cycler_state: &mut CyclerState, - parameters: &Parameters, - incoming_messages: BTreeMap>>, - ) -> Result<()> { - let main_outputs = { - self.search_suggestor - .cycle(control::search_suggestor::CycleContext::new( - ¶meters.search_suggestor, - own_database.main_outputs.ball_position.as_ref(), - &own_database.main_outputs.hypothetical_ball_positions, - own_database.main_outputs.ground_to_field.as_ref(), - framework::AdditionalOutput::new( - true, - &mut own_database.additional_outputs.ball_search_heatmap, - ), - )) - .wrap_err("failed to execute cycle of `SearchSuggestor`")? - }; - own_database.main_outputs.suggested_search_position = - main_outputs.suggested_search_position.value; - - if own_database - .main_outputs - .filtered_game_controller_state - .as_ref() - .is_some() - { - let main_outputs = { - self.rule_obstacle_composer - .cycle(control::rule_obstacle_composer::CycleContext::new( - own_database - .main_outputs - .filtered_game_controller_state - .as_ref() - .unwrap(), - own_database.main_outputs.ball_state.as_ref(), - ¶meters.rule_obstacles.center_circle_obstacle_increase, - ¶meters.field_dimensions, - ¶meters.rule_obstacles.free_kick_obstacle_radius, - ¶meters.rule_obstacles.penaltykick_box_extension, - )) - .wrap_err("failed to execute cycle of node `RuleObstacleComposer`")? - }; - own_database.main_outputs.rule_obstacles = main_outputs.rule_obstacles.value; - } else { - own_database.main_outputs.rule_obstacles = Default::default(); - } - { - let main_outputs = self - .role_assignment - .cycle(role_assignment::CycleContext::new( - own_database.main_outputs.ball_position.as_ref(), - &own_database.main_outputs.fall_state, - own_database - .main_outputs - .filtered_game_controller_state - .as_ref(), - &own_database.main_outputs.primary_state, - own_database.main_outputs.ground_to_field.as_ref(), - &own_database.main_outputs.cycle_time, - PerceptionInput { - persistent: incoming_messages, - temporary: Default::default(), - }, - None, - &mut cycler_state.time_to_reach_kick_position, - ¶meters.field_dimensions, - parameters.role_assignment.forced_role.as_ref(), - ¶meters - .role_assignment - .keeper_replacementkeeper_switch_time, - ¶meters.localization.initial_poses, - ¶meters.behavior.optional_roles, - ¶meters.player_number, - ¶meters.spl_network, - &self.hardware_interface, - )) - .wrap_err("failed to execute cycle of node `RoleAssignment`")?; - own_database.main_outputs.team_ball = main_outputs.team_ball.value; - own_database.main_outputs.network_robot_obstacles = - main_outputs.network_robot_obstacles.value; - own_database.main_outputs.role = main_outputs.role.value; - } - { - let main_outputs = self - .ball_state_composer - .cycle(ball_state_composer::CycleContext::new( - &own_database.main_outputs.cycle_time, - own_database.main_outputs.ball_position.as_ref(), - own_database.main_outputs.penalty_shot_direction.as_ref(), - own_database.main_outputs.ground_to_field.as_ref(), - own_database.main_outputs.team_ball.as_ref(), - &own_database.main_outputs.primary_state, - own_database - .main_outputs - .filtered_game_controller_state - .as_ref(), - ¶meters.field_dimensions, - )) - .wrap_err("failed to execute cycle of node `BallStateComposer`")?; - own_database.main_outputs.ball_state = main_outputs.ball_state.value; - own_database.main_outputs.rule_ball_state = main_outputs.rule_ball_state.value; - } - - { - let main_outputs = self - .active_vision - .cycle(active_vision::CycleContext::new( - own_database.main_outputs.ball_state.as_ref(), - own_database.main_outputs.ball_state.as_ref(), - &own_database.main_outputs.cycle_time, - &own_database.main_outputs.obstacles, - ¶meters.behavior.look_action, - own_database.main_outputs.ground_to_field.as_ref(), - )) - .wrap_err("failed to execute cycle of node `ActiveVision`")?; - own_database.main_outputs.position_of_interest = - main_outputs.position_of_interest.value; - } - { - if own_database.main_outputs.ground_to_field.as_ref().is_some() - && own_database.main_outputs.ball_state.as_ref().is_some() - { - let main_outputs = { - self.kick_selector - .cycle(control::kick_selector::CycleContext::new( - own_database.main_outputs.ground_to_field.as_ref().unwrap(), - own_database.main_outputs.ball_state.as_ref().unwrap(), - &own_database.main_outputs.obstacles, - own_database - .main_outputs - .filtered_game_controller_state - .as_ref(), - ¶meters.field_dimensions, - ¶meters.in_walk_kicks, - ¶meters.kick_selector.angle_distance_weight, - ¶meters.kick_selector.max_kick_around_obstacle_angle, - ¶meters.kick_selector.kick_pose_obstacle_radius, - ¶meters - .kick_selector - .ball_radius_for_kick_target_selection, - ¶meters.kick_selector.closer_threshold, - ¶meters.kick_selector.find_kick_targets, - ¶meters.kick_selector.goal_accuracy_margin, - ¶meters.precision_kick_timeout, - ¶meters.kick_selector.default_kick_strength, - ¶meters.kick_selector.corner_kick_strength, - framework::AdditionalOutput::new( - true, - &mut own_database.additional_outputs.kick_targets, - ), - framework::AdditionalOutput::new( - true, - &mut own_database.additional_outputs.instant_kick_targets, - ), - )) - .wrap_err("failed to execute cycle of node `KickSelector`")? - }; - own_database.main_outputs.kick_decisions = main_outputs.kick_decisions.value; - own_database.main_outputs.instant_kick_decisions = - main_outputs.instant_kick_decisions.value; - } else { - own_database.main_outputs.kick_decisions = Default::default(); - own_database.main_outputs.instant_kick_decisions = Default::default(); - } - } - { - let main_outputs = self - .world_state_composer - .cycle(world_state_composer::CycleContext::new( - own_database.main_outputs.ball_state.as_ref(), - &own_database.main_outputs.hypothetical_ball_positions, - own_database.main_outputs.rule_ball_state.as_ref(), - own_database - .main_outputs - .filtered_game_controller_state - .as_ref(), - own_database.main_outputs.ground_to_field.as_ref(), - own_database.main_outputs.suggested_search_position.as_ref(), - own_database.main_outputs.kick_decisions.as_ref(), - own_database.main_outputs.instant_kick_decisions.as_ref(), - ¶meters.player_number, - &own_database.main_outputs.fall_state, - &own_database.main_outputs.has_ground_contact, - &own_database.main_outputs.obstacles, - &own_database.main_outputs.rule_obstacles, - &own_database.main_outputs.primary_state, - &own_database.main_outputs.role, - &own_database.main_outputs.position_of_interest, - )) - .wrap_err("failed to execute cycle of node `WorldStateComposer`")?; - own_database.main_outputs.world_state = main_outputs.world_state.value; - } - { - let main_outputs = self - .behavior - .cycle(node::CycleContext::new( - AdditionalOutput::new( - true, - &mut own_database.additional_outputs.path_obstacles, - ), - AdditionalOutput::new( - true, - &mut own_database.additional_outputs.dribble_path_obstacles, - ), - AdditionalOutput::new(true, &mut own_database.additional_outputs.active_action), - own_database.main_outputs.expected_referee_position.as_ref(), - &true, - &own_database.main_outputs.world_state, - &own_database.main_outputs.cycle_time, - ¶meters.behavior, - ¶meters.in_walk_kicks, - ¶meters.field_dimensions, - ¶meters.behavior.lost_ball, - ¶meters.behavior.intercept_ball, - ¶meters.step_planner.max_step_size, - ¶meters.behavior.role_positions.striker_set_position, - ¶meters.precision_kick_timeout, - )) - .wrap_err("failed to execute cycle of node `Behavior`")?; - own_database.main_outputs.motion_command = main_outputs.motion_command.value; - own_database.main_outputs.dribble_path = main_outputs.dribble_path.value; - } - { - let main_outputs = { - self.look_around - .cycle(control::motion::look_around::CycleContext::new( - ¶meters.look_around, - &own_database.main_outputs.motion_command, - &own_database.main_outputs.cycle_time, - AdditionalOutput::new( - true, - &mut own_database.additional_outputs.look_around_mode, - ), - )) - .wrap_err("failed to execute cycle of node `LookAround`")? - }; - own_database.main_outputs.look_around = main_outputs.look_around.value; - } - { - let _main_outputs = self - .time_to_reach_kick_position - .cycle(control::time_to_reach_kick_position::CycleContext::new( - own_database.main_outputs.dribble_path.as_ref(), - &own_database.main_outputs.motion_command, - framework::AdditionalOutput::new( - true, - &mut own_database.additional_outputs.time_to_turn, - ), - framework::AdditionalOutput::new( - true, - &mut own_database - .additional_outputs - .time_to_reach_kick_position_output, - ), - &mut cycler_state.time_to_reach_kick_position, - ¶meters.behavior, - own_database - .main_outputs - .stand_up_back_estimated_remaining_duration - .as_ref(), - own_database - .main_outputs - .stand_up_front_estimated_remaining_duration - .as_ref(), - )) - .wrap_err("failed to execute cycle of `TimeToReachKickPosition`"); - } - self.own_changed.notify_one(); - Ok(()) - } -} From 937d89cc4277773fa8eb62838dfa545f2792bf52 Mon Sep 17 00:00:00 2001 From: schluis Date: Fri, 19 Jul 2024 12:14:25 +0200 Subject: [PATCH 09/16] fix rebase --- crates/control/src/kick_target_provider.rs | 411 --------------------- 1 file changed, 411 deletions(-) delete mode 100644 crates/control/src/kick_target_provider.rs diff --git a/crates/control/src/kick_target_provider.rs b/crates/control/src/kick_target_provider.rs deleted file mode 100644 index 8c8ad3eb1d..0000000000 --- a/crates/control/src/kick_target_provider.rs +++ /dev/null @@ -1,411 +0,0 @@ -use color_eyre::Result; -use ordered_float::NotNan; - -use context_attribute::context; -use coordinate_systems::{Field, Ground}; -use framework::MainOutput; -use geometry::{circle::Circle, line_segment::LineSegment, two_line_segments::TwoLineSegments}; -use linear_algebra::{distance, point, Isometry2, Point2}; -use serde::{Deserialize, Serialize}; -use spl_network_messages::{GamePhase, SubState, Team}; -use types::{ - field_dimensions::FieldDimensions, - filtered_game_controller_state::FilteredGameControllerState, - filtered_game_state::FilteredGameState, - kick_target::{KickTarget, KickTargetWithKickVariants}, - motion_command::KickVariant, - obstacles::Obstacle, - parameters::FindKickTargetsParameters, - world_state::BallState, -}; - -#[derive(Deserialize, Serialize)] -pub struct KickTargetProvider; - -#[context] -pub struct CreationContext {} - -#[context] -pub struct CycleContext { - ball_state: RequiredInput, "ball_state?">, - ground_to_field: RequiredInput>, "ground_to_field?">, - obstacles: Input, "obstacles">, - filtered_game_controller_state: - Input, "filtered_game_controller_state?">, - - field_dimensions: Parameter, - - ball_radius_for_kick_target_selection: - Parameter, - find_kick_targets_parameters: - Parameter, - max_kick_around_obstacle_angle: - Parameter, - corner_kick_strength: Parameter, - kick_off_kick_strength: Parameter, - penalty_shot_kick_strength: Parameter, - kick_off_kick_variants: - Parameter, "kick_target_provider.kick_off_kick_variants">, - corner_kick_variants: Parameter, "kick_target_provider.corner_kick_variants">, - penalty_kick_kick_variants: - Parameter, "kick_target_provider.penalty_kick_kick_variants">, - goal_line_kick_variants: - Parameter, "kick_target_provider.goal_line_kick_variants">, -} - -struct CollectKickTargetsParameter<'cycle> { - find_kick_targets_parameter: &'cycle FindKickTargetsParameters, - max_kick_around_obstacle_angle: f32, - corner_kick_strength: f32, - kick_off_kick_strength: f32, - penalty_shot_kick_strength: f32, - kick_off_kick_variants: Vec, - corner_kick_variants: Vec, - penalty_kick_kick_variants: Vec, - goal_line_kick_variants: Vec, -} - -#[context] -#[derive(Default)] -pub struct MainOutputs { - pub kick_opportunities: MainOutput>, - pub obstacle_circles: MainOutput>>, - pub allow_instant_kicks: MainOutput, -} - -impl KickTargetProvider { - pub fn new(_context: CreationContext) -> Result { - Ok(Self {}) - } - - pub fn cycle(&self, context: CycleContext) -> Result { - let ball_position = context.ball_state.ball_in_ground; - - let obstacle_circles = match context.filtered_game_controller_state { - Some(FilteredGameControllerState { - game_phase: GamePhase::PenaltyShootout { .. }, - .. - }) => vec![], - Some(FilteredGameControllerState { - sub_state: Some(SubState::PenaltyKick), - .. - }) => vec![], - _ => generate_obstacle_circles( - context.obstacles, - *context.ball_radius_for_kick_target_selection, - ), - }; - - let collect_kick_targets_parameters = CollectKickTargetsParameter { - find_kick_targets_parameter: context.find_kick_targets_parameters, - max_kick_around_obstacle_angle: *context.max_kick_around_obstacle_angle, - corner_kick_strength: *context.corner_kick_strength, - kick_off_kick_strength: *context.kick_off_kick_strength, - penalty_shot_kick_strength: *context.penalty_shot_kick_strength, - kick_off_kick_variants: context.kick_off_kick_variants.clone(), - corner_kick_variants: context.corner_kick_variants.clone(), - penalty_kick_kick_variants: context.penalty_kick_kick_variants.clone(), - goal_line_kick_variants: context.goal_line_kick_variants.clone(), - }; - - let (kick_opportunities, allow_instant_kicks) = collect_kick_targets( - *context.ground_to_field, - context.field_dimensions, - &obstacle_circles, - ball_position, - collect_kick_targets_parameters, - context.filtered_game_controller_state, - ); - - Ok(MainOutputs { - kick_opportunities: kick_opportunities.into(), - obstacle_circles: obstacle_circles.into(), - allow_instant_kicks: allow_instant_kicks.into(), - }) - } -} - -fn generate_obstacle_circles( - obstacles: &[Obstacle], - ball_radius_for_kick_target_selection: f32, -) -> Vec> { - obstacles - .iter() - .map(|obstacle| { - let obstacle_radius = - obstacle.radius_at_foot_height + ball_radius_for_kick_target_selection; - Circle { - center: obstacle.position, - radius: obstacle_radius, - } - }) - .collect() -} - -fn collect_kick_targets( - ground_to_field: Isometry2, - field_dimensions: &FieldDimensions, - obstacle_circles: &[Circle], - ball_position: Point2, - collect_kick_targets_parameters: CollectKickTargetsParameter<'_>, - filtered_game_controller_state: Option<&FilteredGameControllerState>, -) -> (Vec, bool) { - let field_to_ground = ground_to_field.inverse(); - - let is_own_kick_off = matches!( - filtered_game_controller_state, - Some(FilteredGameControllerState { - game_state: FilteredGameState::Playing { kick_off: true, .. }, - game_phase: GamePhase::Normal, - .. - }) - ); - let is_not_free_for_opponent = matches!( - filtered_game_controller_state, - Some(FilteredGameControllerState { - opponent_game_state: FilteredGameState::Playing { - ball_is_free: false, - .. - }, - .. - }) - ); - let is_penalty_shot = matches!( - filtered_game_controller_state, - Some(FilteredGameControllerState { - game_phase: GamePhase::PenaltyShootout { .. }, - kicking_team: Team::Hulks, - .. - }) | Some(FilteredGameControllerState { - sub_state: Some(SubState::PenaltyKick), - kicking_team: Team::Hulks, - .. - }) - ); - - let (kick_opportunities, allow_instant_kicks): (Vec<_>, _) = - if is_own_kick_off && is_not_free_for_opponent { - ( - generate_kick_off_kick_targets( - field_dimensions, - field_to_ground, - collect_kick_targets_parameters.kick_off_kick_strength, - ) - .into_iter() - .map(|kick_target| KickTargetWithKickVariants { - kick_target, - kick_variants: collect_kick_targets_parameters - .kick_off_kick_variants - .clone(), - }) - .collect(), - true, - ) - } else if is_ball_in_opponents_corners( - ball_position, - collect_kick_targets_parameters.find_kick_targets_parameter, - field_dimensions, - ground_to_field, - ) { - ( - generate_corner_kick_targets( - collect_kick_targets_parameters.find_kick_targets_parameter, - field_dimensions, - field_to_ground, - collect_kick_targets_parameters.corner_kick_strength, - ) - .into_iter() - .map(|kick_target| KickTargetWithKickVariants { - kick_target, - kick_variants: collect_kick_targets_parameters.corner_kick_variants.clone(), - }) - .collect(), - true, - ) - } else if is_penalty_shot { - ( - generate_penalty_shot_kick_targets( - field_dimensions, - field_to_ground, - collect_kick_targets_parameters.penalty_shot_kick_strength, - ) - .into_iter() - .map(|kick_target| KickTargetWithKickVariants { - kick_target, - kick_variants: collect_kick_targets_parameters - .penalty_kick_kick_variants - .clone(), - }) - .collect(), - true, - ) - } else { - ( - generate_goal_line_kick_targets(field_dimensions, field_to_ground) - .into_iter() - .map(|kick_target| KickTargetWithKickVariants { - kick_target, - kick_variants: collect_kick_targets_parameters - .goal_line_kick_variants - .clone(), - }) - .collect(), - true, - ) - }; - - let obstacle_circles: Vec<_> = obstacle_circles - .iter() - .map(|circle| { - let ball_to_obstacle = circle.center - ball_position; - let safety_radius = circle.radius - / collect_kick_targets_parameters - .max_kick_around_obstacle_angle - .sin(); - let distance_to_obstacle = ball_to_obstacle.norm(); - let center = if distance_to_obstacle < safety_radius { - circle.center - + ball_to_obstacle.normalize() * (safety_radius - distance_to_obstacle) - } else { - circle.center - }; - Circle { - center, - radius: circle.radius, - } - }) - .collect(); - - let kick_opportunities = kick_opportunities - .iter() - .flat_map(|kick_opportunity| { - let ball_to_target = LineSegment(ball_position, kick_opportunity.kick_target.position); - let closest_intersecting_obstacle = obstacle_circles - .iter() - .filter(|circle| circle.intersects_line_segment(&ball_to_target)) - .min_by_key(|circle| NotNan::new(circle.center.coords().norm()).unwrap()); - let targets = match closest_intersecting_obstacle { - Some(circle) => { - let TwoLineSegments(left_tangent, right_tangent) = - circle.tangents_with_point(ball_position).unwrap(); - [left_tangent, right_tangent] - .into_iter() - .map(|tangent| { - let kick_direction = (tangent.0 - ball_position).normalize(); - // TODO: drop this constant? - ball_position + kick_direction * 2.0 - }) - .filter(|&position| { - field_dimensions.is_inside_field(ground_to_field * position) - }) - .map(KickTarget::new) - .collect() - } - None => vec![kick_opportunity.kick_target], - }; - targets - .into_iter() - .map(|target| KickTargetWithKickVariants { - kick_target: target, - kick_variants: kick_opportunity.kick_variants.clone(), - }) - }) - .collect(); - (kick_opportunities, allow_instant_kicks) -} - -fn is_ball_in_opponents_corners( - ball_position: Point2, - parameters: &FindKickTargetsParameters, - field_dimensions: &FieldDimensions, - ground_to_field: Isometry2, -) -> bool { - let ball_in_field = ground_to_field * ball_position; - let left_opponent_corner = point![field_dimensions.length / 2.0, field_dimensions.width / 2.0]; - let right_opponent_corner = - point![field_dimensions.length / 2.0, -field_dimensions.width / 2.0]; - let ball_near_left_opponent_corner = - distance(ball_in_field, left_opponent_corner) < parameters.distance_from_corner; - let ball_near_right_opponent_corner = - distance(ball_in_field, right_opponent_corner) < parameters.distance_from_corner; - ball_near_left_opponent_corner || ball_near_right_opponent_corner -} - -fn generate_corner_kick_targets( - parameters: &FindKickTargetsParameters, - field_dimensions: &FieldDimensions, - field_to_ground: Isometry2, - corner_kick_strength: f32, -) -> Vec { - let from_corner_kick_target_x = - field_dimensions.length / 2.0 - parameters.corner_kick_target_distance_to_goal; - let position = field_to_ground * point![from_corner_kick_target_x, 0.0]; - vec![KickTarget { - position, - strength: Some(corner_kick_strength), - }] -} - -fn generate_goal_line_kick_targets( - field_dimensions: &FieldDimensions, - field_to_ground: Isometry2, -) -> Vec { - let left_goal_half = field_to_ground - * point![ - field_dimensions.length / 2.0, - field_dimensions.goal_inner_width / 4.0 - ]; - let right_goal_half = field_to_ground - * point![ - field_dimensions.length / 2.0, - -field_dimensions.goal_inner_width / 4.0 - ]; - vec![ - KickTarget::new(left_goal_half), - KickTarget::new(right_goal_half), - ] -} - -fn generate_kick_off_kick_targets( - field_dimensions: &FieldDimensions, - field_to_ground: Isometry2, - kick_off_kick_strength: f32, -) -> Vec { - let left_kick_off_target = field_to_ground - * point![ - 0.0, - field_dimensions.width / 2.0 - field_dimensions.center_circle_diameter, - ]; - let right_kick_off_target = field_to_ground - * point![ - 0.0, - -(field_dimensions.width / 2.0 - field_dimensions.center_circle_diameter), - ]; - - vec![ - KickTarget::new_with_strength(left_kick_off_target, kick_off_kick_strength), - KickTarget::new_with_strength(right_kick_off_target, kick_off_kick_strength), - ] -} - -fn generate_penalty_shot_kick_targets( - field_dimensions: &FieldDimensions, - field_to_ground: Isometry2, - penalty_shot_kick_strength: f32, -) -> Vec { - let left_kick_off_target = field_to_ground - * point![ - field_dimensions.length / 2.0, - field_dimensions.goal_inner_width / 4.0 - ]; - let right_kick_off_target = field_to_ground - * point![ - field_dimensions.length / 2.0, - -field_dimensions.goal_inner_width / 4.0 - ]; - - vec![ - KickTarget::new_with_strength(left_kick_off_target, penalty_shot_kick_strength), - KickTarget::new_with_strength(right_kick_off_target, penalty_shot_kick_strength), - ] -} From 1a2845f3d1dcbbcc0e75071cfca23c49f8ec4018 Mon Sep 17 00:00:00 2001 From: phillip kammradt Date: Fri, 19 Jul 2024 12:38:03 +0200 Subject: [PATCH 10/16] delete goal_line_kick_variants --- etc/parameters/default.json | 1 - 1 file changed, 1 deletion(-) diff --git a/etc/parameters/default.json b/etc/parameters/default.json index 5e7658d15c..7674520259 100644 --- a/etc/parameters/default.json +++ b/etc/parameters/default.json @@ -1104,7 +1104,6 @@ "corner_kick_variants": ["Forward", "Side", "Turn"], "kick_off_kick_variants": ["Forward", "Side", "Turn"], "penalty_shot_kick_variants": ["Forward"], - "goal_line_kick_variants": ["Forward", "Side", "Turn"], "default_kick_strength": 1.0, "corner_kick_strength": 0.25, "kick_off_kick_strength": 0.25, From 070d3d2f112fd561a6d8d573e0ed18c5829cecb2 Mon Sep 17 00:00:00 2001 From: phillip kammradt Date: Sat, 20 Jul 2024 18:55:56 +0200 Subject: [PATCH 11/16] threshold change if it jokels --- crates/control/src/behavior/dribble.rs | 53 ++++++++++--------- crates/control/src/behavior/node.rs | 52 +++++++++++++++++- crates/control/src/world_state_composer.rs | 8 --- crates/types/src/world_state.rs | 2 - etc/parameters/head.P0000074A10S41M00047.json | 5 +- 5 files changed, 81 insertions(+), 39 deletions(-) diff --git a/crates/control/src/behavior/dribble.rs b/crates/control/src/behavior/dribble.rs index b9dd8428db..3f3e2efa85 100644 --- a/crates/control/src/behavior/dribble.rs +++ b/crates/control/src/behavior/dribble.rs @@ -1,18 +1,16 @@ use coordinate_systems::{Ground, UpcomingSupport}; -use std::time::{Duration, SystemTime}; - use geometry::look_at::LookAt; use linear_algebra::{Isometry2, Point, Pose2}; use spl_network_messages::{GamePhase, Team}; +use std::time::{Duration, SystemTime}; use types::{ camera_position::CameraPosition, filtered_game_controller_state::FilteredGameControllerState, filtered_game_state::FilteredGameState, - last_filtered_game_controller_state_change::LastFilteredGameControllerStateChanges, motion_command::{ ArmMotion, HeadMotion, ImageRegion, MotionCommand, OrientationMode, WalkSpeed, }, - parameters::{DribblingParameters, InWalkKickInfoParameters, InWalkKicksParameters}, + parameters::{DribblingParameters, InWalkKicksParameters}, planned_path::PathSegment, world_state::WorldState, }; @@ -28,8 +26,9 @@ pub fn execute( dribble_path: Option>, mut walk_speed: WalkSpeed, game_controller_state: Option, - game_controller_state_change: Option, precision_kick_timeout: u8, + bigger_threshold_start_time: Option, + cycle_start_time: SystemTime, ) -> Option { let ball_position = world_state.ball?.ball_in_ground; let distance_to_ball = ball_position.coords().norm(); @@ -46,10 +45,11 @@ pub fn execute( }; let kick_decisions = world_state.kick_decisions.as_ref()?; let instant_kick_decisions = world_state.instant_kick_decisions.as_ref()?; - let do_precision_kick = precision_kick( - game_controller_state_change, + let break_precision_kick = break_precision_kick( game_controller_state, precision_kick_timeout, + bigger_threshold_start_time, + cycle_start_time, ); let available_kick = kick_decisions @@ -58,9 +58,12 @@ pub fn execute( .find(|decision| { is_kick_pose_reached( decision.kick_pose, - &in_walk_kicks[decision.variant], + if break_precision_kick { + in_walk_kicks[decision.variant].reached_thresholds + } else { + in_walk_kicks[decision.variant].precision_kick_reached_thresholds + }, world_state.robot.ground_to_upcoming_support, - do_precision_kick, ) }); if let Some(kick) = available_kick { @@ -115,18 +118,12 @@ pub fn execute( } } -fn is_kick_pose_reached( +pub fn is_kick_pose_reached( kick_pose: Pose2, - kick_info: &InWalkKickInfoParameters, + thresholds: nalgebra::Vector3, ground_to_upcoming_support: Isometry2, - precision_kick: bool, ) -> bool { let upcoming_kick_pose = ground_to_upcoming_support * kick_pose; - let thresholds = if precision_kick { - kick_info.precision_kick_reached_thresholds - } else { - kick_info.reached_thresholds - }; let is_x_reached = upcoming_kick_pose.position().x().abs() < thresholds.x; let is_y_reached = upcoming_kick_pose.position().y().abs() < thresholds.y; @@ -135,18 +132,20 @@ fn is_kick_pose_reached( is_x_reached && is_y_reached && is_orientation_reached } -pub fn precision_kick( - game_controller_state_change: Option, +pub fn break_precision_kick( game_controller_state: Option, precision_kick_timeout: u8, + bigger_threshold_start_time: Option, + cycle_start_time: SystemTime, ) -> bool { let game_controller_state = game_controller_state.unwrap_or_default(); - let game_controller_state_change = game_controller_state_change.unwrap_or_default(); + let mut time_difference: Duration = Duration::default(); - let now = SystemTime::now(); - let time_difference = now - .duration_since(game_controller_state_change.game_state) - .expect("time ran backwards"); + if bigger_threshold_start_time.is_some() { + time_difference = cycle_start_time + .duration_since(bigger_threshold_start_time.unwrap()) + .expect("Time ran back"); + }; let precision_kick = matches!( game_controller_state.game_phase, @@ -160,9 +159,11 @@ pub fn precision_kick( ball_is_free: true } ); + // dbg!(time_difference); + // dbg!(Duration::from_secs(precision_kick_timeout.into())); + // dbg!(time_difference > Duration::from_secs(precision_kick_timeout.into())); let sub_state = game_controller_state.sub_state.is_some(); let kicking = matches!(game_controller_state.kicking_team, Team::Hulks); - (precision_kick || own_kick_off || sub_state && kicking) - && time_difference < Duration::from_secs(precision_kick_timeout.into()) + && time_difference > Duration::from_secs(precision_kick_timeout.into()) } diff --git a/crates/control/src/behavior/node.rs b/crates/control/src/behavior/node.rs index 50f1ed07ef..c9f991abca 100644 --- a/crates/control/src/behavior/node.rs +++ b/crates/control/src/behavior/node.rs @@ -46,6 +46,8 @@ pub struct Behavior { last_known_ball_position: Point2, active_since: Option, previous_role: Role, + bigger_threshold_start_time: Option, + timer_started: bool, } #[context] @@ -98,6 +100,8 @@ impl Behavior { last_known_ball_position: point![0.0, 0.0], active_since: None, previous_role: Role::Searcher, + bigger_threshold_start_time: None, + timer_started: false, }) } @@ -275,6 +279,51 @@ impl Behavior { .dribble_path_obstacles_output .fill_if_subscribed(|| dribble_path_obstacles.clone().unwrap_or_default()); + if let (Some(kick_decisions), Some(instant_kick_decisions)) = ( + world_state.kick_decisions.as_ref(), + world_state.instant_kick_decisions.as_ref(), + ) { + // let kick_decisions = world_state.kick_decisions.as_ref().unwrap(); + // let instant_kick_decisions = world_state.instant_kick_decisions.as_ref().unwrap(); + + let available_kick_bigger = kick_decisions + .iter() + .chain(instant_kick_decisions.iter()) + .find(|decision| { + dribble::is_kick_pose_reached( + decision.kick_pose, + context.in_walk_kicks[decision.variant].reached_thresholds, + world_state.robot.ground_to_upcoming_support, + ) + }); + let available_kick_smaller = kick_decisions + .iter() + .chain(instant_kick_decisions.iter()) + .find(|decision| { + dribble::is_kick_pose_reached( + decision.kick_pose, + context.in_walk_kicks[decision.variant].precision_kick_reached_thresholds, + world_state.robot.ground_to_upcoming_support, + ) + }); + if available_kick_bigger.is_some() + && available_kick_smaller.is_none() + && !self.timer_started + { + let is_bigger_kick_pose_reached = dribble::is_kick_pose_reached( + available_kick_bigger.unwrap().kick_pose, + context.in_walk_kicks[available_kick_bigger.unwrap().variant] + .reached_thresholds, + world_state.robot.ground_to_upcoming_support, + ); + if is_bigger_kick_pose_reached { + self.bigger_threshold_start_time = Some(context.cycle_time.start_time); + } + self.timer_started = true; + } else if available_kick_smaller.is_some() && self.timer_started { + self.bigger_threshold_start_time = Some(context.cycle_time.start_time); + } + } let (action, motion_command) = actions .iter() .find_map(|action| { @@ -377,8 +426,9 @@ impl Behavior { dribble_path.clone(), *context.dribble_walk_speed, world_state.filtered_game_controller_state.clone(), - world_state.last_filtered_game_controller_state_change, *context.precision_kick_timeout, + self.bigger_threshold_start_time, + context.cycle_time.start_time, ), Action::Jump => jump::execute(world_state), Action::PrepareJump => prepare_jump::execute(world_state), diff --git a/crates/control/src/world_state_composer.rs b/crates/control/src/world_state_composer.rs index 0bbd286ded..82c191bb71 100644 --- a/crates/control/src/world_state_composer.rs +++ b/crates/control/src/world_state_composer.rs @@ -12,7 +12,6 @@ use types::{ fall_state::FallState, filtered_game_controller_state::FilteredGameControllerState, kick_decision::KickDecision, - last_filtered_game_controller_state_change::LastFilteredGameControllerStateChanges, obstacles::Obstacle, primary_state::PrimaryState, roles::Role, @@ -34,10 +33,6 @@ pub struct CycleContext { rule_ball: Input, "rule_ball_state?">, filtered_game_controller_state: Input, "filtered_game_controller_state?">, - last_filtered_game_controller_state_changes: Input< - Option, - "last_filtered_game_controller_state_changes?", - >, ground_to_field: Input>, "ground_to_field?">, suggested_search_position: Input>, "suggested_search_position?">, kick_decisions: Input>, "kick_decisions?">, @@ -90,9 +85,6 @@ impl WorldStateComposer { kick_decisions: context.kick_decisions.cloned(), instant_kick_decisions: context.instant_kick_decisions.cloned(), filtered_game_controller_state: context.filtered_game_controller_state.cloned(), - last_filtered_game_controller_state_change: context - .last_filtered_game_controller_state_changes - .copied(), hypothetical_ball_positions: context.hypothetical_ball_position.clone(), calibration_command: context.calibration_command.copied(), }; diff --git a/crates/types/src/world_state.rs b/crates/types/src/world_state.rs index 9cf8c755d0..ebd75bfc31 100644 --- a/crates/types/src/world_state.rs +++ b/crates/types/src/world_state.rs @@ -11,7 +11,6 @@ use crate::{ ball_position::HypotheticalBallPosition, calibration::CalibrationCommand, fall_state::FallState, field_dimensions::Side, filtered_game_controller_state::FilteredGameControllerState, kick_decision::KickDecision, - last_filtered_game_controller_state_change::LastFilteredGameControllerStateChanges, obstacles::Obstacle, penalty_shot_direction::PenaltyShotDirection, primary_state::PrimaryState, roles::Role, rule_obstacles::RuleObstacle, }; @@ -22,7 +21,6 @@ pub struct WorldState { pub rule_ball: Option, pub hypothetical_ball_positions: Vec>, pub filtered_game_controller_state: Option, - pub last_filtered_game_controller_state_change: Option, pub obstacles: Vec, pub rule_obstacles: Vec, pub position_of_interest: Point2, diff --git a/etc/parameters/head.P0000074A10S41M00047.json b/etc/parameters/head.P0000074A10S41M00047.json index 2231539be6..8138f3a1df 100644 --- a/etc/parameters/head.P0000074A10S41M00047.json +++ b/etc/parameters/head.P0000074A10S41M00047.json @@ -10,9 +10,10 @@ "vision_top": { "extrinsic_rotations": [ -6.378819465637207, - 1.1614716053009033, + 1.161471605300903, -0.7613387703895569 ] } - } + }, + "player_number": "Five" } From 2849c6d03ef26dfe2fa198462871c7fc0a02dbdf Mon Sep 17 00:00:00 2001 From: phillip kammradt Date: Sat, 20 Jul 2024 22:20:08 +0200 Subject: [PATCH 12/16] changes --- crates/control/src/behavior/dribble.rs | 50 +++++------------- crates/control/src/behavior/node.rs | 51 ++++++++++--------- etc/parameters/default.json | 2 +- etc/parameters/head.P0000074A10S41M00047.json | 5 +- 4 files changed, 42 insertions(+), 66 deletions(-) diff --git a/crates/control/src/behavior/dribble.rs b/crates/control/src/behavior/dribble.rs index 3f3e2efa85..b0b0059e79 100644 --- a/crates/control/src/behavior/dribble.rs +++ b/crates/control/src/behavior/dribble.rs @@ -1,12 +1,11 @@ use coordinate_systems::{Ground, UpcomingSupport}; use geometry::look_at::LookAt; use linear_algebra::{Isometry2, Point, Pose2}; -use spl_network_messages::{GamePhase, Team}; +use spl_network_messages::GamePhase; use std::time::{Duration, SystemTime}; use types::{ camera_position::CameraPosition, filtered_game_controller_state::FilteredGameControllerState, - filtered_game_state::FilteredGameState, motion_command::{ ArmMotion, HeadMotion, ImageRegion, MotionCommand, OrientationMode, WalkSpeed, }, @@ -25,8 +24,7 @@ pub fn execute( parameters: &DribblingParameters, dribble_path: Option>, mut walk_speed: WalkSpeed, - game_controller_state: Option, - precision_kick_timeout: u8, + precision_kick_timeout: Duration, bigger_threshold_start_time: Option, cycle_start_time: SystemTime, ) -> Option { @@ -45,8 +43,7 @@ pub fn execute( }; let kick_decisions = world_state.kick_decisions.as_ref()?; let instant_kick_decisions = world_state.instant_kick_decisions.as_ref()?; - let break_precision_kick = break_precision_kick( - game_controller_state, + let abort_precision_kick = abort_precision_kick( precision_kick_timeout, bigger_threshold_start_time, cycle_start_time, @@ -58,10 +55,10 @@ pub fn execute( .find(|decision| { is_kick_pose_reached( decision.kick_pose, - if break_precision_kick { - in_walk_kicks[decision.variant].reached_thresholds - } else { + if !abort_precision_kick { in_walk_kicks[decision.variant].precision_kick_reached_thresholds + } else { + in_walk_kicks[decision.variant].reached_thresholds }, world_state.robot.ground_to_upcoming_support, ) @@ -132,38 +129,17 @@ pub fn is_kick_pose_reached( is_x_reached && is_y_reached && is_orientation_reached } -pub fn break_precision_kick( - game_controller_state: Option, - precision_kick_timeout: u8, +pub fn abort_precision_kick( + precision_kick_timeout: Duration, bigger_threshold_start_time: Option, cycle_start_time: SystemTime, ) -> bool { - let game_controller_state = game_controller_state.unwrap_or_default(); - let mut time_difference: Duration = Duration::default(); - if bigger_threshold_start_time.is_some() { - time_difference = cycle_start_time + let time_difference = cycle_start_time .duration_since(bigger_threshold_start_time.unwrap()) .expect("Time ran back"); - }; - - let precision_kick = matches!( - game_controller_state.game_phase, - GamePhase::PenaltyShootout { .. } - ) || game_controller_state.sub_state.is_some(); - - let own_kick_off = matches!( - game_controller_state.game_state, - FilteredGameState::Playing { - kick_off: true, - ball_is_free: true - } - ); - // dbg!(time_difference); - // dbg!(Duration::from_secs(precision_kick_timeout.into())); - // dbg!(time_difference > Duration::from_secs(precision_kick_timeout.into())); - let sub_state = game_controller_state.sub_state.is_some(); - let kicking = matches!(game_controller_state.kicking_team, Team::Hulks); - (precision_kick || own_kick_off || sub_state && kicking) - && time_difference > Duration::from_secs(precision_kick_timeout.into()) + time_difference > precision_kick_timeout + } else { + false + } } diff --git a/crates/control/src/behavior/node.rs b/crates/control/src/behavior/node.rs index c9f991abca..7f3a51f788 100644 --- a/crates/control/src/behavior/node.rs +++ b/crates/control/src/behavior/node.rs @@ -1,4 +1,4 @@ -use std::time::SystemTime; +use std::time::{Duration, SystemTime}; use color_eyre::Result; use serde::{Deserialize, Serialize}; @@ -32,7 +32,8 @@ use crate::dribble_path_planner; use super::{ animation, calibrate, defend::Defend, - dribble, fall_safely, + dribble::{self, is_kick_pose_reached}, + fall_safely, head::LookAction, initial, intercept_ball, jump, look_around, lost_ball, no_ground_contact, penalize, prepare_jump, search, sit_down, stand, stand_up, support, unstiff, walk_to_kick_off, @@ -83,7 +84,7 @@ pub struct CycleContext { support_walk_speed: Parameter, walk_to_kickoff_walk_speed: Parameter, walk_to_penalty_kick_walk_speed: Parameter, - precision_kick_timeout: Parameter, + precision_kick_timeout: Parameter, } #[context] @@ -283,45 +284,46 @@ impl Behavior { world_state.kick_decisions.as_ref(), world_state.instant_kick_decisions.as_ref(), ) { - // let kick_decisions = world_state.kick_decisions.as_ref().unwrap(); - // let instant_kick_decisions = world_state.instant_kick_decisions.as_ref().unwrap(); - - let available_kick_bigger = kick_decisions + let available_unprecise_kicks = kick_decisions .iter() .chain(instant_kick_decisions.iter()) .find(|decision| { - dribble::is_kick_pose_reached( + is_kick_pose_reached( decision.kick_pose, context.in_walk_kicks[decision.variant].reached_thresholds, world_state.robot.ground_to_upcoming_support, ) }); - let available_kick_smaller = kick_decisions + let available_precise_kicks = kick_decisions .iter() .chain(instant_kick_decisions.iter()) .find(|decision| { - dribble::is_kick_pose_reached( + is_kick_pose_reached( decision.kick_pose, context.in_walk_kicks[decision.variant].precision_kick_reached_thresholds, world_state.robot.ground_to_upcoming_support, ) }); - if available_kick_bigger.is_some() - && available_kick_smaller.is_none() - && !self.timer_started - { - let is_bigger_kick_pose_reached = dribble::is_kick_pose_reached( - available_kick_bigger.unwrap().kick_pose, - context.in_walk_kicks[available_kick_bigger.unwrap().variant] - .reached_thresholds, - world_state.robot.ground_to_upcoming_support, - ); - if is_bigger_kick_pose_reached { + + match ( + available_unprecise_kicks, + available_precise_kicks, + self.timer_started, + ) { + (Some(available_unprecise_kicks), None, false) => { + if is_kick_pose_reached( + available_unprecise_kicks.kick_pose, + context.in_walk_kicks[available_unprecise_kicks.variant].reached_thresholds, + world_state.robot.ground_to_upcoming_support, + ) { + self.bigger_threshold_start_time = Some(context.cycle_time.start_time); + } + self.timer_started = true; + } + (_, Some(_), true) => { self.bigger_threshold_start_time = Some(context.cycle_time.start_time); } - self.timer_started = true; - } else if available_kick_smaller.is_some() && self.timer_started { - self.bigger_threshold_start_time = Some(context.cycle_time.start_time); + _ => {} } } let (action, motion_command) = actions @@ -425,7 +427,6 @@ impl Behavior { &context.parameters.dribbling, dribble_path.clone(), *context.dribble_walk_speed, - world_state.filtered_game_controller_state.clone(), *context.precision_kick_timeout, self.bigger_threshold_start_time, context.cycle_time.start_time, diff --git a/etc/parameters/default.json b/etc/parameters/default.json index 7674520259..e28829843d 100644 --- a/etc/parameters/default.json +++ b/etc/parameters/default.json @@ -1094,7 +1094,7 @@ "enabled": true } }, - "precision_kick_timeout": 5, + "precision_kick_timeout": 2, "kick_selector": { "distance_to_corner": 1.5, "corner_kick_target_distance_to_goal": 1.3, diff --git a/etc/parameters/head.P0000074A10S41M00047.json b/etc/parameters/head.P0000074A10S41M00047.json index 8138f3a1df..2231539be6 100644 --- a/etc/parameters/head.P0000074A10S41M00047.json +++ b/etc/parameters/head.P0000074A10S41M00047.json @@ -10,10 +10,9 @@ "vision_top": { "extrinsic_rotations": [ -6.378819465637207, - 1.161471605300903, + 1.1614716053009033, -0.7613387703895569 ] } - }, - "player_number": "Five" + } } From b3bc3d0f822efde71cb791e00663878886f6415a Mon Sep 17 00:00:00 2001 From: phillip kammradt Date: Sat, 20 Jul 2024 22:30:22 +0200 Subject: [PATCH 13/16] bigger_threshold_start_time to unprecise_threshold_start_time --- crates/control/src/behavior/node.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/control/src/behavior/node.rs b/crates/control/src/behavior/node.rs index 7f3a51f788..325a9d5808 100644 --- a/crates/control/src/behavior/node.rs +++ b/crates/control/src/behavior/node.rs @@ -47,7 +47,7 @@ pub struct Behavior { last_known_ball_position: Point2, active_since: Option, previous_role: Role, - bigger_threshold_start_time: Option, + unprecise_threshold_start_time: Option, timer_started: bool, } @@ -101,7 +101,7 @@ impl Behavior { last_known_ball_position: point![0.0, 0.0], active_since: None, previous_role: Role::Searcher, - bigger_threshold_start_time: None, + unprecise_threshold_start_time: None, timer_started: false, }) } @@ -316,12 +316,12 @@ impl Behavior { context.in_walk_kicks[available_unprecise_kicks.variant].reached_thresholds, world_state.robot.ground_to_upcoming_support, ) { - self.bigger_threshold_start_time = Some(context.cycle_time.start_time); + self.unprecise_threshold_start_time = Some(context.cycle_time.start_time); + self.timer_started = true; } - self.timer_started = true; } (_, Some(_), true) => { - self.bigger_threshold_start_time = Some(context.cycle_time.start_time); + self.unprecise_threshold_start_time = Some(context.cycle_time.start_time); } _ => {} } @@ -428,7 +428,7 @@ impl Behavior { dribble_path.clone(), *context.dribble_walk_speed, *context.precision_kick_timeout, - self.bigger_threshold_start_time, + self.unprecise_threshold_start_time, context.cycle_time.start_time, ), Action::Jump => jump::execute(world_state), From 2c7f3a57bed8bc1a69dca1fe09ecb76c9c4be936 Mon Sep 17 00:00:00 2001 From: phillip kammradt Date: Sat, 20 Jul 2024 22:36:44 +0200 Subject: [PATCH 14/16] delet timer_start --- crates/control/src/behavior/node.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/crates/control/src/behavior/node.rs b/crates/control/src/behavior/node.rs index 325a9d5808..30a51217d9 100644 --- a/crates/control/src/behavior/node.rs +++ b/crates/control/src/behavior/node.rs @@ -48,7 +48,6 @@ pub struct Behavior { active_since: Option, previous_role: Role, unprecise_threshold_start_time: Option, - timer_started: bool, } #[context] @@ -102,7 +101,6 @@ impl Behavior { active_since: None, previous_role: Role::Searcher, unprecise_threshold_start_time: None, - timer_started: false, }) } @@ -308,19 +306,18 @@ impl Behavior { match ( available_unprecise_kicks, available_precise_kicks, - self.timer_started, + self.unprecise_threshold_start_time.is_none(), ) { - (Some(available_unprecise_kicks), None, false) => { + (Some(available_unprecise_kicks), None, true) => { if is_kick_pose_reached( available_unprecise_kicks.kick_pose, context.in_walk_kicks[available_unprecise_kicks.variant].reached_thresholds, world_state.robot.ground_to_upcoming_support, ) { self.unprecise_threshold_start_time = Some(context.cycle_time.start_time); - self.timer_started = true; } } - (_, Some(_), true) => { + (_, Some(_), false) => { self.unprecise_threshold_start_time = Some(context.cycle_time.start_time); } _ => {} From d0a5d5c63afdb01b2830b845c589f436b463b436 Mon Sep 17 00:00:00 2001 From: schluis Date: Wed, 4 Dec 2024 19:15:31 +0100 Subject: [PATCH 15/16] change parameters --- etc/parameters/default.json | 15 ++++++++------- etc/parameters/head.P0000074A03S85B00016.json | 8 ++------ etc/parameters/head.P0000074A05S98U00019.json | 12 ++++++------ etc/parameters/head.P0000074A06S9A900006.json | 8 ++------ etc/parameters/head.P0000074A09S28J00025.json | 12 ++++++------ etc/parameters/head.P0000074A09S31C00023.json | 12 ++++++------ etc/parameters/head.P0000074A09S31C00028.json | 12 ++++++------ etc/parameters/head.P0000074A09S31C00029.json | 12 ++++++------ etc/parameters/head.P0000074A09S31C00037.json | 8 ++------ etc/parameters/head.P0000074A09S31T00003.json | 12 ++++++------ etc/parameters/head.P0000074A10S41M00040.json | 12 ++++++------ etc/parameters/head.P0000074A10S41M00047.json | 12 ++++++------ etc/parameters/head.P0000074A10S41M00048.json | 8 ++------ 13 files changed, 64 insertions(+), 79 deletions(-) diff --git a/etc/parameters/default.json b/etc/parameters/default.json index e28829843d..6004f605c1 100644 --- a/etc/parameters/default.json +++ b/etc/parameters/default.json @@ -1071,16 +1071,17 @@ "position": [-0.22, -0.04], "position_offset": [0.0, 0.0], "orientation": 0.0, - "reached_thresholds": [0.04, 0.03, 0.1], - "precision_kick_reached_thresholds": [0.02, 0.01, 0.015], + "reached_thresholds": [0.06, 0.04, 0.07], + "precision_kick_reached_thresholds": [0.04, 0.02, 0.05], "shot_distance": 4.0, "enabled": true }, "turn": { "position": [-0.145, -0.08], "orientation": 0.9, - "reached_thresholds": [0.04, 0.04, 0.1], - "precision_kick_reached_thresholds": [0.0, 0.0, 0.0], + "position_offset": [0.0, 0.0], + "reached_thresholds": [0.06, 0.06, 0.12], + "precision_kick_reached_thresholds": [0.04, 0.04, 0.1], "shot_distance": 3.5, "enabled": true }, @@ -1088,9 +1089,9 @@ "position": [-0.15, 0.03], "position_offset": [0.0, 0.0], "orientation": -1.57, - "reached_thresholds": [0.05, 0.06, 0.1], - "precision_kick_reached_thresholds": [0.0, 0.0, 0.0], - "shot_distance": 0.5, + "reached_thresholds": [0.07, 0.08, 0.12], + "precision_kick_reached_thresholds": [0.05, 0.06, 0.1], + "shot_distance": 0.8, "enabled": true } }, diff --git a/etc/parameters/head.P0000074A03S85B00016.json b/etc/parameters/head.P0000074A03S85B00016.json index 9afe203e69..7630198191 100644 --- a/etc/parameters/head.P0000074A03S85B00016.json +++ b/etc/parameters/head.P0000074A03S85B00016.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -1.69705331325531, - -0.34364014863967896, - -0.41124433279037476 + -2.72135853767395, 3.822335720062256, -0.8703884482383728 ] }, "vision_top": { "extrinsic_rotations": [ - -4.3482441902160645, - -0.47342777252197266, - 0.0392228364944458 + -4.46786642074585, 0.42489588260650635, -0.18990039825439453 ] } } diff --git a/etc/parameters/head.P0000074A05S98U00019.json b/etc/parameters/head.P0000074A05S98U00019.json index 53a1757fb0..a84ad62560 100644 --- a/etc/parameters/head.P0000074A05S98U00019.json +++ b/etc/parameters/head.P0000074A05S98U00019.json @@ -2,16 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -1.094749927520752, - 6.574273109436035, - -0.9893721342086792 + -1.4062178134918213, + 3.2122440338134766, + -1.0124963521957397 ] }, "vision_top": { "extrinsic_rotations": [ - -3.026418685913086, - 5.58524227142334, - -0.7207059860229492 + -3.4089455604553223, + 3.412630081176758, + -0.5929854512214661 ] } } diff --git a/etc/parameters/head.P0000074A06S9A900006.json b/etc/parameters/head.P0000074A06S9A900006.json index 344d25dbe5..42fd3995fa 100644 --- a/etc/parameters/head.P0000074A06S9A900006.json +++ b/etc/parameters/head.P0000074A06S9A900006.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - 0.0, - 1.0669934749603271, - -0.004975497722625732 + -0.9637901186943054, 1.830570101737976, -0.9879335761070251 ] }, "vision_top": { "extrinsic_rotations": [ - -1.8400973081588745, - 2.4051421880722046, - 0.2623414993286133 + -2.891505241394043, 4.0365118980407715, -0.8275419473648071 ] } } diff --git a/etc/parameters/head.P0000074A09S28J00025.json b/etc/parameters/head.P0000074A09S28J00025.json index e20bdf800c..c8f3b41cee 100644 --- a/etc/parameters/head.P0000074A09S28J00025.json +++ b/etc/parameters/head.P0000074A09S28J00025.json @@ -2,16 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -6.421729564666748, - 2.290815830230713, - -0.1414141058921814 + -5.823334217071533, + 2.5707240104675293, + 0.8289295434951782 ] }, "vision_top": { "extrinsic_rotations": [ - -6.871341228485107, - 3.9096431732177734, - -0.40609270334243774 + -6.703361511230469, + 3.664271354675293, + -0.6644251942634583 ] } } diff --git a/etc/parameters/head.P0000074A09S31C00023.json b/etc/parameters/head.P0000074A09S31C00023.json index fff6ae89d0..d48c9dbab9 100644 --- a/etc/parameters/head.P0000074A09S31C00023.json +++ b/etc/parameters/head.P0000074A09S31C00023.json @@ -2,16 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -4.24737274646759, - -0.42051762342453, - 0.5215591192245483 + -3.8449547290802, + 0.8310127258300781, + -0.8390218019485474 ] }, "vision_top": { "extrinsic_rotations": [ - -5.879413604736328, - -0.2684551477432251, - 1.308302879333496 + -5.334465980529785, + 1.0237079858779907, + -0.3370177745819092 ] } } diff --git a/etc/parameters/head.P0000074A09S31C00028.json b/etc/parameters/head.P0000074A09S31C00028.json index 21d460e93b..230c288a84 100644 --- a/etc/parameters/head.P0000074A09S31C00028.json +++ b/etc/parameters/head.P0000074A09S31C00028.json @@ -2,16 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -0.38102924823760986, - 1.616397500038147, - -0.6749475002288818 + -0.4714089632034302, + 2.6275885105133057, + -0.05077689886093139 ] }, "vision_top": { "extrinsic_rotations": [ - -3.1643271446228027, - 2.430558681488037, - -1.2855684757232666 + -2.88857364654541, + 3.5942726135253906, + -1.3512763977050781 ] } } diff --git a/etc/parameters/head.P0000074A09S31C00029.json b/etc/parameters/head.P0000074A09S31C00029.json index eee3e79af6..fa2ea99214 100644 --- a/etc/parameters/head.P0000074A09S31C00029.json +++ b/etc/parameters/head.P0000074A09S31C00029.json @@ -2,16 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -4.096397399902344, - 1.5083616971969604, - 0.36477863788604736 + -4.739768981933594, + 1.971403956413269, + 0.6792354583740234 ] }, "vision_top": { "extrinsic_rotations": [ - -4.605247497558594, - 1.7912685871124268, - -0.8745011687278748 + -4.132087707519531, + 2.4408602714538574, + -0.560128390789032 ] } } diff --git a/etc/parameters/head.P0000074A09S31C00037.json b/etc/parameters/head.P0000074A09S31C00037.json index 1a37049410..7cdfd420ab 100644 --- a/etc/parameters/head.P0000074A09S31C00037.json +++ b/etc/parameters/head.P0000074A09S31C00037.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -3.7042431831359863, - 4.5806427001953125, - 1.1136245727539062 + -0.8664080500602722, 3.553433418273926, -0.33780813217163086 ] }, "vision_top": { "extrinsic_rotations": [ - -4.110447883605957, - 4.721715927124023, - -1.4346160888671875 + -0.8014833927154541, 3.4765684604644775, -0.4619362950325012 ] } } diff --git a/etc/parameters/head.P0000074A09S31T00003.json b/etc/parameters/head.P0000074A09S31T00003.json index 699cd38deb..f76ad14ca9 100644 --- a/etc/parameters/head.P0000074A09S31T00003.json +++ b/etc/parameters/head.P0000074A09S31T00003.json @@ -2,16 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -3.5326740741729736, - -3.0798349380493164, - 0.040860772132873535 + -3.411283493041992, + -1.2553954124450684, + 0.3223353624343872 ] }, "vision_top": { "extrinsic_rotations": [ - -4.496262073516846, - -3.341855525970459, - 1.0221058130264282 + -4.658981800079346, + -1.7291531562805176, + 1.808822751045227 ] } } diff --git a/etc/parameters/head.P0000074A10S41M00040.json b/etc/parameters/head.P0000074A10S41M00040.json index 9cc2f9489f..3775746d0a 100644 --- a/etc/parameters/head.P0000074A10S41M00040.json +++ b/etc/parameters/head.P0000074A10S41M00040.json @@ -2,16 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -4.656322956085205, - -1.4568310976028442, - 0.4995846748352051 + -4.511622428894043, + -2.427844524383545, + 0.01938164234161377 ] }, "vision_top": { "extrinsic_rotations": [ - -6.169203281402588, - -0.28863340616226196, - 1.1745715141296387 + -6.188063621520996, + -0.9570738673210144, + 1.2032711505889893 ] } } diff --git a/etc/parameters/head.P0000074A10S41M00047.json b/etc/parameters/head.P0000074A10S41M00047.json index 2231539be6..9e613bd77c 100644 --- a/etc/parameters/head.P0000074A10S41M00047.json +++ b/etc/parameters/head.P0000074A10S41M00047.json @@ -2,16 +2,16 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -4.755054950714111, - 0.6511008739471436, - -0.3200814127922058 + -4.459723949432373, + -1.5433313846588135, + -1.3483929634094238 ] }, "vision_top": { "extrinsic_rotations": [ - -6.378819465637207, - 1.1614716053009033, - -0.7613387703895569 + -6.355825901031494, + -0.49191176891326904, + -1.0342803001403809 ] } } diff --git a/etc/parameters/head.P0000074A10S41M00048.json b/etc/parameters/head.P0000074A10S41M00048.json index 4c5bbf93a2..c493bed4d0 100644 --- a/etc/parameters/head.P0000074A10S41M00048.json +++ b/etc/parameters/head.P0000074A10S41M00048.json @@ -2,16 +2,12 @@ "camera_matrix_parameters": { "vision_bottom": { "extrinsic_rotations": [ - -3.8277313709259033, - 0.7709097862243652, - -0.12641429901123047 + 0.5848163366317749, 1.0660958290100098, -0.8569559454917908 ] }, "vision_top": { "extrinsic_rotations": [ - -5.975536346435547, - 2.511253833770752, - -0.15128731727600098 + -1.2892045974731445, 3.788731098175049, 0.5328315496444702 ] } } From bf0a5af91e9427a23a48bbe167d25dc4ab0c0b76 Mon Sep 17 00:00:00 2001 From: Luis Scheuch Date: Mon, 9 Dec 2024 18:17:21 +0100 Subject: [PATCH 16/16] fix wrong parameter type --- etc/parameters/default.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/parameters/default.json b/etc/parameters/default.json index 6004f605c1..e152c04b6d 100644 --- a/etc/parameters/default.json +++ b/etc/parameters/default.json @@ -1095,7 +1095,7 @@ "enabled": true } }, - "precision_kick_timeout": 2, + "precision_kick_timeout": { "nanos": 0, "secs": 2}, "kick_selector": { "distance_to_corner": 1.5, "corner_kick_target_distance_to_goal": 1.3,