diff --git a/pixi.lock b/pixi.lock index b2736fa1f..16ad0636e 100644 --- a/pixi.lock +++ b/pixi.lock @@ -250,7 +250,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-hfb7daa7_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h75b3fb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h6406941_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libraw-0.22.1-h074291d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.3-h4c96295_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_19.conda @@ -297,8 +297,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/make-4.4.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.11.0-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py312h1c5ec97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.11.0-py312h7900ff3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py312hc1765e9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mesalib-26.0.3-h8cca3c9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py312h0a2e395_1.conda @@ -357,7 +357,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.17.0-py312h1289d80_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.10.2-py312h50ac2ff_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.1-hab00c5b_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-librt-0.11.0-py312h5253ce2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-librt-0.12.0-py312h5253ce2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-orocos-kdl-1.5.3-py312h1289d80_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda @@ -1005,7 +1005,7 @@ environments: - conda: https://data.bit-bots.de/conda-misc/output/noarch/bitbots_model_2023_04_04_philipp_yoeox_with_team_colors-1.0.1-h4616a5c_3.conda - conda: https://data.bit-bots.de/conda-misc/output/noarch/readline-8.3-h4616a5c_1.conda - conda: https://data.bit-bots.de/conda-misc/output/noarch/tts-supertonic-1.0.0-h4616a5c_1.conda - - conda_source: bitbots_rust_nav[61906921] @ src/bitbots_navigation/bitbots_rust_nav + - conda_source: bitbots_rust_nav[a262082f] @ src/bitbots_navigation/bitbots_rust_nav - pypi: https://files.pythonhosted.org/packages/00/7a/254f95860cebb6d51ddb3e815ee30085e8c8a3ba6df1f44ef4605b385621/syrupy-5.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/98/716a473cfb24750858ddd5d14e6527539dd206583a46408d08eeb2844a75/trimesh-4.12.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/de/0880cf8af64b225bc8fde0924f76ea5e6cd8d8dc50c6dd61232beb54327f/mjviser-0.0.12-py3-none-any.whl @@ -1242,7 +1242,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpq-18.4-hccacd55_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-6.31.1-h61c7711_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraqm-0.10.5-h50d7eb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraqm-0.10.5-hd2f8911_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraw-0.22.1-h6c2e892_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.62.3-hf685517_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-14.3.0-hedb4206_19.conda @@ -1287,8 +1287,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lzo-2.10-h80f16a2_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/make-4.4.1-h2a6d0cb_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py312hd077ced_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.11.0-py312h8025657_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.11.0-py312h982a919_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.11.0-py312h8025657_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.11.0-py312h7ee55d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mesalib-26.0.3-h455aa48_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpg123-1.32.9-h65af167_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.2.1-py312hf18b547_1.conda @@ -1345,7 +1345,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyqt5-sip-12.17.0-py312h1ab2c47_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyside6-6.10.2-py312hfc1e6cc_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.1-h43d1f9e_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-librt-0.11.0-py312hd41f8a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-librt-0.12.0-py312hd41f8a7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-orocos-kdl-1.5.3-py312h1ab2c47_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py312ha4530ae_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qhull-2020.2-h70be974_5.conda @@ -1994,7 +1994,7 @@ environments: - conda: https://data.bit-bots.de/conda-misc/output/noarch/bitbots_model_2023_04_04_philipp_yoeox_with_team_colors-1.0.1-h4616a5c_3.conda - conda: https://data.bit-bots.de/conda-misc/output/noarch/readline-8.3-h4616a5c_1.conda - conda: https://data.bit-bots.de/conda-misc/output/noarch/tts-supertonic-1.0.0-h4616a5c_1.conda - - conda_source: bitbots_rust_nav[70abafa3] @ src/bitbots_navigation/bitbots_rust_nav + - conda_source: bitbots_rust_nav[e516a196] @ src/bitbots_navigation/bitbots_rust_nav - pypi: https://files.pythonhosted.org/packages/00/7a/254f95860cebb6d51ddb3e815ee30085e8c8a3ba6df1f44ef4605b385621/syrupy-5.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/98/716a473cfb24750858ddd5d14e6527539dd206583a46408d08eeb2844a75/trimesh-4.12.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/de/0880cf8af64b225bc8fde0924f76ea5e6cd8d8dc50c6dd61232beb54327f/mjviser-0.0.12-py3-none-any.whl @@ -2371,7 +2371,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-hfb7daa7_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h75b3fb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h6406941_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libraw-0.22.1-h074291d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.3-h4c96295_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_19.conda @@ -2418,8 +2418,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h280c20c_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/make-4.4.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.11.0-py312h7900ff3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py312h1c5ec97_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.11.0-py312h7900ff3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py312hc1765e9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mesalib-26.0.3-h8cca3c9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py312h0a2e395_1.conda @@ -2478,7 +2478,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.17.0-py312h1289d80_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.10.2-py312h50ac2ff_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.1-hab00c5b_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-librt-0.11.0-py312h5253ce2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-librt-0.12.0-py312h5253ce2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-orocos-kdl-1.5.3-py312h1289d80_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda @@ -3129,7 +3129,7 @@ environments: - conda: https://data.bit-bots.de/conda-misc/output/noarch/bitbots_model_2023_04_04_philipp_yoeox_with_team_colors-1.0.1-h4616a5c_3.conda - conda: https://data.bit-bots.de/conda-misc/output/noarch/readline-8.3-h4616a5c_1.conda - conda: https://data.bit-bots.de/conda-misc/output/noarch/tts-supertonic-1.0.0-h4616a5c_1.conda - - conda_source: bitbots_rust_nav[61906921] @ src/bitbots_navigation/bitbots_rust_nav + - conda_source: bitbots_rust_nav[a262082f] @ src/bitbots_navigation/bitbots_rust_nav - pypi: https://files.pythonhosted.org/packages/00/7a/254f95860cebb6d51ddb3e815ee30085e8c8a3ba6df1f44ef4605b385621/syrupy-5.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/98/716a473cfb24750858ddd5d14e6527539dd206583a46408d08eeb2844a75/trimesh-4.12.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/de/0880cf8af64b225bc8fde0924f76ea5e6cd8d8dc50c6dd61232beb54327f/mjviser-0.0.12-py3-none-any.whl @@ -3367,7 +3367,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpq-18.4-hccacd55_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-6.31.1-h61c7711_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraqm-0.10.5-h50d7eb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraqm-0.10.5-hd2f8911_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraw-0.22.1-h6c2e892_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.62.3-hf685517_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-14.3.0-hedb4206_19.conda @@ -3412,8 +3412,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lzo-2.10-h80f16a2_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/make-4.4.1-h2a6d0cb_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py312hd077ced_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.11.0-py312h8025657_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.11.0-py312h982a919_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.11.0-py312h8025657_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.11.0-py312h7ee55d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mesalib-26.0.3-h455aa48_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpg123-1.32.9-h65af167_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.2.1-py312hf18b547_1.conda @@ -3470,7 +3470,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyqt5-sip-12.17.0-py312h1ab2c47_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyside6-6.10.2-py312hfc1e6cc_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.1-h43d1f9e_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-librt-0.11.0-py312hd41f8a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-librt-0.12.0-py312hd41f8a7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-orocos-kdl-1.5.3-py312h1ab2c47_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py312ha4530ae_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qhull-2020.2-h70be974_5.conda @@ -4122,7 +4122,7 @@ environments: - conda: https://data.bit-bots.de/conda-misc/output/noarch/bitbots_model_2023_04_04_philipp_yoeox_with_team_colors-1.0.1-h4616a5c_3.conda - conda: https://data.bit-bots.de/conda-misc/output/noarch/readline-8.3-h4616a5c_1.conda - conda: https://data.bit-bots.de/conda-misc/output/noarch/tts-supertonic-1.0.0-h4616a5c_1.conda - - conda_source: bitbots_rust_nav[70abafa3] @ src/bitbots_navigation/bitbots_rust_nav + - conda_source: bitbots_rust_nav[e516a196] @ src/bitbots_navigation/bitbots_rust_nav - pypi: https://files.pythonhosted.org/packages/00/7a/254f95860cebb6d51ddb3e815ee30085e8c8a3ba6df1f44ef4605b385621/syrupy-5.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/98/716a473cfb24750858ddd5d14e6527539dd206583a46408d08eeb2844a75/trimesh-4.12.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/de/0880cf8af64b225bc8fde0924f76ea5e6cd8d8dc50c6dd61232beb54327f/mjviser-0.0.12-py3-none-any.whl @@ -5326,7 +5326,7 @@ packages: license: Apache-2.0 license_family: APACHE purls: - - pkg:pypi/frozenlist?source=compressed-mapping + - pkg:pypi/frozenlist?source=hash-mapping run_exports: {} size: 55016 timestamp: 1779999817627 @@ -6006,6 +6006,7 @@ packages: depends: - libharfbuzz-devel 14.2.1 h17a8019_1 license: MIT + license_family: MIT purls: [] run_exports: weak: @@ -7224,6 +7225,7 @@ packages: - libstdcxx >=14 - libzlib >=1.3.2,<2.0a0 license: MIT + license_family: MIT purls: [] run_exports: {} size: 1297668 @@ -7246,6 +7248,7 @@ packages: - libstdcxx >=14 - libzlib >=1.3.2,<2.0a0 license: MIT + license_family: MIT purls: [] run_exports: weak: @@ -7970,24 +7973,24 @@ packages: - libprotobuf >=6.31.1,<6.31.2.0a0 size: 4204474 timestamp: 1780003940664 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h75b3fb1_0.conda - sha256: 36870c7e6362386c687f2f40d98de28f53ef84582ff65792f2f53981ede82681 - md5: 6855be9eb1d891cd5afb5eb90501c74c +- conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h6406941_1.conda + sha256: 7c9e562842f193f772ef0ba681f238a2d9e5ef637588b6e46eb30cc6aa1940c8 + md5: fa63517815747363c41b439ff9301db1 depends: - - libgcc >=14 - __glibc >=2.28,<3.0.a0 - - fribidi >=1.0.16,<2.0a0 - - harfbuzz >=14.2.1 + - libgcc >=14 + - libharfbuzz >=14.2.1 - libfreetype >=2.14.3 - libfreetype6 >=2.14.3 + - fribidi >=1.0.16,<2.0a0 license: MIT license_family: MIT purls: [] run_exports: weak: - libraqm >=0.10.5,<0.11.0a0 - size: 29594 - timestamp: 1780835041392 + size: 29441 + timestamp: 1782807076031 - conda: https://conda.anaconda.org/conda-forge/linux-64/libraw-0.22.1-h074291d_0.conda sha256: 2d2eb9147efeec20bcc89313fa55d052829b7d23def0e8eed039d374ecaf785e md5: bbb55eb739ed4188e24904cafa939567 @@ -8739,9 +8742,9 @@ packages: run_exports: {} size: 26057 timestamp: 1772445297924 -- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.11.0-py312h7900ff3_0.conda - sha256: 0301737612197e3931a73858f642c38331e4906aa48227a29b7ba72c9c343678 - md5: 9ad541e75ff51cb70105c67324e418fe +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.11.0-py312h7900ff3_1.conda + sha256: 957dcd182249a30589db706b21992ea023180f8b78feb8410f36c1c6a80f2198 + md5: 9d60112f925c215d541a6a72c9f3418d depends: - matplotlib-base >=3.11.0,<3.11.1.0a0 - pyside6 >=6.7.2 @@ -8753,11 +8756,11 @@ packages: purls: - pkg:pypi/matplotlib?source=compressed-mapping run_exports: {} - size: 14872 - timestamp: 1781626897041 -- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py312h1c5ec97_0.conda - sha256: 4d5db0491814ce2e70053ae5ac9ecd0a4f7103adb6df0e6eb0dcb7638145e65b - md5: 847125fead148cb26f52f8c3413cea12 + size: 14887 + timestamp: 1782829550796 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py312hc1765e9_1.conda + sha256: d983b4ea15841f1fde4ccba4370485e89e696a447fcf5e90a1f75c8487699c68 + md5: 1d06d24525cf2e373310c1131acf12f8 depends: - __glibc >=2.17,<3.0.a0 - contourpy >=1.0.1 @@ -8771,7 +8774,7 @@ packages: - libraqm >=0.10.5,<0.11.0a0 - libstdcxx >=14 - numpy >=1.23 - - numpy >=1.23,<3 + - numpy >=1.25,<3 - packaging >=20.0 - pillow >=8 - pyparsing >=2.3.1 @@ -8785,8 +8788,8 @@ packages: purls: - pkg:pypi/matplotlib?source=compressed-mapping run_exports: {} - size: 9022139 - timestamp: 1781626880429 + size: 8877024 + timestamp: 1782829532714 - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.14.1-py310h2b5ca13_0.conda noarch: python sha256: 33604a07d4d10f440fcc1e38d7d33462b3726565c1ad704ccfa189c7934912c6 @@ -9882,9 +9885,9 @@ packages: - python size: 31608571 timestamp: 1772730708989 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-librt-0.11.0-py312h5253ce2_0.conda - sha256: 6aa36a62db36c2aa144640a3fba1cd3c61dd679a979288eae2fd3b9f89ef4eac - md5: 0a73899771633857390eac009995e5f9 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-librt-0.12.0-py312h5253ce2_0.conda + sha256: 77a0592d53fe3664421926c32677f2829278de19d99c90ada80cd75286f34198 + md5: 8ead1974106b7526f4866326654b99ff depends: - python - libgcc >=14 @@ -9893,10 +9896,10 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/librt?source=hash-mapping + - pkg:pypi/librt?source=compressed-mapping run_exports: {} - size: 157857 - timestamp: 1778511616936 + size: 160728 + timestamp: 1782847498143 - conda: https://conda.anaconda.org/conda-forge/linux-64/python-orocos-kdl-1.5.3-py312h1289d80_2.conda sha256: 481d724d6f7bbfa931f6f33a7940d3637b7289139526a5952d2289c114c5f5b6 md5: 30d805f6312812a6abef0933e56deefa @@ -10672,19 +10675,19 @@ packages: run_exports: {} size: 14226 timestamp: 1767012219987 -- conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.11.25-h26efc2c_0.conda - sha256: 64d5c1592d62e77191e7f61aae811db68d040c5507c5b1cb33010530148177dc - md5: fed7cb43d942f65256b6187fe30484b1 +- conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.11.26-h26efc2c_0.conda + sha256: fc2567e4507d436c247e0d175991c5929011a3141f4a0fabff515ce6328bb3a0 + md5: f34a1bce60a945c8dac9784ebb495d62 depends: - - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 constrains: - __glibc >=2.17 license: Apache-2.0 OR MIT run_exports: {} - size: 20451374 - timestamp: 1782538835059 + size: 20530051 + timestamp: 1782834625037 - conda: https://conda.anaconda.org/conda-forge/linux-64/viskores-1.1.1-cpu_hc82bd48_0.conda sha256: 2ebe8d6ae8c302ca5bf4aec532cd75ebfb00240db1c14dad9a91bace65aa083d md5: 24676eb7fd23ea3d8d69417f5f1224e0 @@ -13338,6 +13341,7 @@ packages: depends: - libharfbuzz-devel 14.2.1 h3a99ef3_1 license: MIT + license_family: MIT purls: [] run_exports: weak: @@ -14453,6 +14457,7 @@ packages: - libstdcxx >=14 - libzlib >=1.3.2,<2.0a0 license: MIT + license_family: MIT purls: [] run_exports: {} size: 1334601 @@ -14474,6 +14479,7 @@ packages: - libstdcxx >=14 - libzlib >=1.3.2,<2.0a0 license: MIT + license_family: MIT purls: [] run_exports: weak: @@ -15125,24 +15131,24 @@ packages: - libprotobuf >=6.31.1,<6.31.2.0a0 size: 3897821 timestamp: 1780003417336 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraqm-0.10.5-h50d7eb4_0.conda - sha256: 3302dc059c3989df06e9d00a1646b33577af8e754239af5ec3129f567ca30297 - md5: 3df17558b81216bbdcdee2ae17b6569a +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraqm-0.10.5-hd2f8911_1.conda + sha256: b287b67ba86d625bdaae919bac0a62ca6f5bc61509f034003df3c6b40f584a92 + md5: bf7fa2b700ba2c7b682aec5db14043c7 depends: - - __glibc >=2.28,<3.0.a0 - libgcc >=14 + - __glibc >=2.28,<3.0.a0 + - fribidi >=1.0.16,<2.0a0 + - libharfbuzz >=14.2.1 - libfreetype >=2.14.3 - libfreetype6 >=2.14.3 - - fribidi >=1.0.16,<2.0a0 - - harfbuzz >=14.2.1 license: MIT license_family: MIT purls: [] run_exports: weak: - libraqm >=0.10.5,<0.11.0a0 - size: 29707 - timestamp: 1780835831861 + size: 29528 + timestamp: 1782807084739 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraw-0.22.1-h6c2e892_0.conda sha256: 8b8da9dbd2290ba02185dd6dd5a83a514ef3c0f4f65feb395bd7a41b67e5067a md5: 8a0b1ef545682ef7bdb938bfde168f56 @@ -15815,9 +15821,9 @@ packages: run_exports: {} size: 26305 timestamp: 1772446326927 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.11.0-py312h8025657_0.conda - sha256: a70ef35a21e0505f18a7b52d21feb3475b9abcb569aa297546e84be7694bd7b7 - md5: e0e29a3b48168b7c15936d2a6e1b6867 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.11.0-py312h8025657_1.conda + sha256: 8d19f9d3c7df6d76da77a39c774320b1f15f42b69f76d540fae6cfd82c266487 + md5: 5c83f56631a764edd9e3f534e10ef098 depends: - matplotlib-base >=3.11.0,<3.11.1.0a0 - pyside6 >=6.7.2 @@ -15828,11 +15834,11 @@ packages: license_family: PSF purls: [] run_exports: {} - size: 14995 - timestamp: 1781626860136 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.11.0-py312h982a919_0.conda - sha256: a1ff1969db6667fb97f79aece3d15318daa024aa0d1bc78d3b2ba67d0a4ee662 - md5: 76ab801564d5bcc45432d24d90359c70 + size: 14868 + timestamp: 1782829508519 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.11.0-py312h7ee55d7_1.conda + sha256: 98b98c5022a66c29805278a56380107b55bb44c9b358d35d93f0bfe0f8069efb + md5: bd250e5754cb3ad603ab680ffd28b7a4 depends: - contourpy >=1.0.1 - cycler >=0.10 @@ -15845,7 +15851,7 @@ packages: - libraqm >=0.10.5,<0.11.0a0 - libstdcxx >=14 - numpy >=1.23 - - numpy >=1.23,<3 + - numpy >=1.25,<3 - packaging >=20.0 - pillow >=8 - pyparsing >=2.3.1 @@ -15859,8 +15865,8 @@ packages: purls: - pkg:pypi/matplotlib?source=hash-mapping run_exports: {} - size: 8860334 - timestamp: 1781626845576 + size: 8975302 + timestamp: 1782829494907 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/maturin-1.14.1-py310he8189be_0.conda noarch: python sha256: 54435e557d2160d0307f69b4ac7926b855446e97cc721d65903da760be9dcb03 @@ -16893,9 +16899,9 @@ packages: - python size: 13757191 timestamp: 1772728951853 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-librt-0.11.0-py312hd41f8a7_0.conda - sha256: c73b4654c92f2fef1e6bb462464b464abbcf65cd0ca4b7239ace25204a589c4b - md5: 721092396c3edc8c0cdd921dacf6a276 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-librt-0.12.0-py312hd41f8a7_0.conda + sha256: 6f647dc3d96c351125fcfb104bfbef235324626bd5ddaa7e265b398520f4c620 + md5: 9a2257990790d5601317187ecee320ef depends: - python - libgcc >=14 @@ -16906,8 +16912,8 @@ packages: purls: - pkg:pypi/librt?source=hash-mapping run_exports: {} - size: 157928 - timestamp: 1778511638325 + size: 160722 + timestamp: 1782847514830 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-orocos-kdl-1.5.3-py312h1ab2c47_2.conda sha256: 6a5a07185a4509ab13dcef98594d041081dd70d26b23651f4c86cc289f6217f6 md5: 574358b8f203748e7c46ff70a908ee76 @@ -17654,18 +17660,18 @@ packages: run_exports: {} size: 14197 timestamp: 1767012435525 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.11.25-haa595b2_0.conda - sha256: b6efe586683dbaae9424b54fccc2494593526947eae3e447b3675bc170d0e92a - md5: 587b74cda60fa59e25393a28fd3398ff +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.11.26-haa595b2_0.conda + sha256: 3cbe21f360080969e588374d70b17514eacac94a4328726ebfe1fbc0aec039f5 + md5: c4ac9fbd7745a2b6c6bdcaac4219bd73 depends: - - libstdcxx >=14 - libgcc >=14 + - libstdcxx >=14 constrains: - __glibc >=2.17 license: Apache-2.0 OR MIT run_exports: {} - size: 19977799 - timestamp: 1782538813735 + size: 20171344 + timestamp: 1782834696757 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/viskores-1.1.1-cpu_hb695247_0.conda sha256: d086e094a199ba83f023fbec3753bcff561677910cac31bd8c38ab84fb764820 md5: 8ce740ca4fe8871e8d90e00063e9a748 @@ -18487,7 +18493,7 @@ packages: license: PSF-2.0 license_family: PSF purls: - - pkg:pypi/aiohappyeyeballs?source=hash-mapping + - pkg:pypi/aiohappyeyeballs?source=compressed-mapping run_exports: {} size: 20727 timestamp: 1779297825279 @@ -20836,7 +20842,7 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/traitlets?source=hash-mapping + - pkg:pypi/traitlets?source=compressed-mapping run_exports: {} size: 115158 timestamp: 1780507822178 @@ -20954,6 +20960,7 @@ packages: depends: - python >=3.10 license: MIT + license_family: MIT purls: - pkg:pypi/wcwidth?source=compressed-mapping run_exports: {} @@ -37210,7 +37217,7 @@ packages: license: LicenseRef-openrail size: 244991335 timestamp: 1771976595791 -- conda_source: bitbots_rust_nav[61906921] @ src/bitbots_navigation/bitbots_rust_nav +- conda_source: bitbots_rust_nav[a262082f] @ src/bitbots_navigation/bitbots_rust_nav variants: c_stdlib: sysroot c_stdlib_version: '2.28' @@ -37268,7 +37275,7 @@ packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rust-1.91.1-h53717f1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.11.25-h26efc2c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uv-0.11.26-h26efc2c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda @@ -37279,7 +37286,7 @@ packages: - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://data.bit-bots.de/conda-misc/output/noarch/readline-8.3-h4616a5c_1.conda -- conda_source: bitbots_rust_nav[70abafa3] @ src/bitbots_navigation/bitbots_rust_nav +- conda_source: bitbots_rust_nav[e516a196] @ src/bitbots_navigation/bitbots_rust_nav variants: c_stdlib: sysroot c_stdlib_version: '2.28' @@ -37338,7 +37345,7 @@ packages: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.13-h91f4b29_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rust-1.91.1-h6cf38e9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.11.25-haa595b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uv-0.11.26-haa595b2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-aarch64-4.18.0-h05a177a_9.conda diff --git a/src/bitbots_misc/bitbots_bringup/launch/motion_standalone.launch b/src/bitbots_misc/bitbots_bringup/launch/motion_standalone.launch index 57ed57ae5..3a485c967 100644 --- a/src/bitbots_misc/bitbots_bringup/launch/motion_standalone.launch +++ b/src/bitbots_misc/bitbots_bringup/launch/motion_standalone.launch @@ -5,7 +5,7 @@ - + diff --git a/src/bitbots_misc/bitbots_bringup/launch/mujoco_simulation.launch.py b/src/bitbots_misc/bitbots_bringup/launch/mujoco_simulation.launch.py index a6a6de664..39a73f532 100644 --- a/src/bitbots_misc/bitbots_bringup/launch/mujoco_simulation.launch.py +++ b/src/bitbots_misc/bitbots_bringup/launch/mujoco_simulation.launch.py @@ -61,8 +61,8 @@ def generate_domain_bridge_config(robot_domain: int, output_dir: Path) -> Path: sensor_topics = [ ("joint_states", "sensor_msgs/msg/JointState"), ("imu/data", "sensor_msgs/msg/Imu"), - ("camera/image_proc", "sensor_msgs/msg/Image"), - ("camera/camera_info", "sensor_msgs/msg/CameraInfo"), + ("zed/zed_node/rgb/image_rect_color", "sensor_msgs/msg/Image"), + ("zed/zed_node/rgb/camera_info", "sensor_msgs/msg/CameraInfo"), ] for topic_suffix, msg_type in sensor_topics: @@ -92,7 +92,7 @@ def generate_world_xml(num_robots: int, package_share: str, robot_type: str) -> """Generate MuJoCo world XML with the correct number of robots.""" template_path = Path(package_share) / "xml" / "kid_field.xml" output_path = Path(package_share) / "xml" / "generated_world.xml" - offset = 6 * ( + offset = 4 * ( 1 / num_robots ) # this makes the offset be the default value when there are 4 robots and increse the less robots there are diff --git a/src/bitbots_misc/bitbots_bringup/launch/teamplayer.launch b/src/bitbots_misc/bitbots_bringup/launch/teamplayer.launch index bf2e295ae..7f5bea32e 100644 --- a/src/bitbots_misc/bitbots_bringup/launch/teamplayer.launch +++ b/src/bitbots_misc/bitbots_bringup/launch/teamplayer.launch @@ -21,7 +21,7 @@ - + diff --git a/src/bitbots_misc/bitbots_bringup/launch/vision_standalone.launch b/src/bitbots_misc/bitbots_bringup/launch/vision_standalone.launch index 2cdc0ecb7..df92c7624 100644 --- a/src/bitbots_misc/bitbots_bringup/launch/vision_standalone.launch +++ b/src/bitbots_misc/bitbots_bringup/launch/vision_standalone.launch @@ -8,7 +8,7 @@ - + diff --git a/src/bitbots_misc/bitbots_bringup/launch/visualization.launch b/src/bitbots_misc/bitbots_bringup/launch/visualization.launch index 8b4bf73d5..bd06c10ca 100644 --- a/src/bitbots_misc/bitbots_bringup/launch/visualization.launch +++ b/src/bitbots_misc/bitbots_bringup/launch/visualization.launch @@ -8,7 +8,7 @@ - + diff --git a/src/bitbots_misc/bitbots_parameter_blackboard/config/sim_game_settings_11.yaml b/src/bitbots_misc/bitbots_parameter_blackboard/config/sim_game_settings_11.yaml new file mode 100644 index 000000000..f8649a515 --- /dev/null +++ b/src/bitbots_misc/bitbots_parameter_blackboard/config/sim_game_settings_11.yaml @@ -0,0 +1,5 @@ +parameter_blackboard: + ros__parameters: + bot_id: 1 + position_number: 0 + role: offense diff --git a/src/bitbots_misc/bitbots_parameter_blackboard/config/sim_game_settings_12.yaml b/src/bitbots_misc/bitbots_parameter_blackboard/config/sim_game_settings_12.yaml new file mode 100644 index 000000000..437d64089 --- /dev/null +++ b/src/bitbots_misc/bitbots_parameter_blackboard/config/sim_game_settings_12.yaml @@ -0,0 +1,5 @@ +parameter_blackboard: + ros__parameters: + bot_id: 2 + position_number: 0 + role: goalie diff --git a/src/bitbots_misc/bitbots_parameter_blackboard/config/sim_game_settings_13.yaml b/src/bitbots_misc/bitbots_parameter_blackboard/config/sim_game_settings_13.yaml new file mode 100644 index 000000000..32505c3ba --- /dev/null +++ b/src/bitbots_misc/bitbots_parameter_blackboard/config/sim_game_settings_13.yaml @@ -0,0 +1,5 @@ +parameter_blackboard: + ros__parameters: + bot_id: 3 + position_number: 0 + role: defense diff --git a/src/bitbots_misc/bitbots_parameter_blackboard/config/sim_game_settings_14.yaml b/src/bitbots_misc/bitbots_parameter_blackboard/config/sim_game_settings_14.yaml new file mode 100644 index 000000000..7116cb860 --- /dev/null +++ b/src/bitbots_misc/bitbots_parameter_blackboard/config/sim_game_settings_14.yaml @@ -0,0 +1,5 @@ +parameter_blackboard: + ros__parameters: + bot_id: 4 + position_number: 1 + role: defense diff --git a/src/bitbots_misc/bitbots_parameter_blackboard/launch/parameter_blackboard.launch b/src/bitbots_misc/bitbots_parameter_blackboard/launch/parameter_blackboard.launch deleted file mode 100644 index 9a644292a..000000000 --- a/src/bitbots_misc/bitbots_parameter_blackboard/launch/parameter_blackboard.launch +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/src/bitbots_misc/bitbots_parameter_blackboard/launch/parameter_blackboard.launch.py b/src/bitbots_misc/bitbots_parameter_blackboard/launch/parameter_blackboard.launch.py new file mode 100644 index 000000000..1f964a028 --- /dev/null +++ b/src/bitbots_misc/bitbots_parameter_blackboard/launch/parameter_blackboard.launch.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +import os + +from ament_index_python.packages import get_package_share_directory +from launch import LaunchDescription +from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, OpaqueFunction +from launch.launch_description_sources import AnyLaunchDescriptionSource +from launch.substitutions import LaunchConfiguration, PathJoinSubstitution, PythonExpression +from launch_ros.actions import Node +from launch_ros.parameter_descriptions import ParameterFile + + +def generate_launch_description() -> LaunchDescription: + package_name = "bitbots_parameter_blackboard" + package_share = get_package_share_directory(package_name) + + def create_node(context, *args, **kwargs): + in_sim = LaunchConfiguration("sim").perform(context) == "true" + field_name = LaunchConfiguration("field").perform(context) + + parameters = [ + {"simulation_active": in_sim}, + {"use_sim_time": in_sim}, + {"field.name": field_name}, + ParameterFile(PathJoinSubstitution([package_share, "config", "fields", field_name, "config.yaml"])), + ParameterFile(PathJoinSubstitution([package_share, "config", "global_parameters.yaml"])), + ParameterFile(PathJoinSubstitution([package_share, "config", "game_settings.yaml"])), + ] + + robot_domain = os.environ.get("ROS_DOMAIN_ID") + if in_sim and robot_domain is not None: + parameters.append( + ParameterFile( + PathJoinSubstitution([package_share, "config", f"sim_game_settings_{int(robot_domain)}.yaml"]) + ) + ) + + return [ + Node( + package="demo_nodes_cpp", + executable="parameter_blackboard", + name="parameter_blackboard", + arguments=["--ros-args", "--log-level", "WARN"], + parameters=parameters, + ) + ] + + sim = LaunchConfiguration("sim") + return LaunchDescription( + [ + DeclareLaunchArgument("sim", default_value="false"), + DeclareLaunchArgument( + "field", + default_value=PythonExpression(["'hsl_kid' if '", sim, "' == 'true' else 'labor'"]), + description="Field name to load parameters for.", + ), + IncludeLaunchDescription( + AnyLaunchDescriptionSource( + PathJoinSubstitution([get_package_share_directory("bitbots_utils"), "launch", "welcome.launch"]) + ) + ), + OpaqueFunction(function=create_node), + ] + ) diff --git a/src/bitbots_motion/bitbots_animation_server/launch/test.launch b/src/bitbots_motion/bitbots_animation_server/launch/test.launch index 6b3f1ea6b..ac7126636 100644 --- a/src/bitbots_motion/bitbots_animation_server/launch/test.launch +++ b/src/bitbots_motion/bitbots_animation_server/launch/test.launch @@ -5,7 +5,7 @@ - + diff --git a/src/bitbots_motion/bitbots_hcm/launch/test.launch b/src/bitbots_motion/bitbots_hcm/launch/test.launch index 17009e1d5..0af40d8c8 100644 --- a/src/bitbots_motion/bitbots_hcm/launch/test.launch +++ b/src/bitbots_motion/bitbots_hcm/launch/test.launch @@ -1,7 +1,7 @@ - + diff --git a/src/bitbots_motion/bitbots_head_mover/launch/head_mover_standalone.launch b/src/bitbots_motion/bitbots_head_mover/launch/head_mover_standalone.launch index 8d15093b4..627da0c69 100644 --- a/src/bitbots_motion/bitbots_head_mover/launch/head_mover_standalone.launch +++ b/src/bitbots_motion/bitbots_head_mover/launch/head_mover_standalone.launch @@ -2,7 +2,7 @@ - + diff --git a/src/bitbots_motion/bitbots_head_mover/launch/test.launch b/src/bitbots_motion/bitbots_head_mover/launch/test.launch index 1ad7874ed..4daba5d2f 100644 --- a/src/bitbots_motion/bitbots_head_mover/launch/test.launch +++ b/src/bitbots_motion/bitbots_head_mover/launch/test.launch @@ -9,7 +9,7 @@ - + diff --git a/src/bitbots_robot/piplus_description/launch/standalone.launch b/src/bitbots_robot/piplus_description/launch/standalone.launch index daa4ff2a6..0660e7f64 100644 --- a/src/bitbots_robot/piplus_description/launch/standalone.launch +++ b/src/bitbots_robot/piplus_description/launch/standalone.launch @@ -2,7 +2,7 @@ - + diff --git a/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication.py b/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication.py index 96279558d..defdcd458 100755 --- a/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication.py +++ b/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication.py @@ -19,6 +19,7 @@ from rclpy.experimental.events_executor import EventsExecutor from rclpy.node import Node from rclpy.time import Time +from rosgraph_msgs.msg import Clock from soccer_vision_3d_msgs.msg import Robot, RobotArray from std_msgs.msg import Float32, Header from tf2_geometry_msgs import PointStamped, PoseStamped @@ -66,9 +67,24 @@ def __init__(self): self.run_spin_in_thread() self.try_to_establish_connection() - self.node.create_timer(1 / self.rate, self.send_message, callback_group=MutuallyExclusiveCallbackGroup()) + # See https://github.com/ros2/rclcpp/issues/2535 + # In sim, the builtin timers may not work correctly if there is a high load of callbacks + # This can lead to breaks and bursts which is unacceptable for this usecase + # Instead we manually implement a timer + if self.node.get_parameter("use_sim_time").value: + self.node.create_subscription( + Clock, "/clock", self.clock_cb, callback_group=MutuallyExclusiveCallbackGroup(), qos_profile=1 + ) + self.next_send_time = self.node.get_clock().now() + Duration(seconds=1 / self.rate) + else: + self.node.create_timer(1 / self.rate, self.send_message, callback_group=MutuallyExclusiveCallbackGroup()) self.receive_forever() + def clock_cb(self, msg): + if Time.from_msg(msg.clock) >= self.next_send_time: + self.send_message() + self.next_send_time = Time.from_msg(msg.clock) + Duration(seconds=1 / self.rate) + def spin(self): executor = EventsExecutor() executor.add_node(self.node) diff --git a/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/communication.py b/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/communication.py index 54f749caf..8aeab1d06 100644 --- a/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/communication.py +++ b/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/communication.py @@ -12,7 +12,8 @@ def __init__(self, node: Node, logger, team_id, robot_id): self.buffer_size: int = 1024 self.socket: socket.socket | None = None configured_target_ip: str = node.get_parameter("target_ip").value - self.target_ip, wifi_interface = resolve_target_ip(configured_target_ip) + in_sim: bool = node.get_parameter("use_sim_time").value + self.target_ip, wifi_interface = resolve_target_ip(configured_target_ip, in_sim) if wifi_interface is not None: self.logger.info( f"Using Wi-Fi broadcast address {self.target_ip} from interface {wifi_interface} for team communication" diff --git a/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/network.py b/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/network.py index 82fd035a4..7f6aa9ae0 100644 --- a/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/network.py +++ b/src/bitbots_team_communication/bitbots_team_communication/bitbots_team_communication/network.py @@ -11,10 +11,13 @@ class WifiInterfaceError(RuntimeError): pass -def resolve_target_ip(configured_target_ip: str) -> tuple[IPv4Address, str | None]: +def resolve_target_ip(configured_target_ip: str, in_sim: bool) -> tuple[IPv4Address, str | None]: if configured_target_ip.strip().lower() != "auto": return IPv4Address(configured_target_ip), None + if in_sim: + return IPv4Address("127.0.0.1"), None + return get_wifi_broadcast_address() diff --git a/src/bitbots_team_communication/bitbots_team_communication/launch/team_comm_standalone.launch b/src/bitbots_team_communication/bitbots_team_communication/launch/team_comm_standalone.launch index 528b091b1..bbc5d6cf7 100644 --- a/src/bitbots_team_communication/bitbots_team_communication/launch/team_comm_standalone.launch +++ b/src/bitbots_team_communication/bitbots_team_communication/launch/team_comm_standalone.launch @@ -4,7 +4,7 @@ - + diff --git a/src/bitbots_team_communication/bitbots_team_communication/test/network/test_network.py b/src/bitbots_team_communication/bitbots_team_communication/test/network/test_network.py index 7de059cca..ae37760a6 100644 --- a/src/bitbots_team_communication/bitbots_team_communication/test/network/test_network.py +++ b/src/bitbots_team_communication/bitbots_team_communication/test/network/test_network.py @@ -10,7 +10,17 @@ def test_resolve_manual_target_ip(mocker): auto_detection = mocker.patch.object(network, "get_wifi_broadcast_address") - target_ip, interface = network.resolve_target_ip("10.0.6.255") + target_ip, interface = network.resolve_target_ip("10.0.6.255", in_sim=False) + + assert target_ip == IPv4Address("10.0.6.255") + assert interface is None + auto_detection.assert_not_called() + + +def test_resolve_manual_target_ip_ignores_sim(mocker): + auto_detection = mocker.patch.object(network, "get_wifi_broadcast_address") + + target_ip, interface = network.resolve_target_ip("10.0.6.255", in_sim=True) assert target_ip == IPv4Address("10.0.6.255") assert interface is None @@ -24,12 +34,22 @@ def test_resolve_auto_target_ip(mocker): return_value=(IPv4Address("10.0.6.255"), "wlp2s0"), ) - target_ip, interface = network.resolve_target_ip("auto") + target_ip, interface = network.resolve_target_ip("auto", in_sim=False) assert target_ip == IPv4Address("10.0.6.255") assert interface == "wlp2s0" +def test_resolve_auto_target_ip_in_sim_uses_localhost(mocker): + auto_detection = mocker.patch.object(network, "get_wifi_broadcast_address") + + target_ip, interface = network.resolve_target_ip("auto", in_sim=True) + + assert target_ip == IPv4Address("127.0.0.1") + assert interface is None + auto_detection.assert_not_called() + + def test_auto_target_ip_errors_without_wifi_interface(tmp_path, monkeypatch): monkeypatch.setattr(network, "SYS_CLASS_NET", tmp_path) (tmp_path / "eth0").mkdir() diff --git a/src/lib/udp_bridge/launch/send_standalone.launch b/src/lib/udp_bridge/launch/send_standalone.launch index 015cb48fd..799c46b3a 100644 --- a/src/lib/udp_bridge/launch/send_standalone.launch +++ b/src/lib/udp_bridge/launch/send_standalone.launch @@ -1,5 +1,5 @@ - +