diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 755ba2b..7e101f8 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -119,6 +119,7 @@ jobs: path: [ aliveness, + annotato, behavior_simulator, camera_matrix_extractor, depp, diff --git a/.gitignore b/.gitignore index 326c9f7..2a9296a 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ settings.json .dir-locals.el .envrc default.nix +.direnv/ target/ diff --git a/Cargo.lock b/Cargo.lock index bde1f70..bffbbcc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "ab_glyph" -version = "0.2.21" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5110f1c78cf582855d895ecd0746b653db010cec6d9f5575293f27934d980a39" +checksum = "80179d7dd5d7e8c285d67c4a1e652972a92de7475beddfb92028c76463b13225" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -20,9 +20,9 @@ checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" [[package]] name = "accesskit" -version = "0.11.2" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76eb1adf08c5bcaa8490b9851fd53cca27fa9880076f178ea9d29f05196728a8" +checksum = "ca8410747ed85a17c4a1e9ed3f5a74d3e7bdcc876cf9a18ff40ae21d645997b2" dependencies = [ "enumn", "serde", @@ -30,18 +30,18 @@ dependencies = [ [[package]] name = "accesskit_consumer" -version = "0.15.2" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04bb4d9e4772fe0d47df57d0d5dbe5d85dd05e2f37ae1ddb6b105e76be58fb00" +checksum = "8c17cca53c09fbd7288667b22a201274b9becaa27f0b91bf52a526db95de45e6" dependencies = [ "accesskit", ] [[package]] name = "accesskit_macos" -version = "0.9.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134d0acf6acb667c89d3332999b1a5df4edbc8d6113910f392ebb73f2b03bb56" +checksum = "cd3b6ae1eabbfbced10e840fd3fce8a93ae84f174b3e4ba892ab7bcb42e477a7" dependencies = [ "accesskit", "accesskit_consumer", @@ -51,38 +51,40 @@ dependencies = [ [[package]] name = "accesskit_unix" -version = "0.5.2" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e084cb5168790c0c112626175412dc5ad127083441a8248ae49ddf6725519e83" +checksum = "09f46c18d99ba61ad7123dd13eeb0c104436ab6af1df6a1cd8c11054ed394a08" dependencies = [ "accesskit", "accesskit_consumer", "async-channel", + "async-once-cell", "atspi", - "futures-lite", + "futures-lite 1.13.0", + "once_cell", "serde", "zbus", ] [[package]] name = "accesskit_windows" -version = "0.14.3" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eac0a7f2d7cd7a93b938af401d3d8e8b7094217989a7c25c55a953023436e31" +checksum = "afcae27ec0974fc7c3b0b318783be89fd1b2e66dd702179fe600166a38ff4a0b" dependencies = [ "accesskit", "accesskit_consumer", - "arrayvec", "once_cell", "paste", + "static_assertions", "windows 0.48.0", ] [[package]] name = "accesskit_winit" -version = "0.14.4" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "825d23acee1bd6d25cbaa3ca6ed6e73faf24122a774ec33d52c5c86c6ab423c0" +checksum = "88e39fcec2e10971e188730b7a76bab60647dacc973d4591855ebebcadfaa738" dependencies = [ "accesskit", "accesskit_macos", @@ -108,21 +110,22 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if", "once_cell", "serde", "version_check", + "zerocopy", ] [[package]] name = "aho-corasick" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -202,6 +205,24 @@ dependencies = [ "libc", ] +[[package]] +name = "annotato" +version = "0.1.0" +dependencies = [ + "clap 4.4.11", + "color-eyre", + "eframe", + "egui_extras", + "egui_plot", + "glob", + "image", + "once_cell", + "reqwest", + "serde", + "serde_json", + "toml", +] + [[package]] name = "ansi_colours" version = "1.2.2" @@ -222,9 +243,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.1" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6cd65a4b849ace0b7f6daeebcc1a1d111282227ca745458c61dbf670e52a597" +checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" dependencies = [ "anstyle", "anstyle-parse", @@ -242,30 +263,30 @@ checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anstyle-parse" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0238ca56c96dfa37bdf7c373c8886dd591322500aceeeccdb2216fe06dc2f796" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -283,11 +304,21 @@ dependencies = [ "num-traits", ] +[[package]] +name = "approx_derive" +version = "0.1.0" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "arboard" -version = "3.2.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac57f2b058a76363e357c056e4f74f1945bf734d37b8b3ef49066c4787dde0fc" +checksum = "aafb29b107435aa276664c1db8954ac27a6e105cdad3c88287a199eb0e313c08" dependencies = [ "clipboard-win", "log", @@ -324,26 +355,28 @@ dependencies = [ [[package]] name = "async-channel" -version = "1.9.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c" dependencies = [ "concurrent-queue", - "event-listener 2.5.3", + "event-listener 4.0.1", + "event-listener-strategy", "futures-core", + "pin-project-lite", ] [[package]] name = "async-executor" -version = "1.5.4" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c1da3ae8dabd9c00f453a329dfe1fb28da3c0a72e2478cdcd93171740c20499" +checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" dependencies = [ - "async-lock", + "async-lock 3.2.0", "async-task", "concurrent-queue", "fastrand 2.0.1", - "futures-lite", + "futures-lite 2.1.0", "slab", ] @@ -353,10 +386,10 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" dependencies = [ - "async-lock", + "async-lock 2.8.0", "autocfg", "blocking", - "futures-lite", + "futures-lite 1.13.0", ] [[package]] @@ -365,20 +398,39 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ - "async-lock", + "async-lock 2.8.0", "autocfg", "cfg-if", "concurrent-queue", - "futures-lite", + "futures-lite 1.13.0", "log", "parking", - "polling", - "rustix 0.37.23", + "polling 2.8.0", + "rustix 0.37.27", "slab", - "socket2 0.4.9", + "socket2 0.4.10", "waker-fn", ] +[[package]] +name = "async-io" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6afaa937395a620e33dc6a742c593c01aced20aa376ffb0f628121198578ccc7" +dependencies = [ + "async-lock 3.2.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.1.0", + "parking", + "polling 3.3.1", + "rustix 0.38.28", + "slab", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "async-lock" version = "2.8.0" @@ -388,20 +440,37 @@ dependencies = [ "event-listener 2.5.3", ] +[[package]] +name = "async-lock" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7125e42787d53db9dd54261812ef17e937c95a51e4d291373b670342fa44310c" +dependencies = [ + "event-listener 4.0.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-once-cell" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9338790e78aa95a416786ec8389546c4b6a1dfc3dc36071ed9518a9413a542eb" + [[package]] name = "async-process" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf012553ce51eb7aa6dc2143804cc8252bd1cb681a1c5cb7fa94ca88682dee1d" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" dependencies = [ - "async-io", - "async-lock", + "async-io 1.13.0", + "async-lock 2.8.0", "async-signal", "blocking", "cfg-if", - "event-listener 3.0.0", - "futures-lite", - "rustix 0.38.14", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.28", "windows-sys 0.48.0", ] @@ -413,23 +482,22 @@ checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] name = "async-signal" -version = "0.2.2" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c99f3cb3f9ff89f7d718fbb942c9eb91bedff12e396adf09a622dfe7ffec2bc2" +checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" dependencies = [ - "async-io", - "async-lock", + "async-io 2.2.2", + "async-lock 2.8.0", "atomic-waker", "cfg-if", - "concurrent-queue", "futures-core", "futures-io", - "libc", + "rustix 0.38.28", "signal-hook-registry", "slab", "windows-sys 0.48.0", @@ -437,19 +505,19 @@ dependencies = [ [[package]] name = "async-task" -version = "4.4.1" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9441c6b2fe128a7c2bf680a44c34d0df31ce09e5b7e401fcca3faa483dbc921" +checksum = "e1d90cd0b264dfdd8eb5bad0a2c217c1f88fa96a8573f40e7b12de23fb468f46" [[package]] name = "async-trait" -version = "0.1.73" +version = "0.1.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] @@ -459,36 +527,51 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] -name = "atomic_refcell" -version = "0.1.11" +name = "atspi" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112ef6b3f6cb3cb6fc5b6b494ef7a848492cff1ab0ef4de10b0f7d572861c905" +checksum = "6059f350ab6f593ea00727b334265c4dfc7fd442ee32d264794bd9bdc68e87ca" +dependencies = [ + "atspi-common", + "atspi-connection", + "atspi-proxies", +] [[package]] -name = "atspi" -version = "0.10.1" +name = "atspi-common" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "674e7a3376837b2e7d12d34d58ac47073c491dc3bf6f71a7adaf687d4d817faa" +checksum = "92af95f966d2431f962bc632c2e68eda7777330158bf640c4af4249349b2cdf5" dependencies = [ - "async-recursion", - "async-trait", - "atspi-macros", "enumflags2", - "futures-lite", "serde", - "tracing", + "static_assertions", "zbus", "zbus_names", + "zvariant", ] [[package]] -name = "atspi-macros" -version = "0.2.0" +name = "atspi-connection" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fb4870a32c0eaa17e35bca0e6b16020635157121fb7d45593d242c295bc768" +checksum = "a0c65e7d70f86d4c0e3b2d585d9bf3f979f0b19d635a336725a88d279f76b939" dependencies = [ - "quote", - "syn 1.0.109", + "atspi-common", + "atspi-proxies", + "futures-lite 1.13.0", + "zbus", +] + +[[package]] +name = "atspi-proxies" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6495661273703e7a229356dcbe8c8f38223d697aacfaf0e13590a9ac9977bb52" +dependencies = [ + "atspi-common", + "serde", + "zbus", ] [[package]] @@ -539,9 +622,9 @@ dependencies = [ [[package]] name = "base64" -version = "0.21.4" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "bat" @@ -579,7 +662,7 @@ version = "0.1.0" dependencies = [ "bincode", "chrono", - "clap 4.4.6", + "clap 4.4.11", "code_generation", "color-eyre", "communication", @@ -655,7 +738,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.37", + "syn 2.0.41", "which", ] @@ -665,7 +748,7 @@ version = "0.66.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.4.1", "cexpr", "clang-sys", "lazy_static", @@ -678,7 +761,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.37", + "syn 2.0.41", "which", ] @@ -696,9 +779,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" dependencies = [ "serde", ] @@ -739,16 +822,16 @@ dependencies = [ [[package]] name = "blocking" -version = "1.4.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94c4ef1f913d78636d78d538eec1f18de81e481f44b1be0a81060090530846e1" +checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" dependencies = [ "async-channel", - "async-lock", + "async-lock 3.2.0", "async-task", "fastrand 2.0.1", "futures-io", - "futures-lite", + "futures-lite 2.1.0", "piper", "tracing", ] @@ -764,9 +847,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.6.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a" +checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c" dependencies = [ "memchr", "regex-automata", @@ -796,14 +879,14 @@ checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" @@ -941,9 +1024,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.6" +version = "4.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956" +checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2" dependencies = [ "clap_builder", "clap_derive", @@ -951,9 +1034,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.6" +version = "4.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45" +checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb" dependencies = [ "anstream", "anstyle", @@ -963,30 +1046,30 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.4.3" +version = "4.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ae8ba90b9d8b007efe66e55e48fb936272f5ca00349b5b0e89877520d35ea7" +checksum = "bffe91f06a11b4b9420f62103854e90867812cd5d01557f853c5ee8e791b12ae" dependencies = [ - "clap 4.4.6", + "clap 4.4.11", ] [[package]] name = "clap_derive" -version = "4.4.2" +version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] name = "clap_lex" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "clipboard-win" @@ -1079,9 +1162,9 @@ dependencies = [ [[package]] name = "color-spantrace" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba75b3d9449ecdccb27ecbc479fdc0b87fa2dd43d2f8298f9bf0e59aacc8dce" +checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" dependencies = [ "once_cell", "owo-colors", @@ -1166,9 +1249,9 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" dependencies = [ "crossbeam-utils", ] @@ -1189,6 +1272,11 @@ dependencies = [ [[package]] name = "constants" version = "0.1.0" +dependencies = [ + "lazy_static", + "serde", + "serde_json", +] [[package]] name = "content_inspector" @@ -1217,6 +1305,7 @@ dependencies = [ "bincode", "color-eyre", "context_attribute", + "coordinate_systems", "filtering", "framework", "geometry", @@ -1246,11 +1335,19 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "coordinate_systems" +version = "0.1.0" +dependencies = [ + "geometry", + "nalgebra", +] + [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -1258,9 +1355,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "core-graphics" @@ -1277,9 +1374,9 @@ dependencies = [ [[package]] name = "core-graphics-types" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -1288,9 +1385,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] @@ -1306,9 +1403,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -1317,22 +1414,21 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "2d2fe95351b870527a5d09bf563ed3c97c0cffb87cf1c78a591bf48bb218d9aa" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", "memoffset 0.9.0", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" dependencies = [ "cfg-if", ] @@ -1365,9 +1461,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "depp" @@ -1379,9 +1475,12 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" +checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" +dependencies = [ + "powerfmt", +] [[package]] name = "derivative" @@ -1458,7 +1557,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading 0.8.0", + "libloading 0.8.1", ] [[package]] @@ -1479,9 +1578,9 @@ dependencies = [ [[package]] name = "ecolor" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e479a7fa3f23d4e794f8b2f8b3568dd4e47886ad1b12c9c095e141cb591eb63" +checksum = "4b7637fc2e74d17e52931bac90ff4fc061ac776ada9c7fa272f24cdca5991972" dependencies = [ "bytemuck", "serde", @@ -1489,9 +1588,9 @@ dependencies = [ [[package]] name = "eframe" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4596583a2c680c55b6feaa748f74890c4f9cb9c7cb69d6117110444cb65b2f" +checksum = "cdd73918a828c35a7efb4d7188ea973df4bffc589178ed95f521c917b03ddcfa" dependencies = [ "bytemuck", "cocoa", @@ -1506,10 +1605,12 @@ dependencies = [ "js-sys", "log", "objc", + "parking_lot", "percent-encoding", "raw-window-handle", "ron", "serde", + "static_assertions", "thiserror", "wasm-bindgen", "wasm-bindgen-futures", @@ -1520,9 +1621,9 @@ dependencies = [ [[package]] name = "egui" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3aef8ec3ae1b772f340170c65bf27d5b8c28f543a0116c844d2ac08d01123e7" +checksum = "c55bcb864b764eb889515a38b8924757657a250738ad15126637ee2df291ee6b" dependencies = [ "accesskit", "ahash", @@ -1535,26 +1636,27 @@ dependencies = [ [[package]] name = "egui-winit" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a49155fd4a0a4fb21224407a91de0030847972ef90fc64edb63621caea61cb2" +checksum = "3b673606b6606b12b95e3a3194d7882bf5cff302db36a520b8144c7c342e4e84" dependencies = [ "accesskit_winit", "arboard", "egui", - "instant", "log", "raw-window-handle", "serde", "smithay-clipboard", + "web-time", "webbrowser", "winit", ] [[package]] name = "egui_dock" -version = "0.6.1" -source = "git+https://github.com/knoellle/egui_dock/?tag=0.6.1#d92ba1f5327790223c82258f20cb15157da07d48" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246a6cbf38560cdcf75f955b1f2f39be6339a3f2958d06997ce70b7b4aa3f57d" dependencies = [ "duplicate", "egui", @@ -1564,30 +1666,42 @@ dependencies = [ [[package]] name = "egui_extras" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9278f4337b526f0d57e5375e5a7340a311fa6ee8f9fcc75721ac50af13face02" +checksum = "97624eaf17a16058265d3a3e712e167798655baf7c8f693de25be75cdd6c57b5" dependencies = [ "egui", + "enum-map", "image", + "log", + "mime_guess2", "serde", ] [[package]] name = "egui_glow" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f8c2752cdf1b0ef5fcda59a898cacabad974d4f5880e92a420b2c917022da64" +checksum = "262151f9d57c557c02a40a46f27b9e050a6eb0b006b94dced9c6f4519a04d489" dependencies = [ "bytemuck", "egui", "glow", "log", - "memoffset 0.6.5", + "memoffset 0.7.1", "wasm-bindgen", "web-sys", ] +[[package]] +name = "egui_plot" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b37b2edcdd197db41825266ae7979bd7591fa2eb6b40152375ac05eb323eb9d2" +dependencies = [ + "egui", +] + [[package]] name = "either" version = "1.9.0" @@ -1596,9 +1710,9 @@ checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "emath" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3857d743a6e0741cdd60b622a74c7a36ea75f5f8f11b793b41d905d2c9721a4b" +checksum = "a045c6c0b44b35e98513fc1e9d183ab42881ac27caccb9fa345465601f56cce4" dependencies = [ "bytemuck", "serde", @@ -1674,6 +1788,15 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + [[package]] name = "enum-iterator" version = "1.4.1" @@ -1691,7 +1814,28 @@ checksum = "eecf8589574ce9b895052fa12d69af7a233f99e6107f5cb8dd1044f2a17bfdcb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", +] + +[[package]] +name = "enum-map" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" +dependencies = [ + "enum-map-derive", + "serde", +] + +[[package]] +name = "enum-map-derive" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.41", ] [[package]] @@ -1703,7 +1847,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] @@ -1724,7 +1868,7 @@ checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] @@ -1735,18 +1879,17 @@ checksum = "c2ad8cef1d801a4686bfd8919f0b30eac4c8e48968c437a6405ded4fb5272d2b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] name = "epaint" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09333964d4d57f40a85338ba3ca5ed4716070ab184dcfed966b35491c5c64f3b" +checksum = "7d1b9e000d21bab9b535ce78f9f7745be28b3f777f6c7223936561c5c7fefab8" dependencies = [ "ab_glyph", "ahash", - "atomic_refcell", "bytemuck", "ecolor", "emath", @@ -1773,23 +1916,12 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "cc", "libc", + "windows-sys 0.52.0", ] [[package]] @@ -1810,15 +1942,36 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "3.0.0" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29e56284f00d94c1bc7fd3c77027b4623c88c1f53d8d2394c6199f2921dea325" +checksum = "84f2cdcf274580f2d63697192d744727b3198894b1bf02923643bf59e2c26712" dependencies = [ "concurrent-queue", "parking", "pin-project-lite", ] +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.1", + "pin-project-lite", +] + [[package]] name = "exr" version = "1.71.0" @@ -1837,9 +1990,9 @@ dependencies = [ [[package]] name = "eyre" -version = "0.6.8" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" +checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799" dependencies = [ "indenter", "once_cell", @@ -1849,7 +2002,7 @@ dependencies = [ name = "fanta" version = "0.1.0" dependencies = [ - "clap 4.4.6", + "clap 4.4.11", "color-eyre", "communication", "fern", @@ -1884,9 +2037,9 @@ checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fdeflate" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +checksum = "64d6dafc854908ff5da46ff3f8f473c6984119a2876a383a860246dd7841a868" dependencies = [ "simd-adler32", ] @@ -1922,9 +2075,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" dependencies = [ "crc32fast", "miniz_oxide", @@ -1962,9 +2115,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -1977,17 +2130,26 @@ dependencies = [ "serde", ] +[[package]] +name = "futures-channel" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +dependencies = [ + "futures-core", +] + [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-lite" @@ -2004,34 +2166,47 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "futures-lite" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aeee267a1883f7ebef3700f262d2d54de95dfaf38189015a74fdc4e0c7ad8143" +dependencies = [ + "fastrand 2.0.1", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" dependencies = [ "futures-core", "futures-io", @@ -2075,9 +2250,9 @@ dependencies = [ [[package]] name = "gethostname" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +checksum = "bb65d4ba3173c56a500b555b532f72c42e8d1fe64962b518897f8959fae2c177" dependencies = [ "libc", "winapi", @@ -2085,9 +2260,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ "cfg-if", "libc", @@ -2106,9 +2281,9 @@ dependencies = [ [[package]] name = "gilrs" -version = "0.10.2" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62fd19844d0eb919aca41d3e4ea0e0b6bf60e1e827558b101c269015b8f5f27a" +checksum = "d8b2e57a9cb946b5d04ae8638c5f554abb5a9f82c4c950fd5b1fee6d119592fb" dependencies = [ "fnv", "gilrs-core", @@ -2119,29 +2294,30 @@ dependencies = [ [[package]] name = "gilrs-core" -version = "0.5.7" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ccc99e9b8d63ffcaa334c4babfa31f46e156618a11f63efb6e8e6bcb37b830d" +checksum = "0af1827b7dd2f36d740ae804c1b3ea0d64c12533fb61ff91883005143a0e8c5a" dependencies = [ "core-foundation", + "inotify", "io-kit-sys", "js-sys", "libc", "libudev-sys", "log", - "nix 0.26.4", + "nix 0.27.1", "uuid", "vec_map", "wasm-bindgen", "web-sys", - "windows 0.51.1", + "windows 0.52.0", ] [[package]] name = "gimli" -version = "0.28.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "gl_generator" @@ -2162,15 +2338,15 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" +checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" dependencies = [ "aho-corasick", - "bstr 1.6.2", - "fnv", + "bstr 1.8.0", "log", - "regex", + "regex-automata", + "regex-syntax 0.8.2", ] [[package]] @@ -2251,32 +2427,49 @@ dependencies = [ [[package]] name = "grep-cli" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fe4bdbf4300c8b039f5d7eec7fbc6760d2c85bb15ac7499c4d235667f6d747a" +checksum = "ea40788c059ab8b622c4d074732750bfb3bd2912e2dd58eabc11798a4d5ad725" dependencies = [ - "bstr 1.6.2", + "bstr 1.8.0", "globset", - "lazy_static", + "libc", "log", - "regex", - "same-file", "termcolor", "winapi-util", ] [[package]] -name = "half" -version = "2.2.1" +name = "h2" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" -dependencies = [ - "crunchy", -] - -[[package]] -name = "hardware" -version = "0.1.0" +checksum = "b553656127a00601c8ae5590fcfdc118e4083a7924b6cf4ffc1ea4b99dc429d7" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 2.1.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +dependencies = [ + "crunchy", +] + +[[package]] +name = "hardware" +version = "0.1.0" dependencies = [ "color-eyre", "types", @@ -2290,9 +2483,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.0" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" [[package]] name = "heck" @@ -2332,30 +2525,47 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "home" -version = "0.5.5" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "http" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", "itoa", ] +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + [[package]] name = "httparse" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + [[package]] name = "hula-types" version = "0.1.0" @@ -2442,6 +2652,43 @@ dependencies = [ "webots", ] +[[package]] +name = "hyper" +version = "0.14.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.5", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + [[package]] name = "i2cdev" version = "0.5.1" @@ -2456,16 +2703,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.57" +version = "0.1.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows 0.48.0", + "windows-core 0.51.1", ] [[package]] @@ -2479,9 +2726,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2524,12 +2771,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad227c3af19d4914570ad36d30409928b75967c298feb9ea1969db3a610bb14e" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", - "hashbrown 0.14.0", + "hashbrown 0.14.3", ] [[package]] @@ -2545,6 +2792,26 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "inotify" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + [[package]] name = "instant" version = "0.1.12" @@ -2559,9 +2826,9 @@ dependencies = [ [[package]] name = "io-kit-sys" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2d4429acc1deff0fbdece0325b4997bdb02b2c245ab7023fd5deca0f6348de" +checksum = "4769cb30e5dcf1710fc6730d3e94f78c47723a014a567de385e113c737394640" dependencies = [ "core-foundation-sys", "mach2", @@ -2578,6 +2845,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + [[package]] name = "is-terminal" version = "0.4.9" @@ -2585,7 +2858,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ "hermit-abi 0.3.3", - "rustix 0.38.14", + "rustix 0.38.28", "windows-sys 0.48.0", ] @@ -2600,15 +2873,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "ittapi" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41e0d0b7b3b53d92a7e8b80ede3400112a6b8b4c98d1f5b8b16bb787c780582c" +checksum = "25a5c0b993601cad796222ea076565c5d9f337d35592f8622c753724f06d7271" dependencies = [ "anyhow", "ittapi-sys", @@ -2617,9 +2890,9 @@ dependencies = [ [[package]] name = "ittapi-sys" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f8763c96e54e6d6a0dccc2990d8b5e33e3313aaeae6185921a3f4c1614a77c" +checksum = "cb7b5e473765060536a660eed127f758cf1a810c73e49063264959c60d1727d9" dependencies = [ "cc", ] @@ -2648,9 +2921,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" dependencies = [ "libc", ] @@ -2666,9 +2939,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" dependencies = [ "wasm-bindgen", ] @@ -2719,9 +2992,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.148" +version = "0.2.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" [[package]] name = "libloading" @@ -2735,9 +3008,9 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" dependencies = [ "cfg-if", "windows-sys 0.48.0", @@ -2745,9 +3018,31 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.7" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "libredox" +version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] [[package]] name = "libudev-sys" @@ -2782,16 +3077,16 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.7" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" [[package]] name = "localizer" version = "0.1.0" dependencies = [ "bincode", - "clap 4.4.6", + "clap 4.4.11", "color-eyre", "communication", "control", @@ -2806,9 +3101,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -2822,9 +3117,9 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "mach2" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8" +checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" dependencies = [ "libc", ] @@ -2850,9 +3145,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.6.3" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memmap2" @@ -2890,6 +3185,22 @@ dependencies = [ "autocfg", ] +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess2" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a3333bb1609500601edc766a39b4c1772874a4ce26022f4d866854dc020c41" +dependencies = [ + "mime", + "unicase", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -2908,9 +3219,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.8" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", "log", @@ -2998,6 +3309,24 @@ dependencies = [ "types", ] +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "ndk" version = "0.7.0" @@ -3096,7 +3425,7 @@ version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.4.1", "cfg-if", "libc", ] @@ -3149,13 +3478,13 @@ dependencies = [ [[package]] name = "num-derive" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e6a0fd4f737c707bd9086cc16c925f294943eb62eb71499e9fd4cf71f8b9f4e" +checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] @@ -3181,9 +3510,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" dependencies = [ "autocfg", "libm", @@ -3238,7 +3567,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] @@ -3313,9 +3642,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "onig" @@ -3339,6 +3668,50 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "openssl" +version = "0.10.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671" +dependencies = [ + "bitflags 2.4.1", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.41", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "option-ext" version = "0.2.0" @@ -3352,7 +3725,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f40c412371d87b6055dc8015d3054efe957fd375321bd5b5a045475f6bbc0c5" dependencies = [ "bindgen 0.66.1", - "num-derive 0.4.0", + "num-derive 0.4.1", "num-traits", "pkg-config", "thiserror", @@ -3360,18 +3733,18 @@ dependencies = [ [[package]] name = "orbclient" -version = "0.3.46" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8378ac0dfbd4e7895f2d2c1f1345cab3836910baf3a300b000d04250f0c8428f" +checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" dependencies = [ - "redox_syscall 0.3.5", + "libredox 0.0.2", ] [[package]] name = "ordered-float" -version = "3.9.1" +version = "3.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a54938017eacd63036332b4ae5c8a49fc8c0c1d6d629893057e4f13609edd06" +checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc" dependencies = [ "num-traits", ] @@ -3388,9 +3761,9 @@ dependencies = [ [[package]] name = "owned_ttf_parser" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "706de7e2214113d63a8238d1910463cfce781129a6f263d13fdb09ff64355ba4" +checksum = "d4586edfe4c648c71797a74c84bacb32b52b212eff5dfe2bb9f2c599844023e7" dependencies = [ "ttf-parser", ] @@ -3413,9 +3786,9 @@ dependencies = [ [[package]] name = "parking" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e52c774a4c39359c1d1c52e43f73dd91a75a614652c825408eec30c95a9b2067" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" [[package]] name = "parking_lot" @@ -3429,13 +3802,13 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", + "redox_syscall 0.4.1", "smallvec", "windows-targets 0.48.5", ] @@ -3463,11 +3836,11 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "pepsi" -version = "2.5.0" +version = "2.6.1" dependencies = [ "aliveness", "bat", - "clap 4.4.6", + "clap 4.4.11", "clap_complete", "color-eyre", "constants", @@ -3485,9 +3858,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" @@ -3496,7 +3869,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.0.1", + "indexmap 2.1.0", ] [[package]] @@ -3530,12 +3903,12 @@ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "plist" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdc0001cfea3db57a2e24bc0d818e9e20e554b5f97fabb9bc231dc240269ae06" +checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" dependencies = [ "base64", - "indexmap 1.9.3", + "indexmap 2.1.0", "line-wrap", "quick-xml", "serde", @@ -3571,11 +3944,31 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "polling" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf63fa624ab313c11656b4cda960bfc46c410187ad493c41f6ba2d8c1e991c9e" +dependencies = [ + "cfg-if", + "concurrent-queue", + "pin-project-lite", + "rustix 0.38.28", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "portable-atomic" -version = "1.4.3" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" @@ -3590,7 +3983,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ "proc-macro2", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] @@ -3609,7 +4002,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ "once_cell", - "toml_edit", + "toml_edit 0.19.15", ] [[package]] @@ -3638,9 +4031,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.67" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" dependencies = [ "unicode-ident", ] @@ -3666,9 +4059,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b9228215d82c7b61490fec1de287136b5de6f5700f6e58ea9ad61a7964ca51" +checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" dependencies = [ "memchr", ] @@ -3756,54 +4149,54 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.3.5" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ "getrandom", - "redox_syscall 0.2.16", + "libredox 0.0.1", "thiserror", ] [[package]] name = "regex" -version = "1.9.5" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" dependencies = [ "aho-corasick", "memchr", "regex-automata", - "regex-syntax", + "regex-syntax 0.8.2", ] [[package]] name = "regex-automata" -version = "0.3.8" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.2", ] [[package]] @@ -3812,6 +4205,12 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + [[package]] name = "repository" version = "0.1.0" @@ -3832,11 +4231,49 @@ dependencies = [ "toml", ] +[[package]] +name = "reqwest" +version = "0.11.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + [[package]] name = "rgb" -version = "0.8.36" +version = "0.8.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59" +checksum = "05aaa8004b64fd573fc9d002f4e632d51ad4f026c2b5ba95fcb6c2f32c2c47d8" dependencies = [ "bytemuck", ] @@ -3848,7 +4285,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ "base64", - "bitflags 2.4.0", + "bitflags 2.4.1", "serde", "serde_derive", ] @@ -3891,9 +4328,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.23" +version = "0.37.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" dependencies = [ "bitflags 1.3.2", "errno", @@ -3905,22 +4342,22 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.14" +version = "0.38.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f" +checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" dependencies = [ - "bitflags 2.4.0", + "bitflags 2.4.1", "errno", "libc", - "linux-raw-sys 0.4.7", - "windows-sys 0.48.0", + "linux-raw-sys 0.4.12", + "windows-sys 0.52.0", ] [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "safe_arch" @@ -3946,6 +4383,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -3971,6 +4417,29 @@ dependencies = [ "tiny-skia", ] +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "semver" version = "1.0.20" @@ -3979,29 +4448,29 @@ checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" [[package]] name = "serde" -version = "1.0.188" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.188" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] name = "serde_json" -version = "1.0.107" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ "itoa", "ryu", @@ -4010,24 +4479,36 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00" +checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] name = "serde_spanned" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "serde_yaml" version = "0.8.26" @@ -4075,9 +4556,9 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1b21f559e07218024e7e9f90f96f601825397de0e25420135f7f952453fed0b" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] @@ -4133,18 +4614,18 @@ dependencies = [ [[package]] name = "slotmap" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" dependencies = [ "version_check", ] [[package]] name = "smallvec" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" [[package]] name = "smithay-client-toolkit" @@ -4177,9 +4658,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", @@ -4187,9 +4668,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ "libc", "windows-sys 0.48.0", @@ -4251,9 +4732,9 @@ dependencies = [ [[package]] name = "splines" -version = "4.3.0" +version = "4.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b71c74502daf438e97dc4eee0265c084cf76701992a4997f94d5b909498ad1d" +checksum = "228c4551e53c672e86439509545dd7ffcb966b6876c58b108e433a30e6117101" dependencies = [ "serde", ] @@ -4337,9 +4818,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.37" +version = "2.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" +checksum = "44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269" dependencies = [ "proc-macro2", "quote", @@ -4358,31 +4839,52 @@ dependencies = [ "fnv", "once_cell", "onig", - "regex-syntax", + "regex-syntax 0.7.5", "serde", "serde_json", "thiserror", "walkdir", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tempfile" -version = "3.8.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" dependencies = [ "cfg-if", "fastrand 2.0.1", - "redox_syscall 0.3.5", - "rustix 0.38.14", + "redox_syscall 0.4.1", + "rustix 0.38.28", "windows-sys 0.48.0", ] [[package]] name = "termcolor" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" +checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" dependencies = [ "winapi-util", ] @@ -4398,22 +4900,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.49" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4" +checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.49" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" +checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] @@ -4445,12 +4947,13 @@ dependencies = [ [[package]] name = "time" -version = "0.3.29" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "426f806f4089c493dcac0d24c29c01e2c38baf8e30f1b716ee37e83d200b18fe" +checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" dependencies = [ "deranged", "itoa", + "powerfmt", "serde", "time-core", "time-macros", @@ -4464,9 +4967,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" dependencies = [ "time-core", ] @@ -4513,9 +5016,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.32.0" +version = "1.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" +checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c" dependencies = [ "backtrace", "bytes", @@ -4525,20 +5028,30 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.4", + "socket2 0.5.5", "tokio-macros", "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", ] [[package]] @@ -4555,34 +5068,35 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", + "tracing", ] [[package]] name = "toml" -version = "0.7.8" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.21.0", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" dependencies = [ "serde", ] @@ -4593,7 +5107,18 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.0.1", + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" +dependencies = [ + "indexmap 2.1.0", "serde", "serde_spanned", "toml_datetime", @@ -4606,13 +5131,18 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea68304e134ecd095ac6c3574494fc62b909f416c4fca77e440530221e549d3d" +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -4620,20 +5150,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.26" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -4651,9 +5181,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "sharded-slab", "thread_local", @@ -4670,11 +5200,17 @@ dependencies = [ "strength_reduce", ] +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "ttf-parser" -version = "0.19.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49d64318d8311fc2668e48b63969f4343e0a85c4a109aa8460d6672e364b8bd1" +checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" [[package]] name = "tungstenite" @@ -4707,6 +5243,7 @@ dependencies = [ "eframe", "egui_dock", "egui_extras", + "egui_plot", "fern", "fuzzy-matcher", "geometry", @@ -4736,7 +5273,9 @@ name = "types" version = "0.1.0" dependencies = [ "approx", + "approx_derive", "color-eyre", + "coordinate_systems", "enum-iterator", "geometry", "image", @@ -4753,19 +5292,29 @@ dependencies = [ [[package]] name = "uds_windows" -version = "1.0.2" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" dependencies = [ + "memoffset 0.9.0", "tempfile", "winapi", ] +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" [[package]] name = "unicode-ident" @@ -4796,9 +5345,9 @@ checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] name = "url" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -4819,9 +5368,9 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.4.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" +checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" dependencies = [ "getrandom", ] @@ -4832,6 +5381,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "vec_map" version = "0.8.2" @@ -4882,6 +5437,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -4890,9 +5454,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -4900,24 +5464,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" dependencies = [ "cfg-if", "js-sys", @@ -4927,9 +5491,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4937,22 +5501,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.41", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" [[package]] name = "wayland-client" @@ -5041,9 +5605,19 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "57099a701fb3a8043f993e8228dc24229c7b942e2b009a1b962e54489ba1d3bf" dependencies = [ "js-sys", "wasm-bindgen", @@ -5051,9 +5625,9 @@ dependencies = [ [[package]] name = "webbrowser" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2c79b77f525a2d670cb40619d7d9c673d09e0666f72c591ebd7861f84a87e57" +checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71" dependencies = [ "core-foundation", "home", @@ -5101,14 +5675,14 @@ dependencies = [ "either", "home", "once_cell", - "rustix 0.38.14", + "rustix 0.38.28", ] [[package]] name = "wide" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa469ffa65ef7e0ba0f164183697b89b854253fd31aeb92358b7b6155177d62f" +checksum = "c68938b57b33da363195412cfc5fc37c9ed49aa9cfe2156fde64b8d2c9498242" dependencies = [ "bytemuck", "safe_arch", @@ -5167,12 +5741,12 @@ dependencies = [ [[package]] name = "windows" -version = "0.51.1" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" dependencies = [ - "windows-core", - "windows-targets 0.48.5", + "windows-core 0.52.0", + "windows-targets 0.52.0", ] [[package]] @@ -5184,6 +5758,15 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-implement" version = "0.48.0" @@ -5224,6 +5807,15 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -5254,6 +5846,21 @@ dependencies = [ "windows_x86_64_msvc 0.48.5", ] +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -5266,6 +5873,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -5278,6 +5891,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -5290,6 +5909,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -5302,6 +5927,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -5314,6 +5945,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -5326,6 +5963,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -5338,6 +5981,12 @@ version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + [[package]] name = "winit" version = "0.28.7" @@ -5375,13 +6024,23 @@ dependencies = [ [[package]] name = "winnow" -version = "0.5.15" +version = "0.5.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" +checksum = "9b5c3db89721d50d0e2a673f5043fc4722f76dcc352d7b1ab8b8288bed4ed2c5" dependencies = [ "memchr", ] +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + [[package]] name = "x11-dl" version = "2.21.0" @@ -5395,12 +6054,12 @@ dependencies = [ [[package]] name = "x11rb" -version = "0.10.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507" +checksum = "b1641b26d4dec61337c35a1b1aaf9e3cba8f46f0b43636c609ab0291a648040a" dependencies = [ "gethostname", - "nix 0.24.3", + "nix 0.26.4", "winapi", "winapi-wsapoll", "x11rb-protocol", @@ -5408,21 +6067,18 @@ dependencies = [ [[package]] name = "x11rb-protocol" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67" +checksum = "82d6c3f9a0fb6701fab8f6cea9b0c0bd5d6876f1f89f7fada07e558077c344bc" dependencies = [ - "nix 0.24.3", + "nix 0.26.4", ] [[package]] name = "xcursor" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" -dependencies = [ - "nom", -] +checksum = "6a0ccd7b4a5345edfcd0c3535718a4e9ff7798ffc536bb5b5a0e26ff84732911" [[package]] name = "xdg-home" @@ -5458,8 +6114,8 @@ dependencies = [ "async-broadcast", "async-executor", "async-fs", - "async-io", - "async-lock", + "async-io 1.13.0", + "async-lock 2.8.0", "async-process", "async-recursion", "async-task", @@ -5515,6 +6171,26 @@ dependencies = [ "zvariant", ] +[[package]] +name = "zerocopy" +version = "0.7.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.41", +] + [[package]] name = "zune-inflate" version = "0.2.54" diff --git a/Cargo.toml b/Cargo.toml index 99a20fc..70e34f8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,7 @@ resolver = "2" members = [ "crates/aliveness", + "crates/approx_derive", "crates/audio", "crates/calibration", "crates/code_generation", @@ -9,6 +10,7 @@ members = [ "crates/constants", "crates/context_attribute", "crates/control", + "crates/coordinate_systems", "crates/filtering", "crates/framework", "crates/geometry", @@ -30,6 +32,7 @@ members = [ "crates/spl_network_messages", "crates/types", "crates/vision", + "tools/annotato", "tools/behavior_simulator", "tools/camera_matrix_extractor", "tools/depp", @@ -40,12 +43,19 @@ members = [ "tools/twix", ] # HuLA and Aliveness are built independently by yocto -exclude = ["tools/aliveness", "tools/hula"] +exclude = ["tools/aliveness", "tools/breeze", "tools/hula"] + +[workspace.package] +version = "0.1.0" +edition = "2021" +license = "GPL-3.0-only" +homepage = "https://github.com/hulks/hulk" [workspace.dependencies] aliveness = { path = "crates/aliveness" } alsa = "0.7.0" approx = "0.5.1" +approx_derive = { path = "crates/approx_derive" } audio = { path = "crates/audio" } awaitgroup = "0.6.0" base64 = "0.21.0" @@ -69,12 +79,12 @@ constants = { path = "crates/constants" } context_attribute = { path = "crates/context_attribute" } control = { path = "crates/control" } convert_case = "0.6.0" +coordinate_systems = { path = "crates/coordinate_systems" } ctrlc = { version = "3.2.3", features = ["termination"] } -eframe = { version = "0.22.0", features = ["persistence"] } -egui_dock = { version = "0.6.1", git = "https://github.com/knoellle/egui_dock/", tag = "0.6.1", features = [ - "serde", -] } -egui_extras = { version = "0.22.0", features = ["image"] } +eframe = { version = "0.24.1", features = ["persistence"] } +egui_dock = { version = "0.9.1", features = ["serde"] } +egui_extras = { version = "0.24.2", features = ["image"] } +egui_plot = "0.24.1" enum_dispatch = "0.3.11" enum-iterator = "1.4.1" fast_image_resize = "2.6.0" @@ -96,6 +106,8 @@ indicatif = "0.17.2" itertools = "0.10.5" ittapi = "0.3.3" kinematics = { path = "crates/kinematics" } +once_cell = "1.19.0" +lazy_static = "1.4.0" levenberg-marquardt = "0.13.0" libc = "0.2.137" log = "0.4.17" @@ -122,6 +134,7 @@ rand = "0.8.5" rand_distr = "0.4.3" regex = "1.6.0" repository = { path = "crates/repository" } +reqwest = { version = "0.11.23", features = ["blocking"] } rustfft = "6.0.1" semver = "1.0.20" serde = { version = "1.0.145", features = ["derive", "rc"] } @@ -144,7 +157,7 @@ threadbound = "0.1.6" tokio = { version = "1.21.2", features = ["full"] } tokio-tungstenite = "0.19.0" tokio-util = "0.7.4" -toml = "0.7.4" +toml = "0.8.8" topological-sort = "0.2.2" types = { path = "crates/types" } uuid = { version = "1.1.2", features = ["v4"] } diff --git a/README.md b/README.md index a808e19..2a26fee 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,11 @@ -# Tamboerijn +# HULK -This repo contains the codebase for Rinobot-Jaguar. -It is based in the HULKs 2023 code release. - -In the future we will add PT-BR docs. +This repository contains the robot control program and associated tools of the RoboCup SPL team HULKs. See https://hulks.de/hulk/ for our documentation. See https://hulks.de/ and https://hulks.de/publications/ for more information. -_dont ask about the name_ - -bisnaguinha - ## License Copyright (C) 2018-2023 HULKs e.V. diff --git a/annotato.toml b/annotato.toml new file mode 100644 index 0000000..fe5ba8a --- /dev/null +++ b/annotato.toml @@ -0,0 +1,23 @@ +[remote] +rsync_path = "rsync://10.1.24.185/labelparty/output" + +[leaderboard] +enable = true +host = "10.1.24.185:3000" +githubname = "" + +[keybindings] +next = { primary = "Space" } +previous = { primary = "Space", modifiers = ["shift"] } +edit = { primary = "Q" } +zoom = { primary = "E" } +draw = { primary = "B" } +abort = { primary = "Escape" } + +select_ball = "Num1" +select_robot = "Num2" +select_goalpost = "Num3" +select_penaltyspot = "Num4" +select_xspot = "Num5" +select_lspot = "Num6" +select_tspot = "Num7" diff --git a/crates/aliveness/Cargo.toml b/crates/aliveness/Cargo.toml index 0fbaed0..29174aa 100644 --- a/crates/aliveness/Cargo.toml +++ b/crates/aliveness/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "aliveness" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] futures-util = { workspace = true } diff --git a/crates/approx_derive/Cargo.toml b/crates/approx_derive/Cargo.toml new file mode 100644 index 0000000..a44b4e9 --- /dev/null +++ b/crates/approx_derive/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "approx_derive" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true + +[dependencies] +proc-macro-error = { workspace = true } +proc-macro2 = { workspace = true } +quote = { workspace = true } +syn = { workspace = true } + +[lib] +proc-macro = true diff --git a/crates/approx_derive/src/lib.rs b/crates/approx_derive/src/lib.rs new file mode 100644 index 0000000..f119c61 --- /dev/null +++ b/crates/approx_derive/src/lib.rs @@ -0,0 +1,136 @@ +use proc_macro2::TokenStream; +use proc_macro_error::{abort, proc_macro_error, OptionExt, ResultExt}; +use quote::quote; +use syn::{ + parse_macro_input, + punctuated::{self}, + Attribute, Data, DeriveInput, Lit, Meta, MetaNameValue, NestedMeta, Type, +}; + +#[proc_macro_derive(AbsDiffEq, attributes(abs_diff_eq))] +#[proc_macro_error] +pub fn abs_diff_eq(input: proc_macro::TokenStream) -> proc_macro::TokenStream { + let input = parse_macro_input!(input as DeriveInput); + generate_abs_diff_eq(input).into() +} + +fn generate_abs_diff_eq(input: DeriveInput) -> TokenStream { + let fields = match input.data { + Data::Struct(data) => data.fields, + Data::Enum(data) => abort!( + data.enum_token, + "`AbsDiffEq` can only be derived for `struct`", + ), + Data::Union(data) => abort!( + data.union_token, + "`AbsDiffEq` can only be derived for `struct`", + ), + }; + let epsilon = extract_epsilon(&input.attrs).expect_or_abort("`epsilon` not specified"); + let name = input.ident; + + let conditions = fields.into_iter().map(|field| { + let identifier = field + .ident + .clone() + .unwrap_or_else(|| abort!(field, "field has to be named")); + quote! { + self.#identifier.abs_diff_eq(&other.#identifier, epsilon) + } + }); + + quote! { + impl approx::AbsDiffEq for #name { + type Epsilon = #epsilon; + + fn default_epsilon() -> Self::Epsilon { + Self::Epsilon::default_epsilon() + } + + fn abs_diff_eq(&self, other: &Self, epsilon: Self::Epsilon) -> bool { + #(#conditions)&&* + } + } + } +} + +fn extract_epsilon(attrs: &[Attribute]) -> Option { + attrs + .iter() + .filter_map(parse_meta_items) + .flatten() + .find_map(|meta| match meta { + NestedMeta::Meta(Meta::NameValue(MetaNameValue { path, lit, .. })) + if path.is_ident("epsilon") => + { + let string = match lit { + Lit::Str(string) => string, + _ => abort!(lit, "expected string literal"), + }; + let epsilon = string + .parse() + .expect_or_abort("failed to parse epsilon type"); + Some(epsilon) + } + _ => None, + }) +} + +fn parse_meta_items(attribute: &Attribute) -> Option> { + if !attribute.path.is_ident("abs_diff_eq") { + return None; + } + match attribute.parse_meta() { + Ok(Meta::List(meta)) => Some(meta.nested.into_iter()), + Ok(other) => abort!(other, "expected `#[abs_diff_eq(...)]`",), + Err(error) => abort!(error.span(), error.to_string()), + } +} + +#[proc_macro_derive(RelativeEq)] +#[proc_macro_error] +pub fn relative_eq(input: proc_macro::TokenStream) -> proc_macro::TokenStream { + let input = parse_macro_input!(input as DeriveInput); + generate_relative_eq(input).into() +} + +fn generate_relative_eq(input: DeriveInput) -> TokenStream { + let fields = match input.data { + Data::Struct(data) => data.fields, + Data::Enum(data) => abort!( + data.enum_token, + "`RelativeEq` can only be derived for `struct`", + ), + Data::Union(data) => abort!( + data.union_token, + "`RelativeEq` can only be derived for `struct`", + ), + }; + let name = input.ident; + let conditions = fields.into_iter().map(|field| { + let identifier = field + .ident + .clone() + .unwrap_or_else(|| abort!(field, "field has to be named")); + quote! { + self.#identifier.relative_eq(&other.#identifier, epsilon, max_relative) + } + }); + + quote! { + impl approx::RelativeEq for #name { + fn default_max_relative() -> Self::Epsilon { + Self::Epsilon::default_max_relative() + } + + fn relative_eq( + &self, + other: &Self, + epsilon: Self::Epsilon, + max_relative: Self::Epsilon, + ) -> bool { + #(#conditions)&&* + } + } + } +} diff --git a/crates/audio/Cargo.toml b/crates/audio/Cargo.toml index 9e652ec..b71d95b 100644 --- a/crates/audio/Cargo.toml +++ b/crates/audio/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "audio" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] color-eyre = { workspace = true } diff --git a/crates/calibration/Cargo.toml b/crates/calibration/Cargo.toml index c785f55..68bdbbf 100644 --- a/crates/calibration/Cargo.toml +++ b/crates/calibration/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "calibration" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] levenberg-marquardt = { workspace = true } diff --git a/crates/code_generation/Cargo.toml b/crates/code_generation/Cargo.toml index 7692b33..81e88c8 100644 --- a/crates/code_generation/Cargo.toml +++ b/crates/code_generation/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "code_generation" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] thiserror = { workspace = true } diff --git a/crates/code_generation/src/run.rs b/crates/code_generation/src/run.rs index 314caee..b46f565 100644 --- a/crates/code_generation/src/run.rs +++ b/crates/code_generation/src/run.rs @@ -119,10 +119,17 @@ fn generate_future_queues(cyclers: &Cyclers) -> TokenStream { fn generate_recording_thread(cyclers: &Cyclers) -> TokenStream { let file_creations = cyclers.instances().map(|(_cycler, instance)| { let instance_name_snake_case = format_ident!("{}", instance.to_case(Case::Snake)); - let recording_file_path = format!("logs/{instance}.{{seconds}}.bincode"); - let error_message = format!("failed to create recording file for {instance}"); + let recording_file_name = format!("{instance}.{{seconds}}.bincode"); + let error_message_file = format!("failed to create recording file for {instance}"); + quote! { - let mut #instance_name_snake_case = std::io::BufWriter::new(std::fs::File::create(format!(#recording_file_path)).wrap_err(#error_message)?); // TODO: possible optimization: buffer size + let recording_file_path = std::path::Path::new("logs").join(format!(#recording_file_name)); + std::fs::create_dir_all( + recording_file_path.parent() + .expect("recording file path has no parent directory") + ).wrap_err("failed to create logs folder")?; + + let mut #instance_name_snake_case = std::io::BufWriter::new(std::fs::File::create(recording_file_path).wrap_err(#error_message_file)?); // TODO: possible optimization: buffer size } }); let frame_writes = cyclers.instances().map(|(_cycler, instance)| { diff --git a/crates/communication/Cargo.toml b/crates/communication/Cargo.toml index c7a88ef..650abe1 100644 --- a/crates/communication/Cargo.toml +++ b/crates/communication/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "communication" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] bincode = { workspace = true } diff --git a/crates/constants/Cargo.toml b/crates/constants/Cargo.toml index 757501e..43cb623 100644 --- a/crates/constants/Cargo.toml +++ b/crates/constants/Cargo.toml @@ -1,8 +1,11 @@ [package] name = "constants" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] +lazy_static = {workspace = true} +serde = {workspace = true} +serde_json = {workspace = true} diff --git a/crates/constants/src/lib.rs b/crates/constants/src/lib.rs index 2dd9f53..0762f86 100644 --- a/crates/constants/src/lib.rs +++ b/crates/constants/src/lib.rs @@ -1,7 +1,23 @@ +use lazy_static::lazy_static; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; + +#[derive(Debug, Serialize, Deserialize)] +pub struct HardwareId { + pub body_id: String, + pub head_id: String, +} + pub const HULA_DBUS_INTERFACE: &str = "org.hulks.hula"; pub const HULA_DBUS_PATH: &str = "/org/hulks/HuLA"; pub const HULA_DBUS_SERVICE: &str = "org.hulks.hula"; pub const HULA_SOCKET_PATH: &str = "/tmp/hula"; pub const OS_RELEASE_PATH: &str = "/etc/os-release"; -pub const OS_VERSION: &str = "5.9.0"; +pub const OS_VERSION: &str = "5.9.1"; pub const SDK_VERSION: &str = "5.9.0"; +lazy_static! { + pub static ref HARDWARE_IDS: HashMap = { + let content = include_str!("../../../etc/parameters/hardware_ids.json"); + serde_json::from_str(content).unwrap() + }; +} diff --git a/crates/context_attribute/Cargo.toml b/crates/context_attribute/Cargo.toml index 7439990..62a36e2 100644 --- a/crates/context_attribute/Cargo.toml +++ b/crates/context_attribute/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "context_attribute" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] proc-macro-error = { workspace = true } diff --git a/crates/control/Cargo.toml b/crates/control/Cargo.toml index 2497bf9..6bcb653 100644 --- a/crates/control/Cargo.toml +++ b/crates/control/Cargo.toml @@ -1,15 +1,16 @@ [package] name = "control" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] approx = { workspace = true } bincode = { workspace = true } color-eyre = { workspace = true } context_attribute = { workspace = true } +coordinate_systems = { workspace = true } filtering = { workspace = true } framework = { workspace = true } geometry = { workspace = true } diff --git a/crates/control/src/ball_state_composer.rs b/crates/control/src/ball_state_composer.rs index ba73878..84b2784 100644 --- a/crates/control/src/ball_state_composer.rs +++ b/crates/control/src/ball_state_composer.rs @@ -9,8 +9,9 @@ use serde::{Deserialize, Serialize}; use spl_network_messages::{SubState, Team}; use types::{ ball_position::BallPosition, cycle_time::CycleTime, field_dimensions::FieldDimensions, - game_controller_state::GameControllerState, penalty_shot_direction::PenaltyShotDirection, - primary_state::PrimaryState, support_foot::Side, world_state::BallState, + filtered_game_controller_state::FilteredGameControllerState, + penalty_shot_direction::PenaltyShotDirection, primary_state::PrimaryState, support_foot::Side, + world_state::BallState, }; #[derive(Deserialize, Serialize)] @@ -29,7 +30,8 @@ pub struct CycleContext { robot_to_field: Input>, "robot_to_field?">, team_ball: Input, "team_ball?">, primary_state: Input, - game_controller_state: Input, "game_controller_state?">, + filtered_game_controller_state: + Input, "filtered_game_controller_state?">, field_dimensions: Parameter, } @@ -75,12 +77,12 @@ impl BallStateComposer { let rule_ball = match ( context.primary_state, context.robot_to_field, - context.game_controller_state, + context.filtered_game_controller_state, ) { ( PrimaryState::Ready, Some(robot_to_field), - Some(GameControllerState { + Some(FilteredGameControllerState { sub_state: Some(SubState::PenaltyKick), kicking_team, .. diff --git a/crates/control/src/behavior/calibrate.rs b/crates/control/src/behavior/calibrate.rs index a20035a..d671879 100644 --- a/crates/control/src/behavior/calibrate.rs +++ b/crates/control/src/behavior/calibrate.rs @@ -6,10 +6,7 @@ use types::{ pub fn execute(world_state: &WorldState) -> Option { match world_state.robot.primary_state { - PrimaryState::Calibration => Some(MotionCommand::Stand { - head: Unstiff, - is_energy_saving: false, - }), + PrimaryState::Calibration => Some(MotionCommand::Stand { head: Unstiff }), _ => None, } } diff --git a/crates/control/src/behavior/defend.rs b/crates/control/src/behavior/defend.rs index 4541f3c..6920340 100644 --- a/crates/control/src/behavior/defend.rs +++ b/crates/control/src/behavior/defend.rs @@ -6,7 +6,7 @@ use nalgebra::{distance, point, vector, Isometry2, Point2}; use spl_network_messages::{GamePhase, SubState, Team}; use types::{ field_dimensions::FieldDimensions, - game_controller_state::GameControllerState, + filtered_game_controller_state::FilteredGameControllerState, line::Line, motion_command::MotionCommand, parameters::RolePositionsParameters, @@ -116,7 +116,7 @@ fn defend_left_pose( }; distance_to_target = penalty_kick_defender_radius( distance_to_target, - world_state.game_controller_state, + world_state.filtered_game_controller_state, field_dimensions, ); let defend_pose = block_on_circle(ball.ball_in_field, position_to_defend, distance_to_target); @@ -145,7 +145,7 @@ fn defend_right_pose( }; distance_to_target = penalty_kick_defender_radius( distance_to_target, - world_state.game_controller_state, + world_state.filtered_game_controller_state, field_dimensions, ); let defend_pose = block_on_circle(ball.ball_in_field, position_to_defend, distance_to_target); @@ -174,7 +174,7 @@ fn defend_penalty_kick( }; distance_to_target = penalty_kick_defender_radius( distance_to_target, - world_state.game_controller_state, + world_state.filtered_game_controller_state, field_dimensions, ); @@ -193,16 +193,16 @@ fn defend_goal_pose( .or(world_state.ball) .unwrap_or_else(|| BallState::new_at_center(robot_to_field)); - let keeper_x_offset = match world_state.game_controller_state { + let keeper_x_offset = match world_state.filtered_game_controller_state { Some( - GameControllerState { + FilteredGameControllerState { game_phase: GamePhase::PenaltyShootout { kicking_team: Team::Opponent, }, .. } - | GameControllerState { + | FilteredGameControllerState { sub_state: Some(SubState::PenaltyKick), kicking_team: Team::Opponent, .. @@ -295,14 +295,14 @@ fn block_on_line( fn penalty_kick_defender_radius( distance_to_target: f32, - game_controller_state: Option, + filtered_game_controller_state: Option, field_dimensions: &FieldDimensions, ) -> f32 { - if let Some(GameControllerState { + if let Some(FilteredGameControllerState { kicking_team: Team::Opponent, sub_state: Some(SubState::PenaltyKick), .. - }) = game_controller_state + }) = filtered_game_controller_state { let half_penalty_width = field_dimensions.penalty_area_width / 2.0; let minimum_penalty_defender_radius = diff --git a/crates/control/src/behavior/dribble.rs b/crates/control/src/behavior/dribble.rs index 1fdf164..ab4b783 100644 --- a/crates/control/src/behavior/dribble.rs +++ b/crates/control/src/behavior/dribble.rs @@ -43,12 +43,7 @@ pub fn execute( let best_kick_decision = match kick_decisions.first() { Some(decision) => decision, - None => { - return Some(MotionCommand::Stand { - head, - is_energy_saving: false, - }) - } + None => return Some(MotionCommand::Stand { head }), }; let best_pose = best_kick_decision.kick_pose; @@ -70,10 +65,7 @@ pub fn execute( Some(path) => { Some(walk_path_planner.walk_with_obstacle_avoiding_arms(head, orientation_mode, path)) } - None => Some(MotionCommand::Stand { - head, - is_energy_saving: false, - }), + None => Some(MotionCommand::Stand { head }), } } diff --git a/crates/control/src/behavior/intercept_ball.rs b/crates/control/src/behavior/intercept_ball.rs index 0c6d6d5..579800b 100644 --- a/crates/control/src/behavior/intercept_ball.rs +++ b/crates/control/src/behavior/intercept_ball.rs @@ -2,8 +2,8 @@ use geometry::line_segment::LineSegment; use nalgebra::{Isometry2, Point2, UnitComplex}; use spl_network_messages::{GamePhase, SubState}; use types::{ + filtered_game_controller_state::FilteredGameControllerState, filtered_game_state::FilteredGameState, - game_controller_state::GameControllerState, line::Line, motion_command::{HeadMotion, MotionCommand, OrientationMode}, parameters::InterceptBallParameters, @@ -18,25 +18,32 @@ pub fn execute( maximum_step_size: Step, ) -> Option { if let Some( - GameControllerState { + FilteredGameControllerState { game_phase: GamePhase::PenaltyShootout { .. }, .. } - | GameControllerState { + | FilteredGameControllerState { sub_state: Some(SubState::PenaltyKick), .. }, - ) = world_state.game_controller_state + ) = world_state.filtered_game_controller_state { return None; } + + let filtered_game_state = world_state + .filtered_game_controller_state + .map(|filtered_game_controller_state| filtered_game_controller_state.game_state); match ( - world_state.filtered_game_state, + filtered_game_state, world_state.ball, world_state.robot.robot_to_field, ) { ( - Some(FilteredGameState::Playing { ball_is_free: true }) | None, + Some(FilteredGameState::Playing { + ball_is_free: true, .. + }) + | None, Some(ball), Some(robot_to_field), ) => { diff --git a/crates/control/src/behavior/look_around.rs b/crates/control/src/behavior/look_around.rs index 0a33a92..3f05982 100644 --- a/crates/control/src/behavior/look_around.rs +++ b/crates/control/src/behavior/look_around.rs @@ -1,16 +1,16 @@ use spl_network_messages::GamePhase; use types::{ - game_controller_state::GameControllerState, motion_command::MotionCommand, + filtered_game_controller_state::FilteredGameControllerState, motion_command::MotionCommand, primary_state::PrimaryState, world_state::WorldState, }; pub fn execute(world_state: &WorldState) -> Option { match ( - world_state.game_controller_state, + world_state.filtered_game_controller_state, world_state.robot.primary_state, ) { ( - Some(GameControllerState { + Some(FilteredGameControllerState { game_phase: GamePhase::PenaltyShootout { .. }, .. }), @@ -18,7 +18,6 @@ pub fn execute(world_state: &WorldState) -> Option { ) => None, (_, PrimaryState::Ready | PrimaryState::Playing) => Some(MotionCommand::Stand { head: types::motion_command::HeadMotion::LookAround, - is_energy_saving: false, }), _ => None, } diff --git a/crates/control/src/behavior/lost_ball.rs b/crates/control/src/behavior/lost_ball.rs index 2cf8c99..94e1a5d 100644 --- a/crates/control/src/behavior/lost_ball.rs +++ b/crates/control/src/behavior/lost_ball.rs @@ -1,3 +1,4 @@ +use coordinate_systems::{IntoFramed, IntoTransform}; use framework::AdditionalOutput; use geometry::look_at::LookAt; use nalgebra::Point2; @@ -18,16 +19,26 @@ pub fn execute( lost_ball_parameters: &LostBallParameters, path_obstacles_output: &mut AdditionalOutput>, ) -> Option { - let robot_to_field = world_state.robot.robot_to_field?; + struct Robot; + struct Field; + + let robot_to_field = world_state + .robot + .robot_to_field? + .framed_transform::(); + let absolute_last_known_ball_position = absolute_last_known_ball_position.framed(); + let offset_to_last_ball_location = lost_ball_parameters.offset_to_last_ball_location.framed(); let walk_target = robot_to_field.inverse() - * (absolute_last_known_ball_position - lost_ball_parameters.offset_to_last_ball_location); + * (absolute_last_known_ball_position - offset_to_last_ball_location); let relative_last_known_ball_position = robot_to_field.inverse() * absolute_last_known_ball_position; - let orientation = Point2::origin().look_at(&relative_last_known_ball_position); + let orientation = Point2::origin() + .framed() + .look_at(&relative_last_known_ball_position); let path = walk_path_planner.plan( - walk_target, - robot_to_field, + walk_target.inner, + robot_to_field.inner, None, 1.0, &world_state.obstacles, @@ -36,7 +47,7 @@ pub fn execute( ); Some(walk_path_planner.walk_with_obstacle_avoiding_arms( HeadMotion::SearchForLostBall, - OrientationMode::Override(orientation), + OrientationMode::Override(orientation.inner), path, )) } diff --git a/crates/control/src/behavior/node.rs b/crates/control/src/behavior/node.rs index e38cfcf..6669ff3 100644 --- a/crates/control/src/behavior/node.rs +++ b/crates/control/src/behavior/node.rs @@ -5,13 +5,13 @@ use context_attribute::context; use framework::{AdditionalOutput, MainOutput}; use nalgebra::{point, Point2, Vector2}; use serde::{Deserialize, Serialize}; -use spl_network_messages::{GamePhase, GameState, SubState, Team}; +use spl_network_messages::{GamePhase, SubState, Team}; use types::{ action::Action, cycle_time::CycleTime, field_dimensions::FieldDimensions, + filtered_game_controller_state::FilteredGameControllerState, filtered_game_state::FilteredGameState, - game_controller_state::GameControllerState, motion_command::MotionCommand, parameters::{ BehaviorParameters, InWalkKicksParameters, InterceptBallParameters, LostBallParameters, @@ -127,11 +127,15 @@ impl Behavior { } } + let filtered_game_state = world_state + .filtered_game_controller_state + .map(|filtered_game_controller_state| filtered_game_controller_state.game_state); + match world_state.robot.role { Role::DefenderLeft => actions.push(Action::DefendLeft), Role::DefenderRight => actions.push(Action::DefendRight), - Role::Keeper => match world_state.game_controller_state { - Some(GameControllerState { + Role::Keeper => match world_state.filtered_game_controller_state { + Some(FilteredGameControllerState { game_phase: GamePhase::PenaltyShootout { .. }, .. }) => { @@ -145,22 +149,25 @@ impl Behavior { Role::MidfielderRight => actions.push(Action::SupportRight), Role::ReplacementKeeper => actions.push(Action::DefendGoal), Role::Searcher => actions.push(Action::Search), - Role::Striker => match world_state.filtered_game_state { - None | Some(FilteredGameState::Playing { ball_is_free: true }) => { + Role::Striker => match filtered_game_state { + None + | Some(FilteredGameState::Playing { + ball_is_free: true, .. + }) => { actions.push(Action::Dribble); } Some(FilteredGameState::Ready { kicking_team: Team::Hulks, - }) => match world_state.game_controller_state { - Some(GameControllerState { + }) => match world_state.filtered_game_controller_state { + Some(FilteredGameControllerState { sub_state: Some(SubState::PenaltyKick), .. }) => actions.push(Action::WalkToPenaltyKick), _ => actions.push(Action::WalkToKickOff), }, - _ => match world_state.game_controller_state { - Some(GameControllerState { - game_state: GameState::Ready, + _ => match world_state.filtered_game_controller_state { + Some(FilteredGameControllerState { + game_state: FilteredGameState::Ready { .. }, sub_state: Some(SubState::PenaltyKick), kicking_team: Team::Opponent, .. diff --git a/crates/control/src/behavior/search.rs b/crates/control/src/behavior/search.rs index 896c9c3..07dc129 100644 --- a/crates/control/src/behavior/search.rs +++ b/crates/control/src/behavior/search.rs @@ -99,7 +99,7 @@ fn assign_search_role(world_state: &WorldState) -> Option { ] .into_iter(); let penalties = world_state - .game_controller_state + .filtered_game_controller_state .map(|state| state.penalties)?; let available_players = penalties .iter() diff --git a/crates/control/src/behavior/stand.rs b/crates/control/src/behavior/stand.rs index 3096ca0..f4462d9 100644 --- a/crates/control/src/behavior/stand.rs +++ b/crates/control/src/behavior/stand.rs @@ -2,7 +2,7 @@ use nalgebra::{point, Point2}; use spl_network_messages::{GamePhase, SubState, Team}; use types::{ field_dimensions::FieldDimensions, - game_controller_state::GameControllerState, + filtered_game_controller_state::FilteredGameControllerState, motion_command::{HeadMotion, MotionCommand}, primary_state::PrimaryState, roles::Role, @@ -16,12 +16,11 @@ pub fn execute( match world_state.robot.primary_state { PrimaryState::Initial => Some(MotionCommand::Stand { head: HeadMotion::ZeroAngles, - is_energy_saving: true, }), PrimaryState::Set => { let robot_to_field = world_state.robot.robot_to_field?; - let fallback_target = match world_state.game_controller_state { - Some(GameControllerState { + let fallback_target = match world_state.filtered_game_controller_state { + Some(FilteredGameControllerState { sub_state: Some(SubState::PenaltyKick), kicking_team, .. @@ -46,17 +45,16 @@ pub fn execute( target, camera: None, }, - is_energy_saving: true, }) } PrimaryState::Playing => { match ( - world_state.game_controller_state, + world_state.filtered_game_controller_state, world_state.robot.role, world_state.ball, ) { ( - Some(GameControllerState { + Some(FilteredGameControllerState { game_phase: GamePhase::PenaltyShootout { .. }, .. }), @@ -64,7 +62,6 @@ pub fn execute( None, ) => Some(MotionCommand::Stand { head: HeadMotion::Center, - is_energy_saving: true, }), _ => None, } diff --git a/crates/control/src/behavior/support.rs b/crates/control/src/behavior/support.rs index 14f5f66..6d84434 100644 --- a/crates/control/src/behavior/support.rs +++ b/crates/control/src/behavior/support.rs @@ -56,10 +56,15 @@ fn support_pose( Side::Right => FRAC_PI_4, }) * -(Vector2::x() * distance_to_ball); let supporting_position = ball.ball_in_field + offset_vector; - let clamped_x = match world_state.filtered_game_state { + + let filtered_game_state = world_state + .filtered_game_controller_state + .map(|filtered_game_controller_state| filtered_game_controller_state.game_state); + let clamped_x = match filtered_game_state { Some(FilteredGameState::Ready { .. }) | Some(FilteredGameState::Playing { ball_is_free: false, + .. }) => supporting_position.x.clamp( minimum_x.min(maximum_x_in_ready_and_when_ball_is_not_free), minimum_x.max(maximum_x_in_ready_and_when_ball_is_not_free), diff --git a/crates/control/src/behavior/walk_to_pose.rs b/crates/control/src/behavior/walk_to_pose.rs index 9d93537..eea76d8 100644 --- a/crates/control/src/behavior/walk_to_pose.rs +++ b/crates/control/src/behavior/walk_to_pose.rs @@ -180,10 +180,7 @@ impl<'cycle> WalkAndStand<'cycle> { ); if is_reached { - Some(MotionCommand::Stand { - head, - is_energy_saving: true, - }) + Some(MotionCommand::Stand { head }) } else { let path = self.walk_path_planner.plan( target_pose * Point2::origin(), diff --git a/crates/control/src/dribble_path_planner.rs b/crates/control/src/dribble_path_planner.rs index 0da1e93..d5b1e69 100644 --- a/crates/control/src/dribble_path_planner.rs +++ b/crates/control/src/dribble_path_planner.rs @@ -3,7 +3,7 @@ use nalgebra::Point2; use spl_network_messages::Team; use std::f32::consts::PI; use types::{ - game_controller_state::GameControllerState, parameters::DribblingParameters, + filtered_game_controller_state::FilteredGameControllerState, parameters::DribblingParameters, path_obstacles::PathObstacle, planned_path::PathSegment, world_state::WorldState, }; @@ -50,8 +50,8 @@ pub fn plan( }; let rule_obstacles = if matches!( - world_state.game_controller_state, - Some(GameControllerState { + world_state.filtered_game_controller_state, + Some(FilteredGameControllerState { kicking_team: Team::Hulks, .. }) diff --git a/crates/control/src/fake_data.rs b/crates/control/src/fake_data.rs index c176fef..6002b05 100644 --- a/crates/control/src/fake_data.rs +++ b/crates/control/src/fake_data.rs @@ -10,7 +10,7 @@ use types::{ ball_position::BallPosition, cycle_time::CycleTime, fall_state::FallState, - filtered_game_state::FilteredGameState, + filtered_whistle::FilteredWhistle, game_controller_state::GameControllerState, joints::head::HeadJoints, obstacles::Obstacle, @@ -44,7 +44,7 @@ pub struct MainOutputs { pub ball_position: MainOutput>, pub cycle_time: MainOutput, pub fall_state: MainOutput, - pub filtered_game_state: MainOutput>, + pub filtered_whistle: MainOutput, pub game_controller_state: MainOutput>, pub has_ground_contact: MainOutput, pub hulk_messages: MainOutput>, diff --git a/crates/control/src/game_state_filter.rs b/crates/control/src/game_controller_state_filter.rs similarity index 65% rename from crates/control/src/game_state_filter.rs rename to crates/control/src/game_controller_state_filter.rs index 396d617..11e1794 100644 --- a/crates/control/src/game_state_filter.rs +++ b/crates/control/src/game_controller_state_filter.rs @@ -8,12 +8,12 @@ use serde::{Deserialize, Serialize}; use spl_network_messages::{GamePhase, GameState, Team}; use types::{ ball_position::BallPosition, cycle_time::CycleTime, field_dimensions::FieldDimensions, + filtered_game_controller_state::FilteredGameControllerState, filtered_game_state::FilteredGameState, filtered_whistle::FilteredWhistle, game_controller_state::GameControllerState, parameters::GameStateFilterParameters, }; - #[derive(Deserialize, Serialize)] -pub struct GameStateFilter { +pub struct GameControllerStateFilter { state: State, opponent_state: State, } @@ -35,13 +35,11 @@ pub struct CycleContext { } #[context] -#[derive(Default)] pub struct MainOutputs { - pub filtered_game_state: MainOutput>, - pub filtered_opponent_game_state: MainOutput>, + pub filtered_game_controller_state: MainOutput>, } -impl GameStateFilter { +impl GameControllerStateFilter { pub fn new(_context: CreationContext) -> Result { Ok(Self { state: State::Initial, @@ -50,59 +48,101 @@ impl GameStateFilter { } pub fn cycle(&mut self, context: CycleContext) -> Result { - let ball_detected_far_from_any_goal = ball_detected_far_from_any_goal( + let game_states = filter_game_states( *context.robot_to_field, context.ball_position, context.field_dimensions, - context.config.whistle_acceptance_goal_distance, - ); - - self.state = next_filtered_state( - self.state, - context.game_controller_state, - context.filtered_whistle.is_detected, - context.cycle_time.start_time, context.config, - ball_detected_far_from_any_goal, - ); - - self.opponent_state = next_filtered_state( - self.opponent_state, context.game_controller_state, - context.filtered_whistle.is_detected, - context.cycle_time.start_time, - context.config, - ball_detected_far_from_any_goal, + context.filtered_whistle, + context.cycle_time, + self.state, + self.opponent_state, ); + let filtered_game_controller_state = FilteredGameControllerState { + game_state: game_states.own, + opponent_game_state: game_states.opponent, + game_phase: context.game_controller_state.game_phase, + kicking_team: context.game_controller_state.kicking_team, + penalties: context.game_controller_state.penalties, + remaining_number_of_messages: context + .game_controller_state + .remaining_amount_of_messages, + sub_state: context.game_controller_state.sub_state, + own_team_is_home_after_coin_toss: context + .game_controller_state + .hulks_team_is_home_after_coin_toss, + }; + Ok(MainOutputs { + filtered_game_controller_state: Some(filtered_game_controller_state).into(), + }) + } +} - let ball_detected_far_from_kick_off_point = context - .ball_position - .map(|ball| { - let absolute_ball_position = *context.robot_to_field * ball.position; - distance(&absolute_ball_position, &Point2::origin()) - > context.config.distance_to_consider_ball_moved_in_kick_off - }) - .unwrap_or(false); +struct FilteredGameStates { + own: FilteredGameState, + opponent: FilteredGameState, +} - let filtered_game_state = self.state.construct_hulks_filtered_game_state( - context.game_controller_state, - context.cycle_time.start_time, - ball_detected_far_from_kick_off_point, - context.config, - ); +#[allow(clippy::too_many_arguments)] +fn filter_game_states( + robot_to_field: Isometry2, + ball_position: Option<&BallPosition>, + field_dimensions: &FieldDimensions, + config: &GameStateFilterParameters, + game_controller_state: &GameControllerState, + filtered_whistle: &FilteredWhistle, + cycle_time: &CycleTime, + state: State, + opponent_state: State, +) -> FilteredGameStates { + let ball_detected_far_from_any_goal = ball_detected_far_from_any_goal( + robot_to_field, + ball_position, + field_dimensions, + config.whistle_acceptance_goal_distance, + ); + let state = next_filtered_state( + state, + game_controller_state, + filtered_whistle.is_detected, + cycle_time.start_time, + config, + ball_detected_far_from_any_goal, + ); + let opponent_state = next_filtered_state( + opponent_state, + game_controller_state, + filtered_whistle.is_detected, + cycle_time.start_time, + config, + ball_detected_far_from_any_goal, + ); + let ball_detected_far_from_kick_off_point = ball_position + .map(|ball| { + let absolute_ball_position = robot_to_field * ball.position; + distance(&absolute_ball_position, &Point2::origin()) + > config.distance_to_consider_ball_moved_in_kick_off + }) + .unwrap_or(false); - let filtered_opponent_game_state = - self.opponent_state.construct_opponent_filtered_game_state( - context.game_controller_state, - context.cycle_time.start_time, - ball_detected_far_from_kick_off_point, - context.config, - ); + let filtered_game_state = state.construct_hulks_filtered_game_state( + game_controller_state, + cycle_time.start_time, + ball_detected_far_from_kick_off_point, + config, + ); - Ok(MainOutputs { - filtered_game_state: Some(filtered_game_state).into(), - filtered_opponent_game_state: Some(filtered_opponent_game_state).into(), - }) + let filtered_opponent_game_state = opponent_state.construct_opponent_filtered_game_state( + game_controller_state, + cycle_time.start_time, + ball_detected_far_from_kick_off_point, + config, + ); + + FilteredGameStates { + own: filtered_game_state, + opponent: filtered_opponent_game_state, } } @@ -116,23 +156,43 @@ fn next_filtered_state( ball_detected_far_from_any_goal: bool, ) -> State { match (current_state, game_controller_state.game_state) { - (State::Initial | State::Ready | State::Finished, _) - | ( - State::Set, - GameState::Initial | GameState::Ready | GameState::Playing | GameState::Finished, - ) + (State::Finished, _) => State::Finished, + + ( + State::TentativeFinished { + time_when_finished_clicked, + }, + GameState::Finished, + ) if cycle_start_time + .duration_since(time_when_finished_clicked) + .unwrap() + >= config.tentative_finish_duration => + { + State::Finished + } + ( + State::TentativeFinished { + time_when_finished_clicked, + }, + GameState::Finished, + ) => State::TentativeFinished { + time_when_finished_clicked, + }, + (State::TentativeFinished { .. }, game_state) => State::from_game_state(game_state), + (_, GameState::Finished) => State::TentativeFinished { + time_when_finished_clicked: cycle_start_time, + }, + (State::Initial | State::Ready, _) + | (State::Set, GameState::Initial | GameState::Ready | GameState::Playing) | ( State::WhistleInSet { .. }, - GameState::Initial | GameState::Ready | GameState::Playing | GameState::Finished, - ) - | ( - State::Playing, - GameState::Initial | GameState::Ready | GameState::Set | GameState::Finished, + GameState::Initial | GameState::Ready | GameState::Playing, ) + | (State::Playing, GameState::Initial | GameState::Ready | GameState::Set) | ( State::WhistleInPlaying { .. }, - GameState::Initial | GameState::Ready | GameState::Set | GameState::Finished, - ) => State::from_game_controller(game_controller_state), + GameState::Initial | GameState::Ready | GameState::Set, + ) => State::from_game_state(game_controller_state.game_state), (State::Set, GameState::Set) => { if is_whistle_detected { State::WhistleInSet { @@ -231,12 +291,15 @@ enum State { WhistleInPlaying { time_when_whistle_was_detected: SystemTime, }, + TentativeFinished { + time_when_finished_clicked: SystemTime, + }, Finished, } impl State { - fn from_game_controller(game_controller_state: &GameControllerState) -> Self { - match game_controller_state.game_state { + fn from_game_state(game_state: GameState) -> Self { + match game_state { GameState::Initial => State::Initial, GameState::Ready => State::Ready, GameState::Set => State::Set, @@ -312,10 +375,12 @@ impl State { let opponent_sub_state = opponent_is_kicking_team && is_in_sub_state; FilteredGameState::Playing { ball_is_free: !opponent_kick_off && !opponent_sub_state, + kick_off: !is_in_sub_state, } } State::Playing => FilteredGameState::Playing { ball_is_free: !(is_in_sub_state && opponent_is_kicking_team), + kick_off: false, }, State::WhistleInPlaying { .. } => FilteredGameState::Ready { kicking_team: Team::Uncertain, @@ -324,6 +389,8 @@ impl State { GamePhase::PenaltyShootout { .. } => FilteredGameState::Set, _ => FilteredGameState::Finished, }, + // is hack @schluis + State::TentativeFinished { .. } => FilteredGameState::Set, } } } diff --git a/crates/control/src/lib.rs b/crates/control/src/lib.rs index 71cde19..0ea7ced 100644 --- a/crates/control/src/lib.rs +++ b/crates/control/src/lib.rs @@ -10,7 +10,7 @@ pub mod dribble_path_planner; pub mod fake_data; pub mod fall_state_estimation; pub mod game_controller_filter; -pub mod game_state_filter; +pub mod game_controller_state_filter; pub mod ground_contact_detector; pub mod ground_provider; pub mod kick_selector; diff --git a/crates/control/src/localization.rs b/crates/control/src/localization.rs index 688ca91..1b6f342 100644 --- a/crates/control/src/localization.rs +++ b/crates/control/src/localization.rs @@ -18,7 +18,7 @@ use spl_network_messages::{GamePhase, Penalty, PlayerNumber, Team}; use types::{ field_dimensions::FieldDimensions, field_marks::{field_marks_from_field_dimensions, CorrespondencePoints, Direction, FieldMark}, - game_controller_state::GameControllerState, + filtered_game_controller_state::FilteredGameControllerState, initial_pose::InitialPose, line::{Line, Line2}, line_data::LineData, @@ -55,7 +55,8 @@ pub struct CycleContext { current_odometry_to_last_odometry: HistoricInput>, "current_odometry_to_last_odometry?">, - game_controller_state: Input, "game_controller_state?">, + filtered_game_controller_state: + Input, "filtered_game_controller_state?">, has_ground_contact: Input, primary_state: Input, @@ -466,12 +467,12 @@ impl Localization { pub fn cycle(&mut self, mut context: CycleContext) -> Result { let primary_state = *context.primary_state; let penalty = context - .game_controller_state + .filtered_game_controller_state .and_then(|game_controller_state| { game_controller_state.penalties[*context.player_number] }); let game_phase = context - .game_controller_state + .filtered_game_controller_state .map(|game_controller_state| game_controller_state.game_phase); self.reset_state(primary_state, game_phase, &context, &penalty); @@ -494,10 +495,10 @@ impl Localization { .or_else(|| { robot_to_field .and_then(|robot_to_field| { - Some((robot_to_field, context.game_controller_state?)) + Some((robot_to_field, context.filtered_game_controller_state?)) }) .map(|(robot_to_field, game_controller_state)| { - if !game_controller_state.hulks_team_is_home_after_coin_toss { + if !game_controller_state.own_team_is_home_after_coin_toss { Isometry2::from_parts( Translation2::default(), Rotation2::new(PI).into(), diff --git a/crates/control/src/localization_recorder.rs b/crates/control/src/localization_recorder.rs index 979061d..dacaea9 100644 --- a/crates/control/src/localization_recorder.rs +++ b/crates/control/src/localization_recorder.rs @@ -12,7 +12,8 @@ use framework::{HistoricInput, PerceptionInput}; use nalgebra::Isometry2; use serde::{Deserialize, Serialize}; use types::{ - game_controller_state::GameControllerState, line_data::LineData, primary_state::PrimaryState, + filtered_game_controller_state::FilteredGameControllerState, line_data::LineData, + primary_state::PrimaryState, }; #[derive(Deserialize, Serialize)] @@ -35,7 +36,8 @@ pub struct CycleContext { current_odometry_to_last_odometry: HistoricInput>, "current_odometry_to_last_odometry?">, - game_controller_state: Input, "game_controller_state?">, + filtered_game_controller_state: + Input, "filtered_game_controller_state?">, has_ground_contact: Input, primary_state: Input, robot_to_field: Input>, "robot_to_field?">, @@ -105,7 +107,7 @@ impl LocalizationRecorder { .collect(); let recorded_context = RecordedCycleContext { current_odometry_to_last_odometry, - game_controller_state: context.game_controller_state.cloned(), + filtered_game_controller_state: context.filtered_game_controller_state.cloned(), has_ground_contact: *context.has_ground_contact, primary_state: *context.primary_state, robot_to_field: context.robot_to_field.cloned(), @@ -149,7 +151,7 @@ impl LocalizationRecorder { pub struct RecordedCycleContext { pub current_odometry_to_last_odometry: BTreeMap>>, - pub game_controller_state: Option, + pub filtered_game_controller_state: Option, pub has_ground_contact: bool, pub primary_state: PrimaryState, pub robot_to_field: Option>, diff --git a/crates/control/src/motion/arms_up_squat.rs b/crates/control/src/motion/arms_up_squat.rs index 53759bb..e3a5e4f 100644 --- a/crates/control/src/motion/arms_up_squat.rs +++ b/crates/control/src/motion/arms_up_squat.rs @@ -32,7 +32,7 @@ pub struct CycleContext { #[context] #[derive(Default)] pub struct MainOutputs { - pub arms_up_squat_joints_command: MainOutput>, + pub arms_up_squat_joints_command: MainOutput>>, } impl ArmsUpSquat { diff --git a/crates/control/src/motion/command_sender.rs b/crates/control/src/motion/command_sender.rs index f2041c9..1dc83f4 100644 --- a/crates/control/src/motion/command_sender.rs +++ b/crates/control/src/motion/command_sender.rs @@ -3,7 +3,9 @@ use context_attribute::context; use framework::AdditionalOutput; use hardware::ActuatorInterface; use serde::{Deserialize, Serialize}; -use types::{led::Leds, motion_selection::MotionSafeExits, motor_commands::MotorCommands}; +use types::{ + joints::Joints, led::Leds, motion_selection::MotionSafeExits, motor_commands::MotorCommands, +}; #[derive(Deserialize, Serialize)] pub struct CommandSender {} @@ -13,14 +15,16 @@ pub struct CreationContext {} #[context] pub struct CycleContext { - optimized_motor_commands: Input, "optimized_motor_commands">, + optimized_motor_commands: Input>, "optimized_motor_commands">, leds: Input, motion_safe_exits: CyclerState, - last_actuated_motor_commands: CyclerState, "last_actuated_motor_commands">, + last_actuated_motor_commands: + CyclerState>, "last_actuated_motor_commands">, motion_safe_exits_output: AdditionalOutput, - actuated_motor_commands: AdditionalOutput, "last_actuated_motor_commands">, + actuated_motor_commands: + AdditionalOutput>, "last_actuated_motor_commands">, hardware_interface: HardwareInterface, } diff --git a/crates/control/src/motion/dispatching_interpolator.rs b/crates/control/src/motion/dispatching_interpolator.rs index e89a9e3..0459c54 100644 --- a/crates/control/src/motion/dispatching_interpolator.rs +++ b/crates/control/src/motion/dispatching_interpolator.rs @@ -7,9 +7,9 @@ use motionfile::{SplineInterpolator, TimedSpline}; use serde::{Deserialize, Serialize}; use types::{ cycle_time::CycleTime, - joints::{head::HeadJoints, Joints}, + joints::{body::BodyJoints, head::HeadJoints, Joints}, motion_selection::{MotionSafeExits, MotionSelection, MotionType}, - motor_commands::{BodyMotorCommands, MotorCommands}, + motor_commands::MotorCommands, }; #[derive(Deserialize, Serialize)] @@ -25,22 +25,22 @@ pub struct CreationContext {} #[context] pub struct CycleContext { - arms_up_squat_joints_command: Input, "arms_up_squat_joints_command">, - energy_saving_stand: Input, "energy_saving_stand_command">, - jump_left_joints_command: Input, "jump_left_joints_command">, - jump_right_joints_command: Input, "jump_right_joints_command">, + arms_up_squat_joints_command: Input>, "arms_up_squat_joints_command">, + jump_left_joints_command: Input>, "jump_left_joints_command">, + jump_right_joints_command: Input>, "jump_right_joints_command">, motion_selection: Input, cycle_time: Input, - sit_down_joints_command: Input, "sit_down_joints_command">, + sit_down_joints_command: Input>, "sit_down_joints_command">, stand_up_back_positions: Input, "stand_up_back_positions">, stand_up_front_positions: Input, "stand_up_front_positions">, - walk_joints_command: Input, "walk_joints_command">, + walk_motor_commands: Input>, "walk_motor_commands">, initial_pose: Parameter, "initial_pose">, penalized_pose: Parameter, "penalized_pose">, motion_safe_exits: CyclerState, - last_actuated_motor_commands: CyclerState, "last_actuated_motor_commands">, + last_actuated_motor_commands: + CyclerState>, "last_actuated_motor_commands">, transition_time: AdditionalOutput, "transition_time">, } @@ -48,7 +48,7 @@ pub struct CycleContext { #[context] #[derive(Default)] pub struct MainOutputs { - pub dispatching_command: MainOutput>, + pub dispatching_command: MainOutput>>, } impl DispatchingInterpolator { @@ -92,18 +92,14 @@ impl DispatchingInterpolator { MotionType::SitDown => context.sit_down_joints_command.positions, MotionType::Stand => Joints::from_head_and_body( HeadJoints::fill(0.0), - context.walk_joints_command.positions, + context.walk_motor_commands.positions, ), MotionType::StandUpBack => *context.stand_up_back_positions, MotionType::StandUpFront => *context.stand_up_front_positions, MotionType::Unstiff => panic!("Dispatching Unstiff doesn't make sense"), MotionType::Walk => Joints::from_head_and_body( HeadJoints::fill(0.0), - context.walk_joints_command.positions, - ), - MotionType::EnergySavingStand => Joints::from_head_and_body( - HeadJoints::fill(0.0), - context.energy_saving_stand.positions, + context.walk_motor_commands.positions, ), }; diff --git a/crates/control/src/motion/energy_saving_stand.rs b/crates/control/src/motion/energy_saving_stand.rs deleted file mode 100644 index 2074839..0000000 --- a/crates/control/src/motion/energy_saving_stand.rs +++ /dev/null @@ -1,48 +0,0 @@ -use color_eyre::Result; -use context_attribute::context; -use framework::MainOutput; -use serde::{Deserialize, Serialize}; -use types::{ - joints::{arm::ArmJoints, body::BodyJoints, leg::LegJoints, Joints}, - motor_commands::BodyMotorCommands, -}; - -#[derive(Deserialize, Serialize)] -pub struct EnergySavingStand {} - -#[context] -pub struct CreationContext {} - -#[context] -pub struct CycleContext { - arm_stiffness: Parameter, - leg_stiffness: Parameter, - energy_saving_stand_pose: Parameter, "energy_saving_stand.pose">, -} - -#[context] -#[derive(Default)] -pub struct MainOutputs { - pub energy_saving_stand_command: MainOutput>, -} - -impl EnergySavingStand { - pub fn new(_context: CreationContext) -> Result { - Ok(Self {}) - } - - pub fn cycle(&mut self, context: CycleContext) -> Result { - Ok(MainOutputs { - energy_saving_stand_command: BodyMotorCommands { - positions: BodyJoints::from(*context.energy_saving_stand_pose), - stiffnesses: BodyJoints { - left_arm: ArmJoints::fill(*context.arm_stiffness), - right_arm: ArmJoints::fill(*context.arm_stiffness), - left_leg: LegJoints::fill(*context.leg_stiffness), - right_leg: LegJoints::fill(*context.leg_stiffness), - }, - } - .into(), - }) - } -} diff --git a/crates/control/src/motion/fall_protector.rs b/crates/control/src/motion/fall_protector.rs index cd37342..e34f082 100644 --- a/crates/control/src/motion/fall_protector.rs +++ b/crates/control/src/motion/fall_protector.rs @@ -53,7 +53,7 @@ pub struct CycleContext { #[context] #[derive(Default)] pub struct MainOutputs { - pub fall_protection_command: MainOutput>, + pub fall_protection_command: MainOutput>>, } impl FallProtector { diff --git a/crates/control/src/motion/head_motion.rs b/crates/control/src/motion/head_motion.rs index 8ff3bcb..7622989 100644 --- a/crates/control/src/motion/head_motion.rs +++ b/crates/control/src/motion/head_motion.rs @@ -8,7 +8,7 @@ use types::{ cycle_time::CycleTime, joints::head::HeadJoints, motion_command::{HeadMotion as HeadMotionCommand, MotionCommand}, - motor_commands::HeadMotorCommands, + motor_commands::MotorCommands, sensor_data::SensorData, }; @@ -39,7 +39,7 @@ pub struct CycleContext { #[context] #[derive(Default)] pub struct MainOutputs { - pub head_joints_command: MainOutput>, + pub head_joints_command: MainOutput>>, } impl HeadMotion { @@ -50,13 +50,13 @@ impl HeadMotion { } pub fn cycle(&mut self, context: CycleContext) -> Result { - let HeadMotorCommands { + let MotorCommands { positions: raw_positions, stiffnesses, } = context .has_ground_contact .then(|| Self::joints_from_motion(&context)) - .unwrap_or_else(|| HeadMotorCommands { + .unwrap_or_else(|| MotorCommands { positions: Default::default(), stiffnesses: HeadJoints::fill(0.8), }); @@ -91,7 +91,7 @@ impl HeadMotion { self.last_positions = clamped_positions; Ok(MainOutputs { - head_joints_command: HeadMotorCommands { + head_joints_command: MotorCommands { positions: clamped_positions, stiffnesses, } @@ -99,29 +99,29 @@ impl HeadMotion { }) } - pub fn joints_from_motion(context: &CycleContext) -> HeadMotorCommands { + pub fn joints_from_motion(context: &CycleContext) -> MotorCommands> { let stiffnesses = HeadJoints::fill(0.8); match context.motion_command.head_motion() { - Some(HeadMotionCommand::Center) => HeadMotorCommands { + Some(HeadMotionCommand::Center) => MotorCommands { positions: *context.center_head_position, stiffnesses, }, Some(HeadMotionCommand::LookAround | HeadMotionCommand::SearchForLostBall) => { - HeadMotorCommands { + MotorCommands { positions: *context.look_around, stiffnesses, } } Some(HeadMotionCommand::LookAt { .. }) - | Some(HeadMotionCommand::LookLeftAndRightOf { .. }) => HeadMotorCommands { + | Some(HeadMotionCommand::LookLeftAndRightOf { .. }) => MotorCommands { positions: *context.look_at, stiffnesses, }, - Some(HeadMotionCommand::Unstiff) => HeadMotorCommands { + Some(HeadMotionCommand::Unstiff) => MotorCommands { positions: context.sensor_data.positions.head, stiffnesses: HeadJoints::fill(0.0), }, - Some(HeadMotionCommand::ZeroAngles) | None => HeadMotorCommands { + Some(HeadMotionCommand::ZeroAngles) | None => MotorCommands { positions: Default::default(), stiffnesses, }, diff --git a/crates/control/src/motion/jump_left.rs b/crates/control/src/motion/jump_left.rs index 12087bb..199c9fa 100644 --- a/crates/control/src/motion/jump_left.rs +++ b/crates/control/src/motion/jump_left.rs @@ -7,13 +7,14 @@ use serde::{Deserialize, Serialize}; use types::{ condition_input::ConditionInput, cycle_time::CycleTime, + joints::Joints, motion_selection::{MotionSafeExits, MotionSelection, MotionType}, motor_commands::MotorCommands, }; #[derive(Deserialize, Serialize)] pub struct JumpLeft { - interpolator: MotionInterpolator>, + interpolator: MotionInterpolator>>, } #[context] @@ -33,7 +34,7 @@ pub struct CycleContext { #[context] #[derive(Default)] pub struct MainOutputs { - pub jump_left_joints_command: MainOutput>, + pub jump_left_joints_command: MainOutput>>, } impl JumpLeft { diff --git a/crates/control/src/motion/jump_right.rs b/crates/control/src/motion/jump_right.rs index 67a8cd6..11956b4 100644 --- a/crates/control/src/motion/jump_right.rs +++ b/crates/control/src/motion/jump_right.rs @@ -7,13 +7,14 @@ use serde::{Deserialize, Serialize}; use types::{ condition_input::ConditionInput, cycle_time::CycleTime, + joints::{mirror::Mirror, Joints}, motion_selection::{MotionSafeExits, MotionSelection, MotionType}, motor_commands::MotorCommands, }; #[derive(Deserialize, Serialize)] pub struct JumpRight { - interpolator: MotionInterpolator>, + interpolator: MotionInterpolator>>, } #[context] @@ -33,7 +34,7 @@ pub struct CycleContext { #[context] #[derive(Default)] pub struct MainOutputs { - pub jump_right_joints_command: MainOutput>, + pub jump_right_joints_command: MainOutput>>, } impl JumpRight { diff --git a/crates/control/src/motion/mod.rs b/crates/control/src/motion/mod.rs index 686a8d2..d8a3a78 100644 --- a/crates/control/src/motion/mod.rs +++ b/crates/control/src/motion/mod.rs @@ -2,7 +2,6 @@ pub mod arms_up_squat; pub mod command_sender; pub mod condition_input_provider; pub mod dispatching_interpolator; -pub mod energy_saving_stand; pub mod fall_protector; pub mod head_motion; pub mod jump_left; diff --git a/crates/control/src/motion/motion_selector.rs b/crates/control/src/motion/motion_selector.rs index 6f97f33..1ffe9cd 100644 --- a/crates/control/src/motion/motion_selector.rs +++ b/crates/control/src/motion/motion_selector.rs @@ -22,8 +22,6 @@ pub struct CycleContext { has_ground_contact: Input, motion_safe_exits: CyclerState, - - enable_energy_saving_stand: Parameter, } #[context] @@ -42,8 +40,7 @@ impl MotionSelector { pub fn cycle(&mut self, context: CycleContext) -> Result { let motion_safe_to_exit = context.motion_safe_exits[self.current_motion]; - let requested_motion = - motion_type_from_command(context.motion_command, *context.enable_energy_saving_stand); + let requested_motion = motion_type_from_command(context.motion_command); self.current_motion = transition_motion( self.current_motion, @@ -72,10 +69,7 @@ impl MotionSelector { } } -fn motion_type_from_command( - command: &MotionCommand, - enable_energy_saving_stand: bool, -) -> MotionType { +fn motion_type_from_command(command: &MotionCommand) -> MotionType { match command { MotionCommand::ArmsUpSquat => MotionType::ArmsUpSquat, MotionCommand::FallProtection { .. } => MotionType::FallProtection, @@ -86,15 +80,7 @@ fn motion_type_from_command( }, MotionCommand::Penalized => MotionType::Penalized, MotionCommand::SitDown { .. } => MotionType::SitDown, - MotionCommand::Stand { - is_energy_saving, .. - } => { - if enable_energy_saving_stand && *is_energy_saving { - MotionType::EnergySavingStand - } else { - MotionType::Stand - } - } + MotionCommand::Stand { .. } => MotionType::Stand, MotionCommand::StandUp { facing } => match facing { Facing::Down => MotionType::StandUpFront, Facing::Up => MotionType::StandUpBack, diff --git a/crates/control/src/motion/motor_commands_collector.rs b/crates/control/src/motion/motor_commands_collector.rs index d10641f..d922e1f 100644 --- a/crates/control/src/motion/motor_commands_collector.rs +++ b/crates/control/src/motion/motor_commands_collector.rs @@ -3,9 +3,9 @@ use context_attribute::context; use framework::{AdditionalOutput, MainOutput}; use serde::{Deserialize, Serialize}; use types::{ - joints::Joints, + joints::{body::BodyJoints, head::HeadJoints, Joints}, motion_selection::{MotionSelection, MotionType}, - motor_commands::{BodyMotorCommands, HeadMotorCommands, MotorCommands}, + motor_commands::MotorCommands, sensor_data::SensorData, }; @@ -17,19 +17,18 @@ pub struct CreationContext {} #[context] pub struct CycleContext { - arms_up_squat_joints_command: Input, "arms_up_squat_joints_command">, - dispatching_command: Input, "dispatching_command">, - energy_saving_stand_command: Input, "energy_saving_stand_command">, - fall_protection_command: Input, "fall_protection_command">, - head_joints_command: Input, "head_joints_command">, - jump_left_joints_command: Input, "jump_left_joints_command">, - jump_right_joints_command: Input, "jump_right_joints_command">, + arms_up_squat_joints_command: Input>, "arms_up_squat_joints_command">, + dispatching_command: Input>, "dispatching_command">, + fall_protection_command: Input>, "fall_protection_command">, + head_joints_command: Input>, "head_joints_command">, + jump_left_joints_command: Input>, "jump_left_joints_command">, + jump_right_joints_command: Input>, "jump_right_joints_command">, motion_selection: Input, sensor_data: Input, - sit_down_joints_command: Input, "sit_down_joints_command">, + sit_down_joints_command: Input>, "sit_down_joints_command">, stand_up_back_positions: Input, "stand_up_back_positions">, stand_up_front_positions: Input, "stand_up_front_positions">, - walk_joints_command: Input, "walk_joints_command">, + walk_motor_commands: Input>, "walk_motor_commands">, joint_calibration_offsets: Parameter, "joint_calibration_offsets">, penalized_pose: Parameter, "penalized_pose">, @@ -41,7 +40,7 @@ pub struct CycleContext { #[context] #[derive(Default)] pub struct MainOutputs { - pub motor_commands: MainOutput>, + pub motor_commands: MainOutput>>, } impl MotorCommandCollector { @@ -62,7 +61,7 @@ impl MotorCommandCollector { let sit_down = context.sit_down_joints_command; let stand_up_back_positions = context.stand_up_back_positions; let stand_up_front_positions = context.stand_up_front_positions; - let walk = context.walk_joints_command; + let walk = context.walk_motor_commands; let (positions, stiffnesses) = match motion_selection.current_motion { MotionType::ArmsUpSquat => (arms_up_squat.positions, arms_up_squat.stiffnesses), @@ -87,16 +86,6 @@ impl MotorCommandCollector { Joints::from_head_and_body(head_joints_command.positions, walk.positions), Joints::from_head_and_body(head_joints_command.stiffnesses, walk.stiffnesses), ), - MotionType::EnergySavingStand => ( - Joints::from_head_and_body( - head_joints_command.positions, - context.energy_saving_stand_command.positions, - ), - Joints::from_head_and_body( - head_joints_command.stiffnesses, - context.energy_saving_stand_command.stiffnesses, - ), - ), }; // The actuators use the raw sensor data (not corrected like current_positions) in their feedback loops, diff --git a/crates/control/src/motion/motor_commands_optimizer.rs b/crates/control/src/motion/motor_commands_optimizer.rs index f7ca8af..50532c0 100644 --- a/crates/control/src/motion/motor_commands_optimizer.rs +++ b/crates/control/src/motion/motor_commands_optimizer.rs @@ -2,7 +2,7 @@ use color_eyre::Result; use context_attribute::context; use framework::MainOutput; use serde::{Deserialize, Serialize}; -use types::motor_commands::MotorCommands; +use types::{joints::Joints, motor_commands::MotorCommands}; #[derive(Deserialize, Serialize)] pub struct MotorCommandsOptimizer {} @@ -12,13 +12,13 @@ pub struct CreationContext {} #[context] pub struct CycleContext { - motor_commands: Input, "motor_commands">, + motor_commands: Input>, "motor_commands">, } #[context] #[derive(Default)] pub struct MainOutputs { - pub optimized_motor_commands: MainOutput>, + pub optimized_motor_commands: MainOutput>>, } impl MotorCommandsOptimizer { diff --git a/crates/control/src/motion/sit_down.rs b/crates/control/src/motion/sit_down.rs index a782503..6d30e87 100644 --- a/crates/control/src/motion/sit_down.rs +++ b/crates/control/src/motion/sit_down.rs @@ -34,7 +34,7 @@ pub struct CycleContext { #[context] #[derive(Default)] pub struct MainOutputs { - pub sit_down_joints_command: MainOutput>, + pub sit_down_joints_command: MainOutput>>, } impl SitDown { diff --git a/crates/control/src/motion/walking_engine.rs b/crates/control/src/motion/walking_engine.rs index 39637ce..1e242cc 100644 --- a/crates/control/src/motion/walking_engine.rs +++ b/crates/control/src/motion/walking_engine.rs @@ -12,7 +12,7 @@ use types::{ joints::{arm::ArmJoints, body::BodyJoints, leg::LegJoints}, motion_command::{KickVariant, MotionCommand}, motion_selection::{MotionSafeExits, MotionType}, - motor_commands::BodyMotorCommands, + motor_commands::MotorCommands, parameters::{KickStepsParameters, StepPlannerParameters, WalkingEngineParameters}, robot_kinematics::RobotKinematics, sensor_data::{InertialMeasurementUnitData, SensorData}, @@ -149,7 +149,7 @@ pub struct CycleContext { #[context] #[derive(Default)] pub struct MainOutputs { - pub walk_joints_command: MainOutput>, + pub walk_motor_commands: MainOutput>>, } impl WalkingEngine { @@ -379,7 +379,7 @@ impl WalkingEngine { }; Ok(MainOutputs { - walk_joints_command: BodyMotorCommands { + walk_motor_commands: MotorCommands { positions: BodyJoints { left_arm, right_arm, diff --git a/crates/control/src/motion/walking_engine/arms.rs b/crates/control/src/motion/walking_engine/arms.rs index aa86c2c..93271e6 100644 --- a/crates/control/src/motion/walking_engine/arms.rs +++ b/crates/control/src/motion/walking_engine/arms.rs @@ -4,7 +4,7 @@ use color_eyre::Result; use serde::{Deserialize, Serialize}; use serialize_hierarchy::SerializeHierarchy; use types::{ - joints::arm::ArmJoints, + joints::{arm::ArmJoints, mirror::Mirror}, motion_command::{ArmMotion, MotionCommand}, parameters::SwingingArmsParameters, support_foot::Side, diff --git a/crates/control/src/penalty_shot_direction_estimation.rs b/crates/control/src/penalty_shot_direction_estimation.rs index 5624dff..c4298b2 100644 --- a/crates/control/src/penalty_shot_direction_estimation.rs +++ b/crates/control/src/penalty_shot_direction_estimation.rs @@ -5,8 +5,8 @@ use serde::{Deserialize, Serialize}; use spl_network_messages::GamePhase; use types::{ ball_position::BallPosition, field_dimensions::FieldDimensions, - game_controller_state::GameControllerState, penalty_shot_direction::PenaltyShotDirection, - primary_state::PrimaryState, + filtered_game_controller_state::FilteredGameControllerState, + penalty_shot_direction::PenaltyShotDirection, primary_state::PrimaryState, }; #[derive(Deserialize, Serialize)] @@ -24,7 +24,8 @@ pub struct CycleContext { Parameter, ball_position: RequiredInput, "ball_position?">, - game_controller_state: RequiredInput, "game_controller_state?">, + filtered_game_controller_state: + RequiredInput, "filtered_game_controller_state?">, primary_state: Input, } @@ -44,7 +45,7 @@ impl PenaltyShotDirectionEstimation { pub fn cycle(&mut self, context: CycleContext) -> Result { match ( context.primary_state, - context.game_controller_state.game_phase, + context.filtered_game_controller_state.game_phase, ) { (PrimaryState::Set, GamePhase::PenaltyShootout { .. }) => { self.last_shot_direction = PenaltyShotDirection::NotMoving; diff --git a/crates/control/src/primary_state_filter.rs b/crates/control/src/primary_state_filter.rs index fe53d7b..7a61f7b 100644 --- a/crates/control/src/primary_state_filter.rs +++ b/crates/control/src/primary_state_filter.rs @@ -7,8 +7,8 @@ use spl_network_messages::PlayerNumber; use types::{ audio::{Sound, SpeakerRequest}, buttons::Buttons, + filtered_game_controller_state::FilteredGameControllerState, filtered_game_state::FilteredGameState, - game_controller_state::GameControllerState, primary_state::PrimaryState, }; @@ -23,8 +23,8 @@ pub struct CreationContext {} #[context] pub struct CycleContext { buttons: Input, - filtered_game_state: Input, "filtered_game_state?">, - game_controller_state: Input, "game_controller_state?">, + filtered_game_controller_state: + Input, "filtered_game_controller_state?">, player_number: Parameter, @@ -48,7 +48,7 @@ impl PrimaryStateFilter { &mut self, context: CycleContext, ) -> Result { - let is_penalized = match context.game_controller_state { + let is_penalized = match context.filtered_game_controller_state { Some(game_controller_state) => { game_controller_state.penalties[*context.player_number].is_some() } @@ -60,7 +60,7 @@ impl PrimaryStateFilter { context.buttons.head_buttons_touched, context.buttons.is_chest_button_pressed, context.buttons.calibration_buttons_touched, - context.filtered_game_state, + context.filtered_game_controller_state, ) { // Unstiff transitions (entering and exiting) (last_primary_state, true, _, _, _) => { @@ -75,15 +75,21 @@ impl PrimaryStateFilter { (PrimaryState::Initial, _, _, true, _) => PrimaryState::Calibration, // GameController transitions (entering listening mode and staying within) - (PrimaryState::Unstiff, _, true, _, Some(game_state)) - | (PrimaryState::Finished, _, true, _, Some(game_state)) => { - Self::game_state_to_primary_state(*game_state, is_penalized) + (PrimaryState::Unstiff, _, true, _, Some(filtered_game_controller_state)) + | (PrimaryState::Finished, _, true, _, Some(filtered_game_controller_state)) => { + Self::game_state_to_primary_state( + filtered_game_controller_state.game_state, + is_penalized, + ) } - (_, _, _, _, Some(game_state)) + (_, _, _, _, Some(filtered_game_controller_state)) if self.last_primary_state != PrimaryState::Unstiff && self.last_primary_state != PrimaryState::Finished => { - Self::game_state_to_primary_state(*game_state, is_penalized) + Self::game_state_to_primary_state( + filtered_game_controller_state.game_state, + is_penalized, + ) } // non-GameController transitions diff --git a/crates/control/src/role_assignment.rs b/crates/control/src/role_assignment.rs index 646d0c4..d89e02a 100644 --- a/crates/control/src/role_assignment.rs +++ b/crates/control/src/role_assignment.rs @@ -13,7 +13,7 @@ use types::{ cycle_time::CycleTime, fall_state::FallState, field_dimensions::FieldDimensions, - game_controller_state::GameControllerState, + filtered_game_controller_state::FilteredGameControllerState, initial_pose::InitialPose, messages::{IncomingMessage, OutgoingMessage}, parameters::SplNetworkParameters, @@ -42,7 +42,8 @@ pub struct CreationContext {} pub struct CycleContext { ball_position: Input, "ball_position?">, fall_state: Input, - game_controller_state: Input, "game_controller_state?">, + filtered_game_controller_state: + Input, "filtered_game_controller_state?">, primary_state: Input, robot_to_field: Input>, "robot_to_field?">, cycle_time: Input, @@ -114,7 +115,7 @@ impl RoleAssignment { seven: Role::Striker, }; - if let Some(game_controller_state) = context.game_controller_state { + if let Some(game_controller_state) = context.filtered_game_controller_state { if let Some(striker) = [ PlayerNumber::Seven, PlayerNumber::Six, @@ -227,7 +228,7 @@ impl RoleAssignment { send_spl_striker_message, team_ball, cycle_start_time, - context.game_controller_state, + context.filtered_game_controller_state, *context.player_number, context.spl_network.striker_trusts_team_ball, context.optional_roles, @@ -250,7 +251,7 @@ impl RoleAssignment { send_spl_striker_message, team_ball, cycle_start_time, - context.game_controller_state, + context.filtered_game_controller_state, *context.player_number, context.spl_network.striker_trusts_team_ball, context.optional_roles, @@ -277,8 +278,8 @@ impl RoleAssignment { { self.last_transmitted_spl_striker_message = Some(cycle_start_time); self.last_received_spl_striker_message = Some(cycle_start_time); - if let Some(game_controller_state) = context.game_controller_state { - if game_controller_state.remaining_amount_of_messages + if let Some(game_controller_state) = context.filtered_game_controller_state { + if game_controller_state.remaining_number_of_messages > context .spl_network .remaining_amount_of_messages_to_stop_sending @@ -312,7 +313,7 @@ impl RoleAssignment { } self.team_ball = team_ball; - if let Some(game_controller_state) = context.game_controller_state { + if let Some(game_controller_state) = context.filtered_game_controller_state { if game_controller_state.penalties.one.is_some() { self.last_time_keeper_penalized = Some(cycle_start_time); } @@ -337,12 +338,12 @@ fn process_role_state_machine( send_spl_striker_message: bool, team_ball: Option, cycle_start_time: SystemTime, - game_controller_state: Option<&GameControllerState>, + filtered_game_controller_state: Option<&FilteredGameControllerState>, player_number: PlayerNumber, striker_trusts_team_ball: Duration, optional_roles: &[Role], ) -> (Role, bool, Option) { - if let Some(game_controller_state) = game_controller_state { + if let Some(game_controller_state) = filtered_game_controller_state { match game_controller_state.game_phase { GamePhase::PenaltyShootout { kicking_team: Team::Hulks, @@ -414,7 +415,7 @@ fn process_role_state_machine( time_to_reach_kick_position, player_number, cycle_start_time, - game_controller_state, + filtered_game_controller_state, optional_roles, ), }, @@ -437,7 +438,7 @@ fn process_role_state_machine( time_to_reach_kick_position, player_number, cycle_start_time, - game_controller_state, + filtered_game_controller_state, optional_roles, ), }, @@ -452,7 +453,7 @@ fn process_role_state_machine( time_to_reach_kick_position, player_number, cycle_start_time, - game_controller_state, + filtered_game_controller_state, optional_roles, ), }, @@ -479,7 +480,7 @@ fn process_role_state_machine( time_to_reach_kick_position, player_number, cycle_start_time, - game_controller_state, + filtered_game_controller_state, optional_roles, ), }, @@ -494,7 +495,7 @@ fn process_role_state_machine( time_to_reach_kick_position, player_number, cycle_start_time, - game_controller_state, + filtered_game_controller_state, optional_roles, ), }, @@ -518,7 +519,7 @@ fn process_role_state_machine( time_to_reach_kick_position, player_number, cycle_start_time, - game_controller_state, + filtered_game_controller_state, optional_roles, ), }, @@ -540,7 +541,7 @@ fn process_role_state_machine( time_to_reach_kick_position, player_number, cycle_start_time, - game_controller_state, + filtered_game_controller_state, optional_roles, ), }, @@ -571,7 +572,7 @@ fn process_role_state_machine( time_to_reach_kick_position, player_number, cycle_start_time, - game_controller_state, + filtered_game_controller_state, optional_roles, ), }, @@ -583,7 +584,7 @@ fn decide_if_claiming_striker_or_other_role( time_to_reach_kick_position: Option, player_number: PlayerNumber, cycle_start_time: SystemTime, - game_controller_state: Option<&GameControllerState>, + filtered_game_controller_state: Option<&FilteredGameControllerState>, optional_roles: &[Role], ) -> (Role, bool, Option) { if time_to_reach_kick_position < spl_message.time_to_reach_kick_position { @@ -596,7 +597,7 @@ fn decide_if_claiming_striker_or_other_role( ( generate_role( player_number, - game_controller_state, + filtered_game_controller_state, spl_message.player_number, optional_roles, ), @@ -657,7 +658,7 @@ fn team_ball_from_seen_ball( fn generate_role( own_player_number: PlayerNumber, - game_controller_state: Option<&GameControllerState>, + game_controller_state: Option<&FilteredGameControllerState>, striker_player_number: PlayerNumber, optional_roles: &[Role], ) -> Role { diff --git a/crates/control/src/rule_obstacle_composer.rs b/crates/control/src/rule_obstacle_composer.rs index 6b5795a..21b0bcd 100644 --- a/crates/control/src/rule_obstacle_composer.rs +++ b/crates/control/src/rule_obstacle_composer.rs @@ -4,11 +4,10 @@ use framework::MainOutput; use geometry::{circle::Circle, rectangle::Rectangle}; use nalgebra::{point, vector, Point2}; use serde::{Deserialize, Serialize}; -use spl_network_messages::{GameState, SubState, Team}; +use spl_network_messages::{SubState, Team}; use types::{ - field_dimensions::FieldDimensions, filtered_game_state::FilteredGameState, - game_controller_state::GameControllerState, rule_obstacles::RuleObstacle, - world_state::BallState, + field_dimensions::FieldDimensions, filtered_game_controller_state::FilteredGameControllerState, + filtered_game_state::FilteredGameState, rule_obstacles::RuleObstacle, world_state::BallState, }; #[derive(Deserialize, Serialize)] @@ -19,9 +18,11 @@ pub struct CreationContext {} #[context] pub struct CycleContext { - game_controller_state: RequiredInput, "game_controller_state?">, - filtered_game_state: RequiredInput, "filtered_game_state?">, + filtered_game_controller_state: + RequiredInput, "filtered_game_controller_state?">, ball_state: Input, "ball_state?">, + + center_circle_obstacle_increase: Parameter, field_dimensions: Parameter, } @@ -40,13 +41,9 @@ impl RuleObstacleComposer { let free_kick_obstacle_radius = 0.75; let mut rule_obstacles = Vec::new(); - match ( - context.game_controller_state, - context.filtered_game_state, - context.ball_state, - ) { + match (context.filtered_game_controller_state, context.ball_state) { ( - GameControllerState { + FilteredGameControllerState { sub_state: Some( SubState::KickIn @@ -55,47 +52,47 @@ impl RuleObstacleComposer { | SubState::PushingFreeKick, ), kicking_team: Team::Opponent | Team::Uncertain, - game_state: GameState::Playing, + game_state: FilteredGameState::Playing { .. }, .. }, - _, Some(ball), ) => { - let obstacle = RuleObstacle::Circle(Circle::new( + let free_kick_obstacle = RuleObstacle::Circle(Circle::new( ball.ball_in_field, free_kick_obstacle_radius, )); - rule_obstacles.push(obstacle); + rule_obstacles.push(free_kick_obstacle); } ( - GameControllerState { - game_state: GameState::Playing, - sub_state: None, + FilteredGameControllerState { + game_state: + FilteredGameState::Playing { + ball_is_free: false, + kick_off: true, + }, .. }, - FilteredGameState::Playing { - ball_is_free: false, - }, _, ) => { - let obstacle = RuleObstacle::Circle(Circle::new( + let center_circle_obstacle = RuleObstacle::Circle(Circle::new( Point2::origin(), - context.field_dimensions.center_circle_diameter / 2.0, + context.field_dimensions.center_circle_diameter / 2.0 + * context.center_circle_obstacle_increase, )); - rule_obstacles.push(obstacle); + dbg!("center circle obstacle created"); + rule_obstacles.push(center_circle_obstacle); } ( - GameControllerState { + FilteredGameControllerState { sub_state: Some(SubState::PenaltyKick), - game_state: GameState::Playing, + game_state: FilteredGameState::Playing { .. }, .. }, _, - _, ) => { let penalty_box_obstacle = create_penalty_box( context.field_dimensions, - context.game_controller_state.kicking_team, + context.filtered_game_controller_state.kicking_team, ); rule_obstacles.push(penalty_box_obstacle); } diff --git a/crates/control/src/world_state_composer.rs b/crates/control/src/world_state_composer.rs index caa88cb..f4a7b57 100644 --- a/crates/control/src/world_state_composer.rs +++ b/crates/control/src/world_state_composer.rs @@ -6,8 +6,7 @@ use serde::{Deserialize, Serialize}; use spl_network_messages::PlayerNumber; use types::{ fall_state::FallState, - filtered_game_state::FilteredGameState, - game_controller_state::GameControllerState, + filtered_game_controller_state::FilteredGameControllerState, kick_decision::KickDecision, obstacles::Obstacle, primary_state::PrimaryState, @@ -26,8 +25,8 @@ pub struct CreationContext {} pub struct CycleContext { ball: Input, "ball_state?">, rule_ball: Input, "rule_ball_state?">, - filtered_game_state: Input, "filtered_game_state?">, - game_controller_state: Input, "game_controller_state?">, + filtered_game_controller_state: + Input, "filtered_game_controller_state?">, robot_to_field: Input>, "robot_to_field?">, kick_decisions: Input>, "kick_decisions?">, instant_kick_decisions: Input>, "instant_kick_decisions?">, @@ -67,14 +66,13 @@ impl WorldStateComposer { let world_state = WorldState { ball: context.ball.copied(), rule_ball: context.rule_ball.copied(), - filtered_game_state: context.filtered_game_state.copied(), obstacles: context.obstacles.clone(), rule_obstacles: context.rule_obstacles.clone(), position_of_interest: *context.position_of_interest, robot, kick_decisions: context.kick_decisions.cloned(), instant_kick_decisions: context.instant_kick_decisions.cloned(), - game_controller_state: context.game_controller_state.copied(), + filtered_game_controller_state: context.filtered_game_controller_state.copied(), }; Ok(MainOutputs { diff --git a/crates/coordinate_systems/Cargo.toml b/crates/coordinate_systems/Cargo.toml new file mode 100644 index 0000000..53b1c26 --- /dev/null +++ b/crates/coordinate_systems/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "coordinate_systems" +version = "0.1.0" +edition = "2021" +license = "GPL-3.0-only" +homepage = "https://github.com/hulks/hulk" + +[dependencies] +nalgebra = { workspace = true } +geometry = { workspace = true } diff --git a/crates/coordinate_systems/src/framed.rs b/crates/coordinate_systems/src/framed.rs new file mode 100644 index 0000000..cd5db66 --- /dev/null +++ b/crates/coordinate_systems/src/framed.rs @@ -0,0 +1,65 @@ +use std::{ + marker::PhantomData, + ops::{Add, Sub}, +}; + +use geometry::look_at::LookAt; + +#[derive(Debug)] +pub struct Framed { + frame: PhantomData, + pub inner: Inner, +} + +impl Clone for Framed +where + Inner: Clone, +{ + fn clone(&self) -> Self { + Self::new(self.inner.clone()) + } +} + +impl Copy for Framed where Inner: Copy {} + +impl Framed { + pub fn new(inner: Inner) -> Self { + Self { + frame: PhantomData, + inner, + } + } +} + +impl Add> for Framed +where + SelfInner: Add, +{ + type Output = Framed; + + fn add(self, right: Framed) -> Self::Output { + Self::Output::new(self.inner + right.inner) + } +} + +impl Sub> for Framed +where + SelfInner: Sub, +{ + type Output = Framed; + + fn sub(self, right: Framed) -> Self::Output { + Self::Output::new(self.inner - right.inner) + } +} + +impl LookAt> for Framed +where + Inner: LookAt, +{ + type Rotation = Framed; + + fn look_at(&self, target: &Self) -> Self::Rotation { + Self::Rotation::new(self.inner.look_at(&target.inner)) + } +} diff --git a/crates/coordinate_systems/src/into.rs b/crates/coordinate_systems/src/into.rs new file mode 100644 index 0000000..836efa2 --- /dev/null +++ b/crates/coordinate_systems/src/into.rs @@ -0,0 +1,27 @@ +use crate::{framed::Framed, transform::Transform}; + +pub trait IntoFramed +where + Self: Sized, +{ + fn framed(self) -> Framed; +} + +impl IntoFramed for Inner { + fn framed(self) -> Framed { + Framed::new(self) + } +} + +pub trait IntoTransform +where + Self: Sized, +{ + fn framed_transform(self) -> Transform; +} + +impl IntoTransform for T { + fn framed_transform(self) -> Transform { + Transform::new(self) + } +} diff --git a/crates/coordinate_systems/src/lib.rs b/crates/coordinate_systems/src/lib.rs new file mode 100644 index 0000000..665fb06 --- /dev/null +++ b/crates/coordinate_systems/src/lib.rs @@ -0,0 +1,14 @@ +mod framed; +mod into; +mod transform; + +pub use framed::Framed; +pub use into::{IntoFramed, IntoTransform}; +pub use transform::Transform; + +#[macro_export] +macro_rules! transform { + ($source:ty => $destination:ty; $inner:expr) => { + $inner.framed_transform::<$source, $destination>() + }; +} diff --git a/crates/coordinate_systems/src/transform.rs b/crates/coordinate_systems/src/transform.rs new file mode 100644 index 0000000..986218f --- /dev/null +++ b/crates/coordinate_systems/src/transform.rs @@ -0,0 +1,56 @@ +use std::{marker::PhantomData, ops::Mul}; + +use nalgebra::{AbstractRotation, Isometry, SimdRealField}; + +use crate::framed::Framed; + +#[derive(Debug)] +pub struct Transform { + from: PhantomData, + to: PhantomData, + pub inner: Inner, +} + +impl Clone for Transform +where + Inner: Clone, +{ + fn clone(&self) -> Self { + Self::new(self.inner.clone()) + } +} + +impl Copy for Transform where Inner: Copy {} + +impl Transform { + pub fn new(inner: Transformer) -> Self { + Self { + from: PhantomData, + to: PhantomData, + inner, + } + } +} + +impl Mul> for Transform +where + Transformer: Mul, +{ + type Output = Framed; + + fn mul(self, rhs: Framed) -> Self::Output { + Self::Output::new(self.inner * rhs.inner) + } +} + +impl + Transform> +where + Type::Element: SimdRealField, + Type: SimdRealField, + Rotation: AbstractRotation, +{ + pub fn inverse(&self) -> Transform> { + Transform::::new(self.inner.inverse()) + } +} diff --git a/crates/filtering/Cargo.toml b/crates/filtering/Cargo.toml index bf335e2..04ea5ef 100644 --- a/crates/filtering/Cargo.toml +++ b/crates/filtering/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "filtering" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] nalgebra = { workspace = true } diff --git a/crates/filtering/src/low_pass_filter.rs b/crates/filtering/src/low_pass_filter.rs index 284045b..e55cf78 100644 --- a/crates/filtering/src/low_pass_filter.rs +++ b/crates/filtering/src/low_pass_filter.rs @@ -1,5 +1,5 @@ use std::{ - f32::consts::PI, + f32::consts::TAU, ops::{Add, Mul, Sub}, }; @@ -23,7 +23,7 @@ where } pub fn with_cutoff(initial_state: State, cutoff_frequency: f32, sampling_rate: f32) -> Self { - let rc = 1.0 / (cutoff_frequency * 2.0 * PI); + let rc = 1.0 / (cutoff_frequency * TAU); let dt = 1.0 / sampling_rate; let smoothing_factor = dt / (rc + dt); Self { diff --git a/crates/filtering/src/orientation_filtering.rs b/crates/filtering/src/orientation_filtering.rs index b55d37a..a40c992 100644 --- a/crates/filtering/src/orientation_filtering.rs +++ b/crates/filtering/src/orientation_filtering.rs @@ -187,7 +187,7 @@ fn calculate_initial_orientation(linear_acceleration: Vector3) -> UnitQuate #[cfg(test)] mod test { - use std::f32::consts::PI; + use std::f32::consts::{PI, TAU}; use approx::assert_relative_eq; use nalgebra::vector; @@ -286,7 +286,7 @@ mod test { fn full_rotation() { let mut measured_acceleration = Vec::new(); let mut measured_angular_velocity = Vec::new(); - let frequency = 2.0 * PI; + let frequency = TAU; for _ in 0..=NUMBER_OF_MEASUREMENTS { measured_acceleration.push(vector![0.0, 0.0, GRAVITATIONAL_CONSTANT]); measured_angular_velocity.push(frequency * Vector3::z()); @@ -313,7 +313,7 @@ mod test { let mut measured_acceleration = Vec::new(); let mut measured_angular_velocity = Vec::new(); - let frequency = 2.0 * PI; + let frequency = TAU; for _ in 0..NUMBER_OF_MEASUREMENTS { measured_acceleration.push( vector![0.0, 0.0, GRAVITATIONAL_CONSTANT] @@ -350,7 +350,7 @@ mod test { let mut measured_angular_velocity = Vec::new(); let mut left_force_sensitive_resistor = Vec::new(); let mut right_force_sensitive_resistor = Vec::new(); - let frequency = 2.0 * PI; + let frequency = TAU; for _ in 0..NUMBER_OF_MEASUREMENTS { measured_acceleration.push( diff --git a/crates/framework/Cargo.toml b/crates/framework/Cargo.toml index 95db53b..2da87c0 100644 --- a/crates/framework/Cargo.toml +++ b/crates/framework/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "framework" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] parking_lot = { workspace = true } diff --git a/crates/geometry/Cargo.toml b/crates/geometry/Cargo.toml index d01f46d..11fa152 100644 --- a/crates/geometry/Cargo.toml +++ b/crates/geometry/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "geometry" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] approx = { workspace = true } diff --git a/crates/geometry/src/arc.rs b/crates/geometry/src/arc.rs index 2959fa6..aaac9d0 100644 --- a/crates/geometry/src/arc.rs +++ b/crates/geometry/src/arc.rs @@ -1,4 +1,4 @@ -use std::f32::consts::PI; +use std::f32::consts::TAU; use approx::{AbsDiffEq, RelativeEq}; use nalgebra::Point2; @@ -59,11 +59,11 @@ impl Arc { let mut angle = vector_end.y.atan2(vector_end.x) - angle_x_axis_to_start; if (orientation == Orientation::Clockwise) && (angle > 0.0) { - angle -= 2.0 * PI; + angle -= TAU; angle *= -1.0; } if (orientation == Orientation::Counterclockwise) && (angle < 0.0) { - angle += 2.0 * PI; + angle += TAU; } (angle * self.circle.radius).abs() } @@ -106,9 +106,9 @@ mod tests { #[test] fn arc_cost_generic() { for angle_index in 0..100 { - let angle = angle_index as f32 / 100.0 * 2.0 * PI; + let angle = angle_index as f32 / 100.0 * TAU; for angle_distance_index in 1..100 { - let angle_distance = angle_distance_index as f32 / 100.0 * 2.0 * PI; + let angle_distance = angle_distance_index as f32 / 100.0 * TAU; let start = UnitComplex::from_angle(angle) * vector![1.0, 0.0]; let end = UnitComplex::from_angle(angle + angle_distance) * vector![1.0, 0.0]; let center = point![PI, 4.20]; @@ -127,7 +127,7 @@ mod tests { ); assert_relative_eq!( arc.length(Orientation::Clockwise), - radius * (2.0 * PI - angle_distance), + radius * (TAU - angle_distance), epsilon = 0.001 ); } diff --git a/crates/geometry/src/circle.rs b/crates/geometry/src/circle.rs index 3bb6561..7310c95 100644 --- a/crates/geometry/src/circle.rs +++ b/crates/geometry/src/circle.rs @@ -1,4 +1,4 @@ -use std::f32::consts::PI; +use std::f32::consts::TAU; use approx::{AbsDiffEq, RelativeEq}; use nalgebra::{distance, vector, Point2}; @@ -87,11 +87,11 @@ impl Circle { let mut angle_start_to_end = vector_end.y.atan2(vector_end.x) - angle_x_axis_to_start; if angle_start_to_obstacle < 0.0 { - angle_start_to_obstacle += 2.0 * PI; + angle_start_to_obstacle += TAU; } if angle_start_to_end < 0.0 { - angle_start_to_end += 2.0 * PI; + angle_start_to_end += TAU; } (angle_start_to_obstacle < angle_start_to_end) ^ (orientation == Orientation::Clockwise) diff --git a/crates/geometry/src/line_segment.rs b/crates/geometry/src/line_segment.rs index 213df93..729a330 100644 --- a/crates/geometry/src/line_segment.rs +++ b/crates/geometry/src/line_segment.rs @@ -1,4 +1,4 @@ -use std::f32::consts::PI; +use std::f32::consts::TAU; use approx::{AbsDiffEq, RelativeEq}; use nalgebra::{vector, Point2, Vector2}; @@ -159,11 +159,11 @@ impl LineSegment { vector_obstacle.y.atan2(vector_obstacle.x) - angle_x_axis_to_start; if angle_start_to_obstacle < 0.0 { - angle_start_to_obstacle += 2.0 * PI; + angle_start_to_obstacle += TAU; } if angle_start_to_end < 0.0 { - angle_start_to_end += 2.0 * PI; + angle_start_to_end += TAU; } if (angle_start_to_obstacle < angle_start_to_end) diff --git a/crates/hardware/Cargo.toml b/crates/hardware/Cargo.toml index 80dd0f6..943f702 100644 --- a/crates/hardware/Cargo.toml +++ b/crates/hardware/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "hardware" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] color-eyre = { workspace = true } diff --git a/crates/hulk/Cargo.toml b/crates/hulk/Cargo.toml index 2034e6e..96865d4 100644 --- a/crates/hulk/Cargo.toml +++ b/crates/hulk/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "hulk" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] audio = { workspace = true } diff --git a/crates/hulk/build.rs b/crates/hulk/build.rs index d260ce8..842dd96 100644 --- a/crates/hulk/build.rs +++ b/crates/hulk/build.rs @@ -44,7 +44,7 @@ fn main() -> Result<()> { "control::center_of_mass_provider", "control::fall_state_estimation", "control::game_controller_filter", - "control::game_state_filter", + "control::game_controller_state_filter", "control::ground_contact_detector", "control::ground_provider", "control::kick_selector", @@ -55,7 +55,6 @@ fn main() -> Result<()> { "control::motion::arms_up_squat", "control::motion::condition_input_provider", "control::motion::dispatching_interpolator", - "control::motion::energy_saving_stand", "control::motion::fall_protector", "control::motion::head_motion", "control::motion::motor_commands_collector", diff --git a/crates/hulk_nao/Cargo.toml b/crates/hulk_nao/Cargo.toml index 1a4942d..66d6ee1 100644 --- a/crates/hulk_nao/Cargo.toml +++ b/crates/hulk_nao/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "hulk_nao" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] alsa = { workspace = true } diff --git a/crates/hulk_nao/src/hardware_interface.rs b/crates/hulk_nao/src/hardware_interface.rs index 3f50d27..5356142 100644 --- a/crates/hulk_nao/src/hardware_interface.rs +++ b/crates/hulk_nao/src/hardware_interface.rs @@ -59,7 +59,7 @@ pub struct HardwareInterface { paths: Paths, spl_network_endpoint: Endpoint, async_runtime: Runtime, - camera_top: Camera, + //camera_top: Camera, camera_bottom: Camera, enable_recording: AtomicBool, keep_running: CancellationToken, @@ -88,13 +88,13 @@ impl HardwareInterface { .block_on(Endpoint::new(parameters.spl_network_ports)) .wrap_err("failed to initialize SPL network")?, async_runtime: runtime, - camera_top: Camera::new( + /*camera_top: Camera::new( "/dev/video-top", CameraPosition::Top, parameters.camera_top, i2c_head_mutex.clone(), ) - .wrap_err("failed to initialize top camera")?, + .wrap_err("failed to initialize top camera")?,*/ camera_bottom: Camera::new( "/dev/video-bottom", @@ -126,7 +126,7 @@ impl ActuatorInterface for HardwareInterface { impl CameraInterface for HardwareInterface { fn read_from_camera(&self, camera_position: CameraPosition) -> Result { match camera_position { - CameraPosition::Top => self.camera_bottom.read(), + CameraPosition::Top => self.camera_bottom.read(), //antigo "CameraPosition::Top => self.camera_top.read()," CameraPosition::Bottom => self.camera_bottom.read(), } } diff --git a/crates/hulk_webots/Cargo.toml b/crates/hulk_webots/Cargo.toml index 5195958..f84cce5 100644 --- a/crates/hulk_webots/Cargo.toml +++ b/crates/hulk_webots/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "hulk_webots" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] chrono = { workspace = true } diff --git a/crates/kinematics/Cargo.toml b/crates/kinematics/Cargo.toml index 1257ff9..c3d594c 100644 --- a/crates/kinematics/Cargo.toml +++ b/crates/kinematics/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "kinematics" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] nalgebra = { workspace = true } diff --git a/crates/motionfile/Cargo.toml b/crates/motionfile/Cargo.toml index fec1a17..1c04fb7 100644 --- a/crates/motionfile/Cargo.toml +++ b/crates/motionfile/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "motionfile" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] color-eyre = { workspace = true } diff --git a/crates/nao/Cargo.toml b/crates/nao/Cargo.toml index 175fda9..7c931bc 100644 --- a/crates/nao/Cargo.toml +++ b/crates/nao/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "nao" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] color-eyre = { workspace = true } diff --git a/crates/nao/src/lib.rs b/crates/nao/src/lib.rs index c0b5d94..b5e12c0 100644 --- a/crates/nao/src/lib.rs +++ b/crates/nao/src/lib.rs @@ -18,7 +18,7 @@ use tokio::{ pub const PING_TIMEOUT_SECONDS: u32 = 2; pub struct Nao { - host: Ipv4Addr, + pub host: Ipv4Addr, } impl Nao { @@ -151,8 +151,8 @@ impl Nao { let status = self .ssh_to_nao() .arg("rm") - .arg("--recursive") - .arg("--force") + .arg("-r") + .arg("-f") .arg("/home/nao/hulk/logs/*") .status() .await diff --git a/crates/nao_camera/Cargo.toml b/crates/nao_camera/Cargo.toml index a72b5bd..ed4664e 100644 --- a/crates/nao_camera/Cargo.toml +++ b/crates/nao_camera/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "nao_camera" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] i2cdev = { workspace = true } diff --git a/crates/parameters/Cargo.toml b/crates/parameters/Cargo.toml index c6dfb0f..2468be7 100644 --- a/crates/parameters/Cargo.toml +++ b/crates/parameters/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "parameters" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] serde = { workspace = true } diff --git a/crates/projection/Cargo.toml b/crates/projection/Cargo.toml index 99c3e27..b2da544 100644 --- a/crates/projection/Cargo.toml +++ b/crates/projection/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "projection" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] nalgebra = { workspace = true } diff --git a/crates/repository/Cargo.toml b/crates/repository/Cargo.toml index c693bbf..f0d2a0b 100644 --- a/crates/repository/Cargo.toml +++ b/crates/repository/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "repository" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] color-eyre = { workspace = true } diff --git a/crates/serialize_hierarchy/Cargo.toml b/crates/serialize_hierarchy/Cargo.toml index bed166e..a04f9de 100644 --- a/crates/serialize_hierarchy/Cargo.toml +++ b/crates/serialize_hierarchy/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "serialize_hierarchy" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] bincode = { workspace = true } diff --git a/crates/serialize_hierarchy/src/implementation.rs b/crates/serialize_hierarchy/src/implementation.rs index f2558fc..0e1c479 100644 --- a/crates/serialize_hierarchy/src/implementation.rs +++ b/crates/serialize_hierarchy/src/implementation.rs @@ -1,6 +1,6 @@ use std::{ collections::BTreeSet, - ops::{Deref, Range}, + ops::{Deref, DerefMut, Range}, sync::Arc, }; @@ -9,6 +9,37 @@ use serde::{de::DeserializeOwned, Deserialize, Deserializer, Serialize, Serializ use crate::{error::Error, SerializeHierarchy}; +impl SerializeHierarchy for Box +where + T: SerializeHierarchy, +{ + fn serialize_path(&self, path: &str, serializer: S) -> Result> + where + S: Serializer, + { + self.deref().serialize_path(path, serializer) + } + + fn deserialize_path<'de, D>(&mut self, path: &str, data: D) -> Result<(), Error> + where + D: Deserializer<'de>, + { + self.deref_mut().deserialize_path(path, data) + } + + fn exists(path: &str) -> bool { + T::exists(path) + } + + fn get_fields() -> BTreeSet { + T::get_fields() + } + + fn fill_fields(fields: &mut BTreeSet, prefix: &str) { + T::fill_fields(fields, prefix) + } +} + impl SerializeHierarchy for Arc where T: SerializeHierarchy, diff --git a/crates/serialize_hierarchy_derive/Cargo.toml b/crates/serialize_hierarchy_derive/Cargo.toml index 045ef0f..55876eb 100644 --- a/crates/serialize_hierarchy_derive/Cargo.toml +++ b/crates/serialize_hierarchy_derive/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "serialize_hierarchy_derive" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] proc-macro-error = { workspace = true } diff --git a/crates/source_analyzer/Cargo.toml b/crates/source_analyzer/Cargo.toml index cec0dad..cc46d28 100644 --- a/crates/source_analyzer/Cargo.toml +++ b/crates/source_analyzer/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "source_analyzer" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] convert_case = { workspace = true } diff --git a/crates/spl_network/Cargo.toml b/crates/spl_network/Cargo.toml index e741ab8..31992d4 100644 --- a/crates/spl_network/Cargo.toml +++ b/crates/spl_network/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "spl_network" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] bincode = { workspace = true } diff --git a/crates/spl_network_messages/Cargo.toml b/crates/spl_network_messages/Cargo.toml index 8d750ad..684fd78 100644 --- a/crates/spl_network_messages/Cargo.toml +++ b/crates/spl_network_messages/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "spl_network_messages" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [build-dependencies] bindgen = { workspace = true } diff --git a/crates/spl_network_messages/src/game_controller_state_message.rs b/crates/spl_network_messages/src/game_controller_state_message.rs index d2cf9fc..d35459e 100644 --- a/crates/spl_network_messages/src/game_controller_state_message.rs +++ b/crates/spl_network_messages/src/game_controller_state_message.rs @@ -229,10 +229,13 @@ impl CompetitionType { } } -#[derive(Clone, Copy, Debug, Deserialize, Serialize, SerializeHierarchy)] +#[derive(Clone, Copy, Debug, Default, Deserialize, Serialize, SerializeHierarchy)] pub enum GamePhase { + #[default] Normal, - PenaltyShootout { kicking_team: Team }, + PenaltyShootout { + kicking_team: Team, + }, Overtime, Timeout, } diff --git a/crates/types/Cargo.toml b/crates/types/Cargo.toml index 5f96cfc..cdd3852 100644 --- a/crates/types/Cargo.toml +++ b/crates/types/Cargo.toml @@ -1,13 +1,15 @@ [package] name = "types" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] approx = { workspace = true } +approx_derive = { workspace = true } color-eyre = { workspace = true } +coordinate_systems = { workspace = true } enum-iterator = { workspace = true } geometry = { workspace = true } image = { workspace = true } diff --git a/crates/types/src/ball.rs b/crates/types/src/ball.rs index 28833b8..c8e2e68 100644 --- a/crates/types/src/ball.rs +++ b/crates/types/src/ball.rs @@ -1,4 +1,4 @@ -use approx::{AbsDiffEq, RelativeEq}; +use approx_derive::{AbsDiffEq, RelativeEq}; use geometry::circle::Circle; use nalgebra::Point2; use serde::{Deserialize, Serialize}; @@ -13,42 +13,11 @@ pub struct CandidateEvaluation { pub merge_weight: Option, } -#[derive(Clone, Debug, Deserialize, PartialEq, Serialize, SerializeHierarchy)] +#[derive( + Clone, Debug, Deserialize, PartialEq, Serialize, SerializeHierarchy, AbsDiffEq, RelativeEq, +)] +#[abs_diff_eq(epsilon = "f32")] pub struct Ball { pub position: Point2, pub image_location: Circle, } - -impl AbsDiffEq for Ball { - type Epsilon = f32; - - fn default_epsilon() -> Self::Epsilon { - Self::Epsilon::default_epsilon() - } - - fn abs_diff_eq(&self, other: &Self, epsilon: Self::Epsilon) -> bool { - self.position.abs_diff_eq(&other.position, epsilon) - && self - .image_location - .abs_diff_eq(&other.image_location, epsilon) - } -} - -impl RelativeEq for Ball { - fn default_max_relative() -> Self::Epsilon { - Self::Epsilon::default_max_relative() - } - - fn relative_eq( - &self, - other: &Self, - epsilon: Self::Epsilon, - max_relative: Self::Epsilon, - ) -> bool { - self.position - .relative_eq(&other.position, epsilon, max_relative) - && self - .image_location - .relative_eq(&other.image_location, epsilon, max_relative) - } -} diff --git a/crates/types/src/filtered_game_controller_state.rs b/crates/types/src/filtered_game_controller_state.rs new file mode 100644 index 0000000..00aa878 --- /dev/null +++ b/crates/types/src/filtered_game_controller_state.rs @@ -0,0 +1,17 @@ +use serde::{Deserialize, Serialize}; +use serialize_hierarchy::SerializeHierarchy; +use spl_network_messages::{GamePhase, Penalty, SubState, Team}; + +use crate::{filtered_game_state::FilteredGameState, players::Players}; + +#[derive(Default, Clone, Copy, Debug, Serialize, Deserialize, SerializeHierarchy)] +pub struct FilteredGameControllerState { + pub game_state: FilteredGameState, + pub opponent_game_state: FilteredGameState, + pub game_phase: GamePhase, + pub kicking_team: Team, + pub penalties: Players>, + pub remaining_number_of_messages: u16, + pub sub_state: Option, + pub own_team_is_home_after_coin_toss: bool, +} diff --git a/crates/types/src/filtered_game_state.rs b/crates/types/src/filtered_game_state.rs index f1532f0..4cf24b5 100644 --- a/crates/types/src/filtered_game_state.rs +++ b/crates/types/src/filtered_game_state.rs @@ -2,11 +2,17 @@ use serde::{Deserialize, Serialize}; use serialize_hierarchy::SerializeHierarchy; use spl_network_messages::Team; -#[derive(Clone, Copy, Debug, Serialize, Deserialize, SerializeHierarchy)] +#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, SerializeHierarchy)] pub enum FilteredGameState { + #[default] Initial, - Ready { kicking_team: Team }, + Ready { + kicking_team: Team, + }, Set, - Playing { ball_is_free: bool }, + Playing { + ball_is_free: bool, + kick_off: bool, + }, Finished, } diff --git a/crates/types/src/joints/arm.rs b/crates/types/src/joints/arm.rs index c5cb55a..fedcc38 100644 --- a/crates/types/src/joints/arm.rs +++ b/crates/types/src/joints/arm.rs @@ -8,6 +8,8 @@ use serde::{Deserialize, Serialize}; use serialize_hierarchy::SerializeHierarchy; use splines::impl_Interpolate; +use super::mirror::Mirror; + #[derive(Clone, Copy)] pub enum ArmJoint { ShoulderPitch, @@ -152,8 +154,8 @@ impl Div> for ArmJoints { } } -impl ArmJoints { - pub fn mirrored(self) -> Self { +impl Mirror for ArmJoints { + fn mirrored(self) -> Self { Self { shoulder_pitch: self.shoulder_pitch, shoulder_roll: -self.shoulder_roll, diff --git a/crates/types/src/joints/head.rs b/crates/types/src/joints/head.rs index 0eb5084..074ee35 100644 --- a/crates/types/src/joints/head.rs +++ b/crates/types/src/joints/head.rs @@ -6,6 +6,8 @@ use std::{ use serde::{Deserialize, Serialize}; use serialize_hierarchy::SerializeHierarchy; +use super::mirror::Mirror; + #[derive(Clone, Copy)] pub enum HeadJoint { Yaw, @@ -104,8 +106,8 @@ impl Div> for HeadJoints { } } -impl HeadJoints { - pub fn mirrored(self) -> Self { +impl Mirror for HeadJoints { + fn mirrored(self) -> Self { Self { yaw: -self.yaw, pitch: self.pitch, diff --git a/crates/types/src/joints/leg.rs b/crates/types/src/joints/leg.rs index 6bd8e3a..eb6db7b 100644 --- a/crates/types/src/joints/leg.rs +++ b/crates/types/src/joints/leg.rs @@ -6,6 +6,8 @@ use std::{ use serde::{Deserialize, Serialize}; use serialize_hierarchy::SerializeHierarchy; +use super::mirror::Mirror; + #[derive(Clone, Copy)] pub enum LegJoint { AnklePitch, @@ -146,8 +148,8 @@ impl Div> for LegJoints { } } -impl LegJoints { - pub fn mirrored(self) -> Self { +impl Mirror for LegJoints { + fn mirrored(self) -> Self { Self { hip_yaw_pitch: self.hip_yaw_pitch, hip_roll: -self.hip_roll, @@ -157,7 +159,8 @@ impl LegJoints { ankle_roll: -self.ankle_roll, } } - +} +impl LegJoints { pub fn clamp(self, min: Self, max: Self) -> Self { Self { hip_yaw_pitch: self diff --git a/crates/types/src/joints/mirror.rs b/crates/types/src/joints/mirror.rs new file mode 100644 index 0000000..1b34298 --- /dev/null +++ b/crates/types/src/joints/mirror.rs @@ -0,0 +1,3 @@ +pub trait Mirror { + fn mirrored(self) -> Self; +} diff --git a/crates/types/src/joints/mod.rs b/crates/types/src/joints/mod.rs index d92fde0..e81d247 100644 --- a/crates/types/src/joints/mod.rs +++ b/crates/types/src/joints/mod.rs @@ -2,6 +2,7 @@ pub mod arm; pub mod body; pub mod head; pub mod leg; +pub mod mirror; use std::{ array::IntoIter, @@ -19,6 +20,7 @@ use self::{ body::BodyJoints, head::{HeadJoint, HeadJoints}, leg::{LegJoint, LegJoints}, + mirror::Mirror, }; #[derive(Clone, Copy)] @@ -160,6 +162,15 @@ impl Joints { } .into_iter() } + + pub fn body(self) -> BodyJoints { + BodyJoints { + left_arm: self.left_arm, + right_arm: self.right_arm, + left_leg: self.left_leg, + right_leg: self.right_leg, + } + } } impl Index for Joints { @@ -320,8 +331,8 @@ impl Div for Joints { impl_Interpolate!(f32, Joints, PI); -impl Joints { - pub fn mirrored(self) -> Self { +impl Mirror for Joints { + fn mirrored(self) -> Self { Self { head: self.head.mirrored(), left_arm: self.right_arm.mirrored(), diff --git a/crates/types/src/lib.rs b/crates/types/src/lib.rs index a845aca..ece1f83 100644 --- a/crates/types/src/lib.rs +++ b/crates/types/src/lib.rs @@ -17,6 +17,7 @@ pub mod field_border; pub mod field_color; pub mod field_dimensions; pub mod field_marks; +pub mod filtered_game_controller_state; pub mod filtered_game_state; pub mod filtered_segments; pub mod filtered_whistle; diff --git a/crates/types/src/motion_command.rs b/crates/types/src/motion_command.rs index bbdfc0e..0cb3460 100644 --- a/crates/types/src/motion_command.rs +++ b/crates/types/src/motion_command.rs @@ -26,7 +26,6 @@ pub enum MotionCommand { }, Stand { head: HeadMotion, - is_energy_saving: bool, }, StandUp { facing: Facing, diff --git a/crates/types/src/motion_selection.rs b/crates/types/src/motion_selection.rs index cb465ac..5ddb46c 100644 --- a/crates/types/src/motion_selection.rs +++ b/crates/types/src/motion_selection.rs @@ -13,7 +13,6 @@ pub struct MotionSelection { pub enum MotionType { ArmsUpSquat, Dispatching, - EnergySavingStand, FallProtection, Initial, JumpLeft, @@ -37,7 +36,6 @@ impl Default for MotionType { pub struct MotionSafeExits { arms_up_squat: bool, dispatching: bool, - energy_saving_stand: bool, fall_protection: bool, initial: bool, jump_left: bool, @@ -56,7 +54,6 @@ impl Default for MotionSafeExits { Self { arms_up_squat: true, dispatching: false, - energy_saving_stand: true, fall_protection: true, initial: true, jump_left: false, @@ -79,7 +76,6 @@ impl Index for MotionSafeExits { match motion_type { MotionType::ArmsUpSquat => &self.arms_up_squat, MotionType::Dispatching => &self.dispatching, - MotionType::EnergySavingStand => &self.energy_saving_stand, MotionType::Initial => &self.initial, MotionType::JumpLeft => &self.jump_left, MotionType::JumpRight => &self.jump_right, @@ -100,7 +96,6 @@ impl IndexMut for MotionSafeExits { match motion_type { MotionType::ArmsUpSquat => &mut self.arms_up_squat, MotionType::Dispatching => &mut self.dispatching, - MotionType::EnergySavingStand => &mut self.energy_saving_stand, MotionType::Initial => &mut self.initial, MotionType::JumpLeft => &mut self.jump_left, MotionType::JumpRight => &mut self.jump_right, diff --git a/crates/types/src/motor_commands.rs b/crates/types/src/motor_commands.rs index 7936f4a..72f013e 100644 --- a/crates/types/src/motor_commands.rs +++ b/crates/types/src/motor_commands.rs @@ -3,7 +3,7 @@ use std::{ ops::{Add, Div, Mul, Sub}, }; -use crate::joints::{body::BodyJoints, head::HeadJoints, Joints}; +use crate::joints::{mirror::Mirror, Joints}; use serde::{Deserialize, Serialize}; use serialize_hierarchy::SerializeHierarchy; use splines::impl_Interpolate; @@ -11,34 +11,21 @@ use splines::impl_Interpolate; #[derive( Clone, Copy, Debug, Default, Deserialize, PartialEq, Eq, Serialize, SerializeHierarchy, )] -#[serialize_hierarchy(bound = "T: SerializeHierarchy + Serialize, for<'de> T: Deserialize<'de>")] -pub struct MotorCommands { - pub positions: Joints, - pub stiffnesses: Joints, -} - -impl_Interpolate!(f32, MotorCommands, PI); - -#[derive( - Clone, Copy, Debug, Default, Deserialize, PartialEq, Eq, Serialize, SerializeHierarchy, +#[serialize_hierarchy( + bound = "Joints: SerializeHierarchy + Serialize, for<'de> Joints: Deserialize<'de>" )] -#[serialize_hierarchy(bound = "T: SerializeHierarchy + Serialize, for<'de> T: Deserialize<'de>")] -pub struct HeadMotorCommands { - pub positions: HeadJoints, - pub stiffnesses: HeadJoints, +pub struct MotorCommands { + pub positions: Joints, + pub stiffnesses: Joints, } -#[derive( - Clone, Copy, Debug, Default, Deserialize, PartialEq, Eq, Serialize, SerializeHierarchy, -)] -#[serialize_hierarchy(bound = "T: SerializeHierarchy + Serialize, for<'de> T: Deserialize<'de>")] -pub struct BodyMotorCommands { - pub positions: BodyJoints, - pub stiffnesses: BodyJoints, -} +impl_Interpolate!(f32, MotorCommands>, PI); -impl MotorCommands { - pub fn mirrored(self) -> Self { +impl Mirror for MotorCommands +where + Joints: Mirror, +{ + fn mirrored(self) -> Self { Self { positions: Joints::mirrored(self.positions), stiffnesses: Joints::mirrored(self.stiffnesses), @@ -46,8 +33,11 @@ impl MotorCommands { } } -impl Mul for MotorCommands { - type Output = MotorCommands; +impl Mul for MotorCommands +where + Joints: Mul, +{ + type Output = MotorCommands; fn mul(self, right: f32) -> Self::Output { Self::Output { @@ -57,10 +47,13 @@ impl Mul for MotorCommands { } } -impl Add> for MotorCommands { - type Output = MotorCommands; +impl Add> for MotorCommands +where + Joints: Add, +{ + type Output = MotorCommands; - fn add(self, right: MotorCommands) -> Self::Output { + fn add(self, right: MotorCommands) -> Self::Output { Self::Output { positions: self.positions + right.positions, stiffnesses: self.stiffnesses + right.stiffnesses, @@ -68,10 +61,13 @@ impl Add> for MotorCommands { } } -impl Sub> for MotorCommands { - type Output = MotorCommands; +impl Sub> for MotorCommands +where + Joints: Sub, +{ + type Output = MotorCommands; - fn sub(self, right: MotorCommands) -> Self::Output { + fn sub(self, right: MotorCommands) -> Self::Output { Self::Output { positions: self.positions - right.positions, stiffnesses: self.stiffnesses - right.stiffnesses, @@ -79,8 +75,11 @@ impl Sub> for MotorCommands { } } -impl Div for MotorCommands { - type Output = MotorCommands; +impl Div for MotorCommands +where + Joints: Div, +{ + type Output = MotorCommands; fn div(self, right: f32) -> Self::Output { Self::Output { diff --git a/crates/types/src/parameters.rs b/crates/types/src/parameters.rs index e84f92e..8ac853c 100644 --- a/crates/types/src/parameters.rs +++ b/crates/types/src/parameters.rs @@ -163,6 +163,7 @@ pub struct GameStateFilterParameters { pub playing_message_delay: Duration, pub ready_message_delay: Duration, pub kick_off_grace_period: Duration, + pub tentative_finish_duration: Duration, pub distance_to_consider_ball_moved_in_kick_off: f32, pub whistle_acceptance_goal_distance: Vector2, } diff --git a/crates/types/src/world_state.rs b/crates/types/src/world_state.rs index 45e1634..ac8cad8 100644 --- a/crates/types/src/world_state.rs +++ b/crates/types/src/world_state.rs @@ -6,18 +6,16 @@ use serialize_hierarchy::SerializeHierarchy; use spl_network_messages::PlayerNumber; use crate::{ - fall_state::FallState, filtered_game_state::FilteredGameState, - game_controller_state::GameControllerState, kick_decision::KickDecision, obstacles::Obstacle, - penalty_shot_direction::PenaltyShotDirection, primary_state::PrimaryState, roles::Role, - rule_obstacles::RuleObstacle, support_foot::Side, + fall_state::FallState, filtered_game_controller_state::FilteredGameControllerState, + kick_decision::KickDecision, obstacles::Obstacle, penalty_shot_direction::PenaltyShotDirection, + primary_state::PrimaryState, roles::Role, rule_obstacles::RuleObstacle, support_foot::Side, }; #[derive(Clone, Debug, Default, Serialize, Deserialize, SerializeHierarchy)] pub struct WorldState { pub ball: Option, pub rule_ball: Option, - pub filtered_game_state: Option, - pub game_controller_state: Option, + pub filtered_game_controller_state: Option, pub obstacles: Vec, pub rule_obstacles: Vec, pub position_of_interest: Point2, diff --git a/crates/vision/Cargo.toml b/crates/vision/Cargo.toml index c0a9d88..e02c606 100644 --- a/crates/vision/Cargo.toml +++ b/crates/vision/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "vision" -version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version.workspace = true +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] approx = { workspace = true } diff --git a/crates/vision/src/line_detection.rs b/crates/vision/src/line_detection.rs index 5f717f1..de49205 100644 --- a/crates/vision/src/line_detection.rs +++ b/crates/vision/src/line_detection.rs @@ -38,8 +38,8 @@ pub struct CycleContext { gradient_alignment: Parameter, maximum_distance_to_robot: Parameter, - maximum_fit_distance_in_pixels: - Parameter, + maximum_fit_distance_in_ground: + Parameter, maximum_gap_on_line: Parameter, maximum_number_of_lines: Parameter, @@ -77,7 +77,10 @@ impl LineDetection { *context.gradient_alignment, ); if context.lines_in_image.is_subscribed() { - image_lines.points = line_points.clone(); + image_lines.points = line_points + .iter() + .map(|point| context.camera_matrix.ground_to_pixel(*point).unwrap()) + .collect(); } let mut ransac = Ransac::new(line_points); let mut lines_in_robot = Vec::new(); @@ -88,7 +91,7 @@ impl LineDetection { let RansacResult { line: ransac_line, used_points, - } = ransac.next_line(20, *context.maximum_fit_distance_in_pixels); + } = ransac.next_line(20, *context.maximum_fit_distance_in_ground); let ransac_line = ransac_line.expect("Insufficient number of line points. Cannot fit line."); if used_points.len() < *context.minimum_number_of_points_on_line { @@ -123,36 +126,16 @@ impl LineDetection { .push((ransac_line, LineDiscardReason::TooFewPoints)); continue; } - let (start_point_in_image, start_point_in_robot) = - match points_with_projection_onto_line.iter().copied().find_map( - |(point, projected_point)| { - Some(( - point, - context - .camera_matrix - .pixel_to_ground(projected_point) - .ok()?, - )) - }, - ) { - Some(start) => start, - None => break, - }; - let (end_point_in_image, end_point_in_robot) = match points_with_projection_onto_line - .iter() - .copied() - .rev() - .find_map(|(point, projected_point)| { - Some(( - point, - context - .camera_matrix - .pixel_to_ground(projected_point) - .ok()?, - )) - }) { - Some(end) => end, - None => break, + + let Some((start_point_in_image, start_point_in_robot)) = + points_with_projection_onto_line.first().copied() + else { + break; + }; + let Some((end_point_in_image, end_point_in_robot)) = + points_with_projection_onto_line.last().copied() + else { + break; }; let line_in_robot = Line(start_point_in_robot, end_point_in_robot); @@ -195,7 +178,20 @@ impl LineDetection { lines_in_robot, used_vertical_filtered_segments, }; - context.lines_in_image.fill_if_subscribed(|| image_lines); + + context.lines_in_image.fill_if_subscribed(|| { + for line in image_lines.lines.iter_mut().chain( + image_lines + .discarded_lines + .iter_mut() + .map(|line| &mut line.0), + ) { + line.0 = context.camera_matrix.ground_to_pixel(line.0).unwrap(); + line.1 = context.camera_matrix.ground_to_pixel(line.1).unwrap(); + } + image_lines + }); + Ok(MainOutputs { line_data: Some(line_data).into(), }) @@ -271,12 +267,14 @@ fn filter_segments_for_lines( } }) }) - .map(|(scan_line_position, segment)| { + .filter_map(|(scan_line_position, segment)| { let center = (segment.start + segment.end) as f32 / 2.0; - ( - point![scan_line_position as f32, center], + Some(( + camera_matrix + .pixel_to_ground(point![scan_line_position as f32, center]) + .ok()?, point![scan_line_position, segment.start], - ) + )) }) .unzip(); (line_points, used_vertical_filtered_segments) diff --git a/docs/robotics/overview.md b/docs/robotics/overview.md index 4c7f7ce..d4792ee 100644 --- a/docs/robotics/overview.md +++ b/docs/robotics/overview.md @@ -1,5 +1,21 @@ # Overview +Currently there are 5 different [threads](https://en.wikipedia.org/wiki/Thread_(computing)), termed [cyclers](../framework/cyclers.md) in hulks terminology + +- `Control` +- `VisionTop` +- `VisionBottom` +- `Audio` +- `SPLNetwork` + +#### `Control` + +#### `VisionTop/Bottom` + +#### `Audio` + +#### `SPLNetwork` + TODO: Elaborate ## Perception diff --git a/docs/setup/git_setup.md b/docs/setup/git_setup.md new file mode 100644 index 0000000..abf6f4f --- /dev/null +++ b/docs/setup/git_setup.md @@ -0,0 +1,17 @@ +# Github Setup + +If you haven't set up git before, follow this guide. + +## Configuring Username and Email + +The first thing you should do when you install Git is to set your user name and email address. This is important because every Git commit uses this information, and it’s immutably baked into the commits you start creating: + +``` +git config --global user.name "" +git config --global user.email + +``` + +## Creating and adding a SSH-Key + +You can access and write data in repositories on GitHub.com using SSH (Secure Shell Protocol). When you connect via SSH, you authenticate using a private key file on your local machine. You can follow this [guide](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent) to generate and add a key to GitHub. If you already have a key, you can skip the part about generating a new one, and simply add your existing key to GitHub. diff --git a/docs/workflow/getting_started.md b/docs/workflow/getting_started.md new file mode 100644 index 0000000..239d40f --- /dev/null +++ b/docs/workflow/getting_started.md @@ -0,0 +1,70 @@ +# Getting Started Programming at HULKs + +Please follow the instructions given in [Setup](../setup/overview.md) to setup [`rust`](../setup/main_setup.md) on your machine. +The tool used for compiling, uploading or changing the robot state otherwise is called [`pepsi`](../tooling/pepsi.md). +Another tool often used to debug on the robot is called [`twix`](../tooling/twix.md). With `twix` you can connect to a robot and inspect the output of [nodes](../framework/nodes.md). +## Starting Development +### Setting up `git` +Head into your webbrowser and **fork** the repository. This will add a copy of the hulks repository under your user. All development should happen on your personal fork of the project and should be brought into the hulks repository only using pull requests. +When you have created a fork, head into the cloned hulks repository. When typing +```bash +git remote -v +``` +all your currently configured remotes will be shown. +``` +origin git@github.com:HULKs/hulk.git (fetch) +origin git@github.com:HULKs/hulk.git (push) +``` +You can add your fork as a remote by running +``` +git remote add +``` +and substituting `` with a suitable name for your fork and fork link with the link of your git repo. +If you list your remotes again, it should now look similar to this: +```bash +origin git@github.com:HULKs/hulk.git (fetch) +origin git@github.com:HULKs/hulk.git (push) +okiwi6 git@github.com:okiwi6/hulk.git (fetch) +okiwi6 git@github.com:okiwi6/hulk.git (push) +``` +Of course instead of `okiwi6`, your name should appear there 😉. +If you like, you can rename the `origin` remote to something more descriptive, for example `git remote rename origin hulk` to name it hulk. + +### Creating a branch +When running `git status`, you'll most likely see that you are on the `main` branch of the repository. +```bash +On branch main +Your branch is up to date with 'origin/main'. + +nothing to commit, working tree clean +``` +To create a new feature branch, run `git switch -c `. +Here you can start developing your feature. + +### Developing +For a overview of the current robotics code, check out this [overview](../robotics/overview.md). If you don't have a task already, have a look at our [development board](https://github.com/orgs/HULKs/projects/2) or ask one of our Dev-Leads. +An introduction to how our project management works, can be found [here](./development.md) + +### Commiting +Commiting is a crucial git action, that allows to set "checkpoints" of your work. It is possible to jump between different commits or include them in other branches. Therefore it is important that you commit frequently. Optimally the code should be in a compilable state whenever you commit. +In order to commit, you first have to add your changes to the staging area. This can be done easily in Visual Studio Code using the `Source Control` side bar and hitting `+` on the correct files. Alternatively, you can run `git status` in the hulks repository to see all changes. Then you can add files manually using the `git add ` command. To commit all changes listed in your staging area, in Visual Studio Code you can use the `Source Control` panel again. Create a suitable commit message and then hit the green commit button. In the terminal the equivalent action is `git commit`, which will open a text editor for your commit message (Alternatively, run `git commit -m""`) to avoid entering a text editor). Commit messages should be short and descriptive. +You can inspect your commit history by running `git log --oneline`, this will produce something similar to this +```bash +b356357ba Add nixgl as dependency +4de357b34 Add nix development shell via flake +bb072fd4b Add approx_derive +9951fcd6c Update hula lock file +73449edd0 Add non-workspace lock files to check +... +``` + +### Pushing +To push to your remote, run `git push `. You can also configure remotes of other team mates and push to their fork, given they add you as a collaborator with write access to their fork. + +### Creating a Pull Request +Head to the [Hulks Repository Pull Requests section](https://github.com/HULKs/hulk/pulls). There you can click `New pull request`, then click `compare across forks`. +Select your fork and branch to merge into `hulk/main`. +Then fill out the given markdown template. Please be as descriptive as possible, since other people need to understand what you did. By adding a issue number behind the `Fixes #` line, you can automatically link an issue that gets closed when your PR is merged. +Then create the pull request. +After that assign corresponding labels and select the `Development` Project and `Request for Review`. +After creating your PR, our [CI]() will start running. If it generates findings, you need to fix the issues on your branch and push again. \ No newline at end of file diff --git a/etc/parameters/default.json b/etc/parameters/default.json index b473c7c..77904d4 100644 --- a/etc/parameters/default.json +++ b/etc/parameters/default.json @@ -98,8 +98,8 @@ "check_edge_gradient": false, "gradient_alignment": -0.95, "maximum_distance_to_robot": 6.0, - "maximum_fit_distance_in_pixels": 3.0, - "maximum_gap_on_line": 30.0, + "maximum_fit_distance_in_ground": 0.05, + "maximum_gap_on_line": 0.5, "maximum_number_of_lines": 10, "maximum_projected_segment_length": 0.3, "minimum_number_of_points_on_line": 5 @@ -115,8 +115,8 @@ "check_edge_gradient": false, "gradient_alignment": -0.95, "maximum_distance_to_robot": 6.0, - "maximum_fit_distance_in_pixels": 3.0, - "maximum_gap_on_line": 30.0, + "maximum_fit_distance_in_ground": 0.05, + "maximum_gap_on_line": 0.5, "maximum_number_of_lines": 10, "maximum_projected_segment_length": 0.3, "minimum_number_of_points_on_line": 4 @@ -258,49 +258,6 @@ "minimum_samples_per_cluster": 3 } }, - "energy_saving_stand": { - "enabled": false, - "arm_stiffness": 0.1, - "leg_stiffness": 0.5, - "pose": { - "head": { - "yaw": 0.0, - "pitch": 0.0 - }, - "left_arm": { - "shoulder_pitch": 1.57, - "shoulder_roll": 0.0, - "elbow_yaw": 0.0, - "elbow_roll": 0.0, - "wrist_yaw": -1.57, - "hand": 0.0 - }, - "right_arm": { - "shoulder_pitch": 1.57, - "shoulder_roll": 0.0, - "elbow_yaw": 0.0, - "elbow_roll": 0.0, - "wrist_yaw": 1.57, - "hand": 0.0 - }, - "left_leg": { - "hip_yaw_pitch": 0.0, - "hip_roll": 0.0, - "hip_pitch": -0.0872, - "knee_pitch": 0.0, - "ankle_pitch": 0.0, - "ankle_roll": 0.0 - }, - "right_leg": { - "hip_yaw_pitch": 0.0, - "hip_roll": 0.0, - "hip_pitch": -0.0872, - "knee_pitch": 0.0, - "ankle_pitch": 0.0, - "ankle_roll": 0.0 - } - } - }, "fall_protection": { "ground_impact_angular_threshold": 0.9, "ground_impact_body_stiffness": 0.2, @@ -945,6 +902,10 @@ "nanos": 0, "secs": 15 }, + "tentative_finish_duration": { + "nanos": 0, + "secs": 4 + }, "distance_to_consider_ball_moved_in_kick_off": 0.2, "whistle_acceptance_goal_distance": [0.5, 0.5] }, @@ -1163,5 +1124,6 @@ "knee_pitch": 0.0 } }, - "angular_velocity_smoothing_factor": 0.1 + "angular_velocity_smoothing_factor": 0.1, + "center_circle_obstacle_increase": 1.2 } diff --git a/etc/parameters/head.P0000074A06S9A900031.json b/etc/parameters/head.P0000074A06S9A900031.json index f2d98ea..24f4451 100644 --- a/etc/parameters/head.P0000074A06S9A900031.json +++ b/etc/parameters/head.P0000074A06S9A900031.json @@ -15,4 +15,4 @@ ] } } -} +} \ No newline at end of file diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..db4e862 --- /dev/null +++ b/flake.lock @@ -0,0 +1,111 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1694529238, + "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1659877975, + "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixgl": { + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1685908677, + "narHash": "sha256-E4zUPEUFyVWjVm45zICaHRpfGepfkE9Z2OECV9HXfA4=", + "owner": "guibou", + "repo": "nixGL", + "rev": "489d6b095ab9d289fe11af0219a9ff00fe87c7c5", + "type": "github" + }, + "original": { + "owner": "guibou", + "repo": "nixGL", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1660551188, + "narHash": "sha256-a1LARMMYQ8DPx1BgoI/UN4bXe12hhZkCNqdxNi6uS0g=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "441dc5d512153039f19ef198e662e4f3dbb9fd65", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1701068326, + "narHash": "sha256-vmMceA+q6hG1yrjb+MP8T0YFDQIrW3bl45e7z24IEts=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8cfef6986adfb599ba379ae53c9f5631ecd2fd9c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixgl": "nixgl", + "nixpkgs": "nixpkgs_2" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..c7232f4 --- /dev/null +++ b/flake.nix @@ -0,0 +1,81 @@ +{ + description = "Dev environment for HULKs"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + nixgl.url = "github:guibou/nixGL"; + }; + + outputs = { self, nixpkgs, flake-utils, nixgl }: + flake-utils.lib.eachDefaultSystem + (system: + let + pkgs = import nixpkgs { + inherit system; + overlays = [ nixgl.overlay ]; + }; + + nao_sdk_version = "5.9.0"; + nao_sdk_environment_path = "$HOME/.naosdk/${nao_sdk_version}/environment-setup-corei7-64-aldebaran-linux"; + in + { + devShells = { + tools = pkgs.mkShell + rec { + buildInputs = with pkgs;[ + # Tools + cargo + rustc + rustfmt + cmake + pkg-config + llvmPackages.clang + python312 + rsync + + # Libs + luajit + systemdLibs + hdf5 + alsa-lib + opusfile + libogg + libGL + libxkbcommon + wayland + xorg.libX11 + xorg.libXcursor + xorg.libXi + xorg.libXrandr + pkgs.nixgl.auto.nixGLDefault + rustPlatform.bindgenHook + openssl + ]; + env = { + LD_LIBRARY_PATH = "${pkgs.lib.makeLibraryPath buildInputs}"; + LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib"; + }; + }; + + + robot = (pkgs.buildFHSUserEnv { + name = "hulk-robot-dev-env"; + targetPkgs = pkgs: ([]); + extraOutputsToInstall = [ "dev" ]; + runScript = "bash"; + profile = '' + if [[ ! -f "${nao_sdk_environment_path}" ]]; then + echo "WARNING: nao sdk v${nao_sdk_version} not found! Please install it." + exit 1 + fi + echo "Unsetting LD_LIBRARY_PATH..." + unset LD_LIBRARY_PATH + echo "Sourcing nao sdk v${nao_sdk_version}..." + source ${nao_sdk_environment_path} + ''; + }).env; + }; + } + ); +} diff --git a/mkdocs.yml b/mkdocs.yml index b2f7269..daca581 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -29,6 +29,7 @@ nav: - Main Setup & Webots: setup/main_setup.md - NAO Image & SDK: setup/nao_image_and_sdk.md - NAO Setup: setup/nao_setup.md + - Git Setup: setup/git_setup.md - Framework: - Overview: framework/overview.md - Directory Structure: framework/directory_structure.md @@ -78,6 +79,7 @@ nav: - Miscellaneous: - Create URDF and PROTO for NAOv6: robotics/miscellaneous/create_urdf.md - Workflow: + - Getting Started: workflow/getting_started.md - Overview: workflow/overview.md - Competition: workflow/competition.md - Development: workflow/development.md diff --git a/tests/behavior/demonstration.lua b/tests/behavior/demonstration.lua index 5a6ebd9..99b3746 100644 --- a/tests/behavior/demonstration.lua +++ b/tests/behavior/demonstration.lua @@ -32,7 +32,8 @@ function on_cycle() if state.cycle_count == 1000 then state.filtered_game_state = { Playing = { - ball_is_free = true + ball_is_free = true, + kick_off = false } } end diff --git a/tests/behavior/golden_goal.lua b/tests/behavior/golden_goal.lua index 67f1462..4149d5e 100644 --- a/tests/behavior/golden_goal.lua +++ b/tests/behavior/golden_goal.lua @@ -38,7 +38,7 @@ function on_cycle() state.game_controller_state.game_state = "Ready" state.filtered_game_state = { Ready = { - kicking_team = "Hulks" + kicking_team = "Hulks", } } end @@ -51,7 +51,8 @@ function on_cycle() if state.cycle_count == 1700 then state.filtered_game_state = { Playing = { - ball_is_free = true + ball_is_free = true, + kick_off = true } } end diff --git a/tools/aliveness/Cargo.lock b/tools/aliveness/Cargo.lock index 5ef108c..2d0b94b 100644 --- a/tools/aliveness/Cargo.lock +++ b/tools/aliveness/Cargo.lock @@ -328,6 +328,11 @@ dependencies = [ [[package]] name = "constants" version = "0.1.0" +dependencies = [ + "lazy_static", + "serde", + "serde_json", +] [[package]] name = "cpufeatures" diff --git a/tools/annotato/Cargo.toml b/tools/annotato/Cargo.toml new file mode 100644 index 0000000..d5d3bf5 --- /dev/null +++ b/tools/annotato/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "annotato" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +clap = { workspace = true} +color-eyre = { workspace = true} +eframe = { workspace = true} +egui_extras = { workspace = true} +egui_plot = { workspace = true} +glob = { workspace = true} +image = { workspace = true} +once_cell = { workspace = true} +reqwest = { workspace = true} +serde = { workspace = true} +serde_json = { workspace = true} +toml = { workspace = true } diff --git a/tools/annotato/scripts/prepare_for_labelling.py b/tools/annotato/scripts/prepare_for_labelling.py new file mode 100644 index 0000000..8e4becf --- /dev/null +++ b/tools/annotato/scripts/prepare_for_labelling.py @@ -0,0 +1,86 @@ +import argparse +import json +from pathlib import Path + +import cv2 +from PIL import Image +from tqdm import tqdm +import numpy as np +from ultralytics import YOLO +from uuid import uuid4 +from wonderwords import RandomWord + +CLASS_CONVERSION = [ + "Ball", + "Robot", + "GoalPost", + "PenaltySpot", +] + + +def generate_random_chunk_name(): + rng = RandomWord() + + adjective = rng.word(include_categories=[ + "adjective"], regex="[a-zA-Z]+").lower() + noun = rng.word(include_categories=["noun"], regex="[a-zA-Z]+").lower() + + return f"{adjective}-{noun}" + + +def main(args): + image_paths = Path(args.image_folder).glob("*.png") + if len(image_paths) == 0: + raise RuntimeError("No images found in the image folder") + + yolo_model = None + if args.yolo: + yolo_model = YOLO(args.yolo) + + number_of_chunks = len(image_paths) // int(args.chunksize) + + output_path = Path("output") + + for chunk in tqdm(np.array_split(image_paths, number_of_chunks)): + # create labelling folder + chunk_annotations = {} + chunk_name = generate_random_chunk_name() + + images_path = output_path.joinpath(chunk_name, "images") + images_path.mkdir(parents=True, exist_ok=False) + + for image_path in chunk: + image = cv2.imread(str(image_path)) + if args.convert_colors: + image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + image = cv2.cvtColor(image, cv2.COLOR_YCrCb2RGB) + + if yolo_model: + detection = yolo_model(image, verbose=False) + + chunk_annotations[image_name] = [ + { + "class": CLASS_CONVERSION[int(box.cls)], + "points": box.xyxy.reshape(2, 2).tolist(), + } + for box in detection[0].boxes + ] + + image_name = str(uuid4()) + ".png" + cv2.imwrite(str(images_path.joinpath(image_name)), image) + + with open(images_path.parent.joinpath("data.json"), 'w') as f: + json.dump(chunk_annotations, f) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--image_folder", help="the images folder") + parser.add_argument( + "--yolo", help="the yolo checkpoint used for inference", default=None) + parser.add_argument( + "--chunksize", help="the chunksize of one labelling task", default=200) + parser.add_argument("--convert-colors", + help="whether to convert ycbcr to rgb", default=True) + + main(parser.parse_args()) diff --git a/tools/annotato/src/ai_assistant.rs b/tools/annotato/src/ai_assistant.rs new file mode 100644 index 0000000..73a67bf --- /dev/null +++ b/tools/annotato/src/ai_assistant.rs @@ -0,0 +1,34 @@ +use std::{collections::HashMap, fs, path::Path}; + +use color_eyre::{eyre::Context, Result}; +use serde::{Deserialize, Serialize}; + +use crate::{annotation::AnnotationFormat, boundingbox::BoundingBox}; + +#[derive(Serialize, Deserialize)] +pub struct ModelAnnotations { + #[serde(flatten)] + images: HashMap>, +} + +impl ModelAnnotations { + pub fn try_new(path: impl AsRef) -> Result { + let file_content = fs::read_to_string(&path) + .wrap_err_with(|| format!("failed to find {}", path.as_ref().display()))?; + + Ok(Self { + images: serde_json::from_str(&file_content) + .wrap_err_with(|| format!("failed to parse {}", path.as_ref().display()))?, + }) + } + + pub fn for_image(&self, image_name: &String) -> Option> { + Some( + self.images + .get(image_name)? + .iter() + .map(|annotation| annotation.clone().into()) + .collect(), + ) + } +} diff --git a/tools/annotato/src/annotation.rs b/tools/annotato/src/annotation.rs new file mode 100644 index 0000000..3ceee92 --- /dev/null +++ b/tools/annotato/src/annotation.rs @@ -0,0 +1,37 @@ +use eframe::epaint::Pos2; +use egui_plot::PlotPoint; +use serde::{Deserialize, Serialize}; + +use crate::{boundingbox::BoundingBox, classes::Class}; + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct AnnotationFormat { + points: [[f32; 2]; 2], + class: Class, +} + +impl From for BoundingBox { + fn from(value: AnnotationFormat) -> Self { + let [[min_x, min_y], [max_x, max_y]] = value.points; + let class = value.class; + + Self { + corner: PlotPoint::new(min_x as f64, 480. - max_y as f64), + opposing_corner: PlotPoint::new(max_x as f64, 480. - min_y as f64), + class, + } + } +} + +impl From for AnnotationFormat { + fn from(value: BoundingBox) -> Self { + let rect = value.rect(); + let Pos2 { x: x1, y: y1 } = rect.left_top(); + let Pos2 { x: x2, y: y2 } = rect.right_bottom(); + + Self { + points: [[x1, 480. - y2], [x2, 480. - y1]], + class: value.class, + } + } +} diff --git a/tools/annotato/src/annotator_app.rs b/tools/annotato/src/annotator_app.rs new file mode 100644 index 0000000..e9f3432 --- /dev/null +++ b/tools/annotato/src/annotator_app.rs @@ -0,0 +1,284 @@ +use std::{ + collections::VecDeque, + path::{Path, PathBuf}, +}; + +use crate::{ + ai_assistant::ModelAnnotations, label_widget::LabelWidget, paths::Paths, user_toml::CONFIG, + widgets::image_list::ImageList, +}; +use color_eyre::{eyre::Context as C, Result}; +use eframe::{ + egui::{CentralPanel, Context, RichText, SidePanel, TextStyle}, + App, CreationContext, +}; +use glob::glob; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum AnnotationPhase { + Started, + Labelling { current_index: usize }, + Finished, +} + +pub struct AnnotatorApp { + phase: AnnotationPhase, + paths: VecDeque, + label_widget: LabelWidget, + model_annotations: ModelAnnotations, +} + +impl AnnotatorApp { + fn convert_image_to_label_path(image_path: &Path) -> PathBuf { + image_path.with_extension("json") + } + + pub fn try_new( + _: &CreationContext, + image_folder: impl AsRef, + annotation_json_path: impl AsRef, + skip_introduction: bool, + ) -> Result { + let image_paths = glob( + &image_folder + .as_ref() + .to_path_buf() + .join("*.png") + .display() + .to_string(), + )? + .collect::, _>>()?; + + let model_annotations = ModelAnnotations::try_new(annotation_json_path)?; + + let paths = image_paths + .into_iter() + .map(|image_path| { + let label_path = Self::convert_image_to_label_path(&image_path); + Ok(Paths::new(image_path, label_path)) + }) + .collect::>>() + .expect("failed to build paths"); + + let phase = if skip_introduction { + AnnotationPhase::Labelling { current_index: 0 } + } else { + AnnotationPhase::Started + }; + + Ok(AnnotatorApp { + phase, + paths, + label_widget: LabelWidget::default(), + model_annotations, + }) + } + + fn next(&mut self) -> Result<()> { + self.phase = match self.phase { + AnnotationPhase::Started => AnnotationPhase::Labelling { current_index: 0 }, + AnnotationPhase::Labelling { current_index } => { + self.label_widget + .save_annotation() + .wrap_err("failed to go to next image")?; + + let new_index = current_index + 1; + if new_index < self.paths.len() { + AnnotationPhase::Labelling { + current_index: new_index, + } + } else { + AnnotationPhase::Finished + } + } + AnnotationPhase::Finished => AnnotationPhase::Finished, + }; + + Ok(()) + } + + fn previous(&mut self) -> Result<()> { + self.phase = match self.phase { + AnnotationPhase::Started => AnnotationPhase::Started, + AnnotationPhase::Labelling { current_index } => { + self.label_widget + .save_annotation() + .wrap_err("failed to go to previous image")?; + + if current_index > 0 { + let new_index = current_index - 1; + AnnotationPhase::Labelling { + current_index: new_index, + } + } else { + AnnotationPhase::Started + } + } + AnnotationPhase::Finished => { + let new_index = self.paths.len() - 1; + AnnotationPhase::Labelling { + current_index: new_index, + } + } + }; + + Ok(()) + } + + fn load_image(&mut self) -> Result<()> { + let index = match self.phase { + AnnotationPhase::Started => 0, + AnnotationPhase::Labelling { current_index } => current_index, + AnnotationPhase::Finished => self.paths.len() - 1, + }; + + if let Some(paths) = self.paths.get_mut(index) { + if self.label_widget.has_paths(paths) { + return Ok(()); + } + // get file name of the path as a string + let annotations = self + .model_annotations + .for_image( + &paths + .image_path + .file_name() + .unwrap() + .to_str() + .unwrap() + .to_string(), + ) + .unwrap_or_default(); + + self.label_widget + .load_new_image_with_labels(paths.clone(), annotations)?; + } + + self.paths.iter_mut().for_each(|paths| { + paths.check_existence(); + }); + + Ok(()) + } + + fn show_phase_started(&mut self, ctx: &Context) { + CentralPanel::default().show(ctx, |ui| { + ui.vertical_centered(|ui| { + ui.add_space(200.0); + ui.label(RichText::new("Annotato-rs").size(32.0).strong()); + let number_unlabelled_images = self + .paths + .iter() + .filter(|paths| !paths.label_present) + .count(); + ui.label(format!( + "You are about to label {number_unlabelled_images} images." + )); + ui.add_space(100.0); + + ui.label(RichText::new("Labelling Instructions").text_style(TextStyle::Heading)); + ui.add_space(50.0); + ui.vertical_centered(|ui| { + ui.label(RichText::new( + r#" + • select a class with a number key + • start drawing a box with 'b' key + • end drawing a box with 'b' key + • delete a box by hovering and rightclicking + • move in the image with left click dragging + • zoom in the image ctrl + mousewheel + • proceed to the next image with 'n' key + "#, + )); + }); + + ui.add_space(50.0); + if ui.button("Start Labelling").clicked() { + self.next().expect("failed to start labelling") + } + }); + }); + } + + fn show_phase_labelling(&mut self, ctx: &Context) { + CentralPanel::default().show(ctx, |ui| { + self.load_image().expect("failed to update image"); + self.label_widget.ui(ui); + }); + } + + fn show_phase_finished(&mut self, ctx: &Context) { + CentralPanel::default().show(ctx, |ui| { + ui.centered_and_justified(|ui| { + ui.label("You finished the data chunk, take the next and go on :)") + }) + }); + } +} + +impl App for AnnotatorApp { + fn update(&mut self, ctx: &Context, _frame: &mut eframe::Frame) { + egui_extras::install_image_loaders(ctx); + + let width = ctx.screen_rect().x_range().span(); + SidePanel::left("image-path-list") + .default_width(0.3 * width) + .show(ctx, |ui| { + let mut current_phase = self.phase.clone(); + ui.add(ImageList::new(&self.paths, &mut current_phase)); + + if current_phase != self.phase { + if let AnnotationPhase::Labelling { .. } = self.phase { + self.label_widget + .save_annotation() + .expect("failed to save annotation"); + } + self.phase = current_phase; + } + + ui.vertical_centered(|ui| { + ui.horizontal(|ui| { + let config = CONFIG.get().unwrap(); + if ui + .button("<") + .on_hover_text("Previous image (p, <)") + .clicked() + || ui.input(|i| config.keybindings.previous.is_pressed(i)) + { + self.previous().expect("failed to load previous image"); + } + if ui.button(">").on_hover_text("Next image (n, >)").clicked() + || ui.input(|i| config.keybindings.next.is_pressed(i)) + { + self.next().expect("failed to load next image"); + } + if ui + .button(">>") + .on_hover_text("Go to the first unlabelled image") + .clicked() + { + if let Some((unlabelled_index, _)) = self + .paths + .iter() + .enumerate() + .find(|(_, paths)| !paths.label_present) + { + self.phase = AnnotationPhase::Labelling { + current_index: unlabelled_index, + }; + } else { + // no more unlabelled images + self.phase = AnnotationPhase::Finished; + } + } + }) + }) + }); + + match self.phase { + AnnotationPhase::Started => self.show_phase_started(ctx), + AnnotationPhase::Labelling { .. } => self.show_phase_labelling(ctx), + AnnotationPhase::Finished => self.show_phase_finished(ctx), + } + } +} diff --git a/tools/annotato/src/boundingbox.rs b/tools/annotato/src/boundingbox.rs new file mode 100644 index 0000000..4088b55 --- /dev/null +++ b/tools/annotato/src/boundingbox.rs @@ -0,0 +1,164 @@ +use eframe::epaint::{Pos2, Rect}; +use egui_plot::{PlotPoint, PlotPoints, Polygon}; + +use crate::classes::Class; + +#[derive(Debug, Clone)] +pub struct BoundingBox { + pub corner: PlotPoint, + pub opposing_corner: PlotPoint, + pub class: Class, +} + +impl From<&BoundingBox> for Polygon { + fn from(value: &BoundingBox) -> Self { + let x1 = value.corner.x; + let y1 = value.corner.y; + let x2 = value.opposing_corner.x; + let y2 = value.opposing_corner.y; + let plotpoints = PlotPoints::new(vec![[x1, y1], [x1, y2], [x2, y2], [x2, y1]]); + Polygon::new(plotpoints) + } +} + +impl BoundingBox { + pub fn new(corner: PlotPoint, opposing_corner: PlotPoint, class: Class) -> Self { + BoundingBox { + corner, + opposing_corner, + class, + } + } + + pub fn set_opposing_corner(&mut self, plot_bottom_right: PlotPoint) { + self.opposing_corner = plot_bottom_right; + } + + pub fn rect(&self) -> Rect { + let to_pos2 = |point: PlotPoint| Pos2::new(point.x as f32, point.y as f32); + Rect::from_points(&[to_pos2(self.corner), to_pos2(self.opposing_corner)]) + } + + pub fn top_left(&self) -> PlotPoint { + let x1 = self.corner.x; + let y1 = self.corner.y; + let x2 = self.opposing_corner.x; + let y2 = self.opposing_corner.y; + + PlotPoint::new(x1.min(x2), y1.max(y2)) + } + + pub fn contains(&self, mouse_position: PlotPoint) -> bool { + let x1 = self.corner.x; + let y1 = self.corner.y; + let x2 = self.opposing_corner.x; + let y2 = self.opposing_corner.y; + + (x1.min(x2)..=x1.max(x2)).contains(&mouse_position.x) + && (y1.min(y2)..=y1.max(y2)).contains(&mouse_position.y) + } + + pub fn clip_to_image(&mut self) { + let x1 = self.corner.x; + let y1 = self.corner.y; + let x2 = self.opposing_corner.x; + let y2 = self.opposing_corner.y; + + self.corner = PlotPoint::new(x1.clamp(0., 640.), y1.clamp(0., 480.)); + self.opposing_corner = PlotPoint::new(x2.clamp(0., 640.), y2.clamp(0., 480.)); + } + + pub fn is_valid(&self) -> bool { + let rect = self.rect(); + rect.area() >= 4.0 + } + + pub fn iou(&self, other: &BoundingBox) -> f32 { + let this_rect = self.rect(); + let other_rect = other.rect(); + + let intersection = this_rect.intersect(other_rect).area(); + let union = this_rect.area() + other_rect.area() - intersection; + + intersection / union + } + + fn closest_and_furthest_corner(&self, position: PlotPoint) -> (PlotPoint, PlotPoint) { + let rect = self.rect(); + let position = Pos2::new(position.x as f32, position.y as f32); + + let corners = [ + rect.left_bottom(), + rect.left_top(), + rect.right_top(), + rect.right_bottom(), + ]; + let closest = corners + .iter() + .min_by(|corner1, corner2| { + corner1 + .distance_sq(position) + .total_cmp(&corner2.distance_sq(position)) + }) + .unwrap(); + let furthest = corners + .iter() + .max_by(|corner1, corner2| { + corner1 + .distance_sq(position) + .total_cmp(&corner2.distance_sq(position)) + }) + .unwrap(); + + ( + PlotPoint::new(closest.x as f64, closest.y as f64), + PlotPoint::new(furthest.x as f64, furthest.y as f64), + ) + } + + pub fn get_closest_corner(&self, position: PlotPoint) -> PlotPoint { + self.closest_and_furthest_corner(position).0 + } + + pub fn closest_corner_distance_sq(&self, position: PlotPoint) -> f32 { + let closest = self.get_closest_corner(position); + closest.to_pos2().distance_sq(position.to_pos2()) + } + + pub fn has_corner_at(&self, position: PlotPoint) -> bool { + let closest = self.get_closest_corner(position); + let closest = Pos2::new(closest.x as f32, closest.y as f32); + let position = Pos2::new(position.x as f32, position.y as f32); + + closest.distance(position) < 5.0 + } + + pub fn prepare_for_corner_move(&mut self, position: PlotPoint) { + let (closest, furthest) = self.closest_and_furthest_corner(position); + self.corner = furthest; + self.opposing_corner = closest; + } + + pub fn to_annotation(&self) -> (Class, [f32; 4]) { + let rect = self.rect(); + let Pos2 { x: min_x, y: min_y } = rect.left_top(); + let Pos2 { x: max_x, y: max_y } = rect.right_bottom(); + + ( + self.class, + [ + min_x / 640., + (480. - max_y) / 480., + max_x / 640., + (480. - min_y) / 480., + ], + ) + } + + pub fn from_annotation((class, [min_x, min_y, max_x, max_y]): (Class, [f32; 4])) -> Self { + let corner = PlotPoint::new(min_x * 640., (1.0 - max_y) * 480.); + let opposing_corner = PlotPoint::new(max_x * 640., (1. - min_y) * 480.); + + Self::new(corner, opposing_corner, class) + } +} diff --git a/tools/annotato/src/classes.rs b/tools/annotato/src/classes.rs new file mode 100644 index 0000000..b1c7b66 --- /dev/null +++ b/tools/annotato/src/classes.rs @@ -0,0 +1,53 @@ +use eframe::{egui::Key, epaint::Color32}; +use serde::{Deserialize, Serialize}; + +use crate::{user_toml::CONFIG, widgets::class_selector::EnumIter}; + +#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Hash)] +pub enum Class { + Ball, + Robot, + GoalPost, + PenaltySpot, + LSpot, + TSpot, + XSpot, +} + +impl EnumIter for Class { + fn list() -> Vec { + use Class::*; + vec![Ball, Robot, GoalPost, PenaltySpot, LSpot, TSpot, XSpot] + } +} + +impl Class { + pub fn from_key(key: Key) -> Option { + let keybindings = &CONFIG.get().unwrap().keybindings; + if key == keybindings.select_ball { + return Some(Class::Ball); + } + match key { + x if x == keybindings.select_ball => Some(Class::Ball), + x if x == keybindings.select_robot => Some(Class::Robot), + x if x == keybindings.select_goalpost => Some(Class::GoalPost), + x if x == keybindings.select_penaltyspot => Some(Class::PenaltySpot), + x if x == keybindings.select_lspot => Some(Class::LSpot), + x if x == keybindings.select_tspot => Some(Class::TSpot), + x if x == keybindings.select_xspot => Some(Class::XSpot), + _ => None, + } + } + + pub fn color(&self) -> Color32 { + match self { + Class::Robot => Color32::BLUE, + Class::Ball => Color32::LIGHT_RED, + Class::GoalPost => Color32::DARK_RED, + Class::PenaltySpot => Color32::GOLD, + Class::LSpot => Color32::BLACK, + Class::TSpot => Color32::LIGHT_GREEN, + Class::XSpot => Color32::LIGHT_BLUE, + } + } +} diff --git a/tools/annotato/src/label_widget.rs b/tools/annotato/src/label_widget.rs new file mode 100644 index 0000000..04e4ab8 --- /dev/null +++ b/tools/annotato/src/label_widget.rs @@ -0,0 +1,144 @@ +use std::{ + fs::{self, File}, + io::Write, +}; + +use crate::{ + annotation::AnnotationFormat, + boundingbox::BoundingBox, + classes::Class, + leaderboard, + paths::Paths, + utils, + widgets::{bounding_box_annotator::BoundingBoxAnnotator, class_selector::ClassSelector}, +}; +use color_eyre::eyre::{ContextCompat, Result}; +use eframe::{ + egui::Id, + epaint::{Color32, TextureHandle}, +}; + +pub struct LabelWidget { + current_paths: Option, + texture_id: Option, + selected_class: Class, + bounding_boxes: Vec, + editing_bounding_box: Option, + disable_saving: bool, + use_model_annotations: bool, +} + +impl Default for LabelWidget { + fn default() -> Self { + Self { + current_paths: None, + texture_id: None, + selected_class: Class::Robot, + bounding_boxes: Vec::new(), + editing_bounding_box: None, + disable_saving: false, + use_model_annotations: true, + } + } +} + +impl LabelWidget { + pub fn has_paths(&self, paths: &Paths) -> bool { + self.current_paths + .as_ref() + .map(|current_paths| paths.image_path == current_paths.image_path) + .unwrap_or(false) + } + + pub fn ui(&mut self, ui: &mut eframe::egui::Ui) { + if self.texture_id.is_none() { + self.texture_id.get_or_insert_with(|| { + if let Some(paths) = self.current_paths.as_ref() { + utils::load_image(ui, &paths.image_path).expect("failed to load image") + } else { + panic!("No image loaded"); + } + }); + } + + ui.vertical(|ui| { + ui.horizontal(|ui| { + if let Some(paths) = &self.current_paths { + ui.label(paths.image_path.display().to_string()); + if paths.label_present { + ui.colored_label(Color32::GREEN, "✔"); + } else { + ui.colored_label(Color32::RED, "❌"); + } + } + ui.add(ClassSelector::new( + "class-selector", + &mut self.selected_class, + )); + ui.checkbox(&mut self.disable_saving, "Disable Annotation Saving"); + ui.checkbox(&mut self.use_model_annotations, "AI-ssist"); + }); + if let Some(texture_id) = self.texture_id.clone() { + ui.add(BoundingBoxAnnotator::new( + Id::new(&texture_id).with("image-plot"), // using the texture_id as hash to reset plot on new image + texture_id.clone(), + &mut self.bounding_boxes, + &mut self.editing_bounding_box, + &mut self.selected_class, + )); + } + }); + } + + pub fn load_new_image_with_labels( + &mut self, + paths: Paths, + model_annotations: Vec, + ) -> Result<()> { + self.bounding_boxes.clear(); + + if paths.label_path.exists() { + let existing_annotations = fs::read_to_string(&paths.label_path)?; + let mut existing_annotations: Vec = + serde_json::from_str(&existing_annotations)?; + self.bounding_boxes = existing_annotations + .drain(..) + .map(|annotation| annotation.into()) + .collect(); + } else if self.use_model_annotations { + self.bounding_boxes.extend(model_annotations); + } + + self.texture_id = None; + self.current_paths = Some(paths); + + Ok(()) + } + + pub fn save_annotation(&mut self) -> Result<()> { + let paths = self + .current_paths + .as_ref() + .wrap_err("no image loaded currently")?; + + if self.disable_saving { + return Ok(()); + } + + if !paths.label_path.exists() { + leaderboard::send_score_up()?; + } + + let annotations: Vec = self + .bounding_boxes + .drain(..) + .map(|bbox| bbox.into()) + .collect(); + let annotations = serde_json::to_string_pretty(&annotations)?; + + let mut file = File::create(&paths.label_path)?; + file.write_all(annotations.as_bytes())?; + + Ok(()) + } +} diff --git a/tools/annotato/src/leaderboard.rs b/tools/annotato/src/leaderboard.rs new file mode 100644 index 0000000..ed38e09 --- /dev/null +++ b/tools/annotato/src/leaderboard.rs @@ -0,0 +1,21 @@ +use color_eyre::eyre::{ContextCompat, Result}; + +use crate::user_toml::CONFIG; + +pub fn send_score_up() -> Result<()> { + let config = CONFIG.get().wrap_err("could not find config file")?; + if !config.leaderboard.enable { + return Ok(()); + } + + std::thread::spawn(move || { + if let Err(_error) = reqwest::blocking::get(format!( + "http://{}/score/{}", + config.leaderboard.host, config.leaderboard.githubname + )) { + eprintln!("Failed to send score up"); + } + }); + + Ok(()) +} diff --git a/tools/annotato/src/main.rs b/tools/annotato/src/main.rs new file mode 100644 index 0000000..efe1ec2 --- /dev/null +++ b/tools/annotato/src/main.rs @@ -0,0 +1,121 @@ +pub mod ai_assistant; +pub mod annotation; +pub mod annotator_app; +pub mod boundingbox; +pub mod classes; +pub mod label_widget; +pub mod leaderboard; +pub mod paths; +pub mod remotedata; +pub mod rsync; +pub mod theme; +pub mod user_toml; +pub mod utils; +pub mod widgets; + +use std::{fs, path::PathBuf}; + +use annotator_app::AnnotatorApp; +use clap::{Parser, Subcommand}; +use color_eyre::eyre::{bail, Report, Result}; +use eframe::{egui::ViewportBuilder, run_native, NativeOptions}; +use remotedata::DataCommand; +use theme::{apply_theme, MOCHA}; + +use crate::user_toml::CONFIG; + +#[derive(Parser, Debug)] +#[clap(name = "annotato")] +pub struct Args { + #[command(subcommand)] + command: Command, +} + +#[derive(Subcommand, Debug)] +pub enum Command { + /// Download and upload datasets + Data { + #[command(subcommand)] + subcommand: DataCommand, + }, + /// Start labelling data, also downloads and uploads datasets automagically + Label { + /// The dataset name to be labelled + #[arg(required = true)] + dataset_name: String, + /// Skips the introduction dialog + #[arg(short, long, default_value = "false")] + skip_introduction: bool, + /// Skips downloading and uploading datasets, command will fail if dataset is not present + #[arg(short, long, default_value = "false")] + offline: bool, + }, +} + +fn start_labelling_ui( + image_folder: PathBuf, + annotation_json: PathBuf, + skip_introduction: bool, +) -> eframe::Result<()> { + let native_options = NativeOptions { + viewport: ViewportBuilder { + title: Some("annotato-rs".to_string()), + maximized: Some(true), + ..Default::default() + }, + ..Default::default() + }; + + run_native( + "annotato-rs", + native_options, + Box::new(move |cc| { + egui_extras::install_image_loaders(&cc.egui_ctx); + + let context = &cc.egui_ctx; + apply_theme(context, MOCHA); + Box::new( + AnnotatorApp::try_new(cc, image_folder, annotation_json, skip_introduction) + .expect("failed to start annotato-rs"), + ) + }), + ) +} + +fn main() -> Result<()> { + let arguments = Args::parse(); + + CONFIG + .set(toml::from_str(&fs::read_to_string("annotato.toml")?)?) + .expect("once_cell::set failed"); + + match arguments.command { + Command::Data { subcommand } => remotedata::handle(&subcommand), + Command::Label { + dataset_name, + skip_introduction, + offline, + } => { + let image_folder = PathBuf::from_iter(["current", &dataset_name, "images"].iter()); + let annotation_json = PathBuf::from_iter(["current", &dataset_name, "data.json"]); + if !image_folder.exists() { + if offline { + bail!("dataset {dataset_name} not present, but offline flag was set") + } + println!("dataset {dataset_name} not present, downloading..."); + rsync::rsync_to_local("current", &dataset_name)?; + } + start_labelling_ui(image_folder, annotation_json, skip_introduction) + .map_err(|err| Report::msg(err.to_string()))?; + + if !offline { + println!("Uploading {dataset_name}..."); + rsync::rsync_to_host("current", &dataset_name)?; + } + + Ok(()) + } + }?; + + Ok(()) +} diff --git a/tools/annotato/src/paths.rs b/tools/annotato/src/paths.rs new file mode 100644 index 0000000..e28d46a --- /dev/null +++ b/tools/annotato/src/paths.rs @@ -0,0 +1,26 @@ +use std::path::PathBuf; + +#[derive(Debug, Clone)] +pub struct Paths { + pub image_path: PathBuf, + pub label_path: PathBuf, + + pub image_present: bool, + pub label_present: bool, +} + +impl Paths { + pub fn new(image_path: PathBuf, label_path: PathBuf) -> Self { + Self { + image_present: image_path.exists(), + label_present: label_path.exists(), + image_path, + label_path, + } + } + + pub fn check_existence(&mut self) { + self.image_present = self.image_path.exists(); + self.label_present = self.label_path.exists(); + } +} diff --git a/tools/annotato/src/remotedata.rs b/tools/annotato/src/remotedata.rs new file mode 100644 index 0000000..7f97666 --- /dev/null +++ b/tools/annotato/src/remotedata.rs @@ -0,0 +1,63 @@ +use std::fs; + +use clap::Subcommand; +use color_eyre::Result; + +use crate::rsync; + +#[derive(Subcommand, Debug)] +pub enum DataCommand { + /// Prints all available remote datasets + ListRemote, + /// Prints all available local datasets and their completion + ListLocal, + /// Downloads a dataset to the local machine + ToLocal { + /// The dataset name to be downloaded + #[arg(required = true)] + dataset_name: String, + }, + /// Uploads a dataset to the remote machine including annotations + ToRemote { + #[arg(required = true)] + /// The dataset name to be uploaded + dataset_name: String, + }, +} + +pub fn handle(command: &DataCommand) -> Result<()> { + match command { + DataCommand::ListLocal => { + for dataset_path in fs::read_dir("current")?.filter_map(|x| x.ok()) { + let entries = fs::read_dir(dataset_path.path().join("images"))?; + let mut annotations = 0; + let mut images = 0; + + for entry in entries.filter_map(|x| x.ok()) { + if "json" == entry.path().extension().unwrap() { + annotations += 1; + } else if "png" == entry.path().extension().unwrap() { + images += 1; + } + } + println!( + "- {} ({annotations}/{images})", + dataset_path.file_name().as_os_str().to_str().unwrap(), + ); + } + } + DataCommand::ListRemote => { + for dataset_name in rsync::rsync_dataset_list()? { + println!("- {dataset_name}") + } + } + DataCommand::ToLocal { dataset_name } => { + rsync::rsync_to_local("current", dataset_name)?; + } + DataCommand::ToRemote { dataset_name } => { + rsync::rsync_to_host("current", dataset_name)?; + } + } + + Ok(()) +} diff --git a/tools/annotato/src/rsync.rs b/tools/annotato/src/rsync.rs new file mode 100644 index 0000000..c6fe670 --- /dev/null +++ b/tools/annotato/src/rsync.rs @@ -0,0 +1,72 @@ +use color_eyre::{ + eyre::{bail, ContextCompat}, + Result, +}; +use std::{ + path::Path, + process::{Command, Stdio}, +}; + +use crate::user_toml::CONFIG; + +fn full_dataset_path(dataset_name: &str) -> Result { + let config = CONFIG.get().wrap_err("could not find config file")?; + + Ok(format!("{}/{}", config.remote.rsync_path, dataset_name)) +} + +pub fn rsync_dataset_list() -> Result> { + let output = Command::new("rsync") + .arg(full_dataset_path("")?) + .arg("-o") + .arg("ConnectTimeout=2") + .arg("--list-only") + .output()?; + if !output.status.success() { + bail!(String::from_utf8(output.stderr)?) + } + let output = String::from_utf8(output.stdout)?; + Ok(output.lines().map(|line| line.to_owned()).collect()) +} + +pub fn rsync_to_local(local_folder: impl AsRef, dataset_name: &str) -> Result<()> { + let output = Command::new("rsync") + .arg("--timeout") + .arg("2") + .arg("--recursive") + .arg("--info=progress2") + .arg("--no-inc-recursive") + .arg("--human-readable") + .arg(full_dataset_path(dataset_name)?) + .arg(local_folder.as_ref()) + .stdout(Stdio::inherit()) + .stderr(Stdio::inherit()) + .output()?; + + if !output.status.success() { + bail!(String::from_utf8(output.stderr)?) + } + + Ok(()) +} + +pub fn rsync_to_host(local_folder: impl AsRef, dataset_name: &str) -> Result<()> { + let output = Command::new("rsync") + .arg("--timeout") + .arg("2") + .arg("--recursive") + .arg("--info=progress2") + .arg("--no-inc-recursive") + .arg("--human-readable") + .arg(local_folder.as_ref().join(dataset_name)) + .arg(full_dataset_path("")?) + .stdout(Stdio::inherit()) + .stderr(Stdio::inherit()) + .output()?; + + if !output.status.success() { + bail!(String::from_utf8(output.stderr)?) + } + + Ok(()) +} diff --git a/tools/annotato/src/theme.rs b/tools/annotato/src/theme.rs new file mode 100644 index 0000000..626672d --- /dev/null +++ b/tools/annotato/src/theme.rs @@ -0,0 +1,124 @@ +use eframe::{ + egui::{self, style, Context}, + epaint::{self, Color32}, +}; + +pub struct Theme { + pub rosewater: Color32, + pub flamingo: Color32, + pub pink: Color32, + pub mauve: Color32, + pub red: Color32, + pub maroon: Color32, + pub peach: Color32, + pub yellow: Color32, + pub green: Color32, + pub teal: Color32, + pub sky: Color32, + pub sapphire: Color32, + pub blue: Color32, + pub lavender: Color32, + pub text: Color32, + pub subtext1: Color32, + pub subtext0: Color32, + pub overlay2: Color32, + pub overlay1: Color32, + pub overlay0: Color32, + pub surface2: Color32, + pub surface1: Color32, + pub surface0: Color32, + pub base: Color32, + pub mantle: Color32, + pub crust: Color32, +} + +pub const MOCHA: Theme = Theme { + rosewater: Color32::from_rgb(245, 224, 220), + flamingo: Color32::from_rgb(242, 205, 205), + pink: Color32::from_rgb(245, 194, 231), + mauve: Color32::from_rgb(203, 166, 247), + red: Color32::from_rgb(243, 139, 168), + maroon: Color32::from_rgb(235, 160, 172), + peach: Color32::from_rgb(250, 179, 135), + yellow: Color32::from_rgb(249, 226, 175), + green: Color32::from_rgb(166, 227, 161), + teal: Color32::from_rgb(148, 226, 213), + sky: Color32::from_rgb(137, 220, 235), + sapphire: Color32::from_rgb(116, 199, 236), + blue: Color32::from_rgb(137, 180, 250), + lavender: Color32::from_rgb(180, 190, 254), + text: Color32::from_rgb(205, 214, 244), + subtext1: Color32::from_rgb(186, 194, 222), + subtext0: Color32::from_rgb(166, 173, 200), + overlay2: Color32::from_rgb(147, 153, 178), + overlay1: Color32::from_rgb(127, 132, 156), + overlay0: Color32::from_rgb(108, 112, 134), + surface2: Color32::from_rgb(88, 91, 112), + surface1: Color32::from_rgb(69, 71, 90), + surface0: Color32::from_rgb(49, 50, 68), + base: Color32::from_rgb(30, 30, 46), + mantle: Color32::from_rgb(24, 24, 37), + crust: Color32::from_rgb(17, 17, 27), +}; + +pub fn apply_theme(ctx: &Context, theme: Theme) { + let old = ctx.style().visuals.clone(); + ctx.set_visuals(egui::Visuals { + override_text_color: Some(theme.text), + hyperlink_color: theme.rosewater, + faint_bg_color: theme.surface0, + extreme_bg_color: theme.crust, + code_bg_color: theme.mantle, + warn_fg_color: theme.peach, + error_fg_color: theme.maroon, + window_fill: theme.base, + panel_fill: theme.base, + window_stroke: egui::Stroke { + color: theme.overlay1, + ..old.window_stroke + }, + widgets: style::Widgets { + noninteractive: make_widget_visual(old.widgets.noninteractive, &theme, theme.base), + inactive: make_widget_visual(old.widgets.inactive, &theme, theme.surface0), + hovered: make_widget_visual(old.widgets.hovered, &theme, theme.surface2), + active: make_widget_visual(old.widgets.active, &theme, theme.surface1), + open: make_widget_visual(old.widgets.open, &theme, theme.surface0), + }, + selection: style::Selection { + bg_fill: theme.blue.linear_multiply(0.2), + stroke: egui::Stroke { + color: theme.overlay1, + ..old.selection.stroke + }, + }, + window_shadow: epaint::Shadow { + color: theme.base, + ..old.window_shadow + }, + popup_shadow: epaint::Shadow { + color: theme.base, + ..old.popup_shadow + }, + ..old + }); +} + +fn make_widget_visual( + old: style::WidgetVisuals, + theme: &Theme, + bg_fill: egui::Color32, +) -> style::WidgetVisuals { + style::WidgetVisuals { + bg_fill, + weak_bg_fill: bg_fill, + bg_stroke: egui::Stroke { + color: theme.overlay1, + ..old.bg_stroke + }, + fg_stroke: egui::Stroke { + color: theme.text, + ..old.fg_stroke + }, + ..old + } +} diff --git a/tools/annotato/src/user_toml.rs b/tools/annotato/src/user_toml.rs new file mode 100644 index 0000000..ce73d06 --- /dev/null +++ b/tools/annotato/src/user_toml.rs @@ -0,0 +1,87 @@ +use std::net::SocketAddr; + +use eframe::egui::{InputState, Key, Modifiers}; +use once_cell::sync::OnceCell; +use serde::{Deserialize, Serialize}; + +pub static CONFIG: OnceCell = OnceCell::new(); + +#[derive(Debug, Deserialize)] +pub struct ConfigFile { + pub keybindings: KeyBindings, + pub remote: Remote, + pub leaderboard: LeaderBoard, +} + +#[derive(Debug, Deserialize)] + +pub struct KeyBindings { + pub next: KeyBind, + pub previous: KeyBind, + pub zoom: KeyBind, + pub edit: KeyBind, + pub draw: KeyBind, + pub abort: KeyBind, + + pub select_ball: Key, + pub select_robot: Key, + pub select_goalpost: Key, + pub select_penaltyspot: Key, + pub select_xspot: Key, + pub select_lspot: Key, + pub select_tspot: Key, +} + +#[derive(Debug, Deserialize)] +pub struct KeyBind { + pub primary: Key, + #[serde(default)] + pub extra: Vec, + #[serde(deserialize_with = "deserialize_modifiers", default)] + pub modifiers: Modifiers, +} + +impl KeyBind { + pub fn is_pressed(&self, input: &InputState) -> bool { + let modifiers_pressed = input.modifiers == self.modifiers; + let keys_pressed = [self.primary] + .iter() + .chain(self.extra.iter()) + .all(|&key| input.key_pressed(key)); + + modifiers_pressed && keys_pressed + } +} + +fn deserialize_modifiers<'de, D>(deserializer: D) -> Result +where + D: serde::Deserializer<'de>, +{ + let string_modifiers = Vec::::deserialize(deserializer)?; + let mut modifiers = Modifiers::default(); + for modifier in string_modifiers { + match modifier.as_str() { + "alt" => modifiers = modifiers | Modifiers::ALT, + "ctrl" => modifiers = modifiers | Modifiers::CTRL, + "shift" => modifiers = modifiers | Modifiers::SHIFT, + invalid => { + return Err(serde::de::Error::custom(format!( + "invalid modifier: {invalid}" + ))) + } + } + } + Ok(modifiers) +} + +#[derive(Debug, Deserialize)] +pub struct Remote { + pub rsync_path: String, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct LeaderBoard { + pub enable: bool, + pub githubname: String, + pub host: SocketAddr, +} diff --git a/tools/annotato/src/utils.rs b/tools/annotato/src/utils.rs new file mode 100644 index 0000000..5c5c81f --- /dev/null +++ b/tools/annotato/src/utils.rs @@ -0,0 +1,25 @@ +use std::path::{Path, PathBuf}; + +use color_eyre::Result; +use eframe::{ + egui::Ui, + epaint::{ColorImage, TextureHandle}, +}; +use image::{io::Reader, ImageError}; + +pub fn load_image_from_path(path: impl AsRef) -> Result { + let image = Reader::open(path)?.decode()?; + let size = [image.width() as _, image.height() as _]; + let image_buffer = image.to_rgba8(); + let pixels = image_buffer.as_flat_samples(); + Ok(ColorImage::from_rgba_unmultiplied(size, pixels.as_slice())) +} + +pub fn load_image(ui: &Ui, image_path: &PathBuf) -> Result { + let image = load_image_from_path(image_path)?; + let handle = ui + .ctx() + .load_texture(image_path.display().to_string(), image, Default::default()); + + Ok(handle) +} diff --git a/tools/annotato/src/widgets/bounding_box_annotator.rs b/tools/annotato/src/widgets/bounding_box_annotator.rs new file mode 100644 index 0000000..d8c525c --- /dev/null +++ b/tools/annotato/src/widgets/bounding_box_annotator.rs @@ -0,0 +1,256 @@ +use eframe::{ + egui::{Event, Id, PointerButton, Response, RichText, Ui, Widget}, + emath::{Align2, Vec2b}, + epaint::{Color32, Stroke, TextureHandle, Vec2}, +}; +use egui_plot::{Plot, PlotBounds, PlotImage, PlotPoint, PlotResponse, PlotUi, Polygon, Text}; +use std::hash::Hash; + +use crate::{boundingbox::BoundingBox, classes::Class, user_toml::CONFIG}; + +pub struct BoundingBoxAnnotator<'a> { + id: Id, + texture_handle: TextureHandle, + selected_class: &'a mut Class, + bounding_boxes: &'a mut Vec, + box_in_editing: &'a mut Option, +} + +impl<'a> BoundingBoxAnnotator<'a> { + pub fn new( + id_source: impl Hash, + image: TextureHandle, + bounding_boxes: &'a mut Vec, + box_in_editing: &'a mut Option, + selected_class: &'a mut Class, + ) -> Self { + Self { + id: Id::new(id_source), + texture_handle: image, + bounding_boxes, + box_in_editing, + selected_class, + } + } + + fn delete_box_from(mouse_position: PlotPoint, bbox_list: &mut Vec) -> bool { + if let Some(clicked_bbox_index) = bbox_list + .iter() + .enumerate() + .filter(|(_, bbox)| bbox.contains(mouse_position)) + .min_by(|(_, bbox1), (_, bbox2)| bbox1.rect().area().total_cmp(&bbox2.rect().area())) + .map(|(idx, _)| idx) + { + bbox_list.remove(clicked_bbox_index); + return true; + } + false + } + + fn handle_bounding_box_input(&mut self, response: &PlotResponse<()>, ui: &Ui) { + let mouse_position = response + .response + .hover_pos() + .map(|position| response.transform.value_from_position(position)); + + let config = CONFIG.get().unwrap(); + + let editing_bounding_box = match ( + self.box_in_editing.take(), + ui.input(|i| config.keybindings.draw.is_pressed(i)) + || response.response.clicked_by(PointerButton::Primary), + ui.input(|i| config.keybindings.edit.is_pressed(i)), + response.response.clicked_by(PointerButton::Secondary) + || ui.input(|i| config.keybindings.abort.is_pressed(i)), + ) { + (Some(_), _, _, true) => { + // delete the currently edited bounding box + None + } + (None, _, _, true) => { + // delete a bounding box + mouse_position.map(|position| Self::delete_box_from(position, self.bounding_boxes)); + None + } + (Some(mut bounding_box), b_pressed, q_pressed, false) if b_pressed || q_pressed => { + // finish the box + bounding_box.clip_to_image(); + if bounding_box.is_valid() { + self.bounding_boxes.push(bounding_box); + } + None + } + (Some(mut bounding_box), false, false, false) => { + // move the box corner + if let Some(position) = mouse_position { + bounding_box.set_opposing_corner(position); + } + bounding_box.class = *self.selected_class; + Some(bounding_box) + } + (None, true, false, false) => { + // create a new box + mouse_position + .map(|position| BoundingBox::new(position, position, *self.selected_class)) + } + (None, false, true, false) => { + // select a box for editing + mouse_position.and_then(|position| { + if let Some((index, _)) = self.bounding_boxes.iter().enumerate().min_by( + |(_, bounding_box1), (_, bounding_box2)| { + bounding_box1 + .closest_corner_distance_sq(position) + .total_cmp(&bounding_box2.closest_corner_distance_sq(position)) + }, + ) { + let mut bbox = self.bounding_boxes.remove(index); + bbox.prepare_for_corner_move(position); + *self.selected_class = bbox.class; + return Some(bbox); + } + None + }) + } + + (_, _, _, _) => None, + }; + if let Some(bbox) = editing_bounding_box { + let _ = self.box_in_editing.insert(bbox); + } + } +} + +impl<'a> Widget for BoundingBoxAnnotator<'a> { + fn ui(mut self, ui: &mut Ui) -> Response { + let response = Plot::new(self.id) + .data_aspect(1.) + .view_aspect(640. / 480.) + .show_axes([false, false]) + .show_grid([false, false]) + .set_margin_fraction(Vec2::splat(0.1)) + .auto_bounds_x() + .auto_bounds_y() + .show_background(true) + .allow_scroll(false) + .allow_zoom(false) + .allow_boxed_zoom(false) + .show(ui, |plot_ui| { + zoom_on_scroll_wheel(plot_ui); + focus_when_e_held_down(plot_ui); + + plot_ui.image(PlotImage::new( + &self.texture_handle, + PlotPoint::new(320., 240.), + Vec2::new(640., 480.), + )); + self.bounding_boxes + .iter() + .chain(self.box_in_editing.iter()) + .filter(|bbox| bbox.is_valid()) + .for_each(|bbox| { + let polygon: Polygon = bbox.into(); + plot_ui.polygon( + polygon + .fill_color(bbox.class.color().gamma_multiply(0.1)) + .stroke(Stroke::new(1.0, bbox.class.color().to_opaque())), + ); + plot_ui.text( + Text::new( + bbox.top_left(), + RichText::new(format!("{:?}", bbox.class)) + .color(Color32::GRAY) + .strong() + .size(18.) + .background_color(bbox.class.color().to_opaque()), + ) + .anchor(Align2::LEFT_BOTTOM), + ) + }); + }); + self.handle_bounding_box_input(&response, ui); + + if let (Some(position), None) = (response.response.hover_pos(), self.box_in_editing) { + let position = response.transform.value_from_position(position); + if let Some(bbox) = self + .bounding_boxes + .iter() + .find(|bbox| bbox.has_corner_at(position)) + { + let corner = bbox.get_closest_corner(position); + let corner_screen = response.transform.position_from_point(&corner); + let radius = 5.0 * response.transform.dpos_dvalue_x(); + let painter = ui.painter(); + painter.circle_stroke( + corner_screen, + radius as f32, + Stroke::new(2.0, Color32::GRAY), + ); + } + } + + response.response + } +} + +fn zoom_on_scroll_wheel(plot_ui: &mut PlotUi) { + if !plot_ui.response().hovered() { + return; + } + let scroll_delta = plot_ui.ctx().input(|i| { + i.events.iter().find_map(|e| match e { + Event::MouseWheel { delta, .. } => Some(*delta), + _ => None, + }) + }); + + if let Some(scroll_delta) = scroll_delta { + let zoom_factor = ((scroll_delta.x + scroll_delta.y) / 10.0).exp(); + zoom_plot(plot_ui, zoom_factor); + } +} + +fn focus_when_e_held_down(plot_ui: &mut PlotUi) { + let config = CONFIG.get().unwrap(); + + if let Some(pressed) = plot_ui.ctx().input(|i| { + i.events.iter().find_map(|e| match e { + Event::Key { + key, + repeat: false, + pressed, + .. + } if *key == config.keybindings.zoom.primary => Some(*pressed), + _ => None, + }) + }) { + if !pressed { + plot_ui.set_auto_bounds(Vec2b::TRUE); + return; + } + zoom_plot(plot_ui, 5.0); + } +} + +fn zoom_plot(plot_ui: &mut PlotUi, zoom_factor: f32) { + let Some(zoom_center) = plot_ui.pointer_coordinate() else { + return; + }; + + let old_bounds = plot_ui.plot_bounds(); + let new_bounds = zoom_bounds(old_bounds, Vec2::splat(zoom_factor), zoom_center); + + plot_ui.set_plot_bounds(new_bounds); +} + +/// Same as PlotTransform::zoom() which is inaccessible from here. +fn zoom_bounds(bounds: PlotBounds, zoom_factor: Vec2, zoom_center: PlotPoint) -> PlotBounds { + let mut min = bounds.min(); + let mut max = bounds.max(); + + min[0] = zoom_center.x + (min[0] - zoom_center.x) / (zoom_factor.x as f64); + max[0] = zoom_center.x + (max[0] - zoom_center.x) / (zoom_factor.x as f64); + min[1] = zoom_center.y + (min[1] - zoom_center.y) / (zoom_factor.y as f64); + max[1] = zoom_center.y + (max[1] - zoom_center.y) / (zoom_factor.y as f64); + + PlotBounds::from_min_max(min, max) +} diff --git a/tools/annotato/src/widgets/class_selector.rs b/tools/annotato/src/widgets/class_selector.rs new file mode 100644 index 0000000..331b754 --- /dev/null +++ b/tools/annotato/src/widgets/class_selector.rs @@ -0,0 +1,41 @@ +use eframe::egui::{ComboBox, Id, Response, Ui, Widget}; +use std::hash::Hash; + +use crate::classes::Class; +pub trait EnumIter { + fn list() -> Vec + where + Self: Sized; +} + +pub struct ClassSelector<'a> { + id: Id, + currently_selected: &'a mut Class, +} + +impl<'a> ClassSelector<'a> { + pub fn new(id_source: impl Hash, currently_selected: &'a mut Class) -> Self { + Self { + id: Id::new(id_source), + currently_selected, + } + } +} + +impl<'a> Widget for ClassSelector<'a> { + fn ui(self, ui: &mut Ui) -> Response { + if let Some(class) = ui.input(|i| i.keys_down.iter().find_map(|key| Class::from_key(*key))) + { + *self.currently_selected = class; + } + + ComboBox::from_id_source(self.id) + .selected_text(format!("{:?}", self.currently_selected)) + .show_ui(ui, |ui| { + Class::list().into_iter().for_each(|class| { + ui.selectable_value(self.currently_selected, class, format!("{:?}", class)); + }); + }) + .response + } +} diff --git a/tools/annotato/src/widgets/image_list.rs b/tools/annotato/src/widgets/image_list.rs new file mode 100644 index 0000000..edc04fd --- /dev/null +++ b/tools/annotato/src/widgets/image_list.rs @@ -0,0 +1,63 @@ +use std::collections::VecDeque; + +use eframe::egui::{ProgressBar, ScrollArea, Widget}; + +use crate::{annotator_app::AnnotationPhase, paths::Paths}; + +use super::path_row::Row; +pub struct ImageList<'a> { + paths: &'a VecDeque, + phase: &'a mut AnnotationPhase, +} + +impl<'a> ImageList<'a> { + pub fn new(paths: &'a VecDeque, phase: &'a mut AnnotationPhase) -> Self { + Self { paths, phase } + } +} + +impl<'a> Widget for ImageList<'a> { + fn ui(self, ui: &mut eframe::egui::Ui) -> eframe::egui::Response { + ui.vertical(|ui| { + ui.label("Image List"); + let images_done = self + .paths + .iter() + .filter(|paths| paths.label_present) + .count(); + ui.add( + ProgressBar::new(images_done as f32 / self.paths.len() as f32) + .show_percentage() + .text(format!("{}/{}", images_done, self.paths.len())), + ); + ui.separator(); + + ScrollArea::vertical() + .auto_shrink([false, false]) + .max_height(0.8 * ui.available_height()) + .show_rows(ui, 12.0, self.paths.len(), |ui, range| { + for (paths, index) in self.paths.range(range.clone()).zip(range) { + let row = ui.add(Row::new(paths).highlight(match self.phase { + AnnotationPhase::Labelling { current_index } => *current_index == index, + _ => false, + })); + + if let AnnotationPhase::Labelling { current_index } = self.phase { + if *current_index == index { + row.scroll_to_me(None); + } + } + + if row.clicked() { + *self.phase = AnnotationPhase::Labelling { + current_index: index, + }; + } + ui.separator(); + } + }); + ui.separator(); + }) + .response + } +} diff --git a/tools/annotato/src/widgets/mod.rs b/tools/annotato/src/widgets/mod.rs new file mode 100644 index 0000000..12bf021 --- /dev/null +++ b/tools/annotato/src/widgets/mod.rs @@ -0,0 +1,4 @@ +pub mod bounding_box_annotator; +pub mod class_selector; +pub mod image_list; +pub mod path_row; diff --git a/tools/annotato/src/widgets/path_row.rs b/tools/annotato/src/widgets/path_row.rs new file mode 100644 index 0000000..af6fdaf --- /dev/null +++ b/tools/annotato/src/widgets/path_row.rs @@ -0,0 +1,72 @@ +use eframe::{ + egui::{Response, RichText, Sense, TextStyle, Ui, Widget, WidgetText}, + epaint::{Color32, Vec2}, +}; + +use crate::paths::Paths; + +pub struct Row<'a> { + paths: &'a Paths, + highlight: bool, +} + +impl<'a> Row<'a> { + pub fn new(paths: &'a Paths) -> Self { + Self { + paths, + highlight: false, + } + } + + pub fn highlight(mut self, highlight: bool) -> Self { + self.highlight = highlight; + self + } +} + +impl<'a> Widget for Row<'a> { + fn ui(self, ui: &mut Ui) -> Response { + let filename = self.paths.image_path.display().to_string(); + let is_labelled = self.paths.label_present; + + let text: WidgetText = RichText::new(filename).monospace().into(); + let check_mark: WidgetText = if is_labelled { + RichText::new("✔").color(Color32::GREEN) + } else { + RichText::new("❌").color(Color32::RED) + } + .into(); + let text = text.into_galley(ui, Some(false), ui.available_width(), TextStyle::Button); + let check_mark = + check_mark.into_galley(ui, Some(false), ui.available_width(), TextStyle::Button); + + let desired_size = Vec2::new( + text.size().x + 40.0 + check_mark.size().x + 20.0, + text.size().y + 2.0 * 4.0, + ); + + let (rect, response) = ui.allocate_at_least(desired_size, Sense::click()); + if ui.is_rect_visible(rect) { + let visuals = ui.style().interact(&response); + let text_height = Vec2::new(0., text.size().y); + let check_mark_offset = Vec2::new(text.size().x + 40.0, 0.0); + + if response.hovered || self.highlight { + ui.painter().rect_filled(rect, 2.0, visuals.bg_fill); + } + + text.paint_with_visuals( + ui.painter(), + rect.left_center() - 0.5 * text_height, + visuals, + ); + check_mark.paint_with_visuals( + ui.painter(), + rect.left_center() - 0.5 * text_height + check_mark_offset, + visuals, + ); + } + + response + } +} diff --git a/tools/behavior_simulator/Cargo.toml b/tools/behavior_simulator/Cargo.toml index cefd272..8eaac6e 100644 --- a/tools/behavior_simulator/Cargo.toml +++ b/tools/behavior_simulator/Cargo.toml @@ -1,8 +1,9 @@ [package] -edition = "2021" -license = "GPL-3.0-only" name = "behavior_simulator" version = "0.1.0" +edition.workspace = true +license.workspace = true +homepage.workspace = true [[bin]] name = "behavior_simulator" diff --git a/tools/behavior_simulator/build.rs b/tools/behavior_simulator/build.rs index 264b192..9221541 100644 --- a/tools/behavior_simulator/build.rs +++ b/tools/behavior_simulator/build.rs @@ -19,6 +19,7 @@ fn main() -> Result<()> { "control::active_vision", "control::ball_state_composer", "control::behavior::node", + "control::game_controller_state_filter", "control::kick_selector", "control::motion::look_around", "control::role_assignment", diff --git a/tools/behavior_simulator/src/cycler.rs b/tools/behavior_simulator/src/cycler.rs index ef80a37..5a44e41 100644 --- a/tools/behavior_simulator/src/cycler.rs +++ b/tools/behavior_simulator/src/cycler.rs @@ -83,7 +83,6 @@ impl BehaviorCycler { Ok(Self { hardware_interface, own_changed, - active_vision, time_to_reach_kick_position, ball_state_composer, @@ -114,15 +113,11 @@ impl BehaviorCycler { .cycle(control::rule_obstacle_composer::CycleContext::new( own_database .main_outputs - .game_controller_state - .as_ref() - .unwrap(), - own_database - .main_outputs - .filtered_game_state + .filtered_game_controller_state .as_ref() .unwrap(), own_database.main_outputs.ball_state.as_ref(), + ¶meters.center_circle_obstacle_increase, ¶meters.field_dimensions, )) .wrap_err("failed to execute cycle of node `RuleObstacleComposer`")? @@ -137,7 +132,10 @@ impl BehaviorCycler { .cycle(role_assignment::CycleContext::new( own_database.main_outputs.ball_position.as_ref(), &own_database.main_outputs.fall_state, - own_database.main_outputs.game_controller_state.as_ref(), + own_database + .main_outputs + .filtered_game_controller_state + .as_ref(), &own_database.main_outputs.primary_state, own_database.main_outputs.robot_to_field.as_ref(), &own_database.main_outputs.cycle_time, @@ -173,7 +171,10 @@ impl BehaviorCycler { own_database.main_outputs.robot_to_field.as_ref(), own_database.main_outputs.team_ball.as_ref(), &own_database.main_outputs.primary_state, - own_database.main_outputs.game_controller_state.as_ref(), + own_database + .main_outputs + .filtered_game_controller_state + .as_ref(), ¶meters.field_dimensions, )) .wrap_err("failed to execute cycle of node `BallStateComposer`")?; @@ -244,8 +245,10 @@ impl BehaviorCycler { .cycle(world_state_composer::CycleContext::new( own_database.main_outputs.ball_state.as_ref(), own_database.main_outputs.rule_ball_state.as_ref(), - own_database.main_outputs.filtered_game_state.as_ref(), - own_database.main_outputs.game_controller_state.as_ref(), + own_database + .main_outputs + .filtered_game_controller_state + .as_ref(), own_database.main_outputs.robot_to_field.as_ref(), own_database.main_outputs.kick_decisions.as_ref(), own_database.main_outputs.instant_kick_decisions.as_ref(), diff --git a/tools/behavior_simulator/src/state.rs b/tools/behavior_simulator/src/state.rs index bc60a7b..67b93df 100644 --- a/tools/behavior_simulator/src/state.rs +++ b/tools/behavior_simulator/src/state.rs @@ -10,9 +10,7 @@ use nalgebra::{vector, Isometry2, Point2, UnitComplex, Vector2}; use serde::{Deserialize, Serialize}; use serialize_hierarchy::SerializeHierarchy; use spl_network_messages::{GamePhase, GameState, HulkMessage, PlayerNumber, Team}; -use types::motion_command::KickVariant; use types::motion_command::{HeadMotion, OrientationMode}; -use types::planned_path::PathSegment; use types::{ ball_position::BallPosition, filtered_game_state::FilteredGameState, @@ -23,6 +21,10 @@ use types::{ primary_state::PrimaryState, support_foot::Side, }; +use types::{ + filtered_game_controller_state::FilteredGameControllerState, motion_command::KickVariant, + planned_path::PathSegment, +}; use crate::{ cycler::Database, @@ -149,10 +151,7 @@ impl State { head } MotionCommand::SitDown { head } => head, - MotionCommand::Stand { - head, - is_energy_saving: _, - } => head, + MotionCommand::Stand { head } => head, _ => &HeadMotion::Center, }; @@ -237,7 +236,11 @@ impl State { (false, FilteredGameState::Playing { .. }) => PrimaryState::Playing, (false, FilteredGameState::Finished) => PrimaryState::Finished, }; - robot.database.main_outputs.filtered_game_state = Some(self.filtered_game_state); + robot.database.main_outputs.filtered_game_controller_state = + Some(FilteredGameControllerState { + game_state: self.filtered_game_state, + ..Default::default() + }); robot.database.main_outputs.game_controller_state = Some(self.game_controller_state); robot.cycle(messages_with_time)?; diff --git a/tools/breeze/Cargo.lock b/tools/breeze/Cargo.lock new file mode 100644 index 0000000..68f5093 --- /dev/null +++ b/tools/breeze/Cargo.lock @@ -0,0 +1,459 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "bindgen" +version = "0.63.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "log", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 1.0.109", + "which", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "breeze" +version = "0.1.0" +dependencies = [ + "cgos", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cgos" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa6af9dbfd78dbf440c2417fd8c87b5bbf16ece17e7d05575581868d58d67404" +dependencies = [ + "bindgen", + "bitflags 1.3.2", + "thiserror", +] + +[[package]] +name = "clang-sys" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libc" +version = "0.2.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" + +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "proc-macro2" +version = "1.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustix" +version = "0.38.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "shlex" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" diff --git a/tools/breeze/Cargo.toml b/tools/breeze/Cargo.toml new file mode 100644 index 0000000..6ae6690 --- /dev/null +++ b/tools/breeze/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "breeze" +version = "0.1.0" +edition = "2021" +license = "GPL-3.0-only" +homepage = "https://github.com/hulks/hulk" + +[dependencies] +cgos = "0.2.0" diff --git a/tools/breeze/src/main.rs b/tools/breeze/src/main.rs new file mode 100644 index 0000000..284c41c --- /dev/null +++ b/tools/breeze/src/main.rs @@ -0,0 +1,76 @@ +use std::{thread::sleep, time::Duration}; + +use cgos::board::BoardClass; +use cgos::congatec::Congatec; +use cgos::status::Status; + +const FAN_MAX_SPEED: f32 = 100.0; +const FAN_MIN_SPEED: f32 = 40.0; // should be at least ~38 to allow spin up from zero +const INTERPOLATION_X0: f32 = 50.0; +const INTERPOLATION_Y0: f32 = 50.0; +const INTERPOLATION_X1: f32 = 70.0; +const INTERPOLATION_Y1: f32 = 100.0; +const SLEEP_DURATION: Duration = Duration::from_secs(30); + +#[derive(Clone, Debug)] +enum SensorState { + Uninitialized, + Broken, + Valid(f32), +} + +fn main() { + let congatec = Congatec::new(); + let board = congatec.get_board(BoardClass::ALL, 0); + let number_of_temperatures = board.get_number_of_temperatures(); + + loop { + let sensor_state = + (0..number_of_temperatures).fold(SensorState::Uninitialized, |sensor_state, index| { + let sensor = board.get_temperature(index); + let (current_temperature, current_status) = sensor.current(); + + match (sensor_state, current_status == Status::ACTIVE) { + (SensorState::Uninitialized, true) => SensorState::Valid(current_temperature), + (SensorState::Uninitialized, false) + | (SensorState::Broken, _) + | (SensorState::Valid(_), false) => SensorState::Broken, + (SensorState::Valid(temperature), true) => { + SensorState::Valid(temperature.max(current_temperature)) + } + } + }); + + let fan_speed = get_interpolated_fan_speed(sensor_state); + let number_of_fans = board.get_number_of_fans(); + for index in 0..number_of_fans { + let fan = board.get_fan(index); + let mut info = fan.info(); + info.out_maximum = fan_speed as i32; + fan.set_limits(info); + } + + sleep(SLEEP_DURATION); + } +} + +fn get_interpolated_fan_speed(sensor_state: SensorState) -> f32 { + if let SensorState::Valid(temperature) = sensor_state { + let fan_value = interpolate( + temperature, + INTERPOLATION_X0, + INTERPOLATION_Y0, + INTERPOLATION_X1, + INTERPOLATION_Y1, + ); + fan_value.clamp(FAN_MIN_SPEED, FAN_MAX_SPEED) + } else { + // Something is wrong with the temperature sensor. + // Lets crank the fans up. + FAN_MAX_SPEED + } +} + +fn interpolate(x: f32, x0: f32, y0: f32, x1: f32, y1: f32) -> f32 { + (y0 * (x1 - x) + y1 * (x - x0)) / (x1 - x0) +} diff --git a/tools/camera_matrix_extractor/Cargo.toml b/tools/camera_matrix_extractor/Cargo.toml index 7757efd..8fbfb22 100644 --- a/tools/camera_matrix_extractor/Cargo.toml +++ b/tools/camera_matrix_extractor/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "camera_matrix_extractor" version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] color-eyre = { workspace = true } diff --git a/tools/depp/Cargo.toml b/tools/depp/Cargo.toml index 5a1fa86..0664499 100644 --- a/tools/depp/Cargo.toml +++ b/tools/depp/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "depp" version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] color-eyre = { workspace = true } diff --git a/tools/fanta/Cargo.toml b/tools/fanta/Cargo.toml index 7fe9b59..d9798d6 100644 --- a/tools/fanta/Cargo.toml +++ b/tools/fanta/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "fanta" version = "0.1.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] clap = { workspace = true } diff --git a/tools/hula/Cargo.lock b/tools/hula/Cargo.lock index bf90c12..8c60136 100644 --- a/tools/hula/Cargo.lock +++ b/tools/hula/Cargo.lock @@ -245,6 +245,11 @@ dependencies = [ [[package]] name = "constants" version = "0.1.0" +dependencies = [ + "lazy_static", + "serde", + "serde_json", +] [[package]] name = "cpufeatures" @@ -626,6 +631,12 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + [[package]] name = "lazy_static" version = "1.4.0" @@ -1010,6 +1021,12 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + [[package]] name = "scopeguard" version = "1.1.0" @@ -1036,6 +1053,17 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_json" +version = "1.0.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3" +dependencies = [ + "itoa", + "ryu", + "serde", +] + [[package]] name = "serde_repr" version = "0.1.10" diff --git a/tools/hula/proxy/src/idle.rs b/tools/hula/proxy/src/idle.rs index 9236ca3..5e1429b 100644 --- a/tools/hula/proxy/src/idle.rs +++ b/tools/hula/proxy/src/idle.rs @@ -1,5 +1,5 @@ use std::{ - f32::consts::PI, + f32::consts::TAU, io::{BufWriter, Write}, os::unix::net::UnixStream, time::UNIX_EPOCH, @@ -12,7 +12,7 @@ use rmp_serde::encode::write_named; pub fn knight_rider_eyes() -> ([f32; 24], [f32; 24]) { let since_epoch = UNIX_EPOCH.elapsed().expect("time ran backwards"); let interval_from_0_to_1 = since_epoch.subsec_millis() as f32 / 1000.0; - let position = ((2.0 * PI * interval_from_0_to_1).sin() + 1.0) / 2.0; + let position = ((TAU * interval_from_0_to_1).sin() + 1.0) / 2.0; let maximal_distance_from_center = 1.0 / 4.0; // 1 diff --git a/tools/localizer/Cargo.toml b/tools/localizer/Cargo.toml index d300f63..9793c14 100644 --- a/tools/localizer/Cargo.toml +++ b/tools/localizer/Cargo.toml @@ -1,7 +1,9 @@ [package] name = "localizer" version = "0.1.0" -edition = "2021" +edition.workspace = true +license.workspace = true +homepage.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/tools/localizer/src/main.rs b/tools/localizer/src/main.rs index 4e58a00..204a55f 100644 --- a/tools/localizer/src/main.rs +++ b/tools/localizer/src/main.rs @@ -27,7 +27,7 @@ use tokio_util::sync::CancellationToken; use types::{ field_dimensions::FieldDimensions, field_marks::{field_marks_from_field_dimensions, FieldMark}, - game_controller_state::GameControllerState, + filtered_game_controller_state::FilteredGameControllerState, line::{Line, Line2}, line_data::LineData, primary_state::PrimaryState, @@ -172,7 +172,8 @@ async fn recording_player( { let mut database = control_writer.next(); - database.main_outputs.game_controller_state = data.game_controller_state; + database.main_outputs.filtered_game_controller_state = + data.filtered_game_controller_state; database.main_outputs.has_ground_contact = data.has_ground_contact; database.main_outputs.primary_state = data.primary_state; database.main_outputs.robot_to_field = data.robot_to_field; @@ -221,7 +222,7 @@ struct ControlDatabase { #[derive(Clone, Debug, Default, Deserialize, Serialize, SerializeHierarchy)] struct ControlMainOutputs { - pub game_controller_state: Option, + pub filtered_game_controller_state: Option, pub has_ground_contact: bool, pub primary_state: PrimaryState, pub robot_to_field: Option>, diff --git a/tools/machine-learning/data/HULKs/datasets/ball_detection/dvc.lock b/tools/machine-learning/data/HULKs/datasets/ball_detection/dvc.lock deleted file mode 100644 index 1378ff1..0000000 --- a/tools/machine-learning/data/HULKs/datasets/ball_detection/dvc.lock +++ /dev/null @@ -1,238 +0,0 @@ -merge-positives-v1: - cmd: transformer ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/full-positives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/covered-positives.tfrecord - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/full-positives.tfrecord - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/covered-positives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/full-positives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/covered-positives.tfrecord - ../../events/2019-11-06_testGame/full-positives.tfrecord ../../events/2019-11-06_testGame/covered-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/full-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/covered-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/full-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/covered-positives.tfrecord - ../../events/2020-02-19_testGame/full-positives.tfrecord ../../events/2020-02-19_testGame/covered-positives.tfrecord - ../../events/2019-10-16_testGame/full-positives.tfrecord ../../events/2019-10-16_testGame/covered-positives.tfrecord - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/full-positives.tfrecord - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/covered-positives.tfrecord - - 0.1:positives-v1-test.tfrecord positives-v1-train.tfrecord - deps: - - path: ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/covered-positives.tfrecord - md5: bac34931e2fa13965ed9ca66f808532d - - path: ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/full-positives.tfrecord - md5: 92c853236690afcf11f71557f1551c15 - - path: ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/covered-positives.tfrecord - md5: 5ecea1e0527cc3c0cf14ee525b0c82ae - - path: ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/full-positives.tfrecord - md5: d2d28fb290ddd5e220e23bfc1d4a1a50 - - path: ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/covered-positives.tfrecord - md5: 70c11b5e202742cb3f9a48c4bb93da12 - - path: ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/full-positives.tfrecord - md5: 681f53bb88375f5439f2c4da760052d6 - - path: ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/covered-positives.tfrecord - md5: 7b4a65b1a511eed8be2df79449ba780e - - path: ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/full-positives.tfrecord - md5: 3f239db0eb08869cce431183a78c718a - - path: ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/covered-positives.tfrecord - md5: dc4570fa1233629a550b53390836320f - - path: ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/full-positives.tfrecord - md5: ef2ab014274e2acf8ca31c53907b6543 - - path: ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/covered-positives.tfrecord - md5: fc8aa701c1862e201b1ee1d23920e62c - - path: ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/full-positives.tfrecord - md5: 3f578492053228e1302cecf30478905c - - path: ../../events/2019-10-16_testGame/covered-positives.tfrecord - md5: 8275fb332bc3308bd41f9c68faea4682 - - path: ../../events/2019-10-16_testGame/full-positives.tfrecord - md5: dbbb7b8f46b7fb6e1ad9288bad622973 - - path: ../../events/2019-11-06_testGame/covered-positives.tfrecord - md5: cdac424a4b4b875576762197796296cb - - path: ../../events/2019-11-06_testGame/full-positives.tfrecord - md5: e46496198eca5f088475f057ddf1441b - - path: ../../events/2020-02-19_testGame/covered-positives.tfrecord - md5: 57f9b4ecab8f6a2993c59394c2ce2759 - - path: ../../events/2020-02-19_testGame/full-positives.tfrecord - md5: d5ad7691f028839792ac2e78e0809aa7 - outs: - - path: positives-v1-test.tfrecord - md5: 68208f51688362bf568429e017680a78 - - path: positives-v1-train.tfrecord - md5: d74b7f030227833d3b1740373739b1b1 -merge-all-v1: - cmd: transformer ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/negatives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/random-negatives.tfrecord - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/negatives.tfrecord - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/random-negatives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/negatives-1.tfrecord ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/random-negatives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/negatives-0.tfrecord ../../events/2019-11-06_testGame/negatives-1.tfrecord - ../../events/2019-11-06_testGame/random-negatives.tfrecord ../../events/2019-11-06_testGame/negatives-0.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/negatives-1.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/random-negatives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/negatives-0.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/negatives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/random-negatives.tfrecord - ../../events/2020-08-30_simRobot_2083/negatives-1.tfrecord ../../events/2020-08-30_simRobot_2083/random-negatives.tfrecord - ../../events/2020-08-30_simRobot_2083/negatives-0.tfrecord ../../events/2020-02-19_testGame/negatives-1.tfrecord - ../../events/2020-02-19_testGame/negatives-2.tfrecord ../../events/2020-02-19_testGame/random-negatives.tfrecord - ../../events/2020-02-19_testGame/negatives-0.tfrecord ../../events/2019-10-16_testGame/negatives.tfrecord - ../../events/2019-10-16_testGame/random-negatives.tfrecord ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/negatives-1.tfrecord - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/random-negatives.tfrecord - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/negatives-0.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/full-positives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/covered-positives.tfrecord - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/full-positives.tfrecord - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/covered-positives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/full-positives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/covered-positives.tfrecord - ../../events/2019-11-06_testGame/full-positives.tfrecord ../../events/2019-11-06_testGame/covered-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/full-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/covered-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/full-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/covered-positives.tfrecord - ../../events/2020-02-19_testGame/full-positives.tfrecord ../../events/2020-02-19_testGame/covered-positives.tfrecord - ../../events/2019-10-16_testGame/full-positives.tfrecord ../../events/2019-10-16_testGame/covered-positives.tfrecord - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/full-positives.tfrecord - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/covered-positives.tfrecord - - 0.1:all-v1-test.tfrecord all-v1-train.tfrecord - deps: - - path: ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/covered-positives.tfrecord - md5: bac34931e2fa13965ed9ca66f808532d - size: 26582 - - path: ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/full-positives.tfrecord - md5: 92c853236690afcf11f71557f1551c15 - size: 60595 - - path: ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/negatives-0.tfrecord - md5: 81cd3a5a77d5ee6ce98e599b6b06e688 - size: 26041 - - path: ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/negatives-1.tfrecord - md5: 43a8a7a323d9d2ddb51449fe2dee7aab - size: 27121 - - path: ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/random-negatives.tfrecord - md5: f1a37b9e95bbe7add632b97b895e54f1 - size: 87938 - - path: ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/covered-positives.tfrecord - md5: 5ecea1e0527cc3c0cf14ee525b0c82ae - size: 1269249 - - path: ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/full-positives.tfrecord - md5: d2d28fb290ddd5e220e23bfc1d4a1a50 - size: 9692840 - - path: ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/negatives.tfrecord - md5: d651fa3c06a27ce836b48102386dfcf9 - size: 6067518 - - path: ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/random-negatives.tfrecord - md5: d3e1cfb8446295bbf5544e6a375d2fab - size: 58020886 - - path: ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/covered-positives.tfrecord - md5: 70c11b5e202742cb3f9a48c4bb93da12 - size: 1081798 - - path: ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/full-positives.tfrecord - md5: 681f53bb88375f5439f2c4da760052d6 - size: 11043483 - - path: ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/negatives-0.tfrecord - md5: 5425c01f449e92d08045508197d9e6f6 - size: 11002266 - - path: ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/negatives-1.tfrecord - md5: 6eb60f830fa5110d09da50454468f531 - size: 28235 - - path: ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/random-negatives.tfrecord - md5: f5375ade6701d468fca75102d0f7ef0f - size: 63211361 - - path: ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/covered-positives.tfrecord - md5: 7b4a65b1a511eed8be2df79449ba780e - size: 999123 - - path: ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/full-positives.tfrecord - md5: 3f239db0eb08869cce431183a78c718a - size: 9877559 - - path: ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/negatives.tfrecord - md5: 7f5e8e561987d4c0605ddd35b7516631 - size: 4643666 - - path: ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/random-negatives.tfrecord - md5: 9fd9673712a28ebdbdba72fc1075b1fc - size: 38977546 - - path: ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/covered-positives.tfrecord - md5: dc4570fa1233629a550b53390836320f - size: 1165947 - - path: ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/full-positives.tfrecord - md5: ef2ab014274e2acf8ca31c53907b6543 - size: 15804861 - - path: ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/negatives.tfrecord - md5: e9c3c888e43ad785e6f77961d4435419 - size: 7734049 - - path: ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/random-negatives.tfrecord - md5: e4cc66434d8da7e54d429d5a835ccd40 - size: 95851471 - - path: ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/covered-positives.tfrecord - md5: fc8aa701c1862e201b1ee1d23920e62c - size: 1173899 - - path: ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/full-positives.tfrecord - md5: 3f578492053228e1302cecf30478905c - size: 11900044 - - path: ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/negatives-0.tfrecord - md5: 00d51047f7d2ed613ec74d887dd6b001 - size: 6529783 - - path: ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/negatives-1.tfrecord - md5: 818772e1019ddc0e254371ef3926c8a7 - size: 24843 - - path: ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/random-negatives.tfrecord - md5: e761acd4178051ca0ebe6e75eaf43688 - size: 75789538 - - path: ../../events/2019-10-16_testGame/covered-positives.tfrecord - md5: 8275fb332bc3308bd41f9c68faea4682 - size: 596876 - - path: ../../events/2019-10-16_testGame/full-positives.tfrecord - md5: dbbb7b8f46b7fb6e1ad9288bad622973 - size: 8102043 - - path: ../../events/2019-10-16_testGame/negatives.tfrecord - md5: 5c757438145eb3d47b889e01092edfda - size: 2199449 - - path: ../../events/2019-10-16_testGame/random-negatives.tfrecord - md5: 6383c0a7f56a8502bf736f7075e3ed4a - size: 25531126 - - path: ../../events/2019-11-06_testGame/covered-positives.tfrecord - md5: cdac424a4b4b875576762197796296cb - size: 961599 - - path: ../../events/2019-11-06_testGame/full-positives.tfrecord - md5: e46496198eca5f088475f057ddf1441b - size: 13321489 - - path: ../../events/2019-11-06_testGame/negatives-0.tfrecord - md5: ca835934c5fc407b0be333e2062f0333 - size: 5870323 - - path: ../../events/2019-11-06_testGame/negatives-1.tfrecord - md5: 082ed5fde3f3ce4bfe175ef1324743fb - size: 48733 - - path: ../../events/2019-11-06_testGame/random-negatives.tfrecord - md5: f5a7d634f03f25393cd46941a9a5ca8c - size: 50299133 - - path: ../../events/2020-02-19_testGame/covered-positives.tfrecord - md5: 57f9b4ecab8f6a2993c59394c2ce2759 - size: 1302063 - - path: ../../events/2020-02-19_testGame/full-positives.tfrecord - md5: d5ad7691f028839792ac2e78e0809aa7 - size: 10899641 - - path: ../../events/2020-02-19_testGame/negatives-0.tfrecord - md5: f9fb7d1c3cbe10b3983d464b012cb6bc - size: 4464924 - - path: ../../events/2020-02-19_testGame/negatives-1.tfrecord - md5: 5c221e8c96ea3aaddbceaaa96c060d74 - size: 4461755 - - path: ../../events/2020-02-19_testGame/negatives-2.tfrecord - md5: 064058ba3a8c12179c45b1153f0b77d2 - size: 4465524 - - path: ../../events/2020-02-19_testGame/random-negatives.tfrecord - md5: 3796cc590fb2df558cba20e48f6f4b6a - size: 69938321 - - path: ../../events/2020-08-30_simRobot_2083/negatives-0.tfrecord - md5: b877775cd8aedd1dc895cfa09a89e245 - size: 2894433 - - path: ../../events/2020-08-30_simRobot_2083/negatives-1.tfrecord - md5: c82645a4b7abb7cd2c1880a4d681023e - size: 31377 - - path: ../../events/2020-08-30_simRobot_2083/random-negatives.tfrecord - md5: 45c1b8c9089dda4a41d486e503ca6c96 - size: 55450827 - outs: - - path: all-v1-test.tfrecord - md5: db60631f606eba3170e2fe7567a88a6d - size: 69379398 - - path: all-v1-train.tfrecord - md5: b5be1a9459336b6b034d5b145876fd91 - size: 623577088 diff --git a/tools/machine-learning/data/HULKs/datasets/ball_detection/dvc.yaml b/tools/machine-learning/data/HULKs/datasets/ball_detection/dvc.yaml deleted file mode 100644 index 020ebec..0000000 --- a/tools/machine-learning/data/HULKs/datasets/ball_detection/dvc.yaml +++ /dev/null @@ -1,126 +0,0 @@ -stages: - merge-positives-v1: - cmd: transformer ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/full-positives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/covered-positives.tfrecord - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/full-positives.tfrecord - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/covered-positives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/full-positives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/covered-positives.tfrecord - ../../events/2019-11-06_testGame/full-positives.tfrecord ../../events/2019-11-06_testGame/covered-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/full-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/covered-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/full-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/covered-positives.tfrecord - ../../events/2020-02-19_testGame/full-positives.tfrecord ../../events/2020-02-19_testGame/covered-positives.tfrecord - ../../events/2019-10-16_testGame/full-positives.tfrecord ../../events/2019-10-16_testGame/covered-positives.tfrecord - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/full-positives.tfrecord - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/covered-positives.tfrecord - - 0.1:positives-v1-test.tfrecord positives-v1-train.tfrecord - deps: - - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/covered-positives.tfrecord - - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/full-positives.tfrecord - - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/covered-positives.tfrecord - - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/full-positives.tfrecord - - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/covered-positives.tfrecord - - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/full-positives.tfrecord - - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/covered-positives.tfrecord - - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/full-positives.tfrecord - - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/covered-positives.tfrecord - - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/full-positives.tfrecord - - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/covered-positives.tfrecord - - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/full-positives.tfrecord - - ../../events/2019-10-16_testGame/covered-positives.tfrecord - - ../../events/2019-10-16_testGame/full-positives.tfrecord - - ../../events/2019-11-06_testGame/covered-positives.tfrecord - - ../../events/2019-11-06_testGame/full-positives.tfrecord - - ../../events/2020-02-19_testGame/covered-positives.tfrecord - - ../../events/2020-02-19_testGame/full-positives.tfrecord - outs: - - positives-v1-test.tfrecord - - positives-v1-train.tfrecord - merge-all-v1: - cmd: transformer ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/negatives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/random-negatives.tfrecord - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/negatives.tfrecord - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/random-negatives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/negatives-1.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/random-negatives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/negatives-0.tfrecord - ../../events/2019-11-06_testGame/negatives-1.tfrecord ../../events/2019-11-06_testGame/random-negatives.tfrecord - ../../events/2019-11-06_testGame/negatives-0.tfrecord ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/negatives-1.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/random-negatives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/negatives-0.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/negatives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/random-negatives.tfrecord - ../../events/2020-08-30_simRobot_2083/negatives-1.tfrecord ../../events/2020-08-30_simRobot_2083/random-negatives.tfrecord - ../../events/2020-08-30_simRobot_2083/negatives-0.tfrecord ../../events/2020-02-19_testGame/negatives-1.tfrecord - ../../events/2020-02-19_testGame/negatives-2.tfrecord ../../events/2020-02-19_testGame/random-negatives.tfrecord - ../../events/2020-02-19_testGame/negatives-0.tfrecord ../../events/2019-10-16_testGame/negatives.tfrecord - ../../events/2019-10-16_testGame/random-negatives.tfrecord ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/negatives-1.tfrecord - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/random-negatives.tfrecord - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/negatives-0.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/full-positives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/covered-positives.tfrecord - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/full-positives.tfrecord - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/covered-positives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/full-positives.tfrecord - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/covered-positives.tfrecord - ../../events/2019-11-06_testGame/full-positives.tfrecord ../../events/2019-11-06_testGame/covered-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/full-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/covered-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/full-positives.tfrecord - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/covered-positives.tfrecord - ../../events/2020-02-19_testGame/full-positives.tfrecord ../../events/2020-02-19_testGame/covered-positives.tfrecord - ../../events/2019-10-16_testGame/full-positives.tfrecord ../../events/2019-10-16_testGame/covered-positives.tfrecord - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/full-positives.tfrecord - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/covered-positives.tfrecord - - 0.1:all-v1-test.tfrecord all-v1-train.tfrecord - deps: - - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/covered-positives.tfrecord - - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/full-positives.tfrecord - - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/negatives-0.tfrecord - - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/negatives-1.tfrecord - - ../../events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/random-negatives.tfrecord - - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/covered-positives.tfrecord - - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/full-positives.tfrecord - - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/negatives.tfrecord - - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/random-negatives.tfrecord - - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/covered-positives.tfrecord - - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/full-positives.tfrecord - - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/negatives-0.tfrecord - - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/negatives-1.tfrecord - - ../../events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/random-negatives.tfrecord - - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/covered-positives.tfrecord - - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/full-positives.tfrecord - - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/negatives.tfrecord - - ../../events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/random-negatives.tfrecord - - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/covered-positives.tfrecord - - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/full-positives.tfrecord - - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/negatives.tfrecord - - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/random-negatives.tfrecord - - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/covered-positives.tfrecord - - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/full-positives.tfrecord - - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/negatives-0.tfrecord - - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/negatives-1.tfrecord - - ../../events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/random-negatives.tfrecord - - ../../events/2019-10-16_testGame/covered-positives.tfrecord - - ../../events/2019-10-16_testGame/full-positives.tfrecord - - ../../events/2019-10-16_testGame/negatives.tfrecord - - ../../events/2019-10-16_testGame/random-negatives.tfrecord - - ../../events/2019-11-06_testGame/covered-positives.tfrecord - - ../../events/2019-11-06_testGame/full-positives.tfrecord - - ../../events/2019-11-06_testGame/negatives-0.tfrecord - - ../../events/2019-11-06_testGame/negatives-1.tfrecord - - ../../events/2019-11-06_testGame/random-negatives.tfrecord - - ../../events/2020-02-19_testGame/covered-positives.tfrecord - - ../../events/2020-02-19_testGame/full-positives.tfrecord - - ../../events/2020-02-19_testGame/negatives-0.tfrecord - - ../../events/2020-02-19_testGame/negatives-1.tfrecord - - ../../events/2020-02-19_testGame/negatives-2.tfrecord - - ../../events/2020-02-19_testGame/random-negatives.tfrecord - - ../../events/2020-08-30_simRobot_2083/negatives-0.tfrecord - - ../../events/2020-08-30_simRobot_2083/negatives-1.tfrecord - - ../../events/2020-08-30_simRobot_2083/random-negatives.tfrecord - outs: - - all-v1-test.tfrecord - - all-v1-train.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2014_RoHOW2014/Game1/dvc.lock b/tools/machine-learning/data/HULKs/events/2014_RoHOW2014/Game1/dvc.lock deleted file mode 100644 index a5ac57c..0000000 --- a/tools/machine-learning/data/HULKs/events/2014_RoHOW2014/Game1/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler --image-color-space RGB corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 58ca2580a53e80fe9c939f50c8bcf120 - - path: raw - md5: b4438f3e700bad6a1e1cbc2f57198807.dir - outs: - - path: full-positives.tfrecord - md5: 7198185df2590d91b7cbd992824cc636 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 --image-color-space RGB - corrected-covered-positives.json covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 0c4f2cd37372c695ccba04e7526b4deb - - path: raw - md5: b4438f3e700bad6a1e1cbc2f57198807.dir - outs: - - path: covered-positives.tfrecord - md5: 8747cdaf69a06fa30e466753b075d8fe diff --git a/tools/machine-learning/data/HULKs/events/2014_RoHOW2014/Game1/dvc.yaml b/tools/machine-learning/data/HULKs/events/2014_RoHOW2014/Game1/dvc.yaml deleted file mode 100644 index 58ae8c6..0000000 --- a/tools/machine-learning/data/HULKs/events/2014_RoHOW2014/Game1/dvc.yaml +++ /dev/null @@ -1,17 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler --image-color-space RGB corrected-full-positives.json - full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 --image-color-space RGB - corrected-covered-positives.json covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2015-04-01_HTWK/dvc.lock b/tools/machine-learning/data/HULKs/events/2015-04-01_HTWK/dvc.lock deleted file mode 100644 index 2241eef..0000000 --- a/tools/machine-learning/data/HULKs/events/2015-04-01_HTWK/dvc.lock +++ /dev/null @@ -1,10 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler --image-color-space RGB completed.json full-positives.tfrecord - deps: - - path: completed.json - md5: 5381a5a6ece53ee8ca97d12eedfe1724 - - path: raw - md5: 1be71d963427d54597725f87d2974664.dir - outs: - - path: full-positives.tfrecord - md5: d0c97123a66c8c228cc4a170bd88976b diff --git a/tools/machine-learning/data/HULKs/events/2015-04-01_HTWK/dvc.yaml b/tools/machine-learning/data/HULKs/events/2015-04-01_HTWK/dvc.yaml deleted file mode 100644 index 41672b0..0000000 --- a/tools/machine-learning/data/HULKs/events/2015-04-01_HTWK/dvc.yaml +++ /dev/null @@ -1,8 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler --image-color-space RGB completed.json full-positives.tfrecord - deps: - - completed.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2015-06_ObstacleDetection/dvc.lock b/tools/machine-learning/data/HULKs/events/2015-06_ObstacleDetection/dvc.lock deleted file mode 100644 index 6401070..0000000 --- a/tools/machine-learning/data/HULKs/events/2015-06_ObstacleDetection/dvc.lock +++ /dev/null @@ -1,10 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler --image-color-space RGB corrected.json full-positives.tfrecord - deps: - - path: corrected.json - md5: 154d9014ca6060297bbaecc659aa9bdb - - path: raw - md5: 3ed1fcf8b0932e4ad637ebb78817ec3a.dir - outs: - - path: full-positives.tfrecord - md5: 06d09e9e6f3a937374064ada61e53526 diff --git a/tools/machine-learning/data/HULKs/events/2015-06_ObstacleDetection/dvc.yaml b/tools/machine-learning/data/HULKs/events/2015-06_ObstacleDetection/dvc.yaml deleted file mode 100644 index faa7a9c..0000000 --- a/tools/machine-learning/data/HULKs/events/2015-06_ObstacleDetection/dvc.yaml +++ /dev/null @@ -1,8 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler --image-color-space RGB corrected.json full-positives.tfrecord - deps: - - corrected.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2015-10-07_TUHH_Background/dvc.lock b/tools/machine-learning/data/HULKs/events/2015-10-07_TUHH_Background/dvc.lock deleted file mode 100644 index d194cc3..0000000 --- a/tools/machine-learning/data/HULKs/events/2015-10-07_TUHH_Background/dvc.lock +++ /dev/null @@ -1,10 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-corrected.json full-positives.tfrecord - deps: - - path: corrected-corrected.json - md5: 1fff2810a952eae58daaf64b457669f5 - - path: raw - md5: 3f92568e4b15e1df9299b2e1188c367f.dir - outs: - - path: full-positives.tfrecord - md5: efedc6c07d1159d1668c807acddfe694 diff --git a/tools/machine-learning/data/HULKs/events/2015-10-07_TUHH_Background/dvc.yaml b/tools/machine-learning/data/HULKs/events/2015-10-07_TUHH_Background/dvc.yaml deleted file mode 100644 index 23f84b2..0000000 --- a/tools/machine-learning/data/HULKs/events/2015-10-07_TUHH_Background/dvc.yaml +++ /dev/null @@ -1,8 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-corrected.json full-positives.tfrecord - deps: - - corrected-corrected.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2016-03-20_TUHH_Ball/dvc.lock b/tools/machine-learning/data/HULKs/events/2016-03-20_TUHH_Ball/dvc.lock deleted file mode 100644 index 53f4b0d..0000000 --- a/tools/machine-learning/data/HULKs/events/2016-03-20_TUHH_Ball/dvc.lock +++ /dev/null @@ -1,10 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected.json full-positives.tfrecord - deps: - - path: corrected.json - md5: 15700eb4b486f05a681ceabe4b427390 - - path: raw - md5: 8a6a2b33cef6cc3d63d7ff14206dc5a5.dir - outs: - - path: full-positives.tfrecord - md5: 8f485e0d95c749844dc8aaa7514a21ef diff --git a/tools/machine-learning/data/HULKs/events/2016-03-20_TUHH_Ball/dvc.yaml b/tools/machine-learning/data/HULKs/events/2016-03-20_TUHH_Ball/dvc.yaml deleted file mode 100644 index eb7d117..0000000 --- a/tools/machine-learning/data/HULKs/events/2016-03-20_TUHH_Ball/dvc.yaml +++ /dev/null @@ -1,8 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected.json full-positives.tfrecord - deps: - - corrected.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/DutchNaoTeam/dvc.lock b/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/DutchNaoTeam/dvc.lock deleted file mode 100644 index 4f1fa57..0000000 --- a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/DutchNaoTeam/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 05970c77d482c7c479ee35f36be783c9 - - path: raw - md5: 015011b58608a41b7e38a371c4cf97cb.dir - outs: - - path: covered-positives.tfrecord - md5: 6d50f357a223be59542b3e44c908c85a -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 85ec24a438ebb4bea2fc21620e9e0b81 - - path: raw - md5: 015011b58608a41b7e38a371c4cf97cb.dir - outs: - - path: full-positives.tfrecord - md5: 2db2312fdde397fce1569d13dbc9562e diff --git a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/DutchNaoTeam/dvc.yaml b/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/DutchNaoTeam/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/DutchNaoTeam/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/HTWK/dvc.lock b/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/HTWK/dvc.lock deleted file mode 100644 index 94adc3c..0000000 --- a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/HTWK/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 7a34d8f6d4572d5a2f7d03c6a23ab9c6 - - path: raw - md5: bcd3ce6ba465ccc67337d21121d29bb2.dir - outs: - - path: full-positives.tfrecord - md5: b537a49fb41337caa831df321a5c8ec8 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 7524e30bd724de67d46b5e8a5d95dade - - path: raw - md5: bcd3ce6ba465ccc67337d21121d29bb2.dir - outs: - - path: covered-positives.tfrecord - md5: 36948a3256f88d9c883845c09e0bd0b6 diff --git a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/HTWK/dvc.yaml b/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/HTWK/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/HTWK/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/MRL/dvc.lock b/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/MRL/dvc.lock deleted file mode 100644 index bbf8bd8..0000000 --- a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/MRL/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 37731e67a651c0d2d3cf54473ba1bb1e - - path: raw - md5: a1cbd6712d93dd795b53a20c1eaf3eb9.dir - outs: - - path: covered-positives.tfrecord - md5: 223309810403bcb4b0b02aefa7d6b10d -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 4b14a400ff87a455f8c049975759d05e - - path: raw - md5: a1cbd6712d93dd795b53a20c1eaf3eb9.dir - outs: - - path: full-positives.tfrecord - md5: d13f533abb2f6107c7bfe6809f583720 diff --git a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/MRL/dvc.yaml b/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/MRL/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/MRL/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/Test/dvc.lock b/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/Test/dvc.lock deleted file mode 100644 index b884060..0000000 --- a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/Test/dvc.lock +++ /dev/null @@ -1,10 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: add2796d1799f84044b168ce354d3746 - - path: raw - md5: 62117a42d9a239a233034ab84dc99d58.dir - outs: - - path: full-positives.tfrecord - md5: 42fdb7b56bfa1d43e584ed87240e0131 diff --git a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/Test/dvc.yaml b/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/Test/dvc.yaml deleted file mode 100644 index a4e5550..0000000 --- a/tools/machine-learning/data/HULKs/events/2017-04_IranOpen2017/Test/dvc.yaml +++ /dev/null @@ -1,8 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2017-07-16_MZH/2017-07-15/dvc.lock b/tools/machine-learning/data/HULKs/events/2017-07-16_MZH/2017-07-15/dvc.lock deleted file mode 100644 index e63f474..0000000 --- a/tools/machine-learning/data/HULKs/events/2017-07-16_MZH/2017-07-15/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: b7a02b046769ef2d8977e5b2403e675b - - path: raw - md5: 0d81d0d9d7440edf401d250fb86dd1d7.dir - outs: - - path: covered-positives.tfrecord - md5: 0b37d6f3253ec22ef89558ff00b423e2 -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: c369836110409fd03657f67b085d4b19 - - path: raw - md5: 0d81d0d9d7440edf401d250fb86dd1d7.dir - outs: - - path: full-positives.tfrecord - md5: 8b2a746b13c1570d7e821513294211f3 diff --git a/tools/machine-learning/data/HULKs/events/2017-07-16_MZH/2017-07-15/dvc.yaml b/tools/machine-learning/data/HULKs/events/2017-07-16_MZH/2017-07-15/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2017-07-16_MZH/2017-07-15/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2017-11-01_N0.007/dvc.lock b/tools/machine-learning/data/HULKs/events/2017-11-01_N0.007/dvc.lock deleted file mode 100644 index b2f3359..0000000 --- a/tools/machine-learning/data/HULKs/events/2017-11-01_N0.007/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 770fec3f4083d4398533547412e5be09 - - path: raw - md5: 0769ebb80e32fa5769d6187d397c7ebe.dir - outs: - - path: full-positives.tfrecord - md5: f924693e25c0764d1568adfff2f5f056 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 2d476dfec88b887af89b7025468bc08c - - path: raw - md5: 0769ebb80e32fa5769d6187d397c7ebe.dir - outs: - - path: covered-positives.tfrecord - md5: 7687800f0d3f4b9c318b94f779c73813 diff --git a/tools/machine-learning/data/HULKs/events/2017-11-01_N0.007/dvc.yaml b/tools/machine-learning/data/HULKs/events/2017-11-01_N0.007/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2017-11-01_N0.007/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2017-12-06_SMD/Test-2017-12-06-2/dvc.lock b/tools/machine-learning/data/HULKs/events/2017-12-06_SMD/Test-2017-12-06-2/dvc.lock deleted file mode 100644 index f1365c3..0000000 --- a/tools/machine-learning/data/HULKs/events/2017-12-06_SMD/Test-2017-12-06-2/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: e10252443d86f6357e2947c0cc0d84a8 - - path: raw - md5: daca69136c8311434dfeacb1e5305e41.dir - outs: - - path: covered-positives.tfrecord - md5: 746d256e1afb18ac1925b43f5e6a0de8 -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 3b4f6a4bee6a066f1d2e998d1412965b - - path: raw - md5: daca69136c8311434dfeacb1e5305e41.dir - outs: - - path: full-positives.tfrecord - md5: eb7f76a44890888277610b6d1159247d diff --git a/tools/machine-learning/data/HULKs/events/2017-12-06_SMD/Test-2017-12-06-2/dvc.yaml b/tools/machine-learning/data/HULKs/events/2017-12-06_SMD/Test-2017-12-06-2/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2017-12-06_SMD/Test-2017-12-06-2/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-02-20_testgame/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-02-20_testgame/dvc.lock deleted file mode 100644 index 981dec5..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-02-20_testgame/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 06f49b878d37691c89310f0d7ec92d6b - - path: raw - md5: b2018643e5c37c8ab52387e26611d747.dir - outs: - - path: covered-positives.tfrecord - md5: 454177e8799060292f1cbb51073aad9a -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 73c0f9803c3212adbf9e34395daef678 - - path: raw - md5: b2018643e5c37c8ab52387e26611d747.dir - outs: - - path: full-positives.tfrecord - md5: b8f3fc994029ce07334799f78795a820 diff --git a/tools/machine-learning/data/HULKs/events/2018-02-20_testgame/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-02-20_testgame/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-02-20_testgame/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-26_GO18_bhuman_goldenGoal/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-26_GO18_bhuman_goldenGoal/dvc.lock deleted file mode 100644 index 18c78ce..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-26_GO18_bhuman_goldenGoal/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: af1c1638d7c2e55a08a31f2d9700179c - - path: raw - md5: 76e3093f5a751c8d7e59676cd911b417.dir - outs: - - path: full-positives.tfrecord - md5: f606af8b5ebd1f74b5ed4a98d75a73a6 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 114a4d6fe8f0724d31c94e62b02f4e77 - - path: raw - md5: 76e3093f5a751c8d7e59676cd911b417.dir - outs: - - path: covered-positives.tfrecord - md5: c2b125f2c3651f90daf6e80c610f720e diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-26_GO18_bhuman_goldenGoal/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-26_GO18_bhuman_goldenGoal/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-26_GO18_bhuman_goldenGoal/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-27_GO18_berlinUnited_goldenGoal/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-27_GO18_berlinUnited_goldenGoal/dvc.lock deleted file mode 100644 index 4dd0384..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-27_GO18_berlinUnited_goldenGoal/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 77b658d3322234889b4a87a9f6250f0d - - path: raw - md5: 3f1205eb430378e544891df0b802112f.dir - outs: - - path: full-positives.tfrecord - md5: 080cbbc38d949044ecce9644e13bff61 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: c91cc8df614cc16808b2c91d6c4efb4b - - path: raw - md5: 3f1205eb430378e544891df0b802112f.dir - outs: - - path: covered-positives.tfrecord - md5: 800d37ab2d3367fd9f2da5877a295e45 diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-27_GO18_berlinUnited_goldenGoal/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-27_GO18_berlinUnited_goldenGoal/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-27_GO18_berlinUnited_goldenGoal/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-27_GO18_naoDevils_goldenGoal/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-27_GO18_naoDevils_goldenGoal/dvc.lock deleted file mode 100644 index dd51ab9..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-27_GO18_naoDevils_goldenGoal/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: a7344eca6b37585f8f4dc6ed5eca6c6d - - path: raw - md5: 06bc3b87b7ee1838a50f4d66cb3e6037.dir - outs: - - path: full-positives.tfrecord - md5: 4cda848289f54ba791877292efed725a -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: bf1f66c6fcb84697d29d3b1ac78ad691 - - path: raw - md5: 06bc3b87b7ee1838a50f4d66cb3e6037.dir - outs: - - path: covered-positives.tfrecord - md5: 4e755cbe7d73a91b4316451ac649f0d1 diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-27_GO18_naoDevils_goldenGoal/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-27_GO18_naoDevils_goldenGoal/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-27_GO18_naoDevils_goldenGoal/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_Bembelbots_golden_goal/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_Bembelbots_golden_goal/dvc.lock deleted file mode 100644 index cde1911..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_Bembelbots_golden_goal/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 71a66116bda468578607c9d81cd359e1 - - path: raw - md5: b79ee41c1709013af7b152719e6b2d8f.dir - outs: - - path: covered-positives.tfrecord - md5: 9fb4e1238fe8e08cc89ab45c02ecbfeb -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 3c2e58ed74c1e6646f4b81bb669330d4 - - path: raw - md5: b79ee41c1709013af7b152719e6b2d8f.dir - outs: - - path: full-positives.tfrecord - md5: db7d33605f5155d25bc763ed05c79db4 diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_Bembelbots_golden_goal/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_Bembelbots_golden_goal/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_Bembelbots_golden_goal/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_HTWK_goldenGoal/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_HTWK_goldenGoal/dvc.lock deleted file mode 100644 index b1626e7..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_HTWK_goldenGoal/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 7de4e9c3f07e23f39eb5ced7ad15fb8f - - path: raw - md5: ea15dcf4223d02fb8d82e76187c199ce.dir - outs: - - path: covered-positives.tfrecord - md5: 8c7199daaeaa0a6821d034e9b7fc76f6 -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 0302448b45aac95492d506e6187f5110 - - path: raw - md5: ea15dcf4223d02fb8d82e76187c199ce.dir - outs: - - path: full-positives.tfrecord - md5: bd6620c99e33000ffbf9487740bb555e diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_HTWK_goldenGoal/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_HTWK_goldenGoal/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_HTWK_goldenGoal/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_Nomadz_goldenGoal/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_Nomadz_goldenGoal/dvc.lock deleted file mode 100644 index 89bacbc..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_Nomadz_goldenGoal/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 5889cd4d00e8209d1f450cdcecd243ee - - path: raw - md5: edae5accb7c24c5ae416b42fc757675c.dir - outs: - - path: full-positives.tfrecord - md5: 2ffcf3643a91a73f236aa1afec952856 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 9b7a5d7e1f0cdf9676e1983e570629d0 - - path: raw - md5: edae5accb7c24c5ae416b42fc757675c.dir - outs: - - path: covered-positives.tfrecord - md5: 40344dd928c382d45857b7d7ebb1b862 diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_Nomadz_goldenGoal/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_Nomadz_goldenGoal/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-28_GO18_Nomadz_goldenGoal/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/dvc.lock deleted file mode 100644 index 7db2675..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/dvc.lock +++ /dev/null @@ -1,71 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 42f90a3c3b743ce611ad9ad4add06b3f - - path: raw - md5: 91a45fe599f02ff3258b499345b09661.dir - outs: - - path: covered-positives.tfrecord - md5: bac34931e2fa13965ed9ca66f808532d -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 7eebd1e38683157a38e5698fa8eeeb3e - - path: raw - md5: 91a45fe599f02ff3258b499345b09661.dir - outs: - - path: full-positives.tfrecord - md5: 92c853236690afcf11f71557f1551c15 -sample-negatives-1: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining.json - corrected-removed.json negatives-1.tfrecord - deps: - - path: corrected-remaining.json - md5: d1d50e809799231f5af6929860344ccd - size: 2362 - - path: corrected-removed.json - md5: b082b1df3e7d95577600478d7978afac - size: 1764 - - path: raw - md5: 91a45fe599f02ff3258b499345b09661.dir - size: 13495614 - nfiles: 46 - outs: - - path: negatives-1.tfrecord - md5: 43a8a7a323d9d2ddb51449fe2dee7aab - size: 27121 -sample-negatives-0: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining.json - removed.json negatives-0.tfrecord - deps: - - path: corrected-remaining.json - md5: d1d50e809799231f5af6929860344ccd - size: 2362 - - path: raw - md5: 91a45fe599f02ff3258b499345b09661.dir - size: 13495614 - nfiles: 46 - - path: removed.json - md5: dc897eca3100b895a9cb8f195bf24d1e - size: 1764 - outs: - - path: negatives-0.tfrecord - md5: 81cd3a5a77d5ee6ce98e599b6b06e688 - size: 26041 -sample-random-negatives: - cmd: random-negative-sampler corrected-remaining.json random-negatives.tfrecord - deps: - - path: corrected-remaining.json - md5: d1d50e809799231f5af6929860344ccd - size: 2362 - - path: raw - md5: 91a45fe599f02ff3258b499345b09661.dir - size: 13495614 - nfiles: 46 - outs: - - path: random-negatives.tfrecord - md5: f1a37b9e95bbe7add632b97b895e54f1 - size: 87938 diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/dvc.yaml deleted file mode 100644 index c706505..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_3rdPlace_1st_half_onlyOne/dvc.yaml +++ /dev/null @@ -1,41 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-negatives-1: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining.json - corrected-removed.json negatives-1.tfrecord - deps: - - corrected-remaining.json - - corrected-removed.json - - raw - outs: - - negatives-1.tfrecord - sample-negatives-0: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining.json - removed.json negatives-0.tfrecord - deps: - - corrected-remaining.json - - raw - - removed.json - outs: - - negatives-0.tfrecord - sample-random-negatives: - cmd: random-negative-sampler corrected-remaining.json random-negatives.tfrecord - deps: - - corrected-remaining.json - - raw - outs: - - random-negatives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_goldenGoal/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_goldenGoal/dvc.lock deleted file mode 100644 index 9ebcbfc..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_goldenGoal/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 3573084782e0673fd2949d47035178be - - path: raw - md5: 096772e4768f87c4dce79a834138740f.dir - outs: - - path: full-positives.tfrecord - md5: 11fda9e123fa257c95400fb26acc1109 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: cc1c0a2c23d97e0b61aa869d57cc058e - - path: raw - md5: 096772e4768f87c4dce79a834138740f.dir - outs: - - path: covered-positives.tfrecord - md5: d94a270348becdf36ccb40d10fb7e134 diff --git a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_goldenGoal/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_goldenGoal/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_GermanOpen2018/2018-04-29_GO18_Bhuman_goldenGoal/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-04_IranOpen2018/2018-04-06_Testgame02_penShotout/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-04_IranOpen2018/2018-04-06_Testgame02_penShotout/dvc.lock deleted file mode 100644 index 451f2bb..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_IranOpen2018/2018-04-06_Testgame02_penShotout/dvc.lock +++ /dev/null @@ -1,10 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: a1348fb2b0ff5856a9294c17f07e27db - - path: raw - md5: 4cd87c09d0055b486acab77dbcaa07f7.dir - outs: - - path: full-positives.tfrecord - md5: 95730368523dc320e810b4560eaf9148 diff --git a/tools/machine-learning/data/HULKs/events/2018-04_IranOpen2018/2018-04-06_Testgame02_penShotout/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-04_IranOpen2018/2018-04-06_Testgame02_penShotout/dvc.yaml deleted file mode 100644 index a4e5550..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_IranOpen2018/2018-04-06_Testgame02_penShotout/dvc.yaml +++ /dev/null @@ -1,8 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-04_IranOpen2018/2018-04-07_HTWK_GoldenGoal/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-04_IranOpen2018/2018-04-07_HTWK_GoldenGoal/dvc.lock deleted file mode 100644 index 52e533d..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_IranOpen2018/2018-04-07_HTWK_GoldenGoal/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 0e8d10afd1b1123e52e93a73203fa5a5 - - path: raw - md5: e04e4afb3b94e8c6326fe650336f3c09.dir - outs: - - path: covered-positives.tfrecord - md5: 1c90d4c40dbb59b2bde7c53e63f91401 -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 578d83fdca6ac5a4c540454c69a3462e - - path: raw - md5: e04e4afb3b94e8c6326fe650336f3c09.dir - outs: - - path: full-positives.tfrecord - md5: fa1c76702c7ec83f8346ec82f34ab108 diff --git a/tools/machine-learning/data/HULKs/events/2018-04_IranOpen2018/2018-04-07_HTWK_GoldenGoal/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-04_IranOpen2018/2018-04-07_HTWK_GoldenGoal/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-04_IranOpen2018/2018-04-07_HTWK_GoldenGoal/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-06-12_testgame2/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-06-12_testgame2/dvc.lock deleted file mode 100644 index 93e416c..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06-12_testgame2/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 968cc922f6b735f74002712b210fd033 - - path: raw - md5: 15d9a3ffcb49f634a5107a434f4eb30c.dir - outs: - - path: full-positives.tfrecord - md5: 0d808e6ec1a6f8d55b950ce0beeae6a0 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 0bb2f8f7f9beac1f84d697cab1aae077 - - path: raw - md5: 15d9a3ffcb49f634a5107a434f4eb30c.dir - outs: - - path: covered-positives.tfrecord - md5: c923a0ed2ce72dff795b73a489e76240 diff --git a/tools/machine-learning/data/HULKs/events/2018-06-12_testgame2/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-06-12_testgame2/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06-12_testgame2/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-17-RC2018_Bhuman_HULKs_goldenGoal/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-17-RC2018_Bhuman_HULKs_goldenGoal/dvc.lock deleted file mode 100644 index 00060c9..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-17-RC2018_Bhuman_HULKs_goldenGoal/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 2bf71dbd1c9d5659a083435111159123 - - path: raw - md5: 9d41403ef09c693d02b94023cdccdaf8.dir - outs: - - path: full-positives.tfrecord - md5: 516818c538660ed706e69ff173dd0676 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 862745cbbf67acd8940c348594aadd63 - - path: raw - md5: 9d41403ef09c693d02b94023cdccdaf8.dir - outs: - - path: covered-positives.tfrecord - md5: 3184bc7e5a69ab62f93d3f3105a3833d diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-17-RC2018_Bhuman_HULKs_goldenGoal/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-17-RC2018_Bhuman_HULKs_goldenGoal/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-17-RC2018_Bhuman_HULKs_goldenGoal/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-18-RC2018_HULKs_BerlinUnited_gg/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-18-RC2018_HULKs_BerlinUnited_gg/dvc.lock deleted file mode 100644 index de0007e..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-18-RC2018_HULKs_BerlinUnited_gg/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: ab2bb4774ad729cf7ce3d4e16c0fd66a - - path: raw - md5: dd8a9efb5f25ea6ce54f4cafa35e72ce.dir - outs: - - path: covered-positives.tfrecord - md5: 4e74e406080aa4833fcd8726b90f003e -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 78d70886aa0127e3533c88d8ce19f9c6 - - path: raw - md5: dd8a9efb5f25ea6ce54f4cafa35e72ce.dir - outs: - - path: full-positives.tfrecord - md5: 5793e9901c9a0dedf469f9ebb7c00664 diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-18-RC2018_HULKs_BerlinUnited_gg/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-18-RC2018_HULKs_BerlinUnited_gg/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-18-RC2018_HULKs_BerlinUnited_gg/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-18-RC2018_UTAustin_HULKs/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-18-RC2018_UTAustin_HULKs/dvc.lock deleted file mode 100644 index 1eb15e8..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-18-RC2018_UTAustin_HULKs/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 5e1a7a25bb79c94ecb790d999e68499d - - path: raw - md5: 9554ad579d647542c514a5f00053dd49.dir - outs: - - path: covered-positives.tfrecord - md5: 79930a16f47eb7bb4bac461fcf958004 -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 174a318f43a3ace445d1a832b5bcd0e7 - - path: raw - md5: 9554ad579d647542c514a5f00053dd49.dir - outs: - - path: full-positives.tfrecord - md5: f7f66fc91b8fc653938e71627855af8c diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-18-RC2018_UTAustin_HULKs/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-18-RC2018_UTAustin_HULKs/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-18-RC2018_UTAustin_HULKs/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_1stHalf/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_1stHalf/dvc.lock deleted file mode 100644 index c4618a0..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_1stHalf/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: f757145526b8371d7fa2a94622d33b3f - - path: raw - md5: 718d254a124347e8f9bd45527e0f6472.dir - outs: - - path: covered-positives.tfrecord - md5: 0bde75f443a6d720365086d590c6cdf3 -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 80d7fe3d18af9ae731a85a0ca371fce3 - - path: raw - md5: 718d254a124347e8f9bd45527e0f6472.dir - outs: - - path: full-positives.tfrecord - md5: c9e85f4a3f80af2fb6d7759ad9ee3faf diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_1stHalf/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_1stHalf/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_1stHalf/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_2ndHalf/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_2ndHalf/dvc.lock deleted file mode 100644 index 177c822..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_2ndHalf/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 6df379dfacc71eaf3d1d5ed826aa4bd1 - - path: raw - md5: 9859ad6d7bac61d64c7ba1e87f1e4739.dir - outs: - - path: covered-positives.tfrecord - md5: cab1283c76733aac9ef5069157861abe -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: f3a8fa24720758546aa20750670d3ed2 - - path: raw - md5: 9859ad6d7bac61d64c7ba1e87f1e4739.dir - outs: - - path: full-positives.tfrecord - md5: 9766246921f68a13db1e85846ed1d986 diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_2ndHalf/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_2ndHalf/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_2ndHalf/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_gg/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_gg/dvc.lock deleted file mode 100644 index 16d86c3..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_gg/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 9f3fd141e3215216e15b4dea693f8b5b - - path: raw - md5: 3bea84e45a5c1d101e63d1e991d3310f.dir - outs: - - path: full-positives.tfrecord - md5: 1a45b8d4f2c47bfe5e3b2756d443785b -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: f6a95d3ab8b03beb70ad1ed2fd2d50e1 - - path: raw - md5: 3bea84e45a5c1d101e63d1e991d3310f.dir - outs: - - path: covered-positives.tfrecord - md5: d3c1a0ae273d4d34ff291fa688e795ea diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_gg/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_gg/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-19-RC2018_BHuman_HULKs_E_gg/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-20-RC2018_runswift_HULKs_gg/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-20-RC2018_runswift_HULKs_gg/dvc.lock deleted file mode 100644 index f117e2d..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-20-RC2018_runswift_HULKs_gg/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 09221d0030aaff45a21e9d1474d4415d - - path: raw - md5: d2263b7c02cf163c0abb97d3e76435f7.dir - outs: - - path: full-positives.tfrecord - md5: 59dc73e98fd7e882920698303a63bab2 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 47b3923b870b54c137637879317ee70a - - path: raw - md5: d2263b7c02cf163c0abb97d3e76435f7.dir - outs: - - path: covered-positives.tfrecord - md5: 4ce93817d33e94eb1cb8a2f6be7478af diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-20-RC2018_runswift_HULKs_gg/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-20-RC2018_runswift_HULKs_gg/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-20-RC2018_runswift_HULKs_gg/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-20-RC2018_uchile_HULKs_gg/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-20-RC2018_uchile_HULKs_gg/dvc.lock deleted file mode 100644 index 634e767..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-20-RC2018_uchile_HULKs_gg/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: bb0e5a035e805e4c4899edded1813dce - - path: raw - md5: 1666599f7bbeb842df6e9deae8cc981d.dir - outs: - - path: covered-positives.tfrecord - md5: 37c36911aa78f6406eb5af3e12fe404e -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: c27d11fc621d31344b148b48a776bca0 - - path: raw - md5: 1666599f7bbeb842df6e9deae8cc981d.dir - outs: - - path: full-positives.tfrecord - md5: aec924814e86014f1f14978fee260cf6 diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-20-RC2018_uchile_HULKs_gg/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-20-RC2018_uchile_HULKs_gg/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-20-RC2018_uchile_HULKs_gg/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-21-RC2018_htwk_HULKs_gg/dvc.lock b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-21-RC2018_htwk_HULKs_gg/dvc.lock deleted file mode 100644 index 04179b0..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-21-RC2018_htwk_HULKs_gg/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: dabd004e531e66c7ff94decfd0b9d509 - - path: raw - md5: ecae0b00ac79f917d258048000754785.dir - outs: - - path: full-positives.tfrecord - md5: 254bc2322c9c617811f9006e8ad7f14f -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 24efe6c1fe1a74b7f55c3073e0917ae4 - - path: raw - md5: ecae0b00ac79f917d258048000754785.dir - outs: - - path: covered-positives.tfrecord - md5: a18d280343899fd9302e4783ae726c62 diff --git a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-21-RC2018_htwk_HULKs_gg/dvc.yaml b/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-21-RC2018_htwk_HULKs_gg/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2018-06_RobocupCanada/2018-06-21-RC2018_htwk_HULKs_gg/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-04-03_master_ballDetectionOpenCv/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-04-03_master_ballDetectionOpenCv/dvc.lock deleted file mode 100644 index fd96c0f..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-04-03_master_ballDetectionOpenCv/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 8a2941c04106486bb8051a18003d4008 - - path: raw - md5: 0023850954fe458599423053f5aa0e04.dir - outs: - - path: full-positives.tfrecord - md5: 7ff8d3ff527f0a19640e19fed1f87ace -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: ea0009c31c71a84b8ed54279ade75307 - - path: raw - md5: 0023850954fe458599423053f5aa0e04.dir - outs: - - path: covered-positives.tfrecord - md5: 53dd2aaf19f092d8b4882613997632a8 diff --git a/tools/machine-learning/data/HULKs/events/2019-04-03_master_ballDetectionOpenCv/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-04-03_master_ballDetectionOpenCv/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-04-03_master_ballDetectionOpenCv/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-04-13_bhuman_HTBgame01/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-04-13_bhuman_HTBgame01/dvc.lock deleted file mode 100644 index 50267db..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-04-13_bhuman_HTBgame01/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 9d175f6e71918f20c3c3113ad80e0fb4 - - path: raw - md5: b9e77dbb45e098a1743a67540f5bdbe3.dir - outs: - - path: covered-positives.tfrecord - md5: b758e54c159837e48547abbbb52e79cb -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: dfd5743887900bd093e451aa180ba6b7 - - path: raw - md5: b9e77dbb45e098a1743a67540f5bdbe3.dir - outs: - - path: full-positives.tfrecord - md5: ca73149eef0e940e969f49639127798b diff --git a/tools/machine-learning/data/HULKs/events/2019-04-13_bhuman_HTBgame01/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-04-13_bhuman_HTBgame01/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-04-13_bhuman_HTBgame01/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-04-17_smd_ballDete_stiffLoss_inwalkKicks2/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-04-17_smd_ballDete_stiffLoss_inwalkKicks2/dvc.lock deleted file mode 100644 index 0df52ce..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-04-17_smd_ballDete_stiffLoss_inwalkKicks2/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 71bb6430498a79d571b0c34838f650d6 - - path: raw - md5: de49fab27754c8e5b082f7a2bbf62a7a.dir - outs: - - path: full-positives.tfrecord - md5: 87a0ef8e92451479ca282189759f9370 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 71deaf1ca5cb393baffab84c0a839a2c - - path: raw - md5: de49fab27754c8e5b082f7a2bbf62a7a.dir - outs: - - path: covered-positives.tfrecord - md5: 1a14b22fb7fae1fd275c8ffc3fb51df8 diff --git a/tools/machine-learning/data/HULKs/events/2019-04-17_smd_ballDete_stiffLoss_inwalkKicks2/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-04-17_smd_ballDete_stiffLoss_inwalkKicks2/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-04-17_smd_ballDete_stiffLoss_inwalkKicks2/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-04-25_Test_Game_1_Foot_Selection/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-04-25_Test_Game_1_Foot_Selection/dvc.lock deleted file mode 100644 index 440f5ce..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-04-25_Test_Game_1_Foot_Selection/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 7f21610ed7c28c833fe01057854ef6f9 - - path: raw - md5: c05aa4ed5259f2fcdfbe2adc01b06bf0.dir - outs: - - path: full-positives.tfrecord - md5: d58a41c3591618687887ae3e51041c5d -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: b670e3e4747023752221e80472abca34 - - path: raw - md5: c05aa4ed5259f2fcdfbe2adc01b06bf0.dir - outs: - - path: covered-positives.tfrecord - md5: 940f234b6134c5d18ac9014fb1fafa6d diff --git a/tools/machine-learning/data/HULKs/events/2019-04-25_Test_Game_1_Foot_Selection/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-04-25_Test_Game_1_Foot_Selection/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-04-25_Test_Game_1_Foot_Selection/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HTWK_HULKs_first_half/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HTWK_HULKs_first_half/dvc.lock deleted file mode 100644 index 0a5c135..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HTWK_HULKs_first_half/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 3f7962f62ce9550890987adc7bd3add1 - - path: raw - md5: a8abb2db63fb1f7b0f0fcdb5327741ca.dir - outs: - - path: covered-positives.tfrecord - md5: 08e55e3a1ce4d896ae0de2800f5f7c7e -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 055c84b22aa61b6222c9ebf87bd4cee0 - - path: raw - md5: a8abb2db63fb1f7b0f0fcdb5327741ca.dir - outs: - - path: full-positives.tfrecord - md5: 635e09fc7cda6d395625a15d9c5718ae diff --git a/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HTWK_HULKs_first_half/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HTWK_HULKs_first_half/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HTWK_HULKs_first_half/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/dvc.lock deleted file mode 100644 index b2b6b7a..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/dvc.lock +++ /dev/null @@ -1,53 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 514b029a6d3fa7ce5692b47864a2182a - - path: raw - md5: dd058a28fec87992001b747ec18aa60a.dir - outs: - - path: full-positives.tfrecord - md5: d2d28fb290ddd5e220e23bfc1d4a1a50 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 18a80f6fbdd1ac8edcee20898c3215bf - - path: raw - md5: dd058a28fec87992001b747ec18aa60a.dir - outs: - - path: covered-positives.tfrecord - md5: 5ecea1e0527cc3c0cf14ee525b0c82ae -sample-negatives: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-corrected.json - removed.json negatives.tfrecord - deps: - - path: corrected-corrected.json - md5: 0a7062e1314501a28b998e47aa86cf7f - size: 275840 - - path: raw - md5: dd058a28fec87992001b747ec18aa60a.dir - size: 2063458189 - nfiles: 3117 - - path: removed.json - md5: af42fc2f4c1e9e4f6888c7a6ea4f7a6d - size: 234820 - outs: - - path: negatives.tfrecord - md5: d651fa3c06a27ce836b48102386dfcf9 - size: 6067518 -sample-random-negatives: - cmd: random-negative-sampler corrected-corrected.json random-negatives.tfrecord - deps: - - path: corrected-corrected.json - md5: 0a7062e1314501a28b998e47aa86cf7f - size: 275840 - - path: raw - md5: dd058a28fec87992001b747ec18aa60a.dir - size: 2063458189 - nfiles: 3117 - outs: - - path: random-negatives.tfrecord - md5: d3e1cfb8446295bbf5544e6a375d2fab - size: 58020886 diff --git a/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/dvc.yaml deleted file mode 100644 index 2916c1c..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_first_half/dvc.yaml +++ /dev/null @@ -1,32 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-negatives: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-corrected.json - removed.json negatives.tfrecord - deps: - - corrected-corrected.json - - raw - - removed.json - outs: - - negatives.tfrecord - sample-random-negatives: - cmd: random-negative-sampler corrected-corrected.json random-negatives.tfrecord - deps: - - corrected-corrected.json - - raw - outs: - - random-negatives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/dvc.lock deleted file mode 100644 index d799a0c..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/dvc.lock +++ /dev/null @@ -1,71 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 839a8442f5f26b3860a2768162cd6b47 - - path: raw - md5: 7fe4da30853d8dc0faf6ad750a1b4746.dir - outs: - - path: covered-positives.tfrecord - md5: 70c11b5e202742cb3f9a48c4bb93da12 -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 1b9c374bc10c4cddd4599a4dad301baa - - path: raw - md5: 7fe4da30853d8dc0faf6ad750a1b4746.dir - outs: - - path: full-positives.tfrecord - md5: 681f53bb88375f5439f2c4da760052d6 -sample-negatives-0: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-corrected.json - removed.json negatives-0.tfrecord - deps: - - path: corrected-corrected.json - md5: ecd8db6cc14c49903ce31e70ecba87b5 - size: 285689 - - path: raw - md5: 7fe4da30853d8dc0faf6ad750a1b4746.dir - size: 2124093784 - nfiles: 3129 - - path: removed.json - md5: e40ef34c73798ff7af88dcdde3b6affb - size: 263852 - outs: - - path: negatives-0.tfrecord - md5: 5425c01f449e92d08045508197d9e6f6 - size: 11002266 -sample-negatives-1: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-corrected.json - corrected-removed.json negatives-1.tfrecord - deps: - - path: corrected-corrected.json - md5: ecd8db6cc14c49903ce31e70ecba87b5 - size: 285689 - - path: corrected-removed.json - md5: ee411b80e9ef802106c59ea2ab0d80b8 - size: 197697 - - path: raw - md5: 7fe4da30853d8dc0faf6ad750a1b4746.dir - size: 2124093784 - nfiles: 3129 - outs: - - path: negatives-1.tfrecord - md5: 6eb60f830fa5110d09da50454468f531 - size: 28235 -sample-random-negatives: - cmd: random-negative-sampler corrected-corrected.json random-negatives.tfrecord - deps: - - path: corrected-corrected.json - md5: ecd8db6cc14c49903ce31e70ecba87b5 - size: 285689 - - path: raw - md5: 7fe4da30853d8dc0faf6ad750a1b4746.dir - size: 2124093784 - nfiles: 3129 - outs: - - path: random-negatives.tfrecord - md5: f5375ade6701d468fca75102d0f7ef0f - size: 63211361 diff --git a/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/dvc.yaml deleted file mode 100644 index 47cc7ea..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-05_GermanOpen2019/2019-05-03_GO19_HULKs_NomadZ_second_half/dvc.yaml +++ /dev/null @@ -1,41 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-negatives-0: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-corrected.json - removed.json negatives-0.tfrecord - deps: - - corrected-corrected.json - - raw - - removed.json - outs: - - negatives-0.tfrecord - sample-negatives-1: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-corrected.json - corrected-removed.json negatives-1.tfrecord - deps: - - corrected-corrected.json - - corrected-removed.json - - raw - outs: - - negatives-1.tfrecord - sample-random-negatives: - cmd: random-negative-sampler corrected-corrected.json random-negatives.tfrecord - deps: - - corrected-corrected.json - - raw - outs: - - random-negatives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/dvc.lock deleted file mode 100644 index 428db07..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/dvc.lock +++ /dev/null @@ -1,53 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 2a8999dbc77044a2041fc40448799245 - - path: raw - md5: 04fae3e596647e57df67b4fe9ed0b084.dir - outs: - - path: full-positives.tfrecord - md5: 3f239db0eb08869cce431183a78c718a -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 3b09793146df62774e026d233d417407 - - path: raw - md5: 04fae3e596647e57df67b4fe9ed0b084.dir - outs: - - path: covered-positives.tfrecord - md5: 7b4a65b1a511eed8be2df79449ba780e -sample-negatives: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected.json - removed.json negatives.tfrecord - deps: - - path: corrected.json - md5: bbe61a110932692b747f0749fb27a9b3 - size: 269708 - - path: raw - md5: 04fae3e596647e57df67b4fe9ed0b084.dir - size: 1719420487 - nfiles: 2800 - - path: removed.json - md5: a4383de2600edf89e195c8f4bddfc6b3 - size: 207405 - outs: - - path: negatives.tfrecord - md5: 7f5e8e561987d4c0605ddd35b7516631 - size: 4643666 -sample-random-negatives: - cmd: random-negative-sampler corrected.json random-negatives.tfrecord - deps: - - path: corrected.json - md5: bbe61a110932692b747f0749fb27a9b3 - size: 269708 - - path: raw - md5: 04fae3e596647e57df67b4fe9ed0b084.dir - size: 1719420487 - nfiles: 2800 - outs: - - path: random-negatives.tfrecord - md5: 9fd9673712a28ebdbdba72fc1075b1fc - size: 38977546 diff --git a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/dvc.yaml deleted file mode 100644 index a56e7df..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_A_HULKs_UPennalizers_firstHalf/dvc.yaml +++ /dev/null @@ -1,32 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-negatives: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected.json - removed.json negatives.tfrecord - deps: - - corrected.json - - raw - - removed.json - outs: - - negatives.tfrecord - sample-random-negatives: - cmd: random-negative-sampler corrected.json random-negatives.tfrecord - deps: - - corrected.json - - raw - outs: - - random-negatives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_A_HULKs_UPennalizers_secondHalf/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_A_HULKs_UPennalizers_secondHalf/dvc.lock deleted file mode 100644 index 8db86a4..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_A_HULKs_UPennalizers_secondHalf/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: a2e14fb3c06f4387e38308d9474ddb73 - - path: raw - md5: 86abe0d69fd2819b8402b39493886fe1.dir - outs: - - path: full-positives.tfrecord - md5: 7a8ef0424e689f23df16d38232668f50 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 40864620dde5a6c8f513c4d4c29805d0 - - path: raw - md5: 86abe0d69fd2819b8402b39493886fe1.dir - outs: - - path: covered-positives.tfrecord - md5: 9fa97a2c139951246210419a9a6fd210 diff --git a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_A_HULKs_UPennalizers_secondHalf/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_A_HULKs_UPennalizers_secondHalf/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_A_HULKs_UPennalizers_secondHalf/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_B_mixedTeam_vs_SwiftArk_firstHalf/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_B_mixedTeam_vs_SwiftArk_firstHalf/dvc.lock deleted file mode 100644 index 3d8e82c..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_B_mixedTeam_vs_SwiftArk_firstHalf/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 3c9366996f42d513f3c71f2227c310e2 - - path: raw - md5: 26fa6ec397a15d57f555afef5bdcbbeb.dir - outs: - - path: covered-positives.tfrecord - md5: 007cad71fb5cff0015516d4fb9769f1e -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 9bf3b409186d749c4f554c6516aa18be - - path: raw - md5: 26fa6ec397a15d57f555afef5bdcbbeb.dir - outs: - - path: full-positives.tfrecord - md5: e5d488ee1162221db2e84c8688d497e7 diff --git a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_B_mixedTeam_vs_SwiftArk_firstHalf/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_B_mixedTeam_vs_SwiftArk_firstHalf/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_B_mixedTeam_vs_SwiftArk_firstHalf/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_B_mixedTeam_vs_SwiftArk_secondHalf/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_B_mixedTeam_vs_SwiftArk_secondHalf/dvc.lock deleted file mode 100644 index b5c3d67..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_B_mixedTeam_vs_SwiftArk_secondHalf/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: e72efad9a76b84aeb8058e0165cb1aff - - path: raw - md5: a6581c6a60ddf97678adef5573adc797.dir - outs: - - path: full-positives.tfrecord - md5: 9a4e66a6ab04d17910db6da7324aaa5a -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: e56843f09161df1677e9b37a04d22747 - - path: raw - md5: a6581c6a60ddf97678adef5573adc797.dir - outs: - - path: covered-positives.tfrecord - md5: 3d97d3303ecd9509e28cae75711cca44 diff --git a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_B_mixedTeam_vs_SwiftArk_secondHalf/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_B_mixedTeam_vs_SwiftArk_secondHalf/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_B_mixedTeam_vs_SwiftArk_secondHalf/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_D_BHuman_HULKs_firstHalf/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_D_BHuman_HULKs_firstHalf/dvc.lock deleted file mode 100644 index cb51e05..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_D_BHuman_HULKs_firstHalf/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: ded96e103255ffe68a5b0a1a872b3b46 - - path: raw - md5: bb4fc8ec54b0a21e0939ae867290d825.dir - outs: - - path: full-positives.tfrecord - md5: e6548c8d5f262a724008c276085b8a40 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 9e8ae5984983f1300f4fec5abe34397a - - path: raw - md5: bb4fc8ec54b0a21e0939ae867290d825.dir - outs: - - path: covered-positives.tfrecord - md5: 6dff3e7fcfe68fe8893dc9541377bfec diff --git a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_D_BHuman_HULKs_firstHalf/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_D_BHuman_HULKs_firstHalf/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_D_BHuman_HULKs_firstHalf/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_D_BHuman_HULKs_secondHalf/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_D_BHuman_HULKs_secondHalf/dvc.lock deleted file mode 100644 index ef28cd6..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_D_BHuman_HULKs_secondHalf/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: e1ea3e30f48567067429b3f14a9c58a9 - - path: raw - md5: 0c186b304b5ae13b0d786394a8fe3d30.dir - outs: - - path: covered-positives.tfrecord - md5: 22f45995c8fc0262b0aa55fbc9cca630 -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 6c522edda8a6d0408ad64a5734724da3 - - path: raw - md5: 0c186b304b5ae13b0d786394a8fe3d30.dir - outs: - - path: full-positives.tfrecord - md5: 8d8e41c265a15282d82d31756f33c51b diff --git a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_D_BHuman_HULKs_secondHalf/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_D_BHuman_HULKs_secondHalf/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-04_SPL_D_BHuman_HULKs_secondHalf/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_mixedTeam_vs_SPQR-starkit_firstHalf/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_mixedTeam_vs_SPQR-starkit_firstHalf/dvc.lock deleted file mode 100644 index a0df82a..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_mixedTeam_vs_SPQR-starkit_firstHalf/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: c1a4156476b8e54a375d90d68ae602c9 - - path: raw - md5: 4e7a2c3db3ae6bcd84ce2c23dc67a42b.dir - outs: - - path: covered-positives.tfrecord - md5: 85f26ad5a827bb51e90908ede0a56117 -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: baa4a1e7e33e2f4058af1ee72664d32f - - path: raw - md5: 4e7a2c3db3ae6bcd84ce2c23dc67a42b.dir - outs: - - path: full-positives.tfrecord - md5: fd677eb30b1597a57128a499750eedbc diff --git a/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_mixedTeam_vs_SPQR-starkit_firstHalf/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_mixedTeam_vs_SPQR-starkit_firstHalf/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_mixedTeam_vs_SPQR-starkit_firstHalf/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/dvc.lock deleted file mode 100644 index c66e3b0..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/dvc.lock +++ /dev/null @@ -1,53 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: dbdb0af2b097dae3f019821d7f65f287 - - path: raw - md5: 361bc876c0be4f0ce91a625205a6411c.dir - outs: - - path: covered-positives.tfrecord - md5: dc4570fa1233629a550b53390836320f -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: bc4671b8b276ea9829c4e5342711d52f - - path: raw - md5: 361bc876c0be4f0ce91a625205a6411c.dir - outs: - - path: full-positives.tfrecord - md5: ef2ab014274e2acf8ca31c53907b6543 -sample-negatives: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-corrected.json - removed.json negatives.tfrecord - deps: - - path: corrected-corrected.json - md5: 8df4b3080e07f06f9ac0521708fc6bdf - size: 433008 - - path: raw - md5: 361bc876c0be4f0ce91a625205a6411c.dir - size: 3214793752 - nfiles: 4806 - - path: removed.json - md5: 4952373216fa7760831e7a48ab2aba1b - size: 349721 - outs: - - path: negatives.tfrecord - md5: e9c3c888e43ad785e6f77961d4435419 - size: 7734049 -sample-random-negatives: - cmd: random-negative-sampler corrected-corrected.json random-negatives.tfrecord - deps: - - path: corrected-corrected.json - md5: 8df4b3080e07f06f9ac0521708fc6bdf - size: 433008 - - path: raw - md5: 361bc876c0be4f0ce91a625205a6411c.dir - size: 3214793752 - nfiles: 4806 - outs: - - path: random-negatives.tfrecord - md5: e4cc66434d8da7e54d429d5a835ccd40 - size: 95851471 diff --git a/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/dvc.yaml deleted file mode 100644 index 62be5d2..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_rUNSWift_HULKs_firstHalf/dvc.yaml +++ /dev/null @@ -1,32 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-negatives: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-corrected.json - removed.json negatives.tfrecord - deps: - - corrected-corrected.json - - raw - - removed.json - outs: - - negatives.tfrecord - sample-random-negatives: - cmd: random-negative-sampler corrected-corrected.json random-negatives.tfrecord - deps: - - corrected-corrected.json - - raw - outs: - - random-negatives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/dvc.lock deleted file mode 100644 index 62dc653..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/dvc.lock +++ /dev/null @@ -1,71 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 08f2a5c34441fbef8b58ac3858755c00 - - path: raw - md5: 7969bfa1e1642663e34d986de95aba4d.dir - outs: - - path: full-positives.tfrecord - md5: 3f578492053228e1302cecf30478905c -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: c7767b97c0cc4042dbd4893e6edb3281 - - path: raw - md5: 7969bfa1e1642663e34d986de95aba4d.dir - outs: - - path: covered-positives.tfrecord - md5: fc8aa701c1862e201b1ee1d23920e62c -sample-negatives-0: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-corrected.json - removed.json negatives-0.tfrecord - deps: - - path: corrected-corrected.json - md5: 787a358bef694ec9260e19c42f98f680 - size: 374645 - - path: raw - md5: 7969bfa1e1642663e34d986de95aba4d.dir - size: 2582108989 - nfiles: 4124 - - path: removed.json - md5: 03c9be1cfb19b9cb6bc2d4b3fa95f8e6 - size: 302669 - outs: - - path: negatives-0.tfrecord - md5: 00d51047f7d2ed613ec74d887dd6b001 - size: 6529783 -sample-negatives-1: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-corrected.json - corrected-removed.json negatives-1.tfrecord - deps: - - path: corrected-corrected.json - md5: 787a358bef694ec9260e19c42f98f680 - size: 374645 - - path: corrected-removed.json - md5: 66be07bef91214274863c44eee6bbc6f - size: 260756 - - path: raw - md5: 7969bfa1e1642663e34d986de95aba4d.dir - size: 2582108989 - nfiles: 4124 - outs: - - path: negatives-1.tfrecord - md5: 818772e1019ddc0e254371ef3926c8a7 - size: 24843 -sample-random-negatives: - cmd: random-negative-sampler corrected-corrected.json random-negatives.tfrecord - deps: - - path: corrected-corrected.json - md5: 787a358bef694ec9260e19c42f98f680 - size: 374645 - - path: raw - md5: 7969bfa1e1642663e34d986de95aba4d.dir - size: 2582108989 - nfiles: 4124 - outs: - - path: random-negatives.tfrecord - md5: e761acd4178051ca0ebe6e75eaf43688 - size: 75789538 diff --git a/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/dvc.yaml deleted file mode 100644 index f8d420c..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-07-05_SPL_D_rUNSWift_HULKs_secondHalf/dvc.yaml +++ /dev/null @@ -1,41 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-negatives-0: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-corrected.json - removed.json negatives-0.tfrecord - deps: - - corrected-corrected.json - - raw - - removed.json - outs: - - negatives-0.tfrecord - sample-negatives-1: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-corrected.json - corrected-removed.json negatives-1.tfrecord - deps: - - corrected-corrected.json - - corrected-removed.json - - raw - outs: - - negatives-1.tfrecord - sample-random-negatives: - cmd: random-negative-sampler corrected-corrected.json random-negatives.tfrecord - deps: - - corrected-corrected.json - - raw - outs: - - random-negatives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-10-16_testGame/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-10-16_testGame/dvc.lock deleted file mode 100644 index b9f9936..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-10-16_testGame/dvc.lock +++ /dev/null @@ -1,53 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 755bf7c7472eba104731f6de288e2f20 - - path: raw - md5: 95e809c318778df34ac1eceea40b1ba1.dir - outs: - - path: full-positives.tfrecord - md5: dbbb7b8f46b7fb6e1ad9288bad622973 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold=1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: c2cb612a181d672a58225aa02e409a73 - - path: raw - md5: 95e809c318778df34ac1eceea40b1ba1.dir - outs: - - path: covered-positives.tfrecord - md5: 8275fb332bc3308bd41f9c68faea4682 -sample-negatives: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-corrected.json - removed.json negatives.tfrecord - deps: - - path: corrected-corrected.json - md5: 2c80c9042093bcce81f68888383829e3 - size: 172405 - - path: raw - md5: 95e809c318778df34ac1eceea40b1ba1.dir - size: 1115581165 - nfiles: 1804 - - path: removed.json - md5: 809d8b39440603863fd5995c977037ac - size: 122789 - outs: - - path: negatives.tfrecord - md5: 5c757438145eb3d47b889e01092edfda - size: 2199449 -sample-random-negatives: - cmd: random-negative-sampler corrected-corrected.json random-negatives.tfrecord - deps: - - path: corrected-corrected.json - md5: 2c80c9042093bcce81f68888383829e3 - size: 172405 - - path: raw - md5: 95e809c318778df34ac1eceea40b1ba1.dir - size: 1115581165 - nfiles: 1804 - outs: - - path: random-negatives.tfrecord - md5: 6383c0a7f56a8502bf736f7075e3ed4a - size: 25531126 diff --git a/tools/machine-learning/data/HULKs/events/2019-10-16_testGame/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-10-16_testGame/dvc.yaml deleted file mode 100644 index 09555cc..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-10-16_testGame/dvc.yaml +++ /dev/null @@ -1,32 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold=1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-negatives: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-corrected.json - removed.json negatives.tfrecord - deps: - - corrected-corrected.json - - raw - - removed.json - outs: - - negatives.tfrecord - sample-random-negatives: - cmd: random-negative-sampler corrected-corrected.json random-negatives.tfrecord - deps: - - corrected-corrected.json - - raw - outs: - - random-negatives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2019-11-06_testGame/dvc.lock b/tools/machine-learning/data/HULKs/events/2019-11-06_testGame/dvc.lock deleted file mode 100644 index a6698d0..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-11-06_testGame/dvc.lock +++ /dev/null @@ -1,71 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 2ae13b75a94217e33332bb80588c5080 - - path: raw - md5: 0a2eaa3de7e0533e937ed7fcec9bce32.dir - outs: - - path: full-positives.tfrecord - md5: e46496198eca5f088475f057ddf1441b -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: f1476878f50e78f5f4c67db0d3031c3c - - path: raw - md5: 0a2eaa3de7e0533e937ed7fcec9bce32.dir - outs: - - path: covered-positives.tfrecord - md5: cdac424a4b4b875576762197796296cb -sample-negatives-1: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining.json - corrected-removed.json negatives-1.tfrecord - deps: - - path: corrected-remaining.json - md5: 28a7fd4298229776431804082ad4dbc6 - size: 296779 - - path: corrected-removed.json - md5: e532bc58945fcf7e05bc887b98baab65 - size: 196487 - - path: raw - md5: 0a2eaa3de7e0533e937ed7fcec9bce32.dir - size: 2017392653 - nfiles: 3215 - outs: - - path: negatives-1.tfrecord - md5: 082ed5fde3f3ce4bfe175ef1324743fb - size: 48733 -sample-negatives-0: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining.json - removed.json negatives-0.tfrecord - deps: - - path: corrected-remaining.json - md5: 28a7fd4298229776431804082ad4dbc6 - size: 296779 - - path: raw - md5: 0a2eaa3de7e0533e937ed7fcec9bce32.dir - size: 2017392653 - nfiles: 3215 - - path: removed.json - md5: 64f46110e74e59a5ed0db5765d96a9eb - size: 229870 - outs: - - path: negatives-0.tfrecord - md5: ca835934c5fc407b0be333e2062f0333 - size: 5870323 -sample-random-negatives: - cmd: random-negative-sampler corrected-remaining.json random-negatives.tfrecord - deps: - - path: corrected-remaining.json - md5: 28a7fd4298229776431804082ad4dbc6 - size: 296779 - - path: raw - md5: 0a2eaa3de7e0533e937ed7fcec9bce32.dir - size: 2017392653 - nfiles: 3215 - outs: - - path: random-negatives.tfrecord - md5: f5a7d634f03f25393cd46941a9a5ca8c - size: 50299133 diff --git a/tools/machine-learning/data/HULKs/events/2019-11-06_testGame/dvc.yaml b/tools/machine-learning/data/HULKs/events/2019-11-06_testGame/dvc.yaml deleted file mode 100644 index bce7215..0000000 --- a/tools/machine-learning/data/HULKs/events/2019-11-06_testGame/dvc.yaml +++ /dev/null @@ -1,41 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-negatives-1: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining.json - corrected-removed.json negatives-1.tfrecord - deps: - - corrected-remaining.json - - corrected-removed.json - - raw - outs: - - negatives-1.tfrecord - sample-negatives-0: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining.json - removed.json negatives-0.tfrecord - deps: - - corrected-remaining.json - - raw - - removed.json - outs: - - negatives-0.tfrecord - sample-random-negatives: - cmd: random-negative-sampler corrected-remaining.json random-negatives.tfrecord - deps: - - corrected-remaining.json - - raw - outs: - - random-negatives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2020-01-08_testGame/dvc.lock b/tools/machine-learning/data/HULKs/events/2020-01-08_testGame/dvc.lock deleted file mode 100644 index f0a6bf8..0000000 --- a/tools/machine-learning/data/HULKs/events/2020-01-08_testGame/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: fcdf0242c5e9a6e2c06b9145c1829e81 - - path: raw - md5: 91903689aab3e9f83f7d4990041c6b2b.dir - outs: - - path: full-positives.tfrecord - md5: fdaedbb9d03c47cd375e58249399ad29 -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: ce42371d5a5d4a45a0e0c49af54b5f07 - - path: raw - md5: 91903689aab3e9f83f7d4990041c6b2b.dir - outs: - - path: covered-positives.tfrecord - md5: 01d52be7d2a986a593682b93748ac977 diff --git a/tools/machine-learning/data/HULKs/events/2020-01-08_testGame/dvc.yaml b/tools/machine-learning/data/HULKs/events/2020-01-08_testGame/dvc.yaml deleted file mode 100644 index dc1fa7b..0000000 --- a/tools/machine-learning/data/HULKs/events/2020-01-08_testGame/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2020-01-12_testGame_1_GoldenGoal/dvc.lock b/tools/machine-learning/data/HULKs/events/2020-01-12_testGame_1_GoldenGoal/dvc.lock deleted file mode 100644 index 5d3faac..0000000 --- a/tools/machine-learning/data/HULKs/events/2020-01-12_testGame_1_GoldenGoal/dvc.lock +++ /dev/null @@ -1,21 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 57e672706d1cfca2fd814ab8be62cb46 - - path: raw - md5: 1eb93c59c1a01d3c27c147917fb1bfd2.dir - outs: - - path: covered-positives.tfrecord - md5: cf37d3eab34bafb424637dbf115ac509 -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 9111dcc74db7dc1b1b2859e900880fe0 - - path: raw - md5: 1eb93c59c1a01d3c27c147917fb1bfd2.dir - outs: - - path: full-positives.tfrecord - md5: f72b0df5224bbdb7476e0b867fd71131 diff --git a/tools/machine-learning/data/HULKs/events/2020-01-12_testGame_1_GoldenGoal/dvc.yaml b/tools/machine-learning/data/HULKs/events/2020-01-12_testGame_1_GoldenGoal/dvc.yaml deleted file mode 100644 index dbe23b5..0000000 --- a/tools/machine-learning/data/HULKs/events/2020-01-12_testGame_1_GoldenGoal/dvc.yaml +++ /dev/null @@ -1,16 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2020-02-19_testGame/dvc.lock b/tools/machine-learning/data/HULKs/events/2020-02-19_testGame/dvc.lock deleted file mode 100644 index bdc698a..0000000 --- a/tools/machine-learning/data/HULKs/events/2020-02-19_testGame/dvc.lock +++ /dev/null @@ -1,89 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 9eed90d267e53a563cf2999c969d4d81 - - path: raw - md5: 0275d752c090bc39e73b50861d583870.dir - outs: - - path: covered-positives.tfrecord - md5: 57f9b4ecab8f6a2993c59394c2ce2759 -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: 1a9849cf62482f4edd9660eea91a4c87 - - path: raw - md5: 0275d752c090bc39e73b50861d583870.dir - outs: - - path: full-positives.tfrecord - md5: d5ad7691f028839792ac2e78e0809aa7 -sample-negatives-0: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining-corrected-remaining.json - removed.json negatives-0.tfrecord - deps: - - path: corrected-remaining-corrected-remaining.json - md5: 527dad52c2c3d11920bf9a704477db90 - size: 355272 - - path: raw - md5: 0275d752c090bc39e73b50861d583870.dir - size: 2696406584 - nfiles: 4345 - - path: removed.json - md5: 53ed4c8f367930f6cd28ea572b2d8bf1 - size: 293307 - outs: - - path: negatives-0.tfrecord - md5: f9fb7d1c3cbe10b3983d464b012cb6bc - size: 4464924 -sample-negatives-1: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining-corrected-remaining.json - removed.json negatives-1.tfrecord - deps: - - path: corrected-remaining-corrected-remaining.json - md5: 527dad52c2c3d11920bf9a704477db90 - size: 355272 - - path: raw - md5: 0275d752c090bc39e73b50861d583870.dir - size: 2696406584 - nfiles: 4345 - - path: removed.json - md5: 53ed4c8f367930f6cd28ea572b2d8bf1 - size: 293307 - outs: - - path: negatives-1.tfrecord - md5: 5c221e8c96ea3aaddbceaaa96c060d74 - size: 4461755 -sample-negatives-2: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining-corrected-remaining.json - removed.json negatives-2.tfrecord - deps: - - path: corrected-remaining-corrected-remaining.json - md5: 527dad52c2c3d11920bf9a704477db90 - size: 355272 - - path: raw - md5: 0275d752c090bc39e73b50861d583870.dir - size: 2696406584 - nfiles: 4345 - - path: removed.json - md5: 53ed4c8f367930f6cd28ea572b2d8bf1 - size: 293307 - outs: - - path: negatives-2.tfrecord - md5: 064058ba3a8c12179c45b1153f0b77d2 - size: 4465524 -sample-random-negatives: - cmd: random-negative-sampler corrected-remaining-corrected-remaining.json random-negatives.tfrecord - deps: - - path: corrected-remaining-corrected-remaining.json - md5: 527dad52c2c3d11920bf9a704477db90 - size: 355272 - - path: raw - md5: 0275d752c090bc39e73b50861d583870.dir - size: 2696406584 - nfiles: 4345 - outs: - - path: random-negatives.tfrecord - md5: 3796cc590fb2df558cba20e48f6f4b6a - size: 69938321 diff --git a/tools/machine-learning/data/HULKs/events/2020-02-19_testGame/dvc.yaml b/tools/machine-learning/data/HULKs/events/2020-02-19_testGame/dvc.yaml deleted file mode 100644 index 8f0ba97..0000000 --- a/tools/machine-learning/data/HULKs/events/2020-02-19_testGame/dvc.yaml +++ /dev/null @@ -1,50 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-negatives-0: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining-corrected-remaining.json - removed.json negatives-0.tfrecord - deps: - - corrected-remaining-corrected-remaining.json - - raw - - removed.json - outs: - - negatives-0.tfrecord - sample-negatives-1: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining-corrected-remaining.json - removed.json negatives-1.tfrecord - deps: - - corrected-remaining-corrected-remaining.json - - raw - - removed.json - outs: - - negatives-1.tfrecord - sample-negatives-2: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining-corrected-remaining.json - removed.json negatives-2.tfrecord - deps: - - corrected-remaining-corrected-remaining.json - - raw - - removed.json - outs: - - negatives-2.tfrecord - sample-random-negatives: - cmd: random-negative-sampler corrected-remaining-corrected-remaining.json random-negatives.tfrecord - deps: - - corrected-remaining-corrected-remaining.json - - raw - outs: - - random-negatives.tfrecord diff --git a/tools/machine-learning/data/HULKs/events/2020-08-30_simRobot_2083/dvc.lock b/tools/machine-learning/data/HULKs/events/2020-08-30_simRobot_2083/dvc.lock deleted file mode 100644 index 6b93f3b..0000000 --- a/tools/machine-learning/data/HULKs/events/2020-08-30_simRobot_2083/dvc.lock +++ /dev/null @@ -1,68 +0,0 @@ -sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - path: corrected-covered-positives.json - md5: 30f3518e1537e1406f8264d2e5ebc464 - - path: raw - md5: 7c5d950a9f12f7ea6f2ccd4889fafa72.dir - outs: - - path: covered-positives.tfrecord - md5: ca5e01201e2c2f706ca5e18f49ee3ff1 -sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - path: corrected-full-positives.json - md5: c8a7ae0b626c1beac612d3c38c134161 - - path: raw - md5: 7c5d950a9f12f7ea6f2ccd4889fafa72.dir - outs: - - path: full-positives.tfrecord - md5: f649cd8a208139cd6f980746b35b808f -sample-random-negatives: - cmd: random-negative-sampler corrected-remaining.json random-negatives.tfrecord - deps: - - path: corrected-remaining.json - md5: 0eda1f84782c501424704fe0962762d3 - - path: raw - md5: 7c5d950a9f12f7ea6f2ccd4889fafa72.dir - outs: - - path: random-negatives.tfrecord - md5: 45c1b8c9089dda4a41d486e503ca6c96 - size: 55450827 -sample-negatives-0: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining.json - removed.json negatives-0.tfrecord - deps: - - path: corrected-remaining.json - md5: 0eda1f84782c501424704fe0962762d3 - size: 818382 - - path: raw - md5: 7c5d950a9f12f7ea6f2ccd4889fafa72.dir - size: 768251083 - nfiles: 4449 - - path: removed.json - md5: 0bb276c664a270c1648b59516f07256f - size: 169808 - outs: - - path: negatives-0.tfrecord - md5: b877775cd8aedd1dc895cfa09a89e245 - size: 2894433 -sample-negatives-1: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining.json - corrected-removed.json negatives-1.tfrecord - deps: - - path: corrected-remaining.json - md5: 0eda1f84782c501424704fe0962762d3 - size: 818382 - - path: corrected-removed.json - md5: d8f0e4b0975095581a315d4b85956ec2 - size: 154453 - - path: raw - md5: 7c5d950a9f12f7ea6f2ccd4889fafa72.dir - size: 768251083 - nfiles: 4449 - outs: - - path: negatives-1.tfrecord - md5: c82645a4b7abb7cd2c1880a4d681023e - size: 31377 diff --git a/tools/machine-learning/data/HULKs/events/2020-08-30_simRobot_2083/dvc.yaml b/tools/machine-learning/data/HULKs/events/2020-08-30_simRobot_2083/dvc.yaml deleted file mode 100644 index 2a2acd5..0000000 --- a/tools/machine-learning/data/HULKs/events/2020-08-30_simRobot_2083/dvc.yaml +++ /dev/null @@ -1,41 +0,0 @@ -stages: - sample-covered-positives: - cmd: annotation-sampler --intersection-ratio-threshold 1 corrected-covered-positives.json - covered-positives.tfrecord - deps: - - corrected-covered-positives.json - - raw - outs: - - covered-positives.tfrecord - sample-full-positives: - cmd: annotation-sampler corrected-full-positives.json full-positives.tfrecord - deps: - - corrected-full-positives.json - - raw - outs: - - full-positives.tfrecord - sample-random-negatives: - cmd: random-negative-sampler corrected-remaining.json random-negatives.tfrecord - deps: - - corrected-remaining.json - - raw - outs: - - random-negatives.tfrecord - sample-negatives-0: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining.json - removed.json negatives-0.tfrecord - deps: - - corrected-remaining.json - - raw - - removed.json - outs: - - negatives-0.tfrecord - sample-negatives-1: - cmd: annotation-sampler --label-type negative --avoidance-annotations-file corrected-remaining.json - corrected-removed.json negatives-1.tfrecord - deps: - - corrected-remaining.json - - corrected-removed.json - - raw - outs: - - negatives-1.tfrecord diff --git a/tools/pepsi/Cargo.toml b/tools/pepsi/Cargo.toml index ca4c65f..e59a6c6 100644 --- a/tools/pepsi/Cargo.toml +++ b/tools/pepsi/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "pepsi" -version = "2.5.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +version = "2.6.1" +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] aliveness = { workspace = true } diff --git a/tools/pepsi/src/power_off.rs b/tools/pepsi/src/power_off.rs index 6acab16..06a6c39 100644 --- a/tools/pepsi/src/power_off.rs +++ b/tools/pepsi/src/power_off.rs @@ -1,29 +1,60 @@ use clap::Args; use color_eyre::{eyre::WrapErr, Result}; - +use constants::HARDWARE_IDS; +use futures_util::{stream::FuturesUnordered, StreamExt}; use nao::Nao; -use crate::{parsers::NaoAddress, progress_indicator::ProgressIndicator}; +use crate::{ + parsers::{number_to_ip, Connection, NaoAddress}, + progress_indicator::ProgressIndicator, +}; #[derive(Args)] pub struct Arguments { /// The NAOs to power off e.g. 20w or 10.1.24.22 - #[arg(required = true)] - pub naos: Vec, + #[arg(long)] + pub naos: Option>, + /// Power off all NAOs + #[arg(long)] + pub all: bool, } pub async fn power_off(arguments: Arguments) -> Result<()> { - ProgressIndicator::map_tasks( - arguments.naos, - "Powering off...", - |nao_address, _progress_bar| async move { - let nao = Nao::try_new_with_ping(nao_address.ip).await?; - nao.power_off() - .await - .wrap_err_with(|| format!("failed to power {nao_address} off")) - }, - ) - .await; + if arguments.all { + let nao_numbers = HARDWARE_IDS.keys(); + nao_numbers + .into_iter() + .map(|nao_number| async move { + if let Ok(nao) = try_from_number(*nao_number).await { + nao.power_off().await.err(); + } + }) + .collect::>() + .collect::>() + .await; + } else { + ProgressIndicator::map_tasks( + arguments.naos.unwrap(), + "Powering off...", + |nao_address, _progress_bar| async move { + let nao = Nao::try_new_with_ping(nao_address.ip).await?; + nao.power_off() + .await + .wrap_err_with(|| format!("failed to power {nao_address} off")) + }, + ) + .await; + } Ok(()) } + +pub async fn try_from_number(nao_number: u8) -> Result { + let host = number_to_ip(nao_number, Connection::Wired)?; + if let Ok(nao) = Nao::try_new_with_ping(host).await { + Ok(nao) + } else { + let host = number_to_ip(nao_number, Connection::Wireless)?; + Nao::try_new_with_ping(host).await + } +} diff --git a/tools/twix/Cargo.toml b/tools/twix/Cargo.toml index e5cb08d..552f935 100644 --- a/tools/twix/Cargo.toml +++ b/tools/twix/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "twix" version = "0.3.0" -edition = "2021" -license = "GPL-3.0-only" -homepage = "https://github.com/hulks/hulk" +edition.workspace = true +license.workspace = true +homepage.workspace = true [dependencies] aliveness = { workspace = true } @@ -14,6 +14,7 @@ convert_case = { workspace = true } eframe = { workspace = true } egui_dock = { workspace = true } egui_extras = { workspace = true } +egui_plot = { workspace = true } fern = { workspace = true } fuzzy-matcher = { workspace = true } geometry = { workspace = true } diff --git a/tools/twix/src/main.rs b/tools/twix/src/main.rs index bb05b0f..0f0accb 100644 --- a/tools/twix/src/main.rs +++ b/tools/twix/src/main.rs @@ -22,7 +22,7 @@ use eframe::{ epaint::Color32, run_native, App, CreationContext, Frame, NativeOptions, Storage, }; -use egui_dock::{DockArea, NodeIndex, TabAddAlign, TabIndex, Tree}; +use egui_dock::{DockArea, DockState, NodeIndex, SurfaceIndex, TabAddAlign, TabIndex}; use fern::{colors::ColoredLevelConfig, Dispatch, InitError}; use log::error; @@ -82,7 +82,10 @@ fn main() -> Result<(), eframe::Error> { run_native( "Twix", options, - Box::new(|creation_context| Box::new(TwixApp::create(creation_context))), + Box::new(|creation_context| { + egui_extras::install_image_loaders(&creation_context.egui_ctx); + Box::new(TwixApp::create(creation_context)) + }), ) } @@ -148,7 +151,7 @@ struct TwixApp { ip_address: String, panel_selection: String, last_focused_tab: (NodeIndex, TabIndex), - tree: Tree, + dock_state: DockState, visual: Visuals, } @@ -170,18 +173,18 @@ impl TwixApp { let nao = Arc::new(Nao::new(ip_address.clone(), connection_intent)); - let tree: Option> = creation_context + let dock_state: Option> = creation_context .storage - .and_then(|storage| storage.get_string("tree")) + .and_then(|storage| storage.get_string("dock_state")) .and_then(|string| from_str(&string).ok()); - let tree = match tree { - Some(tree) => tree.map_tabs(|value| { + let dock_state = match dock_state { + Some(dock_state) => dock_state.map_tabs(|value| { SelectablePanel::new(nao.clone(), Some(value)) .unwrap() .into() }), - None => Tree::new(vec![SelectablePanel::TextPanel(TextPanel::new( + None => DockState::new(vec![SelectablePanel::TextPanel(TextPanel::new( nao.clone(), None, )) @@ -207,7 +210,7 @@ impl TwixApp { connection_intent, ip_address: ip_address.unwrap_or_default(), panel_selection, - tree, + dock_state, last_focused_tab: (0.into(), 0.into()), visual, } @@ -310,28 +313,29 @@ impl App for TwixApp { CentralPanel::default().show(context, |ui| { if ui.input_mut(|input| input.consume_key(Modifiers::CTRL, Key::T)) { let tab = SelectablePanel::TextPanel(TextPanel::new(self.nao.clone(), None)); - self.tree.push_to_focused_leaf(tab.into()); + self.dock_state.push_to_focused_leaf(tab.into()); } let mut style = egui_dock::Style::from_egui(ui.style().as_ref()); style.buttons.add_tab_align = TabAddAlign::Left; let mut tab_viewer = TabViewer::default(); - DockArea::new(&mut self.tree) + DockArea::new(&mut self.dock_state) .style(style) .show_add_buttons(true) .show_inside(ui, &mut tab_viewer); - for node_id in tab_viewer.nodes_to_add_tabs_to { + + for (surface_index, node_id) in tab_viewer.nodes_to_add_tabs_to { let tab = SelectablePanel::TextPanel(TextPanel::new(self.nao.clone(), None)); - let index = self.tree[node_id].tabs_count(); - self.tree[node_id].insert_tab(index.into(), tab.into()); + let index = self.dock_state[surface_index][node_id].tabs_count(); + self.dock_state[surface_index][node_id].insert_tab(index.into(), tab.into()); } }); } fn save(&mut self, storage: &mut dyn Storage) { - let tree = self.tree.map_tabs(|tab| tab.panel.save()); + let dock_state = self.dock_state.map_tabs(|tab| tab.panel.save()); - storage.set_string("tree", to_string(&tree).unwrap()); + storage.set_string("dock_state", to_string(&dock_state).unwrap()); storage.set_string("ip_address", self.ip_address.clone()); storage.set_string( "connection_intent", @@ -348,13 +352,13 @@ impl App for TwixApp { impl TwixApp { fn active_panel(&mut self) -> Option<&mut SelectablePanel> { - let (_viewport, tab) = self.tree.find_active_focused()?; + let (_viewport, tab) = self.dock_state.find_active_focused()?; Some(&mut tab.panel) } fn active_tab_index(&self) -> Option<(NodeIndex, TabIndex)> { - let node = self.tree.focused_leaf()?; - if let egui_dock::Node::Leaf { active, .. } = &self.tree[node] { + let (surface, node) = self.dock_state.focused_leaf()?; + if let egui_dock::Node::Leaf { active, .. } = &self.dock_state[surface][node] { Some((node, *active)) } else { None @@ -378,7 +382,7 @@ impl From for Tab { #[derive(Default)] struct TabViewer { - nodes_to_add_tabs_to: Vec, + nodes_to_add_tabs_to: Vec<(SurfaceIndex, NodeIndex)>, } impl egui_dock::TabViewer for TabViewer { @@ -396,7 +400,7 @@ impl egui_dock::TabViewer for TabViewer { tab.id } - fn on_add(&mut self, node: NodeIndex) { - self.nodes_to_add_tabs_to.push(node); + fn on_add(&mut self, surface_index: SurfaceIndex, node: NodeIndex) { + self.nodes_to_add_tabs_to.push((surface_index, node)); } } diff --git a/tools/twix/src/panels/image/cycler_selector.rs b/tools/twix/src/panels/image/cycler_selector.rs index 136c017..6d2df8b 100644 --- a/tools/twix/src/panels/image/cycler_selector.rs +++ b/tools/twix/src/panels/image/cycler_selector.rs @@ -1,6 +1,7 @@ use communication::client::Cycler; use eframe::egui::{ComboBox, Response, Ui, Widget}; +#[derive(Debug)] pub struct VisionCyclerSelector { cycler: Cycler, } diff --git a/tools/twix/src/panels/image/mod.rs b/tools/twix/src/panels/image/mod.rs index eb2cf31..3fc3640 100644 --- a/tools/twix/src/panels/image/mod.rs +++ b/tools/twix/src/panels/image/mod.rs @@ -3,10 +3,10 @@ use std::{str::FromStr, sync::Arc}; use color_eyre::{eyre::eyre, Result}; use communication::client::{Cycler, CyclerOutput, Output}; use eframe::{ - egui::{ComboBox, Response, TextureOptions, Ui, Widget}, - emath::Rect, + egui::{ComboBox, Image, Response, TextureOptions, Ui, Widget}, + epaint::Vec2, }; -use egui_extras::RetainedImage; + use log::error; use nalgebra::{vector, Similarity2}; use serde::{Deserialize, Serialize}; @@ -165,17 +165,15 @@ impl ImagePanel { .get_latest() .map_err(|error| eyre!("{error}"))?; let image_raw = bincode::deserialize::>(&image_data)?; - let image = RetainedImage::from_image_bytes("image", &image_raw) - .map_err(|error| eyre!("{error}"))? - .with_options(TextureOptions::NEAREST); - let image_size = image.size_vec2(); - let width_scale = ui.available_width() / image_size.x; - let height_scale = ui.available_height() / image_size.y; - let scale = width_scale.min(height_scale); - let image_response = image.show_scaled(ui, scale); - let displayed_image_size = image_size * scale; - let image_rect = Rect::from_min_size(image_response.rect.left_top(), displayed_image_size); - let painter = TwixPainter::paint_at(ui, image_rect).with_camera( + let image_identifier = format!("bytes://image-{:?}", self.cycler_selector); + ui.ctx().forget_image(&image_identifier); + let image = Image::from_bytes(image_identifier, image_raw) + .texture_options(TextureOptions::NEAREST) + .fit_to_fraction(Vec2::splat(1.0)); + + let image_response = ui.add(image); + + let painter = TwixPainter::paint_at(ui, image_response.rect).with_camera( vector![640.0, 480.0], Similarity2::identity(), CoordinateSystem::LeftHand, diff --git a/tools/twix/src/panels/look_at.rs b/tools/twix/src/panels/look_at.rs index 35bd6e7..98eb29c 100644 --- a/tools/twix/src/panels/look_at.rs +++ b/tools/twix/src/panels/look_at.rs @@ -231,7 +231,6 @@ fn send_standing_look_at( target: look_at_target, camera: camera_option, }, - is_energy_saving: false, }); nao.update_parameter_value( INJECTED_MOTION_COMMAND, diff --git a/tools/twix/src/panels/plot.rs b/tools/twix/src/panels/plot.rs index f6968ee..36850cf 100644 --- a/tools/twix/src/panels/plot.rs +++ b/tools/twix/src/panels/plot.rs @@ -1,17 +1,15 @@ use std::{str::FromStr, sync::Arc}; +use color_eyre::eyre::{eyre, Result, WrapErr}; +use communication::client::CyclerOutput; use eframe::{ egui::{ - plot::{Line, PlotPoints}, - widgets::plot::Plot as EguiPlot, Button, CollapsingHeader, DragValue, Response, RichText, TextEdit, TextStyle, Ui, Widget, }, epaint::Color32, }; +use egui_plot::{Line, Plot as EguiPlot, PlotPoints}; use log::{error, info}; - -use color_eyre::eyre::{eyre, Result, WrapErr}; -use communication::client::CyclerOutput; use mlua::{Function, Lua, LuaSerdeExt}; use serde::{Deserialize, Serialize}; use serde_json::{json, to_string_pretty, Value}; diff --git a/tools/twix/src/twix_painter.rs b/tools/twix/src/twix_painter.rs index 5347509..93f6d37 100644 --- a/tools/twix/src/twix_painter.rs +++ b/tools/twix/src/twix_painter.rs @@ -1,4 +1,4 @@ -use std::f32::consts::{FRAC_1_SQRT_2, FRAC_PI_2, PI, TAU}; +use std::f32::consts::{FRAC_1_SQRT_2, FRAC_PI_2, TAU}; use eframe::{ egui::{Painter, Response, Sense, Ui}, @@ -289,7 +289,7 @@ impl TwixPainter { ); (0..5).for_each(|index| { - let angle = index as f32 * PI * 2.0 / 5.0; + let angle = index as f32 * TAU / 5.0; let position = position + vector![angle.cos(), angle.sin()] * radius * 0.7; self.n_gon(5, position, radius / 3.0, Color32::BLACK); }); @@ -300,7 +300,7 @@ impl TwixPainter { let points: Vec<_> = (0..corners) .map(|index| { self.transform_world_to_pixel({ - let angle = index as f32 * PI * 2.0 / corners as f32; + let angle = index as f32 * TAU / corners as f32; position + vector![angle.cos(), angle.sin()] * radius }) }) @@ -396,7 +396,7 @@ impl TwixPainter { max: self.transform_world_to_pixel(max), }; self.painter - .rect_filled(sort_rect(rect), Rounding::none(), fill_color); + .rect_filled(sort_rect(rect), Rounding::ZERO, fill_color); } pub fn rect_stroke(&self, min: Point2, max: Point2, stroke: Stroke) { @@ -406,7 +406,7 @@ impl TwixPainter { }; let stroke = self.transform_stroke(stroke); self.painter - .rect_stroke(sort_rect(rect), Rounding::none(), stroke); + .rect_stroke(sort_rect(rect), Rounding::ZERO, stroke); } pub fn circle(&self, center: Point2, radius: f32, fill_color: Color32, stroke: Stroke) { @@ -443,13 +443,13 @@ impl TwixPainter { .dot(&end_relative) < 0.0; let counterclockwise_angle_difference = if end_right_of_start { - 2.0 * PI - angle_difference + TAU - angle_difference } else { angle_difference }; let signed_angle_difference = match orientation { - Orientation::Clockwise => -2.0 * PI + counterclockwise_angle_difference, + Orientation::Clockwise => -TAU + counterclockwise_angle_difference, Orientation::Counterclockwise => counterclockwise_angle_difference, Orientation::Colinear => 0.0, }; diff --git a/tools/vtune/plot_task_data.py b/tools/vtune/plot_task_data.py new file mode 100644 index 0000000..dc4d801 --- /dev/null +++ b/tools/vtune/plot_task_data.py @@ -0,0 +1,160 @@ +#!/usr/bin/env python3 +from collections import defaultdict +import sys, os +import argparse, textwrap + +parser = argparse.ArgumentParser( + description="Create output from VTune Amplifier profiler runs", + formatter_class=argparse.RawTextHelpFormatter, +) +parser.add_argument( + "--supress-wait-modules", + help="Supress the ImageReceiver and SensorDataProvider in the plot output", + action="store_true", +) +parser.add_argument( + "project_path", + help=textwrap.dedent( + """\ + The path to the VTune Amplifier capture. + If $VTUNE_HOME is set the path will be relative to $VTUNE_HOME\\..\\amplxe\\projects. + If a project_dir file exists the path will be relative to the path specified in this file. + """ + ), +) +parser.add_argument( + "output", help="Decide whether to output text or plot", choices=["plot", "text"] +) + +base_project_path = "" + +if os.environ.get("VTUNE_HOME"): + base_project_path = os.path.join( + os.environ["VTUNE_HOME"], "..", "amplxe", "projects" + ) + +script_path = os.path.abspath(os.path.dirname(sys.argv[0])) +if os.path.isfile(os.path.join(script_path, "project_dir")): + base_project_path = open(os.path.join(script_path, "project_dir")).read() + +args = parser.parse_args() +absolute_project_path = os.path.join(base_project_path, args.project_path) +sql_database_file = os.path.join(absolute_project_path, "sqlite-db", "dicer.db") +project_name = os.path.splitext( + [f for f in os.listdir(absolute_project_path) if ".vtune" in f][0] +)[0] + +# Load the libraries later to get faster help messages +import sqlite3 +import matplotlib.pyplot as plt +import pandas + + +def make_boxplot(number, data, title, ylabel): + plt.figure(number) + figure = data.boxplot() # seaborn.boxplot(data) + loc, labels = plt.xticks() + figure.set_xticklabels(labels, rotation=90) + figure.set_title(title) + figure.set_ylabel(ylabel) + plt.gcf().subplots_adjust(bottom=0.5) + + +if args.output == "text": + # Only output average data + conn = sqlite3.connect(sql_database_file) + c = conn.cursor() + c.execute( + """ + select + cast(min(task_data.end_tsc - task_data.start_tsc) as float) / 10000000 as "min in ms", + cast(max(task_data.end_tsc - task_data.start_tsc) as float) / 10000000 as "max in ms", + cast(avg(task_data.end_tsc - task_data.start_tsc) as float) / 10000000 as "avg in ms", + cast(sum(task_data.end_tsc - task_data.start_tsc) as float) / 10000000 as "sum in ms", + count(*), + dd_task_type.name as "Modulename", + dd_domain.name as "Threadname" + from task_data + left join dd_task on task_data.attr=dd_task.rowid + left join dd_task_type on dd_task.type=dd_task_type.rowid + left join dd_domain on dd_task_type.domain=dd_domain.rowid + group by task_data.attr; + """ + ) + + results = c.fetchall() + pandas.set_option("display.width", None) + pandas.set_option("display.max_rows", None) + print( + pandas.DataFrame( + results, + columns=["min", "max", "avg", "sum", "count", "Modulename", "Threadname"], + ) + ) + +if args.output == "plot": + conn = sqlite3.connect(sql_database_file) + c = conn.cursor() + c.execute( + """ + select + cast(task_data.end_tsc - task_data.start_tsc as float) / 10000000 as "min in ms", + dd_task_type.name as "Modulename", + dd_domain.name as "Threadname" + from task_data + left join dd_task on task_data.attr=dd_task.rowid + left join dd_task_type on dd_task.type=dd_task_type.rowid + left join dd_domain on dd_task_type.domain=dd_domain.rowid; + """ + ) + + results = c.fetchall() + conn.close() + + brain_top_data = defaultdict(list) + brain_bot_data = defaultdict(list) + motion_data = defaultdict(list) + for result in results: + if result[2] == "VisionTop": + if args.supress_wait_modules and result[1] == "ImageReceiver": + continue + brain_top_data[result[1]].append(result[0]) + if result[2] == "VisionBottom": + if args.supress_wait_modules and result[1] == "ImageReceiver": + continue + brain_bot_data[result[1]].append(result[0]) + if result[2] == "Control": + if args.supress_wait_modules and result[1] == "SensorDataReceiver": + continue + motion_data[result[1]].append(result[0]) + + pandas_vision_top_data = pandas.DataFrame( + dict([(k, pandas.Series(v)) for k, v in brain_top_data.items()]) + ) + pandas_vision_bot_data = pandas.DataFrame( + dict([(k, pandas.Series(v)) for k, v in brain_bot_data.items()]) + ) + pandas_control_data = pandas.DataFrame( + dict([(k, pandas.Series(v)) for k, v in motion_data.items()]) + ) + + # Plot Brain Top Image Data + make_boxplot( + 1, + pandas_vision_top_data, + "Vision Top Image Nodes\n" + project_name, + "ms/cycle", + ) + + # Plot Brain Bottom Image Data + make_boxplot( + 2, + pandas_vision_bot_data, + "Vision Bottom Image Nodes\n" + project_name, + "ms/cycle", + ) + + # Plot Motion Image Data + make_boxplot(3, pandas_control_data, "Control Nodes\n" + project_name, "ms/cycle") + + plt.show()