From 5cc7783c7dceb565e9fb049ffae233aeb8ff72b9 Mon Sep 17 00:00:00 2001 From: Michael Reiser Date: Wed, 14 Oct 2026 19:11:35 +0000 Subject: [PATCH 1/9] =?UTF-8?q?ros2-poc:=20ROS=202=20bridge=20proof=20of?= =?UTF-8?q?=20concept=20(LAB-303)=20=E2=80=94=20Zenoh=20graph,=20adapters,?= =?UTF-8?q?=20bridge=20node=20reusing=20bridge.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Separate pixi workspace (RoboStack Jazzy + conda-forge; osx-arm64/win-64/linux-64) under ros2-poc/; the root pixi.toml and fictrac-bridge/ are untouched so bridge 3.4 stays side by side. - Zenoh router + rmw_zenoh_cpp with loopback-only configs (stock files, endpoint lines only) - fictrac_udp_adapter: FicTrac UDP → /fictrac/raw (std_msgs/String JSON), FicTrac untouched - kinefly_udp_adapter + kinefly_sim: KF/1 (mbreiser/Kinefly-MacOS) → /kinefly/raw - bias_node + bias_sim + bias_cmd: BIAS HTTP command port ⇄ /bias/cmd,/bias/reply,/bias/status; timeout = unknown outcome + reconcile; video file reported as an artifact - bridge_node: bridge.py's Hub/LogWriter/Pipeline/make_dispatcher on ROS input, same WebSocket schema on ws://localhost:8765, same behavior_v2 log; adds connector_status latency lines, source_lost/resumed watchdog, ["kf",…] rows, BIAS connector events, /arena/frame mirror - rig.py: one `pixi run rig` command supervising router + nodes - tests: studio_emulator (the Studio runner's exact bridge conversation), check_runlog_readers (JS readers accept the log), test_ros2_poc (29 checks incl. adapter SIGKILL mid-run, closed-loop report rejection/idx checks, convert round trip): 29/29 on Linux Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01KHyggowbCA5ucBg71bU26V --- ros2-poc/.gitignore | 9 + ros2-poc/README.md | 135 + ros2-poc/config/zenoh-router.json5 | 813 + ros2-poc/config/zenoh-session.json5 | 820 + ros2-poc/nodes/bias_cmd.py | 88 + ros2-poc/nodes/bias_node.py | 253 + ros2-poc/nodes/bias_sim.py | 203 + ros2-poc/nodes/bridge_node.py | 425 + ros2-poc/nodes/fictrac_udp_adapter.py | 145 + ros2-poc/nodes/kinefly_sim.py | 96 + ros2-poc/nodes/kinefly_udp_adapter.py | 157 + ros2-poc/nodes/rig.py | 174 + ros2-poc/pixi.lock | 20673 +++++++++++++++++++++++ ros2-poc/pixi.toml | 65 + ros2-poc/tests/check_runlog_readers.js | 148 + ros2-poc/tests/studio_emulator.py | 261 + ros2-poc/tests/test_ros2_poc.py | 341 + 17 files changed, 24806 insertions(+) create mode 100644 ros2-poc/.gitignore create mode 100644 ros2-poc/README.md create mode 100644 ros2-poc/config/zenoh-router.json5 create mode 100644 ros2-poc/config/zenoh-session.json5 create mode 100644 ros2-poc/nodes/bias_cmd.py create mode 100644 ros2-poc/nodes/bias_node.py create mode 100644 ros2-poc/nodes/bias_sim.py create mode 100644 ros2-poc/nodes/bridge_node.py create mode 100644 ros2-poc/nodes/fictrac_udp_adapter.py create mode 100644 ros2-poc/nodes/kinefly_sim.py create mode 100644 ros2-poc/nodes/kinefly_udp_adapter.py create mode 100644 ros2-poc/nodes/rig.py create mode 100644 ros2-poc/pixi.lock create mode 100644 ros2-poc/pixi.toml create mode 100644 ros2-poc/tests/check_runlog_readers.js create mode 100644 ros2-poc/tests/studio_emulator.py create mode 100644 ros2-poc/tests/test_ros2_poc.py diff --git a/ros2-poc/.gitignore b/ros2-poc/.gitignore new file mode 100644 index 00000000..78a76548 --- /dev/null +++ b/ros2-poc/.gitignore @@ -0,0 +1,9 @@ +# pixi environment for this workspace (pixi.toml + pixi.lock are tracked) +.pixi/* +!.pixi/config.toml +__pycache__/ +*.pyc +# bridge-node run logs land here by default +runlogs/ +*.jsonl +*.jsonl.gz diff --git a/ros2-poc/README.md b/ros2-poc/README.md new file mode 100644 index 00000000..57dee228 --- /dev/null +++ b/ros2-poc/README.md @@ -0,0 +1,135 @@ +# ROS 2 bridge proof of concept (LAB-303) + +A bounded spike, not a product: can the web runner's bridge be a ROS 2 node graph while the +**unmodified Arena Studio** keeps connecting to `ws://localhost:8765`, the **run log stays the +same file every reader already accepts**, and the devices (FicTrac, Kinefly, BIAS) sit behind +small adapters with **no custom message types**? Decision context: Linear LAB-303 (2026-10-14 +comment holds the acceptance criteria), `docs/development/bridge-connectors-exec-summary.md`. + +This directory is its own pixi workspace. The root `pixi.toml` and `fictrac-bridge/` are +untouched, so bridge 3.4 (`pixi run bridge` at the repo root) stays installed side by side. + +``` + fictrac_sim.py / FicTrac ──UDP :60000──▶ fictrac_udp_adapter ──/fictrac/raw──▶┐ + Kinefly (KF/1) ──UDP :60001──▶ kinefly_udp_adapter ──/kinefly/raw──▶│ bridge_node ──ws://localhost:8765──▶ Arena Studio (unmodified) + BIAS (HTTP :5010) ◀────────────── bias_node ◀──/bias/cmd /bias/reply,status──▶│ │ ──/arena/frame──▶ any ROS node + └─────┴──▶ runlogs/arena-log-*.jsonl (behavior_v2, as today) + all topics std_msgs/String carrying JSON · middleware rmw_zenoh_cpp · one Zenoh router per host, loopback only +``` + +## Setup and run + +```bash +cd ros2-poc +pixi install # RoboStack Jazzy ros-base + rmw_zenoh + demo nodes + websockets/pyzmq (≈1.3 GB) +pixi run rig # router + FicTrac adapter + bridge node → Studio connects to ws://localhost:8765 +pixi run rig -- --kinefly --bias # + Kinefly KF/1 adapter + BIAS node +pixi run rig -- --sim --bias --bias-sim # demo with no hardware: FicTrac sim + a fake BIAS program +pixi run test # the acceptance run (≈ 60 s, no hardware, see below) +``` + +Pieces, individually (each is also a `pixi run` task; `--help` on every script): + +| task | what | +|---|---| +| `router` | `ros2 run rmw_zenoh_cpp rmw_zenohd` with `config/zenoh-router.json5` (listens on `tcp/127.0.0.1:7447`) | +| `talker` / `listener` | the stock `demo_nodes_py` pair — the first thing to run on a new machine | +| `fictrac-adapter` | UDP :60000 → `/fictrac/raw`; FicTrac's own `sock_port` stays what it is today | +| `kinefly-adapter` | UDP :60001 → `/kinefly/raw`; accepts only `protocol: "Kinefly", version: 1` datagrams | +| `bias-node` / `bias-cmd` | BIAS HTTP command port ⇄ `/bias/cmd`, `/bias/reply`, `/bias/status`; `bias-cmd` sends one plugin command | +| `bridge-node` | bridge.py's `Hub` + `LogWriter` + `Pipeline` + `make_dispatcher` on ROS input; `/arena/frame` mirror | +| `sim` | the root `fictrac-bridge/fictrac_sim.py`, unmodified (`-- --model fly --kp 2` for a fixating fly) | +| `kinefly-sim` / `bias-sim` | synthetic KF/1 producer; a fake BIAS program (HTTP, state machine, writes the video file) | +| `studio-emulator` | the Studio runner's exact bridge conversation, for machines without a browser | + +Environment set by the workspace (`[activation.env]`): `RMW_IMPLEMENTATION=rmw_zenoh_cpp`, +`ZENOH_ROUTER_CHECK_ATTEMPTS=0` (nodes wait for the router), `ZENOH_ROUTER_CONFIG_URI` / +`ZENOH_SESSION_CONFIG_URI` → the two files under `config/` (stock rmw_zenoh configs with the +endpoint changed from `tcp/[::]:7447` / `tcp/localhost:7447` to `tcp/127.0.0.1:7447`: the +stock router fails on a host without IPv6, and a rig's graph should not be reachable from the +lab network anyway). + +## What was built in the first day + +**Hour one (middleware bring-up).** `pixi install` resolved and installed for linux-64, +osx-arm64 and win-64 from `conda-forge` + `robostack-jazzy` with no manual step (Python 3.12, +`ros-jazzy-ros-base` 0.11, `ros-jazzy-rmw-zenoh-cpp` 0.2.9). Router up; talker/listener 7 of 7 +messages under `rmw_zenoh_cpp`; the FicTrac adapter republished the simulator at 50.0 Hz +(`ros2 topic hz`) as one `std_msgs/String` JSON envelope per record: +`{"src":"fictrac","seq":…,"rx_epoch_ms":…,"rx_mono_ns":…,"raw":""}`. + +**The bridge node** (`nodes/bridge_node.py`) imports `fictrac-bridge/bridge.py` by path and +reuses its four load-bearing parts unmodified. Only the input changed (a subscription instead +of a UDP socket), so the run log is the behavior_v2 file bridge 3.4 writes. Additions, all +visible in the log: `connector_status` lines (frames per source, adapter→bridge latency +p50/p99), `source_lost` / `source_resumed` when a logged source goes silent (`--source-timeout`, +default 2 s), `["kf", ms, seq, src_t_s, left, right, head, abdomen]` rows from Kinefly, and +`{"type":"connector","src":"bias",…}` events for every BIAS reply and status poll. The +`fictrac_port` config key is acknowledged with a warning instead of re-binding (the adapter +owns the socket). + +**Kinefly** (`nodes/kinefly_udp_adapter.py`): KF/1 as specified in +`mbreiser/Kinefly-MacOS/docs/udp-protocol.md` — protocol discrimination before any decoding, +non-KF/1 datagrams counted and dropped, the record republished verbatim. Logging only; the +L−R → yaw integrator is slice 2 work and is deliberately not here. + +**BIAS** (`nodes/bias_node.py`): the protocol's `camera` plugin commands (`connect`, +`startRecording`, `stopRecording`, `startPreview`, `stopCapture`, `getTimestamp`, `disconnect`) +mapped to BIAS's HTTP command sequences; a timeout is an **unknown** outcome (`outcome: +"unknown"`, then a `get-status` reconcile); `startRecording` reports the video file as an +`artifact`. Since the Studio does not send plugin commands to the bridge yet, commands come from +`pixi run bias-cmd` (or any node publishing `/bias/cmd`). + +## Acceptance run (`pixi run test`, `tests/test_ros2_poc.py`) + +Brings up the whole graph in-process, drives it with `fictrac_sim.py --model fly --kp 2` on +the WebSocket (FicTrac untouched) and `tests/studio_emulator.py` (3 constant-bias epochs of +6 s, the exact message sequence of `js/fictrac-bridge-client.js` + `js/arena-runner-g6.js`, +one `arena_command` echo per applied frame honouring the epoch gate), **SIGKILLs the FicTrac +adapter 2 s into epoch 2 and restarts it 3 s later**, and sends BIAS commands mid-run. +Result on 2026-10-14 (Linux container, loopback): **29 / 29**. + +| LAB-303 criterion | evidence | +|---|---| +| pixi install, no manual steps; one `pixi run rig` | lock file for osx-arm64 / win-64 / linux-64; `rig.py` supervises router + nodes | +| no custom message types | `std_msgs/String` only (checked by grepping `nodes/`) | +| FicTrac via the sim through a UDP→ROS adapter, FicTrac untouched | `fictrac_sim.py` unmodified; 912 rows logged, every frame | +| Kinefly fork via a KF/1 adapter | 2153 `["kf",…]` rows with left/right angles; garbage datagram rejected | +| BIAS via the Mac port | here `bias_sim.py`: 25 connector events, video artifact path logged and file present; the real port = same HTTP interface, **to confirm on the Mac** | +| unmodified Studio passes the closed-loop report | emulator 12/12 protocol assertions; report: 3 epochs from `fictracApply`, rejection **+1.01 / +0.32 (interrupted) / +0.99**, idx mismatch 0.00 % | +| … and the runlog format tests | `js/runlog-format` normalizer + `js/runlog-replay` parser accept all 3865 lines; `bridge.py --convert` v2→v1→v2 byte-identical | +| the closed-loop node stamps its own sample time | `Pipeline.handle_line`'s `now_ms()` (reused); adapter→bridge latency p50 1.7 ms, p99 3.8 ms logged | +| bridge 3.4 stays installed side by side | root `bridge.py --version` still `fictrac-bridge 3.4 …` | +| a device node killed mid-run leaves the log intact | `source_lost` (silence 1835 ms) + `source_resumed` logged; file closes normally; every reader parses it | + +One subtlety the harness documents: the report's epoch opens at the `fictracApply` event's +millisecond, and a FicTrac row computed under the previous mapping can carry that same +millisecond (it is even written before the config line). The report then reconstructs that +one row with the new epoch's bias and tare. The bar is therefore "≤ 1 boundary row", which is +what bridge 3.4 produces as well; the mapping itself is exact. + +## Not verified here (needs the Mac / a rig) + +* A real browser: Web Serial and the Studio UI were replaced by the emulator. Run the Studio + against `pixi run rig -- --sim` on the Mac and commit a run log through the normal path. +* The real BIAS Mac port: command names and the JSON-array reply shape follow BIAS's + documented external interface; the `value` payloads are logged verbatim and untested. +* The real Kinefly fork sending `--udp 127.0.0.1:60001` (only `kinefly_sim.py`, which follows + `kinefly/core/udp.py` byte for byte, was used). +* Windows (`win-64` resolves and locks; nothing was executed there) and the macOS router with + IPv6 present (the loopback config sidesteps it). +* `scripts/runlog-check.py` fails on these logs for want of `run_metadata.firmware`, + `stream_schema` and `trial_quality`, which only a Studio run with a controller produces. + +## Observations for the decision + +* Install friction was low: a ~1.3 GB environment, one lock file, no system packages. The + only environment-specific knobs were the two Zenoh endpoint lines. +* The graph adds ~1.7 ms (p50) between the UDP receive and the bridge on loopback; the + WebSocket side is unchanged. +* `rmw_zenoh` needs the router process running; without it nodes retry forever + (`ZENOH_ROUTER_CHECK_ATTEMPTS=0`). `rig.py` starts it first and waits for the port. +* Everything a student would debug is `ros2 topic echo /fictrac/raw`, `/kinefly/raw`, + `/bias/status`, `/arena/frame` — plain JSON strings. +* Not exercised: rosbag recording, rosbridge, Frank's FicTrac ROS 2 node pair. The log stayed + the bridge's NDJSON on purpose (the readers are the expensive part to replace). diff --git a/ros2-poc/config/zenoh-router.json5 b/ros2-poc/config/zenoh-router.json5 new file mode 100644 index 00000000..735de3ad --- /dev/null +++ b/ros2-poc/config/zenoh-router.json5 @@ -0,0 +1,813 @@ +/// This file attempts to list and document available configuration elements. +/// For a more complete view of the configuration's structure, check out `zenoh/src/config.rs`'s `Config` structure. +/// Note that the values here are correctly typed, but may not be sensible, so copying this file to change only the parts that matter to you is not good practice. +{ + /// The identifier (as unsigned 128bit integer in hexadecimal lowercase - leading zeros are not accepted) + /// that zenoh runtime will use. + /// If not set, a random unsigned 128bit integer will be used. + /// WARNING: this id must be unique in your zenoh network. + // id: "1234567890abcdef", + + /// The node's mode (router, peer or client) + mode: "router", + + /// Which endpoints to connect to. E.g. tcp/localhost:7447. + /// By configuring the endpoints, it is possible to tell zenoh which router/peer to connect to at startup. + /// + /// For TCP/UDP on Linux, it is possible additionally specify the interface to be connected to: + /// E.g. tcp/192.168.0.1:7447#iface=eth0, for connect only if the IP address is reachable via the interface eth0 + /// + /// It is also possible to specify a priority range and/or a reliability setting to be used on the link. + /// For example `tcp/localhost?prio=6-7;rel=0` assigns priorities "data_low" and "background" to the established link. + /// + /// For TCP and TLS links, it is possible to specify the TCP buffer sizes: + /// E.g. tcp/192.168.0.1:7447#so_sndbuf=65000;so_rcvbuf=65000 + /// For TCP, UDP, Quic and TLS links, it is possible to specify a `bind` address for the local socket: + /// E.g. tcp/192.168.0.1:7447#bind=192.168.0.1:0 + /// Note!: Currently it is unsupported to specify both `bind` and `iface`. + /// + /// For TCP/UDP links, it's possible to specify the DSCP field of the IP header: + /// E.g. tcp/192.168.0.1:7447#dscp=0x08 + connect: { + /// timeout waiting for all endpoints connected (0: no retry, -1: infinite timeout) + /// Accepts a single value (e.g. timeout_ms: 0) + /// or different values for router, peer and client (e.g. timeout_ms: { router: -1, peer: -1, client: 0 }). + timeout_ms: { router: -1, peer: -1, client: 0 }, + + /// The list of endpoints to connect to. + /// Accepts a single list (e.g. endpoints: ["tcp/10.10.10.10:7447", "tcp/11.11.11.11:7447"]) + /// or different lists for router, peer and client (e.g. endpoints: { router: ["tcp/10.10.10.10:7447"], peer: ["tcp/11.11.11.11:7447"] }). + /// + /// See https://docs.rs/zenoh/latest/zenoh/config/struct.EndPoint.html + endpoints: [ + // "/
" + ], + + /// Global connect configuration, + /// Accepts a single value or different values for router, peer and client. + /// The configuration can also be specified for the separate endpoint + /// it will override the global one + /// E.g. tcp/192.168.0.1:7447#retry_period_init_ms=20000;retry_period_max_ms=10000" + + /// exit from application, if timeout exceed + exit_on_failure: { router: false, peer: false, client: true }, + /// connect establishing retry configuration + retry: { + /// initial wait timeout until next connect try + period_init_ms: 1000, + /// maximum wait timeout until next connect try + period_max_ms: 4000, + /// increase factor for the next timeout until nexti connect try + period_increase_factor: 2, + }, + }, + + /// Which endpoints to listen on. E.g. tcp/0.0.0.0:7447. + /// By configuring the endpoints, it is possible to tell zenoh which are the endpoints that other routers, + /// peers, or client can use to establish a zenoh session. + /// + /// For TCP/UDP on Linux, it is possible additionally specify the interface to be listened to: + /// E.g. tcp/0.0.0.0:7447#iface=eth0, for listen connection only on eth0 + /// + /// It is also possible to specify a priority range and/or a reliability setting to be used on the link. + /// For example `tcp/localhost?prio=6-7;rel=0` assigns priorities "data_low" and "background" to the established link. + /// + /// For TCP and TLS links, it is possible to specify the TCP buffer sizes: + /// E.g. tcp/192.168.0.1:7447#so_sndbuf=65000;so_rcvbuf=65000 + /// + /// For TCP/UDP links, it's possible to specify the DSCP field of the IP header: + /// E.g. tcp/192.168.0.1:7447#dscp=0x08 + listen: { + /// timeout waiting for all listen endpoints (0: no retry, -1: infinite timeout) + /// Accepts a single value (e.g. timeout_ms: 0) + /// or different values for router, peer and client (e.g. timeout_ms: { router: -1, peer: -1, client: 0 }). + timeout_ms: 0, + + /// The list of endpoints to listen on. + /// Accepts a single list (e.g. endpoints: ["tcp/[::]:7447", "udp/[::]:7447"]) + /// or different lists for router, peer and client (e.g. endpoints: { router: ["tcp/[::]:7447"], peer: ["tcp/[::]:0"] }). + /// + /// See https://docs.rs/zenoh/latest/zenoh/config/struct.EndPoint.html + endpoints: [ + "tcp/127.0.0.1:7447" + ], + + /// Global listen configuration, + /// Accepts a single value or different values for router, peer and client. + /// The configuration can also be specified for the separate endpoint + /// it will override the global one + /// E.g. tcp/192.168.0.1:7447#exit_on_failure=false;retry_period_max_ms=1000" + + /// exit from application, if timeout exceed + exit_on_failure: true, + /// listen retry configuration + retry: { + /// initial wait timeout until next try + period_init_ms: 1000, + /// maximum wait timeout until next try + period_max_ms: 4000, + /// increase factor for the next timeout until next try + period_increase_factor: 2, + }, + }, + + /// Configure the session open behavior. + open: { + /// Configure the conditions to be met before session open returns. + return_conditions: { + /// Session open waits to connect to scouted peers and routers before returning. + /// When set to false, first publications and queries after session open from peers may be lost. + connect_scouted: true, + /// Session open waits to receive initial declares from connected peers before returning. + /// Setting to false may cause extra traffic at startup from peers. + declares: true, + }, + }, + + /// Configure the scouting mechanisms and their behaviours + scouting: { + /// In client mode, the period in milliseconds dedicated to scouting for a router before failing. + timeout: 3000, + /// In peer mode, the maximum period in milliseconds dedicated to scouting remote peers before attempting other operations. + delay: 500, + /// The multicast scouting configuration. + multicast: { + /// Whether multicast scouting is enabled or not + /// + /// ROS setting: disable multicast discovery by default + enabled: false, + /// The socket which should be used for multicast scouting + address: "224.0.0.224:7446", + /// The network interface which should be used for multicast scouting + interface: "auto", // If not set or set to "auto" the interface if picked automatically + /// The time-to-live on multicast scouting packets + ttl: 1, + /// Which type of Zenoh instances to automatically establish sessions with upon discovery on UDP multicast. + /// Accepts a single value (e.g. autoconnect: ["router", "peer"]) which applies whatever the configured "mode" is, + /// or different values for router, peer or client mode (e.g. autoconnect: { router: [], peer: ["router", "peer"] }). + /// Each value is a list of: "peer", "router" and/or "client". + autoconnect: { router: [], peer: ["router", "peer"], client: ["router"] }, + /// Strategy for autoconnection, mainly to avoid nodes connecting to each other redundantly. + /// Possible options are: + /// - "always": always attempt to autoconnect, may result in redundant connections. + /// - "greater-zid": attempt to connect to another node only if its own zid is greater than the other's. + /// If both nodes use this strategy, only one will attempt the connection. + /// This strategy may not be suited if one of the nodes is not reachable by the other one, for example + /// because of a private IP. + /// Accepts a single value (e.g. autoconnect: "always") which applies whatever node would be auto-connected to, + /// or different values for router and/or peer depending on the type of node detected + /// (e.g. autoconnect_strategy : { to_router: "always", to_peer: "greater-zid" }), + /// or different values for router or peer mode + /// (e.g. autoconnect_strategy : { peer: { to_router: "always", to_peer: "greater-zid" } }). + autoconnect_strategy: { router: { to_router: "always", to_peer: "always" } }, + /// Whether or not to listen for scout messages on UDP multicast and reply to them. + listen: true, + }, + /// The gossip scouting configuration. Note that instances in "client" mode do not participate in gossip. + gossip: { + /// Whether gossip scouting is enabled or not + enabled: true, + /// When true, gossip scouting information are propagated multiple hops to all nodes in the local network. + /// When false, gossip scouting information are only propagated to the next hop. + /// Activating multihop gossip implies more scouting traffic and a lower scalability. + /// It mostly makes sense when using "linkstate" routing mode where all nodes in the subsystem don't have + /// direct connectivity with each other. + multihop: false, + /// Which type of Zenoh instances to send gossip messages to. + /// Accepts a single value (e.g. target: ["router", "peer"]) which applies whatever the configured "mode" is, + /// or different values for router or peer mode (e.g. target: { router: ["router", "peer"], peer: ["router"] }). + /// Each value is a list of "peer" and/or "router". + /// ROS setting: by default all peers rely on the router to discover each other. Thus configuring the peer to send gossip + /// messages only to the router is sufficient and avoids unecessary traffic between Nodes at launch time. + target: { router: ["router", "peer"], peer: ["router"]}, + /// Which type of Zenoh instances to automatically establish sessions with upon discovery on gossip. + /// Accepts a single value (e.g. autoconnect: ["router", "peer"]) which applies whatever the configured "mode" is, + /// or different values for router or peer mode (e.g. autoconnect: { router: [], peer: ["router", "peer"] }). + /// Each value is a list of: "peer" and/or "router". + autoconnect: { router: [], peer: ["router", "peer"] }, + /// Strategy for autoconnection, mainly to avoid nodes connecting to each other redundantly. + /// Possible options are: + /// - "always": always attempt to autoconnect, may result in redundant connections. + /// - "greater-zid": attempt to connect to another node only if its own zid is greater than the other's. + /// If both nodes use this strategy, only one will attempt the connection. + /// This strategy may not be suited if one of the nodes is not reachable by the other one, for example + /// because of a private IP. + /// Accepts a single value (e.g. autoconnect: "always") which applies whatever node would be auto-connected to, + /// or different values for router and/or peer depending on the type of node detected + /// (e.g. autoconnect_strategy : { to_router: "always", to_peer: "greater-zid" }), + /// or different values for router or peer mode + /// (e.g. autoconnect_strategy : { peer: { to_router: "always", to_peer: "greater-zid" } }). + autoconnect_strategy: { router: { to_router: "always", to_peer: "always" } }, + }, + }, + + /// Configuration of data messages timestamps management. + timestamping: { + /// Whether data messages should be timestamped if not already. + /// Accepts a single boolean value or different values for router, peer and client. + /// + /// ROS setting: PublicationCache which is required for transient_local durability + /// only works when time-stamping is enabled. + enabled: { router: true, peer: true, client: true }, + /// Whether data messages with timestamps in the future should be dropped or not. + /// If set to false (default), messages with timestamps in the future are retimestamped. + /// Timestamps are ignored if timestamping is disabled. + drop_future_timestamp: false, + }, + + /// The default timeout to apply to queries in milliseconds. + /// ROS setting: The default value of 600000 ms (10 minutes) is already quite high, but it can be increased if needed. + /// For instance to avoid timeout with Service Server that that is unresponsive or lagging, + /// which could occur at launch time with a large number of Nodes starting all together. + /// It’s recommended to configure a value that exceeds the longest timeout specified in any + /// `spin_until_complete(service_call_future_result, timeout)` call. + /// Note that the action-related service "get_result" is hard-coded with an infinite timeout, + /// as in some use case an action could spend several hours (e.g. mission plans). + queries_default_timeout: 600000, + + /// The routing strategy to use and it's configuration. + routing: { + /// The routing strategy to use in routers and it's configuration. + router: { + /// When set to true a router will forward data between two peers + /// directly connected to it if it detects that those peers are not + /// connected to each other. + /// The failover brokering only works if gossip discovery is enabled + /// and peers are configured with gossip target "router". + /// ROS setting: disabled by default because it serves no purpose when each peer connects directly to all others, + /// and it introduces additional management overhead and extra messages during system startup. + peers_failover_brokering: false, + /// Linkstate mode configuration. + linkstate: { + /// Weights of the outgoing transports in linkstate mode. + /// If none of the two endpoint nodes of a transport specifies its weight, a weight of 100 is applied. + /// If only one of the two endpoint nodes of a transport specifies its weight, the specified weight is applied. + /// If both endpoint nodes of a transport specify its weight, the greater weight is applied. + // transport_weights: [ + // { dst_zid: "1", weight: "10" }, + // { dst_zid: "2", weight: "200" }, + // ] + }, + }, + /// The routing strategy to use in peers and it's configuration. + peer: { + /// The routing strategy to use in peers. ("peer_to_peer" or "linkstate"). + /// This option needs to be set to the same value in all peers and routers of the subsystem. + mode: "peer_to_peer", + /// Linkstate mode configuration (only taken into account if mode == "linkstate"). + linkstate: { + /// Weights of the outgoing transports in linkstate mode. + /// If none of the two endpoint nodes of a transport specifies its weight, a weight of 100 is applied. + /// If only one of the two endpoint nodes of a transport specifies its weight, the specified weight is applied. + /// If both endpoint nodes of a transport specify its weight, the greater weight is applied. + // transport_weights: [ + // { dst_zid: "1", weight: "10" }, + // { dst_zid: "2", weight: "200" }, + // ] + }, + }, + /// The interests-based routing configuration. + /// This configuration applies regardless of the mode (router, peer or client). + interests: { + /// The timeout to wait for incoming interests declarations in milliseconds. + /// The expiration of this timeout implies that the discovery protocol might be incomplete, + /// leading to potential loss of messages, queries or liveliness tokens. + timeout: 10000, + }, + }, + + // /// Overwrite QoS options for Zenoh messages by key expression (ignores Zenoh API QoS config for overwritten values) + // qos: { + // /// Overwrite QoS options for PUT and DELETE messages + // publication: [ + // { + // /// PUT and DELETE messages on key expressions that are included by these key expressions + // /// will have their QoS options overwritten by the given config. + // key_exprs: ["demo/**", "example/key"], + // /// Configurations that will be applied on the publisher. + // /// Options that are supplied here will overwrite the configuration given in Zenoh API + // config: { + // congestion_control: "block", + // priority: "data_high", + // express: true, + // reliability: "best_effort", + // allowed_destination: "remote", + // }, + // }, + // ], + // /// Overwrite QoS options for messages sent and received from/to the network + // /// This allows more fine grained rules (per network card, etc...) but is + // /// less performant than the publication option above. + // network: [ + // { + // /// Optional Id, has to be unique. + // id: "lo0_en0_qos_overwrite", + // /// Optional list of ZIDs on which qos will be overwritten when communicating with. + // // zids: ["38a4829bce9166ee"], + // /// Optional list of interfaces, if not specified, will be applied to all interfaces. + // interfaces: [ + // "lo0", + // "en0", + // ], + // /// Optional list of link protocols. Transports with at least one of these links will have their qos overwritten. + // /// If absent, the overwrite will be applied to all transports. An empty list is invalid. + // link_protocols: [ "tcp", "udp", "tls", "quic", "ws", "serial", "unixsock-stream", "unixpipe", "vsock"], + // /// List of message types to apply to. + // messages: [ + // "put", // put publications + // "delete", // delete publications + // "query", // get queries + // "reply", // replies to queries + // ], + // /// Optional list of data flows messages will be processed on ("egress" and/or "ingress"). + // /// If absent, the rules will be applied to both flows. + // flows: ["egress", "ingress"], + // /// QoS filter to apply to the messages matching this item. + // qos: { + // congestion_control: "drop", + // priority: "data", + // express: true, + // reliability: "reliable", + // }, + // /// payload_size range for the messages matching this item. + // payload_size: "1000000..", + // key_exprs: ["test/demo"], + // overwrite: { + // /// Optional new priority value, if not specified priority of the messages will stay unchanged. + // priority: "real_time", + // /// Optional new congestion control value, if not specified congestion control of the messages will stay unchanged. + // congestion_control: "block", + // /// Optional new express value, if not specified express flag of the messages will stay unchanged. + // express: true, + // }, + // }, + // ], + // }, + + // /// The declarations aggregation strategy. + // aggregation: { + // /// A list of key-expressions for which all included subscribers will be aggregated into. + // subscribers: [ + // // key_expression + // ], + // /// A list of key-expressions for which all included publishers will be aggregated into. + // publishers: [ + // // key_expression + // ], + // }, + + // /// Namespace prefix. + // /// If specified, all outgoing key expressions will be automatically prefixed with specified string, + // /// and all incoming key expressions will be stripped of specified prefix. + // /// The namespace prefix should satisfy all key expression constraints + // /// and additionally it can not contain wild characters ('*'). + // /// Namespace is applied to the session. + // /// E. g. if session has a namespace of "1" then session.put("my/keyexpr", my_message), + // /// will put a message into 1/my/keyexpr. Same applies to all other operations within this session. + // namespace: "my/namespace", + + // /// The downsampling declaration. + // downsampling: [ + // { + // /// Optional Id, has to be unique + // id: "wlan0egress", + // /// Optional list of network interfaces messages will be processed on, the rest will be passed as is. + // /// If absent, the rules will be applied to all interfaces. An empty list is invalid. + // interfaces: [ "wlan0" ], + // /// Optional list of link protocols. Transports with at least one of these links will have their messages filtered. + // /// If absent, the rules will be applied to all transports. An empty list is invalid. + // link_protocols: [ "tcp", "udp", "tls", "quic", "ws", "serial", "unixsock-stream", "unixpipe", "vsock"], + // /// Optional list of data flows messages will be processed on ("egress" and/or "ingress"). + // /// If absent, the rules will be applied to both flows. + // flows: ["ingress", "egress"], + // /// List of message type on which downsampling will be applied. Must not be empty. + // messages: [ + // /// Delete + // "delete", + // /// Put + // "put", + // /// Get + // "query", + // /// Queryable Reply to a Query + // "reply", + // ], + // /// A list of downsampling rules: key_expression and the maximum frequency in Hertz + // rules: [ + // { key_expr: "demo/example/zenoh-rs-pub", freq: 0.1 }, + // ], + // }, + // ], + + // /// Configure access control (ACL) rules + // access_control: { + // /// [true/false] acl will be activated only if this is set to true + // "enabled": false, + // /// [deny/allow] default permission is deny (even if this is left empty or not specified) + // "default_permission": "deny", + // /// Rule set for permissions allowing or denying access to key-expressions + // "rules": + // [ + // { + // /// Id has to be unique within the rule set + // "id": "rule1", + // "messages": [ + // "put", "delete", "declare_subscriber", + // "query", "reply", "declare_queryable", + // "liveliness_token", "liveliness_query", "declare_liveliness_subscriber", + // ], + // "flows":["egress","ingress"], + // "permission": "allow", + // "key_exprs": [ + // "test/demo" + // ], + // }, + // { + // "id": "rule2", + // "messages": [ + // "put", "delete", "declare_subscriber", + // "query", "reply", "declare_queryable", + // ], + // "flows":["ingress"], + // "permission": "allow", + // "key_exprs": [ + // "**" + // ], + // }, + // ], + // /// List of combinations of subjects. + // /// + // /// If a subject property (i.e. username, certificate common name or interface) is empty + // /// it is interpreted as a wildcard. Moreover, a subject property cannot be an empty list. + // "subjects": + // [ + // { + // /// Id has to be unique within the subjects list + // "id": "subject1", + // /// Subjects can be interfaces + // "interfaces": [ + // "lo0", + // "en0", + // ], + // /// Subjects can be cert_common_names when using TLS or Quic + // "cert_common_names": [ + // "example.zenoh.io" + // ], + // /// Subjects can be usernames when using user/password authentication + // "usernames": [ + // "zenoh-example" + // ], + // /// This instance translates internally to this filter: + // /// (interface="lo0" && cert_common_name="example.zenoh.io" && username="zenoh-example") || + // /// (interface="en0" && cert_common_name="example.zenoh.io" && username="zenoh-example") + // }, + // { + // "id": "subject2", + // "interfaces": [ + // "lo0", + // "en0", + // ], + // "cert_common_names": [ + // "example2.zenoh.io" + // ], + // /// This instance translates internally to this filter: + // /// (interface="lo0" && cert_common_name="example2.zenoh.io") || + // /// (interface="en0" && cert_common_name="example2.zenoh.io") + // }, + // { + // "id": "subject3", + // /// An empty subject combination is a wildcard + // }, + // { + // "id": "subject4", + // /// link protocols can also be used to identify transports to filter messages on. + // /// If absent, the rules will be applied to all transports. An empty list is invalid. + // link_protocols: [ "tcp", "udp", "tls", "quic", "ws", "serial", "unixsock-stream", "unixpipe", "vsock"], + // /// ZIDs can also be used to identify transports to filter messages on. + // /// NOTE: ZID is not backed by an authentication mechanism, it can only be trusted for ACL if it is + // /// dynamically added/removed by eventual dedicated Zenoh mechanisms when transports are opened/closed. + // /// If managed manually in ACL config, can be useful for prototyping but should not be used in production! + // zids: ["38a4829bce9166ee"], + // }, + // ], + // /// The policies list associates rules to subjects + // "policies": + // [ + // /// Each policy associates one or multiple rules to one or multiple subject combinations + // { + // /// Id is optional. If provided, it has to be unique within the policies list + // "id": "policy1", + // /// Rules and Subjects are identified with their unique IDs declared above + // "rules": ["rule1"], + // "subjects": ["subject1", "subject2"], + // }, + // { + // "rules": ["rule2"], + // "subjects": ["subject3", "subject4"], + // }, + // ] + // }, + + // low_pass_filter: [ + // { + // /// Optional Id, has to be unique + // "id": "filter1", + // /// Optional list of network interfaces messages will be processed on, the rest will not be filtered. + // /// If absent, the filter will be applied to all interfaces. + // interfaces: [ "wlan0" ], + // /// Optional list of link protocols. Transports with at least one of these links will have their messages filtered. + // /// If absent, the rule will be applied to all transports. An empty list is invalid. + // link_protocols: [ "tcp", "udp", "tls", "quic", "ws", "serial", "unixsock-stream", "unixpipe", "vsock"], + // /// Optional list of data flows messages will be processed on ("egress" and/or "ingress"). + // /// If absent, the filter will be applied to both flows. + // flows: ["ingress", "egress"], + // /// List of message type on which the filter will be applied. Must not be empty. + // messages: [ + // "put", + // "delete", + // "query", + // "reply" + // ], + // /// List of key_expressions which matching messages will be filtered + // key_exprs: [ + // "demo/**", + // ], + // /// Inclusive max size of serialized payload + serialized attachment + // size_limit: 8192, + // }, + // ], + + /// Enable stats per key expression. + // stats: { + // filters: [ + // { + // key: "some/key/expression/**", + // } + // ], + // }, + + /// Configure internal transport parameters + transport: { + unicast: { + /// Timeout in milliseconds when opening a link + /// ROS setting: increase the value to avoid timeout at launch time with a large number of Nodes starting all together + open_timeout: 60000, + /// Timeout in milliseconds when accepting a link + /// ROS setting: increase the value to avoid timeout at launch time with a large number of Nodes starting all together + accept_timeout: 60000, + /// Maximum number of links in pending state while performing the handshake for accepting it + /// ROS setting: increase the value to support a large number of Nodes starting all together + accept_pending: 10000, + /// Maximum number of transports that can be simultaneously alive for a single zenoh sessions + /// ROS setting: increase the value to support a large number of Nodes starting all together + max_sessions: 10000, + /// Maximum number of incoming links that are admitted per transport + max_links: 1, + /// Enables the LowLatency transport + /// This option does not make LowLatency transport mandatory, the actual implementation of transport + /// used will depend on Establish procedure and other party's settings + /// + /// NOTE: Currently, the LowLatency transport doesn't preserve QoS prioritization. + /// NOTE: Due to the note above, 'lowlatency' is incompatible with 'qos' option, so in order to + /// enable 'lowlatency' you need to explicitly disable 'qos'. + /// NOTE: LowLatency transport does not support the fragmentation, so the message size should be + /// smaller than the tx batch_size. + lowlatency: false, + /// Enables QoS on unicast communications. + qos: { + enabled: true, + }, + /// Enables compression on unicast communications. + /// Compression capabilities are negotiated during session establishment. + /// If both Zenoh nodes support compression, then compression is activated. + compression: { + enabled: false, + }, + }, + /// WARNING: multicast communication does not perform any negotiation upon group joining. + /// Because of that, it is important that all transport parameters are the same to make + /// sure all your nodes in the system can communicate. One common parameter to configure + /// is "transport/link/tx/batch_size" since its default value depends on the actual platform + /// when operating on multicast. + /// E.g., the batch size on Linux and Windows is 65535 bytes, on Mac OS X is 9216, and anything else is 8192. + multicast: { + /// JOIN message transmission interval in milliseconds. + join_interval: 2500, + /// Maximum number of multicast sessions. + max_sessions: 1000, + /// Enables QoS on multicast communication. + /// Default to false for Zenoh-to-Zenoh-Pico out-of-the-box compatibility. + qos: { + enabled: false, + }, + /// Enables compression on multicast communication. + /// Default to false for Zenoh-to-Zenoh-Pico out-of-the-box compatibility. + compression: { + enabled: false, + }, + }, + link: { + /// An optional whitelist of protocols to be used for accepting and opening sessions. If not + /// configured, all the supported protocols are automatically whitelisted. The supported + /// protocols are: ["tcp" , "udp", "tls", "quic", "ws", "unixsock-stream", "vsock"] For + /// example, to only enable "tls" and "quic": protocols: ["tls", "quic"], + /// + /// Configure the zenoh TX parameters of a link + tx: { + /// The resolution in bits to be used for the message sequence numbers. + /// When establishing a session with another Zenoh instance, the lowest value of the two instances will be used. + /// Accepted values: 8bit, 16bit, 32bit, 64bit. + sequence_number_resolution: "32bit", + /// Link lease duration in milliseconds to announce to other zenoh nodes + /// ROS setting: increase the value to avoid lease expiration at launch time with a large number of Nodes starting all together + lease: 60000, + /// Number of keep-alive messages in a link lease duration. If no data is sent, keep alive + /// messages will be sent at the configured time interval. + /// NOTE: In order to consider eventual packet loss and transmission latency and jitter, + /// set the actual keep_alive interval to one fourth of the lease time: i.e. send + /// 4 keep_alive messages in a lease period. Changing the lease time will have the + /// keep_alive messages sent more or less often. + /// This is in-line with the ITU-T G.8013/Y.1731 specification on continuous connectivity + /// check which considers a link as failed when no messages are received in 3.5 times the + /// target interval. + /// ROS setting: decrease the value since Nodes are communicating over the loopback + /// where keep-alive messages have less chances to be lost. + keep_alive: 2, + /// Batch size in bytes is expressed as a 16bit unsigned integer. + /// Therefore, the maximum batch size is 2^16-1 (i.e. 65535). + /// The default batch size value is the maximum batch size: 65535. + batch_size: 65535, + /// Each zenoh link has a transmission queue that can be configured + queue: { + /// The size of each priority queue indicates the number of batches a given queue can contain. + /// NOTE: the number of batches in each priority must be included between 1 and 16. Different values will result in an error. + /// The amount of memory being allocated for each queue is then SIZE_XXX * BATCH_SIZE. + /// In the case of the transport link MTU being smaller than the ZN_BATCH_SIZE, + /// then amount of memory being allocated for each queue is SIZE_XXX * LINK_MTU. + /// If qos is false, then only the DATA priority will be allocated. + size: { + control: 2, + real_time: 2, + interactive_high: 2, + interactive_low: 2, + data_high: 2, + data: 2, + data_low: 2, + background: 2, + }, + /// Congestion occurs when the queue is empty (no available batch). + congestion_control: { + /// Behavior pushing CongestionControl::Drop messages to the queue. + drop: { + /// The maximum time in microseconds to wait for an available batch before dropping a droppable message if still no batch is available. + wait_before_drop: 1000, + /// The maximum deadline limit for multi-fragment messages. + max_wait_before_drop_fragments: 50000, + }, + /// Behavior pushing CongestionControl::Block messages to the queue. + block: { + /// The maximum time in microseconds to wait for an available batch before closing the transport session when sending a blocking message + /// if still no batch is available. + /// ROS setting: unlike DEFAULT_RMW_ZENOH_SESSION_CONFIG.json5, no change here: + /// as the router is routing messages to outside the robot, possibly over WiFi, + /// keeping a lower value ensure the router is not blocked for too long in case of congestioned WiFi. + wait_before_close: 5000000, + }, + }, + /// Perform batching of messages if they are smaller of the batch_size + batching: { + /// Perform adaptive batching of messages if they are smaller of the batch_size. + /// When the network is detected to not be fast enough to transmit every message individually, many small messages may be + /// batched together and sent all at once on the wire reducing the overall network overhead. This is typically of a high-throughput + /// scenario mainly composed of small messages. In other words, batching is activated by the network back-pressure. + enabled: true, + /// The maximum time limit (in ms) a message should be retained for batching when back-pressure happens. + time_limit: 1, + }, + allocation: { + /// Mode for memory allocation of batches in the priority queues. + /// - "init": batches are allocated at queue initialization time. + /// - "lazy": batches are allocated when needed up to the maximum number of batches configured in the size configuration parameter. + mode: "lazy", + }, + }, + }, + /// Configure the zenoh RX parameters of a link + rx: { + /// Receiving buffer size in bytes for each link + /// The default the rx_buffer_size value is the same as the default batch size: 65535. + /// For very high throughput scenarios, the rx_buffer_size can be increased to accommodate + /// more in-flight data. This is particularly relevant when dealing with large messages. + /// E.g. for 16MiB rx_buffer_size set the value to: 16777216. + buffer_size: 65535, + /// Maximum size of the defragmentation buffer at receiver end. + /// Fragmented messages that are larger than the configured size will be dropped. + /// The default value is 1GiB. This would work in most scenarios. + /// NOTE: reduce the value if you are operating on a memory constrained device. + max_message_size: 1073741824, + }, + /// Configure TLS specific parameters + tls: { + /// Path to the certificate of the certificate authority used to validate either the server + /// or the client's keys and certificates, depending on the node's mode. If not specified + /// on router mode then the default WebPKI certificates are used instead. + root_ca_certificate: null, + /// Path to the TLS listening side private key + listen_private_key: null, + /// Path to the TLS listening side public certificate + listen_certificate: null, + /// Enables mTLS (mutual authentication), client authentication + enable_mtls: false, + /// Path to the TLS connecting side private key + connect_private_key: null, + /// Path to the TLS connecting side certificate + connect_certificate: null, + /// Whether or not to verify the matching between hostname/dns and certificate when connecting, + /// if set to false zenoh will disregard the common names of the certificates when verifying servers. + /// This could be dangerous because your CA can have signed a server cert for foo.com, that's later being used to host a server at baz.com. If you wan't your + /// ca to verify that the server at baz.com is actually baz.com, let this be true (default). + verify_name_on_connect: true, + /// Whether or not to close links when remote certificates expires. + /// If set to true, links that require certificates (tls/quic) will automatically disconnect when the time of expiration of the remote certificate chain is reached + /// note that mTLS (client authentication) is required for a listener to disconnect a client on expiration + close_link_on_expiration: false, + /// Optional configuration for TCP system buffers sizes for TLS links + /// + /// Configure TCP read buffer size (bytes) + // so_rcvbuf: 123456, + /// Configure TCP write buffer size (bytes) + // so_sndbuf: 123456, + }, + // // Configure optional TCP link specific parameters + // tcp: { + // /// Optional configuration for TCP system buffers sizes for TCP links + // /// + // /// Configure TCP read buffer size (bytes) + // // so_rcvbuf: 123456, + // /// Configure TCP write buffer size (bytes) + // // so_sndbuf: 123456, + // }, + }, + /// Shared memory configuration. + /// NOTE: shared memory can be used only if zenoh is compiled with "shared-memory" feature, otherwise + /// settings in this section have no effect. + shared_memory: { + /// Whether shared memory is enabled or not. + /// If set to `true`, the SHM buffer optimization support will be announced to other parties. (default `true`). + /// This option doesn't make SHM buffer optimization mandatory, the real support depends on other party setting. + /// A probing procedure for shared memory is performed upon session opening. To enable zenoh to operate + /// over shared memory (and to not fallback on network mode), shared memory needs to be enabled also on the + /// subscriber side. By doing so, the probing procedure will succeed and shared memory will operate as expected. + /// + /// ROS setting: disabled by default until fully tested + enabled: false, + /// SHM resources initialization mode (default "lazy"). + /// - "lazy": SHM subsystem internals will be initialized lazily upon the first SHM buffer + /// allocation or reception. This setting provides better startup time and optimizes resource usage, + /// but produces extra latency at the first SHM buffer interaction. + /// - "init": SHM subsystem internals will be initialized upon Session opening. This setting sacrifices + /// startup time, but guarantees no latency impact when first SHM buffer is processed. + mode: "lazy", + /// ROS setting: the section below controls SHM parameters used for large message passing on ROS + transport_optimization: { + /// Enables transport optimization for large messages (default `true`). + /// Implicitly puts large messages into shared memory for transports with SHM-compatible connection. + enabled: true, + /// SHM memory size in bytes used for transport optimization (default `48 * 1024 * 1024`). + pool_size: 50331648, + /// Allow optimization for messages equal or larger than this threshold in bytes (default `3072`). + message_size_threshold: 512, + }, + }, + auth: { + /// The configuration of authentication. + /// A password implies a username is required. + usrpwd: { + user: null, + password: null, + /// The path to a file containing the user password dictionary + dictionary_file: null, + }, + pubkey: { + public_key_pem: null, + private_key_pem: null, + public_key_file: null, + private_key_file: null, + key_size: null, + known_keys_file: null, + }, + }, + }, + + /// Configure the Admin Space + /// Unstable: this configuration part works as advertised, but may change in a future release + adminspace: { + /// Enables the admin space + enabled: true, + /// read and/or write permissions on the admin space + permissions: { + read: true, + write: false, + }, + }, + +} diff --git a/ros2-poc/config/zenoh-session.json5 b/ros2-poc/config/zenoh-session.json5 new file mode 100644 index 00000000..6cb1d33d --- /dev/null +++ b/ros2-poc/config/zenoh-session.json5 @@ -0,0 +1,820 @@ +/// This file attempts to list and document available configuration elements. +/// For a more complete view of the configuration's structure, check out `zenoh/src/config.rs`'s `Config` structure. +/// Note that the values here are correctly typed, but may not be sensible, so copying this file to change only the parts that matter to you is not good practice. +{ + /// The identifier (as unsigned 128bit integer in hexadecimal lowercase - leading zeros are not accepted) + /// that zenoh runtime will use. + /// If not set, a random unsigned 128bit integer will be used. + /// WARNING: this id must be unique in your zenoh network. + // id: "1234567890abcdef", + + /// The node's mode (router, peer or client) + mode: "peer", + + /// Which endpoints to connect to. E.g. tcp/localhost:7447. + /// By configuring the endpoints, it is possible to tell zenoh which router/peer to connect to at startup. + /// + /// For TCP/UDP on Linux, it is possible additionally specify the interface to be connected to: + /// E.g. tcp/192.168.0.1:7447#iface=eth0, for connect only if the IP address is reachable via the interface eth0 + /// + /// It is also possible to specify a priority range and/or a reliability setting to be used on the link. + /// For example `tcp/localhost?prio=6-7;rel=0` assigns priorities "data_low" and "background" to the established link. + /// + /// For TCP and TLS links, it is possible to specify the TCP buffer sizes: + /// E.g. tcp/192.168.0.1:7447#so_sndbuf=65000;so_rcvbuf=65000 + /// For TCP, UDP, Quic and TLS links, it is possible to specify a `bind` address for the local socket: + /// E.g. tcp/192.168.0.1:7447#bind=192.168.0.1:0 + /// Note!: Currently it is unsupported to specify both `bind` and `iface`. + /// + /// For TCP/UDP links, it's possible to specify the DSCP field of the IP header: + /// E.g. tcp/192.168.0.1:7447#dscp=0x08 + connect: { + /// timeout waiting for all endpoints connected (0: no retry, -1: infinite timeout) + /// Accepts a single value (e.g. timeout_ms: 0) + /// or different values for router, peer and client (e.g. timeout_ms: { router: -1, peer: -1, client: 0 }). + timeout_ms: { router: -1, peer: -1, client: 0 }, + + /// The list of endpoints to connect to. + /// Accepts a single list (e.g. endpoints: ["tcp/10.10.10.10:7447", "tcp/11.11.11.11:7447"]) + /// or different lists for router, peer and client (e.g. endpoints: { router: ["tcp/10.10.10.10:7447"], peer: ["tcp/11.11.11.11:7447"] }). + /// + /// See https://docs.rs/zenoh/latest/zenoh/config/struct.EndPoint.html + /// + /// ROS setting: By default connect to the Zenoh router on localhost on port 7447. + endpoints: [ + "tcp/127.0.0.1:7447" + ], + + /// Global connect configuration, + /// Accepts a single value or different values for router, peer and client. + /// The configuration can also be specified for the separate endpoint + /// it will override the global one + /// E.g. tcp/192.168.0.1:7447#retry_period_init_ms=20000;retry_period_max_ms=10000" + + /// exit from application, if timeout exceed + exit_on_failure: { router: false, peer: false, client: true }, + /// connect establishing retry configuration + retry: { + /// initial wait timeout until next connect try + period_init_ms: 1000, + /// maximum wait timeout until next connect try + period_max_ms: 4000, + /// increase factor for the next timeout until nexti connect try + period_increase_factor: 2, + }, + }, + + /// Which endpoints to listen on. E.g. tcp/0.0.0.0:7447. + /// By configuring the endpoints, it is possible to tell zenoh which are the endpoints that other routers, + /// peers, or client can use to establish a zenoh session. + /// + /// For TCP/UDP on Linux, it is possible additionally specify the interface to be listened to: + /// E.g. tcp/0.0.0.0:7447#iface=eth0, for listen connection only on eth0 + /// + /// It is also possible to specify a priority range and/or a reliability setting to be used on the link. + /// For example `tcp/localhost?prio=6-7;rel=0` assigns priorities "data_low" and "background" to the established link. + /// + /// For TCP and TLS links, it is possible to specify the TCP buffer sizes: + /// E.g. tcp/192.168.0.1:7447#so_sndbuf=65000;so_rcvbuf=65000 + /// + /// For TCP/UDP links, it's possible to specify the DSCP field of the IP header: + /// E.g. tcp/192.168.0.1:7447#dscp=0x08 + listen: { + /// timeout waiting for all listen endpoints (0: no retry, -1: infinite timeout) + /// Accepts a single value (e.g. timeout_ms: 0) + /// or different values for router, peer and client (e.g. timeout_ms: { router: -1, peer: -1, client: 0 }). + timeout_ms: 0, + + /// The list of endpoints to listen on. + /// Accepts a single list (e.g. endpoints: ["tcp/[::]:7447", "udp/[::]:7447"]) + /// or different lists for router, peer and client (e.g. endpoints: { router: ["tcp/[::]:7447"], peer: ["tcp/[::]:0"] }). + /// + /// See https://docs.rs/zenoh/latest/zenoh/config/struct.EndPoint.html + /// + /// ROS setting: By default accept incoming connections only from localhost (i.e. from colocalized Nodes). + /// All communications with other hosts are routed by the Zenoh router. + endpoints: [ + "tcp/localhost:0" + ], + + /// Global listen configuration, + /// Accepts a single value or different values for router, peer and client. + /// The configuration can also be specified for the separate endpoint + /// it will override the global one + /// E.g. tcp/192.168.0.1:7447#exit_on_failure=false;retry_period_max_ms=1000" + + /// exit from application, if timeout exceed + exit_on_failure: true, + /// listen retry configuration + retry: { + /// initial wait timeout until next try + period_init_ms: 1000, + /// maximum wait timeout until next try + period_max_ms: 4000, + /// increase factor for the next timeout until next try + period_increase_factor: 2, + }, + }, + + /// Configure the session open behavior. + open: { + /// Configure the conditions to be met before session open returns. + return_conditions: { + /// Session open waits to connect to scouted peers and routers before returning. + /// When set to false, first publications and queries after session open from peers may be lost. + connect_scouted: true, + /// Session open waits to receive initial declares from connected peers before returning. + /// Setting to false may cause extra traffic at startup from peers. + declares: true, + }, + }, + + /// Configure the scouting mechanisms and their behaviours + scouting: { + /// In client mode, the period in milliseconds dedicated to scouting for a router before failing. + timeout: 3000, + /// In peer mode, the maximum period in milliseconds dedicated to scouting remote peers before attempting other operations. + delay: 500, + /// The multicast scouting configuration. + multicast: { + /// Whether multicast scouting is enabled or not + /// + /// ROS setting: disable multicast discovery by default + enabled: false, + /// The socket which should be used for multicast scouting + address: "224.0.0.224:7446", + /// The network interface which should be used for multicast scouting + interface: "auto", // If not set or set to "auto" the interface if picked automatically + /// The time-to-live on multicast scouting packets + ttl: 1, + /// Which type of Zenoh instances to automatically establish sessions with upon discovery on UDP multicast. + /// Accepts a single value (e.g. autoconnect: ["router", "peer"]) which applies whatever the configured "mode" is, + /// or different values for router, peer or client mode (e.g. autoconnect: { router: [], peer: ["router", "peer"] }). + /// Each value is a list of: "peer", "router" and/or "client". + autoconnect: { router: [], peer: ["router", "peer"], client: ["router"] }, + /// Strategy for autoconnection, mainly to avoid nodes connecting to each other redundantly. + /// Possible options are: + /// - "always": always attempt to autoconnect, may result in redundant connections. + /// - "greater-zid": attempt to connect to another node only if its own zid is greater than the other's. + /// If both nodes use this strategy, only one will attempt the connection. + /// This strategy may not be suited if one of the nodes is not reachable by the other one, for example + /// because of a private IP. + /// Accepts a single value (e.g. autoconnect: "always") which applies whatever node would be auto-connected to, + /// or different values for router and/or peer depending on the type of node detected + /// (e.g. autoconnect_strategy : { to_router: "always", to_peer: "greater-zid" }), + /// or different values for router or peer mode + /// (e.g. autoconnect_strategy : { peer: { to_router: "always", to_peer: "greater-zid" } }). + /// ROS setting: by default all peers rely on the router to discover each other. Thus configuring the peer to send gossip + /// messages only to the router is sufficient and avoids unecessary traffic between Nodes at launch time. + autoconnect_strategy: { peer: { to_router: "always", to_peer: "greater-zid" } }, + /// Whether or not to listen for scout messages on UDP multicast and reply to them. + listen: true, + }, + /// The gossip scouting configuration. Note that instances in "client" mode do not participate in gossip. + gossip: { + /// Whether gossip scouting is enabled or not + enabled: true, + /// When true, gossip scouting information are propagated multiple hops to all nodes in the local network. + /// When false, gossip scouting information are only propagated to the next hop. + /// Activating multihop gossip implies more scouting traffic and a lower scalability. + /// It mostly makes sense when using "linkstate" routing mode where all nodes in the subsystem don't have + /// direct connectivity with each other. + multihop: false, + /// Which type of Zenoh instances to send gossip messages to. + /// Accepts a single value (e.g. target: ["router", "peer"]) which applies whatever the configured "mode" is, + /// or different values for router or peer mode (e.g. target: { router: ["router", "peer"], peer: ["router"] }). + /// Each value is a list of "peer" and/or "router". + /// ROS setting: by default all peers rely on the router to discover each other. Thus configuring the peer to send gossip + /// messages only to the router is sufficient and avoids unecessary traffic between Nodes at launch time. + target: { router: ["router", "peer"], peer: ["router"]}, + /// Which type of Zenoh instances to automatically establish sessions with upon discovery on gossip. + /// Accepts a single value (e.g. autoconnect: ["router", "peer"]) which applies whatever the configured "mode" is, + /// or different values for router or peer mode (e.g. autoconnect: { router: [], peer: ["router", "peer"] }). + /// Each value is a list of: "peer" and/or "router". + autoconnect: { router: [], peer: ["router", "peer"] }, + /// Strategy for autoconnection, mainly to avoid nodes connecting to each other redundantly. + /// Possible options are: + /// - "always": always attempt to autoconnect, may result in redundant connection which will then be closed. + /// - "greater-zid": attempt to connect to another node only if its own zid is greater than the other's. + /// If both nodes use this strategy, only one will attempt the connection. + /// This strategy may not be suited if one of the nodes is not reachable by the other one, for example + /// because of a private IP. + /// Accepts a single value (e.g. autoconnect: "always") which applies whatever node would be auto-connected to, + /// or different values for router and/or peer depending on the type of node detected + /// (e.g. autoconnect_strategy : { to_router: "always", to_peer: "greater-zid" }), + /// or different values for router or peer mode + /// (e.g. autoconnect_strategy : { peer: { to_router: "always", to_peer: "greater-zid" } }). + /// ROS setting: as by default all peers will interconnect to each other over the loopback interface, + /// they are all reachable to each other. Hence using "greater-zid" for peers connecting to + /// other peers is sufficient and avoids unecessary double connections between peers at startup. + autoconnect_strategy: { peer: { to_router: "always", to_peer: "greater-zid" } }, + }, + }, + + /// Configuration of data messages timestamps management. + timestamping: { + /// Whether data messages should be timestamped if not already. + /// Accepts a single boolean value or different values for router, peer and client. + /// + /// ROS setting: PublicationCache which is required for transient_local durability + /// only works when time-stamping is enabled. + enabled: { router: true, peer: true, client: true }, + /// Whether data messages with timestamps in the future should be dropped or not. + /// If set to false (default), messages with timestamps in the future are retimestamped. + /// Timestamps are ignored if timestamping is disabled. + drop_future_timestamp: false, + }, + + /// The default timeout to apply to queries in milliseconds. + /// ROS setting: The default value of 600000 ms (10 minutes) is already quite high, but it can be increased if needed. + /// For instance to avoid timeout with Service Server that that is unresponsive or lagging, + /// which could occur at launch time with a large number of Nodes starting all together. + /// It’s recommended to configure a value that exceeds the longest timeout specified in any + /// `spin_until_complete(service_call_future_result, timeout)` call. + /// Note that the action-related service "get_result" is hard-coded with an infinite timeout, + /// as in some use case an action could spend several hours (e.g. mission plans). + queries_default_timeout: 600000, + + /// The routing strategy to use and it's configuration. + routing: { + /// The routing strategy to use in routers and it's configuration. + router: { + /// When set to true a router will forward data between two peers + /// directly connected to it if it detects that those peers are not + /// connected to each other. + /// The failover brokering only works if gossip discovery is enabled + /// and peers are configured with gossip target "router". + peers_failover_brokering: true, + /// Linkstate mode configuration. + linkstate: { + /// Weights of the outgoing transports in linkstate mode. + /// If none of the two endpoint nodes of a transport specifies its weight, a weight of 100 is applied. + /// If only one of the two endpoint nodes of a transport specifies its weight, the specified weight is applied. + /// If both endpoint nodes of a transport specify its weight, the greater weight is applied. + // transport_weights: [ + // { dst_zid: "1", weight: "10" }, + // { dst_zid: "2", weight: "200" }, + // ] + }, + }, + /// The routing strategy to use in peers and it's configuration. + peer: { + /// The routing strategy to use in peers. ("peer_to_peer" or "linkstate"). + /// This option needs to be set to the same value in all peers and routers of the subsystem. + mode: "peer_to_peer", + /// Linkstate mode configuration (only taken into account if mode == "linkstate"). + linkstate: { + /// Weights of the outgoing transports in linkstate mode. + /// If none of the two endpoint nodes of a transport specifies its weight, a weight of 100 is applied. + /// If only one of the two endpoint nodes of a transport specifies its weight, the specified weight is applied. + /// If both endpoint nodes of a transport specify its weight, the greater weight is applied. + // transport_weights: [ + // { dst_zid: "1", weight: "10" }, + // { dst_zid: "2", weight: "200" }, + // ] + }, + }, + /// The interests-based routing configuration. + /// This configuration applies regardless of the mode (router, peer or client). + interests: { + /// The timeout to wait for incoming interests declarations in milliseconds. + /// The expiration of this timeout implies that the discovery protocol might be incomplete, + /// leading to potential loss of messages, queries or liveliness tokens. + timeout: 10000, + }, + }, + + // /// Overwrite QoS options for Zenoh messages by key expression (ignores Zenoh API QoS config for overwritten values) + // qos: { + // /// Overwrite QoS options for PUT and DELETE messages + // publication: [ + // { + // /// PUT and DELETE messages on key expressions that are included by these key expressions + // /// will have their QoS options overwritten by the given config. + // key_exprs: ["demo/**", "example/key"], + // /// Configurations that will be applied on the publisher. + // /// Options that are supplied here will overwrite the configuration given in Zenoh API + // config: { + // congestion_control: "block", + // priority: "data_high", + // express: true, + // reliability: "best_effort", + // allowed_destination: "remote", + // }, + // }, + // ], + // /// Overwrite QoS options for messages sent and received from/to the network + // /// This allows more fine grained rules (per network card, etc...) but is + // /// less performant than the publication option above. + // network: [ + // { + // /// Optional Id, has to be unique. + // id: "lo0_en0_qos_overwrite", + // /// Optional list of ZIDs on which qos will be overwritten when communicating with. + // // zids: ["38a4829bce9166ee"], + // /// Optional list of interfaces, if not specified, will be applied to all interfaces. + // interfaces: [ + // "lo0", + // "en0", + // ], + // /// Optional list of link protocols. Transports with at least one of these links will have their qos overwritten. + // /// If absent, the overwrite will be applied to all transports. An empty list is invalid. + // link_protocols: [ "tcp", "udp", "tls", "quic", "ws", "serial", "unixsock-stream", "unixpipe", "vsock"], + // /// List of message types to apply to. + // messages: [ + // "put", // put publications + // "delete", // delete publications + // "query", // get queries + // "reply", // replies to queries + // ], + // /// Optional list of data flows messages will be processed on ("egress" and/or "ingress"). + // /// If absent, the rules will be applied to both flows. + // flows: ["egress", "ingress"], + // /// QoS filter to apply to the messages matching this item. + // qos: { + // congestion_control: "drop", + // priority: "data", + // express: true, + // reliability: "reliable", + // }, + // /// payload_size range for the messages matching this item. + // payload_size: "1000000..", + // key_exprs: ["test/demo"], + // overwrite: { + // /// Optional new priority value, if not specified priority of the messages will stay unchanged. + // priority: "real_time", + // /// Optional new congestion control value, if not specified congestion control of the messages will stay unchanged. + // congestion_control: "block", + // /// Optional new express value, if not specified express flag of the messages will stay unchanged. + // express: true, + // }, + // }, + // ], + // }, + + // /// The declarations aggregation strategy. + // aggregation: { + // /// A list of key-expressions for which all included subscribers will be aggregated into. + // subscribers: [ + // // key_expression + // ], + // /// A list of key-expressions for which all included publishers will be aggregated into. + // publishers: [ + // // key_expression + // ], + // }, + + // /// Namespace prefix. + // /// If specified, all outgoing key expressions will be automatically prefixed with specified string, + // /// and all incoming key expressions will be stripped of specified prefix. + // /// The namespace prefix should satisfy all key expression constraints + // /// and additionally it can not contain wild characters ('*'). + // /// Namespace is applied to the session. + // /// E. g. if session has a namespace of "1" then session.put("my/keyexpr", my_message), + // /// will put a message into 1/my/keyexpr. Same applies to all other operations within this session. + // namespace: "my/namespace", + + // /// The downsampling declaration. + // downsampling: [ + // { + // /// Optional Id, has to be unique + // id: "wlan0egress", + // /// Optional list of network interfaces messages will be processed on, the rest will be passed as is. + // /// If absent, the rules will be applied to all interfaces. An empty list is invalid. + // interfaces: [ "wlan0" ], + // /// Optional list of link protocols. Transports with at least one of these links will have their messages filtered. + // /// If absent, the rules will be applied to all transports. An empty list is invalid. + // link_protocols: [ "tcp", "udp", "tls", "quic", "ws", "serial", "unixsock-stream", "unixpipe", "vsock"], + // /// Optional list of data flows messages will be processed on ("egress" and/or "ingress"). + // /// If absent, the rules will be applied to both flows. + // flows: ["ingress", "egress"], + // /// List of message type on which downsampling will be applied. Must not be empty. + // messages: [ + // /// Delete + // "delete", + // /// Put + // "put", + // /// Get + // "query", + // /// Queryable Reply to a Query + // "reply", + // ], + // /// A list of downsampling rules: key_expression and the maximum frequency in Hertz + // rules: [ + // { key_expr: "demo/example/zenoh-rs-pub", freq: 0.1 }, + // ], + // }, + // ], + + // /// Configure access control (ACL) rules + // access_control: { + // /// [true/false] acl will be activated only if this is set to true + // "enabled": false, + // /// [deny/allow] default permission is deny (even if this is left empty or not specified) + // "default_permission": "deny", + // /// Rule set for permissions allowing or denying access to key-expressions + // "rules": + // [ + // { + // /// Id has to be unique within the rule set + // "id": "rule1", + // "messages": [ + // "put", "delete", "declare_subscriber", + // "query", "reply", "declare_queryable", + // "liveliness_token", "liveliness_query", "declare_liveliness_subscriber", + // ], + // "flows":["egress","ingress"], + // "permission": "allow", + // "key_exprs": [ + // "test/demo" + // ], + // }, + // { + // "id": "rule2", + // "messages": [ + // "put", "delete", "declare_subscriber", + // "query", "reply", "declare_queryable", + // ], + // "flows":["ingress"], + // "permission": "allow", + // "key_exprs": [ + // "**" + // ], + // }, + // ], + // /// List of combinations of subjects. + // /// + // /// If a subject property (i.e. username, certificate common name or interface) is empty + // /// it is interpreted as a wildcard. Moreover, a subject property cannot be an empty list. + // "subjects": + // [ + // { + // /// Id has to be unique within the subjects list + // "id": "subject1", + // /// Subjects can be interfaces + // "interfaces": [ + // "lo0", + // "en0", + // ], + // /// Subjects can be cert_common_names when using TLS or Quic + // "cert_common_names": [ + // "example.zenoh.io" + // ], + // /// Subjects can be usernames when using user/password authentication + // "usernames": [ + // "zenoh-example" + // ], + // /// This instance translates internally to this filter: + // /// (interface="lo0" && cert_common_name="example.zenoh.io" && username="zenoh-example") || + // /// (interface="en0" && cert_common_name="example.zenoh.io" && username="zenoh-example") + // }, + // { + // "id": "subject2", + // "interfaces": [ + // "lo0", + // "en0", + // ], + // "cert_common_names": [ + // "example2.zenoh.io" + // ], + // /// This instance translates internally to this filter: + // /// (interface="lo0" && cert_common_name="example2.zenoh.io") || + // /// (interface="en0" && cert_common_name="example2.zenoh.io") + // }, + // { + // "id": "subject3", + // /// An empty subject combination is a wildcard + // }, + // { + // "id": "subject4", + // /// link protocols can also be used to identify transports to filter messages on. + // /// If absent, the rules will be applied to all transports. An empty list is invalid. + // link_protocols: [ "tcp", "udp", "tls", "quic", "ws", "serial", "unixsock-stream", "unixpipe", "vsock"], + // /// ZIDs can also be used to identify transports to filter messages on. + // /// NOTE: ZID is not backed by an authentication mechanism, it can only be trusted for ACL if it is + // /// dynamically added/removed by eventual dedicated Zenoh mechanisms when transports are opened/closed. + // /// If managed manually in ACL config, can be useful for prototyping but should not be used in production! + // zids: ["38a4829bce9166ee"], + // }, + // ], + // /// The policies list associates rules to subjects + // "policies": + // [ + // /// Each policy associates one or multiple rules to one or multiple subject combinations + // { + // /// Id is optional. If provided, it has to be unique within the policies list + // "id": "policy1", + // /// Rules and Subjects are identified with their unique IDs declared above + // "rules": ["rule1"], + // "subjects": ["subject1", "subject2"], + // }, + // { + // "rules": ["rule2"], + // "subjects": ["subject3", "subject4"], + // }, + // ] + // }, + + // low_pass_filter: [ + // { + // /// Optional Id, has to be unique + // "id": "filter1", + // /// Optional list of network interfaces messages will be processed on, the rest will not be filtered. + // /// If absent, the filter will be applied to all interfaces. + // interfaces: [ "wlan0" ], + // /// Optional list of link protocols. Transports with at least one of these links will have their messages filtered. + // /// If absent, the rule will be applied to all transports. An empty list is invalid. + // link_protocols: [ "tcp", "udp", "tls", "quic", "ws", "serial", "unixsock-stream", "unixpipe", "vsock"], + // /// Optional list of data flows messages will be processed on ("egress" and/or "ingress"). + // /// If absent, the filter will be applied to both flows. + // flows: ["ingress", "egress"], + // /// List of message type on which the filter will be applied. Must not be empty. + // messages: [ + // "put", + // "delete", + // "query", + // "reply" + // ], + // /// List of key_expressions which matching messages will be filtered + // key_exprs: [ + // "demo/**", + // ], + // /// Inclusive max size of serialized payload + serialized attachment + // size_limit: 8192, + // }, + // ], + + /// Enable stats per key expression. + // stats: { + // filters: [ + // { + // key: "some/key/expression/**", + // } + // ], + // }, + + /// Configure internal transport parameters + transport: { + unicast: { + /// Timeout in milliseconds when opening a link + /// ROS setting: increase the value to avoid timeout at launch time with a large number of Nodes starting all together + open_timeout: 60000, + /// Timeout in milliseconds when accepting a link + /// ROS setting: increase the value to avoid timeout at launch time with a large number of Nodes starting all together + accept_timeout: 60000, + /// Maximum number of links in pending state while performing the handshake for accepting it + /// ROS setting: increase the value to support a large number of Nodes starting all together + accept_pending: 10000, + /// Maximum number of transports that can be simultaneously alive for a single zenoh sessions + /// ROS setting: increase the value to support a large number of Nodes starting all together + max_sessions: 10000, + /// Maximum number of incoming links that are admitted per transport + max_links: 1, + /// Enables the LowLatency transport + /// This option does not make LowLatency transport mandatory, the actual implementation of transport + /// used will depend on Establish procedure and other party's settings + /// + /// NOTE: Currently, the LowLatency transport doesn't preserve QoS prioritization. + /// NOTE: Due to the note above, 'lowlatency' is incompatible with 'qos' option, so in order to + /// enable 'lowlatency' you need to explicitly disable 'qos'. + /// NOTE: LowLatency transport does not support the fragmentation, so the message size should be + /// smaller than the tx batch_size. + lowlatency: false, + /// Enables QoS on unicast communications. + qos: { + enabled: true, + }, + /// Enables compression on unicast communications. + /// Compression capabilities are negotiated during session establishment. + /// If both Zenoh nodes support compression, then compression is activated. + compression: { + enabled: false, + }, + }, + /// WARNING: multicast communication does not perform any negotiation upon group joining. + /// Because of that, it is important that all transport parameters are the same to make + /// sure all your nodes in the system can communicate. One common parameter to configure + /// is "transport/link/tx/batch_size" since its default value depends on the actual platform + /// when operating on multicast. + /// E.g., the batch size on Linux and Windows is 65535 bytes, on Mac OS X is 9216, and anything else is 8192. + multicast: { + /// JOIN message transmission interval in milliseconds. + join_interval: 2500, + /// Maximum number of multicast sessions. + max_sessions: 1000, + /// Enables QoS on multicast communication. + /// Default to false for Zenoh-to-Zenoh-Pico out-of-the-box compatibility. + qos: { + enabled: false, + }, + /// Enables compression on multicast communication. + /// Default to false for Zenoh-to-Zenoh-Pico out-of-the-box compatibility. + compression: { + enabled: false, + }, + }, + link: { + /// An optional whitelist of protocols to be used for accepting and opening sessions. If not + /// configured, all the supported protocols are automatically whitelisted. The supported + /// protocols are: ["tcp" , "udp", "tls", "quic", "ws", "unixsock-stream", "vsock"] For + /// example, to only enable "tls" and "quic": protocols: ["tls", "quic"], + /// + /// Configure the zenoh TX parameters of a link + tx: { + /// The resolution in bits to be used for the message sequence numbers. + /// When establishing a session with another Zenoh instance, the lowest value of the two instances will be used. + /// Accepted values: 8bit, 16bit, 32bit, 64bit. + sequence_number_resolution: "32bit", + /// Link lease duration in milliseconds to announce to other zenoh nodes + /// ROS setting: increase the value to avoid lease expiration at launch time with a large number of Nodes starting all together + lease: 60000, + /// Number of keep-alive messages in a link lease duration. If no data is sent, keep alive + /// messages will be sent at the configured time interval. + /// NOTE: In order to consider eventual packet loss and transmission latency and jitter, + /// set the actual keep_alive interval to one fourth of the lease time: i.e. send + /// 4 keep_alive messages in a lease period. Changing the lease time will have the + /// keep_alive messages sent more or less often. + /// This is in-line with the ITU-T G.8013/Y.1731 specification on continuous connectivity + /// check which considers a link as failed when no messages are received in 3.5 times the + /// target interval. + /// ROS setting: decrease the value since Nodes are communicating over the loopback + /// where keep-alive messages have less chances to be lost. + keep_alive: 2, + /// Batch size in bytes is expressed as a 16bit unsigned integer. + /// Therefore, the maximum batch size is 2^16-1 (i.e. 65535). + /// The default batch size value is the maximum batch size: 65535. + batch_size: 65535, + /// Each zenoh link has a transmission queue that can be configured + queue: { + /// The size of each priority queue indicates the number of batches a given queue can contain. + /// NOTE: the number of batches in each priority must be included between 1 and 16. Different values will result in an error. + /// The amount of memory being allocated for each queue is then SIZE_XXX * BATCH_SIZE. + /// In the case of the transport link MTU being smaller than the ZN_BATCH_SIZE, + /// then amount of memory being allocated for each queue is SIZE_XXX * LINK_MTU. + /// If qos is false, then only the DATA priority will be allocated. + size: { + control: 2, + real_time: 2, + interactive_high: 2, + interactive_low: 2, + data_high: 2, + data: 2, + data_low: 2, + background: 2, + }, + /// Congestion occurs when the queue is empty (no available batch). + congestion_control: { + /// Behavior pushing CongestionControl::Drop messages to the queue. + drop: { + /// The maximum time in microseconds to wait for an available batch before dropping a droppable message if still no batch is available. + wait_before_drop: 1000, + /// The maximum deadline limit for multi-fragment messages. + max_wait_before_drop_fragments: 50000, + }, + /// Behavior pushing CongestionControl::Block messages to the queue. + block: { + /// The maximum time in microseconds to wait for an available batch before closing the transport session when sending a blocking message + /// if still no batch is available. + /// ROS setting: increase the value to avoid unecessary link closure at launch time where congestion is likely + /// to occur even over the loopback since all the Nodes are starting at the same time. + wait_before_close: 60000000, + }, + }, + /// Perform batching of messages if they are smaller of the batch_size + batching: { + /// Perform adaptive batching of messages if they are smaller of the batch_size. + /// When the network is detected to not be fast enough to transmit every message individually, many small messages may be + /// batched together and sent all at once on the wire reducing the overall network overhead. This is typically of a high-throughput + /// scenario mainly composed of small messages. In other words, batching is activated by the network back-pressure. + enabled: true, + /// The maximum time limit (in ms) a message should be retained for batching when back-pressure happens. + time_limit: 1, + }, + allocation: { + /// Mode for memory allocation of batches in the priority queues. + /// - "init": batches are allocated at queue initialization time. + /// - "lazy": batches are allocated when needed up to the maximum number of batches configured in the size configuration parameter. + mode: "lazy", + }, + }, + }, + /// Configure the zenoh RX parameters of a link + rx: { + /// Receiving buffer size in bytes for each link + /// The default the rx_buffer_size value is the same as the default batch size: 65535. + /// For very high throughput scenarios, the rx_buffer_size can be increased to accommodate + /// more in-flight data. This is particularly relevant when dealing with large messages. + /// E.g. for 16MiB rx_buffer_size set the value to: 16777216. + buffer_size: 65535, + /// Maximum size of the defragmentation buffer at receiver end. + /// Fragmented messages that are larger than the configured size will be dropped. + /// The default value is 1GiB. This would work in most scenarios. + /// NOTE: reduce the value if you are operating on a memory constrained device. + max_message_size: 1073741824, + }, + /// Configure TLS specific parameters + tls: { + /// Path to the certificate of the certificate authority used to validate either the server + /// or the client's keys and certificates, depending on the node's mode. If not specified + /// on router mode then the default WebPKI certificates are used instead. + root_ca_certificate: null, + /// Path to the TLS listening side private key + listen_private_key: null, + /// Path to the TLS listening side public certificate + listen_certificate: null, + /// Enables mTLS (mutual authentication), client authentication + enable_mtls: false, + /// Path to the TLS connecting side private key + connect_private_key: null, + /// Path to the TLS connecting side certificate + connect_certificate: null, + /// Whether or not to verify the matching between hostname/dns and certificate when connecting, + /// if set to false zenoh will disregard the common names of the certificates when verifying servers. + /// This could be dangerous because your CA can have signed a server cert for foo.com, that's later being used to host a server at baz.com. If you wan't your + /// ca to verify that the server at baz.com is actually baz.com, let this be true (default). + verify_name_on_connect: true, + /// Whether or not to close links when remote certificates expires. + /// If set to true, links that require certificates (tls/quic) will automatically disconnect when the time of expiration of the remote certificate chain is reached + /// note that mTLS (client authentication) is required for a listener to disconnect a client on expiration + close_link_on_expiration: false, + /// Optional configuration for TCP system buffers sizes for TLS links + /// + /// Configure TCP read buffer size (bytes) + // so_rcvbuf: 123456, + /// Configure TCP write buffer size (bytes) + // so_sndbuf: 123456, + }, + // // Configure optional TCP link specific parameters + // tcp: { + // /// Optional configuration for TCP system buffers sizes for TCP links + // /// + // /// Configure TCP read buffer size (bytes) + // // so_rcvbuf: 123456, + // /// Configure TCP write buffer size (bytes) + // // so_sndbuf: 123456, + // }, + }, + /// Shared memory configuration. + /// NOTE: shared memory can be used only if zenoh is compiled with "shared-memory" feature, otherwise + /// settings in this section have no effect. + shared_memory: { + /// Whether shared memory is enabled or not. + /// If set to `true`, the SHM buffer optimization support will be announced to other parties. (default `true`). + /// This option doesn't make SHM buffer optimization mandatory, the real support depends on other party setting. + /// A probing procedure for shared memory is performed upon session opening. To enable zenoh to operate + /// over shared memory (and to not fallback on network mode), shared memory needs to be enabled also on the + /// subscriber side. By doing so, the probing procedure will succeed and shared memory will operate as expected. + /// + /// ROS setting: disabled by default until fully tested + enabled: false, + /// SHM resources initialization mode (default "lazy"). + /// - "lazy": SHM subsystem internals will be initialized lazily upon the first SHM buffer + /// allocation or reception. This setting provides better startup time and optimizes resource usage, + /// but produces extra latency at the first SHM buffer interaction. + /// - "init": SHM subsystem internals will be initialized upon Session opening. This setting sacrifices + /// startup time, but guarantees no latency impact when first SHM buffer is processed. + mode: "lazy", + /// ROS setting: the section below controls SHM parameters used for large message passing on ROS + transport_optimization: { + /// Enables transport optimization for large messages (default `true`). + /// Implicitly puts large messages into shared memory for transports with SHM-compatible connection. + enabled: true, + /// SHM memory size in bytes used for transport optimization (default `48 * 1024 * 1024`). + pool_size: 50331648, + /// Allow optimization for messages equal or larger than this threshold in bytes (default `3072`). + message_size_threshold: 512, + }, + }, + auth: { + /// The configuration of authentication. + /// A password implies a username is required. + usrpwd: { + user: null, + password: null, + /// The path to a file containing the user password dictionary + dictionary_file: null, + }, + pubkey: { + public_key_pem: null, + private_key_pem: null, + public_key_file: null, + private_key_file: null, + key_size: null, + known_keys_file: null, + }, + }, + }, + + /// Configure the Admin Space + /// Unstable: this configuration part works as advertised, but may change in a future release + adminspace: { + /// Enables the admin space + enabled: true, + /// read and/or write permissions on the admin space + permissions: { + read: true, + write: false, + }, + }, + +} diff --git a/ros2-poc/nodes/bias_cmd.py b/ros2-poc/nodes/bias_cmd.py new file mode 100644 index 00000000..b6e871d6 --- /dev/null +++ b/ros2-poc/nodes/bias_cmd.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +"""bias_cmd.py — send one plugin command to bias_node.py and print its reply. + + pixi run bias-cmd -- connect + pixi run bias-cmd -- startRecording --filename trial_001.avi + pixi run bias-cmd -- stopRecording + pixi run bias-cmd -- getTimestamp --json + +Exit 0 on `ok`, 1 on an error reply, 3 on an UNKNOWN outcome (timeout), 2 on no reply. +""" + +from __future__ import annotations + +import argparse +import json +import sys +import threading +import time +import uuid + +import rclpy +from rclpy.node import Node +from rclpy.qos import QoSDurabilityPolicy, QoSHistoryPolicy, QoSProfile, QoSReliabilityPolicy +from std_msgs.msg import String + +QOS = QoSProfile( + reliability=QoSReliabilityPolicy.RELIABLE, + history=QoSHistoryPolicy.KEEP_LAST, + depth=50, + durability=QoSDurabilityPolicy.VOLATILE, +) + + +def main(argv: list[str] | None = None) -> int: + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("command", help="connect | startRecording | stopRecording | startPreview | stopCapture | getTimestamp | disconnect") + p.add_argument("--filename", help="startRecording: video file name/path") + p.add_argument("--ip", help="connect: BIAS host") + p.add_argument("--port", type=int, help="connect: BIAS command port") + p.add_argument("--config-file", help="connect: BIAS configuration file to load") + p.add_argument("--timeout", type=float, default=10.0, help="seconds to wait for the reply (default: 10)") + p.add_argument("--json", action="store_true", help="print the raw reply JSON") + args, ros_args = p.parse_known_args(argv) + params = {k: v for k, v in (("filename", args.filename), ("ip", args.ip), ("port", args.port), ("config_file", args.config_file)) if v} + cid = str(uuid.uuid4())[:8] + + rclpy.init(args=ros_args) + node = Node("bias_cmd_" + cid) + got = {} + done = threading.Event() + + def on_reply(msg: String) -> None: + try: + rep = json.loads(msg.data) + except json.JSONDecodeError: + return + if isinstance(rep, dict) and rep.get("id") == cid: + got.update(rep) + done.set() + + node.create_subscription(String, "/bias/reply", on_reply, QOS) + pub = node.create_publisher(String, "/bias/cmd", QOS) + time.sleep(0.5) # discovery + m = String() + m.data = json.dumps({"id": cid, "command": args.command, "params": params}) + pub.publish(m) + deadline = time.monotonic() + args.timeout + while not done.is_set() and time.monotonic() < deadline: + rclpy.spin_once(node, timeout_sec=0.1) + node.destroy_node() + try: + rclpy.try_shutdown() + except Exception: # rclpy's own SIGINT handler may already have shut the context down (races in Jazzy) + pass + if not got: + print(f"[bias-cmd] no reply within {args.timeout:g}s (is `pixi run bias-node` running?)", file=sys.stderr) + return 2 + if args.json: + print(json.dumps(got, indent=1)) + else: + print(f"{got.get('command')} → {got.get('outcome')} ({got.get('rtt_ms')} ms)" + (f" value={got.get('value')!r}" if got.get("value") not in (None, "") else "") + (f" error={got.get('error')}" if got.get("error") else "")) + if got.get("artifact"): + print(f"artifact: {got['artifact']}") + return 0 if got.get("ok") else (3 if got.get("outcome") == "unknown" else 1) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/ros2-poc/nodes/bias_node.py b/ros2-poc/nodes/bias_node.py new file mode 100644 index 00000000..33047080 --- /dev/null +++ b/ros2-poc/nodes/bias_node.py @@ -0,0 +1,253 @@ +#!/usr/bin/env python3 +"""bias_node.py — the BIAS camera as a ROS 2 node: protocol plugin commands in, replies + status out. + +BIAS has no ROS node; this adapter talks to its external-control HTTP interface +(`http://host:port/?command[=value]`, JSON-array replies — see bias_sim.py) and exposes it +on three topics, all std_msgs/String JSON (no custom message types): + + /bias/cmd IN {"id": , "command": , "params": {…}} + /bias/reply OUT {"id", "command", "ok", "outcome": "ok"|"error"|"unknown", "value", + "error", "steps": [...per HTTP command...], "rtt_ms", "t_ms", + "rx_epoch_ms", "artifact": {"kind":"video","path":…} (startRecording)} + /bias/status OUT every --status-every s: {"reachable", "connected", "capturing", + "logging", "frameCount", "framesPerSec", "videoFile", "rtt_ms", …} + +The `command` vocabulary is the protocol's `camera` plugin (js/plugin-registry.js +BiasPlugin): connect(ip, port, config_file), startRecording(filename), stopRecording, +startPreview, stopCapture, getTimestamp, disconnect — each mapped to the BIAS HTTP +sequence `BiasPlugin.m` performs. The bridge node logs every reply and status line into the +run log as `{"type":"connector","src":"bias",…}` events, so the video file identity +(`artifact`) and every command/reply pair sit in the same file as the FicTrac rows. + +LAB-303 semantics carried here: `timeout_s` per HTTP call; a timeout is an UNKNOWN outcome +(`outcome: "unknown"`), after which the node reconciles with `get-status` before anything +else. `critical` / `on_loss` are the runner's decision (the Studio side, shared by both +plans) — the node only reports. + + pixi run bias-node -- --host 127.0.0.1 --port 5010 + pixi run bias-cmd -- startRecording --filename trial_001.avi +""" + +from __future__ import annotations + +import argparse +import json +import queue +import sys +import threading +import time +import urllib.error +import urllib.parse +import urllib.request + +import rclpy +from rclpy.executors import ExternalShutdownException +from rclpy.node import Node +from rclpy.qos import QoSDurabilityPolicy, QoSHistoryPolicy, QoSProfile, QoSReliabilityPolicy +from std_msgs.msg import String + +CMD_TOPIC = "/bias/cmd" +REPLY_TOPIC = "/bias/reply" +STATUS_TOPIC = "/bias/status" +QOS = QoSProfile( + reliability=QoSReliabilityPolicy.RELIABLE, + history=QoSHistoryPolicy.KEEP_LAST, + depth=50, + durability=QoSDurabilityPolicy.VOLATILE, +) +PLUGIN_COMMANDS = ("connect", "startRecording", "stopRecording", "startPreview", "stopCapture", "getTimestamp", "disconnect") + + +class BiasHttp: + """Blocking HTTP client for BIAS's command port. One command per request.""" + + def __init__(self, host: str, port: int, timeout_s: float) -> None: + self.host = host + self.port = port + self.timeout_s = timeout_s + + @property + def base(self) -> str: + return f"http://{self.host}:{self.port}/" + + def call(self, command: str, value: str | None = None) -> dict: + """→ {"command", "ok", "message", "value", "rtt_ms"} or raises TimeoutError / OSError.""" + q = command if value is None else f"{command}={urllib.parse.quote(str(value), safe='/:\\')}" + url = f"{self.base}?{q}" + t0 = time.monotonic() + try: + with urllib.request.urlopen(url, timeout=self.timeout_s) as resp: + body = resp.read() + except urllib.error.URLError as exc: + if isinstance(exc.reason, TimeoutError) or "timed out" in str(exc.reason): + raise TimeoutError(str(exc)) from exc + raise OSError(str(exc)) from exc + except TimeoutError: + raise + rtt = (time.monotonic() - t0) * 1000.0 + try: + arr = json.loads(body.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError): + raise OSError(f"non-JSON reply from BIAS: {body[:80]!r}") + rep = arr[0] if isinstance(arr, list) and arr else (arr if isinstance(arr, dict) else {}) + return { + "command": command, + "ok": bool(rep.get("success", False)), + "message": rep.get("message", ""), + "value": rep.get("value", None), + "rtt_ms": round(rtt, 2), + } + + +def plan(command: str, params: dict) -> list[tuple[str, str | None]]: + """Plugin command → BIAS HTTP steps (the sequence BiasPlugin.m performs).""" + params = params or {} + if command == "connect": + steps: list[tuple[str, str | None]] = [("connect", None)] + if params.get("config_file"): + steps.append(("load-configuration", str(params["config_file"]))) + return steps + if command == "startRecording": + steps = [] + if params.get("filename"): + steps.append(("set-video-file", str(params["filename"]))) + steps += [("enable-logging", None), ("start-capture", None), ("get-video-file", None)] + return steps + if command == "stopRecording": + return [("stop-capture", None), ("disable-logging", None)] + if command == "startPreview": + return [("disable-logging", None), ("start-capture", None)] + if command == "stopCapture": + return [("stop-capture", None)] + if command == "getTimestamp": + return [("get-time-stamp", None)] + if command == "disconnect": + return [("disconnect", None)] + raise ValueError(f"unknown plugin command {command!r} (one of {PLUGIN_COMMANDS})") + + +class BiasNode(Node): + def __init__(self, http: BiasHttp, status_every_s: float) -> None: + super().__init__("bias_camera") + self.http = http + self.reply_pub = self.create_publisher(String, REPLY_TOPIC, QOS) + self.status_pub = self.create_publisher(String, STATUS_TOPIC, QOS) + self.create_subscription(String, CMD_TOPIC, self._on_cmd, QOS) + self._q: queue.Queue = queue.Queue() + self._worker = threading.Thread(target=self._work, name="bias-http", daemon=True) + self._worker.start() + self._status_every = status_every_s + if status_every_s > 0: + self.create_timer(status_every_s, lambda: self._q.put(("status", None))) + self.commands = 0 + self.get_logger().info(f"BIAS at {http.base} ← {CMD_TOPIC} → {REPLY_TOPIC}, {STATUS_TOPIC} every {status_every_s:g}s") + + def _publish(self, pub, obj: dict) -> None: + obj.setdefault("rx_epoch_ms", int(time.time() * 1000)) + m = String() + m.data = json.dumps(obj, separators=(",", ":"), default=str) + pub.publish(m) + + def _on_cmd(self, msg: String) -> None: + try: + req = json.loads(msg.data) + except json.JSONDecodeError: + self._publish(self.reply_pub, {"id": None, "ok": False, "outcome": "error", "error": "command is not JSON"}) + return + if not isinstance(req, dict): + return + self._q.put(("cmd", req)) + + def _work(self) -> None: + while True: + kind, payload = self._q.get() + if kind == "status": + self._do_status() + else: + self._do_cmd(payload) + + def _do_status(self) -> None: + t_ms = int(time.time() * 1000) + try: + r = self.http.call("get-status") + st = r["value"] if isinstance(r["value"], dict) else {} + self._publish(self.status_pub, {"reachable": True, "t_ms": t_ms, "rtt_ms": r["rtt_ms"], **st}) + except (TimeoutError, OSError) as exc: + self._publish(self.status_pub, {"reachable": False, "t_ms": t_ms, "error": str(exc)}) + + def _do_cmd(self, req: dict) -> None: + self.commands += 1 + cid = req.get("id") + command = str(req.get("command", "")) + params = req.get("params") or {} + t_ms = int(time.time() * 1000) + t0 = time.monotonic() + out: dict = {"id": cid, "command": command, "params": params, "t_ms": t_ms, "steps": []} + try: + if command == "connect" and (params.get("ip") or params.get("port")): + # The protocol's connect(ip, port) retargets the node (rig YAML normally sets these). + self.http.host = str(params.get("ip") or self.http.host) + self.http.port = int(params.get("port") or self.http.port) + steps = plan(command, params) + except ValueError as exc: + out.update({"ok": False, "outcome": "error", "error": str(exc)}) + self._publish(self.reply_pub, out) + return + value = None + for http_cmd, val in steps: + try: + r = self.http.call(http_cmd, val) + except TimeoutError as exc: + # UNKNOWN: the command may or may not have taken effect. Reconcile before + # anything else runs, and say so. + out["steps"].append({"command": http_cmd, "ok": None, "error": f"timeout after {self.http.timeout_s}s"}) + out.update({"ok": False, "outcome": "unknown", "error": str(exc)}) + self._do_status() + break + except OSError as exc: + out["steps"].append({"command": http_cmd, "ok": False, "error": str(exc)}) + out.update({"ok": False, "outcome": "error", "error": f"BIAS unreachable at {self.http.base}: {exc}"}) + break + out["steps"].append(r) + if not r["ok"]: + out.update({"ok": False, "outcome": "error", "error": f"{http_cmd}: {r['message']}"}) + break + value = r["value"] + if command == "startRecording" and http_cmd == "get-video-file" and r["value"]: + out["artifact"] = {"kind": "video", "path": r["value"], "program": "bias"} + else: + out.update({"ok": True, "outcome": "ok", "value": value}) + out["rtt_ms"] = round((time.monotonic() - t0) * 1000.0, 2) + self._publish(self.reply_pub, out) + # rclpy caches a severity per call site, so info and warning need separate statements. + if out["ok"]: + self.get_logger().info(f"{command} → ok ({out['rtt_ms']} ms)") + else: + self.get_logger().warning(f"{command} → {out['outcome']} ({out['rtt_ms']} ms): {out.get('error')}") + + +def main(argv: list[str] | None = None) -> int: + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("--host", default="127.0.0.1", help="BIAS command-port host (default: 127.0.0.1)") + p.add_argument("--port", type=int, default=5010, help="BIAS command port (default: 5010)") + p.add_argument("--timeout-s", type=float, default=2.0, help="per-HTTP-call timeout; a timeout is an UNKNOWN outcome (default: 2)") + p.add_argument("--status-every", type=float, default=1.0, help="get-status poll period in s; 0 = off (default: 1)") + args, ros_args = p.parse_known_args(argv) + rclpy.init(args=ros_args) + node = BiasNode(BiasHttp(args.host, args.port, args.timeout_s), args.status_every) + try: + rclpy.spin(node) + except (KeyboardInterrupt, ExternalShutdownException): + pass # Ctrl-C: rclpy ≥ Jazzy raises ExternalShutdownException from spin + finally: + node.destroy_node() + try: + rclpy.try_shutdown() + except Exception: # rclpy's own SIGINT handler may already have shut the context down (races in Jazzy) + pass + print(f"[bias-node] {node.commands} commands handled", file=sys.stderr) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/ros2-poc/nodes/bias_sim.py b/ros2-poc/nodes/bias_sim.py new file mode 100644 index 00000000..80012d18 --- /dev/null +++ b/ros2-poc/nodes/bias_sim.py @@ -0,0 +1,203 @@ +#!/usr/bin/env python3 +"""bias_sim.py — a stand-in for the BIAS camera program's external-control HTTP interface. + +BIAS (IO Rodeo) is controlled over HTTP GET on its command port (5010 by default in our +rig YAMLs): `http://host:port/?[=][&…]`, answering a JSON ARRAY +with one object per command: `{"success": bool, "message": str, "value": …, "command": str}`. +This is the interface `BiasPlugin.m` (maDisplayTools) and BIAS's own `bias.py` client use. +The sim implements the subset bias_node.py needs, with a real state machine so sequencing +mistakes show up (start-capture before connect fails, as on the real program): + + connect / disconnect connected flag + start-capture / stop-capture capturing flag; frameCount grows at --fps + enable-logging / disable-logging logging flag (video written while capturing) + set-video-file= / get-video-file the artifact: on stop-capture with logging on, + a small file is written at that path (relative + paths land in --video-dir) and reported as value + get-status {"connected","capturing","logging","frameCount", + "framesPerSec","timeStamp","videoFile"} + get-time-stamp / get-frame-count scalars + load-configuration= accepted, echoed + +VERIFY AGAINST THE REAL PROGRAM: the command names and the array response shape are from +BIAS's documented external interface; the exact `value` payloads of the Mac port must be +confirmed on Michael's Mac (bias_node.py treats them as opaque and logs them verbatim). + + pixi run bias-sim -- --port 5010 --video-dir /tmp/bias-videos + curl 'http://127.0.0.1:5010/?connect' +""" + +from __future__ import annotations + +import argparse +import json +import os +import sys +import threading +import time +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +from urllib.parse import unquote, urlparse + +DEFAULT_PORT = 5010 + + +class BiasState: + def __init__(self, fps: float, video_dir: str, latency_s: float) -> None: + self.fps = fps + self.video_dir = video_dir + self.latency_s = latency_s + self.lock = threading.Lock() + self.connected = False + self.capturing = False + self.logging = False + self.video_file = "" + self.capture_t0: float | None = None + self.frames_before = 0 # frames from earlier capture segments + self.t0 = time.time() + self.written: list[str] = [] + + def frame_count(self) -> int: + n = self.frames_before + if self.capturing and self.capture_t0 is not None: + n += int((time.time() - self.capture_t0) * self.fps) + return n + + def status(self) -> dict: + return { + "connected": self.connected, + "capturing": self.capturing, + "logging": self.logging, + "frameCount": self.frame_count(), + "framesPerSec": self.fps if self.capturing else 0.0, + "timeStamp": round(time.time() - self.t0, 6), + "videoFile": self.video_file, + } + + def _video_path(self) -> str: + p = self.video_file + if p and not os.path.isabs(p): + p = os.path.join(self.video_dir, p) + return p + + def handle(self, cmd: str, value: str | None) -> dict: + """One command → one response object. Mirrors BIAS's success/message/value shape.""" + ok, msg, val = True, "", "" + if cmd == "connect": + self.connected = True + msg = "connected" + elif cmd == "disconnect": + if self.capturing: + ok, msg = False, "camera is capturing" + else: + self.connected = False + msg = "disconnected" + elif cmd == "start-capture": + if not self.connected: + ok, msg = False, "camera not connected" + elif self.capturing: + ok, msg = False, "already capturing" + else: + self.capturing = True + self.capture_t0 = time.time() + msg = "capture started" + elif cmd == "stop-capture": + if not self.capturing: + ok, msg = False, "not capturing" + else: + self.frames_before = self.frame_count() + self.capturing = False + self.capture_t0 = None + msg = "capture stopped" + if self.logging and self.video_file: + path = self._video_path() + os.makedirs(os.path.dirname(path) or ".", exist_ok=True) + with open(path, "wb") as fh: + fh.write(json.dumps({"bias_sim": True, "frames": self.frames_before, "fps": self.fps}).encode()) + self.written.append(path) + val = path + msg = f"capture stopped, video written {path}" + elif cmd == "enable-logging": + self.logging = True + msg = "logging enabled" + elif cmd == "disable-logging": + self.logging = False + msg = "logging disabled" + elif cmd == "set-video-file": + if value is None: + ok, msg = False, "set-video-file needs a value" + else: + self.video_file = value + val = self._video_path() + msg = "video file set" + elif cmd == "get-video-file": + val = self._video_path() + elif cmd == "get-status": + val = self.status() + elif cmd == "get-time-stamp": + val = round(time.time() - self.t0, 6) + elif cmd == "get-frame-count": + val = self.frame_count() + elif cmd == "load-configuration": + if value is None: + ok, msg = False, "load-configuration needs a file" + else: + msg = f"configuration loaded from {value}" + val = value + elif cmd == "get-configuration": + val = {"sim": True, "fps": self.fps} + else: + ok, msg = False, f"unknown command {cmd!r}" + return {"success": ok, "message": msg, "value": val, "command": cmd} + + +def make_handler(state: BiasState): + class Handler(BaseHTTPRequestHandler): + server_version = "bias_sim/0.1" + + def log_message(self, fmt, *args): # quiet; the node logs replies + pass + + def do_GET(self): + q = urlparse(self.path).query + replies = [] + with state.lock: + for part in q.split("&"): + if not part: + continue + cmd, _, value = part.partition("=") + replies.append(state.handle(unquote(cmd), unquote(value) if _ else None)) + if state.latency_s > 0: + time.sleep(state.latency_s) + body = json.dumps(replies).encode("utf-8") + self.send_response(200) + self.send_header("Content-Type", "application/json") + self.send_header("Content-Length", str(len(body))) + self.end_headers() + self.wfile.write(body) + + return Handler + + +def main(argv: list[str] | None = None) -> int: + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("--host", default="127.0.0.1") + p.add_argument("--port", type=int, default=DEFAULT_PORT) + p.add_argument("--fps", type=float, default=100.0, help="simulated capture rate (default: 100)") + p.add_argument("--video-dir", default="bias-videos", help="where relative video paths land (default: ./bias-videos)") + p.add_argument("--latency-ms", type=float, default=0.0, help="artificial reply delay, for timeout tests") + args = p.parse_args(argv) + state = BiasState(args.fps, args.video_dir, args.latency_ms / 1000.0) + srv = ThreadingHTTPServer((args.host, args.port), make_handler(state)) + print(f"[bias-sim] http://{args.host}:{args.port}/? (fps {args.fps:g}, videos → {args.video_dir})", file=sys.stderr) + try: + srv.serve_forever() + except KeyboardInterrupt: + pass + finally: + srv.server_close() + print(f"[bias-sim] videos written: {state.written}", file=sys.stderr) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/ros2-poc/nodes/bridge_node.py b/ros2-poc/nodes/bridge_node.py new file mode 100644 index 00000000..a097818c --- /dev/null +++ b/ros2-poc/nodes/bridge_node.py @@ -0,0 +1,425 @@ +#!/usr/bin/env python3 +"""bridge_node.py — the bridge as a ROS 2 node, reusing bridge.py's hub, log writer and dispatcher. + +The unmodified Arena Studio connects to ws://localhost:8765 exactly as it does to bridge +3.4, speaks the same message schema (hello/hello_ack, config, log_control(_ack), log, +rows, log_export(_result)) and gets the same `frame` messages. The difference is where +FicTrac records come from: a ROS 2 topic (`/fictrac/raw`, std_msgs/String JSON from +fictrac_udp_adapter.py) instead of a UDP socket owned by this process. + +What is REUSED from fictrac-bridge/bridge.py, imported by path, unmodified: + Hub — the coalescing WebSocket broadcast (latest frame, never a backlog) + LogWriter — the behavior_v2 NDJSON run log (schema line, compact ["a",…] echoes, rows) + Pipeline — FicTrac line → heading tare → unwrapped turn → bias → frame index + make_dispatcher — the browser-message handler (config/log_control/log_export/rows/log) +so the log a Studio run produces here is the same format bridge 3.4 writes and every +reader (closed-loop-report, dashboard, replay, runlog-format tests) already accepts. + +What is NEW (small, and all of it is visible in the log): + * input = ROS subscription. `Pipeline.handle_line` stamps the row's `ms` with ITS OWN + wall clock at the moment the index is computed (unchanged) — the closed-loop node + stamps its own sample time, as LAB-303 asks. The adapter's receive stamp travels in + the envelope and is used only for the `lat_ms` latency statistics. + * `/arena/frame` — every frame the hub publishes is also published as a ROS topic, so + `ros2 topic echo/hz` introspect the closed loop and ROS-native nodes can subscribe. + * other device topics are LOGGED, not applied: `/kinefly/raw` (KF/1) → compact tagged + rows `["kf", ms, seq, src_t_s, left_rad, right_rad, head_rad, abdomen_rad]`; + `/bias/reply` and `/bias/status` → `{"type":"connector","src":"bias",…}` events. + Readers already pass unknown string-tagged arrays and unknown event objects through. + * a source watchdog: when a logged source goes silent for --source-timeout s during a + log, a `source_lost` event is written (and `source_resumed` when it returns). A device + node killed mid-run therefore leaves the log intact AND documented. + * `connector_status` lines (frames seen, adapter→bridge latency p50/p99 ms per source) + at log close / export, so a run carries its own transport health. + +Not supported here (by design of the PoC): the `fictrac_port` config key cannot re-bind +the socket — the adapter owns it. The request is acknowledged with a warning. + + pixi run bridge-node # ws://127.0.0.1:8765, logs on demand to runlogs/ + pixi run bridge-node -- --frames 60 --log-dir /path +""" + +from __future__ import annotations + +import argparse +import asyncio +import importlib.util +import json +import math +import os +import signal +import sys +import threading +import time +from pathlib import Path + +import rclpy +from rclpy.executors import SingleThreadedExecutor +from rclpy.node import Node +from rclpy.qos import QoSDurabilityPolicy, QoSHistoryPolicy, QoSProfile, QoSReliabilityPolicy +from std_msgs.msg import String + +HERE = Path(__file__).resolve().parent +REPO = HERE.parents[1] +BRIDGE_PY = REPO / "fictrac-bridge" / "bridge.py" + + +def load_bridge_module(path: Path = BRIDGE_PY): + """Import fictrac-bridge/bridge.py by path (it is a script, not a package).""" + spec = importlib.util.spec_from_file_location("fictrac_bridge", path) + if spec is None or spec.loader is None: + raise SystemExit(f"cannot load {path}") + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + +B = load_bridge_module() + +NODE_VERSION = f"{B.BRIDGE_VERSION} · ros2-poc (rmw_zenoh, /fictrac/raw)" +FICTRAC_TOPIC = "/fictrac/raw" +KINEFLY_TOPIC = "/kinefly/raw" +BIAS_REPLY_TOPIC = "/bias/reply" +BIAS_STATUS_TOPIC = "/bias/status" +FRAME_TOPIC = "/arena/frame" +RAW_QOS = QoSProfile( + reliability=QoSReliabilityPolicy.RELIABLE, + history=QoSHistoryPolicy.KEEP_LAST, + depth=200, + durability=QoSDurabilityPolicy.VOLATILE, +) +FRAME_QOS = QoSProfile( + reliability=QoSReliabilityPolicy.BEST_EFFORT, + history=QoSHistoryPolicy.KEEP_LAST, + depth=1, + durability=QoSDurabilityPolicy.VOLATILE, +) +KF_TAG = "kf" + + +def percentile(values: list[float], q: float) -> float | None: + if not values: + return None + s = sorted(values) + k = min(len(s) - 1, max(0, int(round(q * (len(s) - 1))))) + return s[k] + + +def kf_row(rel_ms: int, pkt: dict, seq: int) -> list: + """KF/1 record → compact tagged row. PURE. Angles are the FIRST (strongest-edge) + angle of each part when the part is valid, else null — Kinefly's bridge plan: the + edge identity policy is explicit, index 0 is only the initial single-edge choice.""" + + def first_angle(name: str): + part = pkt.get("parts", {}).get(name) or {} + if not part.get("valid"): + return None + angles = part.get("angles_rad") or [] + return round(float(angles[0]), 5) if angles else None + + t_src = pkt.get("timestamp_s") + return [ + KF_TAG, + int(rel_ms), + int(seq), + round(float(t_src), 6) if isinstance(t_src, (int, float)) else None, + first_angle("left"), + first_angle("right"), + first_angle("head"), + first_angle("abdomen"), + ] + + +class RosInput: + """Stands in for bridge.py's InputManager (the dispatcher calls `rebind` on a + `fictrac_port` config key and reads `.port`). The ROS adapter owns the socket, so a + port change is acknowledged and logged, not performed.""" + + def __init__(self, port: int, warn) -> None: + self.port = port + self.proto = "ros2" + self._warn = warn + self._warned = False + + def start(self) -> None: + pass + + async def rebind(self, port: int) -> None: + if port == self.port: + return + if not self._warned: + self._warned = True + self._warn( + f"config fictrac_port {port} ignored: the fictrac adapter owns the UDP socket " + f"(restart `pixi run fictrac-adapter -- --port {port}`)" + ) + + async def stop(self) -> None: + pass + + +class SourceStats: + """Per-source counters + adapter→bridge latency samples (bounded).""" + + def __init__(self, name: str) -> None: + self.name = name + self.count = 0 + self.last_rx_mono = None # bridge monotonic at last message + self.lat_ms: list[float] = [] + self.lost = False + + def seen(self, rx_epoch_ms: int | None) -> None: + self.count += 1 + self.last_rx_mono = time.monotonic() + if rx_epoch_ms is not None: + self.lat_ms.append(time.time() * 1000.0 - rx_epoch_ms) + if len(self.lat_ms) > 5000: + del self.lat_ms[: len(self.lat_ms) - 5000] + + def summary(self) -> dict: + return { + "src": self.name, + "frames": self.count, + "lat_ms": { + "p50": None if not self.lat_ms else round(percentile(self.lat_ms, 0.5), 2), + "p99": None if not self.lat_ms else round(percentile(self.lat_ms, 0.99), 2), + "n": len(self.lat_ms), + }, + } + + +class RosHub(B.Hub): + """bridge.py's Hub + a ROS mirror of every frame on /arena/frame.""" + + def __init__(self, on_message, ros_pub) -> None: + super().__init__(on_message) + self._ros_pub = ros_pub + + async def publish(self, msg: dict) -> None: + await super().publish(msg) + if self._ros_pub is not None: + m = String() + m.data = json.dumps(msg, separators=(",", ":")) + self._ros_pub.publish(m) + + +class BridgeNode(Node): + """ROS side: subscriptions hand data to the asyncio side thread-safely.""" + + def __init__(self, loop: asyncio.AbstractEventLoop, queue: asyncio.Queue, on_kinefly, on_bias) -> None: + super().__init__("arena_bridge") + self._loop = loop + self._queue = queue + self._on_kinefly = on_kinefly + self._on_bias = on_bias + self.stats = {"fictrac": SourceStats("fictrac"), "kinefly": SourceStats("kinefly"), "bias": SourceStats("bias")} + self.frame_pub = self.create_publisher(String, FRAME_TOPIC, FRAME_QOS) + self.create_subscription(String, FICTRAC_TOPIC, self._fictrac, RAW_QOS) + self.create_subscription(String, KINEFLY_TOPIC, self._kinefly, RAW_QOS) + self.create_subscription(String, BIAS_REPLY_TOPIC, lambda m: self._bias("reply", m), RAW_QOS) + self.create_subscription(String, BIAS_STATUS_TOPIC, lambda m: self._bias("status", m), RAW_QOS) + + @staticmethod + def _envelope(msg: String) -> dict | None: + try: + env = json.loads(msg.data) + except json.JSONDecodeError: + return None + return env if isinstance(env, dict) else None + + def _fictrac(self, msg: String) -> None: + env = self._envelope(msg) + if env is None or not isinstance(env.get("raw"), str): + return + self.stats["fictrac"].seen(env.get("rx_epoch_ms")) + # Same hand-off bridge.py's UDP protocol does (queue.put_nowait), from the ROS thread. + self._loop.call_soon_threadsafe(self._queue.put_nowait, env["raw"]) + + def _kinefly(self, msg: String) -> None: + env = self._envelope(msg) + if env is None or not isinstance(env.get("raw"), str): + return + self.stats["kinefly"].seen(env.get("rx_epoch_ms")) + self._loop.call_soon_threadsafe(self._on_kinefly, env) + + def _bias(self, kind: str, msg: String) -> None: + env = self._envelope(msg) + if env is None: + return + self.stats["bias"].seen(env.get("rx_epoch_ms")) + self._loop.call_soon_threadsafe(self._on_bias, kind, env) + + +async def run(args: argparse.Namespace) -> None: + if B.serve is None: + raise SystemExit("the `websockets` package is required (pixi install)") + loop = asyncio.get_running_loop() + log = B.LogWriter(args.log, args.log_level, args.log_dir) + queue: asyncio.Queue[str] = asyncio.Queue() + pipeline = B.Pipeline( + None, + log, + args.frames, + args.deg_per_frame, + args.offset, + {"type": "none", "amplitude": 0.0, "frequency": 0.0}, + coupling=args.coupling, + ) + + def rel_ms() -> int: + return B.now_ms() - pipeline.t0_ms + + def warn(text: str) -> None: + print(f"[bridge-node] {text}", file=sys.stderr) + log.write_event({"type": "log", "event": "warn", "dir": "bridge", "level": "WARN", "ms": rel_ms(), "message": text}) + + kf_seq = {"n": 0} + + def on_kinefly(env: dict) -> None: + try: + pkt = json.loads(env["raw"]) + except (json.JSONDecodeError, KeyError, TypeError): + return + kf_seq["n"] += 1 + seq = pkt.get("sequence") if isinstance(pkt.get("sequence"), int) else kf_seq["n"] + log.write_rows([kf_row(rel_ms(), pkt, seq)]) + + def on_bias(kind: str, env: dict) -> None: + ev = {"type": "connector", "src": "bias", "kind": kind, "dir": "bridge", "ms": rel_ms()} + for k, v in env.items(): + if k not in ("src",): + ev[k] = v + log.write_event(ev) + + inputs = RosInput(args.fictrac_port, warn) + inner = B.make_dispatcher(pipeline, log, inputs) + + node = BridgeNode(loop, queue, on_kinefly, on_bias) + + def write_status() -> None: + """One connector_status line per source that produced anything (log must be open).""" + for s in node.stats.values(): + if s.count: + log.write_event({"type": "connector_status", "dir": "bridge", "ms": rel_ms(), **s.summary()}) + + async def dispatch(raw, websocket=None) -> None: + # Add the connector_status lines BEFORE the file closes (log_control off / export). + try: + obj = json.loads(raw if isinstance(raw, str) else raw.decode("utf-8", errors="replace")) + except (json.JSONDecodeError, AttributeError): + obj = None + if isinstance(obj, dict): + kind = obj.get("type") + if (kind == "log_control" and not obj.get("enabled")) or kind == "log_export": + write_status() + await inner(raw, websocket) + if isinstance(obj, dict) and obj.get("type") == "log_control" and obj.get("enabled"): + # A new file was opened: note where its frames come from. + log.write_event( + { + "type": "connector_status", + "dir": "bridge", + "ms": rel_ms(), + "src": "bridge", + "node": NODE_VERSION, + "rmw": os.environ.get("RMW_IMPLEMENTATION"), + "topics": {"fictrac": FICTRAC_TOPIC, "kinefly": KINEFLY_TOPIC, "bias": [BIAS_REPLY_TOPIC, BIAS_STATUS_TOPIC], "frame": FRAME_TOPIC}, + } + ) + + hub = RosHub(dispatch, node.frame_pub) + pipeline.hub = hub + + # hello_ack must say 3.4 first so the unmodified Studio's _bridgeAtLeast(3,4) passes. + B.BRIDGE_VERSION = NODE_VERSION + + async def watchdog() -> None: + while True: + await asyncio.sleep(0.5) + if not log.active: + continue + now = time.monotonic() + for s in node.stats.values(): + if s.name == "bias" or s.last_rx_mono is None: + continue + silent = now - s.last_rx_mono + if not s.lost and silent > args.source_timeout: + s.lost = True + log.write_event({"type": "source_lost", "dir": "bridge", "ms": rel_ms(), "src": s.name, "silence_ms": int(silent * 1000), "frames": s.count}) + print(f"[bridge-node] source {s.name} silent for {silent:.1f}s (log stays open)", file=sys.stderr) + elif s.lost and silent <= args.source_timeout: + s.lost = False + log.write_event({"type": "source_resumed", "dir": "bridge", "ms": rel_ms(), "src": s.name, "frames": s.count}) + print(f"[bridge-node] source {s.name} resumed", file=sys.stderr) + + stop = asyncio.Event() + for sig in (signal.SIGINT, signal.SIGTERM): + try: + loop.add_signal_handler(sig, stop.set) + except NotImplementedError: + pass + + executor = SingleThreadedExecutor() + executor.add_node(node) + ros_thread = threading.Thread(target=executor.spin, name="rclpy-spin", daemon=True) + ros_thread.start() + + consumer = asyncio.create_task(B.consume(queue, pipeline)) + wd = asyncio.create_task(watchdog()) + + async with B.serve(hub.serve_client, args.ws_host, args.ws_port, max_size=B.WS_MAX_SIZE): + print( + f"[ws] serving ws://{args.ws_host}:{args.ws_port} (bridge-node {NODE_VERSION}; " + f"rmw={os.environ.get('RMW_IMPLEMENTATION')}, in={FICTRAC_TOPIC}, frames={args.frames}, " + f"coupling={args.coupling:g}, deg_per_frame={args.deg_per_frame:g}, log={args.log or 'on-demand'}, level={log.level})", + file=sys.stderr, + ) + await stop.wait() + + print(f"\n[bridge-node] shutting down (parsed={pipeline.parsed}, skipped={pipeline.skipped})", file=sys.stderr) + for s in node.stats.values(): + if s.count: + print(f"[bridge-node] {json.dumps(s.summary())}", file=sys.stderr) + consumer.cancel() + wd.cancel() + await asyncio.gather(consumer, wd, return_exceptions=True) + write_status() + log.close() + executor.shutdown(timeout_sec=1.0) + node.destroy_node() + + +def main(argv: list[str] | None = None) -> int: + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("--version", action="version", version=f"bridge-node {NODE_VERSION}") + p.add_argument("--ws-host", default="127.0.0.1") + p.add_argument("--ws-port", type=int, default=8765) + p.add_argument("--frames", type=int, default=200, help="frame count of the loaded pattern; the Studio re-sends it live (default: 200)") + p.add_argument("--coupling", type=float, default=1.0) + p.add_argument("--deg-per-frame", type=float, default=1.8) + p.add_argument("--offset", type=float, default=0.0) + p.add_argument("--fictrac-port", type=int, default=60000, help="reported FicTrac port (the adapter owns the socket; informational)") + p.add_argument("--source-timeout", type=float, default=2.0, help="seconds of silence from a logged source before a source_lost event (default: 2)") + p.add_argument("--log", default=None, help="fixed log path (else on demand per log_control)") + p.add_argument("--log-dir", default=str(HERE.parent / "runlogs"), help="directory for on-demand arena-log-*.jsonl (default: ros2-poc/runlogs)") + p.add_argument("--log-level", choices=B.LOG_LEVELS, default=B.DEFAULT_LOG_LEVEL) + args, ros_args = p.parse_known_args(argv) + if args.frames <= 0: + p.error("--frames must be > 0") + if not math.isfinite(args.coupling): + p.error("--coupling must be finite") + rclpy.init(args=ros_args) + try: + asyncio.run(run(args)) + except KeyboardInterrupt: + pass + finally: + try: + rclpy.try_shutdown() + except Exception: # rclpy's own SIGINT handler may already have shut the context down (races in Jazzy) + pass + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/ros2-poc/nodes/fictrac_udp_adapter.py b/ros2-poc/nodes/fictrac_udp_adapter.py new file mode 100644 index 00000000..c09e939e --- /dev/null +++ b/ros2-poc/nodes/fictrac_udp_adapter.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python3 +"""fictrac_udp_adapter.py — FicTrac UDP → ROS 2 topic, one std_msgs/String per record. + +FicTrac itself is untouched: it keeps sending its 25-field CSV line per camera frame to +a UDP port (the same `sock_host`/`sock_port` it has today, 127.0.0.1:60000). This node +owns that socket and republishes every datagram line as JSON on `/fictrac/raw`: + + {"src": "fictrac", "seq": , + "rx_epoch_ms": , "rx_mono_ns": , + "raw": ""} + +The line is NOT parsed here. The bridge node parses it with bridge.py's Pipeline, so the +closed-loop mapping, the heading tare and the logged row are byte-for-byte what bridge +3.4 produces — the adapter only moves bytes and stamps when it saw them. No custom +message types (LAB-303 PoC rule): std_msgs/String carrying JSON. + +QoS: RELIABLE, KEEP_LAST 200. The run log must hold EVERY FicTrac frame (bridge.py +write_frame), so the topic is reliable; the bridge node's Hub coalesces for the browser +separately, as before. ~50-100 Hz × ~250 B is nothing for Zenoh on loopback. + + pixi run fictrac-adapter -- --port 60000 + pixi run sim -- --proto udp --rate 50 # the unmodified simulator feeds it +""" + +from __future__ import annotations + +import argparse +import json +import socket +import sys +import threading +import time + +import rclpy +from rclpy.executors import ExternalShutdownException +from rclpy.node import Node +from rclpy.qos import QoSDurabilityPolicy, QoSHistoryPolicy, QoSProfile, QoSReliabilityPolicy +from std_msgs.msg import String + +TOPIC = "/fictrac/raw" +RAW_QOS = QoSProfile( + reliability=QoSReliabilityPolicy.RELIABLE, + history=QoSHistoryPolicy.KEEP_LAST, + depth=200, + durability=QoSDurabilityPolicy.VOLATILE, +) + + +def wrap_line(src: str, seq: int, raw: str, rx_epoch_ms: int, rx_mono_ns: int) -> str: + """The JSON envelope every adapter publishes (pure; shared shape with kinefly_udp_adapter).""" + return json.dumps( + {"src": src, "seq": seq, "rx_epoch_ms": rx_epoch_ms, "rx_mono_ns": rx_mono_ns, "raw": raw}, + separators=(",", ":"), + ) + + +class FicTracUdpAdapter(Node): + def __init__(self, host: str, port: int, status_every_s: float) -> None: + super().__init__("fictrac_udp_adapter") + self.pub = self.create_publisher(String, TOPIC, RAW_QOS) + self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.sock.bind((host, port)) + self.sock.settimeout(0.5) # lets the thread notice shutdown + self.seq = 0 + self.lines = 0 + self.datagrams = 0 + self._stop = threading.Event() + self._buf = b"" + self._thread = threading.Thread(target=self._recv_loop, name="udp-recv", daemon=True) + self._thread.start() + self.get_logger().info(f"UDP {host}:{port} → {TOPIC} (std_msgs/String JSON, reliable)") + if status_every_s > 0: + self._last = (0, time.monotonic()) + self.create_timer(status_every_s, self._status) + + def _publish(self, raw: str) -> None: + self.seq += 1 + msg = String() + msg.data = wrap_line("fictrac", self.seq, raw, int(time.time() * 1000), time.monotonic_ns()) + self.pub.publish(msg) + self.lines += 1 + + def _recv_loop(self) -> None: + # One record per datagram is FicTrac's behaviour; buffer + split on newlines anyway + # (same tolerance as bridge.py's _UdpProtocol) so a coalesced or split datagram + # never produces a half line. + while not self._stop.is_set(): + try: + data, _ = self.sock.recvfrom(65535) + except socket.timeout: + continue + except OSError: + break + self.datagrams += 1 + self._buf += data + while b"\n" in self._buf: + line, self._buf = self._buf.split(b"\n", 1) + if line.strip(): + self._publish(line.decode("ascii", errors="replace")) + if self._buf and b"\n" not in data: + self._publish(self._buf.decode("ascii", errors="replace")) + self._buf = b"" + + def _status(self) -> None: + n0, t0 = self._last + now = time.monotonic() + rate = (self.lines - n0) / max(1e-9, now - t0) + self._last = (self.lines, now) + self.get_logger().info(f"{self.lines} lines published ({rate:.1f}/s), {self.datagrams} datagrams") + + def destroy_node(self) -> bool: + self._stop.set() + try: + self.sock.close() + except OSError: + pass + return super().destroy_node() + + +def main(argv: list[str] | None = None) -> int: + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("--host", default="127.0.0.1", help="UDP bind host (default: 127.0.0.1)") + p.add_argument("--port", type=int, default=60000, help="UDP bind port — FicTrac's sock_port (default: 60000)") + p.add_argument("--status-every", type=float, default=5.0, help="stderr rate line interval in s; 0 = off (default: 5)") + # ros2 run / launch pass --ros-args; keep them for rclpy. + args, ros_args = p.parse_known_args(argv) + rclpy.init(args=ros_args) + node = FicTracUdpAdapter(args.host, args.port, args.status_every) + try: + rclpy.spin(node) + except (KeyboardInterrupt, ExternalShutdownException): + pass # Ctrl-C: rclpy ≥ Jazzy raises ExternalShutdownException from spin + finally: + node.destroy_node() + try: + rclpy.try_shutdown() + except Exception: # rclpy's own SIGINT handler may already have shut the context down (races in Jazzy) + pass + print(f"[fictrac-adapter] {node.lines} lines, {node.datagrams} datagrams", file=sys.stderr) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/ros2-poc/nodes/kinefly_sim.py b/ros2-poc/nodes/kinefly_sim.py new file mode 100644 index 00000000..b7c5e724 --- /dev/null +++ b/ros2-poc/nodes/kinefly_sim.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 +"""kinefly_sim.py — a synthetic KF/1 producer (stands in for Kinefly, like fictrac_sim.py for FicTrac). + +Emits one KF/1 datagram per frame at --rate Hz to --host:--port, byte-compatible with +mbreiser/Kinefly-MacOS `kinefly/core/udp.py` (`protocol: "Kinefly"`, `version: 1`, a fresh +session UUID, `sequence` from 1, `source`, `timestamp_s`, `host_monotonic_s`, five `parts`). +The wings are tracked (`edge` mode, one angle each); head/abdomen/aux are disabled with the +empty-array/null shape the real encoder uses for disabled parts. + +Kinematics: a steering fly. Left and right wing-stroke amplitudes sit at `--mean-deg` and +the DIFFERENCE L−R follows a slow sine of `--diff-deg` peak at `--diff-hz` (plus a little +noise), so a downstream L−R → yaw integrator has something smooth and known to chase. +--seed makes the bytes reproducible. + + pixi run kinefly-sim -- --rate 100 --diff-deg 10 --diff-hz 0.1 --seed 1 +""" + +from __future__ import annotations + +import argparse +import json +import math +import random +import socket +import sys +import time +import uuid + +DEFAULT_PORT = 60001 +PARTS = ("head", "abdomen", "left", "right", "aux") + + +def disabled_part(mode: str | None) -> dict: + return dict(enabled=False, valid=False, mode=mode, angles_rad=[], radii_px=[], gradients=[], + intensity=None, frequency_hz=None, frequency_valid=False) + + +def wing_part(angle_rad: float, gradient: float) -> dict: + return dict(enabled=True, valid=True, mode="edge", angles_rad=[angle_rad], radii_px=[], + gradients=[gradient], intensity=None, frequency_hz=None, frequency_valid=False) + + +def kf1_packet(session: str, seq: int, t_s: float, left_rad: float, right_rad: float, fps: float, grad: float) -> dict: + return dict( + protocol="Kinefly", version=1, session=session, sequence=seq, + source=dict(kind="synthetic", id="kinefly_sim.py", clock="host_monotonic_after_capture", + fps=fps, timestamp_units="s"), + timestamp_s=t_s, host_monotonic_s=time.monotonic(), + parts=dict(head=disabled_part("area"), abdomen=disabled_part("area"), + left=wing_part(left_rad, grad), right=wing_part(right_rad, grad), + aux=disabled_part("intensity")), + ) + + +def main(argv: list[str] | None = None) -> int: + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("--host", default="127.0.0.1") + p.add_argument("--port", type=int, default=DEFAULT_PORT) + p.add_argument("--rate", type=float, default=100.0, help="frames per second (default: 100)") + p.add_argument("--count", type=int, default=0, help="emit N frames then exit (0 = forever)") + p.add_argument("--mean-deg", type=float, default=70.0, help="mean wing-stroke angle, both wings (default: 70)") + p.add_argument("--diff-deg", type=float, default=10.0, help="peak L−R difference (default: 10)") + p.add_argument("--diff-hz", type=float, default=0.1, help="frequency of the L−R sine (default: 0.1)") + p.add_argument("--noise-deg", type=float, default=0.5, help="per-frame Gaussian noise per wing (default: 0.5)") + p.add_argument("--seed", type=int, default=None) + args = p.parse_args(argv) + + rng = random.Random(args.seed) + session = str(uuid.UUID(int=rng.getrandbits(128))) if args.seed is not None else str(uuid.uuid4()) + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + dst = (args.host, args.port) + period = 1.0 / args.rate + t0 = time.perf_counter() + seq = 0 + print(f"[kinefly-sim] KF/1 → udp://{dst[0]}:{dst[1]} at {args.rate:g} Hz, session {session}", file=sys.stderr) + try: + while args.count == 0 or seq < args.count: + seq += 1 + t_s = (seq - 1) * period + half = 0.5 * args.diff_deg * math.sin(2 * math.pi * args.diff_hz * t_s) + left = args.mean_deg + half + rng.gauss(0, args.noise_deg) + right = args.mean_deg - half + rng.gauss(0, args.noise_deg) + pkt = kf1_packet(session, seq, t_s, math.radians(left), math.radians(right), args.rate, 0.8) + sock.sendto(json.dumps(pkt, allow_nan=False, separators=(",", ":")).encode("utf-8"), dst) + target = t0 + seq * period + delay = target - time.perf_counter() + if delay > 0: + time.sleep(delay) + except KeyboardInterrupt: + pass + print(f"[kinefly-sim] sent {seq} frames", file=sys.stderr) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/ros2-poc/nodes/kinefly_udp_adapter.py b/ros2-poc/nodes/kinefly_udp_adapter.py new file mode 100644 index 00000000..3a7702de --- /dev/null +++ b/ros2-poc/nodes/kinefly_udp_adapter.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python3 +"""kinefly_udp_adapter.py — Kinefly KF/1 UDP → ROS 2 topic, one std_msgs/String per frame. + +Michael's Kinefly fork (mbreiser/Kinefly-MacOS, `--udp HOST:PORT`) sends one UTF-8 JSON +datagram per processed frame: the KF/1 record documented in its docs/udp-protocol.md +(`protocol: "Kinefly"`, `version: 1`, `session`, `sequence`, `source`, `timestamp_s`, +`host_monotonic_s`, `parts.{head,abdomen,left,right,aux}`). Kinefly is untouched; this +node owns the receiving socket and republishes each datagram verbatim on `/kinefly/raw` +inside the same envelope the FicTrac adapter uses: + + {"src": "kinefly", "seq": , "rx_epoch_ms": …, "rx_mono_ns": …, + "raw": ""} + +Protocol discrimination happens HERE, before anything downstream decodes: a datagram +that is not JSON, or whose `protocol`/`version` are not `Kinefly`/1, is counted and +dropped (Kinefly's bridge plan, step 1: discriminate protocol before decoding, never pad +KF data into FicTrac fields). Nothing else is interpreted — the bridge node derives the +logged `["kf", …]` row and (later) the L−R → yaw integrator from the parsed record, so +the mapping lives in one place. + + pixi run kinefly-adapter -- --port 60001 + pixi run kinefly-sim -- --port 60001 --rate 100 # synthetic KF/1 producer +""" + +from __future__ import annotations + +import argparse +import json +import socket +import sys +import threading +import time + +import rclpy +from rclpy.executors import ExternalShutdownException +from rclpy.node import Node +from rclpy.qos import QoSDurabilityPolicy, QoSHistoryPolicy, QoSProfile, QoSReliabilityPolicy +from std_msgs.msg import String + +TOPIC = "/kinefly/raw" +DEFAULT_PORT = 60001 +MAX_DATAGRAM = 16384 # KF/1 encoder bound (kinefly/core/udp.py) +RAW_QOS = QoSProfile( + reliability=QoSReliabilityPolicy.RELIABLE, + history=QoSHistoryPolicy.KEEP_LAST, + depth=200, + durability=QoSDurabilityPolicy.VOLATILE, +) + + +def kf1_reject_reason(data: bytes) -> str | None: + """Why a datagram is NOT a KF/1 record (None = accept). Cheap and strict on the + identity fields only; full field validation is the bridge node's job.""" + if len(data) > MAX_DATAGRAM: + return "oversize" + try: + obj = json.loads(data.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError): + return "not JSON" + if not isinstance(obj, dict): + return "not an object" + if obj.get("protocol") != "Kinefly" or obj.get("version") != 1: + return f"protocol/version {obj.get('protocol')!r}/{obj.get('version')!r}" + if not isinstance(obj.get("sequence"), int) or not isinstance(obj.get("parts"), dict): + return "missing sequence/parts" + return None + + +def wrap_line(src: str, seq: int, raw: str, rx_epoch_ms: int, rx_mono_ns: int) -> str: + return json.dumps( + {"src": src, "seq": seq, "rx_epoch_ms": rx_epoch_ms, "rx_mono_ns": rx_mono_ns, "raw": raw}, + separators=(",", ":"), + ) + + +class KineflyUdpAdapter(Node): + def __init__(self, host: str, port: int, status_every_s: float) -> None: + super().__init__("kinefly_udp_adapter") + self.pub = self.create_publisher(String, TOPIC, RAW_QOS) + self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + self.sock.bind((host, port)) + self.sock.settimeout(0.5) + self.seq = 0 + self.published = 0 + self.rejected = 0 + self._reject_reasons: dict[str, int] = {} + self._stop = threading.Event() + self._thread = threading.Thread(target=self._recv_loop, name="udp-recv", daemon=True) + self._thread.start() + self.get_logger().info(f"UDP {host}:{port} (KF/1) → {TOPIC} (std_msgs/String JSON, reliable)") + if status_every_s > 0: + self._last = (0, time.monotonic()) + self.create_timer(status_every_s, self._status) + + def _recv_loop(self) -> None: + while not self._stop.is_set(): + try: + data, _ = self.sock.recvfrom(65535) + except socket.timeout: + continue + except OSError: + break + rx_epoch_ms, rx_mono_ns = int(time.time() * 1000), time.monotonic_ns() + why = kf1_reject_reason(data) + if why is not None: + self.rejected += 1 + self._reject_reasons[why] = self._reject_reasons.get(why, 0) + 1 + if self._reject_reasons[why] <= 3: + self.get_logger().warning(f"dropped non-KF/1 datagram ({why})") + continue + self.seq += 1 + msg = String() + msg.data = wrap_line("kinefly", self.seq, data.decode("utf-8"), rx_epoch_ms, rx_mono_ns) + self.pub.publish(msg) + self.published += 1 + + def _status(self) -> None: + n0, t0 = self._last + now = time.monotonic() + rate = (self.published - n0) / max(1e-9, now - t0) + self._last = (self.published, now) + self.get_logger().info(f"{self.published} KF/1 frames published ({rate:.1f}/s), {self.rejected} rejected") + + def destroy_node(self) -> bool: + self._stop.set() + try: + self.sock.close() + except OSError: + pass + return super().destroy_node() + + +def main(argv: list[str] | None = None) -> int: + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("--host", default="127.0.0.1", help="UDP bind host (default: 127.0.0.1)") + p.add_argument("--port", type=int, default=DEFAULT_PORT, help=f"UDP bind port — Kinefly's --udp destination (default: {DEFAULT_PORT})") + p.add_argument("--status-every", type=float, default=5.0, help="stderr rate line interval in s; 0 = off (default: 5)") + args, ros_args = p.parse_known_args(argv) + rclpy.init(args=ros_args) + node = KineflyUdpAdapter(args.host, args.port, args.status_every) + try: + rclpy.spin(node) + except (KeyboardInterrupt, ExternalShutdownException): + pass # Ctrl-C: rclpy ≥ Jazzy raises ExternalShutdownException from spin + finally: + node.destroy_node() + try: + rclpy.try_shutdown() + except Exception: # rclpy's own SIGINT handler may already have shut the context down (races in Jazzy) + pass + print(f"[kinefly-adapter] {node.published} published, {node.rejected} rejected", file=sys.stderr) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/ros2-poc/nodes/rig.py b/ros2-poc/nodes/rig.py new file mode 100644 index 00000000..073d8c46 --- /dev/null +++ b/ros2-poc/nodes/rig.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python3 +"""rig.py — the one command a rig runs: Zenoh router + adapters + bridge node, supervised. + + pixi run rig # router, fictrac adapter, bridge node + pixi run rig -- --kinefly --bias # + Kinefly adapter + BIAS node + pixi run rig -- --sim # + the FicTrac simulator (demo without a camera) + pixi run rig -- --bias --bias-sim # + a simulated BIAS program (no camera software) + +Order: the router first (nodes retry until it answers on 127.0.0.1:7447), then every +adapter/node. Each child's stderr is prefixed with its name. Ctrl-C stops everything in +reverse order; a child that dies on its own is reported (and the whole rig exits if it was +the bridge node — the Studio's WebSocket is gone, nothing else matters). Options after a +child's name are passed through, e.g. `--bridge-args "--frames 60"`. +""" + +from __future__ import annotations + +import argparse +import os +import shlex +import signal +import socket +import subprocess +import sys +import threading +import time +from pathlib import Path + +HERE = Path(__file__).resolve().parent +NODES = HERE +SIM = HERE.parents[1] / "fictrac-bridge" / "fictrac_sim.py" + + +def wait_port(host: str, port: int, timeout_s: float) -> bool: + end = time.monotonic() + timeout_s + while time.monotonic() < end: + try: + with socket.create_connection((host, port), timeout=0.5): + return True + except OSError: + time.sleep(0.2) + return False + + +class Child: + def __init__(self, name: str, argv: list[str]) -> None: + self.name = name + self.argv = argv + self.proc: subprocess.Popen | None = None + + def start(self) -> None: + # Own process group per child, so a stop signal reaches wrappers AND what they + # spawn (`ros2 run … rmw_zenohd` does not forward SIGINT to the router binary). + self.proc = subprocess.Popen( + self.argv, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + bufsize=1, + env=os.environ.copy(), + start_new_session=(os.name != "nt"), + ) + threading.Thread(target=self._pump, name=f"pump-{self.name}", daemon=True).start() + + def _signal(self, sig: int) -> None: + assert self.proc + if os.name != "nt": + try: + os.killpg(self.proc.pid, sig) + return + except (ProcessLookupError, PermissionError): + pass + self.proc.send_signal(sig) + + def _pump(self) -> None: + assert self.proc and self.proc.stdout + for line in self.proc.stdout: + sys.stderr.write(f"[{self.name:8}] {line}") + sys.stderr.flush() + + def alive(self) -> bool: + return self.proc is not None and self.proc.poll() is None + + def stop(self, grace_s: float = 3.0) -> None: + if not self.alive(): + return + assert self.proc + try: + self._signal(signal.SIGINT) + self.proc.wait(grace_s) + except subprocess.TimeoutExpired: + self._signal(signal.SIGTERM) + try: + self.proc.wait(2.0) + except subprocess.TimeoutExpired: + self._signal(signal.SIGKILL) + except (ProcessLookupError, OSError): + pass + + +def main(argv: list[str] | None = None) -> int: + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("--kinefly", action="store_true", help="also run the Kinefly KF/1 adapter") + p.add_argument("--bias", action="store_true", help="also run the BIAS camera node") + p.add_argument("--bias-sim", action="store_true", help="also run bias_sim.py (a fake BIAS program)") + p.add_argument("--sim", action="store_true", help="also run the FicTrac simulator (random walk, 50 Hz)") + p.add_argument("--no-router", action="store_true", help="a Zenoh router is already running on this host") + p.add_argument("--bridge-args", default="", help="extra args for bridge_node.py") + p.add_argument("--fictrac-args", default="", help="extra args for fictrac_udp_adapter.py") + p.add_argument("--kinefly-args", default="", help="extra args for kinefly_udp_adapter.py") + p.add_argument("--bias-args", default="", help="extra args for bias_node.py") + p.add_argument("--sim-args", default="--proto udp --rate 50", help="args for fictrac_sim.py") + args = p.parse_args(argv) + + py = sys.executable + children: list[Child] = [] + if not args.no_router: + children.append(Child("router", ["ros2", "run", "rmw_zenoh_cpp", "rmw_zenohd"])) + nodes: list[Child] = [ + Child("fictrac", [py, str(NODES / "fictrac_udp_adapter.py"), *shlex.split(args.fictrac_args)]), + ] + if args.kinefly: + nodes.append(Child("kinefly", [py, str(NODES / "kinefly_udp_adapter.py"), *shlex.split(args.kinefly_args)])) + if args.bias_sim: + nodes.append(Child("bias-sim", [py, str(NODES / "bias_sim.py")])) + if args.bias: + nodes.append(Child("bias", [py, str(NODES / "bias_node.py"), *shlex.split(args.bias_args)])) + bridge = Child("bridge", [py, str(NODES / "bridge_node.py"), *shlex.split(args.bridge_args)]) + nodes.append(bridge) + if args.sim: + nodes.append(Child("sim", [py, str(SIM), *shlex.split(args.sim_args)])) + + stop = threading.Event() + for sig in (signal.SIGINT, signal.SIGTERM): + signal.signal(sig, lambda *_: stop.set()) + + print(f"[rig] RMW_IMPLEMENTATION={os.environ.get('RMW_IMPLEMENTATION')} router config {os.environ.get('ZENOH_ROUTER_CONFIG_URI')}", file=sys.stderr) + rc = 0 + try: + for c in children: + c.start() + if children: + if wait_port("127.0.0.1", 7447, 15.0): + print("[rig] zenoh router listening on 127.0.0.1:7447", file=sys.stderr) + else: + print("[rig] router did not come up on 127.0.0.1:7447 within 15 s", file=sys.stderr) + rc = 1 + return rc + for c in nodes: + c.start() + children.append(c) + time.sleep(0.3) + print(f"[rig] up: {', '.join(c.name for c in children)} — Studio → ws://localhost:8765 (Ctrl-C to stop)", file=sys.stderr) + while not stop.is_set(): + time.sleep(0.5) + for c in children: + if not c.alive(): + code = c.proc.returncode if c.proc else None + print(f"[rig] {c.name} exited (code {code})", file=sys.stderr) + children.remove(c) + if c is bridge: + print("[rig] the bridge node is gone — stopping the rig", file=sys.stderr) + rc = 1 + stop.set() + break + finally: + for c in reversed(children): + c.stop() + print("[rig] stopped", file=sys.stderr) + return rc + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/ros2-poc/pixi.lock b/ros2-poc/pixi.lock new file mode 100644 index 00000000..d58e202f --- /dev/null +++ b/ros2-poc/pixi.lock @@ -0,0 +1,20673 @@ +version: 7 +platforms: +- name: linux-64 + virtual-packages: + - __unix=0=0 + - __linux=4.18 + - __glibc=2.28 + - __archspec=0=x86_64 +- name: osx-arm64 + virtual-packages: + - __unix=0=0 + - __osx=13.0 + - __archspec=0=m1 +- name: win-64 + virtual-packages: + - __win=10.0 + - __archspec=0=x86_64 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + - url: https://conda.anaconda.org/robostack-jazzy/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/at-spi2-atk-2.38.0-h0630a04_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/at-spi2-core-2.40.3-h0630a04_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bullet-3.25-h26dfbe5_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bullet-cpp-3.25-hcbe3ca9_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_10.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.8-hebe6cf0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.6-h3c89d7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.1.1-py312h703531f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.4.4-hff7ac6b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/console_bridge-1.0.2-h924138e_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/cppcheck-2.22.0-py312h3cdd867_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-50.0.2-py311hc91d8b8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyclonedds-0.10.5-h9a70dda_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-he8c428d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-5.0.1-h19c2612_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-abi-5.0.1.80-hf414acd_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-abi-devel-5.0.1.100-h2fbfb1f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/epoxy-1.5.10-hb03c661_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-h76c4fd7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.3-h4db4eae_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/foonathan-memory-0.7.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.17-h7cc23a3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.8-h68053f1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.90.0-h3d503d9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmock-1.18.0-h48ecd08_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphviz-14.1.2-h8b86629_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gtest-1.18.0-h171cf75_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gtk3-3.24.52-ha5ea40c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.6.0-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/hicolor-icon-theme-0.17-ha770c72_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-h7cc23a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbc21106_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_103.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.2.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libacl-2.4.0-h1b0031e_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libattr-2.6.0-h11a17bc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-11_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-11_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.23.0-ha042cf0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-hd45a770_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.129-h7cc23a3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20260512-pl5321h373387f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.5-hd2095e1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h81df57d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h5e6c136_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-16.2.0-h69a702a_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h5fbf134_12.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-16.2.0-h69a702a_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-16.2.0-h6b99dfc_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.90.0-h569388d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-14.6.0-h23af247_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-devel-14.6.0-h23af247_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiceoryx-binding-c-2.95.8-h1059693_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiceoryx-hoofs-2.95.8-hfe315d3_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiceoryx-platform-2.95.8-hf91fcae_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiceoryx-posh-2.95.8-hb5873e6_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h0cb94f2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-11_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h74cf4be_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.34-pthreads_hf13c14d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.59-h922cc85_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpsl-0.23.1-hd9e3e90_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpython-3.12.15-ha57cdbe_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.4-ha427ee3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-hebe6cf0_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.54.0-h13e7031_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-h6154650_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-16.2.0-hdf11a46_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.2-hcc2c06a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liburcu-0.14.0-hac33072_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.4-hcfc3c73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.52.1-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-hb83e432_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.38-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.2-h51789e4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.4-hf3af7cc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.4-h7df9aa5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.45-h8e12856_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzenohc-1.9.0-hf675912_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lttng-ust-2.13.9-hf5eda4c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-6.1.3-py312h663fcd5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.5-py312hc6a72db_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-hee9eb32_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.4-py312he827f4e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.5-h781a0a9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orocos-kdl-1.5.4-h761dd02_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.58.2-h7bb47b9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre-8.45-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-h8b3dc9c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pkg-config-0.29.2-h1114479_1013.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h1b36aeb_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h7cc23a3_1004.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pybullet-3.25-py312hf49885f_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.15-h5f976f7_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-orocos-kdl-1.5.4-py312ha6a3dbb_0.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/pyzmq-27.2.0-py312h8a5ba0d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-hd6e31c0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb03c661_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.17.0-hb6aa676_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.54.0-h9ffa6c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tinyxml2-11.0.0-hee9eb32_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h1df4ec4_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uncrustify-0.83.0-h54a6638_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/urdfdom-6.0.1-hf2e7533_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/urdfdom_headers-3.0.1-h4dbf13b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.26.0-hc1c935e_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-17.2-py312h89dfda2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.48-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-h0d788c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-h7cc23a3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-h7cc23a3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-h7cc23a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-h7cc23a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-h7cc23a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxinerama-1.1.6-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-h7cc23a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-h7cc23a3_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hebe6cf0_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-hebe6cf0_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zenoh-rust-abi-1.9.0.1.93.1-hbe27b5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h901266b_12.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/adwaita-icon-theme-51.0-unix_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.7.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/catkin_pkg-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.15-py312hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.23-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/empy-4.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-7.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-builtins-3.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-comprehensions-3.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-docstrings-1.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-import-order-0.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-quotes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lark-parser-0.12.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.1.0-pyh293190f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.1.0-pyh648e204_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.15.0-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.11-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydocstyle-6.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyflakes-4.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.21.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.3-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.15-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-9_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rosdistro-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rospkg-1.6.3-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-84.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.5.0-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.1-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros-jazzy-demo-nodes-py-0.33.11-hb0f4dca_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros-jazzy-rmw-zenoh-cpp-0.2.11-hb0f4dca_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros-jazzy-ros-base-0.11.0-hb0f4dca_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-action-msgs-2.0.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-actionlib-msgs-5.3.8-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-auto-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-copyright-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-core-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-cppcheck-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-cpplint-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-export-definitions-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-export-dependencies-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-export-include-directories-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-export-interfaces-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-export-libraries-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-export-link-flags-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-export-targets-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-flake8-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-gen-version-h-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-gmock-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-gtest-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-include-directories-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-libraries-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-lint-cmake-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-pep257-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-pytest-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-python-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-ros-0.12.2-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-target-dependencies-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-test-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-uncrustify-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-version-2.5.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-xmllint-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-copyright-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cppcheck-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cpplint-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-flake8-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-index-cpp-1.8.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-index-python-1.8.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-lint-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-lint-auto-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-lint-cmake-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-lint-common-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-package-0.16.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-pep257-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-uncrustify-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-xmllint-0.17.5-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-builtin-interfaces-2.0.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-class-loader-2.7.1-np2py312hd81cb55_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-common-interfaces-5.3.8-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-composition-interfaces-2.0.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-console-bridge-vendor-1.7.2-np2py312hd81cb55_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-cyclonedds-0.10.5-py312h79554f9_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-demo-nodes-py-0.33.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-diagnostic-msgs-5.3.8-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-distro-mutex-0.19.0-jazzy_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-domain-coordinator-0.12.2-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-eigen3-cmake-module-0.3.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-example-interfaces-0.12.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-fastcdr-2.2.8-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-fastrtps-2.14.7-np2py312h4c2334c_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-fastrtps-cmake-module-3.6.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-foonathan-memory-vendor-1.3.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-geometry-msgs-5.3.8-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-geometry2-0.36.23-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-gmock-vendor-1.14.9000-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-gtest-vendor-1.14.9000-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-iceoryx-binding-c-2.95.8-py312h24bf083_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-iceoryx-hoofs-2.95.8-py312h24bf083_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-iceoryx-posh-2.95.8-py312h24bf083_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-kdl-parser-2.11.0-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-keyboard-handler-0.3.2-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-3.4.12-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-ros-0.26.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-testing-3.4.12-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-testing-ament-cmake-3.4.12-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-testing-ros-0.26.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-xml-3.4.12-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-yaml-3.4.12-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-liblz4-vendor-0.26.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-libstatistics-collector-1.7.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-libyaml-vendor-1.6.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-lifecycle-msgs-2.0.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-mcap-vendor-0.26.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-message-filters-4.11.17-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-nav-msgs-5.3.8-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-orocos-kdl-vendor-0.5.2-np2py312hd65a65c_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-osrf-pycommon-2.1.7-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-pluginlib-5.4.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-pybind11-vendor-3.1.3-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-python-cmake-module-0.11.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-python-orocos-kdl-vendor-0.5.2-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcl-9.2.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcl-action-9.2.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcl-interfaces-2.0.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcl-lifecycle-9.2.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcl-logging-interface-3.1.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcl-logging-spdlog-3.1.1-np2py312hbe83831_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcl-yaml-param-parser-9.2.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rclcpp-28.1.22-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rclcpp-action-28.1.22-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rclcpp-components-28.1.22-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rclcpp-lifecycle-28.1.22-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rclpy-7.1.12-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcpputils-2.11.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcutils-6.7.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-7.3.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-connextdds-0.22.3-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-connextdds-common-0.22.3-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-cyclonedds-cpp-2.2.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-dds-common-3.1.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-fastrtps-cpp-8.4.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-fastrtps-dynamic-cpp-8.4.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-fastrtps-shared-cpp-8.4.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-implementation-2.15.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-implementation-cmake-7.3.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-zenoh-cpp-0.2.11-np2py312h815c85b_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-robot-state-publisher-3.3.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros-base-0.11.0-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros-core-0.11.0-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros-environment-4.2.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros-workspace-1.0.3-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2action-0.32.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2bag-0.26.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2cli-0.32.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2cli-common-extensions-0.3.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2component-0.32.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2doctor-0.32.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2interface-0.32.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2launch-0.26.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2lifecycle-0.32.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2multicast-0.32.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2node-0.32.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2param-0.32.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2pkg-0.32.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2plugin-5.4.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2run-0.32.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2service-0.32.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2topic-0.32.13-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-0.26.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-compression-0.26.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-compression-zstd-0.26.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-cpp-0.26.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-interfaces-0.26.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-py-0.26.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-storage-0.26.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-storage-default-plugins-0.26.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-storage-mcap-0.26.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-storage-sqlite3-0.26.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-transport-0.26.11-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosgraph-msgs-2.0.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-adapter-4.6.9-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-cli-4.6.9-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-cmake-4.6.9-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-core-generators-0.2.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-core-runtime-0.2.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-default-generators-1.6.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-default-runtime-1.6.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-dynamic-typesupport-0.1.2-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-dynamic-typesupport-fastrtps-0.1.0-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-generator-c-4.6.9-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-generator-cpp-4.6.9-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-generator-py-0.22.2-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-generator-rs-0.5.0-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-generator-type-description-4.6.9-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-parser-4.6.9-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-pycommon-4.6.9-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-runtime-c-4.6.9-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-runtime-cpp-4.6.9-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-runtime-py-0.13.2-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-c-3.2.3-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-cpp-3.2.3-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-fastrtps-c-3.6.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-fastrtps-cpp-3.6.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-interface-4.6.9-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-introspection-c-4.6.9-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-introspection-cpp-4.6.9-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rpyutils-0.4.2-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rti-connext-dds-cmake-module-0.22.3-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-sensor-msgs-5.3.8-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-sensor-msgs-py-5.3.8-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-service-msgs-2.0.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-shape-msgs-5.3.8-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-spdlog-vendor-1.6.2-np2py312hbe83831_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-sqlite3-vendor-0.26.11-np2py312hc33be11_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-sros2-0.13.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-sros2-cmake-0.13.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-statistics-msgs-2.0.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-std-msgs-5.3.8-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-std-srvs-5.3.8-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-stereo-msgs-5.3.8-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-0.36.23-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-bullet-0.36.23-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-eigen-0.36.23-np2py312hd65a65c_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-eigen-kdl-0.36.23-np2py312hd65a65c_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-geometry-msgs-0.36.23-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-kdl-0.36.23-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-msgs-0.36.23-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-py-0.36.23-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-ros-0.36.23-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-ros-py-0.36.23-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-sensor-msgs-0.36.23-np2py312hd65a65c_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-tools-0.36.23-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tinyxml2-vendor-0.9.2-np2py312hd4672ec_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tracetools-8.2.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-trajectory-msgs-5.3.8-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-type-description-interfaces-2.0.4-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-uncrustify-vendor-3.0.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-unique-identifier-msgs-2.5.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-urdf-2.10.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-urdf-parser-plugin-2.10.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-urdfdom-6.0-py312h2261104_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-urdfdom-headers-3.0-py312h24bf083_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-visualization-msgs-5.3.8-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-yaml-cpp-vendor-9.0.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-zenoh-cpp-vendor-0.2.11-np2py312h815c85b_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-zstd-vendor-0.26.11-np2py312h6a0d68b_25.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/adwaita-icon-theme-51.0-unix_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.7.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/catkin_pkg-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.15-py312hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.23-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/empy-4.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-7.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-builtins-3.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-comprehensions-3.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-docstrings-1.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-import-order-0.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-quotes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lark-parser-0.12.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.1.0-pyh293190f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.1.0-pyh648e204_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.15.0-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.11-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydocstyle-6.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyflakes-4.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.21.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.3-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.15-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-9_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rosdistro-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rospkg-1.6.3-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-84.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.5.0-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.1-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-8_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/atk-1.0-2.38.0-hd03087b_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bullet-3.25-h652a6e0_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bullet-cpp-3.25-py312h5978115_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h4e30115_10.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.8-h74c22ad_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.18.6-h580cee5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.1.1-py312hc892d8b_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.4.4-hf91ab31_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/console_bridge-1.0.2-h3e96240_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cppcheck-2.22.0-py312h3286cfa_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cryptography-50.0.2-py311hc28ac56_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-5.0.1-hdb59ae0_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-abi-5.0.1.100-h485a483_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-abi-devel-5.0.1.100-h4206fe6_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/epoxy-1.5.10-hc919400_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h99e4e11_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fontconfig-2.18.3-h81aa574_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/foonathan-memory-0.7.4-h784d473_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.3-hce30654_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fribidi-1.0.17-hb001647_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdk-pixbuf-2.44.8-h5867e2c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.90.0-h06d1d6c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmock-1.18.0-hab71263_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.15-h784d473_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphviz-14.1.2-hec8c438_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gtest-1.18.0-h3feff0a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gtk3-3.24.52-hc0f3e19_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gts-0.7.6-he42f4ea_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-14.6.0-hce30654_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/hicolor-icon-theme-0.17-hce30654_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-py310h579977c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h34f8a20_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.2.0-h1eee2c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-11_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-11_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.22.0-h6651222_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-23.1.3-h55c6f16_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-he7e0567_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20260512-pl5321h26f1114_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h1a92334_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.5-h6111c0a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.7.0-h47dc5ef_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-h2ed5691_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-16.2.0-h3cf6597_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgd-2.3.3-h05bcc79_12.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-16.2.0-h07b0088_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-16.2.0-hdb7a957_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.90.0-hccd281b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libharfbuzz-14.6.0-hcda0f7c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libharfbuzz-devel-14.6.0-hcda0f7c_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-he4c29f2_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-hae62183_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.2.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-11_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h435687b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.34-openmp_h5e6e99c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.59-hf5e6511_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpsl-0.23.1-hdb0c161_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpython-3.12.15-h0677fcb_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librsvg-2.62.4-hc8ac265_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h74c22ad_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.54.0-hca69786_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-hbf2880b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.2-hf67920b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.52.1-h1a92334_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h202fb40_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hbffa61f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.4-heb56d2d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.4-h550178d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxslt-1.1.45-haaf9281_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzenohc-1.9.0-h389a063_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-23.1.3-hdb3d66b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-6.1.3-py312haba262f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.4.5-py312hc8604c9_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-hdca3b7d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-he64c551_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.5.4-py312hff34920_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.5-h55eecbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orocos-kdl-1.5.4-hba3f793_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pango-1.58.2-hf9b25ef_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre-8.45-hbdafb3b_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-he63d830_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.46.4-h784d473_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pkg-config-0.29.2-he0b766d_1013.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py312hbd136b4_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hb001647_1004.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pybullet-3.25-py312h3a599b7_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.15-hd05a0c4_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-orocos-kdl-1.5.4-py312h1535055_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py312h04c11ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.2.0-py312hdfb5542_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h8b90a29_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rhash-1.4.6-h84a0fba_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-h760df91_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.54.0-ha9f7ffe_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tinyxml2-11.0.0-hdca3b7d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-hbeba79b_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uncrustify-0.83.0-h784d473_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/urdfdom-6.0.1-hb460c4f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/urdfdom_headers-3.0.1-hfbe1efa_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-17.2-py312h9b6eb38_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libx11-1.8.13-hf948f5a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hb001647_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hb001647_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxext-1.3.7-hb001647_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h74c22ad_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-cpp-0.8.0-h784d473_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zenoh-rust-abi-1.9.0.1.93.1-h3c1fe20_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h6eb0046_12.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hf451053_7.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-ament-index-cpp-1.8.4-h60d57d3_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-demo-nodes-py-0.33.11-h60d57d3_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-fastcdr-2.2.7-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rcpputils-2.11.4-h60d57d3_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rcutils-6.7.6-h60d57d3_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rmw-7.3.3-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rmw-zenoh-cpp-0.2.10-np2py312h84ff3ff_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-ros-base-0.11.0-h60d57d3_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-ros-workspace-1.0.3-h60d57d3_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rosidl-dynamic-typesupport-0.1.2-h60d57d3_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rosidl-runtime-c-4.6.9-h60d57d3_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rosidl-typesupport-fastrtps-c-3.6.4-h60d57d3_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rosidl-typesupport-fastrtps-cpp-3.6.4-h60d57d3_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-tracetools-8.2.6-h60d57d3_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-zenoh-cpp-vendor-0.2.10-np2py312h84ff3ff_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-action-msgs-2.0.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-actionlib-msgs-5.3.8-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-auto-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-copyright-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-core-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-cppcheck-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-cpplint-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-export-definitions-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-export-dependencies-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-export-include-directories-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-export-interfaces-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-export-libraries-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-export-link-flags-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-export-targets-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-flake8-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-gen-version-h-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-gmock-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-gtest-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-include-directories-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-libraries-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-lint-cmake-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-pep257-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-pytest-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-python-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-ros-0.12.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-target-dependencies-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-test-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-uncrustify-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-version-2.5.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-xmllint-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-copyright-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cppcheck-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cpplint-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-flake8-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-index-cpp-1.8.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-index-python-1.8.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-lint-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-lint-auto-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-lint-cmake-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-lint-common-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-package-0.16.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-pep257-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-uncrustify-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-xmllint-0.17.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-builtin-interfaces-2.0.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-class-loader-2.7.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-common-interfaces-5.3.8-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-composition-interfaces-2.0.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-console-bridge-vendor-1.7.2-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-cyclonedds-0.10.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-demo-nodes-py-0.33.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-diagnostic-msgs-5.3.8-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-distro-mutex-0.16.0-jazzy_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-domain-coordinator-0.12.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-eigen3-cmake-module-0.3.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-example-interfaces-0.12.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-fastcdr-2.2.7-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-fastrtps-2.14.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-fastrtps-cmake-module-3.6.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-foonathan-memory-vendor-1.3.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-geometry-msgs-5.3.8-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-geometry2-0.36.22-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-gmock-vendor-1.14.9000-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-gtest-vendor-1.14.9000-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-iceoryx-binding-c-2.0.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-iceoryx-hoofs-2.0.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-iceoryx-posh-2.0.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-kdl-parser-2.11.0-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-keyboard-handler-0.3.2-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-3.4.11-np2py312haf4906a_22.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-ros-0.26.12-np2py312haf4906a_22.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-testing-3.4.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-testing-ament-cmake-3.4.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-testing-ros-0.26.12-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-xml-3.4.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-yaml-3.4.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-liblz4-vendor-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-libstatistics-collector-1.7.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-libyaml-vendor-1.6.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-lifecycle-msgs-2.0.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-mcap-vendor-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-message-filters-4.11.17-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-nav-msgs-5.3.8-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-orocos-kdl-vendor-0.5.2-np2py312hd6e7b62_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-osrf-pycommon-2.1.7-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-pluginlib-5.4.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-pybind11-vendor-3.1.3-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-python-cmake-module-0.11.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-python-orocos-kdl-vendor-0.5.2-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcl-9.2.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcl-action-9.2.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcl-interfaces-2.0.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcl-lifecycle-9.2.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcl-logging-interface-3.1.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcl-logging-spdlog-3.1.1-np2py312h88edd79_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcl-yaml-param-parser-9.2.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rclcpp-28.1.21-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rclcpp-action-28.1.21-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rclcpp-components-28.1.21-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rclcpp-lifecycle-28.1.21-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rclpy-7.1.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcpputils-2.11.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcutils-6.7.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-7.3.3-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-connextdds-0.22.3-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-connextdds-common-0.22.3-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-cyclonedds-cpp-2.2.3-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-dds-common-3.1.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-fastrtps-cpp-8.4.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-fastrtps-dynamic-cpp-8.4.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-fastrtps-shared-cpp-8.4.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-implementation-2.15.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-implementation-cmake-7.3.3-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-robot-state-publisher-3.3.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros-base-0.11.0-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros-core-0.11.0-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros-environment-4.2.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros-workspace-1.0.3-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2action-0.32.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2bag-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2cli-0.32.11-np2py312haf4906a_22.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2cli-common-extensions-0.3.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2component-0.32.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2doctor-0.32.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2interface-0.32.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2launch-0.26.12-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2lifecycle-0.32.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2multicast-0.32.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2node-0.32.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2param-0.32.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2pkg-0.32.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2plugin-5.4.5-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2run-0.32.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2service-0.32.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2topic-0.32.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-compression-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-compression-zstd-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-cpp-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-interfaces-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-py-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-storage-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-storage-default-plugins-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-storage-mcap-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-storage-sqlite3-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-transport-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosgraph-msgs-2.0.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-adapter-4.6.9-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-cli-4.6.9-np2py312haf4906a_22.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-cmake-4.6.9-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-core-generators-0.2.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-core-runtime-0.2.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-default-generators-1.6.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-default-runtime-1.6.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-dynamic-typesupport-0.1.2-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-dynamic-typesupport-fastrtps-0.1.0-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-generator-c-4.6.9-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-generator-cpp-4.6.9-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-generator-py-0.22.2-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-generator-rs-0.5.0-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-generator-type-description-4.6.9-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-parser-4.6.9-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-pycommon-4.6.9-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-runtime-c-4.6.9-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-runtime-cpp-4.6.9-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-runtime-py-0.13.2-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-c-3.2.3-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-cpp-3.2.3-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-fastrtps-c-3.6.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-fastrtps-cpp-3.6.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-interface-4.6.9-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-introspection-c-4.6.9-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-introspection-cpp-4.6.9-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rpyutils-0.4.2-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rti-connext-dds-cmake-module-0.22.3-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-sensor-msgs-5.3.8-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-sensor-msgs-py-5.3.8-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-service-msgs-2.0.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-shape-msgs-5.3.8-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-spdlog-vendor-1.6.2-np2py312h88edd79_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-sqlite3-vendor-0.26.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-sros2-0.13.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-sros2-cmake-0.13.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-statistics-msgs-2.0.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-std-msgs-5.3.8-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-std-srvs-5.3.8-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-stereo-msgs-5.3.8-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-0.36.22-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-bullet-0.36.22-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-eigen-0.36.22-np2py312hd6e7b62_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-eigen-kdl-0.36.22-np2py312hd6e7b62_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-geometry-msgs-0.36.22-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-kdl-0.36.22-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-msgs-0.36.22-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-py-0.36.22-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-ros-0.36.22-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-ros-py-0.36.22-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-sensor-msgs-0.36.22-np2py312hd6e7b62_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-tools-0.36.22-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tinyxml2-vendor-0.9.2-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tracetools-8.2.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-trajectory-msgs-5.3.8-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-type-description-interfaces-2.0.4-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-uncrustify-vendor-3.0.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-unique-identifier-msgs-2.5.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-urdf-2.10.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-urdf-parser-plugin-2.10.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-urdfdom-6.0-py312h3dea895_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-urdfdom-headers-3.0-py312h3dea895_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-visualization-msgs-5.3.8-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-yaml-cpp-vendor-9.0.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-zstd-vendor-0.26.11-np2py312haf4906a_21.conda + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.7.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/catkin_pkg-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.15-py312hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.23-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/empy-4.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-7.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-builtins-3.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-comprehensions-3.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-docstrings-1.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-import-order-0.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/flake8-quotes-3.4.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lark-parser-0.12.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.1.0-pyh293190f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.1.0-pyhc8003f9_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.15.0-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.11-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydocstyle-6.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyflakes-4.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.21.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.3-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.15-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-9_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rosdistro-1.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rospkg-1.6.3-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-84.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.5.0-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.1-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bullet-3.25-h6d21bc8_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bullet-cpp-3.25-hc128f0a_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.6-h477c42c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.1.1-py312he06e257_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.4.4-hde52c71_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/console_bridge-1.0.2-h5362a0b_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/cppcheck-2.22.0-py312h9df87ca_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cryptography-50.0.2-py311h67a9792_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cyclonedds-0.10.5-h2a109cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-5.0.1-h5112557_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-abi-5.0.1.100-hc11354d_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/eigen-abi-devel-5.0.1.100-hae67d6e_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fmt-12.1.0-h1ced75a_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.3-hd47e2ca_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/foonathan-memory-0.7.4-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.17-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/getopt-win32-0.1-h6a83c73_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gmock-1.18.0-h4f519af_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.15-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/graphviz-14.1.2-h4c50273_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gtest-1.18.0-h477610d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gts-0.7.6-h6b5321d_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h5112557_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.2.0-hd936e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-11_h8455456_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-11_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.23.0-hdb0ef4a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h1a1d4e4_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.5-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.7.0-h3d046cb_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-16.2.0-h110b43a_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgd-2.3.3-h4974f7c_12.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.90.1-ha564072_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-16.2.0-h8ee18e1_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libharfbuzz-14.6.0-h03b5201_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.15.0-default_hae90fe0_1001.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiceoryx-binding-c-2.95.8-h480d27c_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiceoryx-hoofs-2.95.8-h10852e2_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiceoryx-platform-2.95.8-h477610d_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiceoryx-posh-2.95.8-he66a732_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-11_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.59-hdc8cecf_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpsl-0.23.1-h9b16d47_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpython-3.12.15-hfb4101e_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.22-h6a83c73_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.54.0-hf5d6505_101.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h734d217_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.2-h8f73337_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libuv-1.52.1-h6a83c73_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h874e120_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.4-h3cfd58e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.4-he095d88_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.45-ha5384fd_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzenohc-1.9.0-hcc20cc8_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-23.1.3-h49e36cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lxml-6.1.3-py312h1476a5e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lz4-4.4.5-py312hc3c93f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lz4-c-1.10.0-h6a83c73_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.1.0-hac47afa_235.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.4-py312ha3f287d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.5-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/orocos-kdl-1.5.4-h85e3ab8_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.58.2-h13911b6_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pcre-8.45-h0e60522_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-h8466c1e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pkg-config-0.29.2-hffdb5b9_1013.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py312he5662c2_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hfa92662_1004.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pybullet-3.25-py312h3d6c809_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.15-hb12b558_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-orocos-kdl-1.5.4-py312hbb81ca0_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py312h05f76fc_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.2.0-py312h343a6d4_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/spdlog-1.17.0-hd227c35_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.54.0-hdb435a2_101.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.1.0-h272cf33_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tinyxml2-11.0.0-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/uncrustify-0.83.0-h5112557_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/urdfdom-6.0.1-h37f4996_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/urdfdom_headers-3.0.1-h477610d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-ha367084_41.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36247-habf1de7_41.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36247-habf1de7_41.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.51.36247-h633cb9f_41.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/websockets-17.2-py312h5247d40_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libice-1.1.2-hd74fcf3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libsm-1.2.6-hd74fcf3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libx11-1.8.13-hfa52320_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hfa92662_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hfa92662_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxext-1.3.7-hfa92662_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxpm-3.5.19-hba3369d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxt-1.3.1-hfa92662_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-cpp-0.8.0-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zenoh-rust-abi-1.9.0.1.93.1-heb1d585_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h3a581c9_12.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros-jazzy-demo-nodes-py-0.33.11-h9490d1a_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros-jazzy-rmw-zenoh-cpp-0.2.11-h9490d1a_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros-jazzy-ros-base-0.11.0-h9490d1a_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-action-msgs-2.0.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-actionlib-msgs-5.3.8-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-auto-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-copyright-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-core-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-cppcheck-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-cpplint-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-export-definitions-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-export-dependencies-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-export-include-directories-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-export-interfaces-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-export-libraries-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-export-link-flags-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-export-targets-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-flake8-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-gen-version-h-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-gmock-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-gtest-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-include-directories-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-libraries-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-lint-cmake-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-pep257-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-pytest-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-python-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-ros-0.12.2-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-target-dependencies-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-test-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-uncrustify-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-version-2.5.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-xmllint-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-copyright-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cppcheck-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cpplint-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-flake8-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-index-cpp-1.8.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-index-python-1.8.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-lint-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-lint-auto-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-lint-cmake-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-lint-common-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-package-0.16.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-pep257-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-uncrustify-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-xmllint-0.17.5-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-builtin-interfaces-2.0.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-class-loader-2.7.1-np2py312he78ef48_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-common-interfaces-5.3.8-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-composition-interfaces-2.0.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-console-bridge-vendor-1.7.2-np2py312he78ef48_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-cyclonedds-0.10.5-py312h420ed83_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-demo-nodes-py-0.33.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-diagnostic-msgs-5.3.8-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-distro-mutex-0.19.0-jazzy_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-domain-coordinator-0.12.2-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-eigen3-cmake-module-0.3.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-example-interfaces-0.12.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-fastcdr-2.2.8-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-fastrtps-2.14.7-np2py312h679732a_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-fastrtps-cmake-module-3.6.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-foonathan-memory-vendor-1.3.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-geometry-msgs-5.3.8-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-geometry2-0.36.23-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-gmock-vendor-1.14.9000-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-gtest-vendor-1.14.9000-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-iceoryx-binding-c-2.95.8-py312h7accfcc_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-iceoryx-hoofs-2.95.8-py312h7accfcc_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-iceoryx-posh-2.95.8-py312h7accfcc_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-kdl-parser-2.11.0-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-keyboard-handler-0.3.2-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-3.4.12-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-ros-0.26.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-testing-3.4.12-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-testing-ament-cmake-3.4.12-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-testing-ros-0.26.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-xml-3.4.12-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-yaml-3.4.12-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-liblz4-vendor-0.26.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-libstatistics-collector-1.7.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-libyaml-vendor-1.6.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-lifecycle-msgs-2.0.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-mcap-vendor-0.26.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-message-filters-4.11.17-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-nav-msgs-5.3.8-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-orocos-kdl-vendor-0.5.2-np2py312hd11d946_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-osrf-pycommon-2.1.7-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-pluginlib-5.4.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-pybind11-vendor-3.1.3-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-python-cmake-module-0.11.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-python-orocos-kdl-vendor-0.5.2-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcl-9.2.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcl-action-9.2.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcl-interfaces-2.0.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcl-lifecycle-9.2.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcl-logging-interface-3.1.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcl-logging-spdlog-3.1.1-np2py312hcd4b164_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcl-yaml-param-parser-9.2.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rclcpp-28.1.22-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rclcpp-action-28.1.22-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rclcpp-components-28.1.22-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rclcpp-lifecycle-28.1.22-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rclpy-7.1.12-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcpputils-2.11.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcutils-6.7.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-7.3.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-connextdds-0.22.3-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-connextdds-common-0.22.3-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-cyclonedds-cpp-2.2.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-dds-common-3.1.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-fastrtps-cpp-8.4.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-fastrtps-dynamic-cpp-8.4.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-fastrtps-shared-cpp-8.4.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-implementation-2.15.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-implementation-cmake-7.3.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-zenoh-cpp-0.2.11-np2py312hbb4efd0_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-robot-state-publisher-3.3.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros-base-0.11.0-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros-core-0.11.0-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros-environment-4.2.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros-workspace-1.0.3-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2action-0.32.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2bag-0.26.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2cli-0.32.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2cli-common-extensions-0.3.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2component-0.32.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2doctor-0.32.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2interface-0.32.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2launch-0.26.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2lifecycle-0.32.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2multicast-0.32.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2node-0.32.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2param-0.32.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2pkg-0.32.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2plugin-5.4.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2run-0.32.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2service-0.32.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2topic-0.32.13-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-0.26.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-compression-0.26.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-compression-zstd-0.26.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-cpp-0.26.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-interfaces-0.26.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-py-0.26.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-storage-0.26.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-storage-default-plugins-0.26.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-storage-mcap-0.26.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-storage-sqlite3-0.26.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-transport-0.26.11-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosgraph-msgs-2.0.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-adapter-4.6.9-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-cli-4.6.9-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-cmake-4.6.9-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-core-generators-0.2.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-core-runtime-0.2.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-default-generators-1.6.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-default-runtime-1.6.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-dynamic-typesupport-0.1.2-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-dynamic-typesupport-fastrtps-0.1.0-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-generator-c-4.6.9-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-generator-cpp-4.6.9-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-generator-py-0.22.2-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-generator-rs-0.5.0-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-generator-type-description-4.6.9-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-parser-4.6.9-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-pycommon-4.6.9-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-runtime-c-4.6.9-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-runtime-cpp-4.6.9-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-runtime-py-0.13.2-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-c-3.2.3-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-cpp-3.2.3-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-fastrtps-c-3.6.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-fastrtps-cpp-3.6.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-interface-4.6.9-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-introspection-c-4.6.9-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-introspection-cpp-4.6.9-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rpyutils-0.4.2-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rti-connext-dds-cmake-module-0.22.3-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-sensor-msgs-5.3.8-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-sensor-msgs-py-5.3.8-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-service-msgs-2.0.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-shape-msgs-5.3.8-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-spdlog-vendor-1.6.2-np2py312hcd4b164_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-sqlite3-vendor-0.26.11-np2py312heb1eb2f_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-sros2-0.13.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-sros2-cmake-0.13.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-statistics-msgs-2.0.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-std-msgs-5.3.8-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-std-srvs-5.3.8-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-stereo-msgs-5.3.8-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-0.36.23-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-bullet-0.36.23-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-eigen-0.36.23-np2py312hd11d946_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-eigen-kdl-0.36.23-np2py312hd11d946_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-geometry-msgs-0.36.23-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-kdl-0.36.23-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-msgs-0.36.23-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-py-0.36.23-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-ros-0.36.23-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-ros-py-0.36.23-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-sensor-msgs-0.36.23-np2py312hd11d946_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-tools-0.36.23-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tinyxml2-vendor-0.9.2-np2py312h1425c0b_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tracetools-8.2.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-trajectory-msgs-5.3.8-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-type-description-interfaces-2.0.4-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-uncrustify-vendor-3.0.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-unique-identifier-msgs-2.5.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-urdf-2.10.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-urdf-parser-plugin-2.10.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-urdfdom-6.0-py312h77058a8_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-urdfdom-headers-3.0-py312h7accfcc_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-visualization-msgs-5.3.8-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-yaml-cpp-vendor-9.0.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-zenoh-cpp-vendor-0.2.11-np2py312hbb4efd0_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-zstd-vendor-0.26.11-np2py312h94542ee_25.conda +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 + md5: a9f577daf3de00bca7c3c76c0ecbd1de + depends: + - __glibc >=2.17,<3.0.a0 + - libgomp >=7.5.0 + constrains: + - openmp_impl <0.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + strong: + - _openmp_mutex >=4.5 + size: 28948 + timestamp: 1770939786096 +- conda: https://conda.anaconda.org/conda-forge/linux-64/at-spi2-atk-2.38.0-h0630a04_3.tar.bz2 + sha256: 26ab9386e80bf196e51ebe005da77d57decf6d989b4f34d96130560bc133479c + md5: 6b889f174df1e0f816276ae69281af4d + depends: + - at-spi2-core >=2.40.0,<2.41.0a0 + - atk-1.0 >=2.36.0 + - dbus >=1.13.6,<2.0a0 + - libgcc-ng >=9.3.0 + - libglib >=2.68.1,<3.0a0 + license: LGPL-2.1-or-later + license_family: LGPL + run_exports: + weak: + - at-spi2-atk >=2.38.0,<3.0a0 + size: 339899 + timestamp: 1619122953439 +- conda: https://conda.anaconda.org/conda-forge/linux-64/at-spi2-core-2.40.3-h0630a04_0.tar.bz2 + sha256: c4f9b66bd94c40d8f1ce1fad2d8b46534bdefda0c86e3337b28f6c25779f258d + md5: 8cb2fc4cd6cc63f1369cfa318f581cc3 + depends: + - dbus >=1.13.6,<2.0a0 + - libgcc-ng >=9.3.0 + - libglib >=2.68.3,<3.0a0 + - xorg-libx11 + - xorg-libxi + - xorg-libxtst + license: LGPL-2.1-or-later + license_family: LGPL + run_exports: + weak: + - at-spi2-core >=2.40.3,<2.41.0a0 + size: 658390 + timestamp: 1625848454791 +- conda: https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda + sha256: df682395d05050cd1222740a42a551281210726a67447e5258968dd55854302e + md5: f730d54ba9cd543666d7220c9f7ed563 + depends: + - libgcc-ng >=12 + - libglib >=2.80.0,<3.0a0 + - libstdcxx-ng >=12 + constrains: + - atk-1.0 2.38.0 + license: LGPL-2.0-or-later + license_family: LGPL + run_exports: + weak: + - atk-1.0 >=2.38.0 + size: 355900 + timestamp: 1713896169874 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bullet-3.25-h26dfbe5_5.conda + sha256: 1ba37b4b500aa486012a19c3071477e2bac202822625980e99da77e2d18ea408 + md5: 980176113a639a707f5b158031cbac21 + depends: + - bullet-cpp 3.25 hcbe3ca9_5 + - numpy + - pybullet 3.25 py312hf49885f_5 + - python + license: Zlib + run_exports: {} + size: 11631 + timestamp: 1761041385662 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bullet-cpp-3.25-hcbe3ca9_5.conda + sha256: 5b1d2b088f15796123a81d2213cf7998e7d36cb19293bc55d0d6c1d3254af7e5 + md5: 17f8b21e05588ceea91fbb1162133dbb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libgl >=1.7.0,<2.0a0 + - libstdcxx >=13 + - numpy >=1.23,<3 + - python_abi 3.12.* *_cp312 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: Zlib + run_exports: + weak: + - bullet-cpp >=3.25,<3.26.0a0 + size: 42581149 + timestamp: 1761041037901 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_10.conda + sha256: 1a0d382c515ebf55f8ee1f38c8b81bc95af5c2acc42ad53b66bc5df932032f96 + md5: e675fabcf81499adc7edf58124fb1e01 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + run_exports: + weak: + - bzip2 >=1.0.8,<2.0a0 + size: 257808 + timestamp: 1785906269155 +- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.8-hebe6cf0_2.conda + sha256: 9c37cc233238adf366ea75b0e845662a5be07ceadf62e458183516369340274b + md5: 3ad2b403be8fc5612b9159e2ce621f69 + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + run_exports: + weak: + - c-ares >=1.34.8,<2.0a0 + size: 228700 + timestamp: 1787169971173 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.6-h3c89d7e_0.conda + sha256: 5d0efc6f9981468aca72897460d9b2d17b74dff72787f20a9d2330e214064515 + md5: 7920701f9abcb488411495742cf365a7 + depends: + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.3,<79.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=15 + - libglib >=2.90.0,<3.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libstdcxx >=15 + - libxcb >=1.17.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - pixman >=0.46.4,<1.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: LGPL-2.1-only or MPL-1.1 + run_exports: + weak: + - cairo >=1.18.6,<2.0a0 + size: 1007110 + timestamp: 1790045358757 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.1.1-py312h703531f_3.conda + sha256: 7c6e8b24d62e0bfa5d14050cd29053778f399feefa7d6887b04575210285a849 + md5: 41f019d067f8c52c6d9283d8afb28889 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.7.0,<3.8.0a0 + - libgcc >=15 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + run_exports: {} + size: 302937 + timestamp: 1788485303634 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.4.4-hff7ac6b_0.conda + sha256: 1c04749bc4a45d5712ba81d7bf38204f6f3a53803b8c223571e7a0a1e1dbbebf + md5: f58ffc242c3ecbf9753d1f7dc6b91276 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - ncurses >=6.6,<7.0a0 + - libexpat >=2.8.5,<3.0a0 + - libcurl >=8.22.0,<9.0a0 + - rhash >=1.4.6,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + - libuv >=1.52.1,<2.0a0 + - bzip2 >=1.0.8,<2.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 26080138 + timestamp: 1791001096509 +- conda: https://conda.anaconda.org/conda-forge/linux-64/console_bridge-1.0.2-h924138e_1.tar.bz2 + sha256: 29caeda123ea705e68de46dc3b86065ec78f5b44d7ae69b320cc57e136d2d9d7 + md5: e891b2b856a57d2b2ddb9ed366e3f2ce + depends: + - libgcc-ng >=10.3.0 + - libstdcxx-ng >=10.3.0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - console_bridge >=1.0.2,<1.1.0a0 + size: 18460 + timestamp: 1648912649612 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cppcheck-2.22.0-py312h3cdd867_1.conda + sha256: 0ef0bd4ad02311259e93011376b290e3df76b00fccf1090baa928928f5022a3d + md5: 4fed5367fc013b43a33ba5bb7f3974d4 + depends: + - pygments + - python + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 + - pcre >=8.45,<9.0a0 + - tinyxml2 >=11.0.0,<11.1.0a0 + license: GPL-3.0-or-later + license_family: GPL + run_exports: {} + size: 3198141 + timestamp: 1790418661673 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-50.0.2-py311hc91d8b8_0.conda + noarch: python + sha256: d1956b37648b45d54e884d765223974fe6e26d4e7ea248cd08c625ba8cd823ab + md5: e9af843b1d7656fd6bdbe9aa69e95579 + depends: + - python + - cffi >=2.0 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - _python_abi3_support 1.* + - cpython >=3.11 + - openssl >=3.5.8,<4.0a0 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + run_exports: {} + size: 1830947 + timestamp: 1790790516832 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cyclonedds-0.10.5-h9a70dda_0.conda + sha256: 47f9965f3eeeae01cee107781604709f8a9394776ee273352117add24b86fe4b + md5: 92f3a834938823c5777d3991e6ec1812 + depends: + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - openssl >=3.5.6,<4.0a0 + license: EPL-2.0 + run_exports: + weak: + - cyclonedds >=0.10.5,<0.11.0a0 + size: 1196508 + timestamp: 1779684039793 +- conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-he8c428d_2.conda + sha256: 87a0a42d4ccc527597eff3234509dfb03e0d9bf67d5e2b6fc758e2ef389d8abe + md5: a6eb37b51be1a9a654dc3a8aca039b1a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - libexpat >=2.8.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + - libglib >=2.88.3,<3.0a0 + license: AFL-2.1 OR GPL-2.0-or-later + run_exports: + weak: + - dbus >=1.16.2,<2.0a0 + size: 449564 + timestamp: 1788197922783 +- conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-5.0.1-h19c2612_3.conda + sha256: e134dba3ad3523573d5902ff1222a4033372089ea31efa99e6adaf0aa18f904a + md5: cf1f7131e9055f06f07a834091f44ca4 + license: MPL-2.0 + license_family: MOZILLA + run_exports: {} + size: 1311719 + timestamp: 1788951264833 +- conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-abi-5.0.1.80-hf414acd_3.conda + sha256: 2c0ae975516a66f50a525666dd128dd82e27aec6370d1a846b1390f3fbc03a98 + md5: 56a1cca9a4a7bed2999630e5644c8d0e + constrains: + - eigen >=5.0.1,<5.0.2.0a0 + license: MPL-2.0 + license_family: MOZILLA + run_exports: {} + size: 13466 + timestamp: 1788951264833 +- conda: https://conda.anaconda.org/conda-forge/linux-64/eigen-abi-devel-5.0.1.100-h2fbfb1f_3.conda + sha256: 88f00e4a9ebc12c1e50ff01b4cb222e849fdf441f6c66ea21f1d342a7418f052 + md5: 92580ea494143fba52f47ef3e726fdbc + depends: + - eigen >=5.0.1,<5.0.2.0a0 + - eigen-abi >=5.0.1.80,<5.0.1.81.0a0 + constrains: + - x86_64-microarch-level >=1,<3 + license: MPL-2.0 + license_family: MOZILLA + run_exports: + weak: + - eigen-abi >=5.0.1.80,<5.0.1.81.0a0 + size: 14683 + timestamp: 1788951264833 +- conda: https://conda.anaconda.org/conda-forge/linux-64/epoxy-1.5.10-hb03c661_2.conda + sha256: a5b51e491fec22bcc1765f5b2c8fff8a97428e9a5a7ee6730095fb9d091b0747 + md5: 057083b06ccf1c2778344b6dabace38b + depends: + - __glibc >=2.17,<3.0.a0 + - libdrm >=2.4.125,<2.5.0a0 + - libegl >=1.7.0,<2.0a0 + - libegl-devel + - libgcc >=14 + - libgl >=1.7.0,<2.0a0 + - libgl-devel + - libglx >=1.7.0,<2.0a0 + - libglx-devel + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + - xorg-libxxf86vm >=1.1.6,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - epoxy >=1.5.10,<1.6.0a0 + size: 411735 + timestamp: 1758743520805 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-h76c4fd7_1.conda + sha256: 25d14a197601fdd616f2e501431b52887e69b31e7defbc1679381d718357ceb7 + md5: a70bb6d42ad121aef456e0007e92bed6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + run_exports: + weak: + - fmt >=12.1.0,<12.2.0a0 + size: 199072 + timestamp: 1785915412102 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.3-h4db4eae_1.conda + sha256: 5a3eb10b18a97223ab06b3a7f0d7f56658db2f2800e2f2af95836fe3bf55ba63 + md5: 922776b528a470ab5afa81fd42abfa1d + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=15 + - libuuid >=2.42.2,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + size: 296288 + timestamp: 1786667377340 +- conda: https://conda.anaconda.org/conda-forge/linux-64/foonathan-memory-0.7.4-h54a6638_1.conda + sha256: e356abf4a5e095c6b723f6b77dbbdf31957dffb122adab2d54496c70c7a28c4f + md5: 6f78294a2bc5b7fe6310b7677fd37e7b + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: Zlib + run_exports: + weak: + - foonathan-memory >=0.7.4,<0.7.5.0a0 + size: 184682 + timestamp: 1779093090230 +- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_2.conda + sha256: 612a8e0c1a6ecae23da54d81ef395f6ebb5c8e4468ec2611593ebce75876a4e0 + md5: 2d0ea23b23603e07ca47f23f949f67b6 + depends: + - libfreetype 2.14.3 ha770c72_2 + - libfreetype6 2.14.3 h5e6c136_2 + license: GPL-2.0-only OR FTL + run_exports: + weak: + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + size: 175239 + timestamp: 1786641011029 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.17-h7cc23a3_0.conda + sha256: 3ba79ebfbd14ca5db4affaf10ee8001064e907de5baabc2dbe5bcd9aec856c9f + md5: f9d5302bca196ee87e62f393f2626562 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: LGPL-2.1-or-later + run_exports: + weak: + - fribidi >=1.0.17,<2.0a0 + size: 64102 + timestamp: 1790011855888 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.8-h68053f1_2.conda + sha256: 32f3ebd1871cb6ac7eac36c78c410860f38e8d252d5857a80f6abfcb79c7e0ff + md5: d7bd6ccfc58eb6796bd6bba85878fc0e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libglib >=2.88.3,<3.0a0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libtiff >=4.7.2,<4.8.0a0 + license: LGPL-2.1-or-later + license_family: LGPL + run_exports: + weak: + - gdk-pixbuf >=2.44.8,<3.0a0 + size: 581961 + timestamp: 1788490424411 +- conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.90.0-h3d503d9_0.conda + sha256: a31c2244c6743a85941ac1d19a77ce2cc871afa171b0ad9aaac309af532d0677 + md5: d4adaebf8a2c9040ada6549c52a6b8d8 + depends: + - libglib ==2.90.0 h569388d_0 + - libffi + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + license: LGPL-2.1-or-later + run_exports: {} + size: 237225 + timestamp: 1789478025196 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gmock-1.18.0-h48ecd08_1.conda + sha256: d9ea645d97a86e8bf87d535ed0d780d311374fb44fe727c1654f098ac79cbfc7 + md5: e28a4aba79c3c149f4dd0588f61e3abc + depends: + - gtest ==1.18.0 h171cf75_1 + - gtest >=1.18.0,<1.18.1.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 4915 + timestamp: 1786419392511 +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-h54a6638_1.conda + sha256: 7fa3b6a9c081fa3e545573152a788d061a0a0ba57df7251cc0f4f75225fc93e7 + md5: f9fe2984587fa8235a6af6004760cd18 + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + license: LGPL-2.0-or-later + license_family: LGPL + run_exports: + weak: + - graphite2 >=1.3.15,<2.0a0 + size: 102835 + timestamp: 1786118485753 +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphviz-14.1.2-h8b86629_0.conda + sha256: 48d4aae8d2f7dd038b8c2b6a1b68b7bca13fa6b374b78c09fcc0757fa21234a1 + md5: 341fc61cfe8efa5c72d24db56c776f44 + depends: + - __glibc >=2.17,<3.0.a0 + - adwaita-icon-theme + - cairo >=1.18.4,<2.0a0 + - fonts-conda-ecosystem + - gdk-pixbuf >=2.44.4,<3.0a0 + - gtk3 >=3.24.43,<4.0a0 + - gts >=0.7.6,<0.8.0a0 + - libexpat >=2.7.3,<3.0a0 + - libgcc >=14 + - libgd >=2.3.3,<2.4.0a0 + - libglib >=2.86.3,<3.0a0 + - librsvg >=2.60.0,<3.0a0 + - libstdcxx >=14 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pango >=1.56.4,<2.0a0 + license: EPL-1.0 + license_family: Other + run_exports: + weak: + - graphviz >=14.1.2,<15.0a0 + size: 2426455 + timestamp: 1769427102743 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gtest-1.18.0-h171cf75_1.conda + sha256: c7131b5cd7b9c75ae8be451eef6aef794416a62ac330ee692d476f4144f1cd48 + md5: 84a4a01103f7c4cb9d889db3efe3abc6 + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + constrains: + - gmock ==1.18.0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - gtest >=1.18.0,<1.18.1.0a0 + size: 456093 + timestamp: 1786419392511 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gtk3-3.24.52-ha5ea40c_0.conda + sha256: c6bb4f06331bcb0a566d84e0f0fad7af4b9035a03b13e2d5ecfaf13be57e6e10 + md5: bcaea22d85999a4f17918acfab877e61 + depends: + - __glibc >=2.17,<3.0.a0 + - at-spi2-atk >=2.38.0,<3.0a0 + - atk-1.0 >=2.38.0 + - cairo >=1.18.4,<2.0a0 + - epoxy >=1.5.10,<1.6.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - fribidi >=1.0.16,<2.0a0 + - gdk-pixbuf >=2.44.5,<3.0a0 + - glib-tools + - harfbuzz >=13.2.1 + - hicolor-icon-theme + - libcups >=2.3.3,<2.4.0a0 + - libcups >=2.3.3,<3.0a0 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - liblzma >=5.8.2,<6.0a0 + - libxkbcommon >=1.13.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - pango >=1.56.4,<2.0a0 + - wayland >=1.25.0,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxcomposite >=0.4.7,<1.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + - xorg-libxi >=1.8.2,<2.0a0 + - xorg-libxinerama >=1.1.6,<1.2.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: LGPL-2.0-or-later + license_family: LGPL + run_exports: + weak: + - gtk3 >=3.24.52,<4.0a0 + - adwaita-icon-theme + size: 5939083 + timestamp: 1774288645605 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda + sha256: b5cd16262fefb836f69dc26d879b6508d29f8a5c5948a966c47fe99e2e19c99b + md5: 4d8df0b0db060d33c9a702ada998a8fe + depends: + - libgcc-ng >=12 + - libglib >=2.76.3,<3.0a0 + - libstdcxx-ng >=12 + license: LGPL-2.0-or-later + license_family: LGPL + run_exports: + weak: + - gts >=0.7.6,<0.8.0a0 + size: 318312 + timestamp: 1686545244763 +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.6.0-ha770c72_2.conda + sha256: f2010d4e80756cc3735b6fec645c9c72293344cf9c2a780256da5dc4dc3545b1 + md5: 0709eacc38906e8a237d9ef172af6688 + depends: + - libharfbuzz-devel 14.6.0 h23af247_2 + license: MIT + license_family: MIT + run_exports: + weak: + - libharfbuzz >=14.6.0 + size: 11095 + timestamp: 1791900621328 +- conda: https://conda.anaconda.org/conda-forge/linux-64/hicolor-icon-theme-0.17-ha770c72_3.conda + sha256: 6d7e6e1286cb521059fe69696705100a03b006efb914ffe82a2ae97ecbae66b7 + md5: 129e404c5b001f3ef5581316971e3ea0 + license: GPL-2.0-or-later + license_family: GPL + run_exports: {} + size: 17625 + timestamp: 1771539597968 +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda + sha256: 9f07834f0c546ab14d885ce0366285f61f44e326c0edd1fc63b8294e113ae432 + md5: 72a381cbad04f24b1c2a43ef707f45b4 + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + license: MIT + license_family: MIT + run_exports: + weak: + - icu >=78.3,<79.0a0 + size: 14459115 + timestamp: 1786545741408 +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-h7cc23a3_1.conda + sha256: dd053c96dcb0dcfd59422aefea9d2fe937a190167f34fba7893ec1e10a7e8963 + md5: ba55d1b89fd7775e67de8291029b4059 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: LGPL-2.1-or-later + run_exports: + weak: + - keyutils >=1.6.3,<2.0a0 + size: 135295 + timestamp: 1786739238128 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbc21106_2.conda + sha256: 2a5c38c85e63df84c4e69ee71439841ce570d259ae3060627bb9a49a938d66f4 + md5: 53318d715316929a574f83591308b1f8 + depends: + - __glibc >=2.17,<3.0.a0 + - keyutils >=1.6.3,<2.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - libgcc >=15 + - libstdcxx >=15 + - openssl >=3.5.7,<4.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - krb5 >=1.22.2,<1.23.0a0 + size: 1394333 + timestamp: 1786762112514 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_103.conda + sha256: 901649b1edbe841fd4ee7e2d491a05184ed540eb01cdae506872f344babc1d28 + md5: 2362c70e7e79827c32db35547d9c179b + depends: + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - binutils_impl_linux-64 2.46.1 + license: GPL-3.0-only + license_family: GPL + run_exports: {} + size: 742109 + timestamp: 1791565468810 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.2.0-hdb68285_0.conda + sha256: bf9fdebf55d8bc99d83531cdffda00703f4dc5f93a1a956768c147362c72feda + md5: fb9d356b1a57d6d54768be7ebd5fce09 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: Apache + run_exports: + weak: + - lerc >=4.2.0,<5.0a0 + size: 271158 + timestamp: 1785036167977 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libacl-2.4.0-h1b0031e_2.conda + sha256: fe541e87061b8ad38d3d9bec8be95b72693d24a10cde5be4759a24ac11d02d15 + md5: af925ec442e5e7b1ccb4411a2246c489 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libattr >=2.6.0,<2.7.0a0 + license: GPL-2.0-or-later + license_family: GPL + run_exports: + weak: + - libacl >=2.4.0,<2.5.0a0 + size: 131997 + timestamp: 1786151411925 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libattr-2.6.0-h11a17bc_1.conda + sha256: d92bbc34c982afabca44df73a6656ce75aa85a0e1c3acbef863627ed1a1563f0 + md5: 49a4dd4a591a15d1ae9fbb9dc5e60d77 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-or-later + license_family: LGPL + run_exports: + weak: + - libattr >=2.6.0,<2.7.0a0 + size: 63644 + timestamp: 1785980561138 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-11_h4a7cf45_openblas.conda + build_number: 11 + sha256: d942e0c820d60a613a6f786d074f0820fb6343e3f1ccfb110b1d98b44fb75968 + md5: b8cce1486f3c62f33291d6318c193d0d + depends: + - libopenblas >=0.3.34,<0.3.35.0a0 + - libopenblas >=0.3.34,<1.0a0 + constrains: + - blas 2.311 openblas + - libcblas 3.11.0 11*_openblas + - liblapack 3.11.0 11*_openblas + - liblapacke 3.11.0 11*_openblas + - mkl <2027 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libblas >=3.11.0,<4.0a0 + size: 18246 + timestamp: 1789061062982 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-11_h0358290_openblas.conda + build_number: 11 + sha256: f7d1bbdea61cf94ba219d17b2cb571a29830f8025385af799bff5a7ad1ef45e6 + md5: 73a248c30811075059b5aeda766c2624 + depends: + - libblas 3.11.0 11_h4a7cf45_openblas + constrains: + - blas 2.311 openblas + - liblapack 3.11.0 11*_openblas + - liblapacke 3.11.0 11*_openblas + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libcblas >=3.11.0,<4.0a0 + size: 18196 + timestamp: 1789061068819 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda + sha256: 205c4f19550f3647832ec44e35e6d93c8c206782bdd620c1d7cf66237580ff9c + md5: 49c553b47ff679a6a1e9fc80b9c5a2d4 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: Apache-2.0 + license_family: Apache + run_exports: + weak: + - libcups >=2.3.3,<2.4.0a0 + size: 4518030 + timestamp: 1770902209173 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.23.0-ha042cf0_0.conda + sha256: d2db14d80efb4f2e76e76561c633f1767f7543987f2bcb54a067a9d264d432ab + md5: 0ad16151226df493aed967f0efce0e80 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=15 + - libnghttp2 >=1.68.1,<2.0a0 + - libpsl >=0.23.1,<0.24.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.9,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + run_exports: + weak: + - libcurl >=8.23.0,<9.0a0 + size: 505683 + timestamp: 1791990900844 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-hd45a770_1.conda + sha256: 82e134c8a08b1eed9a2ed8ab578b89aa1730dcde3dea8dd87645ed0637878e54 + md5: 40f9b31aa9cf007789867df0decd0492 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + run_exports: + weak: + - libdeflate >=1.25,<1.26.0a0 + size: 73710 + timestamp: 1785908694612 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.129-h7cc23a3_0.conda + sha256: ea46b0ca0fa16af1f8b329b740e6cd8b4577c5378fa8717b28a885f70668633d + md5: 64cc91512b6278c315349dc13c53f680 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libpciaccess >=0.19,<0.20.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libdrm >=2.4.129,<2.5.0a0 + size: 313461 + timestamp: 1786684701973 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20260512-pl5321h373387f_0.conda + sha256: 45301f14f4eb66da57cfaf2d265f3eeee73f8b07e99614ee3afc5b26eea91126 + md5: 27dbd7e2984b8fe48e069379636ccfdd + depends: + - ncurses + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - ncurses >=6.6,<7.0a0 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - libedit >=3.1.20260512,<3.2.0a0 + size: 135877 + timestamp: 1791327370514 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_5.conda + sha256: 13d3fde9c1dcf254968cc70652222a43f25d04e69555ccf855553110e753288e + md5: 3a1b41c4591a0a1734382af3e2b8bc08 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_5 + license: LicenseRef-libglvnd + run_exports: {} + size: 46694 + timestamp: 1787310030923 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_5.conda + sha256: fd2794bbcff7e692fb476c17886702702893d074071d429217bad7cfb072abfd + md5: 577800fc8c9d8b7d9727246bbfde704e + depends: + - __glibc >=2.17,<3.0.a0 + - libegl 1.7.0 ha4b6fd6_5 + - libgl-devel 1.7.0 ha4b6fd6_5 + - xorg-libx11 + license: LicenseRef-libglvnd + run_exports: + weak: + - libegl >=1.7.0,<2.0a0 + size: 31242 + timestamp: 1787310065866 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h280c20c_3.conda + sha256: e4418f68d01a6307c4431b585c71b584f40189877364e542ee87deb777f5e85b + md5: 7bc31538d6e3fb349e897353969237ec + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: BSD-2-Clause OR GPL-2.0-or-later + license_family: GPL + run_exports: + weak: + - libev >=4.33,<4.34.0a0 + size: 43220 + timestamp: 1785917328200 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.5-hd2095e1_0.conda + sha256: 6de73033a7c5f712c9c5a54124e4581e025691029835e5bceaf10a333a7e7bc0 + md5: 72cfd2b95b0540247220b42f58a148d7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + constrains: + - expat 2.8.5.* + license: MIT + license_family: MIT + run_exports: {} + size: 77893 + timestamp: 1790346247149 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h81df57d_1.conda + sha256: c8c7583ef063bc3c430f1d48298e5ad24f796a35c22ed5b14183325825a61106 + md5: 6525a0b06aa4fd390795f0740636a9dd + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: MIT + license_family: MIT + run_exports: + weak: + - libffi >=3.7.0,<3.8.0a0 + size: 68004 + timestamp: 1787753412298 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_2.conda + sha256: fb12ecb46c30d18d928c0e8fc346ab13b5f6fc8a9cacae4f2f4bb188782586f5 + md5: f8054e759d0ddddaf34a5c8fedc900a1 + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + run_exports: {} + size: 8407 + timestamp: 1786641007099 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h5e6c136_2.conda + sha256: ec607dd5445dd17ff6bf8b7fe6832e5504c226dd91d3aaea7ba83569808b0ce4 + md5: b72a266a9317036fd0464cb98b027cd0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + run_exports: {} + size: 387671 + timestamp: 1786641006460 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_7.conda + sha256: e031634c3a928f9594eba868bc46ef5230d6571a364a0c63215b06c4563bfcea + md5: 735629b400b70eeab21a2ba8f5b1c2ce + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==16.2.0=*_7 + - libgomp 16.2.0 he0feb66_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: {} + size: 1058444 + timestamp: 1790303109576 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-16.2.0-h69a702a_7.conda + sha256: 03b54d7008de080a17cc2174b0e4acd6d06e1c981b2eb19846f46d8f59966034 + md5: 2005515ac9340f816fb2ac7e83afe553 + depends: + - libgcc 16.2.0 ha9f2e26_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: + strong: + - libgcc + size: 28616 + timestamp: 1790303114248 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h5fbf134_12.conda + sha256: 245be793e831170504f36213134f4c24eedaf39e634679809fd5391ad214480b + md5: 88c1c66987cd52a712eea89c27104be6 + depends: + - __glibc >=2.17,<3.0.a0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libgcc >=14 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: GD + license_family: BSD + run_exports: + weak: + - libgd >=2.3.3,<2.4.0a0 + size: 177306 + timestamp: 1766331805898 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-16.2.0-h69a702a_7.conda + sha256: 9682ae4dd11487e10b904b3cb3ab6379cad25233d45fdfdf90d54349df244494 + md5: 3a8d285f5f22138ef826ad54cf267e73 + depends: + - libgfortran5 16.2.0 h6b99dfc_7 + constrains: + - libgfortran-ng ==16.2.0=*_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: {} + size: 28571 + timestamp: 1790303139904 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-16.2.0-h6b99dfc_7.conda + sha256: 04dbab12c925b92977bb835dd2f5eda413607afa79f95a554e5a04b07a380322 + md5: 7719ed7be38ad8c492c4bd5cc2bce0c4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=16.2.0 + constrains: + - libgfortran 16.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: {} + size: 2528180 + timestamp: 1790303122004 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_5.conda + sha256: 7b2e7e31e8a4f5a01c45ecadcd8aa68c8f733b035240bc7ba9881835ef4bf7b4 + md5: 81141db127a106eb5a91df69a29c9918 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_5 + - libglx 1.7.0 ha4b6fd6_5 + license: LicenseRef-libglvnd + run_exports: {} + size: 131988 + timestamp: 1787310049847 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_5.conda + sha256: 3bebdbeb3ce451287794dddd5cc4d7f4970aac200b2fb797f0d17ac727a71cb7 + md5: f5f7fc038c611a25b22758c0a40d25c9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgl 1.7.0 ha4b6fd6_5 + - libglx-devel 1.7.0 ha4b6fd6_5 + license: LicenseRef-libglvnd + run_exports: + weak: + - libgl >=1.7.0,<2.0a0 + size: 116212 + timestamp: 1787310061570 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.90.0-h569388d_0.conda + sha256: 9e688e046550415c030c3d08ed9a3fd13a51d7bc56295283b858b6c3070bb9f8 + md5: c85e9539551f1fd21104e518d940c244 + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libiconv >=1.18,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libffi >=3.7.0,<3.8.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - glib >2.66 + license: LGPL-2.1-or-later + run_exports: + weak: + - libglib >=2.90.0,<3.0a0 + size: 4819130 + timestamp: 1789478025196 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_5.conda + sha256: 6eb77601a44b78c4631d886d54ef54f321c2bdc69fdefc4065a1e0491f030c76 + md5: cfcf11edcfd4acf0094771a9c3b8587f + depends: + - __glibc >=2.17,<3.0.a0 + license: LicenseRef-libglvnd + run_exports: {} + size: 133827 + timestamp: 1787310026653 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_5.conda + sha256: d1f0d51aea6bcc5d915969cbed32e72a8ed6a95931b87357ef8d0866573688c4 + md5: 614e10aae180f87b84f0d1ca8ceb7d9e + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_5 + - xorg-libx11 >=1.8.13,<2.0a0 + license: LicenseRef-libglvnd + run_exports: {} + size: 79834 + timestamp: 1787310042550 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_5.conda + sha256: aff3841e3404d78e1887fef988ca4842930c577399d566fa0980808756b1df51 + md5: fb00b4fb800f2d431303a5c1625ef9d0 + depends: + - __glibc >=2.17,<3.0.a0 + - libglx 1.7.0 ha4b6fd6_5 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-xorgproto + license: LicenseRef-libglvnd + run_exports: + weak: + - libglx >=1.7.0,<2.0a0 + size: 27698 + timestamp: 1787310053582 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_7.conda + sha256: 92a0bb350c7be6a4eedcb4e111c60aefd176018e6b1c009a6e025dbe9bbcd758 + md5: d904c7ddd95e026254b4b80808ee9e12 + depends: + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: + strong: + - _openmp_mutex >=4.5 + size: 640566 + timestamp: 1790303046034 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-14.6.0-h23af247_2.conda + sha256: 3dea71a07100fd523ff173538577fd2e06a42beb5cb25e4a18ac9484773753ba + md5: 6a93147cab011f36d1659745c3f579e2 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.6,<2.0a0 + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=15 + - libglib >=2.90.0,<3.0a0 + - libpng >=1.6.59,<1.7.0a0 + - libstdcxx >=15 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + run_exports: {} + size: 1463302 + timestamp: 1791900600568 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-devel-14.6.0-h23af247_2.conda + sha256: 4470b63366a83f0cecd5c62d8caf0744674cf541ab33bf1d1165af2bfb9a26b7 + md5: 3cf459e930e6ea2e57bbf04be7fcb7c6 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.6,<2.0a0 + - freetype + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=15 + - libglib >=2.90.0,<3.0a0 + - libharfbuzz 14.6.0 h23af247_2 + - libpng >=1.6.59,<1.7.0a0 + - libstdcxx >=15 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libharfbuzz >=14.6.0 + size: 2250385 + timestamp: 1791900615728 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiceoryx-binding-c-2.95.8-h1059693_5.conda + sha256: 2add3132816c8053a29b685e69c1b45766b490f84bdc8daccd16f18d1883ebee + md5: 1075493c79f9a9ed4fa5ea80f33d7526 + depends: + - libiceoryx-hoofs ==2.95.8 hfe315d3_5 + - libiceoryx-posh ==2.95.8 hb5873e6_5 + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libacl >=2.4.0,<2.5.0a0 + - ncurses >=6.6,<7.0a0 + license: Apache-2.0 AND MIT AND EPL-2.0 + run_exports: {} + size: 91314 + timestamp: 1788317792509 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiceoryx-hoofs-2.95.8-hfe315d3_5.conda + sha256: 5cece2460fb461c2b01c8dcce35a1ce2f5fe5327b4c82684bec2f059a76ece66 + md5: ce56cc0003f2141b92db1fbba84660da + depends: + - libiceoryx-platform ==2.95.8 hf91fcae_5 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - ncurses >=6.6,<7.0a0 + - libacl >=2.4.0,<2.5.0a0 + license: Apache-2.0 AND MIT AND EPL-2.0 + run_exports: {} + size: 220241 + timestamp: 1788317792509 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiceoryx-platform-2.95.8-hf91fcae_5.conda + sha256: 6c10d1e7868885da6f80d30da93088da404473965231614b493408e4b18482fb + md5: 91f72c3ddf93fc12bddcf0e294435b02 + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - libacl >=2.4.0,<2.5.0a0 + - ncurses >=6.6,<7.0a0 + license: Apache-2.0 AND MIT AND EPL-2.0 + run_exports: {} + size: 25103 + timestamp: 1788317792509 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiceoryx-posh-2.95.8-hb5873e6_5.conda + sha256: ffca1bf9b67032cee7af0e62986542f599015bacd412bed6113db0a27ec2f354 + md5: 99b561e6b6e6b1ff260cf3f15c2fa795 + depends: + - libiceoryx-hoofs ==2.95.8 hfe315d3_5 + - libiceoryx-platform ==2.95.8 hf91fcae_5 + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - ncurses >=6.6,<7.0a0 + - libacl >=2.4.0,<2.5.0a0 + license: Apache-2.0 AND MIT AND EPL-2.0 + run_exports: {} + size: 556088 + timestamp: 1788317792509 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h0cb94f2_3.conda + sha256: f943117edb9cd4d9c61cc972eee5a34291dc55ea7a6e9e38da104995841cbcb6 + md5: f92233bf33e24a25668bb2119e2c51f9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: LGPL-2.1-only + run_exports: + weak: + - libiconv >=1.18,<2.0a0 + size: 789471 + timestamp: 1787033836207 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.2.0-hb03c661_1.conda + sha256: bba8538e6538ed58a8479b332337b96986561f975d06cfa2039a016c2d246ee4 + md5: 898d1c9793eaa52efc4727bd84d2e39a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + run_exports: + weak: + - libjpeg-turbo >=3.2.0,<4.0a0 + size: 650434 + timestamp: 1785896381946 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-11_h47877c9_openblas.conda + build_number: 11 + sha256: 1ad3f43c9319ef398a8ef45989f4903a06e3965b51e77fc669a4c894168a8411 + md5: 5622a13917855ce4b953b9e655cf9262 + depends: + - libblas 3.11.0 11_h4a7cf45_openblas + constrains: + - blas 2.311 openblas + - libcblas 3.11.0 11*_openblas + - liblapacke 3.11.0 11*_openblas + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - liblapack >=3.11.0,<3.12.0a0 + size: 18227 + timestamp: 1789061073957 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda + sha256: 9787df8c22a59c9a70d3e5a10db9ad663485e75e9ccc3f09bd092cb7b95e0dab + md5: 1390b7c5ac0b1d8e447bc5efa6d3c8c2 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - xz 5.8.3.* + license: 0BSD + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 112995 + timestamp: 1786348617826 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h74cf4be_1.conda + sha256: 11a2f54a6f391e25738bce0023e6ef499600147bbcf21c1fa69d2e251b03cc6a + md5: 75d211f04ac87506f1f43420712a69fe + depends: + - __glibc >=2.17,<3.0.a0 + - c-ares >=1.34.8,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc >=15 + - libstdcxx >=15 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libnghttp2 >=1.68.1,<2.0a0 + size: 649974 + timestamp: 1787177490105 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5 + md5: d864d34357c3b65a4b731f78c0801dc4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-only + license_family: GPL + run_exports: + weak: + - libnsl >=2.0.1,<2.1.0a0 + size: 33731 + timestamp: 1750274110928 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.34-pthreads_hf13c14d_2.conda + sha256: 69a722751e14eab2eb3bfdcb9acb1187afbd962b0c49b48d829341e0f6787f60 + md5: 7e19fcd73d7f0997d3cb3326d2586a86 + depends: + - libgfortran5 >=15.3.0 + - libgfortran + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + constrains: + - openblas >=0.3.34,<0.3.35.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libopenblas >=0.3.34,<1.0a0 + size: 6845411 + timestamp: 1789141490688 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_1.conda + sha256: addc80c69d362a9e6c40305c493139a8e9ee504b2f45a6687dbdaa9da3c6183c + md5: 35fa2b34bbced424e6976d30f5fde576 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + run_exports: + weak: + - libpciaccess >=0.19,<0.20.0a0 + size: 30070 + timestamp: 1785971678815 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.59-h922cc85_0.conda + sha256: c7381be8ef713501f6cd2f5ad473e401f2edeaec3c46788296b8dbf0de165e15 + md5: 8c9caf742a485ac688ffa88bbadbf0be + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + run_exports: + weak: + - libpng >=1.6.59,<1.7.0a0 + size: 316872 + timestamp: 1790805159503 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpsl-0.23.1-hd9e3e90_1.conda + sha256: 09e8effdc89bc5d021349318d32b85594f5b8d8e3ab8f90a85b81f8fe695a566 + md5: 77be60417aa572afcb48cbe0f967401d + depends: + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libpsl >=0.23.1,<0.24.0a0 + size: 72519 + timestamp: 1786970753847 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpython-3.12.15-ha57cdbe_2_cpython.conda + build_number: 2 + sha256: 37017ac4a784c50f1fc73c7b0eb090c7f29f4541c9014c4b4e10daa275488fdd + md5: fe256863f652549334a81a8e49fdf097 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: Python-2.0 + run_exports: + weak: + - libpython >=3.12,<4.0a0 + size: 8775924 + timestamp: 1791911120563 +- conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.4-ha427ee3_0.conda + sha256: b8036adad17ceddcef416790131492fd236d34c64a0b2754934903087fa84279 + md5: f9bda2728debbde4c641bd1af103c623 + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libglib >=2.90.0,<3.0a0 + - pango >=1.58.2,<2.0a0 + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + - libxml2-16 >=2.15.4 + - cairo >=1.18.6,<2.0a0 + - libharfbuzz >=14.5.0 + - gdk-pixbuf >=2.44.8,<3.0a0 + constrains: + - __glibc >=2.17 + license: LGPL-2.1-or-later + run_exports: + weak: + - librsvg >=2.62.4,<3.0a0 + size: 4692221 + timestamp: 1790276295756 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-hebe6cf0_3.conda + sha256: 2f73c05a1ad07e5a2cb43f0b3759cb04505f0c8bef30b43c9db0caa50218bfd8 + md5: 2d14868d78e969226e4ba07444c0dd25 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: ISC + run_exports: + weak: + - libsodium >=1.0.22,<1.0.23.0a0 + size: 270970 + timestamp: 1789425325397 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.54.0-h13e7031_1.conda + sha256: 4823e42fe95fc318d7af6125dc6ef33bd60c1152054d41661413250dc0e84e6c + md5: bb145547395d3329f3a1d930de9848b2 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=15 + - libzlib >=1.3.2,<2.0a0 + license: blessing + run_exports: + weak: + - libsqlite >=3.54.0,<4.0a0 + size: 984364 + timestamp: 1791584378129 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-h6154650_1.conda + sha256: 7e463000fa1cba3f3a6597b776f6ab301d425a96e3bc20d0d9d76a3b9f237aa3 + md5: 5c526561e1d2a2e071941174eae84557 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libssh2 >=1.11.1,<2.0a0 + size: 306045 + timestamp: 1786713107897 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_7.conda + sha256: fa7018298629fc429971fffd6ecba3d27a7b02e4e890d6a93ea01ffebe8cb745 + md5: 9b6707e0caca917fa6ea9ee473f37a5d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 16.2.0 ha9f2e26_7 + constrains: + - libstdcxx-ng ==16.2.0=*_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: {} + size: 6615436 + timestamp: 1790303132935 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-16.2.0-hdf11a46_7.conda + sha256: 337f481db36cc357884f05f404ccd1b3a7e0fc1ee48ec5c884e4281d213bc863 + md5: 25a23bde5e26d548374f3e02b4669670 + depends: + - libstdcxx 16.2.0 h934c35e_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: + strong: + - libstdcxx + size: 28665 + timestamp: 1790303164510 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.2-hcc2c06a_1.conda + sha256: 10e125da82ca93e09191e66e5a94d566b2cf8d4024e2a0db3a9114297447e0d9 + md5: 0907d876f460ebc941ae590338b6102f + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.2.0,<5.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libgcc >=15 + - libjpeg-turbo >=3.2.0,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libstdcxx >=15 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + run_exports: + weak: + - libtiff >=4.7.2,<4.8.0a0 + size: 459753 + timestamp: 1787755584172 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liburcu-0.14.0-hac33072_0.conda + sha256: 208ead1ed147f588c722ef9dec7656f538111b15fb85c04f645758fa4fa8e3c3 + md5: 0b2b4f99717fe8f82dc21a3b0c504923 + depends: + - libgcc-ng >=12 + license: LGPL-2.0-or-later + license_family: LGPL + run_exports: + weak: + - liburcu >=0.14.0,<0.15.0a0 + size: 176874 + timestamp: 1718888439831 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.4-hcfc3c73_0.conda + sha256: f34b8d1de9a2bf62476d8608057d9b8a918d97444236dc53a47128f2fae79041 + md5: 54a948337e66706380ff24d6b5fde63f + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libuuid >=2.42.4,<3.0a0 + size: 34442 + timestamp: 1790121449161 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.52.1-h280c20c_1.conda + sha256: 67761d0206f84140047a367eaf9befe03a7e157a29ee25aee0047b40801cc6b6 + md5: 01c4ed87826af55996768af6dbc936b4 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libuv >=1.52.1,<2.0a0 + size: 420040 + timestamp: 1785914567661 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_1.conda + sha256: 8415001414f488c85b72b9d8cc2071dfb3981a47bc3c8eb56ef91a57d12eae7f + md5: 9332b53d0ea93c5d39e33be03a0c611a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libwebp-base >=1.6.0,<2.0a0 + size: 428430 + timestamp: 1785954557217 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-hb83e432_2.conda + sha256: 7b49e6fd2a584b7f072943e6adf4149677af5121246975278804782d37752837 + md5: 61f0ffba9161cbb3a77722869b21e4bb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - pthread-stubs + - xorg-libxau >=1.0.12,<2.0a0 + - xorg-libxdmcp >=1.1.5,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libxcb >=1.17.0,<2.0a0 + size: 395120 + timestamp: 1787885788278 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.38-h280c20c_0.conda + sha256: f7e9292dd219a6435bbb1223da9586c3e70d66d169c5a92f08db3f2127df04e9 + md5: f7a7ff5a6ab331e037abd34f379a631d + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: LGPL-2.1-or-later + run_exports: + weak: + - libxcrypt >=4.4.38 + size: 101957 + timestamp: 1785887123445 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.2-h51789e4_1.conda + sha256: d44878d396713ccf3b355df617f61c40a1442fffcf134392bc6ce0e6c2219369 + md5: f888787e0eab7a8076a67d197e155ffc + depends: + - xkeyboard-config + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libxcb >=1.17.0,<2.0a0 + - xorg-libxau >=1.0.12,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + license: MIT AND MIT-open-group AND HPND AND HPND-sell-variant AND ISC + run_exports: + weak: + - libxkbcommon >=1.13.2,<2.0a0 + size: 942571 + timestamp: 1787178780572 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.4-hf3af7cc_1.conda + sha256: d1906463070c21f3215cd5de93164f31c44d5bac6ae9b5d8f5adf42b1e304039 + md5: 046d9eada488e1a1657c80b55c23da52 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=15 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libxml2 2.15.4 + license: MIT + license_family: MIT + run_exports: {} + size: 569062 + timestamp: 1791465631497 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.4-h7df9aa5_1.conda + sha256: 8c32be9e8720bc413d2b4267517459d7d71fad4a5f398a2aa8319b6d7b8a00e6 + md5: 51e5162f95bd6840f6b2b3169125fff5 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=15 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.4 hf3af7cc_1 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libxml2 + - libxml2-16 >=2.15.4 + size: 46570 + timestamp: 1791465635923 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.45-h8e12856_1.conda + sha256: 3beb51b5ce8d2e0690b8517d3d955972d502cfbe2899279cbb9cbb6ff134d360 + md5: 5c8ce6af1772fcfc2b86d17b825abc8e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libxml2 + - libxml2-16 >=2.15.3 + license: MIT + license_family: MIT + run_exports: + weak: + - libxslt >=1.1.45,<2.0a0 + size: 250314 + timestamp: 1788534852474 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzenohc-1.9.0-hf675912_0.conda + sha256: 258bcd6ed30bb8ff37bc642d3cddd73745d3a41841563c1338a68801799df05c + md5: 470e8500c861b15cf3a6bc32603259f6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - zenoh-rust-abi >=1.9.0.1.93.1,<1.9.0.1.93.2.0a0 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR EPL-2.0 + run_exports: + weak: + - libzenohc >=1.9.0,<1.9.1.0a0 + size: 5048496 + timestamp: 1777493052497 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda + sha256: eb8a0db0aa570124f7d2a93d7c7f596e3390df5e047818d873baad32985fc736 + md5: 0de0122d9570a8ab637c6b73db268389 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - zlib 1.3.2 *_3 + license: Zlib + license_family: Other + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 + size: 63713 + timestamp: 1785362952714 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lttng-ust-2.13.9-hf5eda4c_0.conda + sha256: 77ea6f9546bb8e4d6050b4ad8efb9bfb2177e9173a03b4d9eae6fd8ce1056431 + md5: bf1ee9cd230a64573a8b7745c6aaa593 + depends: + - liburcu + - libgcc >=13 + - __glibc >=2.17,<3.0.a0 + - liburcu >=0.14.0,<0.15.0a0 + license: LGPL-2.1-only + run_exports: + weak: + - lttng-ust >=2.13.9,<2.14.0a0 + size: 375355 + timestamp: 1745310024643 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lxml-6.1.3-py312h663fcd5_0.conda + sha256: 7ae87ca339fdc617c370a07da78ff8e950ceddf22f46fc2cac61c9f8ebafc84a + md5: 208336d5a9afe597e8a6d7004b108ef0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libxml2 + - libxml2-16 >=2.15.4 + - libxslt >=1.1.45,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause and MIT-CMU + run_exports: {} + size: 1595760 + timestamp: 1789036626350 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-4.4.5-py312hc6a72db_2.conda + sha256: 3e840f3334eb0b73056c037d7e885c84dc6f1dd77d7130ac51fd51aa1fb33d88 + md5: a98e678cb247b751c1148fdc9deb5189 + depends: + - python + - lz4-c + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - lz4-c >=1.10.0,<1.11.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 43863 + timestamp: 1789242260635 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-hee9eb32_2.conda + sha256: b8c0e930183e6b7f83cd35ace102f2b8c2f0faae41dc05255dc72f247dfc556a + md5: e38a3253d72ab07d471483f24947e2a2 + depends: + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.17,<3.0.a0 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - lz4-c >=1.10.0,<1.11.0a0 + size: 181812 + timestamp: 1786717122815 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_1.conda + sha256: 5d46557214ed184381dafe835b7c94a474a1c3b307a08a250b1ea4779b44ffb3 + md5: ee6c0cd80a60961a1f48aa3e0b91f986 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: X11 AND BSD-3-Clause + run_exports: + weak: + - ncurses >=6.6,<7.0a0 + size: 911196 + timestamp: 1786355078102 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.4-py312he827f4e_0.conda + sha256: 8d562d8fcc44a93c65793a361f39a75712bb3cf2aa1d1a09bcc8ef072e54a1c3 + md5: 759b701f4b548ff6d06794d99788e6bb + depends: + - python + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - liblapack >=3.9.0,<4.0a0 + - python_abi 3.12.* *_cp312 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - numpy >=1.25,<3 + size: 9240540 + timestamp: 1791675329565 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.5-h781a0a9_0.conda + sha256: 9c1533f1cf784f0e250919c0c9762d0b0e6bc727a79290ffb7cea1ceca1d038c + md5: 5a51a2ea653f120240b1a9bf76e0aae9 + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=15 + license: Apache-2.0 + license_family: Apache + run_exports: + weak: + - openssl >=3.6.5,<4.0a0 + size: 3195299 + timestamp: 1791098052301 +- conda: https://conda.anaconda.org/conda-forge/linux-64/orocos-kdl-1.5.4-h761dd02_0.conda + sha256: 1b38fbe36a791be8e7638fdf1681ef12f392973d1e04d7f54f963c863e71e6ca + md5: e3a80e4648aedfa794abe49879d38384 + depends: + - __glibc >=2.17,<3.0.a0 + - eigen + - eigen-abi >=5.0.1.80,<5.0.1.81.0a0 + - libgcc >=15 + - libstdcxx >=15 + license: LGPL-2.1-or-later + license_family: LGPL + run_exports: + weak: + - orocos-kdl >=1.5.4,<1.6.0a0 + size: 388191 + timestamp: 1788266506880 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.58.2-h7bb47b9_1.conda + sha256: 47c3d25a0bdb0ae50627f9ef2a10345fabfabe0e6620cbcff04e589a644542d3 + md5: 0b889b1c6b472d215d6332c6b195589c + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + - fribidi >=1.0.16,<2.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=15 + - libglib >=2.88.3,<3.0a0 + - libharfbuzz >=14.4.0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + license: LGPL-2.1-or-later + run_exports: + weak: + - pango >=1.58.2,<2.0a0 + size: 471814 + timestamp: 1788490377724 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre-8.45-h9c3ff4c_0.tar.bz2 + sha256: 8f35c244b1631a4f31fb1d66ab6e1d9bfac0ca9b679deced1112c7225b3ad138 + md5: c05d1820a6d34ff07aaaab7a9b7eddaa + depends: + - libgcc-ng >=9.3.0 + - libstdcxx-ng >=9.3.0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - pcre >=8.45,<9.0a0 + size: 259377 + timestamp: 1623788789327 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-h8b3dc9c_1.conda + sha256: 9ebb10a4eb3be51ae67d85c679f5a7a50cb040ed25c783e6331a225ea09991d4 + md5: 06f6113cf1ff4a54b65f87ead132a5f1 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=15 + - libzlib >=1.3.2,<2.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - pcre2 >=10.47,<10.48.0a0 + size: 1218833 + timestamp: 1787294571916 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_3.conda + sha256: 829d8288764282de5a9f7b9169acb75cc7dc0b6c3fe2535cfe87dea3436bbc5d + md5: 0ee5bb30034b081a1386c1e2c98ab0a7 + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + run_exports: + weak: + - pixman >=0.46.4,<1.0a0 + size: 376704 + timestamp: 1786106621354 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pkg-config-0.29.2-h1114479_1013.conda + sha256: 8f27ee1b6166c5be505dba4b0dd0f3b3b81ddec811f6118cc337b90cbd3937a4 + md5: 0aab2923309084c5f89ef32cd39a19b2 + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + license: GPL-2.0-or-later + license_family: GPL + run_exports: {} + size: 141376 + timestamp: 1788677377648 +- conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h1b36aeb_3.conda + sha256: 9b6f0247591f062a188cd42580916476c0d939a89d65f3ecefb37e84b5c17d7a + md5: 2f8faed6c111c9ed0c1d217bc1be75f2 + depends: + - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 225549 + timestamp: 1789682039049 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h7cc23a3_1004.conda + sha256: 4a44fd00ea73b79ca2c89b0727b9ccf61c506ead71e67a9abfa4c590042b5a4a + md5: bb66b610707b811e3c65181a6431e7a8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: MIT + license_family: MIT + run_exports: {} + size: 9630 + timestamp: 1788381877753 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pybullet-3.25-py312hf49885f_5.conda + sha256: 849bbe715c3d3e3c89f19a096d0158ce712022f387829ba222c327c533b747d4 + md5: 82f56eb2ea7b24643993dea9f715b101 + depends: + - __glibc >=2.17,<3.0.a0 + - bullet-cpp 3.25 hcbe3ca9_5 + - libgcc >=13 + - libstdcxx >=13 + - libzlib >=1.3.1,<2.0a0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Zlib + run_exports: {} + size: 62838622 + timestamp: 1761041325516 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.15-h5f976f7_2_cpython.conda + build_number: 2 + sha256: f8a38c33f627c68e35d02cc5a11eff25eadb853791ac40bf9cc569315d25bc54 + md5: 13cef25ee4055b1fec19d35d20aadda2 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.8.5,<3.0a0 + - libffi >=3.7.0,<3.8.0a0 + - libgcc >=15 + - liblzma >=5.8.3,<6.0a0 + - libnsl >=2.0.1,<2.1.0a0 + - libpython 3.12.15 ha57cdbe_2_cpython + - libsqlite >=3.54.0,<4.0a0 + - libuuid >=2.42.4,<3.0a0 + - libxcrypt >=4.4.38 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - openssl >=3.5.9,<4.0a0 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + run_exports: + weak: + - python_abi 3.12.* *_cp312 + noarch: + - python + size: 23065587 + timestamp: 1791911147011 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-orocos-kdl-1.5.4-py312ha6a3dbb_0.conda + sha256: 4be49b67ff1ffa421808babfc3d044be44bf5215982b9724b03ca720315bea68 + md5: 9d876f730ab5ce54c3cf8c8f526b2c17 + depends: + - __glibc >=2.17,<3.0.a0 + - eigen + - libgcc >=15 + - libstdcxx >=15 + - orocos-kdl + - pybind11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: LGPL-2.1-or-later + license_family: LGPL + run_exports: + weak: + - python-orocos-kdl >=1.5.4,<1.6.0a0 + size: 388347 + timestamp: 1788266634635 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda + sha256: cb142bfd92f6e55749365ddc244294fa7b64db6d08c45b018ff1c658907bfcbf + md5: 15878599a87992e44c059731771591cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + run_exports: {} + size: 198293 + timestamp: 1770223620706 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.2.0-py312h8a5ba0d_2.conda + noarch: python + sha256: d1323678d9403504d05cdf6a65bbd648f8667a89d9d5d4146ff96bae0e5311a7 + md5: 2186325469ffe83c7b8807d638a478d9 + depends: + - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - zeromq >=4.3.5,<4.4.0a0 + - _python_abi3_support 1.* + - cpython >=3.12 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 216556 + timestamp: 1789730121925 +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-hd6e31c0_1.conda + sha256: 01b3fe073a66e321970d09e04b388708f8cbdca5cdfbfcb7c9eeb470ad10383d + md5: 69c01c781e7c8190bbdaf79e3848c5ca + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - ncurses >=6.6,<7.0a0 + license: GPL-3.0-only + license_family: GPL + run_exports: + weak: + - readline >=8.3,<9.0a0 + size: 348899 + timestamp: 1787033801506 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb03c661_2.conda + sha256: 186a5b225077ad5f4656966da947d43307101950751ef4a239b455588756b4e1 + md5: 007602d697e07c11ff9864964eba5ee3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + run_exports: + weak: + - rhash >=1.4.6,<2.0a0 + size: 194994 + timestamp: 1786731436520 +- conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.17.0-hb6aa676_2.conda + sha256: 5fca627690d56c6f87a9dabafceee54cb75d7da392309bb080333948c048365a + md5: 5e32ceeb7b9514ce4730565052829dbd + depends: + - __glibc >=2.17,<3.0.a0 + - fmt >=12.1.0,<12.2.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + run_exports: + weak: + - spdlog >=1.17.0,<1.18.0a0 + size: 197438 + timestamp: 1785924346496 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.54.0-h9ffa6c4_1.conda + sha256: ebd43ed55fe220d0bbf931f2b7689d122d73a77a44d008ea9aff1c145882518b + md5: 1060a8b69c6774ec85d81878eb299038 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=15 + - libsqlite 3.54.0 h13e7031_1 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - readline >=8.3,<9.0a0 + license: blessing + run_exports: + weak: + - libsqlite >=3.54.0,<4.0a0 + size: 219575 + timestamp: 1791584382180 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tinyxml2-11.0.0-hee9eb32_1.conda + sha256: 856be65b3a1f11cec5a6d183b38da6c6fa5bdfe85d166fc38515a90af9ae4179 + md5: 860bb6160ae0ac9b8b844f7382bd3313 + depends: + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + license: Zlib + run_exports: + weak: + - tinyxml2 >=11.0.0,<11.1.0a0 + size: 132572 + timestamp: 1789420786161 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h1df4ec4_4.conda + build_number: 104 + sha256: a1a241d172c1ccab067ba245206dd048bc3c2d1b84504b53c9468e99adfc16a1 + md5: 676a2f9b1c4fcf57b70aa5c65f6c60d0 + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - xorg-libx11 >=1.8.13,<2.0a0 + license: TCL + run_exports: + weak: + - tk >=8.6.13,<8.7.0a0 + size: 3566806 + timestamp: 1787272857910 +- conda: https://conda.anaconda.org/conda-forge/linux-64/uncrustify-0.83.0-h54a6638_0.conda + sha256: 556ea427c375c2b9eb3122b19a1ce0891d535ad51a196f25c73786bb1d7c5156 + md5: 29f7fdf10a9604e18924eebbde71ce62 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: GPL-2.0-only + license_family: GPL + run_exports: {} + size: 748418 + timestamp: 1779015692186 +- conda: https://conda.anaconda.org/conda-forge/linux-64/urdfdom-6.0.1-hf2e7533_0.conda + sha256: c4d8c6f6cf4ab81255aceb23af497ba864d64ed38d3234bdb97f5112f45a2625 + md5: 8c7007ab40976f8daf6a87ab85e66726 + depends: + - urdfdom_headers >=3.0.1,<4.0a0 + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - console_bridge >=1.0.2,<1.1.0a0 + - tinyxml2 >=11.0.0,<11.1.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - urdfdom_headers >=3.0.1,<4.0a0 + - urdfdom >=6.0.1,<7.0a0 + size: 109703 + timestamp: 1787009837617 +- conda: https://conda.anaconda.org/conda-forge/linux-64/urdfdom_headers-3.0.1-h4dbf13b_1.conda + sha256: 3cd3b0bda2828275bf24cfb1b20c8d304dc0213d801071341ec71b089ca2920c + md5: dc46bb96e69b340067324e235a180c1b + depends: + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 22402 + timestamp: 1787006267023 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.26.0-hc1c935e_2.conda + sha256: df65b987979e6d7f88e756494da5a230d4f2d08d17437d04eecd35559c3a04e4 + md5: 88a47e22b53e50865b1cabe2eb648352 + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.8.1,<3.0a0 + - libffi >=3.7.0,<3.8.0a0 + - libgcc >=15 + - libstdcxx >=15 + license: MIT + license_family: MIT + run_exports: + weak: + - wayland >=1.26.0,<2.0a0 + size: 340058 + timestamp: 1787793849093 +- conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-17.2-py312h89dfda2_0.conda + sha256: dc5b823abf8cafad8405f2a27449d745f268ebbc0bc279c451e681cfe7c97363 + md5: aae4b5c5eb092eb92977cbfa66ba5631 + depends: + - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 412738 + timestamp: 1791057460950 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.48-h280c20c_0.conda + sha256: 3b04afd5d1a65d2d27ac2d49a63b01ab8bcd875776779ec63e337370ed38afdc + md5: b233b41be0bf210989d57160ed39b394 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + run_exports: {} + size: 441670 + timestamp: 1782027360439 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-h280c20c_0.conda + sha256: 49b532d1df875c6749d9078b56a76f3f5db49a5abe0ca620b593ed474ef0ebf1 + md5: 85c9442aec283b4e464fa9ecc484a2f3 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libice >=1.1.2,<2.0a0 + size: 62517 + timestamp: 1786474410404 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-h0d788c3_1.conda + sha256: ef907caee0665cf3b0f775602cc50e388e3bade8ce22ecade0873ff26604b2fd + md5: aa7459ed9ad086ba11dda843d764b33d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libice >=1.1.2,<2.0a0 + - libuuid >=2.42.2,<3.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libsm >=1.2.6,<2.0a0 + size: 30739 + timestamp: 1786545374265 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_1.conda + sha256: 68053eebfa9f0d91666786c8fb5839d989aa9b869add92cb8815228bb2d7302c + md5: 8c282bbe4808a3cc80a5c98e9aec1cfc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libx11 >=1.8.13,<2.0a0 + size: 839578 + timestamp: 1787087012372 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-h7cc23a3_2.conda + sha256: 3ec065b94554dc48a4ca582a960a5484bc166b26e83ce0954653e08d17e8bd53 + md5: da33efee1a93603d92e06d4a2b68def6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxau >=1.0.12,<2.0a0 + size: 18793 + timestamp: 1788960512381 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + sha256: 048c103000af9541c919deef03ae7c5e9c570ffb4024b42ecb58dbde402e373a + md5: f2ba4192d38b6cef2bb2c25029071d90 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxcomposite >=0.4.7,<1.0a0 + size: 14415 + timestamp: 1770044404696 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + sha256: 832f538ade441b1eee863c8c91af9e69b356cd3e9e1350fff4fe36cc573fc91a + md5: 2ccd714aa2242315acaf0a67faea780b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + - xorg-libxrender >=0.9.11,<0.10.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxcursor >=1.2.3,<2.0a0 + size: 32533 + timestamp: 1730908305254 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + sha256: 43b9772fd6582bf401846642c4635c47a9b0e36ca08116b3ec3df36ab96e0ec0 + md5: b5fcc7172d22516e1f965490e65e33a4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxdamage >=1.1.6,<2.0a0 + size: 13217 + timestamp: 1727891438799 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-h7cc23a3_2.conda + sha256: 8a095df9bc1d2e50f2504ce8858a047ae29ea634aad6cc0b43298c63361da6d9 + md5: eabfc45786244de252090cf8d55128a8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxdmcp >=1.1.5,<2.0a0 + size: 22606 + timestamp: 1789676943335 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-h7cc23a3_1.conda + sha256: aa9bbe8b278aacc194e280ff5037f9f9a1f2c5b33ed97de8e7f01cfbe90dda43 + md5: e5b6b28536b81b3f4cb20db4668a4642 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxext >=1.3.7,<2.0a0 + size: 53124 + timestamp: 1787100841900 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-h7cc23a3_1.conda + sha256: aec84f554fc897bf4085c7bc8b8f0740e4c224e13bca3cc51c93e7699d56f83a + md5: 09132e874fe0e1f5e4492b0b6b904b6e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxfixes >=6.0.2,<7.0a0 + size: 21440 + timestamp: 1787248059682 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-h7cc23a3_1.conda + sha256: a523d71344a2f640efe6fc42b88fc261d9cd389d4f9838a5d42dcdb120c2b0c8 + md5: a1412b2b1184dacda45f8476fef2cc25 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxi >=1.8.3,<2.0a0 + size: 49165 + timestamp: 1787257060460 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxinerama-1.1.6-hecca717_0.conda + sha256: 3a9da41aac6dca9d3ff1b53ee18b9d314de88add76bafad9ca2287a494abcd86 + md5: 93f5d4b5c17c8540479ad65f206fea51 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxinerama >=1.1.6,<1.2.0a0 + size: 14818 + timestamp: 1769432261050 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-h7cc23a3_1.conda + sha256: 05a7f25d7f7f5cd32b27a019233ece97167fd8ade255bc13a0e49e53387f4c30 + md5: 798a8c9d171859a022e1cb89e7d0eb10 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxrender >=0.9.12,<0.10.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxrandr >=1.5.5,<2.0a0 + size: 31106 + timestamp: 1787246614086 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb03c661_1.conda + sha256: 6901f91d398811e4ec89d7e20a69abac02a7bfebfaf073338b7ea3d1a99685b7 + md5: e470d224a7a5be1b1d021bded7abb536 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxrender >=0.9.12,<0.10.0a0 + size: 34645 + timestamp: 1787100191192 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-h7cc23a3_4.conda + sha256: d66525e7b1c492aa179c6c55610fc8dfb0a9a62ea7d4fb9f904fa6af62127f61 + md5: 752a5ac9322e0fbbc24146c1ce3ae44e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxi >=1.8.3,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxtst >=1.2.5,<2.0a0 + size: 35052 + timestamp: 1787360025506 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + sha256: 64db17baaf36fa03ed8fae105e2e671a7383e22df4077486646f7dbf12842c9f + md5: 665d152b9c6e78da404086088077c844 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxxf86vm >=1.1.7,<2.0a0 + size: 18701 + timestamp: 1769434732453 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hebe6cf0_3.conda + sha256: 8e9c7ca4fcfe9f0c300e4aa853b79c25411fc4e470decfe8f909b74f60dfb6dd + md5: c3d0a6f03ba3aa312777b41b20a71ec0 + depends: + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + run_exports: {} + size: 596340 + timestamp: 1788874111132 +- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-hebe6cf0_3.conda + sha256: d164dfa75ecd538f6fd68765defcc06aa875bc697b9b215362d79a2a73125dd0 + md5: e741576fb8f89821ac7c1c537322a33d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + license: MIT + license_family: MIT + run_exports: + weak: + - yaml >=0.2.5,<0.3.0a0 + size: 84936 + timestamp: 1787228426393 +- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h54a6638_1.conda + sha256: 425808ebd2a20bfc460995293995e1fa0510e93c300535e2ec3622bd3d84288c + md5: 18bf4b05b458fb8135987e47364f3dcb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + run_exports: + weak: + - yaml-cpp >=0.8.0,<0.9.0a0 + size: 242654 + timestamp: 1785923983284 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zenoh-rust-abi-1.9.0.1.93.1-hbe27b5b_0.conda + sha256: 5b5d5a2fb37f6ceed0c85a0ab640b0a1e3fb888dc7bf5bae73fe7ee7f22dba08 + md5: 5571b414f694e52e90f286bdfba56b7d + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - __glibc >=2.17 + license: Apache-2.0 OR EPL-2.0 + run_exports: + weak: + - zenoh-rust-abi >=1.9.0.1.93.1,<1.9.0.1.93.2.0a0 + size: 52693 + timestamp: 1775854540199 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h901266b_12.conda + sha256: 37dc9a5ff564fdce07c5ad002ee572057cf41dedda274d7abc154e77094d981a + md5: 292a05f1436b98e17055090b5ef07746 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - libsodium >=1.0.22,<1.0.23.0a0 + - krb5 >=1.22.2,<1.23.0a0 + license: MPL-2.0 + license_family: MOZILLA + run_exports: + weak: + - zeromq >=4.3.5,<4.4.0a0 + size: 321839 + timestamp: 1789076548604 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda + sha256: 47d682b9f6d6ec9eb1a6e6c3e75ea6273e899e78fb7fc59f81d39745009fbc60 + md5: aa459086047c0e5e27023ab19f8cb86a + depends: + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.2,<2.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - zstd >=1.5.7,<1.6.0a0 + size: 601301 + timestamp: 1786599621503 +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda + sha256: 2a7204314663eeda5dec482a956f0e2eaf289bd5b9953eaaaad0e81aa64638f2 + md5: 3845f3d75991bae0fb90884662f4327c + depends: + - cpython + - python-gil + license: MIT + license_family: MIT + run_exports: {} + size: 8144 + timestamp: 1784221492234 +- conda: https://conda.anaconda.org/conda-forge/noarch/adwaita-icon-theme-51.0-unix_0.conda + sha256: def01b148aa54d4de29b7d4bf58d941c8699582201db14cf78c6c89fa1666434 + md5: 6f62266fb2bfc35a5071cfa1d6ffdcc9 + depends: + - __unix + - hicolor-icon-theme + - librsvg + license: LGPL-3.0-or-later OR CC-BY-SA-3.0 + run_exports: {} + size: 687517 + timestamp: 1790100765464 +- conda: https://conda.anaconda.org/conda-forge/noarch/argcomplete-3.7.2-pyhcf101f3_0.conda + sha256: 7a0e771e709b1620a914ba8a9590433c4a9fd84779d137216ac29ca50e959a1f + md5: 5185c9f9742daeffae5daae93c802bf7 + depends: + - python >=3.10 + - python + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 47150 + timestamp: 1786180543999 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-h4c7d964_0.conda + sha256: 95e8e74062a5fe5f870ac8c90302b6e89945165fdaed7810606e84ddee6aac12 + md5: e27d2ac27b096dc51fedfcf775a53f9b + depends: + - __win + license: ISC + run_exports: {} + size: 132136 + timestamp: 1784754918886 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda + sha256: 0a0544cf95f64394fe4959286f5c71f5444ad58feb0602e53becb27448d24da6 + md5: 0f51e2391ade309db462a55611263e9c + depends: + - __unix + license: ISC + run_exports: {} + size: 131780 + timestamp: 1784754889428 +- conda: https://conda.anaconda.org/conda-forge/noarch/catkin_pkg-1.1.1-pyhd8ed1ab_0.conda + sha256: c53d1027a07550751faef1dd38304774fa086ca3273bac64e29e9b7c81196d14 + md5: f7f3b95952222db98fdcceadb6d967bc + depends: + - docutils + - packaging + - pyparsing >=1.5.7 + - python >=3.11 + - python-dateutil + - setuptools + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 54898 + timestamp: 1788990651726 +- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 + md5: 962b9857ee8e7018c22f2776ffa0b2d7 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 27011 + timestamp: 1733218222191 +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.15-py312hd8ed1ab_2.conda + noarch: generic + sha256: 69444bf2d39b7385194cf3481ed1910f39a5d0c86c8f6ca3884e761f6e6dedee + md5: 34ff082ed834c6a62f4b11f877820c1d + depends: + - python >=3.12,<3.13.0a0 + - python_abi * *_cp312 + license: Python-2.0 + run_exports: {} + size: 47636 + timestamp: 1791910093855 +- conda: https://conda.anaconda.org/conda-forge/noarch/distro-1.9.0-pyhd8ed1ab_1.conda + sha256: 5603c7d0321963bb9b4030eadabc3fd7ca6103a38475b4e0ed13ed6d97c86f4e + md5: 0a2014fd9860f8b1eaa0b1f3d3771a08 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 41773 + timestamp: 1734729953882 +- conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.23-pyhcf101f3_0.conda + sha256: def3b2566a1702fa083a8984753ac0b3e3f7381048f88714e03d55b7bd930b74 + md5: 2c3958e02221c2504ec036139e648d8b + depends: + - python >=3.10 + - python + license: LGPL-3.0-only + license_family: LGPL + run_exports: {} + size: 459540 + timestamp: 1779967837277 +- conda: https://conda.anaconda.org/conda-forge/noarch/empy-4.2.1-pyhcf101f3_0.conda + sha256: f831ec5f5b8668334144a66597fe36878c9023e064e750c5ea1f4371e92b2249 + md5: 696485a5ee969484941274d218dfacf5 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 99405 + timestamp: 1787208879550 +- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 + md5: 8e662bd460bda79b1ea39194e3c4c9ab + depends: + - python >=3.10 + - typing_extensions >=4.6.0 + license: MIT and PSF-2.0 + run_exports: {} + size: 21333 + timestamp: 1763918099466 +- conda: https://conda.anaconda.org/conda-forge/noarch/flake8-7.4.1-pyhd8ed1ab_0.conda + sha256: 990c166a4f8098ef0059ba67314b40e0871cd98f2a3d83815e5f6a773a345e9f + md5: f4d07684b7bc06e5072000caa73ec0f4 + depends: + - mccabe >=0.7.0,<0.8.0 + - pycodestyle >=2.15.0,<2.16.0 + - pyflakes >=4.0.0,<4.1.0 + - python >=3.11 + license: MIT + license_family: MIT + run_exports: {} + size: 112708 + timestamp: 1790372802431 +- conda: https://conda.anaconda.org/conda-forge/noarch/flake8-builtins-3.1.0-pyhd8ed1ab_0.conda + sha256: d022684576c0c6f474bddbc263c82a3ba303c3bd09185d15af4eb7b60e896d7f + md5: 5cbaa86cc684a52a057831cbcb3bd5b9 + depends: + - flake8 + - python >=3.10 + license: GPL-2.0-only + license_family: GPL2 + run_exports: {} + size: 19501 + timestamp: 1761594405382 +- conda: https://conda.anaconda.org/conda-forge/noarch/flake8-comprehensions-3.17.0-pyhd8ed1ab_0.conda + sha256: a0427b75e67d6f2f41f7645b850ac028876bee3a11d8fbaa18d88fd61b467a94 + md5: 9f5bd5fb0aa24273e9cce97830629e20 + depends: + - flake8 >=3.0,!=3.2.0 + - python >=3.10 + license: MIT + license_family: MIT + run_exports: {} + size: 14049 + timestamp: 1757526877129 +- conda: https://conda.anaconda.org/conda-forge/noarch/flake8-docstrings-1.7.0-pyhd8ed1ab_0.conda + sha256: e0757805056f7ad3c7172ca4eaf79c9db4a7d23b858aa8fdcdfbd25f8ad7254d + md5: d66b253112adf72dc5edeabe41b88dce + depends: + - flake8 >=3 + - pydocstyle >=2.1 + - python >=3.7 + license: MIT + license_family: MIT + run_exports: {} + size: 10395 + timestamp: 1675285794906 +- conda: https://conda.anaconda.org/conda-forge/noarch/flake8-import-order-0.19.2-pyhd8ed1ab_0.conda + sha256: 046902c4b7b07877e68c5dd638f92ece9416fe1b10153dd7d617b91c4f18946c + md5: f4b095568df0c12ab60f8519cb203317 + depends: + - flake8 + - pycodestyle + - python >=3.9 + - setuptools + license: LGPL-3.0-only + license_family: LGPL + run_exports: {} + size: 21041 + timestamp: 1750969641622 +- conda: https://conda.anaconda.org/conda-forge/noarch/flake8-quotes-3.4.0-pyhd8ed1ab_1.conda + sha256: 72129d47a933843df04e98f9afb27b3c2345d89f6c4b6637ea9cd1846960ad67 + md5: adde488e6dff56bffd2e5f428ae8cded + depends: + - flake8 + - python >=3.9 + license: MIT + license_family: MIT + run_exports: {} + size: 14776 + timestamp: 1735335323771 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b + md5: 0c96522c6bdaed4b1566d11387caaf45 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 397370 + timestamp: 1566932522327 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c + md5: 34893075a5c9e55cdafac56607368fc6 + license: OFL-1.1 + license_family: Other + run_exports: {} + size: 96530 + timestamp: 1620479909603 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 + md5: 4d59c254e01d9cde7957100457e2d5fb + license: OFL-1.1 + license_family: Other + run_exports: {} + size: 700814 + timestamp: 1620479612257 +- conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 + md5: 49023d73832ef61042f6a237cb2687e7 + license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 + license_family: Other + run_exports: {} + size: 1620504 + timestamp: 1727511233259 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 + md5: fee5683a3f04bd15cbd8318b096a27ab + depends: + - fonts-conda-forge + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 3667 + timestamp: 1566974674465 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + sha256: 54eea8469786bc2291cc40bca5f46438d3e062a399e8f53f013b6a9f50e98333 + md5: a7970cd949a077b7cb9696379d338681 + depends: + - font-ttf-ubuntu + - font-ttf-inconsolata + - font-ttf-dejavu-sans-mono + - font-ttf-source-code-pro + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 4059 + timestamp: 1762351264405 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.1-pyhcf101f3_0.conda + sha256: 95a074a7d3f58b3494c068d4789c364dcb591c56b70ca6b12f149a540f9aeea4 + md5: 77ec68e0aa61c3fff9ecbf840f93d64e + depends: + - python >=3.10 + - zipp >=3.20 + - python + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 34920 + timestamp: 1787943971257 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda + sha256: a563a51aa522998172838e867e6dedcf630bc45796e8612f5a1f6d73e9c8125a + md5: 0ba6225c279baf7ea9473a62ea0ec9ae + depends: + - python >=3.10 + - zipp >=3.1.0 + constrains: + - importlib-resources >=7.1.0,<7.1.1.0a0 + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 34809 + timestamp: 1776068839274 +- conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.1-pyhd8ed1ab_0.conda + sha256: 8f53876d0fb3525235e39635dd55633abe0a4307b1b3ab1415c80a9e0bbdf663 + md5: c0a803d97dd09da7e2c8b0fdfaa5739b + depends: + - python >=3.11 + license: MIT + license_family: MIT + run_exports: {} + size: 14485 + timestamp: 1791588553866 +- conda: https://conda.anaconda.org/conda-forge/noarch/lark-parser-0.12.0-pyhd8ed1ab_1.conda + sha256: 7f1ad9630a87005a90099ad3ff883ac7a3fe5e85b9eb232d1f8ad0a670059cca + md5: 222dd97cb2d5da1638de5077da60712f + depends: + - python >=3.6 + license: MIT + license_family: MIT + run_exports: {} + size: 86134 + timestamp: 1725742423890 +- conda: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda + sha256: 9b0037171dad0100f0296699a11ae7d355237b55f42f9094aebc0f41512d96a1 + md5: 827064ddfe0de2917fb29f1da4f8f533 + depends: + - python >=3.9 + license: MIT + license_family: MIT + run_exports: {} + size: 12934 + timestamp: 1733216573915 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda + sha256: c432626b16768b8dab228bfb706f7060c2d462a21c516d240f68f2f902b5a044 + md5: 936687ed80f295a1f5dbcf8bd34c252c + depends: + - python >=3.9 + - python + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 116363 + timestamp: 1785888127370 +- conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + sha256: e14aafa63efa0528ca99ba568eaf506eb55a0371d12e6250aaaa61718d2eb62e + md5: d7585b6550ad04c8c5e21097ada2888e + depends: + - python >=3.9 + - python + license: MIT + license_family: MIT + run_exports: {} + size: 25877 + timestamp: 1764896838868 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.1.0-pyh293190f_0.conda + sha256: 54ea7a186ccf7ef2c98d3cc29c1c68ddffff0d74bc3321ebb22a56e91e1c3aa9 + md5: 5aa0ad32112cbfc1cf0f2b3c600be4a5 + depends: + - python >=3.9 + - pybind11-global ==3.1.0 *_0 + - python + constrains: + - pybind11-abi ==12 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 254992 + timestamp: 1786200320545 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.1.0-pyh648e204_0.conda + sha256: 684d30c86f505916b44f205b8f5a153b1779df462233ce380b39f777d82126aa + md5: 534548c7e6102ae9a408957380937b52 + depends: + - python >=3.9 + - __unix + - python + constrains: + - pybind11-abi ==12 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 247376 + timestamp: 1786200320545 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.1.0-pyhc8003f9_0.conda + sha256: c2c9ae8665c7273a68920ac4245e98bc0ed60bf632093076d48d9b519e5a8275 + md5: 03c5c8e879d0da779cba5e8d18dccad2 + depends: + - python >=3.9 + - __win + - python + constrains: + - pybind11-abi ==12 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 246559 + timestamp: 1786200319978 +- conda: https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.15.0-pyh5ded981_0.conda + sha256: a1a7373d58dcff0570da5f8b5834b0fc9474a09dd27602c9621c126dc018342a + md5: 6ac7726367d7b5b7378630d2e0ef94e6 + depends: + - python >=3.11 + - python + license: MIT + license_family: MIT + run_exports: {} + size: 36832 + timestamp: 1790193282432 +- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.11-pyh5ded981_0.conda + sha256: 99af7c6061d7aa73cfcef615500ddf3e9f4a58c844646b7d7ce58147fb5758d7 + md5: 3cd164745122ab557cc30879390089e8 + depends: + - python >=3.11 + - python + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 58624 + timestamp: 1791592610066 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydocstyle-6.3.0-pyhd8ed1ab_1.conda + sha256: 83ab8434e3baf6a018914da4f1c2ae9023e23fb41e131b68b3e3f9ca41ecef61 + md5: a36aa6e0119331d3280f4bba043314c7 + depends: + - python >=3.9 + - snowballstemmer >=2.2.0 + - tomli >=1.2.3 + license: MIT + license_family: MIT + run_exports: {} + size: 40236 + timestamp: 1733261742916 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyflakes-4.0.3-pyhd8ed1ab_0.conda + sha256: 57bcc03e8448ca1cbe75f3e6f09daf85b801f2970ed1b1c2503563ab75759ead + md5: 369125e048091f31b6e59fa9573dd944 + depends: + - python >=3.11 + license: MIT + license_family: MIT + run_exports: {} + size: 62633 + timestamp: 1791406421225 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.21.0-pyhcf101f3_0.conda + sha256: f5f015ff1bc3e1b7fc08eee096b1865234189ae0b82bebdb86a5369116e42fa0 + md5: 2882dee445dfa45b0c5afce3ffb7730a + depends: + - python >=3.10 + - python + license: BSD-2-Clause + license_family: BSD + run_exports: {} + size: 959376 + timestamp: 1786995678795 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.3-pyh5ded981_0.conda + sha256: dc10d64d4b9a1310083b2f563416ab45560ee2a04fd6baab40f223f2b1ab37bc + md5: 8bf43ae1312e9b966063459e04c20fa7 + depends: + - python >=3.11 + - python + license: MIT + license_family: MIT + run_exports: {} + size: 114046 + timestamp: 1790063282695 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + sha256: 430051d80765207a7d782b2b188230ba1489d35c6e75fd9903f76cb9fda4af16 + md5: 64c98a12c4e23eb238bf66bbecafdf3c + depends: + - colorama + - pygments >=2.7.2 + - python >=3.10 + - iniconfig >=1.0.1 + - packaging >=22 + - pluggy >=1.5,<2 + - tomli >=1 + - exceptiongroup >=1 + - python + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + run_exports: {} + size: 306724 + timestamp: 1782127176429 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 + md5: 5b8d21249ff20967101ffa321cab24e8 + depends: + - python >=3.9 + - six >=1.5 + - python + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 233310 + timestamp: 1751104122689 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.15-hd8ed1ab_2.conda + sha256: 5369e1ec176100bb10ba6ec38cab261347ea470d95788e52e6008d1a7605165d + md5: deec3cfe011e962fe2eb872f2eae716c + depends: + - cpython 3.12.15.* + - python_abi * *_cp312 + license: Python-2.0 + run_exports: {} + size: 47605 + timestamp: 1791910126472 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-9_cp312.conda + build_number: 9 + sha256: ee9c2922e07afc85fc82d5fa82c9ac2c79da3be3283a5e17bf2f2ae38dbd02fb + md5: 4c32076993e6270825441d059ab5c18b + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 6751 + timestamp: 1788302823694 +- conda: https://conda.anaconda.org/conda-forge/noarch/rosdistro-1.1.0-pyhd8ed1ab_0.conda + sha256: 288f72133d92ee6bd37331e5adac5fd06bb7cf430fe1c2cfc15e4afcd0aa36a7 + md5: 2e59d23b0bf4371f6d03a490c8507e0d + depends: + - catkin_pkg + - python >=3.11 + - pyyaml + - rospkg + - setuptools + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 50402 + timestamp: 1788416157376 +- conda: https://conda.anaconda.org/conda-forge/noarch/rospkg-1.6.3-pyh5ded981_0.conda + sha256: a314c65a0dc94fc7b82da052ee85d26821298f2be4f537e4502e27594868ad57 + md5: aac6b249ad42da2e03c90f399445ef17 + depends: + - python >=3.11 + - catkin_pkg + - pyyaml + - distro + - python + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 32914 + timestamp: 1789833266234 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-84.0.0-pyh332efcf_0.conda + sha256: 9e200ee5f9ff19a4d94e4b51c4856d53dec849f91032f345cf0c6bc3d51a7183 + md5: 62ac906f1cd582c6c264c95625cb9d6f + depends: + - python >=3.10 + license: MIT + license_family: MIT + run_exports: {} + size: 524488 + timestamp: 1786282924579 +- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d + md5: 3339e3b65d58accf4ca4fb8748ab16b3 + depends: + - python >=3.9 + - python + license: MIT + license_family: MIT + run_exports: {} + size: 18455 + timestamp: 1753199211006 +- conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.1.1-pyhd8ed1ab_0.conda + sha256: ad89284ea94821c20ff87e64b948e4afc690cf5202d14c009355b0594cf23aea + md5: 46b6abe31482f6bca064b965696ae807 + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 74456 + timestamp: 1780468201547 +- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.5.0-pyh5ded981_0.conda + sha256: 93b6f517fb7adff00b62be02b798d384a1b34d0e368fdb576fb248bcb3bb9ec7 + md5: 36d6a162326c52d6339c8b606f43932d + depends: + - python >=3.11 + - python + license: MIT + license_family: MIT + run_exports: {} + size: 21687 + timestamp: 1791394576814 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda + sha256: 2d888f90af0686044882c74193ec80a90ec1943145d94a7b1b048958acda1848 + md5: c70ad746c22219b9700931707482992c + depends: + - python >=3.10 + - python + license: PSF-2.0 + license_family: PSF + run_exports: {} + size: 52631 + timestamp: 1783002732887 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + sha256: b928c30ddcb0e3f544c6eade8352737e6e610e263276b90232db6a578ef899d8 + md5: fcb489df604d100968b737f2cb6076c6 + license: LicenseRef-Public-Domain + run_exports: {} + size: 118849 + timestamp: 1784250406640 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.1-pyh5ded981_0.conda + sha256: 3aa601ef121f42dcb79400375e72f833ddc68bc6243f3e5535168b2d69cc9c70 + md5: 6cad4d2cec9b7b64538c225ac91d2e8a + depends: + - python >=3.11 + - python + license: MIT + license_family: MIT + run_exports: {} + size: 24839 + timestamp: 1791091060207 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-8_kmp_llvm.conda + build_number: 8 + sha256: c7c98ce74f6a7ff25aaa4706d06fa41d63a333add4d697b73aa4d8d2d7ad7651 + md5: a2d706b4a7d603524133037c34f7fb76 + depends: + - llvm-openmp >=9.0.1 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - _openmp_mutex >=4.5 + size: 8016 + timestamp: 1788046437162 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/atk-1.0-2.38.0-hd03087b_2.conda + sha256: b0747f9b1bc03d1932b4d8c586f39a35ac97e7e72fe6e63f2b2a2472d466f3c1 + md5: 57301986d02d30d6805fdce6c99074ee + depends: + - __osx >=11.0 + - libcxx >=16 + - libglib >=2.80.0,<3.0a0 + - libintl >=0.22.5,<1.0a0 + constrains: + - atk-1.0 2.38.0 + license: LGPL-2.0-or-later + license_family: LGPL + run_exports: + weak: + - atk-1.0 >=2.38.0 + size: 347530 + timestamp: 1713896411580 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bullet-3.25-h652a6e0_5.conda + sha256: fed166a9cb84c9e3f4186bb49ab5d20665d4733a9bc6d199e5c6e752acee55e8 + md5: a2e9ca6b7cfab1cdaa293766decd807f + depends: + - bullet-cpp 3.25 py312h5978115_5 + - numpy + - pybullet 3.25 py312h3a599b7_5 + - python + license: Zlib + run_exports: {} + size: 11749 + timestamp: 1760949784930 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bullet-cpp-3.25-py312h5978115_5.conda + sha256: 298f93acf9075cb14d9495c2b85cfda952af2c5fb53821251263452adea58808 + md5: 32052330966f4f0b325c3b77aba522cb + depends: + - __osx >=11.0 + - libcxx >=19 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: Zlib + run_exports: + weak: + - bullet-cpp >=3.25,<3.26.0a0 + size: 39457070 + timestamp: 1760949029341 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h4e30115_10.conda + sha256: 8ec22f0ba25cbfc2e64d70cf29459eccd7ffdf6436f6a6ff15bbfef799f7d4f6 + md5: b50612e7d190b8061ab4e7dc119cf4d5 + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + run_exports: + weak: + - bzip2 >=1.0.8,<2.0a0 + size: 124965 + timestamp: 1785906749812 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.8-h74c22ad_2.conda + sha256: 82bdd5a3fcada6afef6255a9bf41172f07b362f36e04a354dc2abc0a29bfb756 + md5: 4cc01a374215de38387d45e19c8c5c9c + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + run_exports: + weak: + - c-ares >=1.34.8,<2.0a0 + size: 197819 + timestamp: 1787169996553 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.18.6-h580cee5_0.conda + sha256: 32ad9b731d0b4c6dd82061201206164b07bd695bc695e5eb3addc0087ed54cca + md5: 0d25672f63cd1c9b08653a0becfbf31a + depends: + - __osx >=11.0 + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.3,<79.0a0 + - libcxx >=21 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libglib >=2.90.0,<3.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + - pixman >=0.46.4,<1.0a0 + license: LGPL-2.1-only or MPL-1.1 + run_exports: + weak: + - cairo >=1.18.6,<2.0a0 + size: 844614 + timestamp: 1790045326889 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.1.1-py312hc892d8b_3.conda + sha256: 2fdabfeb8de0e506c55a4fc0cbc57cf2579ad011959d3234ea695f58beb8dce1 + md5: 3361d7efede75a6caa9041cbaa97b4e9 + depends: + - __osx >=11.0 + - libffi >=3.7.0,<3.8.0a0 + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + run_exports: {} + size: 289165 + timestamp: 1788485306633 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cmake-4.4.4-hf91ab31_0.conda + sha256: 0dd66618a37205201d1b522e7a7188b8bba8f3e4121496a93d8e5743c8549eff + md5: 1dd388142b3f596207223993dd6564ca + depends: + - __osx >=11.0 + - libcxx >=21 + - libexpat >=2.8.5,<3.0a0 + - rhash >=1.4.6,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - libuv >=1.52.1,<2.0a0 + - ncurses >=6.6,<7.0a0 + - libcurl >=8.22.0,<9.0a0 + - liblzma >=5.8.3,<6.0a0 + - bzip2 >=1.0.8,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 20193229 + timestamp: 1791001164107 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/console_bridge-1.0.2-h3e96240_1.tar.bz2 + sha256: f39c48eb54adaffe679fc9b3a2a9b9cd78f97e2e9fd555ec7c5fd8a99957bfc5 + md5: e2dde786c16d90869de84d458af36d92 + depends: + - libcxx >=12.0.1 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - console_bridge >=1.0.2,<1.1.0a0 + size: 17727 + timestamp: 1648912770421 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cppcheck-2.22.0-py312h3286cfa_1.conda + sha256: 39a581f460326c39ad67c82a5c5172dd7bc330d7b66ea4705528e868b14ed7be + md5: 77a57da75b5ec9c1670cb9db2df6c100 + depends: + - pygments + - python + - __osx >=11.0 + - libcxx >=21 + - python_abi 3.12.* *_cp312 + - tinyxml2 >=11.0.0,<11.1.0a0 + - pcre >=8.45,<9.0a0 + license: GPL-3.0-or-later + license_family: GPL + run_exports: {} + size: 2666772 + timestamp: 1790418738052 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cryptography-50.0.2-py311hc28ac56_0.conda + noarch: python + sha256: 0c681f12351d4942decede4ef431f4d4f27720da76c49f0a43f351275eca0bca + md5: db8c959446b5085b7ae417e0d34ddc38 + depends: + - python + - cffi >=2.0 + - __osx >=11.0 + - openssl >=3.5.8,<4.0a0 + - _python_abi3_support 1.* + - cpython >=3.11 + constrains: + - __osx >=11.0 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + run_exports: {} + size: 1770710 + timestamp: 1790790523277 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-5.0.1-hdb59ae0_3.conda + sha256: da0696b71ab191ea0d15feed3d96a21ec85da0633ba0aabd99ca509806f8ea78 + md5: 9fa281383911482a235dade061aecaee + license: MPL-2.0 + license_family: MOZILLA + run_exports: {} + size: 1313767 + timestamp: 1788951329226 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-abi-5.0.1.100-h485a483_3.conda + sha256: e2e3de100d86df96f32b0b4940bb3933096472cea24e06b7d445f0a42dacdf45 + md5: 8cc62684d3c16d59864bf730f1beb6ba + constrains: + - eigen >=5.0.1,<5.0.2.0a0 + license: MPL-2.0 + license_family: MOZILLA + run_exports: {} + size: 13477 + timestamp: 1788951329226 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/eigen-abi-devel-5.0.1.100-h4206fe6_3.conda + sha256: 32d6a2914ddac6c8d4afa7633629350f8f71548ab00a244f80e3d40f12aa395f + md5: 0e873402dd4addc286a947b8577da766 + depends: + - eigen >=5.0.1,<5.0.2.0a0 + - eigen-abi >=5.0.1.100,<5.0.1.101.0a0 + license: MPL-2.0 + license_family: MOZILLA + run_exports: + weak: + - eigen-abi >=5.0.1.100,<5.0.1.101.0a0 + size: 14714 + timestamp: 1788951329226 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/epoxy-1.5.10-hc919400_2.conda + sha256: ba685b87529c95a4bf9de140a33d703d57dc46b036e9586ed26890de65c1c0d5 + md5: 3b87dabebe54c6d66a07b97b53ac5874 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + run_exports: + weak: + - epoxy >=1.5.10,<1.6.0a0 + size: 296347 + timestamp: 1758743805063 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fmt-12.1.0-h99e4e11_1.conda + sha256: ca42427b99ff92228e907bed5f10a1df868180997571d29c230faad2c38e35fd + md5: 891b1202d7b835f215e26a4db685ec7c + depends: + - __osx >=11.0 + - libcxx >=19 + license: MIT + license_family: MIT + run_exports: + weak: + - fmt >=12.1.0,<12.2.0a0 + size: 181008 + timestamp: 1785915450316 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fontconfig-2.18.3-h81aa574_1.conda + sha256: 004570d35fb0eff73ce3ae49b209a47622d0c2e580dd0dc4c61d59626b386a09 + md5: 8ac8cc3fe744b484de4387703134d8b2 + depends: + - __osx >=11.0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libintl >=0.25.1,<1.0a0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + size: 265659 + timestamp: 1786667932256 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/foonathan-memory-0.7.4-h784d473_1.conda + sha256: b51906c87b4ac25a1c547242ffecddf7b6ede8a7b476a648e51bdf72c1ccd97e + md5: 1810482e5a4538faf2fd38516cf7addf + depends: + - libcxx >=19 + - __osx >=11.0 + license: Zlib + run_exports: + weak: + - foonathan-memory >=0.7.4,<0.7.5.0a0 + size: 149779 + timestamp: 1779093141999 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.14.3-hce30654_2.conda + sha256: 90681f1d0658cb2fd49a074f644eb4774272499290487a4bebb1c4df01d6997b + md5: 2f4cc7dc2e6622591735c49dda1b92aa + depends: + - libfreetype 2.14.3 hce30654_2 + - libfreetype6 2.14.3 h2ed5691_2 + license: GPL-2.0-only OR FTL + run_exports: + weak: + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + size: 175388 + timestamp: 1786641016583 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/fribidi-1.0.17-hb001647_0.conda + sha256: 803e78ec4a832a646dae842f09de0bc04acd2613deafa9b11d1970399d24d163 + md5: 29b021cee334af0050bdca46bada6e0e + depends: + - __osx >=11.0 + license: LGPL-2.1-or-later + run_exports: + weak: + - fribidi >=1.0.17,<2.0a0 + size: 63577 + timestamp: 1790011838821 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdk-pixbuf-2.44.8-h5867e2c_2.conda + sha256: 96dcac22eaea2f24b9c92e8be078c3e39058829aa4db2a8103c1a4e85f8925ed + md5: 3a84786e0c929f4a05d08c07be5ec9b3 + depends: + - __osx >=11.0 + - libglib >=2.88.3,<3.0a0 + - libintl >=0.25.1,<1.0a0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libtiff >=4.7.2,<4.8.0a0 + license: LGPL-2.1-or-later + license_family: LGPL + run_exports: + weak: + - gdk-pixbuf >=2.44.8,<3.0a0 + size: 552802 + timestamp: 1788490405006 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.90.0-h06d1d6c_0.conda + sha256: 4c0cd7642611222bc573e93ac761b811839b015e4d0d968ae2e880b944e8b1a9 + md5: 62aed33caa374a6807ba9b2780603b70 + depends: + - libglib ==2.90.0 hccd281b_0 + - libffi + - __osx >=11.0 + - libintl >=0.25.1,<1.0a0 + license: LGPL-2.1-or-later + run_exports: {} + size: 202352 + timestamp: 1789478088421 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmock-1.18.0-hab71263_1.conda + sha256: a9642441fa40bb76db4cbeff521e5a85286255415dc8918f7e3723993d4a97b3 + md5: 2a4ea37423cd1c49ad8761cae3ca04db + depends: + - gtest ==1.18.0 h3feff0a_1 + - gtest >=1.18.0,<1.18.1.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 4459 + timestamp: 1786419406764 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.15-h784d473_1.conda + sha256: 471f34a187fdb4f2df33e26f2e471b16c239a5b277903f643d9c3a8c9a9f44ec + md5: 0c7b78d9ffff4f5a6ca28d346f734d8f + depends: + - libcxx >=19 + - __osx >=11.0 + license: LGPL-2.0-or-later + license_family: LGPL + run_exports: + weak: + - graphite2 >=1.3.15,<2.0a0 + size: 86493 + timestamp: 1786118637573 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphviz-14.1.2-hec8c438_0.conda + sha256: 755c72d469330265f80a615912a3b522aef6f26cbc52763862b6a3c492fbf97c + md5: 1f3d859de3ca2bcaa845e92e87d73660 + depends: + - __osx >=11.0 + - adwaita-icon-theme + - cairo >=1.18.4,<2.0a0 + - fonts-conda-ecosystem + - gdk-pixbuf >=2.44.4,<3.0a0 + - gtk3 >=3.24.43,<4.0a0 + - gts >=0.7.6,<0.8.0a0 + - libcxx >=19 + - libexpat >=2.7.3,<3.0a0 + - libgd >=2.3.3,<2.4.0a0 + - libglib >=2.86.3,<3.0a0 + - librsvg >=2.60.0,<3.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pango >=1.56.4,<2.0a0 + license: EPL-1.0 + license_family: Other + run_exports: + weak: + - graphviz >=14.1.2,<15.0a0 + size: 2218284 + timestamp: 1769427599940 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gtest-1.18.0-h3feff0a_1.conda + sha256: bd766dbe573d345119737ce14e4b25ae6f34f36bba127adbbe8e5f63e7bcc4eb + md5: b16a25abc3aed554b568830f27a49387 + depends: + - __osx >=11.0 + - libcxx >=19 + constrains: + - gmock ==1.18.0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - gtest >=1.18.0,<1.18.1.0a0 + size: 412268 + timestamp: 1786419406764 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gtk3-3.24.52-hc0f3e19_0.conda + sha256: 26862a9898054b8552e55e609e5ce73c7ef1eb28bbe6fb87f0b9109d73cd09df + md5: 5557a2433b1339b8e536c264afea41ef + depends: + - __osx >=11.0 + - atk-1.0 >=2.38.0 + - cairo >=1.18.4,<2.0a0 + - epoxy >=1.5.10,<1.6.0a0 + - fribidi >=1.0.16,<2.0a0 + - gdk-pixbuf >=2.44.5,<3.0a0 + - glib-tools + - harfbuzz >=13.2.1 + - hicolor-icon-theme + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libglib >=2.86.4,<3.0a0 + - libintl >=0.25.1,<1.0a0 + - liblzma >=5.8.2,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + - pango >=1.56.4,<2.0a0 + license: LGPL-2.0-or-later + license_family: LGPL + run_exports: + weak: + - gtk3 >=3.24.52,<4.0a0 + - adwaita-icon-theme + size: 9385734 + timestamp: 1774288504338 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/gts-0.7.6-he42f4ea_4.conda + sha256: e0f8c7bc1b9ea62ded78ffa848e37771eeaaaf55b3146580513c7266862043ba + md5: 21b4dd3098f63a74cf2aa9159cbef57d + depends: + - libcxx >=15.0.7 + - libglib >=2.76.3,<3.0a0 + license: LGPL-2.0-or-later + license_family: LGPL + run_exports: + weak: + - gts >=0.7.6,<0.8.0a0 + size: 304331 + timestamp: 1686545503242 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-14.6.0-hce30654_2.conda + sha256: bce1e0ca60d99d54689217499ce3e0dfba85b1040a1cc053829b7fc32e08c523 + md5: 6b3aa5e8534b5662c136abf1a4a66434 + depends: + - libharfbuzz-devel 14.6.0 hcda0f7c_2 + license: MIT + license_family: MIT + run_exports: + weak: + - libharfbuzz >=14.6.0 + size: 11103 + timestamp: 1791900647143 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/hicolor-icon-theme-0.17-hce30654_3.conda + sha256: 46a4958f2f916c5938f2a6dc0709f78b175ece42f601d79a04e0276d55d25d07 + md5: cfb39109ac5fa8601eb595d66d5bf156 + license: GPL-2.0-or-later + license_family: GPL + run_exports: {} + size: 17616 + timestamp: 1771539622983 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-py310h579977c_2.conda + sha256: 6cdb5dee54c72e56ab189fb3ad33cb28533553d42590e7e831160248f4416a43 + md5: a5efc0b42bb8b42e97d0a29ae3e3c187 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + run_exports: + weak: + - icu >=78.3,<79.0a0 + size: 14070242 + timestamp: 1786545847761 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h34f8a20_2.conda + sha256: aaea1d42b07769920db2af7471ece9399d2613448863da64ad8272998db5db34 + md5: 15235dd10450d67bc25ccafd5b46d2bc + depends: + - __osx >=11.0 + - libcxx >=21 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - openssl >=3.5.7,<4.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - krb5 >=1.22.2,<1.23.0a0 + size: 1165740 + timestamp: 1786762145768 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.2.0-h1eee2c3_0.conda + sha256: c97aa17d16d2ac332ba9f184e82ce8f72dcb10e9a10c5f299030be2d44e191b9 + md5: e429aec4037d5cb8fd34ded9f5dadd39 + depends: + - __osx >=11.0 + - libcxx >=19 + license: Apache-2.0 + license_family: Apache + run_exports: + weak: + - lerc >=4.2.0,<5.0a0 + size: 166477 + timestamp: 1785036480092 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-11_h51639a9_openblas.conda + build_number: 11 + sha256: 718c3e1a16ad946caeeba041520dc18b7af461226bd8c28faef78b181920dbb4 + md5: 364639b771dbb4ede335d965f55a23ac + depends: + - libopenblas >=0.3.34,<0.3.35.0a0 + - libopenblas >=0.3.34,<1.0a0 + constrains: + - blas 2.311 openblas + - libcblas 3.11.0 11*_openblas + - liblapack 3.11.0 11*_openblas + - liblapacke 3.11.0 11*_openblas + - mkl <2027 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libblas >=3.11.0,<4.0a0 + size: 18300 + timestamp: 1789061064192 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-11_hb0561ab_openblas.conda + build_number: 11 + sha256: 3cebd672d8bd7c776a381422ea3fc48131343aeda2879974734715ac6a05c292 + md5: 73bde7d713e790b3168707e02102e87b + depends: + - libblas 3.11.0 11_h51639a9_openblas + constrains: + - blas 2.311 openblas + - liblapack 3.11.0 11*_openblas + - liblapacke 3.11.0 11*_openblas + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libcblas >=3.11.0,<4.0a0 + size: 18324 + timestamp: 1789061068736 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.22.0-h6651222_0.conda + sha256: 46def32ec20d4dc6bce75d90fe5f2465a71cc22acef608c5ba37cc392e80e01d + md5: a7234b8d8e19a089dcb1eaaa18de1045 + depends: + - __osx >=11.0 + - krb5 >=1.22.2,<1.23.0a0 + - libnghttp2 >=1.68.1,<2.0a0 + - libpsl >=0.23.1,<0.24.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.8,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: curl + license_family: MIT + run_exports: + weak: + - libcurl >=8.22.0,<9.0a0 + size: 419925 + timestamp: 1788340708264 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-23.1.3-h55c6f16_0.conda + sha256: 2d9d31172d7919bd276a8d1be338de567dd5afdd181e8d3d3d8c2d8695e09de2 + md5: 424521e52e65ef7f6cf957c4966e6386 + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + run_exports: {} + size: 577501 + timestamp: 1791337239735 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-he7e0567_1.conda + sha256: d896f4aa4ce4c590c2838678cb1917356fdb461d2a189991c0280c818c362172 + md5: 78650d671cb56909bb3e5c13bce310f9 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + run_exports: + weak: + - libdeflate >=1.25,<1.26.0a0 + size: 55727 + timestamp: 1785909153744 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20260512-pl5321h26f1114_0.conda + sha256: 5692a969e49b200c7874d1e869d281753361980b2ecfe9191b571d7e550f8b92 + md5: ef2ab2462744ec6ba3a54c34dcc6a06e + depends: + - ncurses + - __osx >=11.0 + - ncurses >=6.6,<7.0a0 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - libedit >=3.1.20260512,<3.2.0a0 + size: 108512 + timestamp: 1791327440683 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h1a92334_3.conda + sha256: c0100064506ae8abb432c5a506d474f10af2cf48c33d62bc221fb28b6d6ff6ac + md5: 19e86c8a6a47e92bb2e70ca12e758c5c + depends: + - __osx >=11.0 + license: BSD-2-Clause OR GPL-2.0-or-later + license_family: GPL + run_exports: + weak: + - libev >=4.33,<4.34.0a0 + size: 39991 + timestamp: 1785917376956 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.8.5-h6111c0a_0.conda + sha256: 50aa761b83fc7a116ca88fe0cb4cefce5abababb10a926bf8afbafd5c298d102 + md5: 5383c550b785bdaafcc4eaf638071a7c + depends: + - __osx >=11.0 + constrains: + - expat 2.8.5.* + license: MIT + license_family: MIT + run_exports: {} + size: 69565 + timestamp: 1790370026495 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.7.0-h47dc5ef_1.conda + sha256: 2783389a7b9dda04c62cc54c6bbeb03dd3cef24b3fc642715d02a3fa19464a9a + md5: 216bbcc23c11e9695b3db4a8771d76eb + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + run_exports: + weak: + - libffi >=3.7.0,<3.8.0a0 + size: 43637 + timestamp: 1787753403688 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_2.conda + sha256: 19ce8bd320414cb6b9889ecbf48a3ded848b0d1068b76ff6bea099bd7387d6f3 + md5: ee1fc5bba400ff0cae27fbf141a1ae0c + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + run_exports: {} + size: 8367 + timestamp: 1786641013393 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype6-2.14.3-h2ed5691_2.conda + sha256: d9b203d6484ad491b5b5f33d49a9d7a91189d776a9adae53d2b63af18ec11e6a + md5: 881cfb44ea02cc9849f612725a959660 + depends: + - __osx >=11.0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + run_exports: {} + size: 340923 + timestamp: 1786641012794 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-16.2.0-h3cf6597_7.conda + sha256: deacf62bd6cbbe05eb085dd69a2ca120053597c37066d53c8f7cf6815f26e9eb + md5: f100c8baeb0c816052b0d43948555bf6 + depends: + - _openmp_mutex + constrains: + - libgcc-ng ==16.2.0=*_7 + - libgomp 16.2.0 7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: {} + size: 365973 + timestamp: 1790301995634 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgd-2.3.3-h05bcc79_12.conda + sha256: 269edce527e204a80d3d05673301e0207efcd0dbeebc036a118ceb52690d6341 + md5: fa4a92cfaae9570d89700a292a9ca714 + depends: + - __osx >=11.0 + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libiconv >=1.18,<2.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: GD + license_family: BSD + run_exports: + weak: + - libgd >=2.3.3,<2.4.0a0 + size: 159247 + timestamp: 1766331953491 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-16.2.0-h07b0088_7.conda + sha256: a5b4b63d0ef4c7c59c37225b9f0307b5cd2a3a8499b2a40b6ddd2b9f072712a8 + md5: 2efa9518e126c501a7c7d638b2fa3a21 + depends: + - libgfortran5 16.2.0 hdb7a957_7 + constrains: + - libgfortran-ng ==16.2.0=*_7 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: {} + size: 99745 + timestamp: 1790302083840 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-16.2.0-hdb7a957_7.conda + sha256: 19297e5cf39de976cdd1a46499a4e15fdf54d249d3231f3b2a9d43af3be0bc66 + md5: c9d80dd8775b8fe76e825d63d8ccaf1b + depends: + - libgcc >=16.2.0 + constrains: + - libgfortran 16.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: {} + size: 554793 + timestamp: 1790302001166 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.90.0-hccd281b_0.conda + sha256: 4ec64c476881b31f211842952f192208a3af0925a596da227f4d97fb9a63e0ac + md5: 8f63a5f35547d0c6d819830ebe0d3245 + depends: + - __osx >=11.0 + - libintl >=0.25.1,<1.0a0 + - libzlib >=1.3.2,<2.0a0 + - libffi >=3.7.0,<3.8.0a0 + - libiconv >=1.18,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - glib >2.66 + license: LGPL-2.1-or-later + run_exports: + weak: + - libglib >=2.90.0,<3.0a0 + size: 4489939 + timestamp: 1789478088421 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libharfbuzz-14.6.0-hcda0f7c_2.conda + sha256: 85e3052093357d1c22d086b0e2dbe629b35498b15a34affa3c92a27dc7de548a + md5: bb1ba75fa653dbf2f341943fede777c4 + depends: + - __osx >=11.0 + - cairo >=1.18.6,<2.0a0 + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libcxx >=21 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libglib >=2.90.0,<3.0a0 + - libpng >=1.6.59,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + run_exports: {} + size: 1052989 + timestamp: 1791900623707 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libharfbuzz-devel-14.6.0-hcda0f7c_2.conda + sha256: ce8f8b52ec0d1f71d2da5610f5ef12781d1840768e40201dfb1e5d25d81f6c7a + md5: d651e898c4798a4a6539b3cd7ea6f89d + depends: + - __osx >=11.0 + - cairo >=1.18.6,<2.0a0 + - freetype + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libcxx >=21 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libglib >=2.90.0,<3.0a0 + - libharfbuzz 14.6.0 hcda0f7c_2 + - libpng >=1.6.59,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libharfbuzz >=14.6.0 + size: 1536213 + timestamp: 1791900642002 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.18-he4c29f2_3.conda + sha256: 689a14968267f2f97c07112fca5636e7d756036b9aee969911267c20bd3eea1f + md5: 17f4744c0873e9f77ac9b5cd0a27c187 + depends: + - __osx >=11.0 + license: LGPL-2.1-only + run_exports: + weak: + - libiconv >=1.18,<2.0a0 + size: 750816 + timestamp: 1787033961086 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-hae62183_2.conda + sha256: b43c6645e668f86d04d5c06d6dc17efe921bbd9244be4b77946d56fb950a3fcc + md5: a3a4193101bc5427e6cf8be81d5eeddf + depends: + - __osx >=11.0 + - libiconv >=1.18,<2.0a0 + license: LGPL-2.1-or-later + run_exports: + weak: + - libintl >=0.25.1,<1.0a0 + size: 90024 + timestamp: 1790118675563 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.2.0-h84a0fba_1.conda + sha256: 05006418f9392c9b723e8428808db106de0350a497832f95f921b85ff1072310 + md5: b2f8c8e5a7651a1d7c05404c3a159517 + depends: + - __osx >=11.0 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + run_exports: + weak: + - libjpeg-turbo >=3.2.0,<4.0a0 + size: 558459 + timestamp: 1785896382474 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-11_hd9741b5_openblas.conda + build_number: 11 + sha256: e7697df761eeb243272801a8c883dc1de6018a7f738746b443ef1396f0a78075 + md5: d67ef1462e77d20cd3e0d27c876c3c9a + depends: + - libblas 3.11.0 11_h51639a9_openblas + constrains: + - blas 2.311 openblas + - libcblas 3.11.0 11*_openblas + - liblapacke 3.11.0 11*_openblas + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - liblapack >=3.11.0,<3.12.0a0 + size: 18284 + timestamp: 1789061072707 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_1.conda + sha256: 23d0630046a3e8b164d8f80f2b74ed2605af2e7050ab9913018056402fae4311 + md5: 8ab10323068b107661a4b9a4af84f3b5 + depends: + - __osx >=11.0 + constrains: + - xz 5.8.3.* + license: 0BSD + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 91720 + timestamp: 1786348695846 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.68.1-h435687b_1.conda + sha256: 445440d8cccccb6585f71d1eb7c949d64a2af2ced5481d924621424ff3b6a398 + md5: ac9902dcbe0417f50cf95ab2bde062fa + depends: + - __osx >=11.0 + - c-ares >=1.34.8,<2.0a0 + - libcxx >=21 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libnghttp2 >=1.68.1,<2.0a0 + size: 567024 + timestamp: 1787177422467 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.34-openmp_h5e6e99c_1.conda + sha256: 18f167fdaa26f67a123c59766f4730b41866d2c0920b5c29d74a93d3a2e92a96 + md5: 9c874eb9d4441a658ef3acf6ac56dc3e + depends: + - __osx >=11.0 + - libgcc >=15 + - libgfortran + - libgfortran5 >=15.3.0 + - llvm-openmp >=21.1.8 + constrains: + - openblas >=0.3.34,<0.3.35.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libopenblas >=0.3.34,<1.0a0 + size: 4249236 + timestamp: 1789023664380 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.59-hf5e6511_0.conda + sha256: 4de4dc4cb7432c328c1eaf4f7cc9c6b48c073eab1e9c6723d4533e6d57e7d595 + md5: 4f99571d5354c39f2621b8b6e3a9afa3 + depends: + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + run_exports: + weak: + - libpng >=1.6.59,<1.7.0a0 + size: 290299 + timestamp: 1790805167385 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpsl-0.23.1-hdb0c161_1.conda + sha256: c8c3153df39abedf3413483f672151ad70f1adb0c06c192bdf7ec432c3616b07 + md5: 5d270f716a2b4bc13df9af8612071b17 + depends: + - __osx >=11.0 + - libcxx >=21 + - icu >=78.3,<79.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libpsl >=0.23.1,<0.24.0a0 + size: 72673 + timestamp: 1786970928205 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpython-3.12.15-h0677fcb_2_cpython.conda + build_number: 2 + sha256: b21efc2d2582aa1b84b96eab48229ed452b22db638960f4b5b8ebf4a50b28be4 + md5: 5b4755b2167934518adc19214267bc8d + depends: + - __osx >=11.0 + license: Python-2.0 + run_exports: + weak: + - libpython >=3.12,<4.0a0 + size: 1741357 + timestamp: 1791910410844 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/librsvg-2.62.4-hc8ac265_0.conda + sha256: 3bd54de0136907782249a0d5797744ecac5bbd77026f5f2712dd62390c5c9f77 + md5: 878c79beee628e3b683ddc9094aaad1e + depends: + - __osx >=11.0 + - pango >=1.58.2,<2.0a0 + - libglib >=2.90.0,<3.0a0 + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + - libxml2-16 >=2.15.4 + - gdk-pixbuf >=2.44.8,<3.0a0 + - libharfbuzz >=14.5.0 + - cairo >=1.18.6,<2.0a0 + constrains: + - __osx >=11.0 + license: LGPL-2.1-or-later + run_exports: + weak: + - librsvg >=2.62.4,<3.0a0 + size: 3888310 + timestamp: 1790276358897 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h74c22ad_3.conda + sha256: 0fb001d9b28dc19096388beadaed3af98100f4260707ecb9c177fae68b0e9ece + md5: b237804d151d3d05d4d7fd9052c5664b + depends: + - __osx >=11.0 + license: ISC + run_exports: + weak: + - libsodium >=1.0.22,<1.0.23.0a0 + size: 249403 + timestamp: 1789425371505 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.54.0-hca69786_1.conda + sha256: 35e9265b836367ebf75982051a21cf124d0dd6967da628d9356b8aa433cc6947 + md5: 4219b7c43075bdc152b1db4cd0e46828 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libzlib >=1.3.2,<2.0a0 + license: blessing + run_exports: + weak: + - libsqlite >=3.54.0,<4.0a0 + size: 953259 + timestamp: 1791584347161 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-hbf2880b_1.conda + sha256: a056e518c3d2d09fbb1778cea80c0c95338fb24adf1a817bbf90fb484850a304 + md5: d957a8eda98c49b073e8dcfd677c127a + depends: + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libssh2 >=1.11.1,<2.0a0 + size: 280492 + timestamp: 1786714226814 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.2-hf67920b_1.conda + sha256: 847d22a86ae28f66d3888702698254d25bb4eac3a0f64c1fabfb1842ac00be4c + md5: b6b191267455bf202af79f973690ed5d + depends: + - __osx >=11.0 + - lerc >=4.2.0,<5.0a0 + - libcxx >=21 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + run_exports: + weak: + - libtiff >=4.7.2,<4.8.0a0 + size: 380645 + timestamp: 1787756067271 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.52.1-h1a92334_1.conda + sha256: 4f47de9de1990efd998edbbd6793f89c8f02ffde987ae8120b1c006acefd2a04 + md5: de09bd0f175611e94f21b28f8c708e80 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + run_exports: + weak: + - libuv >=1.52.1,<2.0a0 + size: 122729 + timestamp: 1785914645797 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h202fb40_1.conda + sha256: 0ff54650d470c7e54cbeffdd53a8c063e055a7bcf784388c0385ce5c4741b0f4 + md5: 168a13e329259710b28277abc1395b8e + depends: + - __osx >=11.0 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libwebp-base >=1.6.0,<2.0a0 + size: 294522 + timestamp: 1785955350410 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.17.0-hbffa61f_2.conda + sha256: f55c15b66c8ae27d8e30445193acc049b280eb51a47d6f1753bed5ac2937a217 + md5: 786c0680e77665d1938ce9cdd7cf82a7 + depends: + - __osx >=11.0 + - pthread-stubs + - xorg-libxau >=1.0.12,<2.0a0 + - xorg-libxdmcp >=1.1.5,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libxcb >=1.17.0,<2.0a0 + size: 324234 + timestamp: 1787885764666 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-16-2.15.4-heb56d2d_1.conda + sha256: 1acd4dd49c6f54440dc172ab469d0e2c7c3c02de5b1f21158a233eb585ec3c38 + md5: ef82ce9c5e6a0bb8bc9cb0e6935f18ca + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libxml2 2.15.4 + license: MIT + license_family: MIT + run_exports: {} + size: 469239 + timestamp: 1791465646245 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.15.4-h550178d_1.conda + sha256: f333b4c6c823ea317aeb0b817520ae3ba2fb16277923d848f5f2aee2049198e5 + md5: 5881b9ab679553078d590db82d7e57b3 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.4 heb56d2d_1 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libxml2 + - libxml2-16 >=2.15.4 + size: 41382 + timestamp: 1791465651969 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxslt-1.1.45-haaf9281_1.conda + sha256: 4b40785bdc7af110db10c9b951ce7f82c515bb371046367f0e397428d2db44f4 + md5: 9e4ab938b0971629481134a16b766937 + depends: + - __osx >=11.0 + - libxml2 + - libxml2-16 >=2.15.3 + license: MIT + license_family: MIT + run_exports: + weak: + - libxslt >=1.1.45,<2.0a0 + size: 221755 + timestamp: 1788535395293 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzenohc-1.9.0-h389a063_0.conda + sha256: 33b28e365636e71dd264355f6d118f82d151ea94cd2ef4d76c6275fa15301bce + md5: a338a858558a58e3fd42ab6cfd09543d + depends: + - __osx >=11.0 + - libcxx >=19 + - zenoh-rust-abi >=1.9.0.1.93.1,<1.9.0.1.93.2.0a0 + constrains: + - __osx >=11.0 + license: Apache-2.0 OR EPL-2.0 + run_exports: + weak: + - libzenohc >=1.9.0,<1.9.1.0a0 + size: 4466298 + timestamp: 1777493202049 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_3.conda + sha256: a18fa5d5bac452401459f966cf0d872224e8080c4ff93c77e168d43ab42ef9d7 + md5: f39288f0ea63ae962e1a2e4f355a0d75 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.2 *_3 + license: Zlib + license_family: Other + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 + size: 47822 + timestamp: 1785277049190 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-23.1.3-hdb3d66b_1.conda + sha256: eec66f3d0a0c428411e22a59c4726069ccef81a46864876b6e270c8c254d4045 + md5: 5b7efd98534e6722de8d223b8654185b + depends: + - __osx >=11.0 + constrains: + - intel-openmp <0.0a0 + - openmp 23.1.3|23.1.3.* + license: Apache-2.0 WITH LLVM-exception + run_exports: + strong: + - llvm-openmp >=23.1.3 + size: 287944 + timestamp: 1791950643503 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lxml-6.1.3-py312haba262f_0.conda + sha256: 8f4aa4fc8c0227cdf4cbe9adf8e51704c5d82b686842a8cb0e46c3d11450bd9d + md5: 6bbb82f69ac1cc00375cebcd3e7d594a + depends: + - __osx >=11.0 + - libxml2 + - libxml2-16 >=2.15.4 + - libxslt >=1.1.45,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause and MIT-CMU + run_exports: {} + size: 1280564 + timestamp: 1789036616184 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-4.4.5-py312hc8604c9_2.conda + sha256: 3097a7a226cc6ae514d7d09acebdad3d13b639dff503b87b97673860b37eb072 + md5: 0f3baaafada668181448cf4613af9d16 + depends: + - python + - lz4-c + - __osx >=11.0 + - python 3.12.* *_cpython + - lz4-c >=1.10.0,<1.11.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 127399 + timestamp: 1789242350026 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-hdca3b7d_2.conda + sha256: 1887867b393eb3c2b336deaffcf228574821ea1e0dcb9ef7bf6c9f59cec40f03 + md5: d47f7f3481c6f2fcc4ed22802f61c6dd + depends: + - __osx >=11.0 + - libcxx >=21 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - lz4-c >=1.10.0,<1.11.0a0 + size: 171838 + timestamp: 1786717209785 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-he64c551_1.conda + sha256: 7024a48c8c0d0114ed4ab53c76bf9275d50e91ba7cea367a9aead638d3c29c68 + md5: 3dfa0d0316dc246cd44937a557de4501 + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + run_exports: + weak: + - ncurses >=6.6,<7.0a0 + size: 804298 + timestamp: 1786355189145 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.5.4-py312hff34920_0.conda + sha256: 7a72f5345e7e9f2ed8385986de8d96e321301726dfd6c1a7d0a0d2106ccf204b + md5: f1c8bb69dfcbbdd01e7ea79c8ae31934 + depends: + - python + - libcxx >=21 + - __osx >=11.0 + - python_abi 3.12.* *_cp312 + - libcblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - numpy >=1.25,<3 + size: 7122982 + timestamp: 1791675320293 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.5-h55eecbc_0.conda + sha256: 44fbc526456571a9fb8fa18157f6f269d4d4bd40eef20183a93b9c9296f94497 + md5: 45d9179cdf6e53d88aec034246f0dad6 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + run_exports: + weak: + - openssl >=3.6.5,<4.0a0 + size: 3111573 + timestamp: 1791097959641 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/orocos-kdl-1.5.4-hba3f793_0.conda + sha256: 34c55020322182edf51001710aa0e795d3042ad20a07693294c8217f648fe994 + md5: 9c81db432ab87987dcc01c5fbcf11eb6 + depends: + - __osx >=11.0 + - eigen + - eigen-abi >=5.0.1.100,<5.0.1.101.0a0 + - libcxx >=21 + license: LGPL-2.1-or-later + license_family: LGPL + run_exports: + weak: + - orocos-kdl >=1.5.4,<1.6.0a0 + size: 302717 + timestamp: 1788267747788 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pango-1.58.2-hf9b25ef_1.conda + sha256: 9ba23103198cffa523488ff583b184ad37eb6d90985d330a683a1039dc917771 + md5: 4a71e68873ce37dc6da671a899d09a46 + depends: + - __osx >=11.0 + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + - fribidi >=1.0.16,<2.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libglib >=2.88.3,<3.0a0 + - libharfbuzz >=14.4.0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + license: LGPL-2.1-or-later + run_exports: + weak: + - pango >=1.58.2,<2.0a0 + size: 442274 + timestamp: 1788491046895 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre-8.45-hbdafb3b_0.tar.bz2 + sha256: f2e0c4ae3306f94851eea2318c6d26d24f8e191e329ddd256a612cd1184c5737 + md5: 500758f2515ae07c640d255c11afc19f + depends: + - libcxx >=11.1.0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - pcre >=8.45,<9.0a0 + size: 235554 + timestamp: 1623788902053 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.47-he63d830_1.conda + sha256: f8c415329b542e1fca1ff2917b80e687c18302dfa0353530668b90cb225b494f + md5: 5ab90033816cbe4097e8a297e5179f67 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - pcre2 >=10.47,<10.48.0a0 + size: 851704 + timestamp: 1787294559157 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.46.4-h784d473_3.conda + sha256: 4779cd57231ce2e96fac643fcbdd4a6f51a57986264545445574e9c4acf526d3 + md5: 9a99c0b60efe41c194d01c182d000733 + depends: + - __osx >=11.0 + - libcxx >=19 + license: MIT + license_family: MIT + run_exports: + weak: + - pixman >=0.46.4,<1.0a0 + size: 198717 + timestamp: 1786106922508 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pkg-config-0.29.2-he0b766d_1013.conda + sha256: a9be4e8eddb816ab4e8fe1836ed140012cd2008ef3fa28fa21bd2c89db3455bb + md5: ab638a9427a61fa1347b75918bfda1ea + depends: + - __osx >=11.0 + - libiconv >=1.18,<2.0a0 + license: GPL-2.0-or-later + license_family: GPL + run_exports: {} + size: 273899 + timestamp: 1788677388168 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-7.2.2-py312hbd136b4_3.conda + sha256: 8ebaab5502af0f7f36223e23cc1f49ac4d3a3070f0b6d074153db897fd7bc74e + md5: 3fd630bf639ce4512de776b9a275624b + depends: + - python + - __osx >=11.0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 236454 + timestamp: 1789682096356 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hb001647_1004.conda + sha256: 3f79452dbda3febaf7053486e4844fa945accf4d74eac4169e2c4d5dc5e4dd0b + md5: f0833c4a0b68798f50935dd83384c705 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + run_exports: {} + size: 9662 + timestamp: 1788382422327 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pybullet-3.25-py312h3a599b7_5.conda + sha256: 1d8436fa727e30a55036571cbbaed8e9518350b3d264b499246e955c2258d4a3 + md5: 6ebbad3c35cd20d8556ff3778cba7ae6 + depends: + - __osx >=11.0 + - bullet-cpp 3.25 py312h5978115_5 + - libcxx >=19 + - libzlib >=1.3.1,<2.0a0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: Zlib + run_exports: {} + size: 62414074 + timestamp: 1761064352103 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.15-hd05a0c4_2_cpython.conda + build_number: 2 + sha256: 5bcf85135be2c0828aa6c72a34d3c9404f699bc9d8b939faabbadfc16617bf57 + md5: 12831d178a990fa6feec258e45b23056 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.8.5,<3.0a0 + - libffi >=3.7.0,<3.8.0a0 + - liblzma >=5.8.3,<6.0a0 + - libpython 3.12.15 h0677fcb_2_cpython + - libsqlite >=3.54.0,<4.0a0 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - openssl >=3.5.9,<4.0a0 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + run_exports: + weak: + - python_abi 3.12.* *_cp312 + noarch: + - python + size: 11797016 + timestamp: 1791910443477 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-orocos-kdl-1.5.4-py312h1535055_0.conda + sha256: 6a712c2bc5c5619ab274a33fa9c44ac4ede498566b2ba4bbe1240dd7342c8fc0 + md5: cbf8e99a0db7eea4f3b903ade68f8033 + depends: + - __osx >=11.0 + - eigen + - libcxx >=21 + - orocos-kdl + - pybind11 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: LGPL-2.1-or-later + license_family: LGPL + run_exports: + weak: + - python-orocos-kdl >=1.5.4,<1.6.0a0 + size: 290071 + timestamp: 1788268474571 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py312h04c11ed_1.conda + sha256: 737959262d03c9c305618f2d48c7f1691fb996f14ae420bfd05932635c99f873 + md5: 95a5f0831b5e0b1075bbd80fcffc52ac + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + run_exports: {} + size: 187278 + timestamp: 1770223990452 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.2.0-py312hdfb5542_2.conda + noarch: python + sha256: 42941c85f5f6435ccd84e9aed37de8fd9b3b40ab1c14ae2542ffb4c5e1c84e4e + md5: 8f718ff26a7f93e460445351c20929ef + depends: + - python + - libcxx >=21 + - __osx >=11.0 + - zeromq >=4.3.5,<4.4.0a0 + - _python_abi3_support 1.* + - cpython >=3.12 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 197695 + timestamp: 1789730185188 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h8b90a29_1.conda + sha256: d6782b430e6dce4fe8c7ac118cd988d5a193eb4a7f60741edfaede58016b6110 + md5: 9347fd56a002e6b58946831d48fe62f6 + depends: + - __osx >=11.0 + - ncurses >=6.6,<7.0a0 + license: GPL-3.0-only + license_family: GPL + run_exports: + weak: + - readline >=8.3,<9.0a0 + size: 314395 + timestamp: 1787033878899 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rhash-1.4.6-h84a0fba_2.conda + sha256: b4da3ab88c407b4133d39512b3b615d6fb020c89d39f54491862e6731528ab95 + md5: 5cec61f5b18ca8c5bbb1ad2dc5923a8e + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + run_exports: + weak: + - rhash >=1.4.6,<2.0a0 + size: 185483 + timestamp: 1786732022220 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-h760df91_2.conda + sha256: 791d91a18647346c4318a4177add14abc546632fc2bf12a049cc328025368054 + md5: e4df5c4de3a06437b69ff6255c258ca2 + depends: + - __osx >=11.0 + - fmt >=12.1.0,<12.2.0a0 + - libcxx >=19 + license: MIT + license_family: MIT + run_exports: + weak: + - spdlog >=1.17.0,<1.18.0a0 + size: 167030 + timestamp: 1785925098650 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.54.0-ha9f7ffe_1.conda + sha256: e5c2436d40f63ad70a874e377a1b2b9f9d4de6d279c2905bb7b401daea39a2f8 + md5: 2d1cc24a68d9f08bab7b1a0e75940139 + depends: + - __osx >=11.0 + - icu >=78.3,<79.0a0 + - libsqlite 3.54.0 hca69786_1 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - readline >=8.3,<9.0a0 + license: blessing + run_exports: + weak: + - libsqlite >=3.54.0,<4.0a0 + size: 191121 + timestamp: 1791584351974 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tinyxml2-11.0.0-hdca3b7d_1.conda + sha256: a6cf10e2d71bb64fb506a502bfaf7ee75e5ae58cf8f2569ddaadf5f8c7206548 + md5: 6136308b0a799baef975dbb228fb91ba + depends: + - __osx >=11.0 + - libcxx >=21 + license: Zlib + run_exports: + weak: + - tinyxml2 >=11.0.0,<11.1.0a0 + size: 123750 + timestamp: 1789421122802 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-hbeba79b_4.conda + sha256: 857d89087ae7f2c328cf256728affcb7343031a148b4af847334d248a9cf564c + md5: 90a01bf394d1c594e0eb9258f967d828 + depends: + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 + license: TCL + run_exports: + weak: + - tk >=8.6.13,<8.7.0a0 + size: 3342183 + timestamp: 1787272852357 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/uncrustify-0.83.0-h784d473_0.conda + sha256: facdca6b4a5708e6e2eb23218e703557a81bb9c65e3eb52449690bd8253f8d20 + md5: 06e55b14e02020879426e9eab69e220a + depends: + - __osx >=11.0 + - libcxx >=19 + license: GPL-2.0-only + license_family: GPL + run_exports: {} + size: 618858 + timestamp: 1779015743200 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/urdfdom-6.0.1-hb460c4f_0.conda + sha256: 303c4b30cb1d3f3c2ff37c217e73aa9fb05f684d43b8eca174215f36e4d33727 + md5: bc01e8d73814bd6344af00c87d4eef17 + depends: + - urdfdom_headers >=3.0.1,<4.0a0 + - __osx >=11.0 + - libcxx >=21 + - console_bridge >=1.0.2,<1.1.0a0 + - tinyxml2 >=11.0.0,<11.1.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - urdfdom_headers >=3.0.1,<4.0a0 + - urdfdom >=6.0.1,<7.0a0 + size: 104053 + timestamp: 1787009854566 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/urdfdom_headers-3.0.1-hfbe1efa_1.conda + sha256: 9e973d6403617753fb3cd9d7acde6ad580d9d0746d3b542c766b6b848e42ac8c + md5: cb96cb216cff3db1b9eb6ba014b6af80 + depends: + - libcxx >=21 + - __osx >=11.0 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 24089 + timestamp: 1787006304117 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-17.2-py312h9b6eb38_0.conda + sha256: 7cb36102c4f7b91668b4f61e6ff408d66c959364b75c1fe57b2da7d480f76bea + md5: e6a00202f8ab3904ddd574291e5e3205 + depends: + - python + - __osx >=11.0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 413329 + timestamp: 1791057472492 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libx11-1.8.13-hf948f5a_1.conda + sha256: a21effeec4dfcc195c44001261c26b51631ca80abfce87059a1f19680f434ba6 + md5: 0b922feb390ad25e36c1275623d7ba08 + depends: + - __osx >=11.0 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libx11 >=1.8.13,<2.0a0 + size: 758771 + timestamp: 1787087662158 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.12-hb001647_2.conda + sha256: cde7cecabb662b435e6537591e5845e870a0648887542d3e538c9f6c20dd6be5 + md5: 610f557e75d6a0d3f676914da5822227 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxau >=1.0.12,<2.0a0 + size: 17325 + timestamp: 1788960997645 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hb001647_2.conda + sha256: 30240b39d7b956e8f7a8231ffa0c1fce097124e40b3eb48a523d13d3937e3194 + md5: 14a26fe87734f988eed32abf6afd4c3e + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxdmcp >=1.1.5,<2.0a0 + size: 21021 + timestamp: 1789677329602 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxext-1.3.7-hb001647_1.conda + sha256: 17df0f498ae9018958faa52f8b4c171fd01711d25c8ee6a72671741b8047feea + md5: 2a9acad1cd4dc5e76f4f2acabd0a639d + depends: + - __osx >=11.0 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxext >=1.3.7,<2.0a0 + size: 44697 + timestamp: 1787101473003 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h74c22ad_3.conda + sha256: 3e78c43207502418fc5fb2317bbbefe5df8b6fc1051d90bdcd1c881c76bb4193 + md5: 31cf6dcc138abe673c9440cd6fe6c6fe + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + run_exports: + weak: + - yaml >=0.2.5,<0.3.0a0 + size: 77530 + timestamp: 1787228556857 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-cpp-0.8.0-h784d473_1.conda + sha256: 450d4c6ad26bc2c18eb9420261568b86918b118c96ab4a7f2176c352b94101a2 + md5: 04b9b2b8cc9e14758965758d9c423b34 + depends: + - libcxx >=19 + - __osx >=11.0 + license: MIT + license_family: MIT + run_exports: + weak: + - yaml-cpp >=0.8.0,<0.9.0a0 + size: 136591 + timestamp: 1785924101870 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zenoh-rust-abi-1.9.0.1.93.1-h3c1fe20_0.conda + sha256: 3225fb1c31956ce267d139d101bb19c3968ba69264527d4405eecfbf6da3302c + md5: a1504c5c3e971fec1f14fa35383ae062 + depends: + - __osx >=11.0 + constrains: + - __osx >=11.0 + license: Apache-2.0 OR EPL-2.0 + run_exports: + weak: + - zenoh-rust-abi >=1.9.0.1.93.1,<1.9.0.1.93.2.0a0 + size: 52845 + timestamp: 1775855209609 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h6eb0046_12.conda + sha256: 4fe0cd73a686cc4466ca005166a5aa351dc665aa26166b68752d90930f214382 + md5: 89102eac6e230f7636c40a1411223484 + depends: + - libcxx >=21 + - __osx >=11.0 + - libsodium >=1.0.22,<1.0.23.0a0 + - krb5 >=1.22.2,<1.23.0a0 + license: MPL-2.0 + license_family: MOZILLA + run_exports: + weak: + - zeromq >=4.3.5,<4.4.0a0 + size: 244219 + timestamp: 1789076600961 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hf451053_7.conda + sha256: da867f5092eb0cb746d353694f0098031fd9817a4ce7d5743121209ae0f406ca + md5: 4ec2684c73812cc2c3d78379384a39cc + depends: + - __osx >=11.0 + - libzlib >=1.3.2,<2.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - zstd >=1.5.7,<1.6.0a0 + size: 433687 + timestamp: 1786599629846 +- conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: 8a1cee28bd0ee7451ada1cd50b64720e57e17ff994fc62dd8329bef570d382e4 + md5: 1626967b574d1784b578b52eaeb071e7 + depends: + - libgomp >=7.5.0 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + constrains: + - openmp_impl <0.0a0 + - msys2-conda-epoch <0.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + strong: + - _openmp_mutex >=4.5 + size: 52252 + timestamp: 1770943776666 +- conda: https://conda.anaconda.org/conda-forge/win-64/bullet-3.25-h6d21bc8_5.conda + sha256: 23527ede1259c76cf61151e46e7fc2cedf5d987a8e91a31d0afe00ba59674edc + md5: b0d61f357032e7f10a12a871bdd9784b + depends: + - bullet-cpp 3.25 hc128f0a_5 + - numpy + - pybullet 3.25 py312h3d6c809_5 + - python + license: Zlib + run_exports: {} + size: 12095 + timestamp: 1761043917282 +- conda: https://conda.anaconda.org/conda-forge/win-64/bullet-cpp-3.25-hc128f0a_5.conda + sha256: f622f660ddcebd63614f13e46af165361d88bb60c154092f3f0655b47bce8501 + md5: c99dd819d6c0b58284f0e6a93c616354 + depends: + - numpy >=1.23,<3 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Zlib + run_exports: + weak: + - bullet-cpp >=3.25,<3.26.0a0 + size: 16335293 + timestamp: 1761043366908 +- conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_10.conda + sha256: 04767466ee9227c9c57ab2c6503e0149177d34111c7418d2f420297acb1eb229 + md5: c3301c058362f340100d91cd8be0393f + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: bzip2-1.0.6 + license_family: BSD + run_exports: + weak: + - bzip2 >=1.0.8,<2.0a0 + size: 55919 + timestamp: 1785906343696 +- conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.6-h477c42c_0.conda + sha256: af62a4e441719050878d050d242619f8256a891983515950f8fb877137868a45 + md5: f87fcbccd5ad4cbbf0c4b1c030f9cfc2 + depends: + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.3,<79.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libglib >=2.90.0,<3.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + - pixman >=0.46.4,<1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.1-only or MPL-1.1 + run_exports: + weak: + - cairo >=1.18.6,<2.0a0 + size: 1533334 + timestamp: 1790045452587 +- conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.1.1-py312he06e257_3.conda + sha256: b6ac6b6668b623c8d80457344e464d701bfe977f8470410ab713fae65df4b21f + md5: 486d6ff4078c164f18f7141c490aa315 + depends: + - pycparser + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + run_exports: {} + size: 344044 + timestamp: 1788485380019 +- conda: https://conda.anaconda.org/conda-forge/win-64/cmake-4.4.4-hde52c71_0.conda + sha256: 159c0e80f733a4ebcd24a9bf7fa6ad848a8e1c6ac441d5f2f63bafcfdff176ce + md5: 8a2288d93af982987191a1e778de756e + depends: + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libuv >=1.52.1,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + - libexpat >=2.8.5,<3.0a0 + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.22.0,<9.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 17932458 + timestamp: 1791001114890 +- conda: https://conda.anaconda.org/conda-forge/win-64/console_bridge-1.0.2-h5362a0b_1.tar.bz2 + sha256: 15dd8cd1735c9405ad04d9881c15650fb98bf8e71e5675e98898184e4a731ec6 + md5: 47acc5c1cb921914270dd9fe47ac30db + depends: + - vc >=14.1,<15 + - vs2015_runtime >=14.16.27033 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - console_bridge >=1.0.2,<1.1.0a0 + size: 24540 + timestamp: 1648913342231 +- conda: https://conda.anaconda.org/conda-forge/win-64/cppcheck-2.22.0-py312h9df87ca_1.conda + sha256: 8fb0af442372774951b50795653788bb90c1267e2506d497d8e29818e0fc5f2d + md5: 6b183eb8ab6c9a43eb463832237dad87 + depends: + - pygments + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - pcre >=8.45,<9.0a0 + - tinyxml2 >=11.0.0,<11.1.0a0 + - python_abi 3.12.* *_cp312 + license: GPL-3.0-or-later + license_family: GPL + run_exports: {} + size: 2462998 + timestamp: 1790418683325 +- conda: https://conda.anaconda.org/conda-forge/win-64/cryptography-50.0.2-py311h67a9792_0.conda + noarch: python + sha256: f3a68411fd8c3eb6d2cd3503c8a3bea779b2edf162e447e05b6fb79d2b1bb859 + md5: 79b284ebd7d5ed165381d621f56e1e3d + depends: + - python + - cffi >=2.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - openssl >=3.5.8,<4.0a0 + - _python_abi3_support 1.* + - cpython >=3.11 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + run_exports: {} + size: 1786178 + timestamp: 1790790508927 +- conda: https://conda.anaconda.org/conda-forge/win-64/cyclonedds-0.10.5-h2a109cb_0.conda + sha256: 9d8367f1f83ec33cc43375f4a1bd06c5178c67aebacbc70f6e567a8f38af8d45 + md5: e8661608390785169a5fdd1170cb7638 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - openssl >=3.5.6,<4.0a0 + license: EPL-2.0 + run_exports: + weak: + - cyclonedds >=0.10.5,<0.11.0a0 + size: 1079772 + timestamp: 1779684071869 +- conda: https://conda.anaconda.org/conda-forge/win-64/eigen-5.0.1-h5112557_3.conda + sha256: bb68626fe848e2857c1e2620b0658264fd186241beb0806c1e6c1e79d6d7c79d + md5: 655faee6689159bd9f0dbecdec357e75 + license: MPL-2.0 + license_family: MOZILLA + run_exports: {} + size: 1308604 + timestamp: 1788951324422 +- conda: https://conda.anaconda.org/conda-forge/win-64/eigen-abi-5.0.1.100-hc11354d_3.conda + sha256: 6b30c25473a95d50f2992b51f5d6746605860bb4a8553baa92e794041a337df7 + md5: 2ecbe0a499723117041a9a0497cf7776 + constrains: + - eigen >=5.0.1,<5.0.2.0a0 + license: MPL-2.0 + license_family: MOZILLA + run_exports: {} + size: 13468 + timestamp: 1788951324422 +- conda: https://conda.anaconda.org/conda-forge/win-64/eigen-abi-devel-5.0.1.100-hae67d6e_3.conda + sha256: f734ea16f185726017f2a86930049deeb1d43eab52c25aaeb910c4dd281615d6 + md5: 3ed01f395b72233369d2cdd55e18ea41 + depends: + - eigen >=5.0.1,<5.0.2.0a0 + - eigen-abi >=5.0.1.100,<5.0.1.101.0a0 + constrains: + - x86_64-microarch-level >=1,<3 + license: MPL-2.0 + license_family: MOZILLA + run_exports: + weak: + - eigen-abi >=5.0.1.100,<5.0.1.101.0a0 + size: 14682 + timestamp: 1788951324422 +- conda: https://conda.anaconda.org/conda-forge/win-64/fmt-12.1.0-h1ced75a_1.conda + sha256: 1d6d6f1bf284e50cf617ce9a6250e0bf70bd0d30b068568364d6b1852aad9466 + md5: ca8fa0e01ed34bb161f4e8e86dfda22e + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + run_exports: + weak: + - fmt >=12.1.0,<12.2.0a0 + size: 187511 + timestamp: 1785915492086 +- conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.3-hd47e2ca_1.conda + sha256: f26139e3c774a6434c8a73381c08e3d2a4c2f9d9ef9587c66aab8836211ee2ec + md5: ed95670fed91b091fe34ba6cae6677d7 + depends: + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libiconv >=1.18,<2.0a0 + - libintl >=0.22.5,<1.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + run_exports: + weak: + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + size: 217988 + timestamp: 1786667461139 +- conda: https://conda.anaconda.org/conda-forge/win-64/foonathan-memory-0.7.4-h5112557_1.conda + sha256: 4c421ff4a3d385c6e57237cfed13a8f7d209da87e5e62b147354626b69ce645c + md5: 1ebdb62079c64634b5140cdd44a62aa4 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: Zlib + run_exports: + weak: + - foonathan-memory >=0.7.4,<0.7.5.0a0 + size: 208210 + timestamp: 1779093120082 +- conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.17-hfd05255_0.conda + sha256: 30a93a5132923a5679e0729a02bf5b36052c84cc437decc14a35caee5e276f46 + md5: fbe8e77a49028820f94cf619890c2365 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.1-or-later + run_exports: + weak: + - fribidi >=1.0.17,<2.0a0 + size: 67033 + timestamp: 1790011847625 +- conda: https://conda.anaconda.org/conda-forge/win-64/getopt-win32-0.1-h6a83c73_3.conda + sha256: d04c4a6c11daa72c4a0242602e1d00c03291ef66ca2d7cd0e171088411d57710 + md5: 49c36fcad2e9af6b91e91f2ce5be8ebd + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: LGPL-3.0-only + license_family: LGPL + run_exports: + weak: + - getopt-win32 >=0.1,<0.1.1.0a0 + size: 26238 + timestamp: 1750744808182 +- conda: https://conda.anaconda.org/conda-forge/win-64/gmock-1.18.0-h4f519af_1.conda + sha256: 7493d7e84a00b8b4dc0bec18b41ad9619f5abe332fafd70e3e8d7da5472ce562 + md5: 98b238274cc3e4d4a90ad5610987e34b + depends: + - gtest ==1.18.0 h477610d_1 + - gtest >=1.18.0,<1.18.1.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 4989 + timestamp: 1786419397659 +- conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.15-h5112557_1.conda + sha256: 93a59bdf944fb6f947bd7ad2f293d5d80db3a90f8ff8dfabc591e3752141e46f + md5: 79538e7a7bc024084eda5989f73fde35 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: LGPL-2.0-or-later + license_family: LGPL + run_exports: + weak: + - graphite2 >=1.3.15,<2.0a0 + size: 98064 + timestamp: 1786118492029 +- conda: https://conda.anaconda.org/conda-forge/win-64/graphviz-14.1.2-h4c50273_0.conda + sha256: 58f83755509a19501a9efe40c484727ffa61fcfaf6a237870678a79638fa6982 + md5: afabed4c46b197b89eb974aa038d12db + depends: + - cairo >=1.18.4,<2.0a0 + - getopt-win32 >=0.1,<0.1.1.0a0 + - gts >=0.7.6,<0.8.0a0 + - libexpat >=2.7.3,<3.0a0 + - libgd >=2.3.3,<2.4.0a0 + - libglib >=2.86.3,<3.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pango >=1.56.4,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: EPL-1.0 + license_family: Other + run_exports: + weak: + - graphviz >=14.1.2,<15.0a0 + size: 1223547 + timestamp: 1769427507016 +- conda: https://conda.anaconda.org/conda-forge/win-64/gtest-1.18.0-h477610d_1.conda + sha256: b13377ca438565267079e98cdb0cc96b80099309f05f8643dbf8643066f8007a + md5: 931a07f37b46fb3c4ad8d757c80cdbde + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + constrains: + - gmock ==1.18.0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - gtest >=1.18.0,<1.18.1.0a0 + size: 550483 + timestamp: 1786419397659 +- conda: https://conda.anaconda.org/conda-forge/win-64/gts-0.7.6-h6b5321d_4.conda + sha256: b79755d2f9fc2113b6949bfc170c067902bc776e2c20da26e746e780f4f5a2d4 + md5: a41f14768d5e377426ad60c613f2923b + depends: + - libglib >=2.76.3,<3.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: LGPL-2.0-or-later + license_family: LGPL + run_exports: + weak: + - gts >=0.7.6,<0.8.0a0 + size: 188688 + timestamp: 1686545648050 +- conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h5112557_2.conda + sha256: 75c549b55b673e15de8785a8e5dd85bca7eb612eee0ff4dc8d7bdaa15eacbdbb + md5: e596942e8ee6ee17fdcf1e6a77757a66 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + run_exports: + weak: + - icu >=78.3,<79.0a0 + size: 16835644 + timestamp: 1784916416303 +- conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_2.conda + sha256: 63ff03324e903eb01a715ccf357df56d66224e61952fd6615d86490ebefb3285 + md5: 93f5a01dec294a2228f757fe2f3432d4 + depends: + - openssl >=3.5.7,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + run_exports: + weak: + - krb5 >=1.22.2,<1.23.0a0 + size: 753425 + timestamp: 1786762169034 +- conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.2.0-hd936e49_0.conda + sha256: 93d666f63f284ef77b87b0b1f77b70f7d36d315a132f9afa64bc0012d937ba39 + md5: add59e2b60ac9d4299d17c938185c75a + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + run_exports: + weak: + - lerc >=4.2.0,<5.0a0 + size: 175297 + timestamp: 1785036247761 +- conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-11_h8455456_mkl.conda + build_number: 11 + sha256: 51a38b02bacb5a4b546d41aeb0f7921ee85c0ec1009fdcb58635bcad06f2eb1a + md5: a63c8b08343d276a552c395f495987fa + depends: + - mkl >=2026.1.0,<2027.0a0 + constrains: + - blas 2.311 mkl + - libcblas 3.11.0 11*_mkl + - liblapack 3.11.0 11*_mkl + - liblapacke 3.11.0 11*_mkl + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libblas >=3.11.0,<4.0a0 + size: 67059 + timestamp: 1789061341346 +- conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-11_h2a3cdd5_mkl.conda + build_number: 11 + sha256: 9a2d431ead1463a7a96a38bedc901705c325c5bbafd7a2bcc5a198fbfcdea29e + md5: c9f8a732af97d55997f9ac6d0c02e3f2 + depends: + - libblas 3.11.0 11_h8455456_mkl + constrains: + - blas 2.311 mkl + - liblapack 3.11.0 11*_mkl + - liblapacke 3.11.0 11*_mkl + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libcblas >=3.11.0,<4.0a0 + size: 67465 + timestamp: 1789061353350 +- conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.23.0-hdb0ef4a_0.conda + sha256: d3088e1fd049fe0c1905ba6174e77279ddb4817739a204aaf4bd31d59d38ea6a + md5: 6c87d16ec0db964b4bcc4102ff8bba9b + depends: + - krb5 >=1.22.2,<1.23.0a0 + - libpsl >=0.23.1,<0.24.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: curl + license_family: MIT + run_exports: + weak: + - libcurl >=8.23.0,<9.0a0 + size: 419667 + timestamp: 1791990844429 +- conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h1a1d4e4_1.conda + sha256: af1cda21d4653f594fbef20aa4e1ff158a546902b3307ef8af9a9b44b43862d2 + md5: e4e122e124676a49eebf241399ad8393 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + run_exports: + weak: + - libdeflate >=1.25,<1.26.0a0 + size: 157828 + timestamp: 1785908793271 +- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.5-hac47afa_0.conda + sha256: 70c73d9fd24ad996f2821d1501adae2ca70984b4e2d8faed76227f348ce86078 + md5: 4969128c45f9e71adbb6a1696679ce7f + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - expat 2.8.5.* + license: MIT + license_family: MIT + run_exports: {} + size: 72107 + timestamp: 1790346254561 +- conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.7.0-h3d046cb_1.conda + sha256: 613e8077c5cca5df7fe84ade7d5050301bee3c6c4c450ffe61d34a349ab4f11c + md5: ceb38b0ba900847d8da4289c3c8e5708 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + run_exports: + weak: + - libffi >=3.7.0,<3.8.0a0 + size: 49992 + timestamp: 1787753517346 +- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_2.conda + sha256: d794d7fddb6eea50e18a62fa27ab3819f40d51bad00b90cf4ca591fb0d4006c2 + md5: 740f99c3c91079c03874b809fedace1b + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + run_exports: {} + size: 8742 + timestamp: 1786641045882 +- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_2.conda + sha256: cbc650854003e434d4ff6c7b1a2667e38a4242ad8a391a1c5ff89721624065ce + md5: 8157483eb7ed3fcba71aad3b50a97131 + depends: + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + run_exports: {} + size: 340385 + timestamp: 1786641044865 +- conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-16.2.0-h110b43a_7.conda + sha256: 59feb6d16cba13a70f22dae70a44670eb2cc45e652e9a34a014814c2ca871132 + md5: bd1e0d06981ae43e35c1ebb50e268c59 + depends: + - _openmp_mutex >=4.5 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + constrains: + - libgcc-ng ==16.2.0=*_7 + - libgomp 16.2.0 h8ee18e1_7 + - msys2-conda-epoch <0.0a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: {} + size: 826913 + timestamp: 1790304405241 +- conda: https://conda.anaconda.org/conda-forge/win-64/libgd-2.3.3-h4974f7c_12.conda + sha256: 9ab562c718bd3fcef5f6189c8e2730c3d9321e05f13749a611630475d41207fc + md5: 3a5b40267fcd31f1ba3a24014fe92044 + depends: + - fontconfig >=2.15.0,<3.0a0 + - fonts-conda-ecosystem + - icu >=78.1,<79.0a0 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libpng >=1.6.53,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - xorg-libxpm >=3.5.17,<4.0a0 + license: GD + license_family: BSD + run_exports: + weak: + - libgd >=2.3.3,<2.4.0a0 + size: 166711 + timestamp: 1766331770351 +- conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.90.1-ha564072_0.conda + sha256: 7b44e3985afe6c5962a9e6489b5ad20b769c92513f071694bb74b07ecf3c9a97 + md5: 927a4c5666511ef59ebcbb1bab303ee5 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libffi >=3.7.0,<3.8.0a0 + - libzlib >=1.3.2,<2.0a0 + - libintl >=0.22.5,<1.0a0 + - libiconv >=1.18,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - glib >2.66 + license: LGPL-2.1-or-later + run_exports: + weak: + - libglib >=2.90.1,<3.0a0 + size: 4611250 + timestamp: 1791383991358 +- conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-16.2.0-h8ee18e1_7.conda + sha256: 4b8a747f047d069ccd2a6cf2f4fdbc6b0c0e4dcd840998d1fe607b8c234e707b + md5: 1725e0c19dd2f01de09805536c4f3b51 + depends: + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + constrains: + - msys2-conda-epoch <0.0a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + run_exports: + strong: + - _openmp_mutex >=4.5 + - libgomp >=16.2.0 + size: 688609 + timestamp: 1790304345963 +- conda: https://conda.anaconda.org/conda-forge/win-64/libharfbuzz-14.6.0-h03b5201_2.conda + sha256: da91b4b5e9141b2d507d78d1e6bced541174f059eba82316d48d035c3a67da51 + md5: 8b64e45e9d75287fb75c580bd4d433d3 + depends: + - cairo >=1.18.6,<2.0a0 + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libexpat >=2.8.5,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libglib >=2.90.1,<3.0a0 + - libpng >=1.6.59,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + run_exports: {} + size: 1144229 + timestamp: 1791900872614 +- conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.15.0-default_hae90fe0_1001.conda + sha256: 240368b73a984a1812dab5f7964ed03304950ad97466cd7ee347df9cc707629d + md5: b679b0f76b152d40294fa4e43cabfd4a + depends: + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - libxml2 + - libxml2-16 >=2.15.4 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libhwloc >=2.15.0,<2.15.1.0a0 + size: 2417452 + timestamp: 1790244291307 +- conda: https://conda.anaconda.org/conda-forge/win-64/libiceoryx-binding-c-2.95.8-h480d27c_5.conda + sha256: 4f84c2ed3b8a07b93e9e8fa09a5cc73de5c11907c8b8a3df3ce5aa647d937ba7 + md5: 594a972b33a04e701ad5e3304fae9a83 + depends: + - libiceoryx-hoofs ==2.95.8 h10852e2_5 + - libiceoryx-posh ==2.95.8 he66a732_5 + - libiceoryx-platform ==2.95.8 h477610d_5 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: Apache-2.0 AND MIT AND EPL-2.0 + run_exports: {} + size: 110009 + timestamp: 1788317817671 +- conda: https://conda.anaconda.org/conda-forge/win-64/libiceoryx-hoofs-2.95.8-h10852e2_5.conda + sha256: 7478fa6268b3756ca3079a54ce74954f57b7ccfd554ea4d8ae657de73b96330d + md5: d8361142d6f227288758b08a31853571 + depends: + - libiceoryx-platform ==2.95.8 h477610d_5 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: Apache-2.0 AND MIT AND EPL-2.0 + run_exports: {} + size: 233592 + timestamp: 1788317817671 +- conda: https://conda.anaconda.org/conda-forge/win-64/libiceoryx-platform-2.95.8-h477610d_5.conda + sha256: 8f8812b4ecec9eb9ae3c60bf4bdc471259a53f763eae06a0685ca962f9fcb5ef + md5: 682bcc2f3ed9c22f744374fa3abfde88 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: Apache-2.0 AND MIT AND EPL-2.0 + run_exports: {} + size: 68355 + timestamp: 1788317817671 +- conda: https://conda.anaconda.org/conda-forge/win-64/libiceoryx-posh-2.95.8-he66a732_5.conda + sha256: 8c5e77c0ebbeaf884b35f4cc848c7933e277293937304cbf409a63ba10f44edf + md5: 3534cee6018158ffd82fdcf744c11579 + depends: + - libiceoryx-hoofs ==2.95.8 h10852e2_5 + - libiceoryx-platform ==2.95.8 h477610d_5 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: Apache-2.0 AND MIT AND EPL-2.0 + run_exports: {} + size: 640114 + timestamp: 1788317817671 +- conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_3.conda + sha256: 35e04e3ddac7720fc7c550a1c9f998604299d6a7bd1f3ec9b2825d825061daa2 + md5: a8a2abdf0f901bc4779d9b7be0845921 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.1-only + run_exports: + weak: + - libiconv >=1.18,<2.0a0 + size: 694899 + timestamp: 1787033851701 +- conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_4.conda + sha256: 85b50be2209f3b8a873830ec9894477d260f4c7ba9540e65959f5812bf7219f8 + md5: 36d6e0045173974521fabd42bd5033d6 + depends: + - libiconv >=1.18,<2.0a0 + license: LGPL-2.1-or-later + run_exports: + weak: + - libintl >=0.22.5,<1.0a0 + size: 96669 + timestamp: 1787841116808 +- conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.2.0-hfd05255_1.conda + sha256: df78ab4c0eecb3dd9331898f96baeed8e5ca1c363346332517abeb0b614b9a53 + md5: fc2c23bacefd1e733f1e1d6cd3b2aaeb + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + run_exports: + weak: + - libjpeg-turbo >=3.2.0,<4.0a0 + size: 990125 + timestamp: 1785896494014 +- conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-11_hf9ab0e9_mkl.conda + build_number: 11 + sha256: 460a2b9896bbee9a3cdfef26d1fdce056028291eef104564082de9e9f566bba6 + md5: 79bdf20fd2666b8a3485a6021c935b3a + depends: + - libblas 3.11.0 11_h8455456_mkl + constrains: + - blas 2.311 mkl + - libcblas 3.11.0 11*_mkl + - liblapacke 3.11.0 11*_mkl + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - liblapack >=3.11.0,<3.12.0a0 + size: 79503 + timestamp: 1789061364082 +- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_1.conda + sha256: d36c4a1e1f80fd08e18a407e03622ff2f34dfdd022da6488ad19603dea19e6d5 + md5: 880a0c8549479b198af21ba5dc49b109 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - xz 5.8.3.* + license: 0BSD + run_exports: + weak: + - liblzma >=5.8.3,<6.0a0 + size: 105809 + timestamp: 1786348717883 +- conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.59-hdc8cecf_0.conda + sha256: 36050852deae6edc98d7b71489b8d07254e2753c69bd524bf5784927cd1f0b2c + md5: 05145e03eb7b7f4ad2e0575454061c87 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + run_exports: + weak: + - libpng >=1.6.59,<1.7.0a0 + size: 385760 + timestamp: 1790805156982 +- conda: https://conda.anaconda.org/conda-forge/win-64/libpsl-0.23.1-h9b16d47_1.conda + sha256: e53fe3b09f82b59b644264133d6d148ac31bb5451b7583cff55690bf038f2f62 + md5: 39cdf8c4f59e4d253cfa8091c8b3d7de + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - icu >=78.3,<79.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libpsl >=0.23.1,<0.24.0a0 + size: 73511 + timestamp: 1786970749988 +- conda: https://conda.anaconda.org/conda-forge/win-64/libpython-3.12.15-hfb4101e_2_cpython.conda + build_number: 2 + sha256: 1b0a0afd12f3b4c207cd8b03ed9a5e577adb761d3b1c46a3e5ae14f149ec49b5 + md5: 436ac63cfc19db379c2277abf142bf2d + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Python-2.0 + run_exports: {} + size: 47564 + timestamp: 1791909970395 +- conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.22-h6a83c73_3.conda + sha256: 6ffc0f69a71a4b440414d32ae2960202c570431a4605069ad2762b5c04b45f16 + md5: 44aa173fe5fec2e3ba2f884cf90253c6 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: ISC + run_exports: + weak: + - libsodium >=1.0.22,<1.0.23.0a0 + size: 280822 + timestamp: 1789425326114 +- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.54.0-hf5d6505_101.conda + sha256: 210405f21c300e72287281979bbb4be8a7aeb5f31329b8afffc6a1a2cae67427 + md5: d21c450f59e7c9d130ddd68cdbd6ac40 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: blessing + run_exports: + weak: + - libsqlite >=3.54.0,<4.0a0 + size: 1332874 + timestamp: 1791584300951 +- conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h734d217_1.conda + sha256: 1097b08429b4f53f5751a32c6d99a083d227ca7f7812c0b239eea124cec073a0 + md5: a21dd9ca39e74910bb96989feb916420 + depends: + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libssh2 >=1.11.1,<2.0a0 + size: 295149 + timestamp: 1786713186180 +- conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.2-h8f73337_1.conda + sha256: 3575a092e3e52625a1767804a4ebd321becaadf61b63dcd6735ebb88c0b3c359 + md5: 970dbe48f843e7fbd179a9b6c22f865a + depends: + - lerc >=4.2.0,<5.0a0 + - libdeflate >=1.25,<1.26.0a0 + - libjpeg-turbo >=3.2.0,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 + license: HPND + run_exports: + weak: + - libtiff >=4.7.2,<4.8.0a0 + size: 1014211 + timestamp: 1787755773611 +- conda: https://conda.anaconda.org/conda-forge/win-64/libuv-1.52.1-h6a83c73_1.conda + sha256: 0d62467380061cd0fa4b27e579c805a95c7ef55a41ecb067de0c4d2d42490c66 + md5: 4ccef39545e98553cc900ea557dff085 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + run_exports: + weak: + - libuv >=1.52.1,<2.0a0 + size: 331195 + timestamp: 1785914602690 +- conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_1.conda + sha256: 4470d98d3178b0d45492eed4808afe421d2e7808352b8d06c2dc29166b75d94d + md5: 35a9475e4cc999d52921f57c181979fc + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libwebp 1.6.0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - libwebp-base >=1.6.0,<2.0a0 + size: 278886 + timestamp: 1785954716703 +- conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda + sha256: 0fccf2d17026255b6e10ace1f191d0a2a18f2d65088fd02430be17c701f8ffe0 + md5: 8a86073cf3b343b87d03f41790d8b4e5 + depends: + - ucrt + constrains: + - pthreads-win32 <0.0a0 + - msys2-conda-epoch <0.0a0 + license: MIT AND BSD-3-Clause-Clear + run_exports: {} + size: 36621 + timestamp: 1759768399557 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h874e120_2.conda + sha256: f5932cbcadb67bef9374ee864fed72411af29e88690435c6c7fc5633c89dabee + md5: 3658b0201b32da9607ea5e3c1c463c1f + depends: + - libgcc >=13 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - pthread-stubs + - ucrt >=10.0.20348.0 + - xorg-libxau >=1.0.12,<2.0a0 + - xorg-libxdmcp >=1.1.5,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - libxcb >=1.17.0,<2.0a0 + size: 1215534 + timestamp: 1787886015478 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.4-h3cfd58e_1.conda + sha256: 819c4edd7b7bcfa9461aeccb56c0a7e9fa7c251163333e64222c142499822958 + md5: 69b4a6c50e1cb5865648e039da8e5c12 + depends: + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libxml2 2.15.4 + license: MIT + license_family: MIT + run_exports: {} + size: 515690 + timestamp: 1791465669912 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.4-he095d88_1.conda + sha256: 81e8cace5c3cb62c4125882b4a6df33ab48c16349231d8ea5008bbe0ee93c10f + md5: babe0e64f176114f880f366eba9094af + depends: + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.4 h3cfd58e_1 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + run_exports: + weak: + - libxml2 + - libxml2-16 >=2.15.4 + size: 43629 + timestamp: 1791465677280 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.45-ha5384fd_1.conda + sha256: 7a2402fa33b7e4a99bba6250ce21c36269a8acbfcb3652057dce0f4a60b7f6bd + md5: ea7b3abfe39c180d1dce620867e267d1 + depends: + - libxml2 + - libxml2-16 >=2.15.3 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + run_exports: + weak: + - libxslt >=1.1.45,<2.0a0 + size: 421402 + timestamp: 1788534969422 +- conda: https://conda.anaconda.org/conda-forge/win-64/libzenohc-1.9.0-hcc20cc8_0.conda + sha256: 0af6fa66e67a464479dbc9da6c122759cc9e64f72eeb9f20884fdb60cef1f1bc + md5: b630584b7fe576683c795db80214c286 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zenoh-rust-abi >=1.9.0.1.93.1,<1.9.0.1.93.2.0a0 + license: Apache-2.0 OR EPL-2.0 + run_exports: + weak: + - libzenohc >=1.9.0,<1.9.1.0a0 + size: 4426312 + timestamp: 1777494070129 +- conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_3.conda + sha256: 0629c2cc0404d3bb29d6baa7b4ba62da80797015e86de050db81ea5a07050527 + md5: 5d2ff29d465097458cc3ff6569151991 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - zlib 1.3.2 *_3 + license: Zlib + license_family: Other + run_exports: + weak: + - libzlib >=1.3.2,<2.0a0 + size: 58529 + timestamp: 1785276664143 +- conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-23.1.3-h49e36cd_1.conda + sha256: 3eed860d303cff84c3ab771312ebb3e0b26ad10d92b38ed98a33f3bef7edd01b + md5: 9a59330f44f2ad04123dda3f6fcc7bd3 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - intel-openmp <0.0a0 + - openmp 23.1.3|23.1.3.* + license: Apache-2.0 WITH LLVM-exception + run_exports: + strong: + - llvm-openmp >=23.1.3 + size: 343582 + timestamp: 1791951366925 +- conda: https://conda.anaconda.org/conda-forge/win-64/lxml-6.1.3-py312h1476a5e_0.conda + sha256: d60a0470d35881b4c3df3967c0e1ab98f2eecdc273812f573cc7f7c373677fe1 + md5: 1e2cfcfd5315fd67ab506653c9173346 + depends: + - libxml2 + - libxml2-16 >=2.15.4 + - libxslt >=1.1.45,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause and MIT-CMU + run_exports: {} + size: 1273740 + timestamp: 1789036778093 +- conda: https://conda.anaconda.org/conda-forge/win-64/lz4-4.4.5-py312hc3c93f3_2.conda + sha256: 80c1c65884514cfaf5e99ea5c061df80c3937c5d207ff63f86c0c0e67156b157 + md5: c6d0c91ffefa16947f35b597ed320a96 + depends: + - python + - lz4-c + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - lz4-c >=1.10.0,<1.11.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 45357 + timestamp: 1789242301348 +- conda: https://conda.anaconda.org/conda-forge/win-64/lz4-c-1.10.0-h6a83c73_2.conda + sha256: 6824e36be0f95ae516dc36dddd18f69cbad0e4e07906fcb10a5f26a8dc471903 + md5: 3e0691cb20fcaf922df78ccea08b771a + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: BSD-2-Clause + license_family: BSD + run_exports: + weak: + - lz4-c >=1.10.0,<1.11.0a0 + size: 150673 + timestamp: 1786717127870 +- conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.1.0-hac47afa_235.conda + sha256: bb8abe071f73765446df62924031e6599577e8ac9003264dc4569e78c0fea16d + md5: ace316c48c178d7faa403dee51e30c7b + depends: + - llvm-openmp >=22.1.8 + - tbb >=2023.0.0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LicenseRef-IntelSimplifiedSoftwareOct2022 + license_family: Proprietary + run_exports: {} + size: 114686732 + timestamp: 1787725739779 +- conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.4-py312ha3f287d_0.conda + sha256: 38aa0c5e5c4a7b263ea03b39f5f26fd038517571a13bcd4b9cbdef3051db5ed2 + md5: 035814b95806c49d7649b166542678a0 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - numpy >=1.25,<3 + size: 7377160 + timestamp: 1791675323865 +- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.5-hf411b9b_0.conda + sha256: bc44625e0c6d83f3e02b5f6adc01e0e3ca7001d3d94e24959591a57f5a011b9a + md5: f002ec2237836867bfd3d1299a6005da + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + run_exports: + weak: + - openssl >=3.6.5,<4.0a0 + size: 9402647 + timestamp: 1791099870810 +- conda: https://conda.anaconda.org/conda-forge/win-64/orocos-kdl-1.5.4-h85e3ab8_0.conda + sha256: 643082311a02386442cf26a7d13503ae034578e5212c194a08bcdaca9de69e69 + md5: 0b8c558424064bc20db3e6a06107adf4 + depends: + - eigen + - eigen-abi >=5.0.1.100,<5.0.1.101.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.1-or-later + license_family: LGPL + run_exports: + weak: + - orocos-kdl >=1.5.4,<1.6.0a0 + size: 1845585 + timestamp: 1788266516739 +- conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.58.2-h13911b6_1.conda + sha256: 110d2731a105c0b9bd6396ad371401db90bd53179a283ff77f774872beb5bcd4 + md5: 7953b4cc0a7a47a0d91fa2e664269a0c + depends: + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.18.3,<3.0a0 + - fonts-conda-ecosystem + - fribidi >=1.0.16,<2.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libglib >=2.88.3,<3.0a0 + - libharfbuzz >=14.4.0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: LGPL-2.1-or-later + run_exports: + weak: + - pango >=1.58.2,<2.0a0 + size: 465040 + timestamp: 1788490491378 +- conda: https://conda.anaconda.org/conda-forge/win-64/pcre-8.45-h0e60522_0.tar.bz2 + sha256: 2ee62337b921b2d60a87aa9a91bf34bc855a0bbf6a5642ec66a7a175a772be6d + md5: 3cd3948bb5de74ebef93b6be6d8cf0d5 + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - pcre >=8.45,<9.0a0 + size: 530818 + timestamp: 1623789181657 +- conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-h8466c1e_1.conda + sha256: d8e9ea26b52a09d880d1e5371830c8dd5b4c099a6db64dbdf8236440744b7499 + md5: 009af999dbe2d1db36a37187a4ca4eb4 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - pcre2 >=10.47,<10.48.0a0 + size: 993241 + timestamp: 1787294653206 +- conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_3.conda + sha256: cad8b94c2b00264a15d469eed6dc53aac1c59c6d46f27ad1d91bfaf227cf136a + md5: 27c5be39d9e4d25fe85b89a069360d1e + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + run_exports: + weak: + - pixman >=0.46.4,<1.0a0 + size: 257473 + timestamp: 1786106677325 +- conda: https://conda.anaconda.org/conda-forge/win-64/pkg-config-0.29.2-hffdb5b9_1013.conda + sha256: b6c2a3c7b6b2726ced43946f2798eabfe50333144ce8195f1e7558d24c139298 + md5: 18cf69296cccd94d6921016bdf346c24 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libglib >=2.88.3,<3.0a0 + license: GPL-2.0-or-later + license_family: GPL + run_exports: {} + size: 37998 + timestamp: 1788677380581 +- conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py312he5662c2_3.conda + sha256: 499b676620082970d0972b22415ebe241fd455075b130e8cb4694ba7f68dbd33 + md5: 6e32e3f62040195ec6709aa4215d1e40 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 242905 + timestamp: 1789682050500 +- conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hfa92662_1004.conda + sha256: 2418cf449df76b0da851cb59b7c826a9ade81914eaff799fbfd3f509ba1edf46 + md5: fda2f9fedee1b85ba855ea26a9b6bbf8 + depends: + - libgcc >=15 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + run_exports: {} + size: 10612 + timestamp: 1788382011501 +- conda: https://conda.anaconda.org/conda-forge/win-64/pybullet-3.25-py312h3d6c809_5.conda + sha256: 0373f265eae27e4927775bce17641720d209623020af0eb230f409a469f65ba2 + md5: b9720678a55505d5518d4278162c49f9 + depends: + - bullet-cpp 3.25 hc128f0a_5 + - libzlib >=1.3.1,<2.0a0 + - numpy >=1.23,<3 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Zlib + run_exports: {} + size: 61964774 + timestamp: 1761043848455 +- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.15-hb12b558_2_cpython.conda + build_number: 2 + sha256: 39d230c501c2c82a61689e5e3d2d88b84bcd85bc4f2e1429f6bc6264082ef958 + md5: cfd4a4bce81b68e249c4c0442a9c1a0d + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.8.5,<3.0a0 + - libffi >=3.7.0,<3.8.0a0 + - liblzma >=5.8.3,<6.0a0 + - libpython 3.12.15 hfb4101e_2_cpython + - libsqlite >=3.54.0,<4.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.9,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + run_exports: + weak: + - python_abi 3.12.* *_cp312 + noarch: + - python + size: 15885151 + timestamp: 1791910062494 +- conda: https://conda.anaconda.org/conda-forge/win-64/python-orocos-kdl-1.5.4-py312hbb81ca0_0.conda + sha256: 23d168f8aee263a3074a4465485053c3ebb1c81924a28f1d5706a5f54ddcd12d + md5: 9b7227d4ddac2e36699ce1177e4f0dcc + depends: + - eigen + - orocos-kdl + - pybind11 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.1-or-later + license_family: LGPL + run_exports: + weak: + - python-orocos-kdl >=1.5.4,<1.6.0a0 + size: 401950 + timestamp: 1788266639224 +- conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py312h05f76fc_1.conda + sha256: 1cab6cbd6042b2a1d8ee4d6b4ec7f36637a41f57d2f5c5cf0c12b7c4ce6a62f6 + md5: 9f6ebef672522cb9d9a6257215ca5743 + depends: + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + run_exports: {} + size: 179738 + timestamp: 1770223468771 +- conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.2.0-py312h343a6d4_2.conda + noarch: python + sha256: ca1357d0515a61ad5ac04ab9283ab7aa474ea469bc7547761045b04faae2bec8 + md5: 5d081ba4373228161717ab00bb647508 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - _python_abi3_support 1.* + - cpython >=3.12 + - zeromq >=4.3.5,<4.3.6.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 191813 + timestamp: 1789730188711 +- conda: https://conda.anaconda.org/conda-forge/win-64/spdlog-1.17.0-hd227c35_2.conda + sha256: bd14e9166389be0c654e724e16290772b65745aee8d8bb8bacc65d3179330387 + md5: 0d1e29b811d1fea9ba0fe8c869fa5e96 + depends: + - fmt >=12.1.0,<12.2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + run_exports: + weak: + - spdlog >=1.17.0,<1.18.0a0 + size: 174998 + timestamp: 1785924400857 +- conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.54.0-hdb435a2_101.conda + sha256: 5b5cf2364b56ee4d75126d4b1f33cfb32e101343bedf18d2e7c91e524306e712 + md5: 96e4b98490ed888b4075784037585eed + depends: + - libsqlite 3.54.0 hf5d6505_101 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: blessing + run_exports: + weak: + - libsqlite >=3.54.0,<4.0a0 + size: 446508 + timestamp: 1791584303444 +- conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.1.0-h272cf33_2.conda + sha256: 65f5a52eb5250ca0d627e6958e703583dca008988695284fc2181b3a0a790efd + md5: 83371bd3f796b3c2d3f0436692d3ea73 + depends: + - libhwloc >=2.15.0,<2.15.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: APACHE + run_exports: {} + size: 157572 + timestamp: 1790591966816 +- conda: https://conda.anaconda.org/conda-forge/win-64/tinyxml2-11.0.0-h5112557_1.conda + sha256: aace0c0c0dbcd2b0a028ba06573878d6a852228c70d3031e3c035cf9e066b020 + md5: ca4db58a2d84895956bba15dfb02e92c + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: Zlib + run_exports: + weak: + - tinyxml2 >=11.0.0,<11.1.0a0 + size: 76850 + timestamp: 1789420970029 +- conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_4.conda + sha256: f19618a3a82cc483dacf1c70a30367ee7b0c7e71b90f1f80e14feff44fbd3688 + md5: dd9eb33c99d352b6356f86964d6040f7 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: TCL + run_exports: + weak: + - tk >=8.6.13,<8.7.0a0 + size: 3782376 + timestamp: 1787272860855 +- conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + sha256: 3005729dce6f3d3f5ec91dfc49fc75a0095f9cd23bab49efb899657297ac91a5 + md5: 71b24316859acd00bdb8b38f5e2ce328 + constrains: + - vc14_runtime >=14.29.30037 + - vs2015_runtime >=14.29.30037 + license: LicenseRef-MicrosoftWindowsSDK10 + run_exports: {} + size: 694692 + timestamp: 1756385147981 +- conda: https://conda.anaconda.org/conda-forge/win-64/uncrustify-0.83.0-h5112557_0.conda + sha256: 0b6a79198507fe18b7fb822dbe5c9c5efdc4e5d7d8ae4ad70361c5e6efbe0c8b + md5: e4d7febb1054ef80bb05d2c239d7deef + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: GPL-2.0-only + license_family: GPL + run_exports: {} + size: 486227 + timestamp: 1779015717704 +- conda: https://conda.anaconda.org/conda-forge/win-64/urdfdom-6.0.1-h37f4996_0.conda + sha256: 91a71ee48db979ee4d494b0668c725603b1febd12d628f5c530da9e1ca564ff9 + md5: 7c66ebdc8813a4997d8c36d70f127c9a + depends: + - urdfdom_headers >=3.0.1,<4.0a0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - tinyxml2 >=11.0.0,<11.1.0a0 + - console_bridge >=1.0.2,<1.1.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - urdfdom_headers >=3.0.1,<4.0a0 + - urdfdom >=6.0.1,<7.0a0 + size: 100897 + timestamp: 1787009836189 +- conda: https://conda.anaconda.org/conda-forge/win-64/urdfdom_headers-3.0.1-h477610d_1.conda + sha256: a9f4c347d22f2f32df2089eb6ed06396d7bdfe059072c05f7f35221945fcc9f2 + md5: ce03adcd93654386ec71ee99a025f1fe + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 20090 + timestamp: 1787006296934 +- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-ha367084_41.conda + sha256: 35444c55a92e2f7f7ba26bc70f81e56e52344f7d064c0fd4b40a46a58517b79c + md5: aa805b5522c2a98fa286e551a1f48546 + depends: + - vc14_runtime >=14.51.36247 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 21383 + timestamp: 1785359368566 +- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36247-habf1de7_41.conda + sha256: 4e4cb599cdc41bf2109d1464c127b5bcbddf548ce3e322e612afb691338b48f8 + md5: ac5333bb3d429361f23adf704cc49a78 + depends: + - ucrt >=10.0.20348.0 + - vcomp14 14.51.36247 habf1de7_41 + constrains: + - vs2015_runtime 14.51.36247.* *_41 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + run_exports: {} + size: 767955 + timestamp: 1785359364369 +- conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36247-habf1de7_41.conda + sha256: 731e043390c9457299484d39e427221fc868a9249540a498a5a4f6456c7744d1 + md5: 350bb67a5c8e5f1c53347ac544ab6600 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.51.36247.* *_41 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + run_exports: + strong: + - vcomp14 >=14.51.36247 + size: 155910 + timestamp: 1785359349999 +- conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.51.36247-h633cb9f_41.conda + sha256: ee0ae67c96b80b9fdb50c3f617c6329dbcdf1562d0267604f6c0e24f494431d6 + md5: 21504569fa34b5d3a67760219e3ff1cc + depends: + - vc14_runtime >=14.51.36247 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 21386 + timestamp: 1785359368990 +- conda: https://conda.anaconda.org/conda-forge/win-64/websockets-17.2-py312h5247d40_0.conda + sha256: 156a91782772bf14e01cdd88e3a941b9b0c64d7498f23f98b7d7435c31d74109 + md5: 99620d4becc11efac9b6553506d8ebae + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 467939 + timestamp: 1791057460176 +- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libice-1.1.2-hd74fcf3_0.conda + sha256: 85832f409756e78d6d0a92756cd5463fa253219041e40a681d5e8d4c9d21ec8b + md5: a1629a20e5b128c4512b80a93bb1ae55 + depends: + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - libgcc >=14 + - ucrt >=10.0.20348.0 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libice >=1.1.2,<2.0a0 + size: 168856 + timestamp: 1786474456144 +- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libsm-1.2.6-hd74fcf3_1.conda + sha256: bc043a818313abfd836e4e662df1cc9edd6d81994c87a8b35004ca286cebe7c8 + md5: edb94e6121d977d7bc2cc0f56d656c14 + depends: + - libgcc >=14 + - ucrt >=10.0.20348.0 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - xorg-libice >=1.1.2,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libsm >=1.2.6,<2.0a0 + size: 116838 + timestamp: 1786545424783 +- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libx11-1.8.13-hfa52320_1.conda + sha256: 4f86b6f9e8bd76e219440be595bbd7aeba3fe9ad56e4f10c7b41dfd03fb9c3a6 + md5: 369df5999d1a5baf57b53fd892aafc7e + depends: + - libgcc >=14 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - libxcb >=1.17.0,<2.0a0 + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libx11 >=1.8.13,<2.0a0 + size: 954803 + timestamp: 1787087422301 +- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hfa92662_2.conda + sha256: b9f063792e4d50ef2669c30dfc4ba14aefb4fdc37e384241a71093bee0493ad1 + md5: 68403004c805ce03b71a5889a4c47fa1 + depends: + - libgcc >=15 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxau >=1.0.12,<2.0a0 + size: 112892 + timestamp: 1788960775276 +- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hfa92662_2.conda + sha256: 6265afeeaab391aa245e173dba5e18c8e69ac5a73f60fe20d8057ebadafbb4a4 + md5: 17274cf7d62e029e62653a3e6c80b379 + depends: + - libgcc >=15 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxdmcp >=1.1.5,<2.0a0 + size: 72768 + timestamp: 1789677202037 +- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxext-1.3.7-hfa92662_1.conda + sha256: bd39b2950d5144eb6bd5fafc4002fa7bbdcf2f72c32e4709aa080cb4c158ec4a + md5: ff2351642e25ff00ae484a6b533c0c9e + depends: + - libgcc >=15 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxext >=1.3.7,<2.0a0 + size: 288484 + timestamp: 1787101089071 +- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxpm-3.5.19-hba3369d_0.conda + sha256: 1d3907533a6e26bb62f109a33107064e2140503a8076de5b28b384ef3e473d27 + md5: 39d8a6b9a87047c817e5881fc0706684 + depends: + - libgcc >=14 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxt >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxpm >=3.5.19,<4.0a0 + size: 237565 + timestamp: 1776790287445 +- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxt-1.3.1-hfa92662_1.conda + sha256: 4d1d9b59dc7c2e90f0a1388dd6feb87b54a033bba29f7a7269e35487d332c5be + md5: 41eebca909ba9e18a69eba80152ffb1c + depends: + - libgcc >=15 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + run_exports: + weak: + - xorg-libxt >=1.3.1,<2.0a0 + size: 927081 + timestamp: 1787103397071 +- conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda + sha256: 80ee68c1e7683a35295232ea79bcc87279d31ffeda04a1665efdb43cbd50a309 + md5: 433699cba6602098ae8957a323da2664 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + run_exports: + weak: + - yaml >=0.2.5,<0.3.0a0 + size: 63944 + timestamp: 1753484092156 +- conda: https://conda.anaconda.org/conda-forge/win-64/yaml-cpp-0.8.0-h5112557_1.conda + sha256: 643e9f439d6446c28e85f30b089e0fafbc937e57b7443f9e66d1dc2ef6bce6ff + md5: 04e7e743edaa756d863aaa3bf6c89aad + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + run_exports: + weak: + - yaml-cpp >=0.8.0,<0.9.0a0 + size: 150033 + timestamp: 1785924043282 +- conda: https://conda.anaconda.org/conda-forge/win-64/zenoh-rust-abi-1.9.0.1.93.1-heb1d585_0.conda + sha256: 5bd008b130765dec98cfc3840c716a53ab67605439e3f653c18da2158affda12 + md5: 9966387c08f20c0531187c462380b6a3 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 OR EPL-2.0 + run_exports: + weak: + - zenoh-rust-abi >=1.9.0.1.93.1,<1.9.0.1.93.2.0a0 + size: 52672 + timestamp: 1775854702148 +- conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h3a581c9_12.conda + sha256: 77666f68961acb86b985645734dcf7827355cf22a7f9236838e1a6e07bf06124 + md5: fc0bef11265f13c4acd2ab4a7432d5ab + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - krb5 >=1.22.2,<1.23.0a0 + - libsodium >=1.0.22,<1.0.23.0a0 + license: MPL-2.0 + license_family: MOZILLA + run_exports: + weak: + - zeromq >=4.3.5,<4.3.6.0a0 + size: 265930 + timestamp: 1789076564779 +- conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda + sha256: ca7daae4f218a11fab82cc2857f0ea518ec3f46acec60490485347a4c22c6b3e + md5: e4ac308c39d6d0e131154976da67cf3b + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libzlib >=1.3.2,<2.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: + weak: + - zstd >=1.5.7,<1.6.0a0 + size: 387535 + timestamp: 1786599623274 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros-jazzy-demo-nodes-py-0.33.11-hb0f4dca_25.conda + sha256: e46dbea494b1d4b7890e63a8e953292e1c262f883b0f9e9deace50cf14037663 + md5: 46e6462433a7ebcd47aac2e0235eed90 + depends: + - ros2-demo-nodes-py ==0.33.11 + size: 2045 + timestamp: 1791433832043 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros-jazzy-rmw-zenoh-cpp-0.2.11-hb0f4dca_25.conda + sha256: 813d8468998f632975328dd866b7a9a4121c491d79ef1a75bcf806ee20416eff + md5: 342c741ee7f06dfa8038817dc6f8ffaa + depends: + - ros2-rmw-zenoh-cpp ==0.2.11 + size: 2039 + timestamp: 1791431858210 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros-jazzy-ros-base-0.11.0-hb0f4dca_25.conda + sha256: 288cb770fc03de7618b21701634ad417925b0e99fcb36d1d3c1bbbf4d436852c + md5: e9329c044f906aa49b164423973124bc + depends: + - ros2-ros-base ==0.11.0 + size: 2020 + timestamp: 1791447966743 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-action-msgs-2.0.4-np2py312h1bab3cf_25.conda + sha256: 8ca78dd5ec6bb7e6986c1d3259aea9b914ca4c7a6876ead8cd37998796e2d5bd + md5: 5a21fc1c2c8695fd34dfa4831babb9af + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - ros2-service-msgs + - ros2-unique-identifier-msgs + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 157045 + timestamp: 1791431908804 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-actionlib-msgs-5.3.8-np2py312h1bab3cf_25.conda + sha256: add55bfcafb9878e875a09d14209784733bdaebfe9e487aa5a8d7d69960a1099 + md5: 09b44490c4db813cb23ae5005dab62c7 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 116055 + timestamp: 1791433524700 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-2.5.6-np2py312h1bab3cf_25.conda + sha256: 8cf9f02ba9bfc85970dd2c58f45ac268e125e6b336d9f1a50f853b187c32d30f + md5: 595679057b9b830cb0728fa9c6f79317 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-export-definitions + - ros2-ament-cmake-export-dependencies + - ros2-ament-cmake-export-include-directories + - ros2-ament-cmake-export-interfaces + - ros2-ament-cmake-export-libraries + - ros2-ament-cmake-export-link-flags + - ros2-ament-cmake-export-targets + - ros2-ament-cmake-gen-version-h + - ros2-ament-cmake-libraries + - ros2-ament-cmake-python + - ros2-ament-cmake-target-dependencies + - ros2-ament-cmake-test + - ros2-ament-cmake-version + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - cmake + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 23677 + timestamp: 1791428111238 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-auto-2.5.6-np2py312h1bab3cf_25.conda + sha256: f0aaf2454e840c95dcfb2f8f80e89592cc715d0b4d9b62d062af08d1a6679b50 + md5: dd503912528ca4a606c11a5ff364dea5 + depends: + - python + - ros2-ament-cmake + - ros2-ament-cmake-gmock + - ros2-ament-cmake-gtest + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 27789 + timestamp: 1791428344501 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-copyright-0.17.5-np2py312h1bab3cf_25.conda + sha256: 7a4d46fd708017065f4b4fdfc0913bd3bb8136811ef3464fbd9d171b324bdced + md5: 0d18bd6b0275f798e8c112c8d00c1675 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-copyright + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 23129 + timestamp: 1791429245063 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-core-2.5.6-np2py312h1bab3cf_25.conda + sha256: 4a78ffb7a5e622151e049f882836bafca7ba49934f6d09185295174ef629eebb + md5: 401eb584cbcb0ef9b2d460e32e9deb52 + depends: + - catkin_pkg + - python + - ros2-ament-package + - ros2-distro-mutex 0.19.* jazzy_* + - cmake + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 45446 + timestamp: 1791427258778 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-cppcheck-0.17.5-np2py312h1bab3cf_25.conda + sha256: 7fb8a6af3abdee59e8b0c24611fba7864c0e3dfccfc8c4c1d237483310c07b5b + md5: 5e68a992f419d2079060eccddda2afb6 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-test + - ros2-ament-cppcheck + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 24913 + timestamp: 1791429524456 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-cpplint-0.17.5-np2py312h1bab3cf_25.conda + sha256: dd8952a59227de5c35c68362c0657a1e2000ed271df67354a670d2daae7eb1e1 + md5: 040923734ec0871b69c2ab9cdc3144e0 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-cpplint + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 23719 + timestamp: 1791429520046 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-export-definitions-2.5.6-np2py312h1bab3cf_25.conda + sha256: fa5139ba537b5f2d3da455757d7822f513feb479766570fbab97cac2f52141da + md5: 84595165646232cd7e812fc68998738f + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 22462 + timestamp: 1791427340663 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-export-dependencies-2.5.6-np2py312h1bab3cf_25.conda + sha256: ea679d1b2895e9df4912e01018a9aa3bb6e03c2d816279f1482d811d1ca70881 + md5: 07c44ee93ec448875ac7e490c1538a2f + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-libraries + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 23384 + timestamp: 1791427520226 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-export-include-directories-2.5.6-np2py312h1bab3cf_25.conda + sha256: b9169167541a01a53046ce8e199da9c2f9041c1085062667eabbfeb7d4738c53 + md5: e130fc4b5aa04deb602bef03d10f3aca + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 22877 + timestamp: 1791427337330 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-export-interfaces-2.5.6-np2py312h1bab3cf_25.conda + sha256: fee1299458e6b529f2a1abe3056e28ea85854a1e7d1b18620831bb8900c24473 + md5: b9006fd3d058ab6d4377b65a0044c29e + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-export-libraries + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 23061 + timestamp: 1791427528650 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-export-libraries-2.5.6-np2py312h1bab3cf_25.conda + sha256: 5a7734ecc2f6bc4ec673acfd3260262f4e1c8045c244784d69844281767cea6d + md5: aa0f141306d1d48cbb91783ce96a1a95 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 24379 + timestamp: 1791427326755 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-export-link-flags-2.5.6-np2py312h1bab3cf_25.conda + sha256: ef122a24b69475894620456472c43741b2c7ecd412aa492dec4ee65d02bd4457 + md5: 1ece4ed90fb53e7093018508990a0dad + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 22407 + timestamp: 1791427333503 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-export-targets-2.5.6-np2py312h1bab3cf_25.conda + sha256: 874d82aa1f3cfe00aa399ae5252ede7f1b96029334b4c5ebf4324a060f37fb22 + md5: 9b455953c311d66f1426f6f321b180a6 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-export-libraries + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 23186 + timestamp: 1791427525886 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-flake8-0.17.5-np2py312h1bab3cf_25.conda + sha256: 6336e9bfb4dc6b4e5bfb01f08830f75a600ee6feb1bb9b5ee225be8a69fc3615 + md5: 4df9ca6d193e757c69241d8582f843fc + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-flake8 + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 24811 + timestamp: 1791429515322 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-gen-version-h-2.5.6-np2py312h1bab3cf_25.conda + sha256: 30f078e4e66684221f0625b14e438165be24898b5f7abc463cd0d9cabbb238a7 + md5: b0bfdc258ac071fa1d65ea298d00f855 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 25191 + timestamp: 1791427979649 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-gmock-2.5.6-np2py312h1bab3cf_25.conda + sha256: 33660d9ba8ce543d2ae8d4d64a39d201e2e447faafdd699000c6f5ec284c423b + md5: c79db8befa7bef112b12e10ce44ad190 + depends: + - gmock + - python + - ros2-ament-cmake-gtest + - ros2-ament-cmake-test + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-gmock-vendor + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 25336 + timestamp: 1791427987916 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-gtest-2.5.6-np2py312h1bab3cf_25.conda + sha256: 2b90b5f6cc914089ee5ead8480c0a69d2a94c5336fe8aac5a62e9937372951ef + md5: aaf3f5e8331ba45375a00af598ebe618 + depends: + - gtest + - python + - ros2-ament-cmake-test + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-gtest-vendor + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - gtest >=1.18.0,<1.18.1.0a0 + license: Apache-2.0 + size: 25079 + timestamp: 1791427803018 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-include-directories-2.5.6-np2py312h1bab3cf_25.conda + sha256: fa959597c59fecf765d806ca72f0db9501621cd74c49863884c9b95683208549 + md5: 0a77aa62042c70cd22f636751f2e8a06 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 22329 + timestamp: 1791427323332 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-libraries-2.5.6-np2py312h1bab3cf_25.conda + sha256: 57fab4728091fda8429a0fbae16b6cf78c50e520ce8a38aa052d6481230d9d02 + md5: 1079acd1a0d4582eaf01689a3294ca7a + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 22048 + timestamp: 1791427319889 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-lint-cmake-0.17.5-np2py312h1bab3cf_25.conda + sha256: ab655939cd99c05eadf1021ff6e54c471921bcd5795f33a2636e4f1c7fc1f2b5 + md5: 5838b57fee1d78f2cadfe1d0724d99ad + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-lint-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 22766 + timestamp: 1791428284674 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-pep257-0.17.5-np2py312h1bab3cf_25.conda + sha256: 9a503804281f75150804a427019d7b50a3560b10f45aa6b02300cba858e8ef69 + md5: 2bcba4d0f47c37134362395556b13d96 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-pep257 + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 23506 + timestamp: 1791429511311 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-pytest-2.5.6-np2py312h1bab3cf_25.conda + sha256: 1de745a559ef98cbc562cb4ae7785b844e949e24094242992f9f72d7cb028663 + md5: cafa9fdacb310320856f83e463d50faf + depends: + - pytest + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-test + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 25280 + timestamp: 1791427821973 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-python-2.5.6-np2py312h1bab3cf_25.conda + sha256: cfe2af004afef46ec0ba1e344076470bbc2ae2dfd01606104e4851c63716c470 + md5: bd8433c88360d2135c3c653339ae64db + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 25410 + timestamp: 1791427310520 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-ros-0.12.2-np2py312h1bab3cf_25.conda + sha256: 848b470a47f9dcccccb6720ac17ee42212f35e1ea6e293b0a15db60d402e22a2 + md5: c6ecd874efd2f2f997086b6019dd24cc + depends: + - python + - ros2-ament-cmake + - ros2-ament-cmake-gmock + - ros2-ament-cmake-gtest + - ros2-ament-cmake-pytest + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-domain-coordinator + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 31947 + timestamp: 1791430079856 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-target-dependencies-2.5.6-np2py312h1bab3cf_25.conda + sha256: 586917c3246b371f70f6d96dc66fb64920941f3d5ff5267612cfccc98fd2f90c + md5: d4199059bdc47b8159f04b20e7ace9f2 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-include-directories + - ros2-ament-cmake-libraries + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 24072 + timestamp: 1791427523117 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-test-2.5.6-np2py312h1bab3cf_25.conda + sha256: f47bec6df6d7d901f9f371c9b16701da74247d7ed4e8d6971c76ca05f68f58a6 + md5: e7796a49a5517e8096bb95ba3c18fd63 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 36455 + timestamp: 1791427512631 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-uncrustify-0.17.5-np2py312h1bab3cf_25.conda + sha256: 47077b738a16aeaacc0c6fcd4aef592698d6f94132de1827896a9f52f70020d0 + md5: c0383d1aa47908e1fd3bdb30e8c3e220 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-uncrustify + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 24077 + timestamp: 1791429504516 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-version-2.5.6-np2py312h1bab3cf_25.conda + sha256: 6282cbdd2dca120c8e77f53ad528b6475d400247116b74436ada4abca128b385 + md5: b659f886e6b8f2c9af01c3ad38634ff6 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 22207 + timestamp: 1791427330142 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cmake-xmllint-0.17.5-np2py312h1bab3cf_25.conda + sha256: 4a048b6e026cf787f8cd99461b0e10736fc53c76c1b760693639ae6ea31a6fad + md5: 2c029cf143abc518725999e512b0b2a9 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-xmllint + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 23514 + timestamp: 1791429484725 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-copyright-0.17.5-np2py312h1bab3cf_25.conda + sha256: 0c679ed2df66ce87acc1fb39a24d879f6f0606da4c457ba6f6409129f04a5f57 + md5: 94ada81d243ebc5cb97523c409d1a75c + depends: + - importlib-metadata + - python + - ros2-ament-lint + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 66632 + timestamp: 1791427959449 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cppcheck-0.17.5-np2py312h1bab3cf_25.conda + sha256: db4f8a45beee23bbd1633059878824ac012dde814abe7f296c55c1ce7cae1624 + md5: a24385c384c5ea3a39604bec06c0604b + depends: + - cppcheck + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 30037 + timestamp: 1791428130987 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-cpplint-0.17.5-np2py312h1bab3cf_25.conda + sha256: 94d9da72700debf9a89f7afc534d0e8ac1d635e948afa175e24116f67e26230b + md5: 3fac3a2c675140ac65bd2637c83b8fe4 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR BSD-3-Clause + size: 169017 + timestamp: 1791428125565 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-flake8-0.17.5-np2py312h1bab3cf_25.conda + sha256: 88afdafa285b339b59ea7e5f25c7b861a9e6eae0a210c64aa65c722bdd7362f2 + md5: ea56717ed0210b1882e12b3b82d3bedc + depends: + - flake8 + - flake8-builtins + - flake8-comprehensions + - flake8-docstrings + - flake8-import-order + - flake8-quotes + - python + - ros2-ament-lint + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 28541 + timestamp: 1791427496737 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-index-cpp-1.8.4-np2py312h1bab3cf_25.conda + sha256: c8f316fff45902e7da8e55e1dc20db385eb8302319db6b218dde6197bcdc6aa2 + md5: 171cc772bd99524bb91dca0c9bc4644e + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 53375 + timestamp: 1791430403454 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-index-python-1.8.4-np2py312h1bab3cf_25.conda + sha256: a1bdbdc53eaf6a46ff00530afe36987c5384daec7540abb4b3ffc2a6ff92dcbb + md5: d754f9457b52aa3792dcffc9101b5e30 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 29803 + timestamp: 1791428135816 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-lint-0.17.5-np2py312h1bab3cf_25.conda + sha256: c8207007e7fabd57f39d7d6493bdb7db48bb928473b36053e37bad8b84620502 + md5: a6e3285cff2decdc69a12ef54b5102ea + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 19002 + timestamp: 1791427295806 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-lint-auto-0.17.5-np2py312h1bab3cf_25.conda + sha256: b11ffaaf5d9940a4f9c992891222d8e1f4be68dd5b63dcd8cfec4551e7df8535 + md5: c80eaf67c6be9d3a1e5436fb02fd9679 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-test + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 22430 + timestamp: 1791427818790 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-lint-cmake-0.17.5-np2py312h1bab3cf_25.conda + sha256: af9abd3be91cacad7d34c452ec5d4d42184432312d95706d570dfd172b2bb567 + md5: 888c6cef81a78bbb9627935b406c7a73 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 39589 + timestamp: 1791428093067 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-lint-common-0.17.5-np2py312h1bab3cf_25.conda + sha256: d903394739fb76c7ee9aaba5f77608b9774b414e109a4c32c92ba01d543d63b7 + md5: d53f87181e0aa774da43093ea5d8b10f + depends: + - python + - ros2-ament-cmake-copyright + - ros2-ament-cmake-core + - ros2-ament-cmake-cppcheck + - ros2-ament-cmake-cpplint + - ros2-ament-cmake-flake8 + - ros2-ament-cmake-lint-cmake + - ros2-ament-cmake-pep257 + - ros2-ament-cmake-uncrustify + - ros2-ament-cmake-xmllint + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 22711 + timestamp: 1791429635156 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-package-0.16.5-np2py312h1bab3cf_25.conda + sha256: 1ed8622a03e1546f081c140f1382195b945da43e3c219de83071cfa4f2b55659 + md5: f3adb90c00abdd5ade9e1e4911d7f29b + depends: + - importlib-metadata + - importlib_resources + - python + - ros2-distro-mutex 0.19.* jazzy_* + - setuptools + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 43192 + timestamp: 1791427246322 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-pep257-0.17.5-np2py312h1bab3cf_25.conda + sha256: 8a9780f365543568d270b9f64ee09fa84d895f2e495761fe0bc87b8f5cff660c + md5: a94294813238f28b0623809105aeaba8 + depends: + - pydocstyle + - python + - ros2-ament-lint + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 OR MIT + size: 27183 + timestamp: 1791427786142 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-uncrustify-0.17.5-np2py312h1bab3cf_25.conda + sha256: 5f595c36c1f78fdd95dd8b73528d96b26a9a01e396971d6be266f779b2d4fb4e + md5: cdb5ee0d17803031dd8e813f989be407 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-uncrustify-vendor + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 68285 + timestamp: 1791429261690 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ament-xmllint-0.17.5-np2py312h1bab3cf_25.conda + sha256: 710e3ccc430303c6c4dc93f8ba27207ff1adfff19b4db065236ff22792137d09 + md5: e348d05acb1ed751869970b5f7f52670 + depends: + - libxml2 + - python + - ros2-ament-lint + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 31209 + timestamp: 1791428119430 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-builtin-interfaces-2.0.4-np2py312h1bab3cf_25.conda + sha256: 7d0d21659905f2e00d90d4c5bbf8e4ace46073810112af9324321e153b3bd81a + md5: cedddb6eb6f51a503531f7462425bf80 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 82420 + timestamp: 1791431868210 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-class-loader-2.7.1-np2py312hd81cb55_25.conda + sha256: d580a1cdf828e5b4632697fdfe930bac10bbd765ab677649935730fc3ce1a18d + md5: 2fde011ca50aa627b5633e6bfc7291a7 + depends: + - console_bridge + - python + - ros2-console-bridge-vendor + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcpputils + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - console_bridge >=1.0.2,<1.1.0a0 + license: BSD-3-Clause + size: 75291 + timestamp: 1791431167335 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-common-interfaces-5.3.8-np2py312h1bab3cf_25.conda + sha256: bfd6b4871dc19b5eba45f5d2a24d9990f04dca5c8d12cdda7da4763cb17a89e7 + md5: c7b386590e45d0cc566a8e6a3c121e9c + depends: + - python + - ros2-actionlib-msgs + - ros2-builtin-interfaces + - ros2-diagnostic-msgs + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-nav-msgs + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-shape-msgs + - ros2-std-msgs + - ros2-std-srvs + - ros2-stereo-msgs + - ros2-trajectory-msgs + - ros2-visualization-msgs + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 27300 + timestamp: 1791435768933 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-composition-interfaces-2.0.4-np2py312h1bab3cf_25.conda + sha256: 8568300b111e7f2f4b21e95c2bef5685d2ac838679367dd22aaef6bf361caf19 + md5: a38ff04801995f63a5b0029cdf601f25 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl-interfaces + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 229832 + timestamp: 1791432875949 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-console-bridge-vendor-1.7.2-np2py312hd81cb55_25.conda + sha256: bfc2cb30caf542e02225a27d61c0699db3616a6939484004817b32fc73b56506 + md5: d773a267d02a722db2af98f00332f0fb + depends: + - console_bridge + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - console_bridge >=1.0.2,<1.1.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 OR BSD-3-Clause + size: 28611 + timestamp: 1791430620569 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-cyclonedds-0.10.5-py312h79554f9_25.conda + sha256: 70ae70779a100468d667a6b60b73e9de5f22bad3581237ebc8c7f32e1f42a64b + md5: 5e11be3c940791e9abe9b52615cf0e74 + depends: + - cyclonedds >=0.10.5,<0.11.0a0 + - openssl + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-iceoryx-binding-c + - ros2-iceoryx-hoofs + - ros2-iceoryx-posh + - ros2-ros-workspace + - openssl >=3.5.9,<4.0a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: EPL-2.0 OR BSD-3-Clause + size: 8560 + timestamp: 1791427991851 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-demo-nodes-py-0.33.11-np2py312h1bab3cf_25.conda + sha256: 1daebe28f9621cb46aab0345c76f2d51f273e24be6a559ae6ac3ac552ebca29b + md5: 8b9a754f0f46eeb6d1c93f8b65a500ae + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-example-interfaces + - ros2-rcl-interfaces + - ros2-rclpy + - ros2-ros-workspace + - ros2-std-msgs + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 43304 + timestamp: 1791433416770 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-diagnostic-msgs-5.3.8-np2py312h1bab3cf_25.conda + sha256: d20078c9b66749c16794335f795e692a8780dc86f01ce76321c226f9befe9b43 + md5: 8838a5fa572d594550c559425ebe9d67 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 216938 + timestamp: 1791434083316 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-distro-mutex-0.19.0-jazzy_25.conda + sha256: 4a0cdf48580104631952cbe134d8924bee51a23e6bd960ea4c21f4d3377db759 + md5: d23640e308f6ca3ca577f47f0fc5b984 + constrains: + - libboost 1.90.* + - libboost-devel 1.90.* + - pcl 1.15.1.* + - gazebo 11.* + - libprotobuf 7.35.* + - libopenvino-tensorflow-frontend >=2026.3.0 + - libopencv >=5.0.0 + - py-opencv >=5.0.0 + - vtk 9.7.0.* + - ffmpeg 9.* + - libopenvino-tensorflow-lite-frontend >=2026.3.0,<2026.3.1.0a0 + license: BSD-3-Clause + size: 2473 + timestamp: 1791427246196 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-domain-coordinator-0.12.2-np2py312h1bab3cf_25.conda + sha256: 87c2beb7d2986d73b18e41a26e4ee8097ddc41a6f06b1648465fc9dcc0bb67dd + md5: 2c643132937cb6e5e02c2b49a12c0cfe + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 21249 + timestamp: 1791428140926 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-eigen3-cmake-module-0.3.1-np2py312h1bab3cf_25.conda + sha256: c6fd1dd0a49cc95fa1a4ff90c5abe3e407cc74f71e2a62a6dc2be6bd33f0eef3 + md5: 761781fe957fa1cbfc975480fb975ae0 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 23918 + timestamp: 1791429535213 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-example-interfaces-0.12.1-np2py312h1bab3cf_25.conda + sha256: 0204f2e419de6d763da935c6d556009d75b498786636f0949f146d7d18e4fdf9 + md5: 1006aecf82037359480ce16dbd7502e6 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 554344 + timestamp: 1791432229051 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-fastcdr-2.2.8-np2py312h1bab3cf_25.conda + sha256: 60e6ebd0d6226f4a638cda994b6c653962e34f73aa53662e0f22d4e62c7345f3 + md5: fc48ed71c2827b87faf72d1e802c38c5 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 89986 + timestamp: 1791428319028 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-fastrtps-2.14.7-np2py312h4c2334c_25.conda + sha256: addfa79cfb81622c8491ad99f2e4f5279bed87003abf7a690684d8021d12af93 + md5: 8f84ae32b6053a84585b6195d8f41771 + depends: + - openssl + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-foonathan-memory-vendor + - ros2-ros-workspace + - tinyxml2 + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - openssl >=3.5.9,<4.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - tinyxml2 >=11.0.0,<11.1.0a0 + license: Apache-2.0 + size: 4408943 + timestamp: 1791430093866 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-fastrtps-cmake-module-3.6.4-np2py312h1bab3cf_25.conda + sha256: ef82b60e774954ad49969cb44428eef49c4f71421a30566bf9c4da6660afa7bb + md5: 266ac60c18019aa77748da8eef0b96ec + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 28056 + timestamp: 1791430089078 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-foonathan-memory-vendor-1.3.1-np2py312h1bab3cf_25.conda + sha256: ef79d804e167963223fbabab1cf7b6caa3bf94a8ea8f8c08d8d488dc59def0d8 + md5: 469bc02c346631145a96c983f61674d0 + depends: + - foonathan-memory + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - cmake + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - foonathan-memory >=0.7.4,<0.7.5.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 OR Zlib + size: 19829 + timestamp: 1791429651103 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-geometry-msgs-5.3.8-np2py312h1bab3cf_25.conda + sha256: 40f9bad74860a1c8106464e09cd55d05741bd3ecf2cdb75d47d0a9116d487b53 + md5: 92fb2a3b4e1fe5a1992ef442d7962b4b + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 403770 + timestamp: 1791433397031 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-geometry2-0.36.23-np2py312h1bab3cf_25.conda + sha256: 60ef79f513008dd3e2ca8192694ec6b90e12f4df7711a750375f533e7d91a64d + md5: ceb2f8100c7797cacd48c567c51a88a6 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-bullet + - ros2-tf2-eigen + - ros2-tf2-eigen-kdl + - ros2-tf2-geometry-msgs + - ros2-tf2-kdl + - ros2-tf2-msgs + - ros2-tf2-py + - ros2-tf2-ros + - ros2-tf2-sensor-msgs + - ros2-tf2-tools + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 22862 + timestamp: 1791439184754 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-gmock-vendor-1.14.9000-np2py312h1bab3cf_25.conda + sha256: 8ed4eb9721f1e4d528ba6c29bb19803515820679c29c0cc1ffdfb02cf3c14033 + md5: 9dd439716e0f9aefd20f736c29bbb740 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-gtest-vendor + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 122692 + timestamp: 1791427531180 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-gtest-vendor-1.14.9000-np2py312h1bab3cf_25.conda + sha256: af5075df4deee40577694326c9df81d4b45747a05f2193b6cec84d455580b0f2 + md5: cbc43b3733d88bbfe4cb96ba0a1849d7 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 209081 + timestamp: 1791427317062 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-iceoryx-binding-c-2.95.8-py312h24bf083_25.conda + sha256: b0baa53a0df302e008d5328d9d7d97dbfc2f1b0b2af6ce1fcbbf74262c21c3af + md5: 042b121e8cc9e1cd9898337d5f90d94c + depends: + - libiceoryx-binding-c >=2.95.8,<2.96.0a0 + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 8216 + timestamp: 1791427829209 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-iceoryx-hoofs-2.95.8-py312h24bf083_25.conda + sha256: ec2ff9f135106d517f085e683ae6304d742328387e2dea92c4df03b313cbf565 + md5: 1748e1c24cf36c5b4dfdafe7c3456ebf + depends: + - libacl + - libiceoryx-hoofs >=2.95.8,<2.96.0a0 + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - python_abi 3.12.* *_cp312 + - libacl >=2.4.0,<2.5.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 7608 + timestamp: 1791427377176 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-iceoryx-posh-2.95.8-py312h24bf083_25.conda + sha256: a3f6519474862d1ccf722cbce6b895eb89313814b5cbe851abbe708215e3f276 + md5: 8c0f4b576e6f5be6f618e273b2cec572 + depends: + - libiceoryx-posh >=2.95.8,<2.96.0a0 + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-iceoryx-hoofs + - ros2-ros-workspace + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 9826 + timestamp: 1791427534205 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-kdl-parser-2.11.0-np2py312h1bab3cf_25.conda + sha256: 7cd8d0b46b45a9880d4588caff815ced8f3498e3b0e9e34ec0ffa43b181724e9 + md5: 79ce1bbad0f8e31f7c7757bc0ad0d887 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-orocos-kdl-vendor + - ros2-rcutils + - ros2-ros-workspace + - ros2-urdf + - ros2-urdfdom-headers + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 48089 + timestamp: 1791431662759 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-keyboard-handler-0.3.2-np2py312h1bab3cf_25.conda + sha256: a1e787d985c1c2fa2835579cf4ca4e81abb0575b62e807922e0e6081e0c4113f + md5: de533d741012224bc215340032e4f89b + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 56948 + timestamp: 1791430473628 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-3.4.12-np2py312h1bab3cf_25.conda + sha256: d8dda6e84d5b83d0d16dd2d5e02122e93d298af19bd06d9ffc617b12d41226c2 + md5: 7597b9d3587f97ed5d77b2c357b133d8 + depends: + - importlib-metadata + - lark-parser + - python + - pyyaml + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-osrf-pycommon + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 235315 + timestamp: 1791428306081 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-ros-0.26.13-np2py312h1bab3cf_25.conda + sha256: c191cf456074b88b60ebdc48e2bbc9b1ee845f539591c2edd3a583f63896fde7 + md5: 92ddc3a9c1d0f4a9e8ad715845ff6165 + depends: + - importlib-metadata + - python + - pyyaml + - ros2-ament-index-python + - ros2-composition-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch + - ros2-lifecycle-msgs + - ros2-osrf-pycommon + - ros2-rclpy + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 129503 + timestamp: 1791433274050 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-testing-3.4.12-np2py312h1bab3cf_25.conda + sha256: cc7815f7de8ddf0bcef071abb96d6d37b1a54b0c3cbe8424e4a797f5508bfa3c + md5: a856281f5ecc956f99b68c4dd2f4d940 + depends: + - pytest + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch + - ros2-launch-xml + - ros2-launch-yaml + - ros2-osrf-pycommon + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 116967 + timestamp: 1791429528171 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-testing-ament-cmake-3.4.12-np2py312h1bab3cf_25.conda + sha256: 5438e316e34d3b7b95931de97395004cee4f988182e3d0a336b7d77a1fef96dc + md5: 17479e1c9d336450fabb7b5dba7c5117 + depends: + - python + - ros2-ament-cmake-test + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch-testing + - ros2-python-cmake-module + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 OR BSD-3-Clause + size: 27621 + timestamp: 1791430584246 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-testing-ros-0.26.13-np2py312h1bab3cf_25.conda + sha256: f6cc4df07a2a3eeeac00813900e5c8817b6f574faf8bca5be1d0e3852a4cfe4f + md5: 221e7c8fd6f8dcc0361e1039b9b917be + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch-ros + - ros2-launch-testing + - ros2-rclpy + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 56259 + timestamp: 1791433452586 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-xml-3.4.12-np2py312h1bab3cf_25.conda + sha256: 02c8cbd270a07fd893a45c88a2c2f7672997552f58fdb0420798be1170513509 + md5: 0f56bbc93306afe3b7fc2f00e28fd749 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 26212 + timestamp: 1791429276607 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-yaml-3.4.12-np2py312h1bab3cf_25.conda + sha256: 982ce740fddd18b968573fafaccedf9ca2fe1364aa1681307e01f3bc6286957b + md5: e8c7c81836728cc32e27d94c0d7806b0 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 26809 + timestamp: 1791429267662 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-liblz4-vendor-0.26.11-np2py312h1bab3cf_25.conda + sha256: 67c80c5459bc496b7fa7d26764f0db5ec899992f942256c03b9d0ec28d15f8f3 + md5: 4243a4fc6e66b69c940ee5cbea1a6292 + depends: + - lz4 + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR BSD-3-Clause OR GPL-2.0-only + size: 24716 + timestamp: 1791428385363 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-libstatistics-collector-1.7.4-np2py312h1bab3cf_25.conda + sha256: 4282f9c8e22bac1c33bcb146c2d661a7639f1a6578f9a5f64b5ec0df1990accc + md5: 0dcc50cac9b5799fb2de8fcac2920cb3 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl + - ros2-rcpputils + - ros2-rmw + - ros2-ros-workspace + - ros2-statistics-msgs + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 59592 + timestamp: 1791433378968 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-libyaml-vendor-1.6.4-np2py312h1bab3cf_25.conda + sha256: f50004f56284e1c4e22f602ac56f0e4b0ad04684d28faabb728ddbdd7b5a9b3b + md5: 96ed19161a51f27136eccd46a1207aa7 + depends: + - pkg-config + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - yaml + - yaml-cpp + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - yaml-cpp >=0.8.0,<0.9.0a0 + - yaml >=0.2.5,<0.3.0a0 + license: Apache-2.0 OR MIT + size: 30470 + timestamp: 1791430614966 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-lifecycle-msgs-2.0.4-np2py312h1bab3cf_25.conda + sha256: 14f2f209c426af8068a4e1936eb98347f4db09fdb1bfbc53a21a65c0945f49b2 + md5: f748da528f08ae12a5c297efa7b01dd6 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 275365 + timestamp: 1791432177775 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-mcap-vendor-0.26.11-np2py312h1bab3cf_25.conda + sha256: ab3e0b7e2909b4bba7a443053ed1d098ec18fcb96a7627c519419aa9874d77b8 + md5: 3bcbc8e1f55bdeab4dd0f527118e3118 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-liblz4-vendor + - ros2-ros-workspace + - ros2-zstd-vendor + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 176943 + timestamp: 1791429281256 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-message-filters-4.11.17-np2py312h1bab3cf_25.conda + sha256: be33f42fc15b880c466e92525af5cdb187db229d5f7b3dc00b7722bbcbe48edf + md5: 6935ae0c0f23a91b379b3cd8cdd168aa + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclcpp + - ros2-rclpy + - ros2-rcutils + - ros2-ros-workspace + - ros2-std-msgs + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 97059 + timestamp: 1791435370921 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-nav-msgs-5.3.8-np2py312h1bab3cf_25.conda + sha256: c6a8bcc77193d3640cd1b601a7158dcf09dcffdc7b3cd6194994231532d43b3d + md5: 37a3d07d1e1adc7c18264c1d24370a5c + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 350862 + timestamp: 1791434156160 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-orocos-kdl-vendor-0.5.2-np2py312hd65a65c_25.conda + sha256: 2d124eaee7599eecd76e19481ac946e104378b334f7cbe260491b5e382bbea4e + md5: 9a62175451bed2e500741913463c3f76 + depends: + - eigen + - eigen-abi-devel + - orocos-kdl + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-eigen3-cmake-module + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - eigen-abi >=5.0.1.80,<5.0.1.81.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - orocos-kdl >=1.5.4,<1.6.0a0 + license: Apache-2.0 OR LGPL-2.1-or-later + size: 29213 + timestamp: 1791430431173 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-osrf-pycommon-2.1.7-np2py312h1bab3cf_25.conda + sha256: 70e103fb532ef24295f45aa33b6883fb6e13b08965996951b6bc80216904b2ca + md5: 58747c3bec7e3050e8467cff3080ce92 + depends: + - importlib-metadata + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 64805 + timestamp: 1791427348061 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-pluginlib-5.4.6-np2py312h1bab3cf_25.conda + sha256: f52abe4b20bd1a8ebe9fb09591b12e7542fc4435868b21131c7215e7877a03f6 + md5: 7b5b083a79b7c973b1881b73f4bad3d8 + depends: + - python + - ros2-ament-index-cpp + - ros2-class-loader + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-tinyxml2-vendor + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 143332 + timestamp: 1791431356553 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-pybind11-vendor-3.1.3-np2py312h1bab3cf_25.conda + sha256: 1aca2e027b2a4a8bfc0de88b5a12a0fe67c36606a64d9a3078084b8a98f431b4 + md5: fdf958f35a748303cc4b48da457189eb + depends: + - pybind11 + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR BSD-3-Clause + size: 23809 + timestamp: 1791428327985 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-python-cmake-module-0.11.1-np2py312h1bab3cf_25.conda + sha256: 0663fcde6da8ae50f9d1720978817cdd609e402fd10f847f93c7f5ba8b8fea4a + md5: 5b0c759cd091b068ac6fb48bf08d9719 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 28416 + timestamp: 1791430052207 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-python-orocos-kdl-vendor-0.5.2-np2py312h1bab3cf_25.conda + sha256: a97e9aa79e5191ab9b12e94e21bbc811e5055f3ca4844f30af67ab4124239849 + md5: c3c19deddbd051947c2dc26de4783f00 + depends: + - python + - python-orocos-kdl + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-orocos-kdl-vendor + - ros2-pybind11-vendor + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - python-orocos-kdl >=1.5.4,<1.6.0a0 + license: Apache-2.0 OR LGPL-2.1-or-later + size: 28540 + timestamp: 1791430636077 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcl-9.2.11-np2py312h1bab3cf_25.conda + sha256: 9474d2a94180a9de5f09f25135afec06d354e315256dcda1a3b803c50d85bca0 + md5: 5abcf3c48b85e1db0565f9a2e0dfaf5d + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-libyaml-vendor + - ros2-rcl-interfaces + - ros2-rcl-logging-interface + - ros2-rcl-logging-spdlog + - ros2-rcl-yaml-param-parser + - ros2-rcutils + - ros2-rmw + - ros2-rmw-implementation + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-service-msgs + - ros2-tracetools + - ros2-type-description-interfaces + - yaml + - yaml-cpp + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - yaml >=0.2.5,<0.3.0a0 + - python_abi 3.12.* *_cp312 + - yaml-cpp >=0.8.0,<0.9.0a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 204021 + timestamp: 1791433044119 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcl-action-9.2.11-np2py312h1bab3cf_25.conda + sha256: 30c38fdc9716f147809e06d0609fa4083e82b7d8d9755e652c6c3ba32eb342d3 + md5: e61d5343e1bdf1984add36fdf9f015bf + depends: + - python + - ros2-action-msgs + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 82323 + timestamp: 1791433059586 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcl-interfaces-2.0.4-np2py312h1bab3cf_25.conda + sha256: 191a023c368e32a8e27fdc8d025f506e9609509b150edb094fc06e903f406d00 + md5: 25da2b5482c5d672ccd8b48cc65c42df + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 586563 + timestamp: 1791432129900 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcl-lifecycle-9.2.11-np2py312h1bab3cf_25.conda + sha256: b7a1da6b3d13bc69f9d20f1f4fd70820dda373bd9885048020560e36f43ae44f + md5: ee71daff39a04fa2d05cb0f4153ec786 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-lifecycle-msgs + - ros2-rcl + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-tracetools + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 59300 + timestamp: 1791433054320 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcl-logging-interface-3.1.1-np2py312h1bab3cf_25.conda + sha256: 0cc6668a83c7f639e2f9ad6f22a0d774f38db063d8bf814f8fc625c8bd33c222 + md5: 5aaaf56ede274f8755cb169e822b9514 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 36233 + timestamp: 1791431161811 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcl-logging-spdlog-3.1.1-np2py312hbe83831_25.conda + sha256: c6e4a5c547a715afbb2a5b998994c2b12d1f23150c32b1aa9c29b2373b84ccf1 + md5: 966b504221b448b141e7032da34033b4 + depends: + - fmt + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl-logging-interface + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-spdlog-vendor + - spdlog + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - spdlog >=1.17.0,<1.18.0a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - fmt >=12.1.0,<12.2.0a0 + license: Apache-2.0 + size: 47069 + timestamp: 1791431350546 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcl-yaml-param-parser-9.2.11-np2py312h1bab3cf_25.conda + sha256: 2b7fe978ad76a7cd884abe348cdb3ebf5f977744a81da9b113876e30433d9b4f + md5: f85bf43005f4806cf9e652535f74d614 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-libyaml-vendor + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - yaml + - yaml-cpp + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - yaml >=0.2.5,<0.3.0a0 + - yaml-cpp >=0.8.0,<0.9.0a0 + license: Apache-2.0 + size: 52251 + timestamp: 1791431511643 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rclcpp-28.1.22-np2py312h1bab3cf_25.conda + sha256: 47076ac9839ec75e0318a59abf0d283416ff0ca0c2b16c9e55d4162327d178b9 + md5: 804c6f9c315ff313d9cf9e6a8fe09478 + depends: + - python + - ros2-ament-index-cpp + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-libstatistics-collector + - ros2-rcl + - ros2-rcl-interfaces + - ros2-rcl-logging-interface + - ros2-rcl-yaml-param-parser + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosgraph-msgs + - ros2-rosidl-dynamic-typesupport + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-cpp + - ros2-statistics-msgs + - ros2-tracetools + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 1164341 + timestamp: 1791433865046 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rclcpp-action-28.1.22-np2py312h1bab3cf_25.conda + sha256: b37f8d1e517041648208703c58a50b2542706abc15ce880f7135678cf436f0c7 + md5: 8c027becd18f52f29224e1da74553306 + depends: + - python + - ros2-action-msgs + - ros2-ament-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl + - ros2-rcl-action + - ros2-rclcpp + - ros2-rcpputils + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 157998 + timestamp: 1791434495400 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rclcpp-components-28.1.22-np2py312h1bab3cf_25.conda + sha256: 814da589cf8b0728394113211e563a5271df5bbf93d74a91d349e4553f39c1ab + md5: 52cddb3eeb841d493aec9393b6d115f6 + depends: + - python + - ros2-ament-index-cpp + - ros2-class-loader + - ros2-composition-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclcpp + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 145730 + timestamp: 1791434508114 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rclcpp-lifecycle-28.1.22-np2py312h1bab3cf_25.conda + sha256: 5e271ba54c54ea704825e1a54b5bf17da5f454d80c07ec8f7b7811b88257c1f2 + md5: 633e9cfd2d81a6c7234a02d57fbca92c + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-lifecycle-msgs + - ros2-rcl + - ros2-rcl-interfaces + - ros2-rcl-lifecycle + - ros2-rclcpp + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-typesupport-cpp + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 132418 + timestamp: 1791434480248 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rclpy-7.1.12-np2py312h1bab3cf_25.conda + sha256: e95b3a0fd51ddc6776da01950badb0b41cc27d26856e1542b408dffb709b4415 + md5: d3281453469c61386d54a80e0f0a4073 + depends: + - python + - pyyaml + - ros2-action-msgs + - ros2-ament-index-python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-lifecycle-msgs + - ros2-rcl + - ros2-rcl-action + - ros2-rcl-interfaces + - ros2-rcl-lifecycle + - ros2-rcl-logging-interface + - ros2-rcl-yaml-param-parser + - ros2-rmw + - ros2-rmw-implementation + - ros2-ros-workspace + - ros2-rosgraph-msgs + - ros2-rosidl-runtime-c + - ros2-rpyutils + - ros2-unique-identifier-msgs + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 768628 + timestamp: 1791433124961 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcpputils-2.11.4-np2py312h1bab3cf_25.conda + sha256: 17840239000f540e5e90b7908dacde6858f9a4e7dff9151621914b6a1b545ea3 + md5: 0f09aa67e1225b3de2a6dd15c9b25d07 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR BSD-3-Clause + size: 80230 + timestamp: 1791431014604 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcutils-6.7.6-np2py312h1bab3cf_25.conda + sha256: 4e23a8d1dabb454fcde21d98a7f0feec86c466b472c0046350b453a0666452fe + md5: 2a1ee111f594926cb06067f35068da54 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 123308 + timestamp: 1791430841156 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-7.3.4-np2py312h1bab3cf_25.conda + sha256: 2bf0f646c1e0ede75632d2a126c1da4763716c67cb3fb577c6cb58c50587ee16 + md5: 89c9036a74e348de8604d1b7e1eb9431 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-dynamic-typesupport + - ros2-rosidl-runtime-c + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 97516 + timestamp: 1791431330221 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-connextdds-0.22.3-np2py312h1bab3cf_25.conda + sha256: 909ba9e539018509e50cb300bb1b4626b6c1668bf91bea2426d8f12ef484f9f5 + md5: 18f2043c9402a212b7fdbd465bd867ec + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rmw-connextdds-common + - ros2-ros-workspace + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 32933 + timestamp: 1791433021957 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-connextdds-common-0.22.3-np2py312h1bab3cf_25.conda + sha256: 121dd2cba3048846b81d281aed84d8b95b4a0f5cbe776d4dba4b9561aca6e5bf + md5: 122f7c0a897eb59df6b0c19f6a29faf9 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - ros2-rti-connext-dds-cmake-module + - ros2-tracetools + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 54809 + timestamp: 1791432830581 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-cyclonedds-cpp-2.2.4-np2py312h1bab3cf_25.conda + sha256: 838207049eed93a58b0dc623b4703b22e3d468db08df1cab9c186c2424832c4b + md5: c58c684d58cd588112ed6f5b5d77b777 + depends: + - python + - ros2-cyclonedds + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-iceoryx-binding-c + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - ros2-tracetools + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 258772 + timestamp: 1791432836652 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-dds-common-3.1.1-np2py312h1bab3cf_25.conda + sha256: b420ec15e59712f52a3ab4ba72c3c326a75d6d496e8b1e18c40284a961ec5747 + md5: 673ac042e5f422e6ac4f542fd261af22 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 181338 + timestamp: 1791432044255 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-fastrtps-cpp-8.4.4-np2py312h1bab3cf_25.conda + sha256: a6470c3f140ebb728068c598f7d0def2c4b240867af64e47f5bf734c15de830f + md5: 6a6b4f499f93db27a7669c166fd31b70 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps + - ros2-fastrtps-cmake-module + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-rmw-fastrtps-shared-cpp + - ros2-ros-workspace + - ros2-rosidl-dynamic-typesupport + - ros2-rosidl-dynamic-typesupport-fastrtps + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-tracetools + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 160913 + timestamp: 1791433007221 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-fastrtps-dynamic-cpp-8.4.4-np2py312h1bab3cf_25.conda + sha256: a625fe70aeb76a82c9385a26b80e946dfa2721b49049d28faf10804fa26b4056 + md5: 5e074402207864e7cb7b97b670144f7b + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps + - ros2-fastrtps-cmake-module + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-rmw-fastrtps-shared-cpp + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 186631 + timestamp: 1791432976420 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-fastrtps-shared-cpp-8.4.4-np2py312h1bab3cf_25.conda + sha256: da4e8353b0d4b47f04aaabd72e5da7af202b7aee7bd6988430487c0a2ea8810f + md5: 68539251ff04993becb1d9c58cbe2694 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps + - ros2-fastrtps-cmake-module + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-ros-workspace + - ros2-rosidl-dynamic-typesupport + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - ros2-tracetools + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 240022 + timestamp: 1791432787530 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-implementation-2.15.6-np2py312h1bab3cf_25.conda + sha256: 2f0c30a039fa70cbc096ee7bc0dfe596b035cb44c72adcefae44eeb3a75e3203 + md5: 32994b244dc3f23066c9ec4dfb4cc5b1 + depends: + - python + - ros2-ament-index-cpp + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw-connextdds + - ros2-rmw-cyclonedds-cpp + - ros2-rmw-fastrtps-cpp + - ros2-rmw-fastrtps-dynamic-cpp + - ros2-rmw-implementation-cmake + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 55612 + timestamp: 1791433033076 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-implementation-cmake-7.3.4-np2py312h1bab3cf_25.conda + sha256: daae0cc283131b81d8039839121c9f32333e3034e4323cb32de50bf1c9835714 + md5: 71f9d1fe758bec72058d42b1e2a41e2f + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 30107 + timestamp: 1791430398816 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-zenoh-cpp-0.2.11-np2py312h815c85b_25.conda + sha256: 377868e88ea493de3663bbcd89c3b978cc89f9170e6238c0e1b1f487068c1e90 + md5: 5eaaa910e89db26d613683ca2ae97201 + depends: + - python + - ros2-ament-index-cpp + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-tracetools + - ros2-zenoh-cpp-vendor + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - libzenohc >=1.9.0,<1.9.1.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 OR BSD-3-Clause + size: 284358 + timestamp: 1791431742745 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-robot-state-publisher-3.3.4-np2py312h1bab3cf_25.conda + sha256: 4b8ca22c0be432b03907d748008cf4d403b97bf90c268605f819cbf93b51a0c5 + md5: 76c46de7d41fc70f70a0d56c122d7a33 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-kdl-parser + - ros2-orocos-kdl-vendor + - ros2-rcl-interfaces + - ros2-rclcpp + - ros2-rclcpp-components + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-std-msgs + - ros2-tf2-ros + - ros2-urdf + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 269216 + timestamp: 1791437050670 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros-base-0.11.0-np2py312h1bab3cf_25.conda + sha256: 86d670168e1fc33a9578314989619b85009691b5b4379cd83f63321c7979c38a + md5: 7cf29d717b429147e97aa3f8a04162ba + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry2 + - ros2-kdl-parser + - ros2-robot-state-publisher + - ros2-ros-core + - ros2-ros-workspace + - ros2-rosbag2 + - ros2-urdf + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 22756 + timestamp: 1791446882426 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros-core-0.11.0-np2py312h1bab3cf_25.conda + sha256: a9913c25e633347e9118cf60e907acb019156d21edc96959357a3632f0e7fb60 + md5: dbf982f672dc0ed478241241fb5f3c16 + depends: + - python + - ros2-ament-cmake + - ros2-ament-cmake-auto + - ros2-ament-cmake-gmock + - ros2-ament-cmake-gtest + - ros2-ament-cmake-pytest + - ros2-ament-cmake-ros + - ros2-ament-index-cpp + - ros2-ament-index-python + - ros2-ament-lint-auto + - ros2-ament-lint-common + - ros2-class-loader + - ros2-common-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch + - ros2-launch-ros + - ros2-launch-testing + - ros2-launch-testing-ament-cmake + - ros2-launch-testing-ros + - ros2-launch-xml + - ros2-launch-yaml + - ros2-pluginlib + - ros2-rcl-lifecycle + - ros2-rclcpp + - ros2-rclcpp-action + - ros2-rclcpp-lifecycle + - ros2-rclpy + - ros2-ros-environment + - ros2-ros-workspace + - ros2-ros2cli-common-extensions + - ros2-ros2launch + - ros2-rosidl-default-generators + - ros2-rosidl-default-runtime + - ros2-sros2 + - ros2-sros2-cmake + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 23489 + timestamp: 1791437815449 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros-environment-4.2.1-np2py312h1bab3cf_25.conda + sha256: 6bb34f5a70315f13031da89ac7818c6cc39f522be4de3e2391ce2d30bc8a9259 + md5: 0ac8798a6d5f8de32d185369377280fd + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 21756 + timestamp: 1791427269416 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros-workspace-1.0.3-np2py312h1bab3cf_25.conda + sha256: f533479f9f8f92de1955c97fae259f17b55c4325be558bd6bf7576286ff7b929 + md5: b3a953addb9c5ba81c1442acd4f5096e + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 35699 + timestamp: 1791427265997 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2action-0.32.13-np2py312h1bab3cf_25.conda + sha256: fd4cf5bedc5392128d705338015d499edcf49eebec4e907130e106e0a51997e8 + md5: 3fea9685c429903c3ce3f03083927466 + depends: + - python + - ros2-action-msgs + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-rosidl-runtime-py + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 48750 + timestamp: 1791434121530 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2bag-0.26.11-np2py312h1bab3cf_25.conda + sha256: 59cb77a5c797c00101b449dfd7fff5a4cdd611d15fc8011bf84acf3a75989eb0 + md5: a53ee83cf416eb863bcb57457c75665d + depends: + - python + - pyyaml + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-rosbag2-py + - ros2-rosbag2-storage-default-plugins + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 72273 + timestamp: 1791444089741 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2cli-0.32.13-np2py312h1bab3cf_25.conda + sha256: 4db7724adaa4602a8a916d29ab794e09731c7a0c391a25db739fec425dd3900f + md5: 7579424647c1607f4b81c3d3d0b6abfa + depends: + - argcomplete + - importlib-metadata + - packaging + - psutil + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 78535 + timestamp: 1791433281261 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2cli-common-extensions-0.3.1-np2py312h1bab3cf_25.conda + sha256: 5758d97e4d06f4f03b05605dbc987667fda538ada22cb6b6eec220c488497199 + md5: d7c1b7fa62dd65dd06d70f5fc5d1cb0f + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch-xml + - ros2-launch-yaml + - ros2-ros-workspace + - ros2-ros2action + - ros2-ros2cli + - ros2-ros2component + - ros2-ros2doctor + - ros2-ros2interface + - ros2-ros2launch + - ros2-ros2lifecycle + - ros2-ros2multicast + - ros2-ros2node + - ros2-ros2param + - ros2-ros2pkg + - ros2-ros2plugin + - ros2-ros2run + - ros2-ros2service + - ros2-ros2topic + - ros2-sros2 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 27428 + timestamp: 1791437079633 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2component-0.32.13-np2py312h1bab3cf_25.conda + sha256: f5cbb9fd7ff130de54f6793bb2a91c44b14c58f80a3b48154730a682f5038340 + md5: 8586e0b08df5f11b9aa52880b76a317a + depends: + - python + - ros2-ament-index-python + - ros2-composition-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl-interfaces + - ros2-rclcpp-components + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2node + - ros2-ros2param + - ros2-ros2pkg + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 38352 + timestamp: 1791436657061 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2doctor-0.32.13-np2py312h1bab3cf_25.conda + sha256: 06eee12f1fc33d4a0784204fd6e4595ffaf6e64b40c314760c9fdb4cd2b3829e + md5: 05eae5b5c1474685137d7cb338c04931 + depends: + - catkin_pkg + - importlib-metadata + - psutil + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-environment + - ros2-ros-workspace + - ros2-ros2cli + - ros2-std-msgs + - rosdistro + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 69346 + timestamp: 1791434116337 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2interface-0.32.13-np2py312h1bab3cf_25.conda + sha256: a93420cff8682dc619adfe148060cae8f9e255e26f768d3bcc3eab971f24b529 + md5: 643968e61919332de35194576a20e80e + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - ros2-rosidl-adapter + - ros2-rosidl-runtime-py + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 48649 + timestamp: 1791434111015 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2launch-0.26.13-np2py312h1bab3cf_25.conda + sha256: d09761455f0df10fefe3d61396dcbb657e206fa2e061c88255da9a75925388d2 + md5: f0c0e96a08940bc658f67e3603fd68e7 + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch + - ros2-launch-ros + - ros2-launch-xml + - ros2-launch-yaml + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2pkg + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 47604 + timestamp: 1791434661328 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2lifecycle-0.32.13-np2py312h1bab3cf_25.conda + sha256: 67552587c759eeb9b744cefa678ae40ccd3b4d669f510e33bac8d9b473e685f0 + md5: 48d73ce6ce3ffc6b70193e0dfa041f07 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-lifecycle-msgs + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2node + - ros2-ros2service + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 46513 + timestamp: 1791436650063 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2multicast-0.32.13-np2py312h1bab3cf_25.conda + sha256: 728e44af25b116ff231d763f7dcd756c08ba658b66fe2c14974008a656b83087 + md5: b811d9ce4ebc859101d5a47dc3191b99 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 25873 + timestamp: 1791433517864 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2node-0.32.13-np2py312h1bab3cf_25.conda + sha256: 775396f76822316339cfea5bd35de89aad5bfe7bf0d68cac84f272dbdf0c6695 + md5: 2bef3297d96f0f4161985d58aecf5c60 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 44234 + timestamp: 1791434078014 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2param-0.32.13-np2py312h1bab3cf_25.conda + sha256: edadbdf04aceaf5165a4b83682d5978c374d6918135815d947a92ef2784abfbe + md5: c47dff0aa516bc435e7efda4929d478d + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl-interfaces + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2node + - ros2-ros2service + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 51599 + timestamp: 1791435400494 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2pkg-0.32.13-np2py312h1bab3cf_25.conda + sha256: 10f741855c13f77e9a4eb8140d525a7a490e528b19b6f1fbef0a7de528d02ccb + md5: 3f16f9b784e358ab8f03f711516c2822 + depends: + - catkin_pkg + - empy + - importlib_resources + - python + - ros2-ament-copyright + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 61645 + timestamp: 1791434105789 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2plugin-5.4.6-np2py312h1bab3cf_25.conda + sha256: 4b5f0ee9a060d6c21f8fa2091829b55426c7742262f4124898b8f91bcab0443c + md5: 44fa52f12c1fdd0307a08b104aec0254 + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2pkg + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 26131 + timestamp: 1791434657000 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2run-0.32.13-np2py312h1bab3cf_25.conda + sha256: 8dd342c33e3d5c31c01674bc3975451fd401dd21a7bceee72c211af83ecccff4 + md5: 3a3f8be36b71d81f1bd247cde64ff9b4 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2pkg + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 25001 + timestamp: 1791434652730 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2service-0.32.13-np2py312h1bab3cf_25.conda + sha256: 6f5c873cf9e462d3fc242ca6a7fb8fb8b729518d6e3d9bbebc4c3cfbeef07d83 + md5: f4f5e22bdb668d53acd590cb1980b6fa + depends: + - python + - pyyaml + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2topic + - ros2-rosidl-runtime-py + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 52742 + timestamp: 1791434614125 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-ros2topic-0.32.13-np2py312h1bab3cf_25.conda + sha256: da45ddc4e13f6d2f7333793b0a3e2c21186f9623a8680bca69b6e62fb040302a + md5: ecd9bcde8eed5ccf67d83408382ceb29 + depends: + - numpy + - python + - pyyaml + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-rosidl-runtime-py + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 OR BSD-3-Clause + size: 75344 + timestamp: 1791434041210 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-0.26.11-np2py312h1bab3cf_25.conda + sha256: fa648c26c9544c61b25bc61252e171d44b307f982d81d017f48744a8ca781598 + md5: f1a61b51b5f5c62051ed7960055362ac + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-ros2bag + - ros2-rosbag2-compression + - ros2-rosbag2-compression-zstd + - ros2-rosbag2-cpp + - ros2-rosbag2-py + - ros2-rosbag2-storage + - ros2-rosbag2-storage-default-plugins + - ros2-rosbag2-transport + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 36769 + timestamp: 1791445695115 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-compression-0.26.11-np2py312h1bab3cf_25.conda + sha256: 241c3e836fd3d7db1f0242c330179a0cd4b79847a84051563a0976a6460c44c2 + md5: cd976c2dedb9a79181092a5dfc930f73 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosbag2-cpp + - ros2-rosbag2-storage + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 210346 + timestamp: 1791439655110 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-compression-zstd-0.26.11-np2py312h1bab3cf_25.conda + sha256: cc8d26760d007350cd2dc7810d029c9896121652175433b82d77127df7b65474 + md5: d729014e921e6fd57479b9214d1e7d16 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-pluginlib + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosbag2-compression + - ros2-zstd-vendor + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 71376 + timestamp: 1791440401682 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-cpp-0.26.11-np2py312h1bab3cf_25.conda + sha256: 4dce0cc50df49e2c2efb1bda500b1f8989ddd6d45a48ac54aa6052077826e0a9 + md5: 44acfb7853c97e8101a2e738f71e50f9 + depends: + - python + - ros2-ament-index-cpp + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-pluginlib + - ros2-rclcpp + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-implementation + - ros2-ros-workspace + - ros2-rosbag2-storage + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-cpp + - ros2-rosidl-typesupport-introspection-cpp + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 360810 + timestamp: 1791437877475 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-interfaces-0.26.11-np2py312h1bab3cf_25.conda + sha256: 9e34eae0536ec0d5ba6c571491b84a074783215dc620c74b59e028010d0929f2 + md5: 536907396b0d34a8beb2a9099bb56a13 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 587539 + timestamp: 1791432386255 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-py-0.26.11-np2py312h1bab3cf_25.conda + sha256: 1f24511a1f77f0ef1f74037488e02524b1c051da7debfd7a11010b0579a6b0d6 + md5: 5511d5c1f1ba9d732a359e6544da7637 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-pybind11-vendor + - ros2-rclpy + - ros2-ros-workspace + - ros2-rosbag2-compression + - ros2-rosbag2-cpp + - ros2-rosbag2-storage + - ros2-rosbag2-transport + - ros2-rpyutils + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 831709 + timestamp: 1791443371857 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-storage-0.26.11-np2py312h1bab3cf_25.conda + sha256: 85edd350cc6a41f6f0d530d6272980aed48d529731126388f8bd7d69dc38cd07 + md5: 5c1ecea4d36b08f71f156955bd2f2277 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-pluginlib + - ros2-rclcpp + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-yaml-cpp-vendor + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 306458 + timestamp: 1791435774855 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-storage-default-plugins-0.26.11-np2py312h1bab3cf_25.conda + sha256: d4b6e2bbded37b1f4f120b670b378a48e602b9bd4c04e8336a9bad90471f62cb + md5: ad41c98c58b5aadb6407d3465c33f44c + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosbag2-storage-mcap + - ros2-rosbag2-storage-sqlite3 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 22783 + timestamp: 1791437218142 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-storage-mcap-0.26.11-np2py312h1bab3cf_25.conda + sha256: fff9b9366847f062bf0e7ae786557be61e6bf76a9ba84c43f6635bce1cf39187 + md5: 0bf17a7afbc6c3d4892ee88a70c64286 + depends: + - python + - ros2-ament-index-cpp + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-mcap-vendor + - ros2-pluginlib + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosbag2-storage + - ros2-yaml-cpp-vendor + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 207727 + timestamp: 1791436673579 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-storage-sqlite3-0.26.11-np2py312h1bab3cf_25.conda + sha256: 22c2e502c01e01a9248bc590ed6c031622a2784fab31d40aa25302884d909593 + md5: 799197b4238ddeecba9366fd3b18ce81 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-pluginlib + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosbag2-storage + - ros2-sqlite3-vendor + - ros2-yaml-cpp-vendor + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 251941 + timestamp: 1791436660262 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosbag2-transport-0.26.11-np2py312h1bab3cf_25.conda + sha256: 303b66f81bbc692fbdc96e5684df3ac013d83383e30e59f286027669e7dd345e + md5: 69c5ad8a1d6ebcaf7a0774cfeba00f4b + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-keyboard-handler + - ros2-rclcpp + - ros2-rclcpp-components + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosbag2-compression + - ros2-rosbag2-cpp + - ros2-rosbag2-interfaces + - ros2-rosbag2-storage + - ros2-yaml-cpp-vendor + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 599005 + timestamp: 1791441703255 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosgraph-msgs-2.0.4-np2py312h1bab3cf_25.conda + sha256: 6e231d25f5e0e4bc476ee105c478a2805d32629a52ecfb225d445eec4b5228a2 + md5: 5c95447d9fd25b32c80e1b29f59ad8fd + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl-interfaces + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 242571 + timestamp: 1791432851349 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-adapter-4.6.9-np2py312h1bab3cf_25.conda + sha256: 111bfa16e614a50f00cefb85100f914a6446a460ede995437039b6bebdf67dcf + md5: b6e4f9e9f1590cd3d6966d04c81725e7 + depends: + - empy + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 64105 + timestamp: 1791430066141 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-cli-4.6.9-np2py312h1bab3cf_25.conda + sha256: 416b8f86ddda70110b7cb3bfe723239474b78439f9f4bec6eb6042968fa97348 + md5: 9b524c02435e7d805d2e83c0f68bf1c8 + depends: + - argcomplete + - importlib-metadata + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 42867 + timestamp: 1791428312659 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-cmake-4.6.9-np2py312h1bab3cf_25.conda + sha256: b85d68af47a469f470b8511171906a3bc02bfca251788f4f3b7e226f64db3825 + md5: e8348d70667c7242d4388954d6bc7634 + depends: + - empy + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-pycommon + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 37227 + timestamp: 1791431011292 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-core-generators-0.2.1-np2py312h1bab3cf_25.conda + sha256: 1dc4259b57684ff1abb2629a10ae723341e7ededc5c956b840f8ec6b85f10ee6 + md5: 4fbd027a47808382eef0f6841d102e0c + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cmake + - ros2-rosidl-generator-c + - ros2-rosidl-generator-cpp + - ros2-rosidl-generator-py + - ros2-rosidl-generator-rs + - ros2-rosidl-generator-type-description + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-cpp + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 33085 + timestamp: 1791431863647 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-core-runtime-0.2.1-np2py312h1bab3cf_25.conda + sha256: 2fb2aff807bd3899e9a2c88019ccf6937b23efe6710cf77ddfc636540a922452 + md5: 09e677efa7cca74b87c1937d1fdab4c6 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-generator-py + - ros2-rosidl-generator-rs + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-cpp + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 32164 + timestamp: 1791431858340 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-default-generators-1.6.1-np2py312h1bab3cf_25.conda + sha256: 58a2a2141b22f56baaeea5ca349bd1817f434541e50488d80a8fab6ff47390b4 + md5: 7f5cf9c9b2d1995af3b6aa0f981e316a + depends: + - python + - ros2-action-msgs + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-generators + - ros2-service-msgs + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 33304 + timestamp: 1791432016204 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-default-runtime-1.6.1-np2py312h1bab3cf_25.conda + sha256: ecaf39ca368a52e505c991d770f1c09bf4335b09fa356903f8a6d434561f70be + md5: 2a3b4f94aeceaf2470ca95f391ddfe9a + depends: + - python + - ros2-action-msgs + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - ros2-service-msgs + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 32741 + timestamp: 1791432000741 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-dynamic-typesupport-0.1.2-np2py312h1bab3cf_25.conda + sha256: d9fecafb8b684db23a2fa46463da5dd7d0d870f265de4643920ec7701d87b8d0 + md5: bf558246575e562ab8a921fac910d687 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 63220 + timestamp: 1791431156029 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-dynamic-typesupport-fastrtps-0.1.0-np2py312h1bab3cf_25.conda + sha256: e490ebd2c4c44c5120682938592c5a5ae61b312e3d6782c993b5ff5be8f716fc + md5: eec0a7a5ccd78fc22ecb85d2524a0356 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-dynamic-typesupport + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 88515 + timestamp: 1791431342285 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-generator-c-4.6.9-np2py312h1bab3cf_25.conda + sha256: 63349258f1588132c4b4807ed14203a1ab5a44380f6e956f7eaefe82ed78229e + md5: 9f5804424e9271f22f200c0753b6df20 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-cmake + - ros2-rosidl-generator-type-description + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-typesupport-interface + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 53830 + timestamp: 1791431149964 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-generator-cpp-4.6.9-np2py312h1bab3cf_25.conda + sha256: 98eb3d1706a6a850e0d7af342c70864c45b48c8d53d1856624f2adcba2bb923a + md5: d653b31ef61bf47f70e7dd77c50e75a4 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-cmake + - ros2-rosidl-generator-c + - ros2-rosidl-generator-type-description + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-cpp + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 50618 + timestamp: 1791431315961 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-generator-py-0.22.2-np2py312h1bab3cf_25.conda + sha256: dc157fcd4d87962fb92b3f7c58d026e4ee3832d5a81c871c6f223e12051e22a7 + md5: fc6929ea6bd38ffdca7e170fe57fa10b + depends: + - numpy + - python + - ros2-ament-cmake + - ros2-ament-cmake-cppcheck + - ros2-ament-cmake-cpplint + - ros2-ament-cmake-flake8 + - ros2-ament-cmake-pep257 + - ros2-ament-cmake-uncrustify + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-python-cmake-module + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-interface + - ros2-rpyutils + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 61996 + timestamp: 1791431851913 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-generator-rs-0.5.0-np2py312h1bab3cf_25.conda + sha256: df620414b06e37c07f8b8e4a4d344e526bc4ab0cec32bf4e205423a2f20db821 + md5: d27e9682ed591576d8ee42652d24c075 + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-environment + - ros2-ros-workspace + - ros2-rosidl-generator-c + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-interface + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 51767 + timestamp: 1791431846411 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-generator-type-description-4.6.9-np2py312h1bab3cf_25.conda + sha256: 9dd56c9b400dc36779f000eaf6b7bc28b47fdaf7a03b4215cba746e901c72fd0 + md5: 05e76cfc3bfc9e27d607d8753c4fe85f + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-parser + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 49360 + timestamp: 1791430864209 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-parser-4.6.9-np2py312h1bab3cf_25.conda + sha256: aadd69c17aa037b98c6a738d051017785f8640bc751588624c7912de585ec913 + md5: d7f45f9a56516265fca4c2e22d1f30a7 + depends: + - lark-parser + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-adapter + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 60904 + timestamp: 1791430599560 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-pycommon-4.6.9-np2py312h1bab3cf_25.conda + sha256: 4aacab5f5923ca3d0b74a9290c769eaad11b29425a3e6700c6f79f301151dcc3 + md5: f9c18824b764e13161e456a3df743742 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-parser + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 25425 + timestamp: 1791430858911 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-runtime-c-4.6.9-np2py312h1bab3cf_25.conda + sha256: d40edb21b33215f9774fc7da9f214a68f331c0a92c8bd84b514d74bfc95fc905 + md5: dbf987bfdd89703e70dd1114d4db9c61 + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-typesupport-interface + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 84226 + timestamp: 1791430992687 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-runtime-cpp-4.6.9-np2py312h1bab3cf_25.conda + sha256: c17b9ee26987836e4c86f0d3adc97e1cecc87a417b13afc7ad9d4354694d0240 + md5: 0ad6b1e5b6e070038fe7516bf8557c91 + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 41562 + timestamp: 1791431133903 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-runtime-py-0.13.2-np2py312h1bab3cf_25.conda + sha256: 80238deca59319a67545cbd866fee95420698b0bdd23257dbb9f61be2c41bf74 + md5: f10d52b6fd56c9d587c7e4285f8301b2 + depends: + - numpy + - python + - pyyaml + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-parser + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 48035 + timestamp: 1791433445967 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-c-3.2.3-np2py312h1bab3cf_25.conda + sha256: 0259e79f1635ec8421d4d6c54434dec21ed7710a31532e5a9dda6043385b2346 + md5: f3c1b077f2b7e9e60bc14539690cab94 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-interface + - ros2-rosidl-typesupport-introspection-c + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 51487 + timestamp: 1791431733929 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-cpp-3.2.3-np2py312h1bab3cf_25.conda + sha256: 6f41d358f6c399fd8107ecb415a54dcb381b9cbba667dab818cce4cde91fa037 + md5: 8255b8f90ce58c6b8e280ae60e3568e7 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-generator-type-description + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-interface + - ros2-rosidl-typesupport-introspection-cpp + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 50589 + timestamp: 1791431829638 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-fastrtps-c-3.6.4-np2py312h1bab3cf_25.conda + sha256: 741bcf2f0b8c02971ad7d6d82718fd132b591893c5ae89512999791244c4a7cd + md5: 467092f7338241c9152c5b5b7abace80 + depends: + - python + - ros2-ament-cmake-ros + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps-cmake-module + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-interface + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 52168 + timestamp: 1791431635377 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-fastrtps-cpp-3.6.4-np2py312h1bab3cf_25.conda + sha256: c96ae76b19e05c18c6bfe2cdb16856eeca986cc7ad5edacad5c72ec50ffe1dc8 + md5: 6bfae1625399b723b93a0e2851f55cd5 + depends: + - python + - ros2-ament-cmake-ros + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps-cmake-module + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-generator-cpp + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-interface + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 53985 + timestamp: 1791431486269 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-interface-4.6.9-np2py312h1bab3cf_25.conda + sha256: 4897069d7bbb2b8a5a375a43775ed82add6dd7302eb30c19d622e8791a6ef918 + md5: 51bfb52b8d7dcb3b3811c963990937db + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 29912 + timestamp: 1791430085226 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-introspection-c-4.6.9-np2py312h1bab3cf_25.conda + sha256: 8379732c321b7e416c1794fcb2fd03dc3de99f0234a5cf0bc600d8fc8b203cfc + md5: a6f6e0192f065c3caa6b075c2ca96555 + depends: + - python + - ros2-ament-cmake + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-cmake + - ros2-rosidl-generator-c + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-interface + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 48659 + timestamp: 1791431337799 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-introspection-cpp-4.6.9-np2py312h1bab3cf_25.conda + sha256: 60533ea9e8559815b5984e136350f28b2e010b8e939359fcf61df9536ad15391 + md5: 7f4f2632572534dcf1ade7a9f17f2db5 + depends: + - python + - ros2-ament-cmake + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-cmake + - ros2-rosidl-generator-c + - ros2-rosidl-generator-cpp + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-interface + - ros2-rosidl-typesupport-introspection-c + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 48835 + timestamp: 1791431503806 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rpyutils-0.4.2-np2py312h1bab3cf_25.conda + sha256: dda206bfb5900e2af1ac5abc2dae3595a13c32ef1510b8f8d7bc5f2005cb42e3 + md5: f1c2268a4aca8425abecb0665c2cce3e + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 26506 + timestamp: 1791428324226 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rti-connext-dds-cmake-module-0.22.3-np2py312h1bab3cf_25.conda + sha256: f3e1155b6174bb30f4c7a7df84cbba387ca7d0e37c3032dd9eb85f683e699e85 + md5: 5b98441283212b045deb2fff9cb541cd + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 32226 + timestamp: 1791430393392 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-sensor-msgs-5.3.8-np2py312h1bab3cf_25.conda + sha256: 5b76c4b26ba46fa80e3f22d3c0fff42a39a0cc3b6b71e94799ce621cf8fadf50 + md5: 56e9b55432b2cf0af6ec7d0cfa6a4a22 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 565706 + timestamp: 1791433970364 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-sensor-msgs-py-5.3.8-np2py312h1bab3cf_25.conda + sha256: 9e7b1eaece0ebae3a45629eb5559a94163a22faf7485e3504fb428bbe53669fa + md5: c519213068f2e0843f1646326bea9058 + depends: + - numpy + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-std-msgs + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 30769 + timestamp: 1791434939795 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-service-msgs-2.0.4-np2py312h1bab3cf_25.conda + sha256: ea7e1dae12895bcef452f505f56708e7bf2e08479dd08f55356702fa3de5a1ed + md5: 39bf7c64ec54f24b795acdd0e35edf3b + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 83188 + timestamp: 1791431890239 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-shape-msgs-5.3.8-np2py312h1bab3cf_25.conda + sha256: 6ccbac3193918419dceb425f6d7afc54d63ff1744dc5df1f83f347b5126317df + md5: e8b4905b879afe16c871e4e73abe8fbb + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 132033 + timestamp: 1791434126853 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-spdlog-vendor-1.6.2-np2py312hbe83831_25.conda + sha256: 2c22415645e803cc77b7a5eea253c93d06d16d6d4d146a617cfbcf00fcbb9954 + md5: 2ca25d1121d8131730a23da82eb090d9 + depends: + - fmt + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - spdlog + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - spdlog >=1.17.0,<1.18.0a0 + - fmt >=12.1.0,<12.2.0a0 + license: Apache-2.0 OR MIT + size: 28160 + timestamp: 1791430410428 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-sqlite3-vendor-0.26.11-np2py312hc33be11_25.conda + sha256: 5d0d26c41ca18dd041e6b2f400a3c573d96e3992e40bae762a0ce401bc765589 + md5: d890bb919a480179eaab456149d3d304 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - sqlite + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - libsqlite >=3.53.4,<4.0a0 + license: Apache-2.0 + size: 25085 + timestamp: 1791428405784 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-sros2-0.13.6-np2py312h1bab3cf_25.conda + sha256: 46729d5fac97d2dbf854559e60ce321e0148fab1d8c2951835cff48eee42b507 + md5: c509750b4b47e47d7f45af4dca2401e5 + depends: + - argcomplete + - cryptography + - importlib_resources + - lxml + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 77663 + timestamp: 1791435442746 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-sros2-cmake-0.13.6-np2py312h1bab3cf_25.conda + sha256: a6a830ad77963f43025d2931fe277767c57196cd5eea4f73fa05bbe749a41613 + md5: 68d9a72c99ed51670a771bb8b79408e2 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - ros2-sros2 + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 41418 + timestamp: 1791436896448 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-statistics-msgs-2.0.4-np2py312h1bab3cf_25.conda + sha256: 061c658c11a05f824fdc4111529811be45d958ace296a25406b3b9290ad2fba7 + md5: fba4747f25ad0ca4f5df98206704b767 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 114398 + timestamp: 1791432201779 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-std-msgs-5.3.8-np2py312h1bab3cf_25.conda + sha256: 1617644ea7043eda7c90da2e1a978f4c4e681ab55f9a0fb1b1545c7f22ca4cef + md5: 57ca898527daea8ad47723788392d8d9 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 353317 + timestamp: 1791433219704 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-std-srvs-5.3.8-np2py312h1bab3cf_25.conda + sha256: b37c153598802d5516afde6861f032fad703bbbda68db0479992d8fe4feae269 + md5: a6439bf6609696140458793e5e95a9f0 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 173031 + timestamp: 1791432213796 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-stereo-msgs-5.3.8-np2py312h1bab3cf_25.conda + sha256: 7b8468eb076ff3174126073532b56e3b51626f6b070ae2f5c9210055204ddf28 + md5: 9d0692cc224830c4a9959cf12c8c8eb4 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-sensor-msgs + - ros2-std-msgs + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 85996 + timestamp: 1791434734452 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-0.36.23-np2py312h1bab3cf_25.conda + sha256: 581cc7ed7a67c1b988d4fa653643d092fe7cdb93bcb08a571cc70bc5fdf5d7fd + md5: 9d6d499ebed331fdae9599ac52939333 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-runtime-cpp + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 138457 + timestamp: 1791434069615 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-bullet-0.36.23-np2py312h1bab3cf_25.conda + sha256: 1e9a4e6ce98e4724f5d5cdfff5eb4727905baadc9dff336ee5abb5cc00e34523 + md5: b668fcb110bcaea9f00be30547e98e96 + depends: + - bullet + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-ros + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 46079 + timestamp: 1791437531061 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-eigen-0.36.23-np2py312hd65a65c_25.conda + sha256: 8230b10ec2b53de4b54adffc1e8ea30df49eee8d3c891e77dd130aabb6fbcd14 + md5: f5ec9cfbdce1952ccdb281adaac8f0c0 + depends: + - eigen + - eigen-abi-devel + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-ros + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - eigen-abi >=5.0.1.80,<5.0.1.81.0a0 + license: BSD-3-Clause + size: 47782 + timestamp: 1791437090122 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-eigen-kdl-0.36.23-np2py312hd65a65c_25.conda + sha256: 3101f10b78fb087abf43114df022fa1526d0f3023fbce840cc92b3a2eddf47e8 + md5: 96cfb4393d0fc3a7caf102cc6d942a3b + depends: + - eigen + - eigen-abi-devel + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-orocos-kdl-vendor + - ros2-ros-workspace + - ros2-tf2 + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - eigen-abi >=5.0.1.80,<5.0.1.81.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 42447 + timestamp: 1791434463010 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-geometry-msgs-0.36.23-np2py312h1bab3cf_25.conda + sha256: 09d7cca1174368b54e0803f74c7def8334d249014064256e7e843fdf02deb798 + md5: 3b7d4e1fde928b7c9bbb21877f0de045 + depends: + - numpy + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-orocos-kdl-vendor + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-ros + - ros2-tf2-ros-py + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 59680 + timestamp: 1791437071872 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-kdl-0.36.23-np2py312h1bab3cf_25.conda + sha256: 1ad65ac2dff51aca8f7260a00a99d44ca4ca71af09a873544bceec241d952eca + md5: dd5aec8f58831b27995dd3c53f5f3469 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-orocos-kdl-vendor + - ros2-python-orocos-kdl-vendor + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-ros + - ros2-tf2-ros-py + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 49124 + timestamp: 1791437083244 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-msgs-0.36.23-np2py312h1bab3cf_25.conda + sha256: 6dd0514b1a926fa16b2cdb2a0a9a04e93e2ed0072c76f0e869ce0135471763df + md5: fcd74e81da452b08c0573674064c31ee + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 264357 + timestamp: 1791434049268 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-py-0.36.23-np2py312h1bab3cf_25.conda + sha256: 5963b9245c4dd0862850043c3bf1974baea00451acbab41dc461b4386bcb1312 + md5: c90ee4022b5316e3d135dd372fbf12aa + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-rclpy + - ros2-ros-workspace + - ros2-rpyutils + - ros2-tf2 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 59520 + timestamp: 1791434621869 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-ros-0.36.23-np2py312h1bab3cf_25.conda + sha256: 4a0f4efb425b17002f95cc33114cb266e506063b6d61b612d1e4c0b14a71f7a1 + md5: 8658a044d238b5ca324ed4731e220903 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-message-filters + - ros2-rcl-interfaces + - ros2-rclcpp + - ros2-rclcpp-action + - ros2-rclcpp-components + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-msgs + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 472171 + timestamp: 1791436619407 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-ros-py-0.36.23-np2py312h1bab3cf_25.conda + sha256: c51fddcf990358bcc2733a8391e129ad4b61bb9c61856a7aafe0ce06b5ec0b49 + md5: 8242b66cc796e2fca1a8d5bec3fe5ec1 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-rclpy + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-std-msgs + - ros2-tf2-msgs + - ros2-tf2-py + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 50128 + timestamp: 1791435425463 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-sensor-msgs-0.36.23-np2py312hd65a65c_25.conda + sha256: 2bf4b8f4d3945f8b7070ff9821d5d37beb5bedb7f4bbc68128d1e9b25d557732 + md5: 44dee358fb6741584f82f4a98d06e8d5 + depends: + - eigen + - eigen-abi-devel + - numpy + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-eigen3-cmake-module + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-sensor-msgs-py + - ros2-std-msgs + - ros2-tf2 + - ros2-tf2-ros + - ros2-tf2-ros-py + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - eigen-abi >=5.0.1.80,<5.0.1.81.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 53236 + timestamp: 1791437867878 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tf2-tools-0.36.23-np2py312h1bab3cf_25.conda + sha256: b718ed48f32fd928ab2a4dcb81ec00cddbc9636e4643d59f70df2c9c8ff264fa + md5: aefee8c9e6dade24b055f91a0403a77d + depends: + - graphviz + - python + - pyyaml + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-tf2-msgs + - ros2-tf2-py + - ros2-tf2-ros-py + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 24274 + timestamp: 1791436901279 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tinyxml2-vendor-0.9.2-np2py312hd4672ec_25.conda + sha256: 35b8c00a2a19b17a961ddbc532b75fd90c3eaec597ba8c4e11d1ffb2c08a16f0 + md5: 009ac67313d65537072a25f420dc83a0 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - tinyxml2 + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - tinyxml2 >=11.0.0,<11.1.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 25261 + timestamp: 1791428337849 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-tracetools-8.2.6-np2py312h1bab3cf_25.conda + sha256: 76c53fecda75ac11e58fe0a10604b76f8b2425da50cceb2e38a1a7a0f1879eb0 + md5: 3e0b617335978a381cf9ae0177d90c99 + depends: + - lttng-ust + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - lttng-ust >=2.13.9,<2.14.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 73831 + timestamp: 1791430608525 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-trajectory-msgs-5.3.8-np2py312h1bab3cf_25.conda + sha256: ab2b719f0d705cebe98499388e1d82dca97dadca90c2e5e67f767852cff1b617 + md5: f77779a847ae59d79c75f394e9e681a1 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 154769 + timestamp: 1791434026711 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-type-description-interfaces-2.0.4-np2py312h1bab3cf_25.conda + sha256: 15d0fe52e091e7085a859487cfb2a8a1bcc4185103901fa4fe25cc1fd76007bf + md5: effd2dbbfc1ba85359d51e58bf68cce3 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - ros2-service-msgs + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 244353 + timestamp: 1791431923405 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-uncrustify-vendor-3.0.1-np2py312h1bab3cf_25.conda + sha256: fea58f9ae3c2118a794181be918926c26a9b1154d28af7c79133f898468a397f + md5: 6f52248c5782c04020bc6d08d8389a12 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - uncrustify + - uncrustify >=0.78 + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR GPL-2.0-only + size: 23791 + timestamp: 1791428301174 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-unique-identifier-msgs-2.5.1-np2py312h1bab3cf_25.conda + sha256: 13dbd92eb07d6be7f42900afa51eec2709c0dbe618e672cc57f614b0d7e7c3a2 + md5: a3b520c703ebd967dd9b71e87fb8595c + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 76325 + timestamp: 1791431880284 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-urdf-2.10.1-np2py312h1bab3cf_25.conda + sha256: cb01c4cffe2ee3a47b54a557e47b3fb9185f5530948c61f63a2ade6580120a35 + md5: 46bd63bf7fe7dc0624debbe45d3b507e + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-pluginlib + - ros2-ros-workspace + - ros2-tinyxml2-vendor + - ros2-urdf-parser-plugin + - ros2-urdfdom + - ros2-urdfdom-headers + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 159467 + timestamp: 1791431517353 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-urdf-parser-plugin-2.10.1-np2py312h1bab3cf_25.conda + sha256: d43f49d4bb0aafa88d76dd3f000ce00ce603ab254b86ac3190da94e1b6256d4a + md5: af987e8e1a9604ada14e0d9477e2c76a + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-urdfdom-headers + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 32611 + timestamp: 1791430624924 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-urdfdom-6.0-py312h2261104_25.conda + sha256: b2d6c00f5c465f7eb3016acc07f5f5c11c398349e79f8261fe3c190b9df23ede + md5: b5cfd19e17b8abd909a03ea55c55076d + depends: + - console_bridge + - python + - ros2-console-bridge-vendor + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-tinyxml2-vendor + - ros2-urdfdom-headers + - tinyxml2 + - urdfdom >=6.0,<6.1a0 + - console_bridge >=1.0.2,<1.1.0a0 + - python_abi 3.12.* *_cp312 + - tinyxml2 >=11.0.0,<11.1.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 8351 + timestamp: 1791430868896 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-urdfdom-headers-3.0-py312h24bf083_25.conda + sha256: 30f43d8c0ae551cb07b3ac6840d009ac31d104773123d1380c021d1651caf8fe + md5: 49449f7ddaac8c88a5ee72a2e0a0ab4c + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - urdfdom_headers >=3.0,<3.1a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 7281 + timestamp: 1791427378992 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-visualization-msgs-5.3.8-np2py312h1bab3cf_25.conda + sha256: c283fe49f1be4e731f6abaa9e6cb0f7e1c0778ac85409ccd7401c77886f62709 + md5: 6aeb3490862f41519d3603bc2c451c47 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-sensor-msgs + - ros2-std-msgs + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 384629 + timestamp: 1791434697712 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-yaml-cpp-vendor-9.0.1-np2py312h1bab3cf_25.conda + sha256: 420ff8f667542b768cf1f67f05426df16e69c69cd825f50b7279887f5e359206 + md5: 5e4e974097afd1fda99d11f52e224863 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - yaml-cpp + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - yaml-cpp >=0.8.0,<0.9.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR MIT + size: 23714 + timestamp: 1791428375799 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-zenoh-cpp-vendor-0.2.11-np2py312h815c85b_25.conda + sha256: 677cbfad3c16cfb233c4223aa9d64880c31a6af84f0906ef26083b5470e42a9c + md5: b16236626b0f1a727994a9fdb2ea9ff6 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - __glibc >=2.28,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - libzenohc >=1.9.0,<1.9.1.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + constrains: + - __glibc >=2.17 + license: Apache-2.0 + size: 25246 + timestamp: 1791428284330 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-zstd-vendor-0.26.11-np2py312h6a0d68b_25.conda + sha256: 1c4428a59bbb1b06b3ea67fb05b324105d5f45559027c08d21be88826ee6e5d5 + md5: 438d04d97e0229de0bf436ca53afef1a + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - zstd + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - libgcc >=15 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - zstd >=1.5.7,<1.6.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR BSD-3-Clause + size: 24624 + timestamp: 1791428379408 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-ament-index-cpp-1.8.4-h60d57d3_25.conda + sha256: 52e93c58f77cddf0f58ee9b93f1dca33a495f38a6a32c68a3f3d4b377976e4af + md5: 0b20c25a6d699b84b19b9275b431d148 + depends: + - ros2-ament-index-cpp ==1.8.4 + size: 2029 + timestamp: 1791431438597 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-demo-nodes-py-0.33.11-h60d57d3_25.conda + sha256: cfc9395b1fe10d85dd4235761579a1fc4c5a2f066105090a6a5cd6827691bad3 + md5: 3b84f02ac4bf1e9c52bc145146bbe195 + depends: + - ros2-demo-nodes-py ==0.33.11 + size: 2030 + timestamp: 1791436192001 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-fastcdr-2.2.7-np2py312haf4906a_21.conda + sha256: 55ccc2f54784e53b97ec62e6a7a21099d72bfae0e7c902b4f7d1690f579e0a67 + md5: c2f3b48d114127c35015e6ef4370ec8e + depends: + - python + - ros-jazzy-ros-workspace + - ros2-distro-mutex 0.16.* jazzy_* + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 81413 + timestamp: 1788191643747 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rcpputils-2.11.4-h60d57d3_25.conda + sha256: 4255b96974c088b50b635a64517c8ff2c071c2a1170fbb0bfe0b9fa2c42ae618 + md5: c5d66aba0e8ff9d7343237f9efbf98f1 + depends: + - ros2-rcpputils ==2.11.4 + size: 2004 + timestamp: 1791432488181 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rcutils-6.7.6-h60d57d3_25.conda + sha256: 15fac8a49e43d7ccda60406146307feb1f1437afd72941cd0038f7ed29d83849 + md5: 07824f67d62a10bfbfc30727be139e98 + depends: + - ros2-rcutils ==6.7.6 + size: 1986 + timestamp: 1791432260952 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rmw-7.3.3-np2py312haf4906a_21.conda + sha256: d082a9492bf18200ae6a8f90abffbab89ceb80bb696cd466627ceb44bab8e559 + md5: 4628f42fe94a4db7c0b265f06683f8d8 + depends: + - python + - ros-jazzy-rcutils + - ros-jazzy-ros-workspace + - ros-jazzy-rosidl-dynamic-typesupport + - ros-jazzy-rosidl-runtime-c + - ros2-distro-mutex 0.16.* jazzy_* + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 94029 + timestamp: 1788193988523 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rmw-zenoh-cpp-0.2.10-np2py312h84ff3ff_21.conda + sha256: 371791f2cbc698ef9f708725ffd7fc5051a44e1cbfbc41ad87fc031120b50e7f + md5: b029e19ffc3ebfdcf362ace7c239fb5f + depends: + - python + - ros-jazzy-ament-index-cpp + - ros-jazzy-fastcdr + - ros-jazzy-rcpputils + - ros-jazzy-rcutils + - ros-jazzy-rmw + - ros-jazzy-ros-workspace + - ros-jazzy-rosidl-typesupport-fastrtps-c + - ros-jazzy-rosidl-typesupport-fastrtps-cpp + - ros-jazzy-tracetools + - ros-jazzy-zenoh-cpp-vendor + - ros2-distro-mutex 0.16.* jazzy_* + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - libzenohc >=1.9.0,<1.9.1.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 OR BSD-3-Clause + size: 230231 + timestamp: 1788194726154 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-ros-base-0.11.0-h60d57d3_25.conda + sha256: c700ef2f0fc53f8c0cb34c32d6a82196adfe6facd07f29e71ba94f6849de4755 + md5: 4c7d5d19e8e7b9b3d4ad4bc5ec4c8be6 + depends: + - ros2-ros-base ==0.11.0 + size: 2001 + timestamp: 1791452723262 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-ros-workspace-1.0.3-h60d57d3_25.conda + sha256: ab966a02876f1469f318680c5f144bf8c546b3a992d85abbfc7eff163588461f + md5: c7603b5329da1771d904e7363db04dec + depends: + - ros2-ros-workspace ==1.0.3 + size: 2019 + timestamp: 1791427778104 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rosidl-dynamic-typesupport-0.1.2-h60d57d3_25.conda + sha256: d0dd7595b0b479fbfb4ca39cbdc15fdee0025a7ddace8dd8a49173c69d852a73 + md5: 566b90c78b0a5995b22e5366a247d552 + depends: + - ros2-rosidl-dynamic-typesupport ==0.1.2 + size: 2073 + timestamp: 1791432763536 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rosidl-runtime-c-4.6.9-h60d57d3_25.conda + sha256: 6ecf7348c96619bd7f167022890bac7ff608bd5180a16ab9842b2e66d4e081bc + md5: 0aebe9ba76332cc0435c1f1879345d41 + depends: + - ros2-rosidl-runtime-c ==4.6.9 + size: 2031 + timestamp: 1791432487580 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rosidl-typesupport-fastrtps-c-3.6.4-h60d57d3_25.conda + sha256: 19786afb356a6a3ca72214207435836cbdb143d7d29025b1af3f7a8d78ab0079 + md5: 32eb779f22bc833b00cc7643d49f828a + depends: + - ros2-rosidl-typesupport-fastrtps-c ==3.6.4 + size: 2093 + timestamp: 1791433263708 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rosidl-typesupport-fastrtps-cpp-3.6.4-h60d57d3_25.conda + sha256: b10937d2fc66c5d30f7022670a35b943315295e5df5bcedf768337323c6624ab + md5: 29eae0e5a5b1ac222a89b62c5b1089ca + depends: + - ros2-rosidl-typesupport-fastrtps-cpp ==3.6.4 + size: 2098 + timestamp: 1791433206312 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-tracetools-8.2.6-h60d57d3_25.conda + sha256: d0db3a225fe0df56002ec5f82fc9b4e9ab811fa56586106595c5fff9431eee5c + md5: b41eb15bab9dd9b4938e893b1eb647bc + depends: + - ros2-tracetools ==8.2.6 + size: 2000 + timestamp: 1791431949378 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-zenoh-cpp-vendor-0.2.10-np2py312h84ff3ff_21.conda + sha256: 1c7d515b711e1e0f00c2a15b22e58419b55d1725381d71564065bc845a5f44fe + md5: 9ef58cdbd6dd50fbd55b32168bf0fc54 + depends: + - python + - ros-jazzy-ros-workspace + - ros2-distro-mutex 0.16.* jazzy_* + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - libzenohc >=1.9.0,<1.9.1.0a0 + license: Apache-2.0 + size: 25666 + timestamp: 1788191481084 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-action-msgs-2.0.4-np2py312haf4906a_21.conda + sha256: a35df0344a9132d49dd63c554abf46e4cfb9683bdfd23c2428d5747b3a8f1d4a + md5: d44c0a3edeba62a1997a7e77ba472e39 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - ros2-service-msgs + - ros2-unique-identifier-msgs + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 144150 + timestamp: 1788361795754 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-actionlib-msgs-5.3.8-np2py312haf4906a_21.conda + sha256: ab880583b87823e96a54147940d7803be0fbd9e8a267ebe831007900e7de8efa + md5: bf99c8835850e57d839672a18a9d09ac + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 107893 + timestamp: 1788457422683 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-2.5.6-np2py312haf4906a_21.conda + sha256: b6b50de48e7c0a6facf87ccdb8f144e8d8e74722ae09306190e8cb814ddb9c01 + md5: 7a81d2867e51c795eb4a11077413ec93 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-export-definitions + - ros2-ament-cmake-export-dependencies + - ros2-ament-cmake-export-include-directories + - ros2-ament-cmake-export-interfaces + - ros2-ament-cmake-export-libraries + - ros2-ament-cmake-export-link-flags + - ros2-ament-cmake-export-targets + - ros2-ament-cmake-gen-version-h + - ros2-ament-cmake-libraries + - ros2-ament-cmake-python + - ros2-ament-cmake-target-dependencies + - ros2-ament-cmake-test + - ros2-ament-cmake-version + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - cmake + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 25222 + timestamp: 1788268269348 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-auto-2.5.6-np2py312haf4906a_21.conda + sha256: c1359e87c1d8d3ae29761a3781510aee08fed29ef0f9fe29319692194b168f49 + md5: 99861a65984b2990873d2c82a805479b + depends: + - python + - ros2-ament-cmake + - ros2-ament-cmake-gmock + - ros2-ament-cmake-gtest + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 29410 + timestamp: 1788268585565 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-copyright-0.17.5-np2py312haf4906a_21.conda + sha256: e153bea09391741833bd4132d9bdca9718c526795f5c07beb3cbdcc4c6987d4d + md5: 67d3e1aa2aecbe0bb041a47779ccc9db + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-copyright + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 24609 + timestamp: 1788269063360 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-core-2.5.6-np2py312haf4906a_21.conda + sha256: 38dad076ae2fe5daeda578885c39cccfc544f9652ca0906f17eea4454e9bcb79 + md5: 45f3ea21efd46de3e8fd115bd1ab3b88 + depends: + - catkin_pkg + - python + - ros2-ament-package + - ros2-distro-mutex 0.16.* jazzy_* + - cmake + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 47371 + timestamp: 1788259693819 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-cppcheck-0.17.5-np2py312haf4906a_21.conda + sha256: 46ca23f58d3afcf53b1defdf1b33154ca8ed023990eb80258251faa9ccf67297 + md5: 5f1fe6d0adca86289fa5baa752988c86 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-test + - ros2-ament-cppcheck + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 26323 + timestamp: 1788269462669 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-cpplint-0.17.5-np2py312haf4906a_21.conda + sha256: 6eb036b46d91a12c919eba29bb3bba6454575239ca7eb3a14dbb46b9d2330aa4 + md5: 3ae70b7af1ad6464b848aab047f5e4a2 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-cpplint + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 25270 + timestamp: 1788270616425 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-export-definitions-2.5.6-np2py312haf4906a_21.conda + sha256: 7b0a62fbde29518568951625e46cb14eba4a42061a009f68ade072f1104a828f + md5: 49a708e7af1d4b2a417a8fe5105dc502 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 23990 + timestamp: 1788260206719 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-export-dependencies-2.5.6-np2py312haf4906a_21.conda + sha256: 00dcca2574bc5c78c89570a5aaa9196878248da44b3cab4b700080c9505a565c + md5: 812b78a7570758b1d88c949fc8fa9f70 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-libraries + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 25013 + timestamp: 1788262788773 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-export-include-directories-2.5.6-np2py312haf4906a_21.conda + sha256: 7b9ddb3da391d45dae86799b7e3987c9751b6811410898c4eeac1b0db6cc2671 + md5: d9a191a82a05b93a93f11cf4fd712999 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 24386 + timestamp: 1788260200783 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-export-interfaces-2.5.6-np2py312haf4906a_21.conda + sha256: 13151f66d7970b00d648faaa613d13783f3a14a815d695d9ecaff2693aa60bc2 + md5: 507fdbc7dfcd7b1f6f0533dd1a1d28f3 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-export-libraries + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 24580 + timestamp: 1788262433395 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-export-libraries-2.5.6-np2py312haf4906a_21.conda + sha256: 7a910ea76ee798edea57b061cabaf7bc01883cb7b8af9d9d96a65152e89e1913 + md5: ee19750b66effb0965fd6f80d3a17978 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 25939 + timestamp: 1788260169777 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-export-link-flags-2.5.6-np2py312haf4906a_21.conda + sha256: 0b46b1682b99c6ef44fe11581542295542d910f0560bbebc4f98484a2894b786 + md5: 6ea83b3d16a2f7c7e8d0ec5fe9d9ea88 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 23958 + timestamp: 1788260194548 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-export-targets-2.5.6-np2py312haf4906a_21.conda + sha256: d61d6bf36832f7ab59fa4ccb7b55d620d47eac48236837d147ca883eeaf65eb5 + md5: a27f9c2af3be3c0564dc6921e09dcaf1 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-export-libraries + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 24811 + timestamp: 1788262806399 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-flake8-0.17.5-np2py312haf4906a_21.conda + sha256: 5e5d4a5f9ebdbea574471acb82317f36163f36f57fbd0b8c4413457e586c0168 + md5: 6dbef71eb55e80f581426126a9c5ca98 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-flake8 + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 26416 + timestamp: 1788270608820 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-gen-version-h-2.5.6-np2py312haf4906a_21.conda + sha256: d034f1a7c44b52e60a0d2d0eef1d83dd31777c1a7ff7c9927b49005fcac67c53 + md5: 889255070097b81d382f066955def5e7 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 26756 + timestamp: 1788268111615 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-gmock-2.5.6-np2py312haf4906a_21.conda + sha256: 9c81399e106b6eba9cf524c66896e981defd205fd99300348ea205648adc961d + md5: 0ba04df6843aabbe5d99ef128d65f80c + depends: + - gmock + - python + - ros2-ament-cmake-gtest + - ros2-ament-cmake-test + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-gmock-vendor + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 26875 + timestamp: 1788268126412 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-gtest-2.5.6-np2py312haf4906a_21.conda + sha256: 0727b8b583d62d435f565d1b91f5ec4705d3ccc7c64266e4a1a6002e63c4eb7b + md5: 838df7954a0d9df07490c002768a8998 + depends: + - gtest + - python + - ros2-ament-cmake-test + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-gtest-vendor + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - gtest >=1.18.0,<1.18.1.0a0 + license: Apache-2.0 + size: 26618 + timestamp: 1788266600243 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-include-directories-2.5.6-np2py312haf4906a_21.conda + sha256: 42049dc7c70aee6d42ea9947a9d57debc0ca3137ea8bc9367b5f535d3152be32 + md5: cc4271e38832bb62fa3c6b549b95d115 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 23910 + timestamp: 1788260126824 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-libraries-2.5.6-np2py312haf4906a_21.conda + sha256: 69b11ea48f4cfa17de67ae6f8c89514765faaea5d9047b24df7544c0da91aaa5 + md5: fbac4fde8061f10ca640b827dae92e21 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 23567 + timestamp: 1788260119306 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-lint-cmake-0.17.5-np2py312haf4906a_21.conda + sha256: 18006cf270f3643853298c1b958a25b92d1bc5b2f45697021bb024e4bd8f62de + md5: 6b2613fceb7566baddb4ddb20db6bf26 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-lint-cmake + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 24282 + timestamp: 1788268523629 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-pep257-0.17.5-np2py312haf4906a_21.conda + sha256: ec2c1f4509b092d04b939f589007ffa56fcf9b202619dcf4ec345aa3b3d1c04c + md5: 50e650a63c33ca681eba0ac61714e334 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-pep257 + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 25104 + timestamp: 1788270600613 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-pytest-2.5.6-np2py312haf4906a_21.conda + sha256: 866568dad57369a3c9a31fd3eb43c49f1309286f6a5f0187adc420ab092df398 + md5: f197e0c231740fadd307d1479f9f71f6 + depends: + - pytest + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-test + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 26794 + timestamp: 1788267901686 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-python-2.5.6-np2py312haf4906a_21.conda + sha256: 5313e956d9711917d88d63097506665148c89abf892eaa33091b92765e4cf1c2 + md5: 20fd2b9c79b6a962a440ab8168d8c818 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 26114 + timestamp: 1788260096854 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-ros-0.12.1-np2py312haf4906a_21.conda + sha256: 1a3adfeeeb5b562848f02652a78ac1474fda0232ef576cccd217b0fa3b92e029 + md5: 10c2b75f6881e782b17f0f4beeff05a1 + depends: + - python + - ros2-ament-cmake + - ros2-ament-cmake-gmock + - ros2-ament-cmake-gtest + - ros2-ament-cmake-pytest + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-domain-coordinator + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 33038 + timestamp: 1788271118391 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-target-dependencies-2.5.6-np2py312haf4906a_21.conda + sha256: 72d7bbcb7f91cc56efed1dc34e6d8e51f460157c076088770278250ca889b92e + md5: 90d0bb4f632fb293e2eae34dd3f6337c + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-include-directories + - ros2-ament-cmake-libraries + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 25587 + timestamp: 1788262797546 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-test-2.5.6-np2py312haf4906a_21.conda + sha256: 3a3cd2f83f8ed3425ce65509523cd3e8b5e11a947a8fb93aedc6013d9282ffe0 + md5: 16655fbea0fe559fe4d3df622da1c7f9 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 38132 + timestamp: 1788262771331 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-uncrustify-0.17.5-np2py312haf4906a_21.conda + sha256: c5cd6563308d1dea03981b31833dcf7901e2e8f043948c415bfbecdbad4e1edb + md5: e7aaae7d81abd8e481e742d415f40b96 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-uncrustify + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 25704 + timestamp: 1788270589119 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-version-2.5.6-np2py312haf4906a_21.conda + sha256: b81a579e97e8048686ff611e393240e0cc5049130a1b5cc00f97db53e4686fae + md5: 20db14acba925a5f1102c847d7540e5b + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 23772 + timestamp: 1788260187724 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cmake-xmllint-0.17.5-np2py312haf4906a_21.conda + sha256: bef500c4811d1b6f69593a914bf7ba2db1b58f1f26370c8eb85706ec7e40decd + md5: 2245ada3121043692eb85dac59e58d76 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-xmllint + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 24835 + timestamp: 1788270566193 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-copyright-0.17.5-np2py312haf4906a_21.conda + sha256: 4315407fe1d4d53c6dea927f8034a0808c419d905fa0845dba55e11ccf90387e + md5: 8a8796d6359fac105da0508096ec8a59 + depends: + - importlib-metadata + - python + - ros2-ament-lint + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 67629 + timestamp: 1788268092461 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cppcheck-0.17.5-np2py312haf4906a_21.conda + sha256: ff26efac6d125419c037ccdfe91309c3fd1edf89f42cb8144d86a83ce425dd0d + md5: 32661521f7bec6754470db646e5ae527 + depends: + - cppcheck + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 30979 + timestamp: 1788268307450 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-cpplint-0.17.5-np2py312haf4906a_21.conda + sha256: c90e14996f6ffef7581647c3c924cf715924ad6824a3f0059b14bfca553b5aae + md5: 8e6229836a4cf4bf26670393826f37cb + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 OR BSD-3-Clause + size: 169956 + timestamp: 1788268295968 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-flake8-0.17.5-np2py312haf4906a_21.conda + sha256: 25d23b289e16d9877113518f4ce4736e5d8fe7df8adcbd40b93b897a9c5792d8 + md5: d10f9e3ffa9db8db2186aae2029febd5 + depends: + - flake8 + - flake8-builtins + - flake8-comprehensions + - flake8-docstrings + - flake8-import-order + - flake8-quotes + - python + - ros2-ament-lint + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 29508 + timestamp: 1788262748911 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-index-cpp-1.8.4-np2py312haf4906a_21.conda + sha256: c6a58d0f01380cca6b946d45c4bf3142fe987c5bf63c012acf615d82cdf0700f + md5: d6794d47f59e1531416ed53696653ab0 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 51778 + timestamp: 1788271255140 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-index-python-1.8.4-np2py312haf4906a_21.conda + sha256: 97db0230c2486f92104a12e05976a99702a93dc01fbdd1c239fe96839eac129e + md5: 396dedbfe704db991badb7ae70ede050 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 30724 + timestamp: 1788268241501 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-lint-0.17.5-np2py312haf4906a_21.conda + sha256: 53e2e3085bb3be2e53bdb5b26f7987dedf0b5cc701500d3486121d1c3c537479 + md5: 75291534368d6a4541d736c2cbeff385 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 19947 + timestamp: 1788260076604 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-lint-auto-0.17.5-np2py312haf4906a_21.conda + sha256: 60a0b0e1eb5f56f793f9f07c49f919ccfe1eccdd23c39863b04bc2147915d287 + md5: f65fd5a9c7b2e098a8571045554a48f7 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-test + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 24013 + timestamp: 1788266622143 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-lint-cmake-0.17.5-np2py312haf4906a_21.conda + sha256: 20f5cba71bbd5777d16f871fc69ccef0e3abb7320fc31a911faf8603f622f10d + md5: 7d625ce4c044162b98d41da67a8ee9ab + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 40511 + timestamp: 1788268246638 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-lint-common-0.17.5-np2py312haf4906a_21.conda + sha256: 78b9269fabeafe2038f1a7bb8f67905ab037a2a6428ab678bfcfcdba866c837a + md5: a1ac71ff11fca9ee03644b5e1d19bf1b + depends: + - python + - ros2-ament-cmake-copyright + - ros2-ament-cmake-core + - ros2-ament-cmake-cppcheck + - ros2-ament-cmake-cpplint + - ros2-ament-cmake-flake8 + - ros2-ament-cmake-lint-cmake + - ros2-ament-cmake-pep257 + - ros2-ament-cmake-uncrustify + - ros2-ament-cmake-xmllint + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 24282 + timestamp: 1788270665073 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-package-0.16.5-np2py312haf4906a_21.conda + sha256: ec7c2d1c07a58fba4c858db7bffe75e9843e4ab3dc4f54f4877dd365b5a4abe5 + md5: 1933ee01d9a3ca5199ebbf86f0ccc515 + depends: + - importlib-metadata + - importlib_resources + - python + - ros2-distro-mutex 0.16.* jazzy_* + - setuptools + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 44153 + timestamp: 1788259678242 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-pep257-0.17.5-np2py312haf4906a_21.conda + sha256: c12c7f10a3bc7d5ec9695844577f637138d467cc4e6da52e04d8c329938cad29 + md5: 8c4f21fd16f936b14b95ac2c0d6a106c + depends: + - pydocstyle + - python + - ros2-ament-lint + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 OR MIT + size: 28143 + timestamp: 1788266582030 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-uncrustify-0.17.5-np2py312haf4906a_21.conda + sha256: 5527c96655e74ead3f2880a9783dd159f799d5f23a55e1b15e887b402bba9777 + md5: 06201fc303a0d01b4f80b2c3f7c2ad4c + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-uncrustify-vendor + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 69233 + timestamp: 1788269094224 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ament-xmllint-0.17.5-np2py312haf4906a_21.conda + sha256: ea2dd37f91af44cd3911f1b837d414bba016a4ea8358f67c46369c6d7cbd3d25 + md5: c823fe743fdf4e04b655010cde9291d8 + depends: + - libxml2 + - python + - ros2-ament-lint + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 32137 + timestamp: 1788268284224 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-builtin-interfaces-2.0.4-np2py312haf4906a_21.conda + sha256: 6d6b694b1c812f4a6b82ced058d3e862cc72f4253681bd94d2eb06276057f2ed + md5: e484cfae2890baa70789680a5b81712d + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 79791 + timestamp: 1788361670302 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-class-loader-2.7.1-np2py312haf4906a_21.conda + sha256: 779a0d026a39eb3e20c4c3a74234a4c94566b20ee9d78f02f3f4de8b5dc5a385 + md5: d864aea472c484a41492446463ca53dd + depends: + - console_bridge + - python + - ros2-console-bridge-vendor + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcpputils + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - console_bridge >=1.0.2,<1.1.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 68252 + timestamp: 1788271785143 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-common-interfaces-5.3.8-np2py312haf4906a_21.conda + sha256: 27e3762b31ce4b391a2e9deaa1870bd6543f8dff51a327f8acff4e87273ee8b1 + md5: 730fea737e656a2ff4460b752c133f50 + depends: + - python + - ros2-actionlib-msgs + - ros2-builtin-interfaces + - ros2-diagnostic-msgs + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-nav-msgs + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-shape-msgs + - ros2-std-msgs + - ros2-std-srvs + - ros2-stereo-msgs + - ros2-trajectory-msgs + - ros2-visualization-msgs + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 28493 + timestamp: 1788458902068 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-composition-interfaces-2.0.4-np2py312haf4906a_21.conda + sha256: 017dd1b9318b20e5619e3c2a96843430fbeeaa14d7175bdb2614561dbe466c5b + md5: 4ad31797b878c23d132e8591638c4141 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcl-interfaces + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 198321 + timestamp: 1788362822454 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-console-bridge-vendor-1.7.2-np2py312haf4906a_21.conda + sha256: 0ce8137dca02d0b58fdd7f136102b595821168f68781d8cd7861739559d20d56 + md5: 2446ebc67dad0abb0b5ddd12a97e632f + depends: + - console_bridge + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - console_bridge >=1.0.2,<1.1.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 OR BSD-3-Clause + size: 29576 + timestamp: 1788271353598 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-cyclonedds-0.10.5-np2py312haf4906a_21.conda + sha256: c603cac3963fa5c26002a5dc0f0697d14257edfce70dfbf4a16131e299b8c04a + md5: 30904375b4733927cb78caad1c4ebd2f + depends: + - openssl + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-iceoryx-binding-c + - ros2-iceoryx-hoofs + - ros2-iceoryx-posh + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - openssl >=3.6.4,<4.0a0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: EPL-2.0 OR BSD-3-Clause + size: 1046581 + timestamp: 1788268132699 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-demo-nodes-py-0.33.11-np2py312haf4906a_21.conda + sha256: bc73de5c330ce69869d34e1d63ee2918accefa9019575a2dbf8f47a8dc333991 + md5: 9a9338bf08ae67292ff72b3bb62c6b45 + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-example-interfaces + - ros2-rcl-interfaces + - ros2-rclpy + - ros2-ros-workspace + - ros2-std-msgs + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 44338 + timestamp: 1788459672169 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-diagnostic-msgs-5.3.8-np2py312haf4906a_21.conda + sha256: 3bea08865f50670cd2da37c41e13fd521bd8a393cb6354bbbea30d9463338f1a + md5: d819ad73ef84a1ca6cea8e0aa5f82b1b + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 191214 + timestamp: 1788457627197 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-distro-mutex-0.16.0-jazzy_21.conda + sha256: 5b11ed36a77f0155993c547403c223c9b44bdfdfdeacac99ff975d40154498f2 + md5: 6650d72a9bd28abe114cebf4b2accf36 + constrains: + - libboost 1.90.* + - libboost-devel 1.90.* + - pcl 1.15.1.* + - gazebo 11.* + - libprotobuf 7.35.* + - vtk 9.6.2.* + license: BSD-3-Clause + size: 2349 + timestamp: 1788189208605 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-domain-coordinator-0.12.1-np2py312haf4906a_21.conda + sha256: 08c73909057f9b2c143cd88943c1227dba867aeca88759f556881f7b1b50a74f + md5: 9e840b39dd1e93f794c1302c324c3c89 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 22198 + timestamp: 1788268257140 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-eigen3-cmake-module-0.3.1-np2py312haf4906a_21.conda + sha256: 5e3586a5a2072e7a0c42aa89e78cc062b25a1816f8d2980c77871fd4d8e6776e + md5: 44dda3105aa91dbd0c70eb1b152c23db + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 25590 + timestamp: 1788269538916 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-example-interfaces-0.12.1-np2py312haf4906a_21.conda + sha256: 7b981fb5c95fef3c1d79205574075a13d3c308e9c37cae1095c0cf66b44c431f + md5: b74c211bc2a6cb3d72f7760c205e1f17 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 460902 + timestamp: 1788362356668 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-fastcdr-2.2.7-np2py312haf4906a_21.conda + sha256: 28ede9e4be31cbae220d31472d4feadc19ccd6b23ae875ce338c42e202d3f4be + md5: 2c36e61b74f2065973703ee5a3f0592f + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 82671 + timestamp: 1788268571766 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-fastrtps-2.14.6-np2py312haf4906a_21.conda + sha256: 3cf7ec8686130ca74b957c46cabb39de5af84f5390ab6a4819914d6c3af5ca6c + md5: ad4e79317ef41722e67be0f0dda83883 + depends: + - openssl + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-fastcdr + - ros2-foonathan-memory-vendor + - ros2-ros-workspace + - tinyxml2 + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - openssl >=3.6.4,<4.0a0 + - tinyxml2 >=11.0.0,<11.1.0a0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 2914890 + timestamp: 1788271069168 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-fastrtps-cmake-module-3.6.4-np2py312haf4906a_21.conda + sha256: 9ae8fc69dfc97fd348a61f48943e2ca1dca6717bfb920f2f3553b2f647fb23fa + md5: a5b74e07027d3506231e615c1f4a6b49 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 29102 + timestamp: 1788271052691 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-foonathan-memory-vendor-1.3.1-np2py312haf4906a_21.conda + sha256: 154bee2d649827e22b3ae29318f45a5c2ecebd2ec4715434614a2c9f7d541b40 + md5: 85ecd3048455cb07bccff9d7c08a1409 + depends: + - foonathan-memory + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - cmake + - libcxx >=19 + - __osx >=12.0 + - foonathan-memory >=0.7.4,<0.7.5.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 OR Zlib + size: 21162 + timestamp: 1788270684489 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-geometry-msgs-5.3.8-np2py312haf4906a_21.conda + sha256: a8918e98a55a25371239a219b075e50699cdcbd9b0e90a7207994eeee59e8b2e + md5: c6288c4a679dfe427fd8cc7e494d701f + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 347804 + timestamp: 1788457495863 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-geometry2-0.36.22-np2py312haf4906a_21.conda + sha256: b3116310918326b424a4447251fc5f9386a62cc1c25569cccd3bfc1c70bbffdd + md5: c72a67859c0ad44b4b131f4dab886063 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-bullet + - ros2-tf2-eigen + - ros2-tf2-eigen-kdl + - ros2-tf2-geometry-msgs + - ros2-tf2-kdl + - ros2-tf2-msgs + - ros2-tf2-py + - ros2-tf2-ros + - ros2-tf2-sensor-msgs + - ros2-tf2-tools + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: BSD-3-Clause + size: 24626 + timestamp: 1788463658892 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-gmock-vendor-1.14.9000-np2py312haf4906a_21.conda + sha256: b123cc0cfba62ffed5da2bfa5818c1e2f91866acbda9d8d759305050e69ee341 + md5: 6d684e5b329fbdadc62f2b30c6461c68 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-gtest-vendor + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 124405 + timestamp: 1788262451608 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-gtest-vendor-1.14.9000-np2py312haf4906a_21.conda + sha256: 178978cf7a46001aba5cd75954831145209f4739f7c7141b7acabaa835cef624 + md5: 4128c24ca32e15db6e5ab155eb18bd10 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: BSD-3-Clause + size: 210755 + timestamp: 1788260110872 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-iceoryx-binding-c-2.0.6-np2py312haf4906a_21.conda + sha256: cfa4d27aeba304a7bb6924459901dca93bf1f2284538712fdf41b6566ce61da7 + md5: 921d788ffe686f8c7c4e693f5d2e4176 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 81320 + timestamp: 1788267938060 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-iceoryx-hoofs-2.0.6-np2py312haf4906a_21.conda + sha256: 6ed3f14b9baf4808df53b3e3e6805a26a08128c9824c2aef105791003df4393b + md5: 3873e318dcc83c7344cfd1c420f03647 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 258767 + timestamp: 1788259951662 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-iceoryx-posh-2.0.6-np2py312haf4906a_21.conda + sha256: 79e5fbf15974a574f4ae5d6b0dffeca7bed642282629621c5f021649479134f3 + md5: f5900e97b03868c6cfa156e03c1edace + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-iceoryx-hoofs + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 431450 + timestamp: 1788262459371 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-kdl-parser-2.11.0-np2py312haf4906a_21.conda + sha256: a22377d19458122d90cac9d3c0f30625138c1b40fa97a27e928f205a6f429c72 + md5: 79f55d6b1a56602ecf638d9e9d43e781 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-orocos-kdl-vendor + - ros2-rcutils + - ros2-ros-workspace + - ros2-urdf + - ros2-urdfdom-headers + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 49733 + timestamp: 1788361374916 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-keyboard-handler-0.3.2-np2py312haf4906a_21.conda + sha256: 492d746f9b3e1cc04c3487b889d4c363964c4e023d23d798afe4d32009ae25af + md5: 56f280dfee75f6ba7e6ab79b4aa3dc03 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 57330 + timestamp: 1788271047294 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-3.4.11-np2py312haf4906a_22.conda + sha256: f54a9e4288a77d7ae73ad23a70ea3ae16fc5baf4daecb708249bc1f51eb914db + md5: 4b46c0eb868d5bacf976ce27104d16e3 + depends: + - importlib-metadata + - lark-parser + - python + - pyyaml + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-osrf-pycommon + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 236378 + timestamp: 1790076849386 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-ros-0.26.12-np2py312haf4906a_22.conda + sha256: 5b7fca2859ce7355729342f2366c7234c7482c91f5687da0be862f9516d3efc8 + md5: 84f5a98e8d6588bdf288d6bb070fd71b + depends: + - importlib-metadata + - python + - pyyaml + - ros2-ament-index-python + - ros2-composition-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-launch + - ros2-lifecycle-msgs + - ros2-osrf-pycommon + - ros2-rclpy + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 127894 + timestamp: 1790076867546 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-testing-3.4.11-np2py312haf4906a_21.conda + sha256: b17deb9adba0a712e5ecb7ba4a2f0f96003eff9c61ae26f814e9b0f7840623df + md5: 15735eb9e61042e16b790a09a62eb08c + depends: + - pytest + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-launch + - ros2-launch-xml + - ros2-launch-yaml + - ros2-osrf-pycommon + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 117039 + timestamp: 1788269503496 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-testing-ament-cmake-3.4.11-np2py312haf4906a_21.conda + sha256: 6c0490d36d60f314a92579155b3ba18a91ae6758d36eb54d4c7afe166c4b9172 + md5: 5ae23a39873e6856f1d1c3e6f9dc02fb + depends: + - python + - ros2-ament-cmake-test + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-launch-testing + - ros2-python-cmake-module + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 OR BSD-3-Clause + size: 29181 + timestamp: 1788271303133 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-testing-ros-0.26.12-np2py312haf4906a_21.conda + sha256: b6093f069a9a9b2ded3348d287d8a4f8ccaf9f69665f8014ce09d991cde8d5a2 + md5: d5b79209e07e88bace479ed54b951dc0 + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-launch-ros + - ros2-launch-testing + - ros2-rclpy + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 56532 + timestamp: 1788459807504 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-xml-3.4.11-np2py312haf4906a_21.conda + sha256: d2478b626d94b39749ab808705c73d6cb4df5c5d2e0b4d29b32de7aa2137d673 + md5: c21ccf0a708ece389de02377cffe51f7 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-launch + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 27173 + timestamp: 1788269112452 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-yaml-3.4.11-np2py312haf4906a_21.conda + sha256: 828637255528138c617cfa625d0c18db3de9d4565cdc0c52f06eddcedd1c91a7 + md5: 71628a3a608f5281bd0a6dc0affee9aa + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-launch + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 27789 + timestamp: 1788269103182 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-liblz4-vendor-0.26.11-np2py312haf4906a_21.conda + sha256: d119df00ba1df059b241ac4dc430139ee28ba6cfa130423d04dff9abc599b22d + md5: 889ae1b5b42029e13aaabf71d7bae3e9 + depends: + - lz4 + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 OR BSD-3-Clause OR GPL-2.0-only + size: 26257 + timestamp: 1788268503402 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-libstatistics-collector-1.7.4-np2py312haf4906a_21.conda + sha256: 79311dc6082a2a58b02ad4523f258fd1af9397fe0c9c1d720112190f6da89efb + md5: 98592ed3bde14501c36c46dc8b69b347 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcl + - ros2-rcpputils + - ros2-rmw + - ros2-ros-workspace + - ros2-statistics-msgs + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 58863 + timestamp: 1788458691532 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-libyaml-vendor-1.6.4-np2py312haf4906a_21.conda + sha256: a80519dfe43a1843051a5fbc71958c19440b5d06cfb278ce831e9df725735ba0 + md5: abb9e6101025b68a0eaec07f9ee0cf91 + depends: + - pkg-config + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - yaml + - yaml-cpp + - __osx >=12.0 + - libcxx >=19 + - yaml-cpp >=0.8.0,<0.9.0a0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - yaml >=0.2.5,<0.3.0a0 + license: Apache-2.0 OR MIT + size: 31444 + timestamp: 1788271342751 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-lifecycle-msgs-2.0.4-np2py312haf4906a_21.conda + sha256: 42bf9bd984ac8ff643c70b3349ae4618fb16c0e1f9b5ddc665568bdf8902a818 + md5: 32b646cca69183f1999bfc6664986be4 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 244226 + timestamp: 1788362287161 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-mcap-vendor-0.26.11-np2py312haf4906a_21.conda + sha256: 84e77e29a877fd7972a049c8ec6e1cd0ebe900af0f80dd8a1132f3dc770e9ad5 + md5: 09bc3b7b40543efeb5d5e3c1119067ab + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-liblz4-vendor + - ros2-ros-workspace + - ros2-zstd-vendor + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 160399 + timestamp: 1788269119397 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-message-filters-4.11.17-np2py312haf4906a_21.conda + sha256: 05080d8d4074f050e9313b1f35b5d288e8ef0a203a1578785ea2f161d707ea6c + md5: a738dc68214ecfe677d723a6bd9cb59a + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rclcpp + - ros2-rclpy + - ros2-rcutils + - ros2-ros-workspace + - ros2-std-msgs + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 96144 + timestamp: 1788459851123 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-nav-msgs-5.3.8-np2py312haf4906a_21.conda + sha256: 95dae02472c3c399fe78373d953a32e5eea9e1f803bb59b240d69d0c877640f6 + md5: e57133ad855d80f1672f56cfc6021c19 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 306151 + timestamp: 1788457716433 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-orocos-kdl-vendor-0.5.2-np2py312hd6e7b62_21.conda + sha256: 0001eae1282b817e62ebbafde95cc52ee562a795726e6bdfabd6b5c48f836333 + md5: 7798fc51bb36fb700d9475f579d43c52 + depends: + - eigen + - eigen-abi-devel + - orocos-kdl + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-eigen3-cmake-module + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - orocos-kdl >=1.5.3,<1.6.0a0 + - eigen-abi >=5.0.1.100,<5.0.1.101.0a0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 OR LGPL-2.1-or-later + size: 30198 + timestamp: 1788271118086 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-osrf-pycommon-2.1.7-np2py312haf4906a_21.conda + sha256: c86ac5b90cdbccedfd385680fed13ba80b9cfa603b62a3a25028ba4f989bcee1 + md5: 0e431b7f631b52cf5c445d1a29282b5e + depends: + - importlib-metadata + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 65801 + timestamp: 1788260746314 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-pluginlib-5.4.5-np2py312haf4906a_21.conda + sha256: 851aa9359f4e2c399fa0de6216ea2e1bdb9a5304d8da27c06625fb762a5b8910 + md5: ee1f2c1719085cd0cd362050e4c3d5f9 + depends: + - python + - ros2-ament-index-cpp + - ros2-class-loader + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-tinyxml2-vendor + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 116192 + timestamp: 1788271897119 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-pybind11-vendor-3.1.3-np2py312haf4906a_21.conda + sha256: eff0e3a7fcf705218b5059eee39cea43fabf3b78f94a076c9f6873a6a8c01d3c + md5: 1f7b2726e37bbdc199f0c53ad43cfba6 + depends: + - pybind11 + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 OR BSD-3-Clause + size: 25330 + timestamp: 1788268422025 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-python-cmake-module-0.11.1-np2py312haf4906a_21.conda + sha256: d6aca7259298baf6919e605ba8e3ea691a4947863c1da5918f232e3c6fd77830 + md5: c5cdb3cae97c5790a2aaadfef38c72b4 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 29481 + timestamp: 1788271055211 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-python-orocos-kdl-vendor-0.5.2-np2py312haf4906a_21.conda + sha256: 48830eb3907f70de12a4b813a69db39fbe37036682168053587860e7a4f9d6a7 + md5: d9f499c65479a941324fd0adcecb2480 + depends: + - python + - python-orocos-kdl + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-orocos-kdl-vendor + - ros2-pybind11-vendor + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python-orocos-kdl >=1.5.3,<1.6.0a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 OR LGPL-2.1-or-later + size: 29591 + timestamp: 1788271348080 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcl-9.2.11-np2py312haf4906a_21.conda + sha256: 6775db6b65e82c384439f443531d67ede55c348ef1b04f327a2302cf611f6d35 + md5: c215c6e84e28e5c2f57e11e497be7e2a + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-libyaml-vendor + - ros2-rcl-interfaces + - ros2-rcl-logging-interface + - ros2-rcl-logging-spdlog + - ros2-rcl-yaml-param-parser + - ros2-rcutils + - ros2-rmw + - ros2-rmw-implementation + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-service-msgs + - ros2-tracetools + - ros2-type-description-interfaces + - yaml + - yaml-cpp + - __osx >=12.0 + - libcxx >=19 + - yaml-cpp >=0.8.0,<0.9.0a0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - yaml >=0.2.5,<0.3.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 183351 + timestamp: 1788458139118 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcl-action-9.2.11-np2py312haf4906a_21.conda + sha256: 2f8be5be045deb6766fdb44b2ccd10a2f557dec02a4a0f4acf965370d6924601 + md5: 7b6c022c0a537f2e32e25e46f689da26 + depends: + - python + - ros2-action-msgs + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcl + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 76619 + timestamp: 1788458734237 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcl-interfaces-2.0.4-np2py312haf4906a_21.conda + sha256: a778c1a2a1294956a97494e3dbbcb7a77460af2a5f84fc0e480807c0285e015a + md5: 8ca71dc00e39c3cb5c1a484966931ccb + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 484311 + timestamp: 1788362156275 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcl-lifecycle-9.2.11-np2py312haf4906a_21.conda + sha256: 08ab66fa524fcc4ef3797c0864f82a6e41e0840294475fc2a9c74ebe3ebf7136 + md5: 328006673b7539d77cc72a18d3f3160a + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-lifecycle-msgs + - ros2-rcl + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-tracetools + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 55541 + timestamp: 1788458719594 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcl-logging-interface-3.1.1-np2py312haf4906a_21.conda + sha256: eb92697b44a3681968041691cca6713c5e012f8445a405474450b73610010635 + md5: 03c198ccb3229d81f6c83387caff5b5e + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 36473 + timestamp: 1788271775853 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcl-logging-spdlog-3.1.1-np2py312h88edd79_21.conda + sha256: 6538a1d1f94446566cb6a3f7061b7d22781951e2b3321a4ec3a2d65883c34c3a + md5: 929d858c338bc09d6436c5949f763dd3 + depends: + - fmt + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcl-logging-interface + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-spdlog-vendor + - spdlog + - __osx >=12.0 + - libcxx >=19 + - spdlog >=1.17.0,<1.18.0a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - fmt >=12.1.0,<12.2.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 45512 + timestamp: 1788271964561 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcl-yaml-param-parser-9.2.11-np2py312haf4906a_21.conda + sha256: 6c4032ef7f67dbb925b227b0ee51653764c7dd1af7857f4fef3b9d3ac05614a1 + md5: 57118f91b24f86362005c57b57d8e756 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-libyaml-vendor + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - yaml + - yaml-cpp + - libcxx >=19 + - __osx >=12.0 + - yaml-cpp >=0.8.0,<0.9.0a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - yaml >=0.2.5,<0.3.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 50465 + timestamp: 1788361233024 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rclcpp-28.1.21-np2py312haf4906a_21.conda + sha256: 4a2623d920fb9d5a2851789bf3d6d89b9af735315e672af65f85927027a08f6e + md5: ad418f8acd3c035492127cd4ba55dcf1 + depends: + - python + - ros2-ament-index-cpp + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-libstatistics-collector + - ros2-rcl + - ros2-rcl-interfaces + - ros2-rcl-logging-interface + - ros2-rcl-yaml-param-parser + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosgraph-msgs + - ros2-rosidl-dynamic-typesupport + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-cpp + - ros2-statistics-msgs + - ros2-tracetools + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 816163 + timestamp: 1788458951037 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rclcpp-action-28.1.21-np2py312haf4906a_21.conda + sha256: fc1d7126278ad2a2f2b048aa135672db26ffb4a06970267cdf93ed4a15a1b3bb + md5: 7e38bf6a35771ba8036785b20d072cf8 + depends: + - python + - ros2-action-msgs + - ros2-ament-cmake + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcl + - ros2-rcl-action + - ros2-rclcpp + - ros2-rcpputils + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 130149 + timestamp: 1788459626562 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rclcpp-components-28.1.21-np2py312haf4906a_21.conda + sha256: 886e82c1a85175ff1c0df829a52581fb4068911ddbad89c699703da3d123c62b + md5: 49fae9c012643f7e2ab8a267885aff69 + depends: + - python + - ros2-ament-index-cpp + - ros2-class-loader + - ros2-composition-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rclcpp + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 119213 + timestamp: 1788459462152 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rclcpp-lifecycle-28.1.21-np2py312haf4906a_21.conda + sha256: 7fbeb9baf50382c152ce778328140c3bffe494c745e33322b55577fb15574c3b + md5: 2c885aa7a9b1d4e587337b4cd2b7f4fc + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-lifecycle-msgs + - ros2-rcl + - ros2-rcl-interfaces + - ros2-rcl-lifecycle + - ros2-rclcpp + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-typesupport-cpp + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 106172 + timestamp: 1788459603817 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rclpy-7.1.11-np2py312haf4906a_21.conda + sha256: 4f21c971536eea2d0783da9cac54c97e97caf0dc4e41729ed6cba7c7b58cad8e + md5: 9144bb781f0463ebfc513dadda4b8e33 + depends: + - python + - pyyaml + - ros2-action-msgs + - ros2-ament-index-python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-lifecycle-msgs + - ros2-rcl + - ros2-rcl-action + - ros2-rcl-interfaces + - ros2-rcl-lifecycle + - ros2-rcl-logging-interface + - ros2-rcl-yaml-param-parser + - ros2-rmw + - ros2-rmw-implementation + - ros2-ros-workspace + - ros2-rosgraph-msgs + - ros2-rosidl-runtime-c + - ros2-rpyutils + - ros2-unique-identifier-msgs + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 647562 + timestamp: 1788459059908 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcpputils-2.11.4-np2py312haf4906a_21.conda + sha256: 4e14190716316d5d0f41c5fe430b12e341f7f2302de71e657c8e2f64e07c974a + md5: a23a2959530e954ccb48aab87b72b8ac + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 OR BSD-3-Clause + size: 77694 + timestamp: 1788271614520 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcutils-6.7.6-np2py312haf4906a_21.conda + sha256: 82f08335eac323f5614b0c81e2a2c691e80088ddb0025a76e42180646b46a93f + md5: e91ff85a21753f5733f20d0bd9acd0e0 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 116477 + timestamp: 1788271469515 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-7.3.3-np2py312haf4906a_21.conda + sha256: e50dc5e54dc21f047e0628f12b3bc5bc54b207dc96aea324cb3cbc42e764625f + md5: 5172be7981c552e7495e7a197f4fc3d6 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-dynamic-typesupport + - ros2-rosidl-runtime-c + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 94501 + timestamp: 1788271920545 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-connextdds-0.22.3-np2py312haf4906a_21.conda + sha256: 351c5b2f763ed29c73bb8fd59f0db78e77d788b17807e448a96b5f84a2d55520 + md5: b5db000b7a44a4d554e24468b6582974 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rmw-connextdds-common + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 33784 + timestamp: 1788457481466 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-connextdds-common-0.22.3-np2py312haf4906a_21.conda + sha256: 2a04f660360b0eea7efc3145600985db7134eafceefcb3cc471f3c2afaca02ff + md5: 54e33bc98d026343741b6c50f483962f + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-fastcdr + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - ros2-rti-connext-dds-cmake-module + - ros2-tracetools + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 55496 + timestamp: 1788362758137 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-cyclonedds-cpp-2.2.3-np2py312haf4906a_21.conda + sha256: 615be4fa31bc2b502edf3e8fa711f998129f55e7de50e990681eb8b2c21bfe8a + md5: 4300d0c16d37cc9b993d6158adbb4004 + depends: + - python + - ros2-cyclonedds + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-iceoryx-binding-c + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - ros2-tracetools + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 187656 + timestamp: 1788362768704 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-dds-common-3.1.1-np2py312haf4906a_21.conda + sha256: 00357580611fa473eaaa83df9b366c416138f6fe42bde904a693b2471bd2b351 + md5: a08804a48a341195dda00bc82ddedb6e + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 164780 + timestamp: 1788362052668 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-fastrtps-cpp-8.4.4-np2py312haf4906a_21.conda + sha256: 838ad645a02b91cba647647279463ee9fa0b8fce2898c56c8716e0c413e31353 + md5: 3138613e7cb98954e8ee00ce19c3b94a + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps + - ros2-fastrtps-cmake-module + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-rmw-fastrtps-shared-cpp + - ros2-ros-workspace + - ros2-rosidl-dynamic-typesupport + - ros2-rosidl-dynamic-typesupport-fastrtps + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-tracetools + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 120243 + timestamp: 1788457438984 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-fastrtps-dynamic-cpp-8.4.4-np2py312haf4906a_21.conda + sha256: 739f3f73e1f6925859c8c9bedf8324294447848c209609f23fedbe60b4a78bf7 + md5: d5926c1bc7b6d68730af75282e6c5e8c + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps + - ros2-fastrtps-cmake-module + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-rmw-fastrtps-shared-cpp + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 137906 + timestamp: 1788457366072 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-fastrtps-shared-cpp-8.4.4-np2py312haf4906a_21.conda + sha256: 6cc59de1d70b91e9e2c598dcf2de2587b03bfe75735b0f3a551a46f056ee7d12 + md5: 3db8221a2e43072461d5d90ee784c3fc + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps + - ros2-fastrtps-cmake-module + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-ros-workspace + - ros2-rosidl-dynamic-typesupport + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - ros2-tracetools + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 184596 + timestamp: 1788362698035 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-implementation-2.15.6-np2py312haf4906a_21.conda + sha256: 6b7c58ab86ff386104ffb53182c9aed541e540364432317d6d67296b27f0ec82 + md5: 0cbe51cd8ef440ecc3b8756fb035c097 + depends: + - python + - ros2-ament-index-cpp + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw-connextdds + - ros2-rmw-cyclonedds-cpp + - ros2-rmw-fastrtps-cpp + - ros2-rmw-fastrtps-dynamic-cpp + - ros2-rmw-implementation-cmake + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 52365 + timestamp: 1788457716312 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-implementation-cmake-7.3.3-np2py312haf4906a_21.conda + sha256: bce0dbb9a9deeb61d7319da6f3c2409603bb484b9cfe7f1b0f8b090c608c4f6f + md5: 13194602500319ee49acba1f2ff14cd3 + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 31137 + timestamp: 1788271246441 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-robot-state-publisher-3.3.4-np2py312haf4906a_21.conda + sha256: e59417dcdd4344f299535d8da85d94469c82f0ecf54d0477da324a3e7105fa87 + md5: cc60a62cf2794b196e7a22e90032fe3d + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-kdl-parser + - ros2-orocos-kdl-vendor + - ros2-rcl-interfaces + - ros2-rclcpp + - ros2-rclcpp-components + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-std-msgs + - ros2-tf2-ros + - ros2-urdf + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 218607 + timestamp: 1788461145599 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros-base-0.11.0-np2py312haf4906a_21.conda + sha256: 52fe5b86d64ded36021c9f038ee2bf8c90c32e74864ab2fe8ea1fb3e97ff54c4 + md5: d67a087e3be1273e7d32bc61f8a0fd74 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry2 + - ros2-kdl-parser + - ros2-robot-state-publisher + - ros2-ros-core + - ros2-ros-workspace + - ros2-rosbag2 + - ros2-urdf + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 24509 + timestamp: 1788467914367 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros-core-0.11.0-np2py312haf4906a_21.conda + sha256: f6d357a58d126dda10ad3a8b9f36a7c7fb85aea3806bf61a4447a2f1c81498fc + md5: 5054b91fa811cec144c35d27cbef93a7 + depends: + - python + - ros2-ament-cmake + - ros2-ament-cmake-auto + - ros2-ament-cmake-gmock + - ros2-ament-cmake-gtest + - ros2-ament-cmake-pytest + - ros2-ament-cmake-ros + - ros2-ament-index-cpp + - ros2-ament-index-python + - ros2-ament-lint-auto + - ros2-ament-lint-common + - ros2-class-loader + - ros2-common-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-launch + - ros2-launch-ros + - ros2-launch-testing + - ros2-launch-testing-ament-cmake + - ros2-launch-testing-ros + - ros2-launch-xml + - ros2-launch-yaml + - ros2-pluginlib + - ros2-rcl-lifecycle + - ros2-rclcpp + - ros2-rclcpp-action + - ros2-rclcpp-lifecycle + - ros2-rclpy + - ros2-ros-environment + - ros2-ros-workspace + - ros2-ros2cli-common-extensions + - ros2-ros2launch + - ros2-rosidl-default-generators + - ros2-rosidl-default-runtime + - ros2-sros2 + - ros2-sros2-cmake + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 25176 + timestamp: 1788465276005 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros-environment-4.2.1-np2py312haf4906a_21.conda + sha256: ca37e03ac6babd113e703ad5bb9a516e2cad71a54b61e0f83793f23298068cf1 + md5: 904115ef3522f7692db7ae2e781e30fa + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 23393 + timestamp: 1788259715192 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros-workspace-1.0.3-np2py312haf4906a_21.conda + sha256: 657a04a4783cf634ef795495b66758762eeeef64ebff8e0c09ba9e52b8e95902 + md5: 7dc95811ea20aa1e76133a717a61bebd + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 37316 + timestamp: 1788259705640 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2action-0.32.11-np2py312haf4906a_21.conda + sha256: 4a015af1358165e63c547a3047450d2a314c4fc473f565249908ea35ff2b1c3c + md5: 7dbbbaf626eebc5c98b081fa4e6c887e + depends: + - python + - ros2-action-msgs + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-rosidl-runtime-py + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 48127 + timestamp: 1788460783107 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2bag-0.26.11-np2py312haf4906a_21.conda + sha256: a4a11f4e748ee5d31e0bc7cb70775a1a5544f67bdb19fff39a0c46f7de846e79 + md5: 0be3182fd8424f7ecf3541db2dc3b81a + depends: + - python + - pyyaml + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-rosbag2-py + - ros2-rosbag2-storage-default-plugins + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 71768 + timestamp: 1788466478961 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2cli-0.32.11-np2py312haf4906a_22.conda + sha256: d5e113d7e2a6e80e3804202f981b20574a2503422cf47308f832099c79de6fdb + md5: 779c0e8747e0e1305791e1fce12dd748 + depends: + - argcomplete + - importlib-metadata + - packaging + - psutil + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 78225 + timestamp: 1788509547949 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2cli-common-extensions-0.3.1-np2py312haf4906a_21.conda + sha256: 3d7474af95a600b606a8ed23db8562885d257942dc40845ba0c68b3bbc32323f + md5: 9ea8ad09e9a319a5947710d4e527a008 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-launch-xml + - ros2-launch-yaml + - ros2-ros-workspace + - ros2-ros2action + - ros2-ros2cli + - ros2-ros2component + - ros2-ros2doctor + - ros2-ros2interface + - ros2-ros2launch + - ros2-ros2lifecycle + - ros2-ros2multicast + - ros2-ros2node + - ros2-ros2param + - ros2-ros2pkg + - ros2-ros2plugin + - ros2-ros2run + - ros2-ros2service + - ros2-ros2topic + - ros2-sros2 + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 28584 + timestamp: 1788464239231 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2component-0.32.11-np2py312haf4906a_21.conda + sha256: e927fa79b601ed2c800c8269205e42bab08b3cc6732712c6d19e2d344980f14d + md5: c62f73c1b0ce0f8fe941d9945b08c177 + depends: + - python + - ros2-ament-index-python + - ros2-composition-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcl-interfaces + - ros2-rclcpp-components + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2node + - ros2-ros2param + - ros2-ros2pkg + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 39153 + timestamp: 1788464014729 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2doctor-0.32.11-np2py312haf4906a_21.conda + sha256: 7f5caec61894a2c87df9b52a4f93d35dd620af3845cb79a9678b06547a2b856a + md5: e75c0ae742b4774d54da31b42aed1743 + depends: + - catkin_pkg + - importlib-metadata + - psutil + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rclpy + - ros2-ros-environment + - ros2-ros-workspace + - ros2-ros2cli + - ros2-std-msgs + - rosdistro + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 68738 + timestamp: 1788460775400 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2interface-0.32.11-np2py312haf4906a_21.conda + sha256: 2ac785a0be7cc7ff3b38476a5a61d56577f41f27b95cc333ea41e164cd5ad4cc + md5: 5099633285654556b0a5714763b53cdc + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - ros2-rosidl-adapter + - ros2-rosidl-runtime-py + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 47195 + timestamp: 1788460765359 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2launch-0.26.12-np2py312haf4906a_21.conda + sha256: a765988ba88ebb90b6dd4b54cc4cac80d0266032aaa62416855505927768d83d + md5: 95d348308dfac55ceb81384e8e6be5b1 + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-launch + - ros2-launch-ros + - ros2-launch-xml + - ros2-launch-yaml + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2pkg + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 47203 + timestamp: 1788461187623 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2lifecycle-0.32.11-np2py312haf4906a_21.conda + sha256: d1ac31d9cf8fb7c13ad569b5144a068d6f78af478ae60c660208a9395065f97b + md5: b83b3c927d023ac607c463e4a645cd0a + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-lifecycle-msgs + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2node + - ros2-ros2service + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 45824 + timestamp: 1788462023257 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2multicast-0.32.11-np2py312haf4906a_21.conda + sha256: 0ea213cb6a0073310cbfa7d59dcdd68dd99047f6b21476b84dc18f31f6cca526 + md5: c5fe46f1ce848d836e4a9b1fa96260d8 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 26679 + timestamp: 1788459960061 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2node-0.32.11-np2py312haf4906a_21.conda + sha256: b422072f1fcf08616a496892e5cea181ebb9c6d855a97ea1c4eb239c8f4cec52 + md5: 8977a25e6b63b3bc5ee8944e335ccd9b + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 43658 + timestamp: 1788460738471 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2param-0.32.11-np2py312haf4906a_21.conda + sha256: 2db3dcb3a3a494dcf3896be348f097ed0a8b526086bd32bd7ffdf74aa6703fef + md5: 81451ecdfba6818667e4d3dcb784aeb6 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcl-interfaces + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2node + - ros2-ros2service + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 50997 + timestamp: 1788461991428 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2pkg-0.32.11-np2py312haf4906a_21.conda + sha256: 90c34500c23aef36722b84f63fb1d21eef0eb2456f3ee9c422742ae3755239ea + md5: 09a936df330ee036c750a05fdede63c4 + depends: + - catkin_pkg + - empy + - importlib_resources + - python + - ros2-ament-copyright + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 59789 + timestamp: 1788460717829 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2plugin-5.4.5-np2py312haf4906a_21.conda + sha256: 18193e8300f9962183db7a664e1dcf75f2753fc9b3320519d5705580e949a915 + md5: 8f882ddf662ad275430182e9a86a6ccc + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2pkg + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 26978 + timestamp: 1788461181309 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2run-0.32.11-np2py312haf4906a_21.conda + sha256: 4a062620c45d35b9284242579cc0abd0f6b2911126e685df7d7a2b0368eef440 + md5: 380716d401b741fbfe8c02c842bde126 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2pkg + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 25817 + timestamp: 1788461164554 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2service-0.32.11-np2py312haf4906a_21.conda + sha256: f8c23226ca0cd73103591d723a0680af418d6613bebb9072abdbad8b77da83c2 + md5: 0e7afe922a442e914850578e007c18c4 + depends: + - python + - pyyaml + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2topic + - ros2-rosidl-runtime-py + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 52109 + timestamp: 1788461133317 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-ros2topic-0.32.11-np2py312haf4906a_21.conda + sha256: 9f481e73856403e55d46550e2afc21e4b5765c2a3bbab6f106b3738e2f758550 + md5: 953aa73c3a891d737e6bd44b939750ed + depends: + - numpy + - python + - pyyaml + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-rosidl-runtime-py + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 OR BSD-3-Clause + size: 74648 + timestamp: 1788460718938 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-0.26.11-np2py312haf4906a_21.conda + sha256: 22ebfe62c97952aceb5010af30faec2bf5d21891fea3d7af88a78dc4cd980131 + md5: 4b73c0650091a115b9ea12b86ea70a0d + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-ros2bag + - ros2-rosbag2-compression + - ros2-rosbag2-compression-zstd + - ros2-rosbag2-cpp + - ros2-rosbag2-py + - ros2-rosbag2-storage + - ros2-rosbag2-storage-default-plugins + - ros2-rosbag2-transport + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 37026 + timestamp: 1788467647663 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-compression-0.26.11-np2py312haf4906a_21.conda + sha256: 7434ce7537691fe3d477c040fbc263f5308f201c5662229c61b386aeee2d8ae7 + md5: 507fa770e9822ec1c65d98ff148ab3f9 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosbag2-cpp + - ros2-rosbag2-storage + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 159435 + timestamp: 1788463992494 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-compression-zstd-0.26.11-np2py312haf4906a_21.conda + sha256: 7b3499dca126d426c6d7e1a435c1df48d0741093a7c812ad51be21c617a76494 + md5: e00e69460a56df3adad66c3c4031ff10 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-pluginlib + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosbag2-compression + - ros2-zstd-vendor + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 69637 + timestamp: 1788464374177 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-cpp-0.26.11-np2py312haf4906a_21.conda + sha256: 30bc15845af95d3b7542bfd59b573f0ae0d8c483ae9b7954c7e4417a97e277e6 + md5: 5fc66831208d4e801adf4eb05717d23b + depends: + - python + - ros2-ament-index-cpp + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-pluginlib + - ros2-rclcpp + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-implementation + - ros2-ros-workspace + - ros2-rosbag2-storage + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-cpp + - ros2-rosidl-typesupport-introspection-cpp + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 267418 + timestamp: 1788461947943 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-interfaces-0.26.11-np2py312haf4906a_21.conda + sha256: c5b17e808b3de2bea8ceae2110c3ffd805aa9ac18d918dec9b5a631ae4bfe796 + md5: 01a35e7cafcceb091cc76a068b7bf283 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 485871 + timestamp: 1788362165480 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-py-0.26.11-np2py312haf4906a_21.conda + sha256: 6367bba35d0f08b66e5c98413bc74688d2ca775c69a4b8e1bdebf1b15f1f2ef7 + md5: 6746844e11d29498f6f7373483c83925 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-pybind11-vendor + - ros2-rclpy + - ros2-ros-workspace + - ros2-rosbag2-compression + - ros2-rosbag2-cpp + - ros2-rosbag2-storage + - ros2-rosbag2-transport + - ros2-rpyutils + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 549326 + timestamp: 1788465948317 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-storage-0.26.11-np2py312haf4906a_21.conda + sha256: 6b269a0995d170c1c92561cf0df6f0b4d836d3a8ec75a868b4d6374005f72561 + md5: d4e596c83234f6e479bcb970a4b53ef1 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-pluginlib + - ros2-rclcpp + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-yaml-cpp-vendor + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 211788 + timestamp: 1788459947663 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-storage-default-plugins-0.26.11-np2py312haf4906a_21.conda + sha256: 2a20e837f8f996df046527eb3688df2bb5dc1be64b3f7dfc24bb847b9c619a0a + md5: 0a561131f5067f269424b94436e1692a + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosbag2-storage-mcap + - ros2-rosbag2-storage-sqlite3 + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 24501 + timestamp: 1788461576609 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-storage-mcap-0.26.11-np2py312haf4906a_21.conda + sha256: 2e34a660cc3989a4e80bcfe944ec41e4689b438637ac89a1530deabc185542ed + md5: 551f6d3785203eb43153b16861f5f94d + depends: + - python + - ros2-ament-index-cpp + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-mcap-vendor + - ros2-pluginlib + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosbag2-storage + - ros2-yaml-cpp-vendor + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 161094 + timestamp: 1788460853422 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-storage-sqlite3-0.26.11-np2py312haf4906a_21.conda + sha256: b675594f95aadc3e30907f9060b8fe5829f8d5e05a4ebe9404a67d0f38f7b3da + md5: 41b5b9de6f48855e641db80798fe11ac + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-pluginlib + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosbag2-storage + - ros2-sqlite3-vendor + - ros2-yaml-cpp-vendor + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 193705 + timestamp: 1788460829105 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosbag2-transport-0.26.11-np2py312haf4906a_21.conda + sha256: 9447f49b48cd6e5a7dbd3e795db9261c71bd0ed65a9d0489b37722cca94c65ee + md5: b9e590a0c4ace2369e39237d909b5c1f + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-keyboard-handler + - ros2-rclcpp + - ros2-rclcpp-components + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosbag2-compression + - ros2-rosbag2-cpp + - ros2-rosbag2-interfaces + - ros2-rosbag2-storage + - ros2-yaml-cpp-vendor + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 406000 + timestamp: 1788465279537 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosgraph-msgs-2.0.4-np2py312haf4906a_21.conda + sha256: 7da2903b126061730951f6e78b727b1aa2f9ea2be437ee648271c5be49ad98a3 + md5: 3456b6bb30a56098a81c9704c4d95e6c + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcl-interfaces + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 208028 + timestamp: 1788362786996 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-adapter-4.6.9-np2py312haf4906a_21.conda + sha256: 7edf05a83494f9ccd4bce5cb4231c5331f0a36069676fdf181db1ffa98ad3e11 + md5: e9a8feb97cce53b5446cf1a86da67395 + depends: + - empy + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 65376 + timestamp: 1788271086866 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-cli-4.6.9-np2py312haf4906a_22.conda + sha256: 1d15020d38e48fceb239c29f16d3cba013a415a1f6b2cfc6e29d2b4607a6bead + md5: a36ae69f60f9b806ef1129a1453e925d + depends: + - argcomplete + - importlib-metadata + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 43747 + timestamp: 1788509525891 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-cmake-4.6.9-np2py312haf4906a_21.conda + sha256: c6dd4858e6dfa94148742f9ddb9c8bfa408d45e7ed0f6511031e930c35137fb4 + md5: fb037f010a0a556125e5fd22d6423dba + depends: + - empy + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-pycommon + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 38313 + timestamp: 1788271607333 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-core-generators-0.2.1-np2py312haf4906a_21.conda + sha256: 606f2409c575985aa09cd24f881c11e3c94a3a2cd46cf306a2bf14e352102800 + md5: 9d8a35a101ea3de6e4230497448e6b6b + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cmake + - ros2-rosidl-generator-c + - ros2-rosidl-generator-cpp + - ros2-rosidl-generator-py + - ros2-rosidl-generator-rs + - ros2-rosidl-generator-type-description + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-cpp + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 34070 + timestamp: 1788361660368 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-core-runtime-0.2.1-np2py312haf4906a_21.conda + sha256: 2f0def1286c80881e341a7c0809f171ff3c2fa925280b5495a39fca3a4a296b5 + md5: 49c1b88cc54245a0debdc7ecccea7764 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-generator-py + - ros2-rosidl-generator-rs + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-cpp + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 33173 + timestamp: 1788361636760 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-default-generators-1.6.1-np2py312haf4906a_21.conda + sha256: acbae1e5098f966dc26ee31d7a76a7e7e53f4a4b123300bee05755c7d6e7301f + md5: 7c9c963dc7dc2f0d728fba3e8614df89 + depends: + - python + - ros2-action-msgs + - ros2-ament-cmake-core + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-generators + - ros2-service-msgs + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 34330 + timestamp: 1788361927812 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-default-runtime-1.6.1-np2py312haf4906a_21.conda + sha256: 55da4616ac6e297172f0dec0e2b4334797cd2261bdd682befc8775a88c29d865 + md5: c358a77994e4fced87eaa0904366a74c + depends: + - python + - ros2-action-msgs + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - ros2-service-msgs + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 33745 + timestamp: 1788361899322 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-dynamic-typesupport-0.1.2-np2py312haf4906a_21.conda + sha256: 38b52a55eaa3cfcf540d2ab35d217f7457d492adfb37dab38aafc1df93ebcc9a + md5: 784140effff30cb7d138acb27a693ee0 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 57060 + timestamp: 1788271762687 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-dynamic-typesupport-fastrtps-0.1.0-np2py312haf4906a_21.conda + sha256: 0acf21a7b63c4b13948dcf2656449cb726581f4b2932fa667120cb1d07cc8e72 + md5: 8ddd9788d9c5a50ec805e0d20542cd2f + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-dynamic-typesupport + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 75043 + timestamp: 1788271944164 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-generator-c-4.6.9-np2py312haf4906a_21.conda + sha256: f4ea37db0273da96afcac2308a77850441e38de71c74459ed92dcf9470c75a6e + md5: 657e4122043ff2040280a6476c51659c + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-cmake + - ros2-rosidl-generator-type-description + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-typesupport-interface + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 54909 + timestamp: 1788271753701 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-generator-cpp-4.6.9-np2py312haf4906a_21.conda + sha256: 774ec983e64e777f1438944f210240e838638355cf1493ed9559f9013c6e2e88 + md5: 7693cc8d20dfa372a93224416728f4f5 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-cmake + - ros2-rosidl-generator-c + - ros2-rosidl-generator-type-description + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-cpp + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 51748 + timestamp: 1788271894037 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-generator-py-0.22.2-np2py312haf4906a_21.conda + sha256: b02589ce10d22593b1b337711e4b12dea7f4479012d0903f8c20acf4110aa087 + md5: a241a919391771784326fee137159854 + depends: + - numpy + - python + - ros2-ament-cmake + - ros2-ament-cmake-cppcheck + - ros2-ament-cmake-cpplint + - ros2-ament-cmake-flake8 + - ros2-ament-cmake-pep257 + - ros2-ament-cmake-uncrustify + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-python-cmake-module + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-interface + - ros2-rpyutils + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 62546 + timestamp: 1788361594192 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-generator-rs-0.5.0-np2py312haf4906a_21.conda + sha256: eb9dd09e7a1d8f4d0328985d1737a6d6ca50dd5f8e8830e131e76eeb80693177 + md5: 1e6ca2b389a3861c8d7b1dbbb3c0595e + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-environment + - ros2-ros-workspace + - ros2-rosidl-generator-c + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-interface + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 52766 + timestamp: 1788361579973 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-generator-type-description-4.6.9-np2py312haf4906a_21.conda + sha256: 548dd7e9cce364e785030bf337523db1fd06a7be74764aec53996b820bc0f508 + md5: 7a498b8515fb37debf5f2f0cbb79587a + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-parser + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 50482 + timestamp: 1788271497045 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-parser-4.6.9-np2py312haf4906a_21.conda + sha256: 12a18b324febc8252536d01e9d75ce53f8378396216f4fea48ae59d8092e16f1 + md5: f2c00ba6bde76bb89395b24796889c83 + depends: + - lark-parser + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-adapter + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 61966 + timestamp: 1788271322582 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-pycommon-4.6.9-np2py312haf4906a_21.conda + sha256: 42b48552c96d94d7d930be3d4c9c2ebd1ab63d328e14208741ab677614a1c40c + md5: fdde0ed47d4161fc488c857dad0f9bce + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-parser + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 26395 + timestamp: 1788271489928 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-runtime-c-4.6.9-np2py312haf4906a_21.conda + sha256: 21d0ca539d9eaf34b74edbb2ce76e8dd97daf4e4ae3b11bc5fb8497179528d9f + md5: 9dfa0e57b969b4de351150b5c2651573 + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-typesupport-interface + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 79723 + timestamp: 1788271583802 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-runtime-cpp-4.6.9-np2py312haf4906a_21.conda + sha256: 7ed4ae43e60f0135d45a1ede9bf7b26e05778d7eaffd63ff9eb3def57c7ec2a4 + md5: 7d3e31566e1c4f8c741d2fe5f3f2b055 + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 42695 + timestamp: 1788271733402 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-runtime-py-0.13.2-np2py312haf4906a_21.conda + sha256: 86eccec61f35e914465ccd8d3583b1ff7276739b5b830c17696cfb58ddb68fb2 + md5: f1722c26437a212538e812020e8bbde7 + depends: + - numpy + - python + - pyyaml + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-parser + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 48533 + timestamp: 1788457576336 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-c-3.2.3-np2py312haf4906a_21.conda + sha256: d2326ccb9be21ea7cad9fe55d049af856c3d9cfb36fcc98b40826e73fa8139b0 + md5: 1e53cd7980d678bf018fa7b89fed2854 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-interface + - ros2-rosidl-typesupport-introspection-c + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 51307 + timestamp: 1788361456188 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-cpp-3.2.3-np2py312haf4906a_21.conda + sha256: ece1e4ddab4fbf686fc87742aecab6799a63a1f17efb5d9ea4fa209b65fbb507 + md5: d726e544849d9ed2502a65d2f1356688 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-generator-type-description + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-interface + - ros2-rosidl-typesupport-introspection-cpp + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 50572 + timestamp: 1788361552169 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-fastrtps-c-3.6.4-np2py312haf4906a_21.conda + sha256: be35134aef7c51c36ec9dac6e9c760854b6905ba4505037d6efdd80b03121ba8 + md5: 7007f3ada47ebd9f84ddd498c939ae57 + depends: + - python + - ros2-ament-cmake-ros + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps-cmake-module + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-interface + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 52611 + timestamp: 1788361331172 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-fastrtps-cpp-3.6.4-np2py312haf4906a_21.conda + sha256: d2d631cceb8d8742e4f8bde5b600e638a769dcb1c43a3e05fcac891b98fc38d8 + md5: d1c6444c294cffc26a58132fd61da407 + depends: + - python + - ros2-ament-cmake-ros + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps-cmake-module + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-generator-cpp + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-interface + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 54545 + timestamp: 1788361202582 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-interface-4.6.9-np2py312haf4906a_21.conda + sha256: 4dc20ee48cec0915618bcf7ef5566a9e5d153d8b913bf15338a6651a99f5b3d0 + md5: f5be451db37b30d4c0b7a26e703ef20b + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 30961 + timestamp: 1788271126828 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-introspection-c-4.6.9-np2py312haf4906a_21.conda + sha256: 7148fac1aa4cd1b93566e0bb3fb41777a7160bcc3b867d74934d27e6bdc568a0 + md5: 350790b832f5a0272066c8f9d2d5fd62 + depends: + - python + - ros2-ament-cmake + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-cmake + - ros2-rosidl-generator-c + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-interface + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 49175 + timestamp: 1788271934642 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-introspection-cpp-4.6.9-np2py312haf4906a_21.conda + sha256: d21df1196435d753855639577f3b43356109d5e8a7976c053119ff6639f3454b + md5: 5753f2f2d0403d9d3ca78fe7b575b2e3 + depends: + - python + - ros2-ament-cmake + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-cmake + - ros2-rosidl-generator-c + - ros2-rosidl-generator-cpp + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-interface + - ros2-rosidl-typesupport-introspection-c + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 49326 + timestamp: 1788361221532 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rpyutils-0.4.2-np2py312haf4906a_21.conda + sha256: 99b79db3c51891cf663c316dddf60892140bb431bb33bceddc2fdc100833cdc5 + md5: 83c1f8b7abe0fd72d37f78a0382e84bb + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 27235 + timestamp: 1788268406260 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rti-connext-dds-cmake-module-0.22.3-np2py312haf4906a_21.conda + sha256: 306adab87b292cb8afe9f23c237831ccd0f34c435055d73ecd0e03d9e911d608 + md5: 023a307b0ce6cb1b9359ed5ed151eb09 + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 33314 + timestamp: 1788271233781 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-sensor-msgs-5.3.8-np2py312haf4906a_21.conda + sha256: 353c01869f9d9c6f9d92bda0c0292f8192271bc4d23b2a806b1e971813eb2e47 + md5: df535258703334c7fc6dd30fdac0a9c0 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 480737 + timestamp: 1788457759748 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-sensor-msgs-py-5.3.8-np2py312haf4906a_21.conda + sha256: 04c19ac742fe67304f8d0a6a7ddd921b7c6d4eab21e643beabb779208037e5ba + md5: e648af43e603feec2a5fcd87e600d15c + depends: + - numpy + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-std-msgs + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 31845 + timestamp: 1788458202818 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-service-msgs-2.0.4-np2py312haf4906a_21.conda + sha256: e0215fbfd749a39f704209b8f434e8af3606c18c007802e82c8efcd761709357 + md5: 4e5e5f512084a28c17517b89c1a1f9bc + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 81118 + timestamp: 1788361739494 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-shape-msgs-5.3.8-np2py312haf4906a_21.conda + sha256: f6a5090437e33baa93c44a81d0ddc2b1ac6c87799b4f30135b7152d08349c76e + md5: f4f0a4211bab11447e0fbb5e08275b61 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 122244 + timestamp: 1788457667272 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-spdlog-vendor-1.6.2-np2py312h88edd79_21.conda + sha256: f375c94d7732d8ee823ca0a6cea3ff0a64f01daaf2571731b02c19982c6d7389 + md5: 4406e7eb62f3d09e9f1db50188e36c84 + depends: + - fmt + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - spdlog + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - fmt >=12.1.0,<12.2.0a0 + - spdlog >=1.17.0,<1.18.0a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 OR MIT + size: 29137 + timestamp: 1788271059934 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-sqlite3-vendor-0.26.11-np2py312haf4906a_21.conda + sha256: ce20f334aff60090127f86a019cee687744db7795d1156051dba65942c5bd341 + md5: 061397909b23f4cddbce7afaf058aa75 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - sqlite + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - libsqlite >=3.53.4,<4.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 26617 + timestamp: 1788268436190 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-sros2-0.13.6-np2py312haf4906a_21.conda + sha256: 562a3d4c1bbb4da420ef5e3195ec6cf67766e6c96e9471ff86d0d9fe3e3c8fd1 + md5: 883a674c7932ab9ef82c5ed29cfb84cd + depends: + - argcomplete + - cryptography + - importlib_resources + - lxml + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 77188 + timestamp: 1788462008304 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-sros2-cmake-0.13.6-np2py312haf4906a_21.conda + sha256: 8b223a264c7612bffcd2f6cd800d70d331513e3e42db4caf1f0593122c1b78c5 + md5: 60f3238e034eb3abf0d6f0ab4b69771f + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - ros2-sros2 + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 39650 + timestamp: 1788463404934 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-statistics-msgs-2.0.4-np2py312haf4906a_21.conda + sha256: f0dc3387640077315ae470c41dab48441844f60cff0dc939b3e3a0285848787e + md5: 00f07d17374b649a3ee8b2a111b362e2 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 107409 + timestamp: 1788362291203 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-std-msgs-5.3.8-np2py312haf4906a_21.conda + sha256: a9db5e6da4001dd1d3bba6bdf1f266cd06dba501df8749c2df1348f654c2d6b9 + md5: 2f686b27be38782dd5060ae425630b8b + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 294970 + timestamp: 1788362223267 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-std-srvs-5.3.8-np2py312haf4906a_21.conda + sha256: 2ba55e84d1022987e08061fffd47ecdbe6bb5de7dfc63a0f54f3c0a33c107b08 + md5: d9b69a6b826e5d4934635ee997aa2b51 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 155837 + timestamp: 1788362332363 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-stereo-msgs-5.3.8-np2py312haf4906a_21.conda + sha256: 23d3a29b8172c7af7d7232e84508bcec560f41b9e692be2d4f6ecc3d089ada7e + md5: f1c698d1e73ec38305cfb8da361be0a3 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-sensor-msgs + - ros2-std-msgs + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 84281 + timestamp: 1788458329383 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-0.36.22-np2py312haf4906a_21.conda + sha256: 46c7b27c0b335c1b72ad1fb05a87f57b45ad8be5de2f1421d7134e539d7ab252 + md5: 59ed0bad6ba463325774fa9b4c5254b8 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-runtime-cpp + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: BSD-3-Clause + size: 124161 + timestamp: 1788457873638 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-bullet-0.36.22-np2py312haf4906a_21.conda + sha256: 548346c02a1ec29820426084d2b63352d38a5b5b2382d91411dacc6652e331af + md5: e20251fb18981442ba44d1aee357982d + depends: + - bullet + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-ros + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 45784 + timestamp: 1788461267032 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-eigen-0.36.22-np2py312hd6e7b62_21.conda + sha256: bf6a1fa840d30d029fb922a0749d1faf9e63b2ef314ee64d7ebafeeec7095b87 + md5: eacceee018f33d1781895628d464032a + depends: + - eigen + - eigen-abi-devel + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-ros + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - eigen-abi >=5.0.1.100,<5.0.1.101.0a0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: BSD-3-Clause + size: 47761 + timestamp: 1788461373955 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-eigen-kdl-0.36.22-np2py312hd6e7b62_21.conda + sha256: dc93344feb91f66c01807430b1787fed458d55dc63955754e7dc85014fe0e87b + md5: b3fb5b870718c8b9dbcbdf0e3c306014 + depends: + - eigen + - eigen-abi-devel + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-orocos-kdl-vendor + - ros2-ros-workspace + - ros2-tf2 + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - eigen-abi >=5.0.1.100,<5.0.1.101.0a0 + license: BSD-3-Clause + size: 42527 + timestamp: 1788458283357 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-geometry-msgs-0.36.22-np2py312haf4906a_21.conda + sha256: 1f1be2e3b483263d05057cf7f4bba61ce6d06face63bcfd4848c58fa3b8cc89d + md5: c1ec955fe470ee7d717cdeca3a823dde + depends: + - numpy + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-orocos-kdl-vendor + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-ros + - ros2-tf2-ros-py + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 59636 + timestamp: 1788461187253 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-kdl-0.36.22-np2py312haf4906a_21.conda + sha256: 1ae8e4aa415396baf6f8c66ff7c5e8855fb205ba88f720b0c585972aca3450cf + md5: 79a984421dff7c234cbd3dc1b5e49fcb + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-orocos-kdl-vendor + - ros2-python-orocos-kdl-vendor + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-ros + - ros2-tf2-ros-py + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 49360 + timestamp: 1788461209617 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-msgs-0.36.22-np2py312haf4906a_21.conda + sha256: 721f5015e0eea1c9f20335d886a50108f3fe3989572529a168bbf8da1b85c1d2 + md5: 31f08f5b8446603decbcc566fee915f0 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 236583 + timestamp: 1788457846870 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-py-0.36.22-np2py312haf4906a_21.conda + sha256: bf31c68e44482fa017889c386f049c9fac89c5bf8da85d0d26f52343711fa7e6 + md5: 94c98b9a262ba94a6350bbf1dd70b7b1 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-rclpy + - ros2-ros-workspace + - ros2-rpyutils + - ros2-tf2 + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 53051 + timestamp: 1788459510857 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-ros-0.36.22-np2py312haf4906a_21.conda + sha256: 67c60790ac2c4c65ab36a5fde89027fed3b92e24e8b67ceeaef98618a27829ce + md5: 08755437c18c0d26faddcb3586a0e6a4 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-message-filters + - ros2-rcl-interfaces + - ros2-rclcpp + - ros2-rclcpp-action + - ros2-rclcpp-components + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-msgs + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 323769 + timestamp: 1788460749242 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-ros-py-0.36.22-np2py312haf4906a_21.conda + sha256: fc173d56afd3271332a6b9ffb65219b373e88745a779f04d6e055554941d258f + md5: 3cd79054ebf1ddbf1e9a733077a86222 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-rclpy + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-std-msgs + - ros2-tf2-msgs + - ros2-tf2-py + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: BSD-3-Clause + size: 50797 + timestamp: 1788459909867 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-sensor-msgs-0.36.22-np2py312hd6e7b62_21.conda + sha256: 59b40bfb8cae2fb279872f5be28f0300dabb0a1ebe3d0ca0d441c1416caf995f + md5: 0c16f0205a90c95ac1c5b444b2b89a5f + depends: + - eigen + - eigen-abi-devel + - numpy + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-eigen3-cmake-module + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-sensor-msgs-py + - ros2-std-msgs + - ros2-tf2 + - ros2-tf2-ros + - ros2-tf2-ros-py + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - eigen-abi >=5.0.1.100,<5.0.1.101.0a0 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 53292 + timestamp: 1788462392998 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tf2-tools-0.36.22-np2py312haf4906a_21.conda + sha256: 81dd094899f1c9c813a3737ac54b45eeece2ce37cfbb880c9cfe4064435232d0 + md5: a99b960889015f8ec80e54b6f5c5543f + depends: + - graphviz + - python + - pyyaml + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-tf2-msgs + - ros2-tf2-py + - ros2-tf2-ros-py + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: BSD-3-Clause + size: 25360 + timestamp: 1788460827606 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tinyxml2-vendor-0.9.2-np2py312haf4906a_21.conda + sha256: e96bedea055819fe5fdae5ebdd294beafb4562e8f59b2e676fe766872c500ced + md5: 64741691d70f692a2c246b8f88681649 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - tinyxml2 + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - tinyxml2 >=11.0.0,<11.1.0a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: Apache-2.0 + size: 26796 + timestamp: 1788268450504 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-tracetools-8.2.6-np2py312haf4906a_21.conda + sha256: c17e492135188aeaa7ecb0f3e568d08aa7e1f065a6027c44878869c5922bba74 + md5: d07a3ece82b13d208dec30a2b8b2be74 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 36602 + timestamp: 1788271333209 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-trajectory-msgs-5.3.8-np2py312haf4906a_21.conda + sha256: 8ff702131cdfddbeba3746c06ee6a460e19ed7af11341e67d2bb905ed646340f + md5: 9a58ca8871be160fa4544abf3bd10bc7 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 137867 + timestamp: 1788457822655 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-type-description-interfaces-2.0.4-np2py312haf4906a_21.conda + sha256: be589e7cc79e6b5104461d504963d5caf478d01ab7b21478442aee80bb925f1c + md5: 6af8d46b32aa318159b6785cbe1a0281 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - ros2-service-msgs + - __osx >=12.0 + - libcxx >=19 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 214542 + timestamp: 1788361822673 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-uncrustify-vendor-3.0.1-np2py312haf4906a_21.conda + sha256: 1be9b205ce24cf249e302b600e215920e5828e36bdf86f1a627e6003d2bf794a + md5: 6e49bc5e5097b08546304c7fa7df76cc + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - uncrustify + - uncrustify >=0.78 + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 OR GPL-2.0-only + size: 25301 + timestamp: 1788268543362 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-unique-identifier-msgs-2.5.1-np2py312haf4906a_21.conda + sha256: 820662c47788094cd3cb8036843ed06673d0465ae529a474e104ecce29f44b5b + md5: 99ea3c1b5ab0eabba59b22a050e3e23b + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 73896 + timestamp: 1788361693591 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-urdf-2.10.1-np2py312haf4906a_21.conda + sha256: b9497271dd08904537a11fb88c9e4a42feba50bcab1e2442097fca3dfd9e313f + md5: 140fed85d9b137137a627c3c874cdb07 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-pluginlib + - ros2-ros-workspace + - ros2-tinyxml2-vendor + - ros2-urdf-parser-plugin + - ros2-urdfdom + - ros2-urdfdom-headers + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 131275 + timestamp: 1788361243026 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-urdf-parser-plugin-2.10.1-np2py312haf4906a_21.conda + sha256: e981354a5f0a446c47c6802498c2ee3e2c6bfc06770201be63ab2e3fbf2127ee + md5: cb1774b0c258f2aaac58feb8a48870e8 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-urdfdom-headers + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: BSD-3-Clause + size: 33705 + timestamp: 1788271305838 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-urdfdom-6.0-py312h3dea895_21.conda + sha256: e2ccea13b8fae628b00cc3913550f4eed1fb2dccbbd10b28165d912d6a7aac92 + md5: b98fae57ae2e913de9a56819e9ad7a7a + depends: + - console_bridge + - python + - ros2-console-bridge-vendor + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - ros2-tinyxml2-vendor + - ros2-urdfdom-headers + - tinyxml2 + - urdfdom >=6.0,<6.1a0 + - console_bridge >=1.0.2,<1.1.0a0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - tinyxml2 >=11.0.0,<11.1.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 7269 + timestamp: 1788271504805 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-urdfdom-headers-3.0-py312h3dea895_21.conda + sha256: 5f4418d58ce1917b7ccb18df5565d8f72634afc8b79bd3df3b706fd5dcfb2a6d + md5: f4064d2937de1892bd1564db1a90281b + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - urdfdom_headers >=3.0,<3.1a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: BSD-3-Clause + size: 6455 + timestamp: 1788259988500 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-visualization-msgs-5.3.8-np2py312haf4906a_21.conda + sha256: afe2f7ade218797773918e1d5a800e94478fd4e55a5dfb165433461b30997083 + md5: cd6bf90bf14a734bf4edf8ca3783b2cc + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-sensor-msgs + - ros2-std-msgs + - libcxx >=19 + - __osx >=12.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 326615 + timestamp: 1788458294268 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-yaml-cpp-vendor-9.0.1-np2py312haf4906a_21.conda + sha256: 3e6d2da13025fa357f8bf339ce676e40601b5affa414e4a8f22dce7c86b4e1d2 + md5: dc5b3361269c4a427dde1aa67a529af9 + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - yaml-cpp + - libcxx >=19 + - __osx >=12.0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + - yaml-cpp >=0.8.0,<0.9.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 OR MIT + size: 25269 + timestamp: 1788268449257 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-zstd-vendor-0.26.11-np2py312haf4906a_21.conda + sha256: d40d48808f3e7ec9d24fbf0008acc623e9505d8cbec61dad1f726307900a17e6 + md5: 861347869b0b71b431c40fa59d86d58a + depends: + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - zstd + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - zstd >=1.5.7,<1.6.0a0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 OR BSD-3-Clause + size: 26077 + timestamp: 1788268475878 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros-jazzy-demo-nodes-py-0.33.11-h9490d1a_25.conda + sha256: 622f14af8d6f75504e33ffa3b73469da36e23498315f105d2db58c8e9d6d2a22 + md5: 83cd9ee3a8036b01c36345bc2cb697f5 + depends: + - ros2-demo-nodes-py ==0.33.11 + size: 2044 + timestamp: 1791455531694 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros-jazzy-rmw-zenoh-cpp-0.2.11-h9490d1a_25.conda + sha256: f0ae90d9267b1a7ed39ff4866b9fc872e12d78ec7d7a6ad60b79f5e99290fcaf + md5: b49593864e427095476f3e6ddd1655c8 + depends: + - ros2-rmw-zenoh-cpp ==0.2.11 + size: 2037 + timestamp: 1791448103500 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros-jazzy-ros-base-0.11.0-h9490d1a_25.conda + sha256: 80c0607ad52f94c30fd885f25af4319e96c86d503f3f4d85c6d8be4541e0c98e + md5: 338359a479e8fa4f4b43ac93c6227f6c + depends: + - ros2-ros-base ==0.11.0 + size: 2002 + timestamp: 1791503505708 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-action-msgs-2.0.4-np2py312hdd89193_25.conda + sha256: ca01aa75fdbe77ac74de2bda55c91d2c9d39af5fd31e5464356787b71011c5b9 + md5: 1b4ccd24b9d3231692efa190f2358d77 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - ros2-service-msgs + - ros2-unique-identifier-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 157463 + timestamp: 1791448441691 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-actionlib-msgs-5.3.8-np2py312hdd89193_25.conda + sha256: ab6799f4181532cd37dfa9bc483dd72abf87bf2cfa0e93a9618a9d7bafe6e2da + md5: 5661e712debd61147316e09c3f354405 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 118977 + timestamp: 1791454108982 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-2.5.6-np2py312hdd89193_25.conda + sha256: a6c44820c01c2ee3e5a6700bf1df9ca006028654202fff6050edf32ad61843ca + md5: 2b2a67c6f1ac9dae367b545d98abbec1 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-export-definitions + - ros2-ament-cmake-export-dependencies + - ros2-ament-cmake-export-include-directories + - ros2-ament-cmake-export-interfaces + - ros2-ament-cmake-export-libraries + - ros2-ament-cmake-export-link-flags + - ros2-ament-cmake-export-targets + - ros2-ament-cmake-gen-version-h + - ros2-ament-cmake-libraries + - ros2-ament-cmake-python + - ros2-ament-cmake-target-dependencies + - ros2-ament-cmake-test + - ros2-ament-cmake-version + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - cmake + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 20707 + timestamp: 1791431471762 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-auto-2.5.6-np2py312hdd89193_25.conda + sha256: c3e3ab1f32f752ed24aa28ff3867e0c0ee41a3862c179c496e9bd2d4adcae7d4 + md5: 60141506daa3b21268597f9312c20df0 + depends: + - python + - ros2-ament-cmake + - ros2-ament-cmake-gmock + - ros2-ament-cmake-gtest + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 24871 + timestamp: 1791432840066 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-copyright-0.17.5-np2py312hdd89193_25.conda + sha256: 29940ab92ede94ce9656c010dfd4c6fc06e37ccb33dbe2cc87ea3c2e56a355de + md5: 9857f445d93f22c2b6594b9e526f2b58 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-copyright + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 20149 + timestamp: 1791435074016 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-core-2.5.6-np2py312hdd89193_25.conda + sha256: 1360ed69d14d05f58701b742b39ec07a9ed36b157b1a3e684633467fff4d493f + md5: 12924e9d539a3df1c9074e42a12fe5a7 + depends: + - catkin_pkg + - python + - ros2-ament-package + - ros2-distro-mutex 0.19.* jazzy_* + - cmake + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 42463 + timestamp: 1791427677643 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-cppcheck-0.17.5-np2py312hdd89193_25.conda + sha256: e3e39504e78a04a9824119a586171d706f9c2a47229cf371eea521abf06b60ad + md5: 6935ef8b8214cd977aeb5ee3dff68afb + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-test + - ros2-ament-cppcheck + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 21922 + timestamp: 1791436341389 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-cpplint-0.17.5-np2py312hdd89193_25.conda + sha256: 4551ac8d9f1852bbc7fea8cc6d4353d1a326df1cf6f34498c8db50fc034adfe2 + md5: 1e73110d62312d7014a17b32df1b6a9c + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-cpplint + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 20820 + timestamp: 1791436274101 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-export-definitions-2.5.6-np2py312hdd89193_25.conda + sha256: 1ca1cd7a68a4af11a8ff21e053a73095e92612e883002a5fd3d68ff37c602164 + md5: bbda7e9f1c526798e250a37ec9b118b5 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 19548 + timestamp: 1791428115105 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-export-dependencies-2.5.6-np2py312hdd89193_25.conda + sha256: 4e595da6680506638ae43ee4b0f8627de73a8b7f19ef7bd50ba3fb5e9e65e17b + md5: 52349e2be2f33e02cc2c2119f93159d5 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-libraries + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 20538 + timestamp: 1791428858741 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-export-include-directories-2.5.6-np2py312hdd89193_25.conda + sha256: d482caf8ea8743de3815f95858f53f080f2d68e1de0ce9f44f835d758d276305 + md5: dec3eff8d1b0395c2c23484c53238c01 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 19977 + timestamp: 1791428089257 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-export-interfaces-2.5.6-np2py312hdd89193_25.conda + sha256: c37082dfac88af7bbbbc6824089b91c53976de058675d5e0fb30b63e7c28d196 + md5: 1f045431d6ba9d223f4f80f0376ecc6e + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-export-libraries + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 20146 + timestamp: 1791429014018 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-export-libraries-2.5.6-np2py312hdd89193_25.conda + sha256: 1c3be4cc1f35c36b03a26c2aaff30e6fa9a52bc0aec32e2d09a4be96e558ce53 + md5: 701803d114bdef25d3390a7c9f1d7e56 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 21505 + timestamp: 1791428019351 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-export-link-flags-2.5.6-np2py312hdd89193_25.conda + sha256: fb32aed746621a9558f6d1a5860605abe448af6176f62b9cce45e115465ba3b6 + md5: 74ac41101acccfc3f8e3fdcacd361787 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 19473 + timestamp: 1791428066261 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-export-targets-2.5.6-np2py312hdd89193_25.conda + sha256: 4d5650534d616b7e9f1f07975b685ae2bd2fb66d6ed7424a822eaf7d0e2ada24 + md5: 3b272248d7e6aa5b9cb56c8086957b13 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-export-libraries + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 20294 + timestamp: 1791428957005 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-flake8-0.17.5-np2py312hdd89193_25.conda + sha256: bd82c743b78c21a9f1c8447e66057fcdd7d0246e6c87b303620b3f2051347289 + md5: e47a82071d33b2a21fea42e91e608ba5 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-flake8 + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 21890 + timestamp: 1791436203856 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-gen-version-h-2.5.6-np2py312hdd89193_25.conda + sha256: 7b260c3b5f05e8fb61f962f4df3ebb2b11d8113c963aedec9a1ac17b8a073461 + md5: a5d2bcfca652b8e602a91c1d0d2f3612 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 22294 + timestamp: 1791430802517 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-gmock-2.5.6-np2py312hdd89193_25.conda + sha256: ac17fcd8c8e2921c196071faac6ef863db8dc049a53e66b88c4ecc1c9bfe78c2 + md5: 79fa35b348e596eea28b83d80727b920 + depends: + - gmock + - python + - ros2-ament-cmake-gtest + - ros2-ament-cmake-test + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-gmock-vendor + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 22420 + timestamp: 1791430859832 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-gtest-2.5.6-np2py312hdd89193_25.conda + sha256: 6e3d9cc97fa617a64ba8a10e7fc3497358e4316fbe616bbd94065a39a04f4a63 + md5: 2c17bda6fe9500781b3e326f90a00f50 + depends: + - gtest + - python + - ros2-ament-cmake-test + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-gtest-vendor + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - gtest >=1.18.0,<1.18.1.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 22181 + timestamp: 1791430100795 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-include-directories-2.5.6-np2py312hdd89193_25.conda + sha256: a8fb4d406242432a191f5fd18f5919f3c1ada490996ff95ab51d69aceece6368 + md5: 90a060d4e931cce5a22df90499668376 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 19475 + timestamp: 1791427996816 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-libraries-2.5.6-np2py312hdd89193_25.conda + sha256: 59d7e8120cdfa3812bf940a8e826444eca4db16054ce8d4d829c7a38cd98a13d + md5: 1f768af55128c65d0257faa962177404 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 19112 + timestamp: 1791427976142 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-lint-cmake-0.17.5-np2py312hdd89193_25.conda + sha256: 41436344d7c740da2355c8fbb5e7a55a5d3fe65fd4acfb0d37f111bba80dce4f + md5: 4cec60ceb4a29e81c45ca5deac0951f4 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-lint-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 19851 + timestamp: 1791432335594 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-pep257-0.17.5-np2py312hdd89193_25.conda + sha256: ff6156cfee13eea18a16d99625cd55c81a9819a29b39ccb311fde1a62de08c9d + md5: 06faea7e1c25e5a0115bba01615bd1f9 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-pep257 + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 20646 + timestamp: 1791436131519 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-pytest-2.5.6-np2py312hdd89193_25.conda + sha256: 3a87d54578ee0bc5a7041165e67ad886d8dc3f782bfa705d9311f24f28c5d287 + md5: 1824659df3cd391450b43cd784ed66f8 + depends: + - pytest + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-test + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 22388 + timestamp: 1791430250420 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-python-2.5.6-np2py312hdd89193_25.conda + sha256: 54749d337729c13bc86c56af04ed0994aeac490847ee41d12e33fc218a4df3a4 + md5: a450cb050520be8010ecc5a0369419e3 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 22534 + timestamp: 1791427928517 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-ros-0.12.2-np2py312hdd89193_25.conda + sha256: e83f074cf6175b71a9227178579b012aa81a667861089283268ceb80ceeefa8d + md5: b75e1ecf1fcdefe6db345ecd56e8efb1 + depends: + - python + - ros2-ament-cmake + - ros2-ament-cmake-gmock + - ros2-ament-cmake-gtest + - ros2-ament-cmake-pytest + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-domain-coordinator + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 28650 + timestamp: 1791438242537 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-target-dependencies-2.5.6-np2py312hdd89193_25.conda + sha256: 61d4928ac5a74c8ad0504477541b5cba805cfb2150cc3056781e67bc3d264de8 + md5: 6f5b08aad1a239d08b5d01ea9e047599 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-include-directories + - ros2-ament-cmake-libraries + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 21181 + timestamp: 1791428911349 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-test-2.5.6-np2py312hdd89193_25.conda + sha256: daa2e1b7aa67386b19c8126cc040fa5027afed7df02cb0c0006cdf82177be968 + md5: 19fa86d63fa8ef6bd0ca2e2f047c16b2 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 33684 + timestamp: 1791428783011 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-uncrustify-0.17.5-np2py312hdd89193_25.conda + sha256: ad465fe4a011ce972a5aab324515a7e086a46ec1548fc38885aef0b44ee96802 + md5: 3722e2b0c93ba375b836c8bfb0184d48 + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-uncrustify + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 21198 + timestamp: 1791436056326 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-version-2.5.6-np2py312hdd89193_25.conda + sha256: bbe3693afb8b3d0adfa7a25fee6c3a2990f9efcb84778fb2083751e20faf920b + md5: a0cda4c13635142a4579ac6eccf4be09 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 19334 + timestamp: 1791428041920 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cmake-xmllint-0.17.5-np2py312hdd89193_25.conda + sha256: 461c5b4d3642cba63ce173764752db61759758c3d1a5a6d9efb7836e1242f649 + md5: c5f5c9f2a069f07b3a6e3d47ca918c6c + depends: + - python + - ros2-ament-cmake-test + - ros2-ament-xmllint + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 20390 + timestamp: 1791435837795 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-copyright-0.17.5-np2py312hdd89193_25.conda + sha256: 260e26ca51c01313b988ecfa73c11b6d28673940ba8d4218620daf03f5969069 + md5: bef9012f0bb4b62d6dda6dc74a65a2cc + depends: + - importlib-metadata + - python + - ros2-ament-lint + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 71061 + timestamp: 1791430690664 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cppcheck-0.17.5-np2py312hdd89193_25.conda + sha256: 900301a408492ec84375dfb20fee9ab98c13485abb68cee6f405e37f277a5da0 + md5: 4f2c3543d51ae307c3d1bf59dc023439 + depends: + - cppcheck + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 35531 + timestamp: 1791431625889 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-cpplint-0.17.5-np2py312hdd89193_25.conda + sha256: 059139f2761237e20ee04fcb89a589111aa1e8de588eedc9da3c4ef220fac277 + md5: 794b0ce06eb6055126ab3c96a1326317 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR BSD-3-Clause + size: 178312 + timestamp: 1791431581423 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-flake8-0.17.5-np2py312hdd89193_25.conda + sha256: 57adddb06f66b0fb475263de457e3763597b9a47b159b11e5deafb355587f141 + md5: 972eefbfd4615af9d587fd517c3d1c5b + depends: + - flake8 + - flake8-builtins + - flake8-comprehensions + - flake8-docstrings + - flake8-import-order + - flake8-quotes + - python + - ros2-ament-lint + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 33968 + timestamp: 1791428695245 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-index-cpp-1.8.4-np2py312hdd89193_25.conda + sha256: 22224f8568fe117b042a69f3005a03c2052b3eb425fe7126144c86d65c44c53f + md5: 85f64602dad24ad2a4e2211df856aeff + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 59617 + timestamp: 1791439006442 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-index-python-1.8.4-np2py312hdd89193_25.conda + sha256: 3cd94cf5aa98a8cf42c1f32517a338fbb586404954c371716f940ae4d6e9eff9 + md5: a75f9860592b4f6036f7bf6debad4bf4 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 35032 + timestamp: 1791431667470 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-lint-0.17.5-np2py312hdd89193_25.conda + sha256: 732a9706bed10ce2a9ebf98c24ca5b0d74e250d4a81afe29010a8bf092365342 + md5: fc128742bd5c7ca35747138d27e21f59 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 16390 + timestamp: 1791427873644 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-lint-auto-0.17.5-np2py312hdd89193_25.conda + sha256: 886aa81fc4b66699f53daebe01709f23cf96783525f55d69e5515235a3facb52 + md5: 8bc31c43eb19434cacff70301570a6dd + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-cmake-test + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 19536 + timestamp: 1791430211344 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-lint-cmake-0.17.5-np2py312hdd89193_25.conda + sha256: a56ff14ce911673bb32c17baf27130d9cc0e7e7f642a9e8e8e76975dd50f3941 + md5: 6c213dd00c6a19eb26cb017726db779a + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 45165 + timestamp: 1791431343575 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-lint-common-0.17.5-np2py312hdd89193_25.conda + sha256: 82d1310476247040a3f8999234b6a0dfab187996fce76d37ac3b1cdbef36d88b + md5: 071831e2911ec193f06cabefe3bf98a7 + depends: + - python + - ros2-ament-cmake-copyright + - ros2-ament-cmake-core + - ros2-ament-cmake-cppcheck + - ros2-ament-cmake-cpplint + - ros2-ament-cmake-flake8 + - ros2-ament-cmake-lint-cmake + - ros2-ament-cmake-pep257 + - ros2-ament-cmake-uncrustify + - ros2-ament-cmake-xmllint + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 19825 + timestamp: 1791437069321 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-package-0.16.5-np2py312hdd89193_25.conda + sha256: 75baf5d442e47e3b03ddf13cc108dd986f8637023be600b291dfb15ceea3a5aa + md5: 2fdfa5bcd4ca55022922f7a39c494fcb + depends: + - importlib-metadata + - importlib_resources + - python + - ros2-distro-mutex 0.19.* jazzy_* + - setuptools + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 36004 + timestamp: 1791427622370 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-pep257-0.17.5-np2py312hdd89193_25.conda + sha256: db39ca0fd2edd1cb99c2b389a8bdb55d280bb16960b256c3fb892e1b950829e0 + md5: bd2ec07edb540586654824f39ce27d52 + depends: + - pydocstyle + - python + - ros2-ament-lint + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR MIT + size: 32585 + timestamp: 1791430033534 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-uncrustify-0.17.5-np2py312hdd89193_25.conda + sha256: f6373c36573e7de81a19ab0e529659c8dc8251b5b64356c58dd1d9c0382c4507 + md5: ea75193fda43bb87fb9608758a120c0f + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-uncrustify-vendor + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 75052 + timestamp: 1791435172575 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ament-xmllint-0.17.5-np2py312hdd89193_25.conda + sha256: 6e5458ef7675bbffc968667af5a50643464ea547e87de64d7c77dfb25f37054f + md5: b21ea48d1f8308e4a75619293b496789 + depends: + - libxml2 + - python + - ros2-ament-lint + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 36562 + timestamp: 1791431534342 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-builtin-interfaces-2.0.4-np2py312hdd89193_25.conda + sha256: 60d6c9f599c90e97e796b8453e23ab64e4422a0645a1a311267a5b3e64023eea + md5: 9844e80c1e4eefa93d002a118345a85e + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 87537 + timestamp: 1791448182023 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-class-loader-2.7.1-np2py312he78ef48_25.conda + sha256: 342bfeaad5cc01a911e2057924cfb7c5aca37a31fbed30e0a1d39bcad5ec4569 + md5: 62df5674afa86250cda33f9710c497be + depends: + - console_bridge + - python + - ros2-console-bridge-vendor + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcpputils + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - console_bridge >=1.0.2,<1.1.0a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 71827 + timestamp: 1791443234714 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-common-interfaces-5.3.8-np2py312hdd89193_25.conda + sha256: 95787fccea7d694ff078fabe7b53d305849b6cbaf424f5275429f2e21054202a + md5: 1523a7a225cace63167191c70da4beab + depends: + - python + - ros2-actionlib-msgs + - ros2-builtin-interfaces + - ros2-diagnostic-msgs + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-nav-msgs + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-shape-msgs + - ros2-std-msgs + - ros2-std-srvs + - ros2-stereo-msgs + - ros2-trajectory-msgs + - ros2-visualization-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 24053 + timestamp: 1791462278425 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-composition-interfaces-2.0.4-np2py312hdd89193_25.conda + sha256: 4ba6c684c1417efc095e7009dcf4eec3498cdf769c7b4045f4dfbfee281edbd7 + md5: b48851ee07140ccb8143cec67cde8f64 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl-interfaces + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 210810 + timestamp: 1791451863425 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-console-bridge-vendor-1.7.2-np2py312he78ef48_25.conda + sha256: 3b08c2c719d370503b0b60206dfdc581b244b2e8a8e0ece30330e9d229e83598 + md5: 4d31e1bd9f179f2bccf5f60d264c8f30 + depends: + - console_bridge + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - console_bridge >=1.0.2,<1.1.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR BSD-3-Clause + size: 25243 + timestamp: 1791440110164 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-cyclonedds-0.10.5-py312h420ed83_25.conda + sha256: 28f6a22744d260bb49390ee0b4d4f90b4d2fda7d70f3bbae23f46f9f38215a8f + md5: abb05dded85ba66cc42abb4e95e1cd7c + depends: + - cyclonedds >=0.10.5,<0.11.0a0 + - openssl + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-iceoryx-binding-c + - ros2-iceoryx-hoofs + - ros2-iceoryx-posh + - ros2-ros-workspace + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - openssl >=3.5.9,<4.0a0 + license: EPL-2.0 OR BSD-3-Clause + size: 8168 + timestamp: 1791430903265 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-demo-nodes-py-0.33.11-np2py312hdd89193_25.conda + sha256: b2b67de7208b59a07cb87e60f61bde45ef3af8128185ea405d41b7a14e2924db + md5: a6f7c66e4b179c93ef08878851675c47 + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-example-interfaces + - ros2-rcl-interfaces + - ros2-rclpy + - ros2-ros-workspace + - ros2-std-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 52141 + timestamp: 1791455382875 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-diagnostic-msgs-5.3.8-np2py312hdd89193_25.conda + sha256: 1fdd0e103e18b5b6754a93409ab5eef49b06233f407313dfe9814071d094270a + md5: ce4958ac549067e6c9d1edc9b5a2c6b5 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 201492 + timestamp: 1791456279557 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-distro-mutex-0.19.0-jazzy_25.conda + sha256: 3191675dcd712b0028d6f037bdcd23ee5b9d276bd1e8900b1fa02e751680c8d8 + md5: 7533162be72338544095a056dff837a3 + constrains: + - libboost 1.90.* + - libboost-devel 1.90.* + - pcl 1.15.1.* + - gazebo 11.* + - libprotobuf 7.35.* + - libopenvino-tensorflow-frontend >=2026.3.0 + - libopencv >=5.0.0 + - py-opencv >=5.0.0 + - vtk 9.7.0.* + - ffmpeg 9.* + - libopenvino-tensorflow-lite-frontend >=2026.3.0,<2026.3.1.0a0 + license: BSD-3-Clause + size: 2469 + timestamp: 1791427621990 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-domain-coordinator-0.12.2-np2py312hdd89193_25.conda + sha256: a66b734029f31d194f13672d8229f79b6a84adb87297e66833bdf5cdadc1d064 + md5: a38292d927eb86fc6d8603d3b3ec2f2a + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 18684 + timestamp: 1791431708795 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-eigen3-cmake-module-0.3.1-np2py312hdd89193_25.conda + sha256: c7b3e37bc0c0beef469f36b29ba172d45968ba1147263bd1e7974ecd2f767754 + md5: 5b271b9d1ef8da6b0b850e2c036a6aac + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 20974 + timestamp: 1791436478948 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-example-interfaces-0.12.1-np2py312hdd89193_25.conda + sha256: 8720ab08709891ca02ebac6f814041f37b159690449b487e9674f869c73e4464 + md5: 8eceb8040e8c402cfb7e11391b2e7983 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 484079 + timestamp: 1791449614320 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-fastcdr-2.2.8-np2py312hdd89193_25.conda + sha256: f08a50a87e40cb36ca0661b7e0f6ef205ae35b101e0c48838540f96b619ad748 + md5: 35ec1fac97c68ef49b0dc303460f50f8 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 96529 + timestamp: 1791432566523 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-fastrtps-2.14.7-np2py312h679732a_25.conda + sha256: d2bed29caae120b4ecca92eb39cbe0503814e04a2b28e3cd53e0f2b2a8bba09a + md5: 710fbf3ae2c60f4ec8057f6daa50d460 + depends: + - openssl + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-foonathan-memory-vendor + - ros2-ros-workspace + - tinyxml2 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - tinyxml2 >=11.0.0,<11.1.0a0 + - openssl >=3.5.9,<4.0a0 + license: Apache-2.0 + size: 3152455 + timestamp: 1791438357226 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-fastrtps-cmake-module-3.6.4-np2py312hdd89193_25.conda + sha256: 49259f9a42a667ea0a606dc9d5407c546e73851f303b4b9ed3fd5387f743b0d2 + md5: 5a1266a5b7b9fba1d777d44daa277133 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 24839 + timestamp: 1791438318999 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-foonathan-memory-vendor-1.3.1-np2py312hdd89193_25.conda + sha256: d2967b3cc6c0743316b89937a831844d5930b378c321a7453f1bcfb026f42451 + md5: 772f4dd3893faf4d01a70dd54bae7384 + depends: + - foonathan-memory + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - cmake + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - foonathan-memory >=0.7.4,<0.7.5.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR Zlib + size: 17564 + timestamp: 1791437150995 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-geometry-msgs-5.3.8-np2py312hdd89193_25.conda + sha256: 295fd3ad6e74ca8604e13effbdf5e66743ba3447c79f261d05e848ac3150b481 + md5: 17bdb9252b629e85d7ba1692b8f6206b + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 368425 + timestamp: 1791453651212 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-geometry2-0.36.23-np2py312hdd89193_25.conda + sha256: acef50565f572821b5376cdbb96ef6706fc663e603305e3ae03b3e9a6938f8a5 + md5: 41862a2fcb2aa1dd3ca0cbaf5f46bfff + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-bullet + - ros2-tf2-eigen + - ros2-tf2-eigen-kdl + - ros2-tf2-geometry-msgs + - ros2-tf2-kdl + - ros2-tf2-msgs + - ros2-tf2-py + - ros2-tf2-ros + - ros2-tf2-sensor-msgs + - ros2-tf2-tools + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 19991 + timestamp: 1791481263465 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-gmock-vendor-1.14.9000-np2py312hdd89193_25.conda + sha256: 0a2846a7eca5fc30288d4a32263074a470072f47d5fe470f8897a81d0257e7c6 + md5: 569e30c5ce50fa4e0029e84af93c75da + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-gtest-vendor + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 121347 + timestamp: 1791429066118 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-gtest-vendor-1.14.9000-np2py312hdd89193_25.conda + sha256: 0ceac0542804f1edbdfbf8d858452889b28bc14f25c20d76a258d3c17d3e5003 + md5: 6fcc8e08e56571303f90158fd9220380 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 208072 + timestamp: 1791427957829 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-iceoryx-binding-c-2.95.8-py312h7accfcc_25.conda + sha256: 118c5e51b64decdba68f6f6e4e17674254e96adfd5b214458cab7d9109962575 + md5: cd07ece63c068b17946d85ec3f5bcafc + depends: + - libiceoryx-binding-c >=2.95.8,<2.96.0a0 + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 7814 + timestamp: 1791430320015 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-iceoryx-hoofs-2.95.8-py312h7accfcc_25.conda + sha256: c991d382fb83f9f8b126e6f0bba82790b26d04d90d713f8edafb2bee4eda8cf6 + md5: b944e7d4d08b55e41e9bcede925aacb7 + depends: + - libiceoryx-hoofs >=2.95.8,<2.96.0a0 + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 7221 + timestamp: 1791428260795 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-iceoryx-posh-2.95.8-py312h7accfcc_25.conda + sha256: 1d13daf96542f12a48dc6512e130487c040fdf320cf58471d292bca9803a2e76 + md5: 9c8db45bff8de90b120cd2834330e9d8 + depends: + - libiceoryx-posh >=2.95.8,<2.96.0a0 + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-iceoryx-hoofs + - ros2-ros-workspace + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 7783 + timestamp: 1791429115897 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-kdl-parser-2.11.0-np2py312hdd89193_25.conda + sha256: da309be393b259ff69772c1be35ca49f57f432a3daf197439f49c9e38bd08f90 + md5: 0200801345e3c0d4c9c9018a09faa404 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-orocos-kdl-vendor + - ros2-rcutils + - ros2-ros-workspace + - ros2-urdf + - ros2-urdfdom-headers + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 58069 + timestamp: 1791447305432 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-keyboard-handler-0.3.2-np2py312hdd89193_25.conda + sha256: 7efe493a71e29b71cde2a5b706a7e1de21d1c03110e7edbe536ce35aa49c24db + md5: e9d426b95ece913be6b9c90444134a50 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 53431 + timestamp: 1791439582355 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-3.4.12-np2py312hdd89193_25.conda + sha256: 655c10354a185d0079d021dbe45851ced09030a15a66fc3d86b026653a3c85f3 + md5: c88f58b0bf16b6f80f593506dbc63fa0 + depends: + - importlib-metadata + - lark-parser + - python + - pyyaml + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-osrf-pycommon + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 233215 + timestamp: 1791432484706 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-ros-0.26.13-np2py312hdd89193_25.conda + sha256: acfc2048881a9ec860450e0817a145fb71f8c570d9a22ea3c759df502842a3be + md5: 653bb14fbfaa21259d5ed7ae2e9c104a + depends: + - importlib-metadata + - python + - pyyaml + - ros2-ament-index-python + - ros2-composition-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch + - ros2-lifecycle-msgs + - ros2-osrf-pycommon + - ros2-rclpy + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 124270 + timestamp: 1791453004738 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-testing-3.4.12-np2py312hdd89193_25.conda + sha256: c7960bd4a8b1de6a00ba62cb9ee3dfd6dd03ccd90e8a465131a6675b304f3170 + md5: 379d0178f29626ca1af949cac0d22242 + depends: + - pytest + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch + - ros2-launch-xml + - ros2-launch-yaml + - ros2-osrf-pycommon + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 121074 + timestamp: 1791436411595 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-testing-ament-cmake-3.4.12-np2py312hdd89193_25.conda + sha256: 602e1b5a6962ca56e063c789f156619e14857640a251de382afc735f00f28df0 + md5: 0cb8283df57c1d013ef612e7c16fc6e0 + depends: + - python + - ros2-ament-cmake-test + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch-testing + - ros2-python-cmake-module + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 OR BSD-3-Clause + size: 24612 + timestamp: 1791439855790 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-testing-ros-0.26.13-np2py312hdd89193_25.conda + sha256: 16cb4a679b23777961da4c5566eb734a6bd81a5f12338c6fae0c1a3051cef822 + md5: 1b07ce82f14c259e626dfe122598c9aa + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch-ros + - ros2-launch-testing + - ros2-rclpy + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 54379 + timestamp: 1791453831527 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-xml-3.4.12-np2py312hdd89193_25.conda + sha256: 2abf97f3efece65b6d910778f7f65115000fbc0fca985c114b3bc9959d195b9e + md5: 444ffdd78901e6da3144d996fa554da4 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 23440 + timestamp: 1791435282972 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-yaml-3.4.12-np2py312hdd89193_25.conda + sha256: 599aeca877f7cf61bdd55da18382c75c8151bbba81b32067c0ad8ec969135974 + md5: 1cbf5ef009d4f736bb0d2d54a9ba6f51 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 24025 + timestamp: 1791435226732 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-liblz4-vendor-0.26.11-np2py312hdd89193_25.conda + sha256: 8861784eec6b77cd50fc8436108c7b0361a3bc0c426833fa6c21a91d8fbd815d + md5: 325f3c7f5e10e9dfd3fa822dc757e9aa + depends: + - lz4 + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 OR BSD-3-Clause OR GPL-2.0-only + size: 21690 + timestamp: 1791433231149 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-libstatistics-collector-1.7.4-np2py312hdd89193_25.conda + sha256: 91372d33e97a4e6d496d09ae381b0c9a7ac9e434de60b72a69f72aa334859e8d + md5: 67ef522917c888e54bbf1ef018771505 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl + - ros2-rcpputils + - ros2-rmw + - ros2-ros-workspace + - ros2-statistics-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 60706 + timestamp: 1791453488214 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-libyaml-vendor-1.6.4-np2py312hdd89193_25.conda + sha256: 906c753ed85fba0d7a213cd0d94bef9d7cc96dacf718be2e0c596957c83b5854 + md5: abfd7116ddc12c5b65ca9617dc5cb447 + depends: + - pkg-config + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - yaml + - yaml-cpp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - yaml-cpp >=0.8.0,<0.9.0a0 + - numpy >=1.25,<3 + - yaml >=0.2.5,<0.3.0a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR MIT + size: 27130 + timestamp: 1791440048602 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-lifecycle-msgs-2.0.4-np2py312hdd89193_25.conda + sha256: 6d0a586a59498e0a5d1f2334ca1dd2673508053189046be2ba09e2c0bc59ed11 + md5: 648cabc465b033d7e895c09a753dc6fe + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 255985 + timestamp: 1791449363653 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-mcap-vendor-0.26.11-np2py312hdd89193_25.conda + sha256: 5d3766229fa0f0f996fbcec9034587a7c696057735b4850fc6ede0472b655a64 + md5: 42142f886936c1f10c3bbe9c5d7935cd + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-liblz4-vendor + - ros2-ros-workspace + - ros2-zstd-vendor + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 165605 + timestamp: 1791435328148 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-message-filters-4.11.17-np2py312hdd89193_25.conda + sha256: 332ffa1700b534c3a2ddd3c795815d08b4b5a8cc00d5425ae2198a0f09a780ed + md5: b69d1ab56e5707be8618e1437711b031 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclcpp + - ros2-rclpy + - ros2-rcutils + - ros2-ros-workspace + - ros2-std-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 96278 + timestamp: 1791460973613 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-nav-msgs-5.3.8-np2py312hdd89193_25.conda + sha256: 87a5e9399d35dd9af16d81c35bca210fdc8fc7a61b317424fac47d0ec8f36fdb + md5: 0195c2a053e6757b356e9028aee49011 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 326270 + timestamp: 1791456734985 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-orocos-kdl-vendor-0.5.2-np2py312hd11d946_25.conda + sha256: d7ad4cd5f811b8600d83c01052f6cae94826b562b213b00665422e47f84f48ce + md5: f658d3204f0d6e07b21a1678a19d8ba8 + depends: + - eigen + - eigen-abi-devel + - orocos-kdl + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-eigen3-cmake-module + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - eigen-abi >=5.0.1.100,<5.0.1.101.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - orocos-kdl >=1.5.4,<1.6.0a0 + license: Apache-2.0 OR LGPL-2.1-or-later + size: 25846 + timestamp: 1791439277971 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-osrf-pycommon-2.1.7-np2py312hdd89193_25.conda + sha256: 30e297050ef9268cdc55f0e609f5187c26e40aa572578f3d18b862af19bef4b6 + md5: 58b711d059cc60d9d0db0863d94a61a0 + depends: + - importlib-metadata + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 60393 + timestamp: 1791428156543 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-pluginlib-5.4.6-np2py312hdd89193_25.conda + sha256: 1da76ce186942c21441b952d041d29ce898c6b224323d185a91211f71d1e5800 + md5: 7efbb49469c45a383f45d7836bc5e3a4 + depends: + - python + - ros2-ament-index-cpp + - ros2-class-loader + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-tinyxml2-vendor + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 117576 + timestamp: 1791444730781 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-pybind11-vendor-3.1.3-np2py312hdd89193_25.conda + sha256: 95a51c80a1da0c8522b496fa1615d3cdcbfbd075828a31ef553b216ec231ea11 + md5: 4dfac4de18f05942e7c249c794d9c997 + depends: + - pybind11 + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 OR BSD-3-Clause + size: 20722 + timestamp: 1791432650451 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-python-cmake-module-0.11.1-np2py312hdd89193_25.conda + sha256: 7d0d22caeab384afb7bb147cbe14845afd2c232a23f448ac1fcef426c9c93d52 + md5: 8055f0da9dee64980b626d2f83ecb143 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 25204 + timestamp: 1791438065097 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-python-orocos-kdl-vendor-0.5.2-np2py312hdd89193_25.conda + sha256: e0ab826cfd51dc662fb4ac4ee7765fb180a01b4432171e31f29e2eaae5ed2356 + md5: 9d8da362b817615062c1123a9ae1b276 + depends: + - python + - python-orocos-kdl + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-orocos-kdl-vendor + - ros2-pybind11-vendor + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python-orocos-kdl >=1.5.4,<1.6.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 OR LGPL-2.1-or-later + size: 25268 + timestamp: 1791440274828 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcl-9.2.11-np2py312hdd89193_25.conda + sha256: 96393f68d0765b744b987fbb632048824d9eee3faea4b3f8ac5fe34de478ab6d + md5: ac5903dabfe7126a6e5d1c53d7b60026 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-libyaml-vendor + - ros2-rcl-interfaces + - ros2-rcl-logging-interface + - ros2-rcl-logging-spdlog + - ros2-rcl-yaml-param-parser + - ros2-rcutils + - ros2-rmw + - ros2-rmw-implementation + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-service-msgs + - ros2-tracetools + - ros2-type-description-interfaces + - yaml + - yaml-cpp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - yaml-cpp >=0.8.0,<0.9.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - yaml >=0.2.5,<0.3.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 198146 + timestamp: 1791452391489 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcl-action-9.2.11-np2py312hdd89193_25.conda + sha256: c33251e42831ad587f00d5b77bdb1cbf51003bf6401a6c5206f49b382b42eed1 + md5: 9fc6d6c0d22f7e4a7711ed9dbfee284c + depends: + - python + - ros2-action-msgs + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 83917 + timestamp: 1791452507071 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcl-interfaces-2.0.4-np2py312hdd89193_25.conda + sha256: 32c37379c628354b30b933fb4c9d00506a4863d984e6dd36d81825ce54c91fe4 + md5: 48a1ecbe4951c9c99653ce0ce8affb5e + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 489270 + timestamp: 1791449236400 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcl-lifecycle-9.2.11-np2py312hdd89193_25.conda + sha256: b427cbf95349ec154020fd916251841ca08105f9fd0f2750298ac29218582b30 + md5: d7b96b8cbfb1a86050a619106d176017 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-lifecycle-msgs + - ros2-rcl + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-tracetools + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 57945 + timestamp: 1791452457160 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcl-logging-interface-3.1.1-np2py312hdd89193_25.conda + sha256: 99149dd1645644001c97504e8d3244ab45fecbb7c81ba6eb1aec1027844bb68c + md5: 0a19fdd689c8d271be46393390f0dcee + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 36047 + timestamp: 1791443172117 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcl-logging-spdlog-3.1.1-np2py312hcd4b164_25.conda + sha256: dbde81970b8f19068b8c35c30d0c679fa748518db72149c9c2ca43b02682ecb3 + md5: 0f2b95279671fd5da1b77f6e3b000a88 + depends: + - fmt + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl-logging-interface + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-spdlog-vendor + - spdlog + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - spdlog >=1.17.0,<1.18.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - fmt >=12.1.0,<12.2.0a0 + license: Apache-2.0 + size: 48059 + timestamp: 1791444670352 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcl-yaml-param-parser-9.2.11-np2py312hdd89193_25.conda + sha256: 83663c045f55b816550b0aa856d716cc9b68037a650292cbc545fe6e481e26c5 + md5: 1e8607ee360f448b6d45a4ceca2e8b33 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-libyaml-vendor + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - yaml + - yaml-cpp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - yaml >=0.2.5,<0.3.0a0 + - yaml-cpp >=0.8.0,<0.9.0a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 53250 + timestamp: 1791446344310 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rclcpp-28.1.22-np2py312hdd89193_25.conda + sha256: 6f69f7bb3a31125c06342cf7ad6d7169f263ad815f8c3ffca565bcbc6fee3a6e + md5: 26e8772cb1d73bccc465ef7ab3f92a3f + depends: + - python + - ros2-ament-index-cpp + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-libstatistics-collector + - ros2-rcl + - ros2-rcl-interfaces + - ros2-rcl-logging-interface + - ros2-rcl-yaml-param-parser + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosgraph-msgs + - ros2-rosidl-dynamic-typesupport + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-cpp + - ros2-statistics-msgs + - ros2-tracetools + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 742676 + timestamp: 1791455533631 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rclcpp-action-28.1.22-np2py312hdd89193_25.conda + sha256: 8dec4153be02ce47162d7f0c36f85ecfcd402e809e931e9e32b5773e861e1686 + md5: d31f915b0f3688feff6645a5ba0c7223 + depends: + - python + - ros2-action-msgs + - ros2-ament-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl + - ros2-rcl-action + - ros2-rclcpp + - ros2-rcpputils + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 134118 + timestamp: 1791457842093 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rclcpp-components-28.1.22-np2py312hdd89193_25.conda + sha256: 242dce13a3d82de2a6e2a1865ee07b3f596540f3aaa906d3a6bc79f2306958c7 + md5: dfc34f80bfd5169a178de89bccbd9a05 + depends: + - python + - ros2-ament-index-cpp + - ros2-class-loader + - ros2-composition-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclcpp + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 116684 + timestamp: 1791457924743 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rclcpp-lifecycle-28.1.22-np2py312hdd89193_25.conda + sha256: 2bb0934ce3a03da4d477c800fcddb5eceb324578f7a9339cb99bfc0ea6215e58 + md5: f291c57d5f597cb67b4fa447dc3e8fc6 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-lifecycle-msgs + - ros2-rcl + - ros2-rcl-interfaces + - ros2-rcl-lifecycle + - ros2-rclcpp + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-typesupport-cpp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 99991 + timestamp: 1791457758034 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rclpy-7.1.12-np2py312hdd89193_25.conda + sha256: a5f50b78a3c2b7d66e668a85e53470b69b008d75e467cbae84d826bb9519f2e1 + md5: 4ca9f02ecb234e166503b18a4af29426 + depends: + - python + - pyyaml + - ros2-action-msgs + - ros2-ament-index-python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-lifecycle-msgs + - ros2-rcl + - ros2-rcl-action + - ros2-rcl-interfaces + - ros2-rcl-lifecycle + - ros2-rcl-logging-interface + - ros2-rcl-yaml-param-parser + - ros2-rmw + - ros2-rmw-implementation + - ros2-ros-workspace + - ros2-rosgraph-msgs + - ros2-rosidl-runtime-c + - ros2-rpyutils + - ros2-unique-identifier-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 588911 + timestamp: 1791452560550 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcpputils-2.11.4-np2py312hdd89193_25.conda + sha256: 4b4b0d6fcb568683e3519aa60fe402013d04a1d899f01f7cfffd30158acd8a2c + md5: ee42c0c3824480d9c7156252156681c9 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR BSD-3-Clause + size: 86193 + timestamp: 1791441849354 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcutils-6.7.6-np2py312hdd89193_25.conda + sha256: d71cdd650c6bf3a2549504af8428f19bcfc9c88586648513165953648fc81341 + md5: a9d8b542b0a1ab10426931a3bf948f72 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 127468 + timestamp: 1791440954115 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-7.3.4-np2py312hdd89193_25.conda + sha256: a5f8e20616574cd4f935514db0cb0bb684eddd674545b850c62a35ba9cb60603 + md5: 82f4ac2ac7dc4773aaff0af1c675a6a4 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-dynamic-typesupport + - ros2-rosidl-runtime-c + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 99056 + timestamp: 1791444492609 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-connextdds-0.22.3-np2py312hdd89193_25.conda + sha256: 97243d03b055df3e2f2002a6b7a84c8a36c91cf0fb1b898739b4917a22d28323 + md5: 31283001f7374a4563f0cec8e9429af9 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rmw-connextdds-common + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 29287 + timestamp: 1791452288835 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-connextdds-common-0.22.3-np2py312hdd89193_25.conda + sha256: ef3ccad2fb8df1c14cb186116ff1bf1d1db1ccaeff9cefe4fca8705d4c402ea2 + md5: fd5e49ca9eeba6aa8fb0b44719ff80ce + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - ros2-rti-connext-dds-cmake-module + - ros2-tracetools + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 51163 + timestamp: 1791451635864 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-cyclonedds-cpp-2.2.4-np2py312hdd89193_25.conda + sha256: ae3eb66a207d6d53d4a31bcd40f0a136a12e7712a56018d768eba7e9dc1d2954 + md5: 2e02fe9f383dc2c89ce1fed697ec8558 + depends: + - python + - ros2-cyclonedds + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-iceoryx-binding-c + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - ros2-tracetools + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 184113 + timestamp: 1791451708209 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-dds-common-3.1.1-np2py312hdd89193_25.conda + sha256: a9b170a56332c674952ae47220e4df1286d89d1c524d4ed7e198bf4d01b2eb02 + md5: 5de122577414abdf6177ecddc2e073f3 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 188295 + timestamp: 1791448902452 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-fastrtps-cpp-8.4.4-np2py312hdd89193_25.conda + sha256: 48f09e68bb8baf8e3ab66f683cb7c37051cb2e40cdf62d2cbb1243a555bf0098 + md5: 192987b691868ddab7be802313e402ca + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps + - ros2-fastrtps-cmake-module + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-rmw-fastrtps-shared-cpp + - ros2-ros-workspace + - ros2-rosidl-dynamic-typesupport + - ros2-rosidl-dynamic-typesupport-fastrtps + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-tracetools + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 148671 + timestamp: 1791452199830 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-fastrtps-dynamic-cpp-8.4.4-np2py312hdd89193_25.conda + sha256: fa72b307f1615b28d5e138cc4999ba1650bd41336b4da8a4ceeea3f04957e008 + md5: 62cd75e198b9bff01f4dd84a2e7da59a + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps + - ros2-fastrtps-cmake-module + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-rmw-fastrtps-shared-cpp + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 173657 + timestamp: 1791452047307 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-fastrtps-shared-cpp-8.4.4-np2py312hdd89193_25.conda + sha256: adab142b429987fd0d99f8fbd52107b56cf29137f92a033006df4c003ddc020d + md5: 7f1fa6d7e2175cb7fcb5009c43014bfe + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps + - ros2-fastrtps-cmake-module + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-dds-common + - ros2-ros-workspace + - ros2-rosidl-dynamic-typesupport + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - ros2-tracetools + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 238769 + timestamp: 1791451459908 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-implementation-2.15.6-np2py312hdd89193_25.conda + sha256: 822f97461ed65c556e06207cc4f92c5565c4f865e741fe8e2e695d93ab8d5538 + md5: 29d5d788480a51ae1c3553f2e3d6a906 + depends: + - python + - ros2-ament-index-cpp + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw-connextdds + - ros2-rmw-cyclonedds-cpp + - ros2-rmw-fastrtps-cpp + - ros2-rmw-fastrtps-dynamic-cpp + - ros2-rmw-implementation-cmake + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 58505 + timestamp: 1791452336001 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-implementation-cmake-7.3.4-np2py312hdd89193_25.conda + sha256: 400f743b1375a062401662799b33d66c37dbdcc9c32e0a87232c0162e5688db8 + md5: e2e25ca57628f49d4c63abb9f8c7f833 + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 26806 + timestamp: 1791438973999 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-zenoh-cpp-0.2.11-np2py312hbb4efd0_25.conda + sha256: dc3953e3c3834fa5b755ea2813b27e46da71de32bd519e7acc5d088d2cd62a4d + md5: 0327ffff49dbc0e625cd41ef22147a96 + depends: + - python + - ros2-ament-index-cpp + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-tracetools + - ros2-zenoh-cpp-vendor + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libzenohc >=1.9.0,<1.9.1.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR BSD-3-Clause + size: 221979 + timestamp: 1791447718360 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-robot-state-publisher-3.3.4-np2py312hdd89193_25.conda + sha256: 2991c39c4e9e9405e424a2356242c0917579574f129080aa5dbb095cab896809 + md5: 3949e98d31aaa927620965ff606df4c3 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-kdl-parser + - ros2-orocos-kdl-vendor + - ros2-rcl-interfaces + - ros2-rclcpp + - ros2-rclcpp-components + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-std-msgs + - ros2-tf2-ros + - ros2-urdf + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 908023 + timestamp: 1791467203726 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros-base-0.11.0-np2py312hdd89193_25.conda + sha256: 0b06d83d66ad182ce61b78dd688ec87324a027f45099b54255ed2ccb4a14c812 + md5: 56a0b64cf57a6bb8081ba11e88269737 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry2 + - ros2-kdl-parser + - ros2-robot-state-publisher + - ros2-ros-core + - ros2-ros-workspace + - ros2-rosbag2 + - ros2-urdf + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 19871 + timestamp: 1791501272870 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros-core-0.11.0-np2py312hdd89193_25.conda + sha256: 2850d8907d5fd6888facf7048102b10a36fa2ae0f99bc03e152ce9cfece5684e + md5: 9fbe2b575cfedfd03087048601f79bb0 + depends: + - python + - ros2-ament-cmake + - ros2-ament-cmake-auto + - ros2-ament-cmake-gmock + - ros2-ament-cmake-gtest + - ros2-ament-cmake-pytest + - ros2-ament-cmake-ros + - ros2-ament-index-cpp + - ros2-ament-index-python + - ros2-ament-lint-auto + - ros2-ament-lint-common + - ros2-class-loader + - ros2-common-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch + - ros2-launch-ros + - ros2-launch-testing + - ros2-launch-testing-ament-cmake + - ros2-launch-testing-ros + - ros2-launch-xml + - ros2-launch-yaml + - ros2-pluginlib + - ros2-rcl-lifecycle + - ros2-rclcpp + - ros2-rclcpp-action + - ros2-rclcpp-lifecycle + - ros2-rclpy + - ros2-ros-environment + - ros2-ros-workspace + - ros2-ros2cli-common-extensions + - ros2-ros2launch + - ros2-rosidl-default-generators + - ros2-rosidl-default-runtime + - ros2-sros2 + - ros2-sros2-cmake + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 20527 + timestamp: 1791476681758 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros-environment-4.2.1-np2py312hdd89193_25.conda + sha256: fdc90756e15b4fbb3aad64f204416c5f25b2e52473a91b327b95b020081b8ddc + md5: 95107dcf935a3cd526d0b43efb3a2ebb + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 18596 + timestamp: 1791427774836 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros-workspace-1.0.3-np2py312hdd89193_25.conda + sha256: 12b58d7b6c80989451faee3a423b33bade07690040d9b81490fd4e4e4fbaee2d + md5: b38e69ee186d79de4250d7a35008ddd9 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 32669 + timestamp: 1791427727589 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2action-0.32.13-np2py312hdd89193_25.conda + sha256: 4407f4bddab8ef6ce48c23aaf37608d4c84d5aee2bd4b1b872b868ad71138f51 + md5: 0c93a0539072cba72a7e868171e801f5 + depends: + - python + - ros2-action-msgs + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-rosidl-runtime-py + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 44562 + timestamp: 1791456541682 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2bag-0.26.11-np2py312hdd89193_25.conda + sha256: dc849fae1f2aaa33fa23c5de15db335b68ae30770526e14c89a031f5e89f52d9 + md5: 46c79bccdf5caf8da68283b5e4fe7eee + depends: + - python + - pyyaml + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-rosbag2-py + - ros2-rosbag2-storage-default-plugins + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 67037 + timestamp: 1791494366925 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2cli-0.32.13-np2py312hdd89193_25.conda + sha256: cec64c6375aae137dc6721fe2a2a2c400cc275242cd67f83e19de9c36a4a3bfa + md5: 679aa480ae441f54826b107ab9f898fb + depends: + - argcomplete + - importlib-metadata + - packaging + - psutil + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 85443 + timestamp: 1791453054148 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2cli-common-extensions-0.3.1-np2py312hdd89193_25.conda + sha256: a1221c8561e56552f5f04e594246d3cb9973560a7d77e12eae53940bab8e9890 + md5: 21db86405755508361e9394ce21676f5 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch-xml + - ros2-launch-yaml + - ros2-ros-workspace + - ros2-ros2action + - ros2-ros2cli + - ros2-ros2component + - ros2-ros2doctor + - ros2-ros2interface + - ros2-ros2launch + - ros2-ros2lifecycle + - ros2-ros2multicast + - ros2-ros2node + - ros2-ros2param + - ros2-ros2pkg + - ros2-ros2plugin + - ros2-ros2run + - ros2-ros2service + - ros2-ros2topic + - ros2-sros2 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 24138 + timestamp: 1791467501631 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2component-0.32.13-np2py312hdd89193_25.conda + sha256: 3367ffa087acd3269144ebdc095cc7b3f6afab20f1d045041bd3733396ec24a1 + md5: 83c991f6121b304bac66608f1d5ac91f + depends: + - python + - ros2-ament-index-python + - ros2-composition-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl-interfaces + - ros2-rclcpp-components + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2node + - ros2-ros2param + - ros2-ros2pkg + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 35246 + timestamp: 1791464763962 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2doctor-0.32.13-np2py312hdd89193_25.conda + sha256: af9d1f4acea6536fa7e850baa7cc21f31b1b7cb38d19843c5d3f26114980855b + md5: d3acd750f4047bef8d22f04aa83a8dd0 + depends: + - catkin_pkg + - importlib-metadata + - psutil + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-environment + - ros2-ros-workspace + - ros2-ros2cli + - ros2-std-msgs + - rosdistro + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 65233 + timestamp: 1791456495492 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2interface-0.32.13-np2py312hdd89193_25.conda + sha256: bdb432062ffe8800ec4ecfad5c753322ad41577e7f40940ccee6908deffe08f6 + md5: cfa7eb88f8c18ff50e19954773c78496 + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - ros2-rosidl-adapter + - ros2-rosidl-runtime-py + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 44366 + timestamp: 1791456445356 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2launch-0.26.13-np2py312hdd89193_25.conda + sha256: 61e7747cdd918a22e9c306ffd5a1e941a834f037028cd33abca7bbbdd9e06ec2 + md5: f0b97254574ee65134a4cf2c63658460 + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-launch + - ros2-launch-ros + - ros2-launch-xml + - ros2-launch-yaml + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2pkg + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 43799 + timestamp: 1791458574421 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2lifecycle-0.32.13-np2py312hdd89193_25.conda + sha256: b67cc405d79882b0702d8b9d3232dfec52cb2bfc8d780f7c38d2d0afe54d7a76 + md5: 444887e01e1cdfec2702d5bf6530bcbb + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-lifecycle-msgs + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2node + - ros2-ros2service + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 42301 + timestamp: 1791464701849 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2multicast-0.32.13-np2py312hdd89193_25.conda + sha256: 36aa58209d9de981d6af5e4652b824c01c997acd0350a773d3c9da1023004154 + md5: 96ecb0e633bf63f31c4dc0022a879dec + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 22867 + timestamp: 1791454076011 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2node-0.32.13-np2py312hdd89193_25.conda + sha256: 50535f8b95c345cdb6d363310f731c31caa51520326288414631c7ae1a66edf3 + md5: e192d6f9efb1f4cdda232ce05f88a591 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 40162 + timestamp: 1791456231540 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2param-0.32.13-np2py312hdd89193_25.conda + sha256: 19073c07774ec0e90f96afeee894cdd8aad13397e767e150aaa522448a60098e + md5: ffab9c948f730ae2e21850fd00a6755c + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl-interfaces + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2node + - ros2-ros2service + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 47281 + timestamp: 1791461205621 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2pkg-0.32.13-np2py312hdd89193_25.conda + sha256: b565c621ba3e3cc795455a5da43c97f6d564966035daa335e043b95691ae24ed + md5: bc531f86e5351315935a2c41732ca45c + depends: + - catkin_pkg + - empy + - importlib_resources + - python + - ros2-ament-copyright + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 55534 + timestamp: 1791456399735 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2plugin-5.4.6-np2py312hdd89193_25.conda + sha256: 5dabc018963bbe054a7fc0f793008ac31b0f2e366b729dd1c2fd27d898f12acb + md5: f5cd5683cb5391168dccfc8551359bc7 + depends: + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2pkg + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 23216 + timestamp: 1791458533136 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2run-0.32.13-np2py312hdd89193_25.conda + sha256: 8fd4dc53fc7e9ca111a42f2fa304c7e04d0d82355527a19618239f5a9e628500 + md5: 3971ea1c862213ce7e449fe95bd670d3 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2pkg + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 22145 + timestamp: 1791458502621 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2service-0.32.13-np2py312hdd89193_25.conda + sha256: be578780d7e1c571c544e28db4bf150442bc63b2cd046a23aee9c850673b8bb3 + md5: 762e910e851d0a877c704028a54aa999 + depends: + - python + - pyyaml + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-ros2topic + - ros2-rosidl-runtime-py + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 48466 + timestamp: 1791458202756 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-ros2topic-0.32.13-np2py312hdd89193_25.conda + sha256: 2b4cf4b824f5cce1392fc09cd5cbb301dbe202394043cd14708b50b27ef0bf83 + md5: a4ba2d30689f334216b09cbcb78f64fd + depends: + - numpy + - python + - pyyaml + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - ros2-rosidl-runtime-py + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 OR BSD-3-Clause + size: 71122 + timestamp: 1791456045130 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-0.26.11-np2py312hdd89193_25.conda + sha256: 7cf06ed781e362e7e463f98e16ff57bf6cb7635df656a14287d99c3177719071 + md5: c5389f95a3e576b4e89ae93774c37668 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-ros2bag + - ros2-rosbag2-compression + - ros2-rosbag2-compression-zstd + - ros2-rosbag2-cpp + - ros2-rosbag2-py + - ros2-rosbag2-storage + - ros2-rosbag2-storage-default-plugins + - ros2-rosbag2-transport + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 32987 + timestamp: 1791499200950 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-compression-0.26.11-np2py312hdd89193_25.conda + sha256: 5548c86742cbb446c7cd407420fc4f34d1f86fe8f1cca3c8043e3d4451f15bb6 + md5: bc0197d412c8d21621e6c16c6af9c890 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosbag2-cpp + - ros2-rosbag2-storage + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 161881 + timestamp: 1791479104712 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-compression-zstd-0.26.11-np2py312hdd89193_25.conda + sha256: 81c4e71b6be052924ae7989cc3197100cbe310589a7c3f7fe9431501bddb0f1d + md5: 34a7c816a89fa04b639da45946f4b680 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-pluginlib + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosbag2-compression + - ros2-zstd-vendor + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 72743 + timestamp: 1791482394135 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-cpp-0.26.11-np2py312hdd89193_25.conda + sha256: 02d2ffb2ab06b416c68645f00588a7323e0d2fa52ce6bae8f0a86b301bf83baf + md5: 4aa226895d1d23224450580b7e4366cb + depends: + - python + - ros2-ament-index-cpp + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-pluginlib + - ros2-rclcpp + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-rmw-implementation + - ros2-ros-workspace + - ros2-rosbag2-storage + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-cpp + - ros2-rosidl-typesupport-introspection-cpp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 280878 + timestamp: 1791473060221 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-interfaces-0.26.11-np2py312hdd89193_25.conda + sha256: dee8ff42548bb402364bfaecba735af489375887a8fcdab6df0e327f82d99b8a + md5: 138815b60777b54874f5d1b998be10e2 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 495478 + timestamp: 1791450193075 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-py-0.26.11-np2py312hdd89193_25.conda + sha256: 388364b4c6a88f3435702aa7d31b2855fc6ca1570b37947ac5cf501d98c26904 + md5: 05d768c2557910692bf27b2d81153792 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-pybind11-vendor + - ros2-rclpy + - ros2-ros-workspace + - ros2-rosbag2-compression + - ros2-rosbag2-cpp + - ros2-rosbag2-storage + - ros2-rosbag2-transport + - ros2-rpyutils + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 567079 + timestamp: 1791490746943 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-storage-0.26.11-np2py312hdd89193_25.conda + sha256: da49a8527aa72b3cfad8671ba6b21688d06c3df72f978103ddfd9886cb30902d + md5: b34cc1ab9c0c458e03821e5b51d8dffc + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-pluginlib + - ros2-rclcpp + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-yaml-cpp-vendor + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 192326 + timestamp: 1791462336856 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-storage-default-plugins-0.26.11-np2py312hdd89193_25.conda + sha256: 2538e8a66cf4fe02a442c1e6f71785e22e913150df08d64d0210ebc8df016c19 + md5: ba1549f06ab996911fdc866303163325 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosbag2-storage-mcap + - ros2-rosbag2-storage-sqlite3 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 19913 + timestamp: 1791468389002 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-storage-mcap-0.26.11-np2py312hdd89193_25.conda + sha256: 74981289547df60f31e4f8e454157ba89e27823fd09f21781ab573a4e9c46242 + md5: d62f3a65fdc2079abc0b9c638a0fe410 + depends: + - python + - ros2-ament-index-cpp + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-mcap-vendor + - ros2-pluginlib + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosbag2-storage + - ros2-yaml-cpp-vendor + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 134507 + timestamp: 1791464869718 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-storage-sqlite3-0.26.11-np2py312hdd89193_25.conda + sha256: 90c2fe6591c9c1c371c575a913b0a9cf84c051ec5944baa3ce631d6dd567a713 + md5: 7602fded93a4f02c67df29faf058137a + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-pluginlib + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosbag2-storage + - ros2-sqlite3-vendor + - ros2-yaml-cpp-vendor + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 180045 + timestamp: 1791464794527 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosbag2-transport-0.26.11-np2py312hdd89193_25.conda + sha256: 68d9ffac0f3435d505e67e15979bf6a67acb11a8fb1e0fa6d1fbfd4dfcb5cc41 + md5: e3812c9ce6f0e5833b13061def4114c4 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-keyboard-handler + - ros2-rclcpp + - ros2-rclcpp-components + - ros2-rcpputils + - ros2-rcutils + - ros2-rmw + - ros2-ros-workspace + - ros2-rosbag2-compression + - ros2-rosbag2-cpp + - ros2-rosbag2-interfaces + - ros2-rosbag2-storage + - ros2-yaml-cpp-vendor + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 360305 + timestamp: 1791484612070 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosgraph-msgs-2.0.4-np2py312hdd89193_25.conda + sha256: 18bb41ed0dd2c746ec127dc03442e24fd7158c31059d466c224638cea4752036 + md5: ace1b85158b16c94359959748ec16a5c + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl-interfaces + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 221218 + timestamp: 1791451778686 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-adapter-4.6.9-np2py312hdd89193_25.conda + sha256: 6ddcd750c7b0792686aef218555954c11a22f1ce7150a8f12301fa27ff67dab0 + md5: 5cf09f32d4f67e768310407c1d7d807e + depends: + - empy + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 60918 + timestamp: 1791438140875 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-cli-4.6.9-np2py312hdd89193_25.conda + sha256: 00de42c5377b8c9cc360a209b1d943ee0838a0c599f563fabd27bdcb45ff44be + md5: b51c62240fcc918c200d8428a565d2e2 + depends: + - argcomplete + - importlib-metadata + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 47685 + timestamp: 1791432527799 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-cmake-4.6.9-np2py312hdd89193_25.conda + sha256: e9fd78d01a331160dcdc9484fc6ce8433b2b827ea6399a5b5a3d6dcc5c187ca3 + md5: 31090c3f71dd4965ae763999f6c9db47 + depends: + - empy + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-pycommon + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 33931 + timestamp: 1791441807994 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-core-generators-0.2.1-np2py312hdd89193_25.conda + sha256: 61471b80b025943c680fb0c736b8ae14a47bd25bc29be57f68943978921d1570 + md5: 18abbe252459279c221626c93e8968a5 + depends: + - python + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cmake + - ros2-rosidl-generator-c + - ros2-rosidl-generator-cpp + - ros2-rosidl-generator-py + - ros2-rosidl-generator-rs + - ros2-rosidl-generator-type-description + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-cpp + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 29882 + timestamp: 1791448140948 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-core-runtime-0.2.1-np2py312hdd89193_25.conda + sha256: 52f2fde4e9d8845fe9524c5fa0ca938e423aeeb5d0dd7e1dc99211da359aae9a + md5: 0ae5269f012faf6784988fec4c568c36 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-generator-py + - ros2-rosidl-generator-rs + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-cpp + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-introspection-c + - ros2-rosidl-typesupport-introspection-cpp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 28929 + timestamp: 1791448103868 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-default-generators-1.6.1-np2py312hdd89193_25.conda + sha256: 961e14a697f2ce823f2994150bebb05e66f148d223e480c09d9ec9d5ebe6dc0a + md5: e2c53e9b9871f656f1b12215bc166fa1 + depends: + - python + - ros2-action-msgs + - ros2-ament-cmake-core + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-generators + - ros2-service-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 30022 + timestamp: 1791448780589 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-default-runtime-1.6.1-np2py312hdd89193_25.conda + sha256: b8318cfb52c8c7c9b177b1499690c9415832af003a1e81367ff50f17b19a722d + md5: 2d2c3166748d8992c4af402bc59a710b + depends: + - python + - ros2-action-msgs + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - ros2-service-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 29488 + timestamp: 1791448680771 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-dynamic-typesupport-0.1.2-np2py312hdd89193_25.conda + sha256: 86679c9d0c4d7c9a4daebda93c0009d39c5809da5c6fb11b828701265444ed0e + md5: ddfcc55cef9396ce8e96ddc060a3a273 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 67906 + timestamp: 1791443113334 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-dynamic-typesupport-fastrtps-0.1.0-np2py312hdd89193_25.conda + sha256: e05787e0488cfb2ff4cc8d1deb05f2e179886855dec36aaaab772e5b31e2f5f2 + md5: c11b7d7261f02894aeabf457a60ea678 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-dynamic-typesupport + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 83301 + timestamp: 1791444608771 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-generator-c-4.6.9-np2py312hdd89193_25.conda + sha256: e5010314491d717e3a3bc62b034b876fb1af1b6bc33ce2493e6fc12909801242 + md5: 88053989781037704adc89462bc09112 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-cmake + - ros2-rosidl-generator-type-description + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-typesupport-interface + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 50598 + timestamp: 1791443051273 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-generator-cpp-4.6.9-np2py312hdd89193_25.conda + sha256: 8d73a7b6cb74a6554f22862b42f4d96f8979b9e6a2c095176acbdd80b401e1b1 + md5: 7d134addd6e37c17ec65ad110ce9ee02 + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-cmake + - ros2-rosidl-generator-c + - ros2-rosidl-generator-type-description + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-cpp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 47330 + timestamp: 1791444358947 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-generator-py-0.22.2-np2py312hdd89193_25.conda + sha256: c10a37992fd6396405818183583923a35c6a54e902ac2a426b42f80f84f636e6 + md5: ae559180b4a2016b665155a5d636eff3 + depends: + - numpy + - python + - ros2-ament-cmake + - ros2-ament-cmake-cppcheck + - ros2-ament-cmake-cpplint + - ros2-ament-cmake-flake8 + - ros2-ament-cmake-pep257 + - ros2-ament-cmake-uncrustify + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-python-cmake-module + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-interface + - ros2-rpyutils + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 58845 + timestamp: 1791448060455 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-generator-rs-0.5.0-np2py312hdd89193_25.conda + sha256: be1a76e9e596cd310126905a2c2d11ed2fbabac2bb72328d9529c3550afcd25b + md5: 12ef38b413339e447ff25b5424eec8a2 + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-environment + - ros2-ros-workspace + - ros2-rosidl-generator-c + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-interface + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 48413 + timestamp: 1791448016033 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-generator-type-description-4.6.9-np2py312hdd89193_25.conda + sha256: 266c4eeb4d80e78cde8a97c59d360f457afbd6f4f0125749868c29a44aed3223 + md5: a6e2c7f890ae3dd465bee859a5b7a3cb + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-parser + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 46112 + timestamp: 1791441116493 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-parser-4.6.9-np2py312hdd89193_25.conda + sha256: 7cfd51a9b22607e952feb7084cf02d02fa910bc00e6daa9fe4b0edc4b1cd984b + md5: 791fc9158b31eb910140382b0c93ceca + depends: + - lark-parser + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-adapter + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 57913 + timestamp: 1791439950519 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-pycommon-4.6.9-np2py312hdd89193_25.conda + sha256: 7bb16587905d9c882f48882a034e6f75be409e5eddd4ba074b8b3fe8e6e24059 + md5: a5ae8209f8294e04021518857c85f4da + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-parser + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 23568 + timestamp: 1791441073791 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-runtime-c-4.6.9-np2py312hdd89193_25.conda + sha256: 75d1dbbed2277e9b75e856dc5dd7849f68d4e4ac8c37efa3255a64b065916005 + md5: 1440804fbecc658f41040dbe5c67d802 + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-typesupport-interface + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 87380 + timestamp: 1791441709039 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-runtime-cpp-4.6.9-np2py312hdd89193_25.conda + sha256: 4e918b136f4b95cb075c63b6cd0b87e846ee25768bae1ec7a389d7579fff4e6c + md5: e526fd39c292b269213b26ce153c56f9 + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-runtime-c + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 38292 + timestamp: 1791442903763 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-runtime-py-0.13.2-np2py312hdd89193_25.conda + sha256: 69025f33298397eaa25ee246e3e7adf4494fb48318d47db7d88bdfc9c3cc805f + md5: 15de3d07f6bd062f0c2d0f693e85f220 + depends: + - numpy + - python + - pyyaml + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-parser + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 41284 + timestamp: 1791453778366 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-c-3.2.3-np2py312hdd89193_25.conda + sha256: 4804d1ad4650583ae1cb6a323e5ac25427dfc91ced4eb7b4fbe2c8b41060ad74 + md5: 3bfbe341b7f75399939f18c9c094cd8c + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-fastrtps-c + - ros2-rosidl-typesupport-interface + - ros2-rosidl-typesupport-introspection-c + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 51540 + timestamp: 1791447662181 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-cpp-3.2.3-np2py312hdd89193_25.conda + sha256: 051254360a42e72d37836bdb6c1d2839f55bde321ad1f6c9f35d8ee733cb79df + md5: b3e49343aeaa80968cdc0920484d0f9a + depends: + - python + - ros2-ament-cmake-core + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcpputils + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-generator-type-description + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-c + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-interface + - ros2-rosidl-typesupport-introspection-cpp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 50850 + timestamp: 1791447911317 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-fastrtps-c-3.6.4-np2py312hdd89193_25.conda + sha256: 140f591f399fada876fd4fb8eb8e23b0f1f914e40ba8c66f4b3236f30460e868 + md5: 3182209becdb925e2dc7215ee793e0c9 + depends: + - python + - ros2-ament-cmake-ros + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps-cmake-module + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-fastrtps-cpp + - ros2-rosidl-typesupport-interface + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 53330 + timestamp: 1791447104761 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-fastrtps-cpp-3.6.4-np2py312hdd89193_25.conda + sha256: 6ccd5c13dbc6d98e0909e46112d11d113ea9ee49a124a627cd20c00b0da7a1bd + md5: 482d8347fcd41c056076592e4a5f8687 + depends: + - python + - ros2-ament-cmake-ros + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-fastcdr + - ros2-fastrtps-cmake-module + - ros2-rmw + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-generator-c + - ros2-rosidl-generator-cpp + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-interface + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 54293 + timestamp: 1791446080054 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-interface-4.6.9-np2py312hdd89193_25.conda + sha256: 12f908ce7aec18890190cccb11dd03ab22199825780e8740ef11870285c4b837 + md5: 424a99525e3d5bd7f24e0613cf2058c8 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 26692 + timestamp: 1791438279167 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-introspection-c-4.6.9-np2py312hdd89193_25.conda + sha256: e2e72c4403d403e70847b9cac8fcd201f156568438d74e871b6a5504fb512d0a + md5: f287f8f509ff72e014dcdb59261b525f + depends: + - python + - ros2-ament-cmake + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-cmake + - ros2-rosidl-generator-c + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-typesupport-interface + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 48896 + timestamp: 1791444552054 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-introspection-cpp-4.6.9-np2py312hdd89193_25.conda + sha256: adf98e216e173f28731bedc067bf5aaea0a04427ec5376c117b2f13b25c9a0ea + md5: 8341aeaff3ab22f81013ae60f3aa2cad + depends: + - python + - ros2-ament-cmake + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-cli + - ros2-rosidl-cmake + - ros2-rosidl-generator-c + - ros2-rosidl-generator-cpp + - ros2-rosidl-parser + - ros2-rosidl-pycommon + - ros2-rosidl-runtime-c + - ros2-rosidl-runtime-cpp + - ros2-rosidl-typesupport-interface + - ros2-rosidl-typesupport-introspection-c + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 49059 + timestamp: 1791446276093 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rpyutils-0.4.2-np2py312hdd89193_25.conda + sha256: feb51724aff743c03e9c25080663f212eeac6741210a040ffff1f35618dae0e1 + md5: 3d8299e36e0c551683f76cd49f0e1d3a + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 19968 + timestamp: 1791432613829 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rti-connext-dds-cmake-module-0.22.3-np2py312hdd89193_25.conda + sha256: d75faf3b204cb78f9b9418c2ba2f6eaa0bc6af82df9ad9bedf1aa07a5f05361d + md5: 3f86ca6524ea9350f03c2f2ca4d90515 + depends: + - python + - ros2-ament-cmake + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 28976 + timestamp: 1791438938565 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-sensor-msgs-5.3.8-np2py312hdd89193_25.conda + sha256: f922fb501e62292da3999a41a2fec60b7e7b5158ed878b6f175ea8d3023fc13b + md5: f97ced23a6231b329ad1a4d68d9d5ae7 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 495824 + timestamp: 1791455837284 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-sensor-msgs-py-5.3.8-np2py312hdd89193_25.conda + sha256: 1a54d0ed3c4c36b33f61a03b9562642ee274b19df69abddf26c17b387b118cbd + md5: 199514f09ffc8a07f43d64ef974737cc + depends: + - numpy + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-std-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 29108 + timestamp: 1791459445964 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-service-msgs-2.0.4-np2py312hdd89193_25.conda + sha256: f529fac179097e99a18ab154de0ebd93067b923d1c8d85ad288c53e3f304ccb7 + md5: 276a815bb604765cee357024c86689be + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 88534 + timestamp: 1791448302715 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-shape-msgs-5.3.8-np2py312hdd89193_25.conda + sha256: 10815e30efde3d2a6a55ed446ccb37dec6fc1e3b5b527d4e7f401048fdcbc1b5 + md5: ec20b6119ac7fca47248ebf21cf635d0 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 132069 + timestamp: 1791456592565 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-spdlog-vendor-1.6.2-np2py312hcd4b164_25.conda + sha256: 480cd10cbe7ae3664e7bd966371d3170e4018d3e079d704c3f9e0c59f1896639 + md5: 9c27990dedad1826c817281479f22c7b + depends: + - fmt + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - spdlog + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - spdlog >=1.17.0,<1.18.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - fmt >=12.1.0,<12.2.0a0 + license: Apache-2.0 OR MIT + size: 24763 + timestamp: 1791439050933 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-sqlite3-vendor-0.26.11-np2py312heb1eb2f_25.conda + sha256: 53c7756d24662e51ef360313d688e473597fd313f124537a5a0cda01e434bbfc + md5: 84bb969f8347f049b98574e9263ad885 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - sqlite + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - libsqlite >=3.53.4,<4.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 22085 + timestamp: 1791433419817 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-sros2-0.13.6-np2py312hdd89193_25.conda + sha256: 4739f6d90fc78b38356c9ef732fa4ba742b1acf2725dbe2e9ba5a81e1581df88 + md5: 07c6376887508a5dc7e6a3a207fd193a + depends: + - argcomplete + - cryptography + - importlib_resources + - lxml + - python + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-ros2cli + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 + size: 71477 + timestamp: 1791461508342 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-sros2-cmake-0.13.6-np2py312hdd89193_25.conda + sha256: 8bc903a47522c2a133687d9833a5c434ccc53fd41e3424f554835912d3f926f4 + md5: 76006cfb1c17acd5b270457970825d50 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-ros2cli + - ros2-sros2 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 35937 + timestamp: 1791466227003 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-statistics-msgs-2.0.4-np2py312hdd89193_25.conda + sha256: f01ca33f1a3ffe15bfd73184396fa5e751e5c8d11aab3d7bce385821df1b5509 + md5: 9be854d6d6a9cb8e4082317003a22f63 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 117566 + timestamp: 1791449451497 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-std-msgs-5.3.8-np2py312hdd89193_25.conda + sha256: fbe5df9cd3aa6868a8d5c352d9517aef5620775b5f945220eb4d12122512c9f7 + md5: 78dc330da20f29f168913d4b8bfad6ec + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 305025 + timestamp: 1791452799371 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-std-srvs-5.3.8-np2py312hdd89193_25.conda + sha256: d792c6b7db8fdf4695e0eab11b6260769e41a429a8bbd40d7e0646511fd00e45 + md5: db1b50165b6fe33b76e548274fd12d24 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 167063 + timestamp: 1791449537730 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-stereo-msgs-5.3.8-np2py312hdd89193_25.conda + sha256: a74f3d71d0733559c8b5d821d97b580b0ed70f4a7df4fbd24ed0f70379542d8c + md5: 0b1f527ce5037a8c64b4fe2b10fc03e5 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-sensor-msgs + - ros2-std-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 93028 + timestamp: 1791458905773 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-0.36.23-np2py312hdd89193_25.conda + sha256: 4a0d988a3e9abf3ca7cbad92d9e29f186febfd18bca8715e7220f2396a3c4254 + md5: e06448becaf4520264c185646e230335 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-rcutils + - ros2-ros-workspace + - ros2-rosidl-runtime-cpp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 140093 + timestamp: 1791456179828 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-bullet-0.36.23-np2py312hdd89193_25.conda + sha256: 4e549412786e967d8b991da00566ceeaae604db2fad1e8f1f378877e8c1a19af + md5: bc70c020c4ac61087cbb698660500475 + depends: + - bullet + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-ros + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 39401 + timestamp: 1791470487046 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-eigen-0.36.23-np2py312hd11d946_25.conda + sha256: c10f25ab45f9c02cb08eb1db17d2fc358592817f6aa9f70e942be6e60c60de0c + md5: dd0152a3aa15246232d2394658585020 + depends: + - eigen + - eigen-abi-devel + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-ros + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - eigen-abi >=5.0.1.100,<5.0.1.101.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 42254 + timestamp: 1791467678643 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-eigen-kdl-0.36.23-np2py312hd11d946_25.conda + sha256: fcc3dd899a72e2a8b4910e0b56abc9663e04ea2a86f0be46ee3c327d077d4fd4 + md5: 44b23edf39bf97dcef9315a9e887d36a + depends: + - eigen + - eigen-abi-devel + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-orocos-kdl-vendor + - ros2-ros-workspace + - ros2-tf2 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - eigen-abi >=5.0.1.100,<5.0.1.101.0a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 43197 + timestamp: 1791457603006 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-geometry-msgs-0.36.23-np2py312hdd89193_25.conda + sha256: 47f71edc02ce24a05a9c40d6234b7bfaea82dea6bb02a5512ec81ca23e3d90c7 + md5: cc9b7be026a614ffc72d635a799345c0 + depends: + - numpy + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-orocos-kdl-vendor + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-ros + - ros2-tf2-ros-py + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 54132 + timestamp: 1791467398279 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-kdl-0.36.23-np2py312hdd89193_25.conda + sha256: cad4a51ca4bca878e1e4296aac4c0c3b166e11f072602f998f811e2c83bd6182 + md5: 74c71687d1aae02d172eaffa94d9b72f + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-orocos-kdl-vendor + - ros2-python-orocos-kdl-vendor + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-ros + - ros2-tf2-ros-py + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 44028 + timestamp: 1791467579943 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-msgs-0.36.23-np2py312hdd89193_25.conda + sha256: b1aaa7c1f41bbd8929769b41055f5bbfb0cdd97b28e2163ea5322e0e7614e77b + md5: a51786f37dbafc75b252d523591109aa + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 254480 + timestamp: 1791456101746 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-py-0.36.23-np2py312hdd89193_25.conda + sha256: f34f6d806da4fa5eec449291201e4520ef03ad7c47adaf3e784e0fb46c149520 + md5: dd6bb302a6e7f423a1470a97b8fab34e + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-rclpy + - ros2-ros-workspace + - ros2-rpyutils + - ros2-tf2 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 49338 + timestamp: 1791458261034 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-ros-0.36.23-np2py312hdd89193_25.conda + sha256: 9196722b83c4db4d62c40933443571286bdc0a82162cfde88b0a5d29bcbb45a2 + md5: 4bc9b13741a4242d1da9b32b0b5c9098 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-message-filters + - ros2-rcl-interfaces + - ros2-rclcpp + - ros2-rclcpp-action + - ros2-rclcpp-components + - ros2-ros-workspace + - ros2-tf2 + - ros2-tf2-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 306047 + timestamp: 1791464537161 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-ros-py-0.36.23-np2py312hdd89193_25.conda + sha256: 154a428ad9fce03092877fbcea1f1ee361c1c0e98599bacc00b54267fb1c7a46 + md5: d8c2649ace22c7aaea1273c3e2ee726d + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-rclpy + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-std-msgs + - ros2-tf2-msgs + - ros2-tf2-py + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 48096 + timestamp: 1791461368099 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-sensor-msgs-0.36.23-np2py312hd11d946_25.conda + sha256: c007aacff86f9082af134afcb79528b128af6749cbd422448adf7c965f4ceb8e + md5: 4060bb94c2fc1c7eae6ef8ca737fdf89 + depends: + - eigen + - eigen-abi-devel + - numpy + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-eigen3-cmake-module + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-sensor-msgs + - ros2-sensor-msgs-py + - ros2-std-msgs + - ros2-tf2 + - ros2-tf2-ros + - ros2-tf2-ros-py + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - eigen-abi >=5.0.1.100,<5.0.1.101.0a0 + license: BSD-3-Clause + size: 49348 + timestamp: 1791472946311 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tf2-tools-0.36.23-np2py312hdd89193_25.conda + sha256: 773535ff01c0688db68f850c0bec3af8eb40433db1a42ea239e095352d5741d9 + md5: 2671893e7374ab9e21ea7119891b1e09 + depends: + - graphviz + - python + - pyyaml + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclpy + - ros2-ros-workspace + - ros2-tf2-msgs + - ros2-tf2-py + - ros2-tf2-ros-py + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 30244 + timestamp: 1791466285818 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tinyxml2-vendor-0.9.2-np2py312h1425c0b_25.conda + sha256: f40023c2308a0314afa85701ae21893488a627bf5e67cc32c286e21f462b57d4 + md5: 96649380e81e38bd51761421be3ef1ad + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - tinyxml2 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - tinyxml2 >=11.0.0,<11.1.0a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 22285 + timestamp: 1791432758888 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-tracetools-8.2.6-np2py312hdd89193_25.conda + sha256: 5be65ea45c2d5ff0116ba87b4c7891f15d78daab4a407a8989f6bc15ec0cab5e + md5: 844469bedda7e50e3989d448456efd65 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 32292 + timestamp: 1791440003474 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-trajectory-msgs-5.3.8-np2py312hdd89193_25.conda + sha256: 644473ede5dcee57582e78fd5a420c6cc9b77ae247e3f311b49654d2eee6261c + md5: d70570b5fe3ac13beee8514d1e339156 + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-std-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 147520 + timestamp: 1791455971554 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-type-description-interfaces-2.0.4-np2py312hdd89193_25.conda + sha256: 3f5cbbd96a416cf25fb277bda45f228128721f9ef932fa31cc12dd66470995f3 + md5: e7d4c4f5511046a5a4a7739a4ede572c + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - ros2-service-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + size: 224680 + timestamp: 1791448508877 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-uncrustify-vendor-3.0.1-np2py312hdd89193_25.conda + sha256: 33ca26b2c0dfe4e27896d949c101bbd8fccadb34a02d52a86db011873a2b728c + md5: 74006a309881e4ce9c145c0b820f31dc + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - uncrustify + - uncrustify >=0.78 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 OR GPL-2.0-only + size: 20759 + timestamp: 1791432413718 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-unique-identifier-msgs-2.5.1-np2py312hdd89193_25.conda + sha256: cd5a86c6519a5ebb66c33f97dc746476cddd0af0a1421cb45352e543bee9962e + md5: b06a2a04e4165915303430799bd87a1b + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-rosidl-core-runtime + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 81751 + timestamp: 1791448238212 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-urdf-2.10.1-np2py312hdd89193_25.conda + sha256: de0e5b99faa520d73077c5abb5121d69ba9c2193d224e20de8ab80d47b1bfb6e + md5: e3aa63c0116bf60c32cfcb5c82e6120e + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-pluginlib + - ros2-ros-workspace + - ros2-tinyxml2-vendor + - ros2-urdf-parser-plugin + - ros2-urdfdom + - ros2-urdfdom-headers + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 130539 + timestamp: 1791446423583 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-urdf-parser-plugin-2.10.1-np2py312hdd89193_25.conda + sha256: df597a78cbb07852591aea779c901115b937dfdcf030e8c07c640348078366d7 + md5: 7713013d9fa49074dd0ea9e362bb2ea0 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-urdfdom-headers + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 29336 + timestamp: 1791440170323 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-urdfdom-6.0-py312h77058a8_25.conda + sha256: ebbf0893929ea473d7e925b1dec9257a465a819072442481206be09dfeb63b9e + md5: dbca29fcdc5445b93e3a2ab39792c873 + depends: + - console_bridge + - python + - ros2-console-bridge-vendor + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - ros2-tinyxml2-vendor + - ros2-urdfdom-headers + - tinyxml2 + - urdfdom >=6.0,<6.1a0 + - python_abi 3.12.* *_cp312 + - console_bridge >=1.0.2,<1.1.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - tinyxml2 >=11.0.0,<11.1.0a0 + license: BSD-3-Clause + size: 8126 + timestamp: 1791441172776 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-urdfdom-headers-3.0-py312h7accfcc_25.conda + sha256: 44bac9b76eca50f58f1d52430b33dbcd79dc7d9d7cb9ee22bb4dad56674fa59c + md5: 5af01299465743b95c2a33e74282dcb3 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - urdfdom_headers >=3.0,<3.1a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: BSD-3-Clause + size: 7188 + timestamp: 1791428266580 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-visualization-msgs-5.3.8-np2py312hdd89193_25.conda + sha256: 7af006c5a3c9b1ae6b4e61607fa7e8552578d005109ab09743f6f36df8d3eac4 + md5: 28527598bb0ebbb6d96883e5ac16f40e + depends: + - python + - ros2-builtin-interfaces + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-geometry-msgs + - ros2-ros-workspace + - ros2-rosidl-default-runtime + - ros2-sensor-msgs + - ros2-std-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 344755 + timestamp: 1791458795683 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-yaml-cpp-vendor-9.0.1-np2py312hdd89193_25.conda + sha256: 58c1ecd9acefee9b6d0512dd5282be3591810d207a46560129bc97b0e629c4c4 + md5: 4d270697c09a15afcc3bce543b91de6c + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - yaml-cpp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - yaml-cpp >=0.8.0,<0.9.0a0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 OR MIT + size: 20717 + timestamp: 1791433115936 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-zenoh-cpp-vendor-0.2.11-np2py312hbb4efd0_25.conda + sha256: c5c23ff94de59ec32f46c0bf13ba3507dc15fe5ea255979fa1cf82e850dfee02 + md5: 0f83d55abc75664a722959389551a8d6 + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libzenohc >=1.9.0,<1.9.1.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 + size: 21870 + timestamp: 1791432335534 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-zstd-vendor-0.26.11-np2py312h94542ee_25.conda + sha256: 08392e503a3b1c75b7cb45cd48b61a92c39fbcd759c621e5616347a1ab3fb690 + md5: cea349d8948caf47d5497bc43659d8fa + depends: + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - zstd + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR BSD-3-Clause + size: 21471 + timestamp: 1791433174793 diff --git a/ros2-poc/pixi.toml b/ros2-poc/pixi.toml new file mode 100644 index 00000000..afce7be8 --- /dev/null +++ b/ros2-poc/pixi.toml @@ -0,0 +1,65 @@ +# ros2-poc — ROS 2 bridge proof of concept (LAB-303, decision in flight). +# +# A SEPARATE pixi workspace from the repo root one on purpose: the root `pixi.toml` +# (bridge 3.4, tests, release tooling) stays untouched, and the two environments +# live side by side on a rig PC — `pixi run bridge` at the root is the shipping +# bridge, `pixi run rig` here is the PoC graph. +# +# pixi install # RoboStack Jazzy (ros-base) + rmw_zenoh + our Python deps +# pixi run rig # Zenoh router + fictrac adapter + bridge node (one command) +# +# Channels: RoboStack publishes ROS 2 as conda packages; conda-forge first so the +# non-ROS stack (python, websockets, pyzmq) resolves from there. Bare channel names +# resolve through pixi's default channel alias (conda.anaconda.org), which is what +# a lab network with an allowlisting proxy is most likely to permit. +[workspace] +name = "arena-ros2-poc" +version = "0.1.0" +channels = ["conda-forge", "robostack-jazzy"] +platforms = ["osx-arm64", "win-64", "linux-64"] + +[activation.env] +# Every ROS 2 process in this workspace uses the Zenoh middleware. rmw_zenoh needs +# ONE router per host (`pixi run router`); nodes keep retrying until it is up. +RMW_IMPLEMENTATION = "rmw_zenoh_cpp" +ZENOH_ROUTER_CHECK_ATTEMPTS = "0" +# Loopback-only Zenoh: the stock rmw_zenoh configs listen on `tcp/[::]:7447` (fails on a +# host without IPv6) and connect to `tcp/localhost:7447`. Ours bind/connect 127.0.0.1 — +# a rig PC's graph is not reachable from the lab network. Stock files with ONLY the two +# endpoint lines changed (diff them against share/rmw_zenoh_cpp/config/ in the env). +ZENOH_ROUTER_CONFIG_URI = "$PIXI_PROJECT_ROOT/config/zenoh-router.json5" +ZENOH_SESSION_CONFIG_URI = "$PIXI_PROJECT_ROOT/config/zenoh-session.json5" +# Same reason as the root workspace: the adapters print non-ASCII to stderr and +# Python on Windows would pick cp1252 when stdio is a pipe. +PYTHONUTF8 = "1" + +[dependencies] +ros-jazzy-ros-base = "*" +ros-jazzy-rmw-zenoh-cpp = "*" +# The canonical talker/listener smoke test (`ros2 run demo_nodes_py …`); not part of ros-base. +ros-jazzy-demo-nodes-py = "*" +python = "*" +websockets = ">=12" +pyzmq = "*" + +[tasks] +# ── hour one: middleware bring-up ─────────────────────────────────────────── +router = "ros2 run rmw_zenoh_cpp rmw_zenohd" +talker = "ros2 run demo_nodes_py talker" +listener = "ros2 run demo_nodes_py listener" +# ── adapters (device programs → ROS topics; no custom message types) ──────── +fictrac-adapter = "python nodes/fictrac_udp_adapter.py" +kinefly-adapter = "python nodes/kinefly_udp_adapter.py" +bias-node = "python nodes/bias_node.py" +bias-cmd = "python nodes/bias_cmd.py" +# ── the bridge node: bridge.py's hub + log writer + dispatcher on ROS input ── +bridge-node = "python nodes/bridge_node.py" +# ── simulators (the root workspace's fictrac_sim.py, unmodified) ──────────── +sim = "python ../fictrac-bridge/fictrac_sim.py" +kinefly-sim = "python nodes/kinefly_sim.py" +bias-sim = "python nodes/bias_sim.py" +# ── the one command a rig runs ────────────────────────────────────────────── +rig = "python nodes/rig.py" +# ── acceptance test (LAB-303 PoC criteria): whole graph + Studio emulator + model fly ── +test = "python tests/test_ros2_poc.py" +studio-emulator = "python tests/studio_emulator.py" diff --git a/ros2-poc/tests/check_runlog_readers.js b/ros2-poc/tests/check_runlog_readers.js new file mode 100644 index 00000000..bc7451e3 --- /dev/null +++ b/ros2-poc/tests/check_runlog_readers.js @@ -0,0 +1,148 @@ +#!/usr/bin/env node +/** + * check_runlog_readers.js — feed a run log produced by the ROS 2 bridge node through the + * repo's JS readers, exactly as the Studio / dashboard / replay would: + * + * js/runlog-format.js readRunlogText (gzip-aware) + createNormalizer().normalize(rec) + * per line — the per-file decoder EVERY reader uses; behavior_v2 + * ["a",…] echoes must expand to exact v1 arena_command objects + * js/runlog-replay.js parseRunLog(text) + buildTimeline(parsed) — the Studio's replay + * parser (closed-loop epochs from the runner events) + * + * and print counts per line shape. Exit 1 if any line fails to parse/normalize, if the + * format is not behavior_v2, if no FicTrac rows / arena echoes / tagged streams were + * found where expected, or if the replay parser finds no runner events. + * + * node tests/check_runlog_readers.js export.jsonl [--expect-kf] [--json] + * + * Run it with the ROOT workspace's Node (`pixi run --manifest-path ../pixi.toml node …`); + * the ros2-poc env deliberately has no Node. + */ +'use strict'; + +const fs = require('fs'); +const path = require('path'); + +const REPO = path.resolve(__dirname, '..', '..'); +const F = require(path.join(REPO, 'js', 'runlog-format.js')); +const R = require(path.join(REPO, 'js', 'runlog-replay.js')); + +async function main(argv) { + const args = argv.slice(2); + const file = args.find((a) => !a.startsWith('--')); + if (!file) { + console.error('usage: check_runlog_readers.js LOG [--expect-kf] [--json]'); + return 2; + } + const expectKf = args.includes('--expect-kf'); + const bytes = fs.readFileSync(file); + const text = await F.readRunlogText(new Uint8Array(bytes)); // gzip-aware, async + const lines = text.split('\n').filter((l) => l.trim()); + const norm = F.createNormalizer(); + const counts = { + lines: lines.length, + fictrac_rows: 0, + arena_echoes: 0, + tagged: {}, + events: {}, + parse_errors: 0, + normalize_errors: 0, + echo_expand_bad: 0 + }; + const problems = []; + let fmt = null; + for (let i = 0; i < lines.length; i++) { + let rec; + try { + rec = JSON.parse(lines[i]); + } catch (e) { + counts.parse_errors++; + problems.push(`line ${i + 1}: JSON parse error`); + continue; + } + let out; + try { + out = norm.normalize(rec); + } catch (e) { + counts.normalize_errors++; + problems.push(`line ${i + 1}: normalize threw ${e.message}`); + continue; + } + if (Array.isArray(rec)) { + if (typeof rec[0] === 'number') counts.fictrac_rows++; + else if (rec[0] === 'a') { + counts.arena_echoes++; + // The normalizer must have expanded it to the exact v1 object. + const ok = + out && + !Array.isArray(out) && + out.type === 'log' && + out.event === 'arena_command' && + typeof out.head === 'string' && + out.len === out.head.split(' ').length && + (out.status === null + ? out.echo === null && out.ok === null + : out.ok === (out.status === 0)); + if (!ok) { + counts.echo_expand_bad++; + if (counts.echo_expand_bad <= 3) + problems.push(`line ${i + 1}: arena echo did not expand to a v1 object`); + } + } else if (typeof rec[0] === 'string') { + counts.tagged[rec[0]] = (counts.tagged[rec[0]] || 0) + 1; + } + } else if (rec && typeof rec === 'object') { + const k = rec.type === 'log' ? `log/${rec.event}` : rec.type; + counts.events[k] = (counts.events[k] || 0) + 1; + if (rec.type === 'frame_schema') fmt = rec.level; + } + } + counts.format = fmt; + counts.detectFormat = typeof F.detectFormat === 'function' ? F.detectFormat(text) : undefined; + + // Replay parser (the Studio's run-log replay). + let replay = null; + try { + const parsed = R.parseRunLog(text, {}); + const tl = typeof R.buildTimeline === 'function' ? R.buildTimeline(parsed, {}) : null; + replay = { + samples: Array.isArray(parsed.samples) ? parsed.samples.length : null, + events: Array.isArray(parsed.events) ? parsed.events.length : null, + arenaFrames: Array.isArray(parsed.arenaFrames) ? parsed.arenaFrames.length : null, + durationMs: parsed.durationMs, + timelineItems: Array.isArray(tl) + ? tl.length + : tl && Array.isArray(tl.items) + ? tl.items.length + : null + }; + if (!(replay.samples > 0)) problems.push('runlog-replay: no FicTrac samples parsed'); + if (!(replay.arenaFrames > 0)) + problems.push('runlog-replay: no arena frames (0x70 echoes) parsed'); + } catch (e) { + problems.push(`runlog-replay parseRunLog threw: ${e.message}`); + } + counts.replay = replay; + + if (fmt !== 'behavior_v2') problems.push(`frame_schema level ${fmt}, expected behavior_v2`); + if (!counts.fictrac_rows) problems.push('no FicTrac rows'); + if (!counts.arena_echoes) problems.push('no ["a",…] arena echoes'); + if (!(counts.events['log/runner'] > 0)) problems.push('no runner events'); + if (expectKf && !(counts.tagged.kf > 0)) problems.push('no ["kf",…] rows'); + + const ok = problems.length === 0; + if (args.includes('--json')) console.log(JSON.stringify({ ok, counts, problems }, null, 1)); + else { + console.log(`${ok ? 'PASS' : 'FAIL'} ${path.basename(file)}: ${JSON.stringify(counts)}`); + for (const p of problems) console.log(' - ' + p); + } + return ok ? 0 : 1; +} + +main(process.argv).then( + (rc) => process.exit(rc), + (e) => { + console.error(e && e.stack ? e.stack : String(e)); + process.exit(1); + } +); diff --git a/ros2-poc/tests/studio_emulator.py b/ros2-poc/tests/studio_emulator.py new file mode 100644 index 00000000..5ea3c14c --- /dev/null +++ b/ros2-poc/tests/studio_emulator.py @@ -0,0 +1,261 @@ +#!/usr/bin/env python3 +"""studio_emulator.py — replays the Arena Studio runner's bridge conversation, without a browser. + +This container (and any CI box) has no Web Serial, so the "unmodified Studio connects on +ws://localhost:8765" criterion is checked by speaking EXACTLY what the Studio speaks +(js/fictrac-bridge-client.js + js/arena-runner-g6.js + js/arena-session.js) and asserting +the bridge's answers: + + on connect hello {client:'webDisplayTools', v:1} → hello_ack (version ≥ 3.4, levels ⊇ behavior_v2) + config {fictrac_port, coupling, deg_per_frame, gain, frames} + run start log_control {enabled:true, level:'behavior_v2'} → log_control_ack (level == behavior_v2) + log run_metadata … + per epoch log runner step-start + config {frames, coupling, deg_per_frame, gain, start_frame, epoch:true, bias} + log runner command fictracApply true + … for each frame received: the arena_command echo of SET_FRAME_POSITION (0x70) + exactly as arena-session.js _logCommand writes it (so the ["a",…] + compaction path runs), honouring the epoch gate like the client does + log runner command fictracApply false + config {bias:{type:'none'}} (stopClosedLoop → _disarmClosedLoop) + run end log_control {enabled:false} → ack; log_export → log_export_result (content) + +Exit 0 when every assertion held; the exported log is written to --out and a JSON report to +--report. Used by tests/test_ros2_poc.py; also handy by hand against any bridge: + + pixi run python tests/studio_emulator.py --epochs 2 --epoch-s 6 --bias-amplitude 90 +""" + +from __future__ import annotations + +import argparse +import asyncio +import json +import sys +import time + +from websockets.asyncio.client import connect + +T0 = time.time() + + +def mono_ms() -> int: + return int((time.time() - T0) * 1000) + + +def arena_echo_set_frame_position(index: int, dt_ms: int = 3) -> dict: + """The exact object arena-session.js _logCommand builds for SET_FRAME_POSITION 0x70: + head = the frame bytes (len, cmd, idx lo, idx hi) as spaced lowercase hex; status 0 / + echo 0x70 / ok true on a normal reply.""" + lo, hi = index & 0xFF, (index >> 8) & 0xFF + head = f"03 70 {lo:02x} {hi:02x}" + return { + "type": "log", + "event": "arena_command", + "t": int(time.time() * 1000), + "dt": dt_ms, + "len": 4, + "head": head, + "status": 0, + "echo": 0x70, + "ok": True, + "error": None, + } + + +class Emulator: + def __init__(self, args: argparse.Namespace) -> None: + self.a = args + self.ws = None + self.inbox: asyncio.Queue = asyncio.Queue() + self.frames = 0 + self.stale = 0 + self.applied = 0 + self.epoch_seen = None + self.report: dict = {"asserts": [], "frames_per_epoch": [], "ok": True} + + def check(self, name: str, ok: bool, info: str = "") -> None: + self.report["asserts"].append({"name": name, "ok": bool(ok), "info": info}) + print(f" {'PASS' if ok else 'FAIL'} {name}{'' if ok else ' — ' + info}", file=sys.stderr) + if not ok: + self.report["ok"] = False + + async def send(self, obj: dict) -> None: + await self.ws.send(json.dumps(obj)) + + async def wait_for(self, kind: str, timeout: float = 5.0) -> dict | None: + """Pop messages until one of `kind` arrives; frames seen meanwhile are counted.""" + deadline = time.monotonic() + timeout + while True: + remaining = deadline - time.monotonic() + if remaining <= 0: + return None + try: + msg = await asyncio.wait_for(self.inbox.get(), remaining) + except asyncio.TimeoutError: + return None + if msg.get("type") == kind: + return msg + if msg.get("type") == "frame": + self.frames += 1 + + async def reader(self) -> None: + try: + async for raw in self.ws: + try: + msg = json.loads(raw) + except json.JSONDecodeError: + continue + await self.inbox.put(msg) + except Exception: + pass + + async def run_epoch(self, i: int, gate_since) -> int: + a = self.a + cond = f"cl_{a.bias_type}_{i}" + await self.send({"type": "log", "event": "runner", "phase": "step-start", "index": i, "condition": cond}) + cfg = { + "type": "config", + "frames": a.frames, + "coupling": a.coupling, + "deg_per_frame": a.deg_per_frame, + "gain": a.deg_per_frame, + "start_frame": a.start_frame, + "epoch": True, + "bias": {"type": a.bias_type, "amplitude": a.bias_amplitude, "frequency": a.bias_frequency}, + } + await self.send(cfg) + await self.send({"type": "log", "event": "runner", "phase": "command", "op": "fictracApply", "value": True, "condition": cond}) + # Apply loop: the client withholds frames still stamped with the pre-tare epoch id + # (the epoch gate) and applies the newest index — one echo per applied frame. + n = 0 + stale = 0 + end = time.monotonic() + a.epoch_s + first_idx = None + new_epoch = None + while time.monotonic() < end: + try: + msg = await asyncio.wait_for(self.inbox.get(), max(0.01, end - time.monotonic())) + except asyncio.TimeoutError: + break + if msg.get("type") != "frame": + continue + self.frames += 1 + ep = msg.get("epoch") + if gate_since is not None and ep is not None and ep == gate_since: + stale += 1 + continue + if new_epoch is None: + new_epoch = ep + first_idx = msg.get("index") + n += 1 + await self.send(arena_echo_set_frame_position(int(msg["index"]))) + self.applied += n + self.stale += stale + await self.send({"type": "log", "event": "runner", "phase": "command", "op": "fictracApply", "value": False, "condition": cond}) + await self.send({"type": "config", "bias": {"type": "none"}}) + self.report["frames_per_epoch"].append({"epoch": i, "applied": n, "stale_withheld": stale, "epoch_id": new_epoch, "first_index": first_idx}) + self.check(f"epoch {i}: frames applied ≥ {a.min_frames}", n >= a.min_frames, f"{n}") + self.check(f"epoch {i}: a new epoch id was stamped", new_epoch is not None and new_epoch != gate_since, f"{new_epoch} vs {gate_since}") + if first_idx is not None: + # The tared epoch opens on start_frame (± 1 frame of fly motion before the tare row). + d = (first_idx - a.start_frame) % a.frames + self.check(f"epoch {i}: opened on start_frame {a.start_frame}", min(d, a.frames - d) <= 1, f"first index {first_idx}") + return new_epoch + + async def main(self) -> int: + a = self.a + async with connect(a.url, max_size=16 * 1024 * 1024) as ws: + self.ws = ws + reader = asyncio.create_task(self.reader()) + await self.send({"type": "hello", "client": "webDisplayTools", "v": 1}) + await self.send({"type": "config", "fictrac_port": 60000, "coupling": a.coupling, "deg_per_frame": a.deg_per_frame, "gain": a.deg_per_frame, "frames": a.frames}) + ack = await self.wait_for("hello_ack") + self.check("hello_ack received", ack is not None) + if ack: + v = str(ack.get("bridge", "")) + self.report["bridge"] = v + m = v.split()[0] if v else "" + try: + major, minor = (int(x) for x in m.split(".")[:2]) + at_least_34 = (major, minor) >= (3, 4) + except ValueError: + at_least_34 = False + self.check("bridge version parses as ≥ 3.4 (supportsStartFrame)", at_least_34, v) + self.check("behavior_v2 advertised", "behavior_v2" in (ack.get("levels") or []), str(ack.get("levels"))) + await self.send({"type": "log_control", "enabled": True, "level": "behavior_v2"}) + lack = await self.wait_for("log_control_ack") + self.check("log_control_ack: behavior_v2 in force", bool(lack) and lack.get("enabled") is True and lack.get("level") == "behavior_v2", str(lack)) + self.report["log_file"] = lack.get("file") if lack else None + await self.send({"type": "log", "event": "run_metadata", "rig_id": a.rig_id, "log_format": "behavior_v2", + "protocol_sha256": None, "client": "studio_emulator.py", "frames": a.frames}) + # Pre-run: let a few frames flow so the epoch gate has a "since" id (the Studio + # sees frames before the first trial too). + await asyncio.sleep(0.5) + since = None + while not self.inbox.empty(): + m = self.inbox.get_nowait() + if m.get("type") == "frame": + self.frames += 1 + since = m.get("epoch", since) + for i in range(a.epochs): + since = await self.run_epoch(i, since) + if a.iti_s > 0: + # ITI: frames keep flowing and are NOT applied (apply off), like the Studio. + t_end = time.monotonic() + a.iti_s + while time.monotonic() < t_end: + try: + m = await asyncio.wait_for(self.inbox.get(), max(0.01, t_end - time.monotonic())) + except asyncio.TimeoutError: + break + if m.get("type") == "frame": + self.frames += 1 + since = m.get("epoch", since) + await self.send({"type": "log", "event": "runner", "phase": "sequence-done", "epochs": a.epochs}) + await self.send({"type": "log_control", "enabled": False}) + off = await self.wait_for("log_control_ack") + self.check("log_control_ack: logging off", bool(off) and off.get("enabled") is False, str(off)) + await self.send({"type": "log_export"}) + exp = await self.wait_for("log_export_result", timeout=15.0) + self.check("log_export_result with content", bool(exp) and isinstance(exp.get("content"), str) and len(exp["content"]) > 0, str(exp)[:200] if exp else "none") + if exp and exp.get("content"): + with open(a.out, "w", encoding="utf-8") as fh: + fh.write(exp["content"]) + self.report["export_name"] = exp.get("name") + self.report["export_bytes"] = len(exp["content"]) + reader.cancel() + self.report.update({"frames_total": self.frames, "applied": self.applied, "stale_withheld": self.stale}) + if a.report: + with open(a.report, "w", encoding="utf-8") as fh: + json.dump(self.report, fh, indent=1) + print(f"[emulator] frames {self.frames}, applied {self.applied}, stale withheld {self.stale}, ok={self.report['ok']}", file=sys.stderr) + return 0 if self.report["ok"] else 1 + + +def main(argv: list[str] | None = None) -> int: + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("--url", default="ws://127.0.0.1:8765") + p.add_argument("--epochs", type=int, default=2) + p.add_argument("--epoch-s", type=float, default=6.0) + p.add_argument("--iti-s", type=float, default=1.0) + p.add_argument("--frames", type=int, default=200) + p.add_argument("--coupling", type=float, default=1.0) + p.add_argument("--deg-per-frame", type=float, default=1.8) + p.add_argument("--start-frame", type=int, default=0) + p.add_argument("--bias-type", default="constant", choices=("none", "constant", "sine", "square")) + p.add_argument("--bias-amplitude", type=float, default=90.0) + p.add_argument("--bias-frequency", type=float, default=0.0) + p.add_argument("--min-frames", type=int, default=50, help="assert at least this many applied frames per epoch") + p.add_argument("--rig-id", default="ros2-poc") + p.add_argument("--out", default="studio-export.jsonl", help="where to write the exported log") + p.add_argument("--report", default=None, help="JSON report path") + args = p.parse_args(argv) + try: + return asyncio.run(Emulator(args).main()) + except (ConnectionRefusedError, OSError) as exc: + print(f"[emulator] cannot connect to {args.url}: {exc}", file=sys.stderr) + return 2 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/ros2-poc/tests/test_ros2_poc.py b/ros2-poc/tests/test_ros2_poc.py new file mode 100644 index 00000000..8494f835 --- /dev/null +++ b/ros2-poc/tests/test_ros2_poc.py @@ -0,0 +1,341 @@ +#!/usr/bin/env python3 +"""test_ros2_poc.py — the LAB-303 proof-of-concept acceptance run, end to end, no hardware. + + pixi run test # from ros2-poc/ (≈ 45 s) + pixi run test -- --epoch-s 4 --keep + +Brings up the WHOLE graph in this process's pixi env — Zenoh router, FicTrac UDP adapter, +Kinefly KF/1 adapter + synthetic producer, BIAS simulator + BIAS node, the bridge node — +then drives it the way a rig does: `fictrac_sim.py --model fly --kp 2` (a fixating model +fly on the WebSocket, FicTrac untouched) and tests/studio_emulator.py (the Studio runner's +exact bridge conversation, 3 constant-bias epochs). During epoch 2 the FicTrac adapter is +KILLED (SIGKILL) and restarted 3 s later. BIAS commands are issued mid-run through the +node. Then the exported log is judged: + + criteria (LAB-303, 2026-10-14 comment) how it is checked here + ───────────────────────────────────────────────────────────────────────────────────── + pixi install, no manual steps; one `pixi run rig` this test runs in that env; rig.py is the launcher + no custom message types std_msgs/String everywhere (grep in CI below) + FicTrac via the sim through a UDP→ROS adapter, untouched fictrac_sim.py unmodified, adapter in nodes/ + Kinefly fork via a KF/1 adapter kinefly_sim.py (KF/1 bytes) → adapter → ["kf",…] rows + BIAS via the Mac port bias_sim.py here; real BIAS = same HTTP interface + unmodified Studio passes the closed-loop report emulator speaks the client's protocol; report: + rejection > 0.8 on uninterrupted epochs, idx mismatch 0 + … and the runlog format tests js/runlog-format + runlog-replay readers accept every line; + bridge.py --convert v2→v1→v2 is byte-identical + the closed-loop node stamps its own sample time Pipeline.handle_line's now_ms() (reused); lat stats logged + bridge 3.4 stays installed side by side root fictrac-bridge/bridge.py --version still 3.4 + a device node killed mid-run leaves the log intact adapter SIGKILLed in epoch 2: source_lost/resumed logged, + file complete, every reader still parses it + +Exit 0 when all checks pass. Prints a markdown summary. Artifacts are kept with --keep. +""" + +from __future__ import annotations + +import argparse +import json +import os +import shutil +import signal +import socket +import subprocess +import sys +import tempfile +import threading +import time +from pathlib import Path + +HERE = Path(__file__).resolve().parent +POC = HERE.parent +REPO = POC.parent +NODES = POC / "nodes" +SIM = REPO / "fictrac-bridge" / "fictrac_sim.py" +BRIDGE_PY = REPO / "fictrac-bridge" / "bridge.py" +PY = sys.executable + +results: list[tuple[str, bool, str]] = [] + + +def check(name: str, ok: bool, info: str = "") -> bool: + results.append((name, bool(ok), info)) + print(f" {'PASS' if ok else 'FAIL'} {name}{'' if ok else ' — ' + info}", file=sys.stderr) + return bool(ok) + + +def wait_port(host: str, port: int, timeout_s: float) -> bool: + end = time.monotonic() + timeout_s + while time.monotonic() < end: + try: + with socket.create_connection((host, port), timeout=0.5): + return True + except OSError: + time.sleep(0.2) + return False + + +class Proc: + def __init__(self, name: str, argv: list[str], logdir: Path) -> None: + self.name = name + self.argv = argv + self.log = open(logdir / f"{name}.log", "w", encoding="utf-8") + self.p: subprocess.Popen | None = None + + def start(self) -> "Proc": + # Own process group, so stop() reaches `ros2 run`'s child (the router binary) too. + self.p = subprocess.Popen(self.argv, stdout=self.log, stderr=subprocess.STDOUT, text=True, start_new_session=(os.name != "nt")) + return self + + def alive(self) -> bool: + return self.p is not None and self.p.poll() is None + + def _signal(self, sig: int) -> None: + if os.name != "nt": + try: + os.killpg(self.p.pid, sig) + return + except (ProcessLookupError, PermissionError): + pass + self.p.send_signal(sig) + + def kill9(self) -> None: + if self.alive(): + self._signal(signal.SIGKILL) + self.p.wait(5) + + def stop(self) -> None: + if not self.alive(): + return + try: + self._signal(signal.SIGINT) + self.p.wait(5) + except subprocess.TimeoutExpired: + self._signal(signal.SIGTERM) + try: + self.p.wait(3) + except subprocess.TimeoutExpired: + self._signal(signal.SIGKILL) + except (ProcessLookupError, OSError): + pass + self.log.flush() + + +def read_jsonl(path: Path) -> list: + return [json.loads(l) for l in path.read_text(encoding="utf-8").splitlines() if l.strip()] + + +def run_capture(argv: list[str], timeout: float = 60.0, cwd: Path | None = None) -> subprocess.CompletedProcess: + return subprocess.run(argv, capture_output=True, text=True, timeout=timeout, cwd=str(cwd) if cwd else None) + + +def main(argv: list[str] | None = None) -> int: + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument("--epochs", type=int, default=3) + ap.add_argument("--epoch-s", type=float, default=6.0) + ap.add_argument("--kill-at", type=float, default=2.0, help="seconds into epoch 2 (0-based epoch 1) to SIGKILL the FicTrac adapter") + ap.add_argument("--kill-for", type=float, default=3.0, help="seconds before the adapter is restarted") + ap.add_argument("--keep", action="store_true", help="keep the work dir") + ap.add_argument("--workdir", default=None) + ap.add_argument("--no-router", action="store_true", help="a Zenoh router is already running on 127.0.0.1:7447") + a = ap.parse_args(argv) + + work = Path(a.workdir) if a.workdir else Path(tempfile.mkdtemp(prefix="ros2-poc-test-")) + work.mkdir(parents=True, exist_ok=True) + logdir = work / "proc-logs" + logdir.mkdir(exist_ok=True) + runlogs = work / "runlogs" + export = work / "studio-export.jsonl" + report = work / "emulator-report.json" + videos = work / "bias-videos" + procs: list[Proc] = [] + print(f"[test] work dir {work}", file=sys.stderr) + + def start(name: str, argv: list[str]) -> Proc: + pr = Proc(name, argv, logdir).start() + procs.append(pr) + return pr + + kill_report: dict = {} + try: + # ── bring the graph up ─────────────────────────────────────────────────────── + if not a.no_router: + start("router", ["ros2", "run", "rmw_zenoh_cpp", "rmw_zenohd"]) + check("zenoh router listening on 127.0.0.1:7447", wait_port("127.0.0.1", 7447, 20.0)) + fictrac = start("fictrac-adapter", [PY, str(NODES / "fictrac_udp_adapter.py"), "--status-every", "0"]) + start("kinefly-adapter", [PY, str(NODES / "kinefly_udp_adapter.py"), "--status-every", "0"]) + start("bias-sim", [PY, str(NODES / "bias_sim.py"), "--video-dir", str(videos)]) + start("bias-node", [PY, str(NODES / "bias_node.py"), "--status-every", "1"]) + bridge = start("bridge-node", [PY, str(NODES / "bridge_node.py"), "--log-dir", str(runlogs), "--source-timeout", "1.5"]) + check("bridge node serving ws://127.0.0.1:8765", wait_port("127.0.0.1", 8765, 20.0)) + time.sleep(1.5) # discovery + start("kinefly-sim", [PY, str(NODES / "kinefly_sim.py"), "--rate", "100", "--seed", "1"]) + start("model-fly", [PY, str(SIM), "--model", "fly", "--kp", "2", "--seed", "1", "--rate", "50"]) + time.sleep(1.5) + + # ── side actors during the run: BIAS commands + the adapter kill ───────────── + def bias_cmd(*args: str) -> dict: + r = run_capture([PY, str(NODES / "bias_cmd.py"), *args, "--json", "--timeout", "10"], timeout=30) + try: + return json.loads(r.stdout) if r.stdout.strip().startswith("{") else {"rc": r.returncode, "err": r.stderr[-300:]} + except json.JSONDecodeError: + return {"rc": r.returncode, "err": r.stderr[-300:]} + + bias_replies: dict = {} + + def side_actor() -> None: + t_run0 = time.monotonic() + bias_replies["connect"] = bias_cmd("connect") + bias_replies["startRecording"] = bias_cmd("startRecording", "--filename", "poc_trial.avi") + # Kill the FicTrac adapter `kill_at` s into epoch index 1 (emulator: 0.5 s pre-run + epochs + ITIs). + t_kill = t_run0 + 0.5 + (a.epoch_s + 1.0) * 1 + a.kill_at + while time.monotonic() < t_kill: + time.sleep(0.05) + kill_report["killed_at_ms"] = int((time.monotonic() - t_run0) * 1000) + fictrac.kill9() + kill_report["adapter_rc"] = fictrac.p.returncode if fictrac.p else None + time.sleep(a.kill_for) + fictrac.start() + kill_report["restarted_at_ms"] = int((time.monotonic() - t_run0) * 1000) + time.sleep(1.0) + bias_replies["getTimestamp"] = bias_cmd("getTimestamp") + # stopRecording near the end of the run (after the last epoch starts). + t_stop = t_run0 + 0.5 + (a.epoch_s + 1.0) * (a.epochs - 1) + 1.0 + while time.monotonic() < t_stop: + time.sleep(0.05) + bias_replies["stopRecording"] = bias_cmd("stopRecording") + + actor = threading.Thread(target=side_actor, name="side-actor", daemon=True) + actor.start() + + # ── the Studio's conversation ──────────────────────────────────────────────── + em = run_capture( + [PY, str(HERE / "studio_emulator.py"), "--epochs", str(a.epochs), "--epoch-s", str(a.epoch_s), "--iti-s", "1", + "--bias-amplitude", "90", "--min-frames", "40", "--out", str(export), "--report", str(report)], + timeout=60 + a.epochs * (a.epoch_s + 2), + ) + (logdir / "emulator.log").write_text(em.stderr, encoding="utf-8") + check("studio emulator: every protocol assertion held", em.returncode == 0, em.stderr[-600:]) + actor.join(timeout=30) + + # ── judge the log ──────────────────────────────────────────────────────────── + check("exported log written", export.exists() and export.stat().st_size > 0) + objs = read_jsonl(export) if export.exists() else [] + disk = sorted(runlogs.glob("arena-log-*.jsonl")) + check("export is byte-identical to the bridge node's file on disk", + bool(disk) and disk[-1].read_bytes() == export.read_bytes(), f"{[d.name for d in disk]}") + + events = [o for o in objs if isinstance(o, dict)] + rows_ft = [o for o in objs if isinstance(o, list) and isinstance(o[0], (int, float))] + rows_kf = [o for o in objs if isinstance(o, list) and o[0] == "kf"] + rows_a = [o for o in objs if isinstance(o, list) and o[0] == "a"] + by_type: dict[str, int] = {} + for e in events: + by_type[e.get("type", "?")] = by_type.get(e.get("type", "?"), 0) + 1 + print(f"[test] log: {len(objs)} lines — fictrac rows {len(rows_ft)}, arena echoes {len(rows_a)}, kf rows {len(rows_kf)}, events {by_type}", file=sys.stderr) + check("FicTrac rows logged (every frame, not only applied)", len(rows_ft) > 40 * a.epochs, str(len(rows_ft))) + check('["a",…] compact arena echoes logged', len(rows_a) > 40 * (a.epochs - 1), str(len(rows_a))) + check('["kf",…] Kinefly rows logged (KF/1 → adapter → bridge)', len(rows_kf) > 100, str(len(rows_kf))) + kf_ok = all(len(r) == 8 and isinstance(r[1], int) and isinstance(r[2], int) and r[4] is not None and r[5] is not None for r in rows_kf[:50]) + check("kf rows carry left/right wing angles", kf_ok) + + lost = [e for e in events if e.get("type") == "source_lost" and e.get("src") == "fictrac"] + resumed = [e for e in events if e.get("type") == "source_resumed" and e.get("src") == "fictrac"] + check("adapter SIGKILL mid-run → source_lost logged", len(lost) >= 1, json.dumps(kill_report)) + check("adapter restart → source_resumed logged", len(resumed) >= 1) + check("log file ends with logging_stopped (intact after the kill)", + bool(events) and events[-1].get("type") == "session" and events[-1].get("event") == "logging_stopped") + + bias_ev = [e for e in events if e.get("type") == "connector" and e.get("src") == "bias"] + bias_rep = [e for e in bias_ev if e.get("kind") == "reply"] + bias_st = [e for e in bias_ev if e.get("kind") == "status"] + art = [e for e in bias_rep if isinstance(e.get("artifact"), dict)] + check("BIAS command/reply pairs in the run log", len(bias_rep) >= 3, f"{len(bias_rep)} replies: {[r.get('command') for r in bias_rep]}") + check("BIAS status lines in the run log", len(bias_st) >= 3, str(len(bias_st))) + check("BIAS video artifact identity in the run log", bool(art) and str(art[0]["artifact"].get("path", "")).endswith("poc_trial.avi"), json.dumps(art[:1])) + check("BIAS video file exists after stopRecording", (videos / "poc_trial.avi").exists(), str(list(videos.glob('*')) if videos.exists() else [])) + + cs = [e for e in events if e.get("type") == "connector_status" and e.get("src") == "fictrac"] + p99 = cs[-1]["lat_ms"]["p99"] if cs else None + check("connector_status: adapter→bridge latency p99 < 50 ms", p99 is not None and p99 < 50.0, str(cs[-1] if cs else None)) + + # ── closed-loop report (root scripts/, stdlib only) ───────────────────────── + rep = run_capture([PY, str(REPO / "scripts" / "closed-loop-report.py"), "--json", str(export)], timeout=60) + check("closed-loop-report runs", rep.returncode == 0, rep.stderr[-300:]) + epochs = [] + if rep.returncode == 0: + R = json.loads(rep.stdout) + epochs = R.get("epochs", []) + check(f"report finds {a.epochs} epochs from runner fictracApply", len(epochs) == a.epochs and R.get("epoch_source") == "runner fictracApply", f"{len(epochs)} ({R.get('epoch_source')})") + for i, e in enumerate(epochs): + interrupted = i == 1 + mism = e.get("idx_mismatch_fraction") + rows = e.get("rows") or 0 + # The report's epoch opens at the fictracApply event's ms. A FicTrac row + # computed with the PREVIOUS mapping can carry that same ms (it is written + # before the config line in the file — the bridge handled it first), and the + # report then reconstructs it with the new epoch's bias/tare. That is one row + # of 1 ms resolution at the boundary, identical with bridge 3.4; the mapping + # itself is exact, so the bar is "≤ 1 boundary row", not literally 0. + n_mism = round((mism or 0.0) * rows) if rows else (0 if mism == 0.0 else 99) + check(f"epoch {i} ({e.get('condition')}): idx reconstruction exact (≤ 1 boundary row of {rows})", n_mism <= 1, f"fraction {mism}") + rej = e.get("rejection") + if not interrupted: + check(f"epoch {i}: model fly rejects the bias (rejection > 0.8)", rej is not None and rej > 0.8, str(rej)) + else: + print(f" info epoch {i} (adapter killed for {a.kill_for}s): rejection {rej}, rows {e.get('rows')}", file=sys.stderr) + md = run_capture([PY, str(REPO / "scripts" / "closed-loop-report.py"), str(export)], timeout=60).stdout + (work / "closed-loop-report.md").write_text(md, encoding="utf-8") + + # ── format: convert round trip + JS readers ───────────────────────────────── + v1 = work / "export.v1.jsonl" + v2 = work / "export.v2.jsonl" + c1 = run_capture([PY, str(BRIDGE_PY), "--convert", str(export), str(v1)]) + c2 = run_capture([PY, str(BRIDGE_PY), "--convert", str(v1), str(v2)]) if c1.returncode == 0 else None + check("bridge.py --convert v2→v1→v2 byte-identical", c2 is not None and c2.returncode == 0 and v2.read_bytes() == export.read_bytes(), + (c1.stderr + (c2.stderr if c2 else ""))[-300:]) + ver = run_capture([PY, str(BRIDGE_PY), "--version"]) + check("bridge 3.4 side by side: fictrac-bridge/bridge.py --version still 3.4", (ver.stdout + ver.stderr).strip().startswith("fictrac-bridge 3.4"), (ver.stdout + ver.stderr)[:80]) + + node_bin = shutil.which("node") + root_pixi = shutil.which("pixi") + js_argv = None + if node_bin: + js_argv = [node_bin, str(HERE / "check_runlog_readers.js"), str(export), "--expect-kf"] + elif root_pixi and (REPO / ".pixi").exists(): + js_argv = [root_pixi, "run", "--manifest-path", str(REPO / "pixi.toml"), "node", str(HERE / "check_runlog_readers.js"), str(export), "--expect-kf"] + if js_argv: + js = run_capture(js_argv, timeout=120, cwd=REPO) + check("JS readers (runlog-format normalizer + runlog-replay parser) accept every line", js.returncode == 0, (js.stdout + js.stderr)[-500:]) + print(" " + (js.stdout.strip().splitlines() or [""])[-1][:300], file=sys.stderr) + else: + print(" skip JS reader check: no `node` and no root pixi env (run `pixi install` at the repo root)", file=sys.stderr) + + # No custom message types: only std_msgs in nodes/. + bad = [] + for f in NODES.glob("*.py"): + for line in f.read_text(encoding="utf-8").splitlines(): + if line.startswith("from ") and ".msg import" in line and not line.startswith("from std_msgs.msg"): + bad.append(f"{f.name}: {line.strip()}") + check("no custom message types (only std_msgs imported in nodes/)", not bad, "; ".join(bad)) + + check("bridge node still alive at the end", bridge.alive()) + finally: + for pr in reversed(procs): + pr.stop() + for pr in procs: + pr.log.close() + + n_ok = sum(1 for _, ok, _ in results if ok) + print(f"\n{n_ok} / {len(results)} checks passed", file=sys.stderr) + summary = ["| check | result |", "|---|---|"] + [f"| {n} | {'PASS' if ok else 'FAIL — ' + i.replace('|', '/')[:120]} |" for n, ok, i in results] + (work / "summary.md").write_text("\n".join(summary) + "\n", encoding="utf-8") + print("\n".join(summary)) + if not a.keep and n_ok == len(results): + shutil.rmtree(work, ignore_errors=True) + else: + print(f"[test] artifacts kept in {work}", file=sys.stderr) + return 0 if n_ok == len(results) else 1 + + +if __name__ == "__main__": + raise SystemExit(main()) From 890e247c7a441dee826aec66291d37f558dc27ce Mon Sep 17 00:00:00 2001 From: Michael Reiser Date: Wed, 14 Oct 2026 19:40:59 +0000 Subject: [PATCH 2/9] ros2-poc: review fixes + further automated checks (soak, zero-loss, router restart, launcher pre-flight) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - bridge_node: RosLogWriter hooks (on_open/on_close) replace the message re-parsing wrapper; source watchdog scoped per log file; ordered ROS shutdown (join the spin thread before destroy_node — removes "terminate called without an active exception" on SIGTERM) - bias_node: worker exception guard (a malformed BIAS body no longer kills the node), get-status polls coalesced to one pending - rig.py: port pre-flight with a one-line culprit per port (SO_REUSEADDR probe), router death stops the rig, Zenoh config paths set explicitly (Windows shells leave $PIXI_PROJECT_ROOT literal) - nodes/_common.py: shared envelope, QoS, spin/shutdown boilerplate, wait_port - test harness: adapter kill anchored on the runner's fictracApply line in the log; export guard - README: soak (12 runs, flat RSS, p99 ≈ 3.5 ms), zero loss at 200 Hz + 500 Hz, router kill/restart with no data gap, student-mistake messages Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01KHyggowbCA5ucBg71bU26V --- ros2-poc/README.md | 14 ++++- ros2-poc/nodes/_common.py | 60 +++++++++++++++++++ ros2-poc/nodes/bias_node.py | 51 ++++++++-------- ros2-poc/nodes/bridge_node.py | 84 +++++++++++++++++---------- ros2-poc/nodes/fictrac_udp_adapter.py | 31 ++-------- ros2-poc/nodes/kinefly_udp_adapter.py | 30 ++-------- ros2-poc/nodes/rig.py | 59 +++++++++++++++---- ros2-poc/tests/test_ros2_poc.py | 39 ++++++++++--- 8 files changed, 240 insertions(+), 128 deletions(-) create mode 100644 ros2-poc/nodes/_common.py diff --git a/ros2-poc/README.md b/ros2-poc/README.md index 57dee228..6aca454b 100644 --- a/ros2-poc/README.md +++ b/ros2-poc/README.md @@ -47,7 +47,9 @@ Environment set by the workspace (`[activation.env]`): `RMW_IMPLEMENTATION=rmw_z `ZENOH_SESSION_CONFIG_URI` → the two files under `config/` (stock rmw_zenoh configs with the endpoint changed from `tcp/[::]:7447` / `tcp/localhost:7447` to `tcp/127.0.0.1:7447`: the stock router fails on a host without IPv6, and a rig's graph should not be reachable from the -lab network anyway). +lab network anyway). The two config paths use `$PIXI_PROJECT_ROOT`; `rig.py` sets them +explicitly for its children, so `pixi run rig` does not depend on the shell expanding it +(Windows: to verify; the individual `router` / `*-adapter` tasks do). ## What was built in the first day @@ -108,6 +110,16 @@ millisecond (it is even written before the config line). The report then reconst one row with the new epoch's bias and tare. The bar is therefore "≤ 1 boundary row", which is what bridge 3.4 produces as well; the mapping itself is exact. +## Further automated checks (2026-10-14, same container) + +| check | result | +|---|---| +| **Soak**: `pixi run rig -- --sim --kinefly --bias --bias-sim` with the emulator looping 2 × 20 s epochs per run | 12 consecutive runs (≈ 10 min steady state) all passed; bridge node RSS 66.5 → 68.5 MB then flat, adapters flat at 61 MB, router 15 MB; latency p50 1.1 ms / p99 3.4–3.9 ms on every run | +| **Zero loss under load**: sim at 200 Hz × 4000 frames + Kinefly at 500 Hz × 10 000 | 4000 / 4000 FicTrac rows (frame counters 1..4000, no gap); every KF/1 frame sent while the log was open logged, no sequence gap; p99 3.3 ms (FicTrac) / 4.7 ms (Kinefly) | +| **Router killed and restarted mid-run** (6 s outage) | no data gap at all (rmw_zenoh peers keep their direct links; the router is discovery), emulator run completed, log intact | +| **Student mistakes**: a second `pixi run rig`; `pixi run rig` while bridge 3.4 holds ws :8765 / udp :60000 | `rig.py` pre-flights its ports and names the culprit in one line instead of a Rust panic or a Python traceback | +| **Code review** of the diff (nine findings) | fixed: BIAS worker exception guard + status-poll coalescing, watchdog scoped per log file (`RosLogWriter` hooks instead of re-parsing messages), router death stops the rig, kill timing in the harness anchored on the log, config paths set explicitly by `rig.py`, shared `_common.py` | + ## Not verified here (needs the Mac / a rig) * A real browser: Web Serial and the Studio UI were replaced by the emulator. Run the Studio diff --git a/ros2-poc/nodes/_common.py b/ros2-poc/nodes/_common.py new file mode 100644 index 00000000..6ac5e99a --- /dev/null +++ b/ros2-poc/nodes/_common.py @@ -0,0 +1,60 @@ +"""_common.py — the few things every PoC node shares (kept tiny on purpose). + +* `wrap_line` — THE adapter envelope the bridge node parses. One definition, so a field + added for one source cannot silently differ for another. +* `RELIABLE_QOS` — reliable / keep-last 200: the run log must hold every frame. +* `spin` — rclpy.spin + the Jazzy shutdown boilerplate (Ctrl-C raises + ExternalShutdownException from spin, and rclpy's own handler may already + have shut the context down, so try_shutdown can raise too). +* `wait_port` — poll a TCP port (the Zenoh router on 127.0.0.1:7447). +""" + +from __future__ import annotations + +import json +import socket +import time + +import rclpy +from rclpy.executors import ExternalShutdownException +from rclpy.qos import QoSDurabilityPolicy, QoSHistoryPolicy, QoSProfile, QoSReliabilityPolicy + +RELIABLE_QOS = QoSProfile( + reliability=QoSReliabilityPolicy.RELIABLE, + history=QoSHistoryPolicy.KEEP_LAST, + depth=200, + durability=QoSDurabilityPolicy.VOLATILE, +) + + +def wrap_line(src: str, seq: int, raw: str, rx_epoch_ms: int, rx_mono_ns: int) -> str: + """Adapter envelope: {"src","seq","rx_epoch_ms","rx_mono_ns","raw"} as compact JSON.""" + return json.dumps( + {"src": src, "seq": seq, "rx_epoch_ms": rx_epoch_ms, "rx_mono_ns": rx_mono_ns, "raw": raw}, + separators=(",", ":"), + ) + + +def spin(node) -> None: + """rclpy.spin(node) until Ctrl-C / external shutdown, then destroy + shut down quietly.""" + try: + rclpy.spin(node) + except (KeyboardInterrupt, ExternalShutdownException): + pass + finally: + node.destroy_node() + try: + rclpy.try_shutdown() + except Exception: # rclpy's SIGINT handler may already have shut the context down + pass + + +def wait_port(host: str, port: int, timeout_s: float) -> bool: + end = time.monotonic() + timeout_s + while time.monotonic() < end: + try: + with socket.create_connection((host, port), timeout=0.5): + return True + except OSError: + time.sleep(0.2) + return False diff --git a/ros2-poc/nodes/bias_node.py b/ros2-poc/nodes/bias_node.py index 33047080..d2bf9a48 100644 --- a/ros2-poc/nodes/bias_node.py +++ b/ros2-poc/nodes/bias_node.py @@ -41,20 +41,15 @@ import urllib.request import rclpy -from rclpy.executors import ExternalShutdownException from rclpy.node import Node -from rclpy.qos import QoSDurabilityPolicy, QoSHistoryPolicy, QoSProfile, QoSReliabilityPolicy from std_msgs.msg import String +from _common import RELIABLE_QOS, spin + CMD_TOPIC = "/bias/cmd" REPLY_TOPIC = "/bias/reply" STATUS_TOPIC = "/bias/status" -QOS = QoSProfile( - reliability=QoSReliabilityPolicy.RELIABLE, - history=QoSHistoryPolicy.KEEP_LAST, - depth=50, - durability=QoSDurabilityPolicy.VOLATILE, -) +QOS = RELIABLE_QOS PLUGIN_COMMANDS = ("connect", "startRecording", "stopRecording", "startPreview", "stopCapture", "getTimestamp", "disconnect") @@ -90,6 +85,8 @@ def call(self, command: str, value: str | None = None) -> dict: except (UnicodeDecodeError, json.JSONDecodeError): raise OSError(f"non-JSON reply from BIAS: {body[:80]!r}") rep = arr[0] if isinstance(arr, list) and arr else (arr if isinstance(arr, dict) else {}) + if not isinstance(rep, dict): + raise OSError(f"unexpected reply element from BIAS: {rep!r}") return { "command": command, "ok": bool(rep.get("success", False)), @@ -134,11 +131,12 @@ def __init__(self, http: BiasHttp, status_every_s: float) -> None: self.status_pub = self.create_publisher(String, STATUS_TOPIC, QOS) self.create_subscription(String, CMD_TOPIC, self._on_cmd, QOS) self._q: queue.Queue = queue.Queue() + self._status_pending = False # at most ONE get-status poll waits in the queue self._worker = threading.Thread(target=self._work, name="bias-http", daemon=True) self._worker.start() self._status_every = status_every_s if status_every_s > 0: - self.create_timer(status_every_s, lambda: self._q.put(("status", None))) + self.create_timer(status_every_s, self._enqueue_status) self.commands = 0 self.get_logger().info(f"BIAS at {http.base} ← {CMD_TOPIC} → {REPLY_TOPIC}, {STATUS_TOPIC} every {status_every_s:g}s") @@ -158,13 +156,27 @@ def _on_cmd(self, msg: String) -> None: return self._q.put(("cmd", req)) + def _enqueue_status(self) -> None: + # Coalesce: when BIAS is slow or black-holed each poll blocks up to timeout_s, and a + # poll per period would build an unbounded line that commands then wait behind. + if not self._status_pending: + self._status_pending = True + self._q.put(("status", None)) + def _work(self) -> None: while True: kind, payload = self._q.get() - if kind == "status": - self._do_status() - else: - self._do_cmd(payload) + try: + if kind == "status": + self._status_pending = False + self._do_status() + else: + self._do_cmd(payload) + except Exception as exc: # a malformed BIAS body, HTTPException, … must not kill the worker + self.get_logger().error(f"{kind} failed: {exc!r}") + if kind == "cmd": + self._publish(self.reply_pub, {"id": (payload or {}).get("id"), "command": (payload or {}).get("command"), + "ok": False, "outcome": "error", "error": f"node error: {exc!r}"}) def _do_status(self) -> None: t_ms = int(time.time() * 1000) @@ -235,17 +247,8 @@ def main(argv: list[str] | None = None) -> int: args, ros_args = p.parse_known_args(argv) rclpy.init(args=ros_args) node = BiasNode(BiasHttp(args.host, args.port, args.timeout_s), args.status_every) - try: - rclpy.spin(node) - except (KeyboardInterrupt, ExternalShutdownException): - pass # Ctrl-C: rclpy ≥ Jazzy raises ExternalShutdownException from spin - finally: - node.destroy_node() - try: - rclpy.try_shutdown() - except Exception: # rclpy's own SIGINT handler may already have shut the context down (races in Jazzy) - pass - print(f"[bias-node] {node.commands} commands handled", file=sys.stderr) + spin(node) + print(f"[bias-node] {node.commands} commands handled", file=sys.stderr) return 0 diff --git a/ros2-poc/nodes/bridge_node.py b/ros2-poc/nodes/bridge_node.py index a097818c..8ea8076a 100644 --- a/ros2-poc/nodes/bridge_node.py +++ b/ros2-poc/nodes/bridge_node.py @@ -188,6 +188,27 @@ def summary(self) -> dict: } +class RosLogWriter(B.LogWriter): + """bridge.py's LogWriter + two hooks: `on_open()` after a file opens (writes the + 'where do frames come from' line, resets the source watchdog) and `on_close()` just + before it closes (writes the per-source connector_status lines). Hooking the writer + itself covers every close path — log_control off, log_export, shutdown — without + re-parsing browser messages.""" + + on_open = None + on_close = None + + def _open(self, name: str, event: str) -> None: + super()._open(name, event) + if self.on_open is not None: + self.on_open() + + def close(self) -> None: + if self._fh is not None and self.on_close is not None: + self.on_close() + super().close() + + class RosHub(B.Hub): """bridge.py's Hub + a ROS mirror of every frame on /arena/frame.""" @@ -254,7 +275,7 @@ async def run(args: argparse.Namespace) -> None: if B.serve is None: raise SystemExit("the `websockets` package is required (pixi install)") loop = asyncio.get_running_loop() - log = B.LogWriter(args.log, args.log_level, args.log_dir) + log = RosLogWriter(args.log, args.log_level, args.log_dir) queue: asyncio.Queue[str] = asyncio.Queue() pipeline = B.Pipeline( None, @@ -292,40 +313,38 @@ def on_bias(kind: str, env: dict) -> None: log.write_event(ev) inputs = RosInput(args.fictrac_port, warn) - inner = B.make_dispatcher(pipeline, log, inputs) + dispatch = B.make_dispatcher(pipeline, log, inputs) # unmodified bridge.py dispatcher node = BridgeNode(loop, queue, on_kinefly, on_bias) - def write_status() -> None: - """One connector_status line per source that produced anything (log must be open).""" + def on_log_open() -> None: + """A new file: note where its frames come from, and scope the source watchdog to it + (a source lost/resumed between runs must not leak a half pair into this file).""" + for s in node.stats.values(): + s.lost = False + s.last_rx_mono = None + log.write_event( + { + "type": "connector_status", + "dir": "bridge", + "ms": rel_ms(), + "src": "bridge", + "node": NODE_VERSION, + "rmw": os.environ.get("RMW_IMPLEMENTATION"), + "topics": {"fictrac": FICTRAC_TOPIC, "kinefly": KINEFLY_TOPIC, "bias": [BIAS_REPLY_TOPIC, BIAS_STATUS_TOPIC], "frame": FRAME_TOPIC}, + } + ) + + def on_log_close() -> None: + """One connector_status line per source that produced anything, before the file closes.""" for s in node.stats.values(): if s.count: log.write_event({"type": "connector_status", "dir": "bridge", "ms": rel_ms(), **s.summary()}) - async def dispatch(raw, websocket=None) -> None: - # Add the connector_status lines BEFORE the file closes (log_control off / export). - try: - obj = json.loads(raw if isinstance(raw, str) else raw.decode("utf-8", errors="replace")) - except (json.JSONDecodeError, AttributeError): - obj = None - if isinstance(obj, dict): - kind = obj.get("type") - if (kind == "log_control" and not obj.get("enabled")) or kind == "log_export": - write_status() - await inner(raw, websocket) - if isinstance(obj, dict) and obj.get("type") == "log_control" and obj.get("enabled"): - # A new file was opened: note where its frames come from. - log.write_event( - { - "type": "connector_status", - "dir": "bridge", - "ms": rel_ms(), - "src": "bridge", - "node": NODE_VERSION, - "rmw": os.environ.get("RMW_IMPLEMENTATION"), - "topics": {"fictrac": FICTRAC_TOPIC, "kinefly": KINEFLY_TOPIC, "bias": [BIAS_REPLY_TOPIC, BIAS_STATUS_TOPIC], "frame": FRAME_TOPIC}, - } - ) + log.on_open = on_log_open + log.on_close = on_log_close + if log.active: # a fixed --log path opened before the hooks existed + on_log_open() hub = RosHub(dispatch, node.frame_pub) pipeline.hub = hub @@ -383,9 +402,12 @@ async def watchdog() -> None: consumer.cancel() wd.cancel() await asyncio.gather(consumer, wd, return_exceptions=True) - write_status() - log.close() - executor.shutdown(timeout_sec=1.0) + log.close() # on_close writes the connector_status lines first + # Stop the ROS side in order: end the spin, WAIT for its thread, then destroy the node. + # Destroying while the executor thread is still inside spin() races the Zenoh session + # teardown and ends the process with "terminate called without an active exception". + executor.shutdown(timeout_sec=2.0) + ros_thread.join(timeout=3.0) node.destroy_node() diff --git a/ros2-poc/nodes/fictrac_udp_adapter.py b/ros2-poc/nodes/fictrac_udp_adapter.py index c09e939e..af5a7d0c 100644 --- a/ros2-poc/nodes/fictrac_udp_adapter.py +++ b/ros2-poc/nodes/fictrac_udp_adapter.py @@ -32,26 +32,14 @@ import time import rclpy -from rclpy.executors import ExternalShutdownException from rclpy.node import Node -from rclpy.qos import QoSDurabilityPolicy, QoSHistoryPolicy, QoSProfile, QoSReliabilityPolicy from std_msgs.msg import String -TOPIC = "/fictrac/raw" -RAW_QOS = QoSProfile( - reliability=QoSReliabilityPolicy.RELIABLE, - history=QoSHistoryPolicy.KEEP_LAST, - depth=200, - durability=QoSDurabilityPolicy.VOLATILE, -) +from _common import RELIABLE_QOS, spin, wrap_line +TOPIC = "/fictrac/raw" +RAW_QOS = RELIABLE_QOS -def wrap_line(src: str, seq: int, raw: str, rx_epoch_ms: int, rx_mono_ns: int) -> str: - """The JSON envelope every adapter publishes (pure; shared shape with kinefly_udp_adapter).""" - return json.dumps( - {"src": src, "seq": seq, "rx_epoch_ms": rx_epoch_ms, "rx_mono_ns": rx_mono_ns, "raw": raw}, - separators=(",", ":"), - ) class FicTracUdpAdapter(Node): @@ -127,17 +115,8 @@ def main(argv: list[str] | None = None) -> int: args, ros_args = p.parse_known_args(argv) rclpy.init(args=ros_args) node = FicTracUdpAdapter(args.host, args.port, args.status_every) - try: - rclpy.spin(node) - except (KeyboardInterrupt, ExternalShutdownException): - pass # Ctrl-C: rclpy ≥ Jazzy raises ExternalShutdownException from spin - finally: - node.destroy_node() - try: - rclpy.try_shutdown() - except Exception: # rclpy's own SIGINT handler may already have shut the context down (races in Jazzy) - pass - print(f"[fictrac-adapter] {node.lines} lines, {node.datagrams} datagrams", file=sys.stderr) + spin(node) + print(f"[fictrac-adapter] {node.lines} lines, {node.datagrams} datagrams", file=sys.stderr) return 0 diff --git a/ros2-poc/nodes/kinefly_udp_adapter.py b/ros2-poc/nodes/kinefly_udp_adapter.py index 3a7702de..b6d48237 100644 --- a/ros2-poc/nodes/kinefly_udp_adapter.py +++ b/ros2-poc/nodes/kinefly_udp_adapter.py @@ -32,20 +32,15 @@ import time import rclpy -from rclpy.executors import ExternalShutdownException from rclpy.node import Node -from rclpy.qos import QoSDurabilityPolicy, QoSHistoryPolicy, QoSProfile, QoSReliabilityPolicy from std_msgs.msg import String +from _common import RELIABLE_QOS, spin, wrap_line + TOPIC = "/kinefly/raw" DEFAULT_PORT = 60001 MAX_DATAGRAM = 16384 # KF/1 encoder bound (kinefly/core/udp.py) -RAW_QOS = QoSProfile( - reliability=QoSReliabilityPolicy.RELIABLE, - history=QoSHistoryPolicy.KEEP_LAST, - depth=200, - durability=QoSDurabilityPolicy.VOLATILE, -) +RAW_QOS = RELIABLE_QOS def kf1_reject_reason(data: bytes) -> str | None: @@ -66,12 +61,6 @@ def kf1_reject_reason(data: bytes) -> str | None: return None -def wrap_line(src: str, seq: int, raw: str, rx_epoch_ms: int, rx_mono_ns: int) -> str: - return json.dumps( - {"src": src, "seq": seq, "rx_epoch_ms": rx_epoch_ms, "rx_mono_ns": rx_mono_ns, "raw": raw}, - separators=(",", ":"), - ) - class KineflyUdpAdapter(Node): def __init__(self, host: str, port: int, status_every_s: float) -> None: @@ -139,17 +128,8 @@ def main(argv: list[str] | None = None) -> int: args, ros_args = p.parse_known_args(argv) rclpy.init(args=ros_args) node = KineflyUdpAdapter(args.host, args.port, args.status_every) - try: - rclpy.spin(node) - except (KeyboardInterrupt, ExternalShutdownException): - pass # Ctrl-C: rclpy ≥ Jazzy raises ExternalShutdownException from spin - finally: - node.destroy_node() - try: - rclpy.try_shutdown() - except Exception: # rclpy's own SIGINT handler may already have shut the context down (races in Jazzy) - pass - print(f"[kinefly-adapter] {node.published} published, {node.rejected} rejected", file=sys.stderr) + spin(node) + print(f"[kinefly-adapter] {node.published} published, {node.rejected} rejected", file=sys.stderr) return 0 diff --git a/ros2-poc/nodes/rig.py b/ros2-poc/nodes/rig.py index 073d8c46..15892ac6 100644 --- a/ros2-poc/nodes/rig.py +++ b/ros2-poc/nodes/rig.py @@ -18,8 +18,8 @@ import argparse import os import shlex -import signal import socket +import signal import subprocess import sys import threading @@ -31,15 +31,24 @@ SIM = HERE.parents[1] / "fictrac-bridge" / "fictrac_sim.py" -def wait_port(host: str, port: int, timeout_s: float) -> bool: - end = time.monotonic() + timeout_s - while time.monotonic() < end: - try: - with socket.create_connection((host, port), timeout=0.5): - return True - except OSError: - time.sleep(0.2) - return False +sys.path.insert(0, str(HERE)) +from _common import wait_port # noqa: E402 + + +def port_in_use(proto: str, port: int, host: str = "127.0.0.1") -> bool: + """True when binding host:port fails (something else holds it).""" + kind = socket.SOCK_STREAM if proto == "tcp" else socket.SOCK_DGRAM + s = socket.socket(socket.AF_INET, kind) + try: + if proto == "tcp": + # Ignore TIME_WAIT leftovers from a just-stopped rig; a LIVE listener still fails. + s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + s.bind((host, port)) + return False + except OSError: + return True + finally: + s.close() class Child: @@ -113,6 +122,30 @@ def main(argv: list[str] | None = None) -> int: args = p.parse_args(argv) py = sys.executable + # Pre-flight: the ports this rig will bind. A clear line beats the router's Rust + # panic text or a Python OSError traceback when a second `pixi run rig`, a stray + # router, or the shipping bridge 3.4 (also ws :8765 + udp :60000) is still running. + taken = [] + for proto, port, who in ( + ("tcp", 7447, "a Zenoh router (another `pixi run rig` / `pixi run router`)") if not args.no_router else (None, 0, ""), + ("tcp", 8765, "a bridge on the Studio WebSocket port — bridge 3.4 (`pixi run bridge` at the repo root) or another rig"), + ("udp", 60000, "a FicTrac receiver — bridge 3.4 or another fictrac adapter"), + ("udp", 60001, "another Kinefly adapter") if args.kinefly else (None, 0, ""), + ("tcp", 5010, "a BIAS program or bias_sim") if args.bias_sim else (None, 0, ""), + ): + if proto and port_in_use(proto, port): + taken.append(f" {proto} 127.0.0.1:{port} is in use — probably {who}") + if taken: + print("[rig] cannot start, ports already bound:\n" + "\n".join(taken) + "\n[rig] stop that process first (or pass --no-router if the router is meant to be shared)", file=sys.stderr) + return 2 + # The Zenoh config paths: pixi's activation.env sets them via $PIXI_PROJECT_ROOT, which a + # Windows shell would leave literal — set them explicitly here so `pixi run rig` is the + # same command on every platform. + cfg_dir = HERE.parent / "config" + os.environ["ZENOH_ROUTER_CONFIG_URI"] = str(cfg_dir / "zenoh-router.json5") + os.environ["ZENOH_SESSION_CONFIG_URI"] = str(cfg_dir / "zenoh-session.json5") + os.environ.setdefault("RMW_IMPLEMENTATION", "rmw_zenoh_cpp") + os.environ.setdefault("ZENOH_ROUTER_CHECK_ATTEMPTS", "0") children: list[Child] = [] if not args.no_router: children.append(Child("router", ["ros2", "run", "rmw_zenoh_cpp", "rmw_zenohd"])) @@ -158,8 +191,10 @@ def main(argv: list[str] | None = None) -> int: code = c.proc.returncode if c.proc else None print(f"[rig] {c.name} exited (code {code})", file=sys.stderr) children.remove(c) - if c is bridge: - print("[rig] the bridge node is gone — stopping the rig", file=sys.stderr) + if c is bridge or c.name == "router": + # Without the router every node retries forever while the Studio still + # sees a live WebSocket with no frames — fail loudly instead. + print(f"[rig] the {c.name} is gone — stopping the rig", file=sys.stderr) rc = 1 stop.set() break diff --git a/ros2-poc/tests/test_ros2_poc.py b/ros2-poc/tests/test_ros2_poc.py index 8494f835..cb4eaf64 100644 --- a/ros2-poc/tests/test_ros2_poc.py +++ b/ros2-poc/tests/test_ros2_poc.py @@ -182,14 +182,32 @@ def bias_cmd(*args: str) -> dict: bias_replies: dict = {} + def wait_for_log_line(predicate, timeout_s: float) -> bool: + """Tail the bridge node's on-disk run log until a line satisfies `predicate`.""" + end = time.monotonic() + timeout_s + while time.monotonic() < end: + files = sorted(runlogs.glob("arena-log-*.jsonl")) + if files: + try: + for line in files[-1].read_text(encoding="utf-8").splitlines(): + if predicate(line): + return True + except OSError: + pass + time.sleep(0.1) + return False + def side_actor() -> None: t_run0 = time.monotonic() bias_replies["connect"] = bias_cmd("connect") bias_replies["startRecording"] = bias_cmd("startRecording", "--filename", "poc_trial.avi") - # Kill the FicTrac adapter `kill_at` s into epoch index 1 (emulator: 0.5 s pre-run + epochs + ITIs). - t_kill = t_run0 + 0.5 + (a.epoch_s + 1.0) * 1 + a.kill_at - while time.monotonic() < t_kill: - time.sleep(0.05) + # Kill the FicTrac adapter `kill_at` s after epoch index 1 OPENS — anchored on the + # runner's own fictracApply line in the log, not on a wall-clock estimate. + kill_report["anchored"] = wait_for_log_line( + lambda l: '"op":"fictracApply"' in l and '"value":true' in l and '"condition":"cl_constant_1"' in l, + timeout_s=30 + a.epoch_s * 2, + ) + time.sleep(a.kill_at) kill_report["killed_at_ms"] = int((time.monotonic() - t_run0) * 1000) fictrac.kill9() kill_report["adapter_rc"] = fictrac.p.returncode if fictrac.p else None @@ -198,10 +216,13 @@ def side_actor() -> None: kill_report["restarted_at_ms"] = int((time.monotonic() - t_run0) * 1000) time.sleep(1.0) bias_replies["getTimestamp"] = bias_cmd("getTimestamp") - # stopRecording near the end of the run (after the last epoch starts). - t_stop = t_run0 + 0.5 + (a.epoch_s + 1.0) * (a.epochs - 1) + 1.0 - while time.monotonic() < t_stop: - time.sleep(0.05) + # stopRecording once the LAST epoch has opened (same anchor, so it lands inside the run). + last = f"cl_constant_{a.epochs - 1}" + wait_for_log_line( + lambda l: '"op":"fictracApply"' in l and '"value":true' in l and f'"condition":"{last}"' in l, + timeout_s=30 + a.epoch_s * a.epochs, + ) + time.sleep(1.0) bias_replies["stopRecording"] = bias_cmd("stopRecording") actor = threading.Thread(target=side_actor, name="side-actor", daemon=True) @@ -222,7 +243,7 @@ def side_actor() -> None: objs = read_jsonl(export) if export.exists() else [] disk = sorted(runlogs.glob("arena-log-*.jsonl")) check("export is byte-identical to the bridge node's file on disk", - bool(disk) and disk[-1].read_bytes() == export.read_bytes(), f"{[d.name for d in disk]}") + bool(disk) and export.exists() and disk[-1].read_bytes() == export.read_bytes(), f"{[d.name for d in disk]}") events = [o for o in objs if isinstance(o, dict)] rows_ft = [o for o in objs if isinstance(o, list) and isinstance(o[0], (int, float))] From 64624156843803ccc3bfaf48f0e664f6706cd1a6 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 14 Oct 2026 20:07:13 +0000 Subject: [PATCH 3/9] ros2-poc: portable process-group control (Windows: CTRL_BREAK_EVENT / TerminateProcess) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Python cannot send SIGINT to another process on Windows (send_signal raises ValueError), so Ctrl-C on the rig PC would have looked like a launcher crash. popen_group/signal_group in nodes/_common.py give every child its own process group on both platforms and map SIGINT → CTRL_BREAK_EVENT, SIGTERM/SIGKILL → TerminateProcess on Windows; rig.py and the test harness use them (and catch ValueError). Linux path unchanged (setsid + killpg). Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01KHyggowbCA5ucBg71bU26V --- ros2-poc/nodes/_common.py | 34 +++++++++++++++++++++++++++++++++ ros2-poc/nodes/rig.py | 19 ++++++------------ ros2-poc/tests/test_ros2_poc.py | 27 ++++++-------------------- 3 files changed, 46 insertions(+), 34 deletions(-) diff --git a/ros2-poc/nodes/_common.py b/ros2-poc/nodes/_common.py index 6ac5e99a..816a107c 100644 --- a/ros2-poc/nodes/_common.py +++ b/ros2-poc/nodes/_common.py @@ -12,7 +12,10 @@ from __future__ import annotations import json +import os +import signal import socket +import subprocess import time import rclpy @@ -49,6 +52,37 @@ def spin(node) -> None: pass +def popen_group(argv: list, **kwargs) -> subprocess.Popen: + """Popen with the child in its OWN process group, on every platform, so a stop signal + reaches wrappers and what they spawn (`ros2 run … rmw_zenohd` does not forward SIGINT + to the router binary). POSIX: setsid; Windows: CREATE_NEW_PROCESS_GROUP, which is also + what makes CTRL_BREAK_EVENT deliverable to that child.""" + if os.name == "nt": + kwargs.setdefault("creationflags", subprocess.CREATE_NEW_PROCESS_GROUP) + else: + kwargs.setdefault("start_new_session", True) + return subprocess.Popen(argv, **kwargs) + + +def signal_group(proc: subprocess.Popen, sig: int) -> None: + """Send SIGINT / SIGTERM / SIGKILL to the child's whole group, portably. + Windows has no SIGINT for other processes (send_signal raises ValueError): SIGINT maps to + CTRL_BREAK_EVENT on the child's group, SIGTERM and SIGKILL to TerminateProcess.""" + if os.name == "nt": + if sig == signal.SIGINT: + try: + proc.send_signal(signal.CTRL_BREAK_EVENT) # type: ignore[attr-defined] + return + except (ValueError, OSError): + pass + proc.kill() if sig == signal.SIGKILL else proc.terminate() + return + try: + os.killpg(proc.pid, sig) + except (ProcessLookupError, PermissionError): + proc.send_signal(sig) + + def wait_port(host: str, port: int, timeout_s: float) -> bool: end = time.monotonic() + timeout_s while time.monotonic() < end: diff --git a/ros2-poc/nodes/rig.py b/ros2-poc/nodes/rig.py index 15892ac6..db3982dc 100644 --- a/ros2-poc/nodes/rig.py +++ b/ros2-poc/nodes/rig.py @@ -32,7 +32,7 @@ sys.path.insert(0, str(HERE)) -from _common import wait_port # noqa: E402 +from _common import popen_group, signal_group, wait_port # noqa: E402 def port_in_use(proto: str, port: int, host: str = "127.0.0.1") -> bool: @@ -58,28 +58,21 @@ def __init__(self, name: str, argv: list[str]) -> None: self.proc: subprocess.Popen | None = None def start(self) -> None: - # Own process group per child, so a stop signal reaches wrappers AND what they - # spawn (`ros2 run … rmw_zenohd` does not forward SIGINT to the router binary). - self.proc = subprocess.Popen( + # Own process group per child (popen_group), so a stop signal reaches wrappers AND + # what they spawn (`ros2 run … rmw_zenohd` does not forward SIGINT to the router). + self.proc = popen_group( self.argv, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1, env=os.environ.copy(), - start_new_session=(os.name != "nt"), ) threading.Thread(target=self._pump, name=f"pump-{self.name}", daemon=True).start() def _signal(self, sig: int) -> None: assert self.proc - if os.name != "nt": - try: - os.killpg(self.proc.pid, sig) - return - except (ProcessLookupError, PermissionError): - pass - self.proc.send_signal(sig) + signal_group(self.proc, sig) def _pump(self) -> None: assert self.proc and self.proc.stdout @@ -103,7 +96,7 @@ def stop(self, grace_s: float = 3.0) -> None: self.proc.wait(2.0) except subprocess.TimeoutExpired: self._signal(signal.SIGKILL) - except (ProcessLookupError, OSError): + except (ProcessLookupError, OSError, ValueError): pass diff --git a/ros2-poc/tests/test_ros2_poc.py b/ros2-poc/tests/test_ros2_poc.py index cb4eaf64..4d9d7fa7 100644 --- a/ros2-poc/tests/test_ros2_poc.py +++ b/ros2-poc/tests/test_ros2_poc.py @@ -38,7 +38,6 @@ import os import shutil import signal -import socket import subprocess import sys import tempfile @@ -53,6 +52,8 @@ SIM = REPO / "fictrac-bridge" / "fictrac_sim.py" BRIDGE_PY = REPO / "fictrac-bridge" / "bridge.py" PY = sys.executable +sys.path.insert(0, str(NODES)) +from _common import popen_group, signal_group, wait_port # noqa: E402 results: list[tuple[str, bool, str]] = [] @@ -63,16 +64,6 @@ def check(name: str, ok: bool, info: str = "") -> bool: return bool(ok) -def wait_port(host: str, port: int, timeout_s: float) -> bool: - end = time.monotonic() + timeout_s - while time.monotonic() < end: - try: - with socket.create_connection((host, port), timeout=0.5): - return True - except OSError: - time.sleep(0.2) - return False - class Proc: def __init__(self, name: str, argv: list[str], logdir: Path) -> None: @@ -82,21 +73,15 @@ def __init__(self, name: str, argv: list[str], logdir: Path) -> None: self.p: subprocess.Popen | None = None def start(self) -> "Proc": - # Own process group, so stop() reaches `ros2 run`'s child (the router binary) too. - self.p = subprocess.Popen(self.argv, stdout=self.log, stderr=subprocess.STDOUT, text=True, start_new_session=(os.name != "nt")) + # Own process group (nodes/_common.popen_group), so stop() reaches `ros2 run`'s child too. + self.p = popen_group(self.argv, stdout=self.log, stderr=subprocess.STDOUT, text=True) return self def alive(self) -> bool: return self.p is not None and self.p.poll() is None def _signal(self, sig: int) -> None: - if os.name != "nt": - try: - os.killpg(self.p.pid, sig) - return - except (ProcessLookupError, PermissionError): - pass - self.p.send_signal(sig) + signal_group(self.p, sig) def kill9(self) -> None: if self.alive(): @@ -115,7 +100,7 @@ def stop(self) -> None: self.p.wait(3) except subprocess.TimeoutExpired: self._signal(signal.SIGKILL) - except (ProcessLookupError, OSError): + except (ProcessLookupError, OSError, ValueError): pass self.log.flush() From 48aee7fdd2114db6d9918ca692b11ae8ce00fce6 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 14 Oct 2026 20:42:53 +0000 Subject: [PATCH 4/9] ros2-poc README: 60-min soak result (78/78, flat latency, RSS creep as a watch item) Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01KHyggowbCA5ucBg71bU26V --- ros2-poc/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ros2-poc/README.md b/ros2-poc/README.md index 6aca454b..fe4b1b4d 100644 --- a/ros2-poc/README.md +++ b/ros2-poc/README.md @@ -114,7 +114,7 @@ what bridge 3.4 produces as well; the mapping itself is exact. | check | result | |---|---| -| **Soak**: `pixi run rig -- --sim --kinefly --bias --bias-sim` with the emulator looping 2 × 20 s epochs per run | 12 consecutive runs (≈ 10 min steady state) all passed; bridge node RSS 66.5 → 68.5 MB then flat, adapters flat at 61 MB, router 15 MB; latency p50 1.1 ms / p99 3.4–3.9 ms on every run | +| **Soak**: `pixi run rig -- --sim --kinefly --bias --bias-sim` with the emulator looping 2 × 20 s epochs per run + one BIAS command per run, 60 min | 78 / 78 runs passed, 78 / 78 BIAS replies ok, no launcher errors; latency flat (p50 1.6–1.8 ms, p99 3.2–4.6 ms). **Watch item:** RSS creeps — bridge node 67.4 → 71.8 MB (+58 kB/run), adapters +30–36 kB/run, BIAS node +28 kB/run, router +12 kB/run. Harmless for a rig session, but a slope, not noise; a multi-hour soak should precede calling it benign | | **Zero loss under load**: sim at 200 Hz × 4000 frames + Kinefly at 500 Hz × 10 000 | 4000 / 4000 FicTrac rows (frame counters 1..4000, no gap); every KF/1 frame sent while the log was open logged, no sequence gap; p99 3.3 ms (FicTrac) / 4.7 ms (Kinefly) | | **Router killed and restarted mid-run** (6 s outage) | no data gap at all (rmw_zenoh peers keep their direct links; the router is discovery), emulator run completed, log intact | | **Student mistakes**: a second `pixi run rig`; `pixi run rig` while bridge 3.4 holds ws :8765 / udp :60000 | `rig.py` pre-flights its ports and names the culprit in one line instead of a Rust panic or a Python traceback | From 213adfdd1456eef591959ca38d928844db7bb5e9 Mon Sep 17 00:00:00 2001 From: Michael B Reiser Date: Wed, 14 Oct 2026 17:13:57 -0400 Subject: [PATCH 5/9] ros2-poc: Mac test results (LAB-303) + warn on a relative BIAS filename Mac run of the items the Linux container could not cover: pixi install 25 s fresh, talker/listener, 29/29 acceptance, the unmodified Pages Studio against `pixi run rig -- --sim` with a G6 controller (two Mode-3 constant-bias runs auto-committed to the course repo, byte-identical to the bridge node's file, idx mismatch 0.00 %, runlog-check OK), the real BIAS Mac port and the real Kinefly fork (9600/9600 datagrams, 0 rejected, kf rows in the committed log). bias_node: the real Mac port resolves a relative `filename` against its own cwd and start-capture then succeeds without capturing; the reply now carries a warning for relative names. Co-Authored-By: Claude Fable 5.1 --- ros2-poc/README.md | 30 ++++++++++++++++++------------ ros2-poc/nodes/bias_node.py | 7 +++++++ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/ros2-poc/README.md b/ros2-poc/README.md index fe4b1b4d..6c0834ea 100644 --- a/ros2-poc/README.md +++ b/ros2-poc/README.md @@ -120,18 +120,24 @@ what bridge 3.4 produces as well; the mapping itself is exact. | **Student mistakes**: a second `pixi run rig`; `pixi run rig` while bridge 3.4 holds ws :8765 / udp :60000 | `rig.py` pre-flights its ports and names the culprit in one line instead of a Rust panic or a Python traceback | | **Code review** of the diff (nine findings) | fixed: BIAS worker exception guard + status-poll coalescing, watchdog scoped per log file (`RosLogWriter` hooks instead of re-parsing messages), router death stops the rig, kill timing in the harness anchored on the log, config paths set explicitly by `rig.py`, shared `_common.py` | -## Not verified here (needs the Mac / a rig) - -* A real browser: Web Serial and the Studio UI were replaced by the emulator. Run the Studio - against `pixi run rig -- --sim` on the Mac and commit a run log through the normal path. -* The real BIAS Mac port: command names and the JSON-array reply shape follow BIAS's - documented external interface; the `value` payloads are logged verbatim and untested. -* The real Kinefly fork sending `--udp 127.0.0.1:60001` (only `kinefly_sim.py`, which follows - `kinefly/core/udp.py` byte for byte, was used). -* Windows (`win-64` resolves and locks; nothing was executed there) and the macOS router with - IPv6 present (the loopback config sidesteps it). -* `scripts/runlog-check.py` fails on these logs for want of `run_metadata.firmware`, - `stream_schema` and `trial_quality`, which only a Studio run with a controller produces. +## Mac results (2026-10-14, MacBook Pro osx-arm64, macOS 27.0.1, Chrome 155) + +The items the container could not cover, run on the lab Mac with the 2×10 bench arena +(controller fw `c15d840a 2x10 2026-09-29`), the real BIAS Mac port and the real Kinefly fork. + +| step | result | +|---|---| +| `pixi install` | **25 s** wall for a fresh download (the package cache had none of these packages), 1.0 GB env, no manual step; `ros-jazzy-rmw-zenoh-cpp` 0.2.10 from the lock | +| `pixi run talker` / `listener` under `rmw_zenoh_cpp` | router listening 2.9 s after start; every message heard ≈ 1.5 ms after it was published. The only noise is the stock demo nodes' `rcl_shutdown already called` traceback on Ctrl-C (an upstream `demo_nodes_py` quirk, not the middleware) | +| `pixi run test -- --keep` | **29 / 29** in 27 s; adapter→bridge latency p50 0.89 ms / p99 1.43 ms (1.7 / 3.8 in the container) | +| **Unmodified Arena Studio** (the GitHub Pages copy, v0.94) → `pixi run rig -- --sim --sim-args "--model fly --kp 2 --seed 1"`, G6 controller over Web Serial | Connected to the bridge node first try; **no Chrome local-network-access prompt** appeared for `reiserlab.github.io` → `ws://localhost:8765`. Two Mode-3 constant-bias runs (`cl_bias_none` / `cl_bias_constant` +90°/s / `cl_bias_constant_rev` −90°/s, 20 s each) **auto-committed through the normal path** to `reiserlab/cshl-2026-course` `runlogs/bench00/` (`…T21-02-13__lhc9k8i6.jsonl.gz`, `…T21-09-58__lrbhnsf5.jsonl.gz`); each gunzips byte-identical to the bridge node's own file. `scripts/closed-loop-report.py`: 3 epochs from `fictracApply`, idx mismatch **0.00 %** in all six epochs; rejection +0.39 / −0.46 and +0.48 / −0.50 (the card's only rotating pattern is a 20-frame grating, so the model fly's "feature" wraps every 36°; the mapping check is the point here). `scripts/runlog-check.py`: **OK** on both files — `run_metadata.firmware` and SD identity present, trial verdicts 3 pass / 0 fail, `cc_0x70_ok` 3000, `fictrac_per_cmd` 1.0 (the container's logs lacked these only because the emulator has no controller) | +| Real BIAS Mac port (`bias/build/test_gui.app`, C922 webcam as cam 0, HTTP :5010) via `pixi run bias-node` + `bias-cmd` | `connect` / `startRecording` / `getTimestamp` / `stopRecording` all `ok`, during the second Studio run as well (60 status + 3 reply connector events in that committed log). Reply shape identical to `bias_sim.py` (`[{"command","message","success","value"}]`); `get-status` value keys identical except the sim's extra `videoFile`. `start-capture` 180–280 ms, every other command ≈ 1 ms; server listens dual-stack (`*:5010`), 127.0.0.1 works. Two real-port facts the sim does not have: (1) a **relative `filename` resolves against BIAS's own cwd** (`/` when launched with `open`); `start-capture` then returns success while nothing captures (`capturing:false`, frame count stays 0, the preview never goes live) — `bias_node.py` now warns on a relative filename; (2) `get-video-file` answers `.jpg`, but the Mac port writes `_cam_0_date_…_v001/movie.mjpg` + `index.txt` and a `stamp_log_cam0.txt` beside it, so the logged `artifact.path` is the stem the operator asked for, not the file on disk | +| Real Kinefly fork (`mbreiser/Kinefly-MacOS`, OpenCV 4.13, headless, synthetic 160 fps sample) `--udp 127.0.0.1:60001` → `pixi run kinefly-adapter` | 160 / 160, then 9600 / 9600 datagrams sent with `send_errors 0`; adapter **0 rejected**; **9487 `["kf",…]` rows** with left / right / head / abdomen angles in the committed run log (the remainder fell outside the log window); adapter→bridge p50 0.73 / p99 1.29 ms at 160 Hz | + +One detour worth knowing: the stock `fictrac_bias_test.yaml` names `frame2_h_ccw_200f` at `pattern_ID 4`; this card's slot 4 is a 1-frame color test pattern, the runner read `frames: 1` from the card (correctly) and the display sat on frame 0. The protocol was re-pointed at the card's 20-frame grating — a card-content mismatch the Studio already warns about, not a bridge issue. + +**Still not verified:** Windows execution (`win-64` only resolves and locks), and the macOS router +with the stock IPv6 config (the loopback config was used throughout). ## Observations for the decision diff --git a/ros2-poc/nodes/bias_node.py b/ros2-poc/nodes/bias_node.py index d2bf9a48..804ab12b 100644 --- a/ros2-poc/nodes/bias_node.py +++ b/ros2-poc/nodes/bias_node.py @@ -32,6 +32,7 @@ import argparse import json +import os import queue import sys import threading @@ -200,6 +201,12 @@ def _do_cmd(self, req: dict) -> None: # The protocol's connect(ip, port) retargets the node (rig YAML normally sets these). self.http.host = str(params.get("ip") or self.http.host) self.http.port = int(params.get("port") or self.http.port) + if command == "startRecording" and params.get("filename") and not os.path.isabs(str(params["filename"])): + # Seen on the real Mac port (2026-10-14): a relative name resolves against BIAS's + # own cwd (`/` when launched with `open`), start-capture still answers success, + # and nothing captures. Say so in the reply instead of letting the run go dark. + out["warning"] = f"relative filename {params['filename']!r} resolves against BIAS's working directory, not the rig's; use an absolute path" + self.get_logger().warning(out["warning"]) steps = plan(command, params) except ValueError as exc: out.update({"ok": False, "outcome": "error", "error": str(exc)}) From 6245ba7a8f9802a24011e89ed92339a411ae5e70 Mon Sep 17 00:00:00 2001 From: Michael B Reiser Date: Wed, 14 Oct 2026 17:55:04 -0400 Subject: [PATCH 6/9] ros2-poc: Windows rig test plan + portable SIGKILL constant WINDOWS-TEST.md scripts the one open acceptance item (install timing, the $PIXI_PROJECT_ROOT expansion check, talker/listener, the 29-check harness, rig + unmodified Studio + controller, real BIAS over HTTP with an absolute video path and the unknown-outcome path, Ctrl-C cleanup, student mistakes) and lists what to send back. Windows' signal module has no SIGKILL, so rig.py's stop escalation, the harness's mid-run adapter kill and _common.signal_group would have raised AttributeError there; they now share _common.SIGKILL (getattr fallback 9). Co-Authored-By: Claude Fable 5.1 --- ros2-poc/README.md | 5 +- ros2-poc/WINDOWS-TEST.md | 165 ++++++++++++++++++++++++++++++++ ros2-poc/nodes/_common.py | 7 +- ros2-poc/nodes/rig.py | 4 +- ros2-poc/tests/test_ros2_poc.py | 6 +- 5 files changed, 179 insertions(+), 8 deletions(-) create mode 100644 ros2-poc/WINDOWS-TEST.md diff --git a/ros2-poc/README.md b/ros2-poc/README.md index 6c0834ea..e1a8e86d 100644 --- a/ros2-poc/README.md +++ b/ros2-poc/README.md @@ -136,8 +136,9 @@ The items the container could not cover, run on the lab Mac with the 2×10 bench One detour worth knowing: the stock `fictrac_bias_test.yaml` names `frame2_h_ccw_200f` at `pattern_ID 4`; this card's slot 4 is a 1-frame color test pattern, the runner read `frames: 1` from the card (correctly) and the display sat on frame 0. The protocol was re-pointed at the card's 20-frame grating — a card-content mismatch the Studio already warns about, not a bridge issue. -**Still not verified:** Windows execution (`win-64` only resolves and locks), and the macOS router -with the stock IPv6 config (the loopback config was used throughout). +**Still not verified:** Windows execution (`win-64` only resolves and locks; the rig-PC session is +scripted step by step in `WINDOWS-TEST.md`), and the macOS router with the stock IPv6 config (the +loopback config was used throughout). ## Observations for the decision diff --git a/ros2-poc/WINDOWS-TEST.md b/ros2-poc/WINDOWS-TEST.md new file mode 100644 index 00000000..51952cae --- /dev/null +++ b/ros2-poc/WINDOWS-TEST.md @@ -0,0 +1,165 @@ +# ROS 2 PoC: Windows rig test (LAB-303) + +The one acceptance item still open after the Mac run (see `README.md` → "Mac results") is +**Windows**, where most rig PCs live. This is a step-by-step for one session on a rig PC with a +G6 controller, BIAS (the Windows `bias_gui.exe` with a FLIR camera) and, if present, FicTrac. +Budget: about an hour. **A failure with its verbatim error text is as valuable as a pass**: copy +the text before trying anything to fix it. + +Nothing here touches bridge 3.4 or the Studio. `ros2-poc/` is its own pixi workspace. + +## 0. Before starting + +- Repo: `reiserlab/webDisplayTools`, branch `claude/ecstatic-noether-art3qx` (draft PR #252). + `git fetch && git switch claude/ecstatic-noether-art3qx`. +- Stop bridge 3.4 if it is running (the terminal with `pixi run bridge`): the PoC binds the same + ports. FicTrac itself may keep running; it only *sends* to UDP 60000. +- `pixi --version` (anything recent). PowerShell, not Git Bash, for the `Measure-Command` timing. +- Chrome version (Settings → About). Note it; LAB-304's local-network-access prompt is Chrome-version dependent. +- Ports must be free: `netstat -ano | findstr ":7447 :8765 :60000 :60001 :5010"` prints nothing except BIAS on 5010. + +## 1. Install (timed) + +```powershell +cd ros2-poc +Measure-Command { pixi install --locked | Out-Default } +``` + +Record the wall time and whether anything had to be done by hand. Then the one Windows-only +check the README flags: does pixi expand `$PIXI_PROJECT_ROOT` in `[activation.env]`? + +```powershell +pixi run python -c "import os; print(os.environ['ZENOH_ROUTER_CONFIG_URI'])" +``` + +Expected: a real path ending in `ros2-poc\config\zenoh-router.json5`. If it prints the literal +`$PIXI_PROJECT_ROOT/...`, the individual `router` / `*-adapter` tasks will use the stock IPv6 +config (or fail); `pixi run rig` is unaffected because `rig.py` sets both paths itself. +**Write down which of the two you saw.** + +## 2. Middleware (three terminals) + +```powershell +pixi run router # terminal 1: expect "Zenoh can be reached at: tcp/127.0.0.1:7447" +pixi run listener # terminal 2 +pixi run talker # terminal 3 +``` + +Pass: every `Publishing: "Hello World: N"` has a matching `I heard` within a few ms. Ctrl-C all +three (Ctrl-C in the talker/listener prints an `rcl_shutdown already called` traceback on macOS +too; that is the stock demo nodes, not a failure). Note whether the router keeps running after +Ctrl-C (`tasklist | findstr rmw_zenohd`); on POSIX `ros2 run` does not forward the signal and +`rig.py` works around it with process groups. + +## 3. Acceptance harness + +```powershell +pixi run test -- --keep +``` + +Expected: `29 / 29 checks passed` in about 30 s and a line `artifacts kept in …`. Keep that +directory (it has `summary.md`, the exported log and `proc-logs\`). Windows-specific things it +exercises for the first time: child processes in their own group (`CREATE_NEW_PROCESS_GROUP`), +`CTRL_BREAK_EVENT` as the stop signal, `TerminateProcess` for the mid-run adapter kill, and +console encoding (`PYTHONUTF8=1` from the workspace). If it fails, send `summary.md` plus the +whole `proc-logs\` folder. + +## 4. The rig with the unmodified Studio and the controller + +```powershell +pixi run rig -- --sim --sim-args "--model fly --kp 2 --seed 1" +``` + +Expected: `[rig] up: router, fictrac, bridge, sim — Studio → ws://localhost:8765`. Then in Chrome: + + +1. Run view → **Bridge: Connect**. Expect `connected · rx N`, the scope scrolling, and note whether + Chrome shows a **local-network-access prompt** (none appeared on the Mac, Chrome 155). +2. **Connect** (top right) → pick the controller in the serial-port picker. +3. Open a Mode-3 closed-loop protocol with a constant bias (`fictrac_bias_test.yaml` from the + site library). **Check the pattern first:** Console → SD listing must show the protocol's + pattern *by name* with more than one frame. On the Mac bench card slot 4 held a 1-frame test + pattern, so the display sat on frame 0 until the protocol was re-pointed at a 20-frame + grating. If the card differs, edit the pattern name / `pattern_ID` in Edit view to a rotating + pattern that is on the card (any frame count > 1 works; the report checks the mapping, not + the pattern). +4. Fill experimenter / genotype / age / sex / fly #, **Run experiment**, let it finish, let it + auto-commit (bench id and token must be set as for any course run). +5. Fetch the committed `.jsonl.gz` from `runlogs//` in the course repo and run both + readers from `ros2-poc` (the scripts are stdlib Python, the workspace Python is fine): + +```powershell +pixi run python ..\scripts\closed-loop-report.py .jsonl.gz +pixi run python ..\scripts\runlog-check.py .jsonl.gz +``` + +Pass: three epochs, idx mismatch 0.00 % (≤ 1 boundary row), `runlog-check` prints `OK` with the +firmware line. Also compare with the bridge node's own file in `ros2-poc\runlogs\` (gunzip the +committed one; they were byte-identical on the Mac). + +If the rig has **real FicTrac**: repeat step 4 once without `--sim` with FicTrac running and a +ball; the adapter log should show its line rate. + +## 5. Real BIAS on Windows + +BIAS must have its external-control HTTP server on. In the camera window: the server menu +(port shows as `Port (5010)...` for camera 0); enable it. Check from PowerShell: + +```powershell +curl.exe "http://127.0.0.1:5010/?get-status" +``` + +Expected: `[ { "command" : "get-status", "success" : true, "value" : { "capturing" : …, "connected" : …, "frameCount" : …, "framesPerSec" : …, "logging" : …, "timeStamp" : … } } ]` +(the Mac port's shape; note any extra or missing key). Then, with the rig from step 4 still up, +in a new terminal: + +```powershell +pixi run bias-node -- --host 127.0.0.1 --port 5010 +``` + +and in another, **using an absolute path** for the video (on the Mac a relative name resolved +against BIAS's own working directory and capture silently never started; the node now warns): + +```powershell +pixi run bias-cmd -- connect --json +pixi run bias-cmd -- startRecording --filename C:\Users\\Videos\poc.avi --json +curl.exe "http://127.0.0.1:5010/?get-status" # capturing true, frameCount rising +pixi run bias-cmd -- getTimestamp --json +pixi run bias-cmd -- stopRecording --json +dir C:\Users\\Videos\ +``` + +Record: every reply (`--json` prints it), the `value` of `get-video-file` versus the file(s) +actually written (the Mac port wrote `_cam_0_date_…_v001\movie.mjpg` and a +`stamp_log_cam0.txt`; the Windows BIAS with Spinnaker may write the `.avi` it was asked for), +`start-capture` round-trip in ms, and whether the camera preview went live. + +**Unknown-outcome path** (the LAB-303 semantics): start a recording, then close BIAS while the +node polls. Expect `/bias/status` lines with `reachable:false`, and a `bias-cmd -- getTimestamp` +to come back `outcome: "unknown"` or `error` (exit code 3 or 1), never a hang. Restart BIAS: +status must flip back to `reachable:true` without restarting the node. + +If a Studio run is in progress while you do this, the status and reply lines land in that run's +committed log as `{"type":"connector","src":"bias",…}` events (60 status + 3 replies on the Mac). + +## 6. Kinefly + +No Windows build of the fork exists; `pixi run kinefly-sim` exercises the adapter path +(`pixi run rig -- --kinefly` first). Expected: `N KF/1 frames published, 0 rejected` in the +adapter log. Skip if short on time; the Mac covered the real fork. + +## 7. Shutdown and student mistakes + +- Ctrl-C the rig terminal. Expected: children stop in reverse order, `[rig] stopped`, **no + Python traceback, no orphan `rmw_zenohd.exe`** (`tasklist | findstr rmw_zenohd`). +- Start `pixi run rig` twice: the second must exit with code 2 and name the ports in one line. +- Start `pixi run rig` while bridge 3.4 holds :8765 / :60000: same one-line refusal naming 3.4. + +## What to send back + +- Step 1 wall time, the `$PIXI_PROJECT_ROOT` result, `pixi info` output. +- Step 3: `summary.md` (and `proc-logs\` on any failure). +- Step 4: the committed run file name, both reader outputs, whether the Chrome prompt appeared. +- Step 5: the `--json` replies, the `get-status` body, what BIAS wrote on disk, the unknown-path behavior. +- Step 7: pass/fail per line. +- Any error text, verbatim, with the step number. Small fixes can go straight onto the PR branch. diff --git a/ros2-poc/nodes/_common.py b/ros2-poc/nodes/_common.py index 816a107c..99aacdde 100644 --- a/ros2-poc/nodes/_common.py +++ b/ros2-poc/nodes/_common.py @@ -52,6 +52,11 @@ def spin(node) -> None: pass +# Windows' signal module has no SIGKILL; every "kill it" site uses this constant so the +# escalation paths (rig.py, the test harness, signal_group) do not raise AttributeError there. +SIGKILL = getattr(signal, "SIGKILL", 9) + + def popen_group(argv: list, **kwargs) -> subprocess.Popen: """Popen with the child in its OWN process group, on every platform, so a stop signal reaches wrappers and what they spawn (`ros2 run … rmw_zenohd` does not forward SIGINT @@ -75,7 +80,7 @@ def signal_group(proc: subprocess.Popen, sig: int) -> None: return except (ValueError, OSError): pass - proc.kill() if sig == signal.SIGKILL else proc.terminate() + proc.kill() if sig == SIGKILL else proc.terminate() return try: os.killpg(proc.pid, sig) diff --git a/ros2-poc/nodes/rig.py b/ros2-poc/nodes/rig.py index db3982dc..85b5b17e 100644 --- a/ros2-poc/nodes/rig.py +++ b/ros2-poc/nodes/rig.py @@ -32,7 +32,7 @@ sys.path.insert(0, str(HERE)) -from _common import popen_group, signal_group, wait_port # noqa: E402 +from _common import SIGKILL, popen_group, signal_group, wait_port # noqa: E402 def port_in_use(proto: str, port: int, host: str = "127.0.0.1") -> bool: @@ -95,7 +95,7 @@ def stop(self, grace_s: float = 3.0) -> None: try: self.proc.wait(2.0) except subprocess.TimeoutExpired: - self._signal(signal.SIGKILL) + self._signal(SIGKILL) except (ProcessLookupError, OSError, ValueError): pass diff --git a/ros2-poc/tests/test_ros2_poc.py b/ros2-poc/tests/test_ros2_poc.py index 4d9d7fa7..818bee25 100644 --- a/ros2-poc/tests/test_ros2_poc.py +++ b/ros2-poc/tests/test_ros2_poc.py @@ -53,7 +53,7 @@ BRIDGE_PY = REPO / "fictrac-bridge" / "bridge.py" PY = sys.executable sys.path.insert(0, str(NODES)) -from _common import popen_group, signal_group, wait_port # noqa: E402 +from _common import SIGKILL, popen_group, signal_group, wait_port # noqa: E402 results: list[tuple[str, bool, str]] = [] @@ -85,7 +85,7 @@ def _signal(self, sig: int) -> None: def kill9(self) -> None: if self.alive(): - self._signal(signal.SIGKILL) + self._signal(SIGKILL) self.p.wait(5) def stop(self) -> None: @@ -99,7 +99,7 @@ def stop(self) -> None: try: self.p.wait(3) except subprocess.TimeoutExpired: - self._signal(signal.SIGKILL) + self._signal(SIGKILL) except (ProcessLookupError, OSError, ValueError): pass self.log.flush() From 27836623b174a536352d20fa4266ef6d7b3c9dbe Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 15 Oct 2026 15:12:25 +0000 Subject: [PATCH 7/9] ros2-poc: Foxglove dashboards (viz_node + two layouts), MCAP sizing study + two-channel log plan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - nodes/viz_node.py: typed republisher so Foxglove plots natively with NO custom message types — std_msgs/Float64 signals (/viz/fictrac|arena|kinefly|bias/*), Bool/String states, diagnostic_msgs/DiagnosticArray on /diagnostics (OK/STALE/WARN/ERROR per source with rate, seq, latency, last error + time), visualization_msgs/MarkerArray on /viz/markers (ball rotated by FicTrac lab-frame orientation with markings, fixed fly, arena cylinder, pattern feature at the mapped azimuth, readout) - foxglove/arena-fictrac.json, foxglove/arena-bias.json: layouts (3D, closed-loop plot, kinematics, index, health lights + gauges, BIAS state timeline, latest reply, last error, log) - pixi: ros-jazzy-foxglove-bridge (ws://127.0.0.1:8766; 8765 stays the Studio bridge), tasks viz / foxglove / size-study; rig.py --foxglove starts both (+ port pre-flight on 8766) - sizing/compare.py + sizing/frames300.py: NDJSON vs MCAP size study (per-message overhead, index, batching, zstd level; 300 Hz controller frame records every-frame vs changes-only) - README: Foxglove section; "Log format" section with the measured tables, per-hour numbers, the two-channel plan (frames batched 1 s + index changes per message) and 25 MiB file rolling - test harness: the no-custom-messages check now allows the ros-base interface packages Verified in the container: 22 typed channels advertised (CDR) on :8766, binary frames on subscription, 6 markers, diagnostics 50/100 Hz rows, BIAS state 1 Hz; acceptance 29/29. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01KHyggowbCA5ucBg71bU26V --- ros2-poc/README.md | 77 +++++ ros2-poc/foxglove/arena-bias.json | 192 ++++++++++++ ros2-poc/foxglove/arena-fictrac.json | 178 +++++++++++ ros2-poc/nodes/rig.py | 10 +- ros2-poc/nodes/viz_node.py | 428 +++++++++++++++++++++++++++ ros2-poc/pixi.lock | 394 ++++++++++++++++++++++++ ros2-poc/pixi.toml | 14 + ros2-poc/sizing/compare.py | 94 ++++++ ros2-poc/sizing/frames300.py | 73 +++++ ros2-poc/tests/test_ros2_poc.py | 7 +- 10 files changed, 1463 insertions(+), 4 deletions(-) create mode 100644 ros2-poc/foxglove/arena-bias.json create mode 100644 ros2-poc/foxglove/arena-fictrac.json create mode 100644 ros2-poc/nodes/viz_node.py create mode 100644 ros2-poc/sizing/compare.py create mode 100644 ros2-poc/sizing/frames300.py diff --git a/ros2-poc/README.md b/ros2-poc/README.md index e1a8e86d..adfbf5a6 100644 --- a/ros2-poc/README.md +++ b/ros2-poc/README.md @@ -140,6 +140,83 @@ One detour worth knowing: the stock `fictrac_bias_test.yaml` names `frame2_h_ccw scripted step by step in `WINDOWS-TEST.md`), and the macOS router with the stock IPv6 config (the loopback config was used throughout). +## Foxglove dashboards (2026-10-15) + +Two layouts under `foxglove/`, fed by a small typed republisher so nothing needs a custom +message type: `nodes/viz_node.py` turns the JSON envelopes into `std_msgs/Float64` signals +(`/viz/fictrac/*`, `/viz/arena/*`, `/viz/kinefly/*`, `/viz/bias/*`), `std_msgs/Bool` and +`String` states, a `diagnostic_msgs/DiagnosticArray` on `/diagnostics` (one row per source: +OK while data flows, STALE after `--stale-s`, WARN never seen, ERROR for BIAS unreachable or a +failed command, with rate / last sequence / latency / last error + time), and a +`visualization_msgs/MarkerArray` on `/viz/markers`: the ball rotated by FicTrac's lab-frame +orientation with markings so the rotation is visible, the fly fixed on top facing +X, the arena +as a translucent cylinder, the pattern feature as a bar on the wall at +`wrap180(frame_dir·idx·deg_per_frame + az0)` (the same mapping `fictrac_sim.py --model fly` +uses), and a text readout. The stock `foxglove_bridge` serves it on **ws://localhost:8766** +(8765 is the Studio bridge). + +```bash +pixi run rig -- --sim --sim-args "--model fly --kp 2 --seed 1" --foxglove # Arena + FicTrac +pixi run rig -- --sim --bias --bias-sim --foxglove # Arena + BIAS (sim) +pixi run rig -- --sim --bias --foxglove # Arena + real BIAS on :5010 +# Foxglove (desktop or app.foxglove.dev) → Open connection → Foxglove WebSocket → ws://localhost:8766 +# Layout → Import from file… → ros2-poc/foxglove/arena-fictrac.json or arena-bias.json +``` + +`arena-fictrac.json`: 3D scene, closed-loop plot (fly turn vs feature azimuth vs bias angle), +kinematics plot, frame-index plot, FicTrac light + rate gauge, diagnostics summary/detail, last +error, log. `arena-bias.json`: 3D scene, BIAS state timeline (unreachable / idle / preview / +recording), frame count vs arena index, latest BIAS reply (shows the `artifact` path), reachable / +capturing / writing-video lights, fps gauge, diagnostics, last error, log. Both work live and on a +replayed MCAP once the log moves to MCAP. Verified here only as topics and advertised channels +(no GUI in the container); the layouts are hand-written Foxglove JSON, so a panel whose schema +drifted shows up empty and is one click to re-point. + +## Log format: MCAP sizing and the two-channel plan (2026-10-15) + +If ROS 2 + Foxglove is chosen, the run log moves from gzipped NDJSON to **MCAP written by the +bridge node** (one writer, every source), JSON-schema channels (no code generation, `mcap cat +--json` stays readable), the protocol YAML and run metadata as attachments. Measured on this +session's run logs with `pixi run size-study -- ` (`sizing/compare.py`): + +| layout | bytes per record | vs today's gzip-9 NDJSON | +|---|---|---| +| NDJSON gzip-9 (bridge 3.4) | 14–15 | 1.00 | +| MCAP, one message per record, rosbag2 / Foxglove SDK defaults (zstd-3, per-message index) | 42 | 2.75–3.0 | +| … per-message index off (seek by chunk) | 25–26 | 1.7–1.8 | +| … + arena echoes batched 1 s per message + **zstd-19** | 15–16 | **1.00–1.11** | + +The per-message cost is fixed overhead that does not compress (31-byte record header with two +nanosecond stamps + a 16-byte uncompressed index entry) against ~45-byte payloads; typed binary +payloads buy almost nothing once compressed. The three knobs that matter: `noMessageIndex`, +batching streams nobody plots per sample, and the zstd level (the Python writer hard-codes 3; +rosbag2's MCAP plugin exposes `compressionLevel: Slowest` and `noMessageIndex: true`). + +**Per hour** (the unit that matters; experiments run for hours): behaviour streams ≈ 5–6 MB with +FicTrac at 50 Hz, ≈ 10 MB with Kinefly at 100 Hz too; at untuned defaults 15–28 MB. + +**Controller frame records at 300 Hz** (`["cf", …]`, one hour synthesized in `sizing/frames300.py`): + +| layout | every frame | changes only (idx steps, ≈ 50 Hz in Mode 3) | +|---|---|---| +| NDJSON gzip-9 | 15 MB | 2.7 MB | +| MCAP per record, defaults | 45 MB | 7.9 MB | +| MCAP per record, tuned | 21 MB | 3.7 MB | +| MCAP batched 1 s, zstd-19 | **11 MB** | **2.1 MB** | + +**The two-channel plan:** (1) `controller/frames` — every frame, batched one second per message +(≈ 11 MB/h): the stimulus-quality verdicts and display-gap detection need the per-frame SD/SPI +timings, and nobody plots a 300 Hz record individually; (2) `controller/index` — one message per +displayed-index change (≈ 3.7 MB/h): what the 3D arena view, the replay and Foxglove plot per +sample. Total ≈ 20–25 MB/h for a FicTrac + Kinefly rig with full frame records, so a 3 h run is +60–75 MB → **roll files at 25 MiB** (`.0001.mcap`, …; Foxglove opens the set, `mcap merge` +rejoins; under GitHub's 50 MB warning and the Contents-API ~30 MiB detour). Lean fallback if +needed: per-second SD/SPI statistics + a full record only for frames over the 10 ms threshold +(< 1 MB/h), at the cost of re-deriving a different threshold later. Camera frames never enter the +log. `publish_time` can carry the source clock (FicTrac camera stamp) for ≈ 4 %; Foxglove plots by +`log_time`, so the source time also stays in the payload. Synthetic timing fields are uniformly +random, so real files should come in somewhat under these numbers. + ## Observations for the decision * Install friction was low: a ~1.3 GB environment, one lock file, no system packages. The diff --git a/ros2-poc/foxglove/arena-bias.json b/ros2-poc/foxglove/arena-bias.json new file mode 100644 index 00000000..bd5d0f36 --- /dev/null +++ b/ros2-poc/foxglove/arena-bias.json @@ -0,0 +1,192 @@ +{ + "configById": { + "3D!arena": { + "cameraState": { + "perspective": true, + "distance": 9, + "phi": 58, + "thetaOffset": 35, + "targetOffset": [0, 0, 1.2], + "target": [0, 0, 0], + "targetOrientation": [0, 0, 0, 1], + "fovy": 45, + "near": 0.1, + "far": 1000 + }, + "followMode": "follow-pose", + "followTf": "arena", + "scene": { + "backgroundColor": "#0f1419", + "enableStats": false, + "transforms": { "showLabel": false, "axisScale": 0 } + }, + "transforms": {}, + "topics": { + "/viz/markers": { "visible": true } + }, + "layers": {}, + "publish": { + "type": "point", + "poseTopic": "/move_base_simple/goal", + "pointTopic": "/clicked_point", + "poseEstimateTopic": "/initialpose", + "poseEstimateXDeviation": 0.5, + "poseEstimateYDeviation": 0.5, + "poseEstimateThetaDeviation": 0.26 + }, + "imageMode": {} + }, + "Indicator!reachable": { + "path": "/viz/bias/reachable.data", + "style": "bulb", + "fallbackColor": "#8b949e", + "fallbackLabel": "BIAS: no status yet", + "rules": [ + { "operator": "=", "rawValue": "true", "color": "#00e676", "label": "BIAS reachable" }, + { "operator": "=", "rawValue": "false", "color": "#ff5252", "label": "BIAS unreachable" } + ] + }, + "Indicator!capturing": { + "path": "/viz/bias/capturing.data", + "style": "bulb", + "fallbackColor": "#8b949e", + "fallbackLabel": "capture: unknown", + "rules": [ + { "operator": "=", "rawValue": "true", "color": "#00e676", "label": "capturing" }, + { "operator": "=", "rawValue": "false", "color": "#8b949e", "label": "not capturing" } + ] + }, + "Indicator!logging": { + "path": "/viz/bias/logging.data", + "style": "bulb", + "fallbackColor": "#8b949e", + "fallbackLabel": "video: unknown", + "rules": [ + { "operator": "=", "rawValue": "true", "color": "#ffd740", "label": "writing video" }, + { "operator": "=", "rawValue": "false", "color": "#8b949e", "label": "no video" } + ] + }, + "Gauge!fps": { + "path": "/viz/bias/fps.data", + "minValue": 0, + "maxValue": 200, + "colorMap": "red-yellow-green", + "colorMode": "colormap", + "gradient": ["#0000ff", "#ff00ff"], + "reverse": false + }, + "StateTransitions!biasstate": { + "paths": [ + { "value": "/viz/bias/state.data", "timestampMethod": "receiveTime", "label": "BIAS" } + ], + "isSynced": true + }, + "Plot!frames": { + "title": "BIAS frame count vs displayed index", + "paths": [ + { "value": "/viz/bias/frame_count.data", "enabled": true, "timestampMethod": "receiveTime", "label": "camera frames" }, + { "value": "/viz/arena/index.data", "enabled": true, "timestampMethod": "receiveTime", "label": "arena frame index" } + ], + "showXAxisLabels": true, + "showYAxisLabels": true, + "showLegend": true, + "legendDisplay": "floating", + "showPlotValuesInLegend": true, + "isSynced": true, + "xAxisVal": "timestamp", + "sidebarDimension": 240, + "followingViewWidth": 60 + }, + "RawMessages!reply": { + "topicPath": "/bias/reply", + "diffEnabled": false, + "diffMethod": "custom", + "diffTopicPath": "", + "showFullMessageForDiff": false, + "expansion": "all" + }, + "DiagnosticSummary!health": { + "minLevel": 0, + "pinnedIds": [], + "hardwareIdFilter": "", + "topicToRender": "/diagnostics", + "sortByLevel": true + }, + "DiagnosticStatusPanel!detail": { + "topicToRender": "/diagnostics", + "collapsedSections": [] + }, + "RawMessages!lasterror": { + "topicPath": "/viz/last_error", + "diffEnabled": false, + "diffMethod": "custom", + "diffTopicPath": "", + "showFullMessageForDiff": false, + "expansion": "all" + }, + "RosOut!log": { + "searchTerms": [], + "minLogLevel": 2, + "nameFilter": {} + } + }, + "globalVariables": {}, + "userNodes": {}, + "playbackConfig": { "speed": 1 }, + "layout": { + "direction": "row", + "splitPercentage": 62, + "first": { + "direction": "column", + "splitPercentage": 48, + "first": "3D!arena", + "second": { + "direction": "column", + "splitPercentage": 30, + "first": "StateTransitions!biasstate", + "second": { + "direction": "row", + "splitPercentage": 55, + "first": "Plot!frames", + "second": "RawMessages!reply" + } + } + }, + "second": { + "direction": "column", + "splitPercentage": 28, + "first": { + "direction": "row", + "splitPercentage": 66, + "first": { + "direction": "row", + "splitPercentage": 50, + "first": "Indicator!reachable", + "second": { + "direction": "column", + "splitPercentage": 50, + "first": "Indicator!capturing", + "second": "Indicator!logging" + } + }, + "second": "Gauge!fps" + }, + "second": { + "direction": "column", + "splitPercentage": 40, + "first": "DiagnosticSummary!health", + "second": { + "direction": "column", + "splitPercentage": 55, + "first": "DiagnosticStatusPanel!detail", + "second": { + "direction": "column", + "splitPercentage": 40, + "first": "RawMessages!lasterror", + "second": "RosOut!log" + } + } + } + } + } +} diff --git a/ros2-poc/foxglove/arena-fictrac.json b/ros2-poc/foxglove/arena-fictrac.json new file mode 100644 index 00000000..71c24f41 --- /dev/null +++ b/ros2-poc/foxglove/arena-fictrac.json @@ -0,0 +1,178 @@ +{ + "configById": { + "3D!arena": { + "cameraState": { + "perspective": true, + "distance": 9, + "phi": 58, + "thetaOffset": 35, + "targetOffset": [0, 0, 1.2], + "target": [0, 0, 0], + "targetOrientation": [0, 0, 0, 1], + "fovy": 45, + "near": 0.1, + "far": 1000 + }, + "followMode": "follow-pose", + "followTf": "arena", + "scene": { + "backgroundColor": "#0f1419", + "enableStats": false, + "transforms": { "showLabel": false, "axisScale": 0 } + }, + "transforms": {}, + "topics": { + "/viz/markers": { "visible": true } + }, + "layers": {}, + "publish": { + "type": "point", + "poseTopic": "/move_base_simple/goal", + "pointTopic": "/clicked_point", + "poseEstimateTopic": "/initialpose", + "poseEstimateXDeviation": 0.5, + "poseEstimateYDeviation": 0.5, + "poseEstimateThetaDeviation": 0.26 + }, + "imageMode": {} + }, + "Plot!closedloop": { + "title": "Closed loop: fly vs display", + "paths": [ + { "value": "/viz/fictrac/turn_deg.data", "enabled": true, "timestampMethod": "receiveTime", "label": "fly turn (deg, unwrapped)" }, + { "value": "/viz/arena/azimuth_deg.data", "enabled": true, "timestampMethod": "receiveTime", "label": "feature azimuth (deg, right +)" }, + { "value": "/viz/arena/bias_deg.data", "enabled": true, "timestampMethod": "receiveTime", "label": "bias angle (deg)" } + ], + "showXAxisLabels": true, + "showYAxisLabels": true, + "showLegend": true, + "legendDisplay": "floating", + "showPlotValuesInLegend": true, + "isSynced": true, + "xAxisVal": "timestamp", + "sidebarDimension": 240, + "followingViewWidth": 30 + }, + "Plot!kinematics": { + "title": "FicTrac kinematics", + "paths": [ + { "value": "/viz/fictrac/speed_dps.data", "enabled": true, "timestampMethod": "receiveTime", "label": "speed (deg/s)" }, + { "value": "/viz/fictrac/fwd_rad.data", "enabled": true, "timestampMethod": "receiveTime", "label": "forward (rad, integrated)" }, + { "value": "/viz/fictrac/side_rad.data", "enabled": true, "timestampMethod": "receiveTime", "label": "side (rad, integrated)" } + ], + "showXAxisLabels": true, + "showYAxisLabels": true, + "showLegend": true, + "legendDisplay": "floating", + "showPlotValuesInLegend": true, + "isSynced": true, + "xAxisVal": "timestamp", + "sidebarDimension": 240, + "followingViewWidth": 30 + }, + "Plot!index": { + "title": "Displayed frame index", + "paths": [ + { "value": "/viz/arena/index.data", "enabled": true, "timestampMethod": "receiveTime", "label": "frame index" } + ], + "showXAxisLabels": true, + "showYAxisLabels": true, + "showLegend": false, + "isSynced": true, + "xAxisVal": "timestamp", + "followingViewWidth": 30 + }, + "DiagnosticSummary!health": { + "minLevel": 0, + "pinnedIds": [], + "hardwareIdFilter": "", + "topicToRender": "/diagnostics", + "sortByLevel": true + }, + "DiagnosticStatusPanel!detail": { + "topicToRender": "/diagnostics", + "collapsedSections": [] + }, + "Gauge!ftrate": { + "path": "/viz/fictrac/rate_hz.data", + "minValue": 0, + "maxValue": 120, + "colorMap": "red-yellow-green", + "colorMode": "colormap", + "gradient": ["#0000ff", "#ff00ff"], + "reverse": false + }, + "Indicator!fictrac": { + "path": "/viz/fictrac/rate_hz.data", + "style": "bulb", + "fallbackColor": "#8b949e", + "fallbackLabel": "FicTrac: no data", + "rules": [ + { "operator": ">", "rawValue": "5", "color": "#00e676", "label": "FicTrac flowing" }, + { "operator": "<=", "rawValue": "5", "color": "#ff5252", "label": "FicTrac stalled" } + ] + }, + "RawMessages!lasterror": { + "topicPath": "/viz/last_error", + "diffEnabled": false, + "diffMethod": "custom", + "diffTopicPath": "", + "showFullMessageForDiff": false, + "expansion": "all" + }, + "RosOut!log": { + "searchTerms": [], + "minLogLevel": 2, + "nameFilter": {} + } + }, + "globalVariables": {}, + "userNodes": {}, + "playbackConfig": { "speed": 1 }, + "layout": { + "direction": "row", + "splitPercentage": 66, + "first": { + "direction": "column", + "splitPercentage": 50, + "first": "3D!arena", + "second": { + "direction": "column", + "splitPercentage": 55, + "first": "Plot!closedloop", + "second": { + "direction": "row", + "splitPercentage": 60, + "first": "Plot!kinematics", + "second": "Plot!index" + } + } + }, + "second": { + "direction": "column", + "splitPercentage": 22, + "first": { + "direction": "row", + "splitPercentage": 50, + "first": "Indicator!fictrac", + "second": "Gauge!ftrate" + }, + "second": { + "direction": "column", + "splitPercentage": 40, + "first": "DiagnosticSummary!health", + "second": { + "direction": "column", + "splitPercentage": 55, + "first": "DiagnosticStatusPanel!detail", + "second": { + "direction": "column", + "splitPercentage": 40, + "first": "RawMessages!lasterror", + "second": "RosOut!log" + } + } + } + } + } +} diff --git a/ros2-poc/nodes/rig.py b/ros2-poc/nodes/rig.py index 85b5b17e..afbcbd15 100644 --- a/ros2-poc/nodes/rig.py +++ b/ros2-poc/nodes/rig.py @@ -106,6 +106,8 @@ def main(argv: list[str] | None = None) -> int: p.add_argument("--bias", action="store_true", help="also run the BIAS camera node") p.add_argument("--bias-sim", action="store_true", help="also run bias_sim.py (a fake BIAS program)") p.add_argument("--sim", action="store_true", help="also run the FicTrac simulator (random walk, 50 Hz)") + p.add_argument("--foxglove", action="store_true", help="also run the typed republisher (viz_node) + foxglove_bridge on ws://127.0.0.1:8766") + p.add_argument("--viz-args", default="", help="extra args for viz_node.py (--deg-per-frame, --frame-dir, --feature-az0)") p.add_argument("--no-router", action="store_true", help="a Zenoh router is already running on this host") p.add_argument("--bridge-args", default="", help="extra args for bridge_node.py") p.add_argument("--fictrac-args", default="", help="extra args for fictrac_udp_adapter.py") @@ -125,6 +127,7 @@ def main(argv: list[str] | None = None) -> int: ("udp", 60000, "a FicTrac receiver — bridge 3.4 or another fictrac adapter"), ("udp", 60001, "another Kinefly adapter") if args.kinefly else (None, 0, ""), ("tcp", 5010, "a BIAS program or bias_sim") if args.bias_sim else (None, 0, ""), + ("tcp", 8766, "a foxglove_bridge (another rig with --foxglove, or `pixi run foxglove`)") if args.foxglove else (None, 0, ""), ): if proto and port_in_use(proto, port): taken.append(f" {proto} 127.0.0.1:{port} is in use — probably {who}") @@ -153,6 +156,9 @@ def main(argv: list[str] | None = None) -> int: nodes.append(Child("bias", [py, str(NODES / "bias_node.py"), *shlex.split(args.bias_args)])) bridge = Child("bridge", [py, str(NODES / "bridge_node.py"), *shlex.split(args.bridge_args)]) nodes.append(bridge) + if args.foxglove: + nodes.append(Child("viz", [py, str(NODES / "viz_node.py"), *shlex.split(args.viz_args)])) + nodes.append(Child("foxglove", ["ros2", "run", "foxglove_bridge", "foxglove_bridge", "--ros-args", "-p", "port:=8766", "-p", "address:=127.0.0.1"])) if args.sim: nodes.append(Child("sim", [py, str(SIM), *shlex.split(args.sim_args)])) @@ -176,7 +182,9 @@ def main(argv: list[str] | None = None) -> int: c.start() children.append(c) time.sleep(0.3) - print(f"[rig] up: {', '.join(c.name for c in children)} — Studio → ws://localhost:8765 (Ctrl-C to stop)", file=sys.stderr) + print(f"[rig] up: {', '.join(c.name for c in children)} — Studio → ws://localhost:8765" + + (" Foxglove → ws://localhost:8766 (layouts: ros2-poc/foxglove/)" if args.foxglove else "") + + " (Ctrl-C to stop)", file=sys.stderr) while not stop.is_set(): time.sleep(0.5) for c in children: diff --git a/ros2-poc/nodes/viz_node.py b/ros2-poc/nodes/viz_node.py new file mode 100644 index 00000000..6088f47a --- /dev/null +++ b/ros2-poc/nodes/viz_node.py @@ -0,0 +1,428 @@ +#!/usr/bin/env python3 +"""viz_node.py — republish the JSON streams as STANDARD ROS messages that Foxglove plots natively. + +Foxglove cannot plot a JSON string hidden in std_msgs/String, so this node turns the PoC's +envelopes into typed messages from packages already in ros-base (no custom message types): + + std_msgs/Float64 (plot any of these as `.data`) + /viz/fictrac/heading_deg FicTrac col 17 heading, degrees 0–360 + /viz/fictrac/turn_deg unwrapped turn since the node started (Σ wrap180(Δheading)) + /viz/fictrac/speed_dps col 19 (rad/frame) × measured frame rate, degrees per second + /viz/fictrac/fwd_rad, /viz/fictrac/side_rad cols 20 / 21 + /viz/fictrac/rate_hz measured FicTrac frame rate (1 Hz update) + /viz/arena/index displayed frame index (from the bridge's /arena/frame) + /viz/arena/azimuth_deg feature azimuth in the fly's view = wrap180(frame_dir·idx·deg_per_frame + az0) + /viz/arena/bias_deg live bias angle when a waveform runs (else 0) + /viz/kinefly/left_deg, right_deg, lmr_deg, wbf_hz + /viz/bias/frame_count, /viz/bias/fps + std_msgs/Bool /viz/bias/reachable, /viz/bias/capturing, /viz/bias/logging + std_msgs/String /viz/bias/state ("unreachable|idle|preview|recording") — StateTransitions panel + /viz/last_error (" : ") + diagnostic_msgs/DiagnosticArray /diagnostics (1 Hz): one status per source — fictrac, kinefly, + bias, arena — OK (data flowing), STALE (seen, then silent > --stale-s), + WARN (never seen), ERROR (BIAS unreachable / last reply failed); values carry + rate_hz, messages, last_seq, adapter→viz latency, last_error. + visualization_msgs/MarkerArray /viz/markers (--markers-hz, default 20): the ball (sphere + + markings rotated by FicTrac's lab-frame orientation, cols 12–14), the fly + (arrow, fixed, facing +X), the arena (translucent cylinder) and the pattern + feature (bar on the wall at the current azimuth), a text readout. + +Pure presentation: nothing here is logged or fed back. Foxglove connects through the stock +foxglove_bridge (`pixi run foxglove`, ws://localhost:8766); layouts in foxglove/*.json. + + pixi run viz -- --deg-per-frame 1.8 --frame-dir 1 --feature-az0 0 +""" + +from __future__ import annotations + +import argparse +import json +import math +import sys +import time + +import rclpy +from diagnostic_msgs.msg import DiagnosticArray, DiagnosticStatus, KeyValue +from geometry_msgs.msg import Point +from rclpy.node import Node +from std_msgs.msg import Bool, ColorRGBA, Float64, String +from visualization_msgs.msg import Marker, MarkerArray + +from _common import RELIABLE_QOS, spin + +BALL_R = 1.0 +ARENA_R = 3.2 +ARENA_H = 1.6 + + +def wrap180(deg: float) -> float: + return ((deg + 180.0) % 360.0) - 180.0 + + +def rotvec_to_quat(rx: float, ry: float, rz: float): + """Axis-angle rotation vector (rad) → (x, y, z, w).""" + a = math.sqrt(rx * rx + ry * ry + rz * rz) + if a < 1e-12: + return (0.0, 0.0, 0.0, 1.0) + s = math.sin(a / 2.0) / a + return (rx * s, ry * s, rz * s, math.cos(a / 2.0)) + + +def rotate(q, v): + """Rotate vector v by quaternion q = (x, y, z, w).""" + x, y, z, w = q + vx, vy, vz = v + # t = 2 * cross(q.xyz, v); v' = v + w*t + cross(q.xyz, t) + tx, ty, tz = 2 * (y * vz - z * vy), 2 * (z * vx - x * vz), 2 * (x * vy - y * vx) + return (vx + w * tx + (y * tz - z * ty), vy + w * ty + (z * tx - x * tz), vz + w * tz + (x * ty - y * tx)) + + +def color(r, g, b, a=1.0) -> ColorRGBA: + c = ColorRGBA() + c.r, c.g, c.b, c.a = float(r), float(g), float(b), float(a) + return c + + +# Fixed markings on the unit ball (so rotation is visible): 12 points, deterministic. +MARKINGS = [] +for i in range(12): + th = 2.0 * math.pi * i / 12.0 + ph = 0.6 * math.sin(3.0 * th) + (0.3 if i % 2 else -0.3) + MARKINGS.append((math.cos(ph) * math.cos(th), math.cos(ph) * math.sin(th), math.sin(ph))) + + +class Source: + def __init__(self, name: str) -> None: + self.name = name + self.count = 0 + self.last_mono = None + self.last_seq = None + self.lat_ms = None + self.last_error = None + self.last_error_t = None + self._rate_n = 0 + self._rate_t = time.monotonic() + self.rate_hz = 0.0 + + def seen(self, seq=None, rx_epoch_ms=None) -> None: + self.count += 1 + self._rate_n += 1 + self.last_mono = time.monotonic() + if seq is not None: + self.last_seq = seq + if rx_epoch_ms is not None: + self.lat_ms = time.time() * 1000.0 - rx_epoch_ms + + def tick_rate(self) -> float: + now = time.monotonic() + dt = now - self._rate_t + self.rate_hz = self._rate_n / dt if dt > 0 else 0.0 + self._rate_n = 0 + self._rate_t = now + return self.rate_hz + + def error(self, text: str) -> None: + self.last_error = text + self.last_error_t = time.time() + + +class VizNode(Node): + def __init__(self, a: argparse.Namespace) -> None: + super().__init__("arena_viz") + self.a = a + self.src = {k: Source(k) for k in ("fictrac", "kinefly", "bias", "arena")} + f64 = lambda t: self.create_publisher(Float64, t, 10) + self.p = { + "heading": f64("/viz/fictrac/heading_deg"), + "turn": f64("/viz/fictrac/turn_deg"), + "speed": f64("/viz/fictrac/speed_dps"), + "fwd": f64("/viz/fictrac/fwd_rad"), + "side": f64("/viz/fictrac/side_rad"), + "ft_rate": f64("/viz/fictrac/rate_hz"), + "index": f64("/viz/arena/index"), + "az": f64("/viz/arena/azimuth_deg"), + "bias": f64("/viz/arena/bias_deg"), + "left": f64("/viz/kinefly/left_deg"), + "right": f64("/viz/kinefly/right_deg"), + "lmr": f64("/viz/kinefly/lmr_deg"), + "wbf": f64("/viz/kinefly/wbf_hz"), + "frames": f64("/viz/bias/frame_count"), + "fps": f64("/viz/bias/fps"), + } + self.p_bool = { + "reachable": self.create_publisher(Bool, "/viz/bias/reachable", 10), + "capturing": self.create_publisher(Bool, "/viz/bias/capturing", 10), + "logging": self.create_publisher(Bool, "/viz/bias/logging", 10), + } + self.p_state = self.create_publisher(String, "/viz/bias/state", 10) + self.p_err = self.create_publisher(String, "/viz/last_error", 10) + self.p_diag = self.create_publisher(DiagnosticArray, "/diagnostics", 10) + self.p_markers = self.create_publisher(MarkerArray, "/viz/markers", 10) + + self.create_subscription(String, "/fictrac/raw", self._fictrac, RELIABLE_QOS) + self.create_subscription(String, "/kinefly/raw", self._kinefly, RELIABLE_QOS) + self.create_subscription(String, "/bias/status", self._bias_status, RELIABLE_QOS) + self.create_subscription(String, "/bias/reply", self._bias_reply, RELIABLE_QOS) + self.create_subscription(String, "/arena/frame", self._arena, 10) + + # State for the markers + self.quat = (0.0, 0.0, 0.0, 1.0) + self.heading_deg = 0.0 + self.turn_deg = 0.0 + self._prev_hd = None + self.idx = 0 + self.az_deg = 0.0 + self.bias_deg = 0.0 + self.bias_active = False + self.bias_state = "unreachable" + self.create_timer(1.0, self._diagnostics) + self.create_timer(1.0 / max(1.0, a.markers_hz), self._markers) + self.get_logger().info("typed republisher up: /viz/*, /diagnostics, /viz/markers (Foxglove via foxglove_bridge :8766)") + + # ── helpers ───────────────────────────────────────────────────────────────── + def _pub(self, key: str, value: float) -> None: + m = Float64() + m.data = float(value) + self.p[key].publish(m) + + def _pub_bool(self, key: str, value: bool) -> None: + m = Bool() + m.data = bool(value) + self.p_bool[key].publish(m) + + def _pub_str(self, pub, text: str) -> None: + m = String() + m.data = text + pub.publish(m) + + @staticmethod + def _env(msg: String): + try: + e = json.loads(msg.data) + except json.JSONDecodeError: + return None + return e if isinstance(e, dict) else None + + def _note_error(self, src: str, text: str) -> None: + self.src[src].error(text) + self._pub_str(self.p_err, f"{time.strftime('%H:%M:%S')} {src}: {text}") + + # ── subscriptions ─────────────────────────────────────────────────────────── + def _fictrac(self, msg: String) -> None: + env = self._env(msg) + if not env or not isinstance(env.get("raw"), str): + return + parts = env["raw"].split(",") + if parts and parts[0].strip()[:2].upper() == "FT": + if parts[0].strip() != "FT": + return + parts = parts[1:] + try: + f = [float(p) for p in parts] + except ValueError: + return + if len(f) < 21: + return + s = self.src["fictrac"] + s.seen(int(f[0]), env.get("rx_epoch_ms")) + hd = math.degrees(f[16]) % 360.0 + if self._prev_hd is not None: + self.turn_deg += wrap180(hd - self._prev_hd) + self._prev_hd = hd + self.heading_deg = hd + self.quat = rotvec_to_quat(f[11], f[12], f[13]) + self._pub("heading", hd) + self._pub("turn", self.turn_deg) + self._pub("speed", math.degrees(f[18]) * (s.rate_hz or self.a.assume_rate)) + self._pub("fwd", f[19]) + self._pub("side", f[20]) + + def _kinefly(self, msg: String) -> None: + env = self._env(msg) + if not env or not isinstance(env.get("raw"), str): + return + try: + pkt = json.loads(env["raw"]) + except json.JSONDecodeError: + return + self.src["kinefly"].seen(pkt.get("sequence"), env.get("rx_epoch_ms")) + parts = pkt.get("parts") or {} + + def angle(name): + p = parts.get(name) or {} + a = p.get("angles_rad") or [] + return math.degrees(a[0]) if p.get("valid") and a else None + + l, r = angle("left"), angle("right") + if l is not None: + self._pub("left", l) + if r is not None: + self._pub("right", r) + if l is not None and r is not None: + self._pub("lmr", l - r) + aux = parts.get("aux") or {} + if aux.get("frequency_valid") and isinstance(aux.get("frequency_hz"), (int, float)): + self._pub("wbf", aux["frequency_hz"]) + + def _bias_status(self, msg: String) -> None: + st = self._env(msg) + if st is None: + return + s = self.src["bias"] + s.seen(None, st.get("rx_epoch_ms")) + reachable = bool(st.get("reachable")) + capturing = bool(st.get("capturing")) + logging_ = bool(st.get("logging")) + self._pub_bool("reachable", reachable) + self._pub_bool("capturing", capturing) + self._pub_bool("logging", logging_) + if isinstance(st.get("frameCount"), (int, float)): + self._pub("frames", st["frameCount"]) + if isinstance(st.get("framesPerSec"), (int, float)): + self._pub("fps", st["framesPerSec"]) + state = "unreachable" if not reachable else ("recording" if capturing and logging_ else "preview" if capturing else "idle") + self.bias_state = state + # Published on EVERY status tick (1 Hz), not only on change, so a dashboard that + # connects mid-run sees the current state within a second (StateTransitions dedups). + self._pub_str(self.p_state, state) + if not reachable: + s.error(str(st.get("error") or "unreachable")) + + def _bias_reply(self, msg: String) -> None: + rep = self._env(msg) + if rep is None: + return + self.src["bias"].seen(None, rep.get("rx_epoch_ms")) + if not rep.get("ok"): + self._note_error("bias", f"{rep.get('command')}: {rep.get('outcome')} — {rep.get('error')}") + + def _arena(self, msg: String) -> None: + fr = self._env(msg) + if fr is None or fr.get("type") != "frame": + return + self.src["arena"].seen(fr.get("fc")) + idx = fr.get("index") + if isinstance(idx, int): + self.idx = idx + self._pub("index", idx) + self.az_deg = wrap180(self.a.frame_dir * idx * self.a.deg_per_frame + self.a.feature_az0) + self._pub("az", self.az_deg) + b = fr.get("bias") + self.bias_active = isinstance(b, (int, float)) + self.bias_deg = float(b) if self.bias_active else 0.0 + self._pub("bias", self.bias_deg) + + # ── timers ────────────────────────────────────────────────────────────────── + def _diagnostics(self) -> None: + arr = DiagnosticArray() + arr.header.stamp = self.get_clock().now().to_msg() + now = time.monotonic() + for s in self.src.values(): + rate = s.tick_rate() + self._pub("ft_rate", rate) if s.name == "fictrac" else None + st = DiagnosticStatus() + st.name = f"arena/{s.name}" + st.hardware_id = s.name + if s.last_mono is None: + st.level, st.message = DiagnosticStatus.WARN, "never seen" + elif now - s.last_mono > self.a.stale_s: + st.level, st.message = DiagnosticStatus.STALE, f"silent {now - s.last_mono:.0f} s" + elif s.name == "bias" and self.bias_state == "unreachable": + st.level, st.message = DiagnosticStatus.ERROR, "BIAS unreachable" + elif s.name == "bias" and s.last_error_t and time.time() - s.last_error_t < 10: + st.level, st.message = DiagnosticStatus.ERROR, s.last_error or "error" + else: + st.level, st.message = DiagnosticStatus.OK, f"{rate:.0f} Hz" if s.name != "bias" else self.bias_state + vals = [("rate_hz", f"{rate:.1f}"), ("messages", str(s.count)), ("last_seq", str(s.last_seq)), + ("latency_ms", "" if s.lat_ms is None else f"{s.lat_ms:.1f}"), + ("last_error", s.last_error or ""), + ("last_error_time", time.strftime("%H:%M:%S", time.localtime(s.last_error_t)) if s.last_error_t else "")] + st.values = [KeyValue(key=k, value=v) for k, v in vals] + arr.status.append(st) + self.p_diag.publish(arr) + + def _marker(self, mid: int, mtype: int, ns: str = "arena") -> Marker: + m = Marker() + m.header.frame_id = self.a.frame_id + m.header.stamp = self.get_clock().now().to_msg() + m.ns, m.id, m.type, m.action = ns, mid, mtype, Marker.ADD + m.pose.orientation.w = 1.0 + m.frame_locked = True + return m + + def _markers(self) -> None: + arr = MarkerArray() + # 0: the ball, rotated by FicTrac's lab-frame orientation + ball = self._marker(0, Marker.SPHERE) + ball.pose.orientation.x, ball.pose.orientation.y, ball.pose.orientation.z, ball.pose.orientation.w = self.quat + ball.scale.x = ball.scale.y = ball.scale.z = 2 * BALL_R + ball.color = color(0.85, 0.85, 0.88, 0.95) + arr.markers.append(ball) + # 1: markings on the ball (rotate fixed surface points by the same quaternion) + marks = self._marker(1, Marker.SPHERE_LIST) + marks.scale.x = marks.scale.y = marks.scale.z = 0.14 + marks.color = color(0.1, 0.1, 0.12, 1.0) + for v in MARKINGS: + x, y, z = rotate(self.quat, v) + p = Point() + p.x, p.y, p.z = x * BALL_R * 1.01, y * BALL_R * 1.01, z * BALL_R * 1.01 + marks.points.append(p) + arr.markers.append(marks) + # 2: the fly — fixed on top of the ball, facing +X (the world turns around it) + fly = self._marker(2, Marker.ARROW) + tail, tip = Point(), Point() + tail.x, tail.y, tail.z = -0.25, 0.0, BALL_R + 0.08 + tip.x, tip.y, tip.z = 0.45, 0.0, BALL_R + 0.08 + fly.points = [tail, tip] + fly.scale.x, fly.scale.y, fly.scale.z = 0.08, 0.18, 0.18 + fly.color = color(0.0, 0.9, 0.46, 1.0) + arr.markers.append(fly) + # 3: the arena, a translucent cylinder around the fly + cyl = self._marker(3, Marker.CYLINDER) + cyl.pose.position.z = BALL_R + 0.3 + cyl.scale.x = cyl.scale.y = 2 * ARENA_R + cyl.scale.z = ARENA_H + cyl.color = color(0.2, 0.6, 1.0, 0.12) + arr.markers.append(cyl) + # 4: the pattern feature on the wall at the current azimuth (right-positive → −Y) + az = math.radians(self.az_deg) + feat = self._marker(4, Marker.CUBE) + feat.pose.position.x = (ARENA_R - 0.08) * math.cos(az) + feat.pose.position.y = -(ARENA_R - 0.08) * math.sin(az) + feat.pose.position.z = BALL_R + 0.3 + # yaw the bar to lie along the wall + yaw = -az + feat.pose.orientation.z, feat.pose.orientation.w = math.sin(yaw / 2), math.cos(yaw / 2) + feat.scale.x, feat.scale.y, feat.scale.z = 0.08, 0.5, ARENA_H * 0.9 + feat.color = color(1.0, 0.85, 0.2, 0.95) + arr.markers.append(feat) + # 5: readout + txt = self._marker(5, Marker.TEXT_VIEW_FACING) + txt.pose.position.z = BALL_R + ARENA_H + 0.6 + txt.scale.z = 0.3 + txt.color = color(0.9, 0.93, 0.95, 1.0) + txt.text = (f"idx {self.idx} az {self.az_deg:+.1f}° heading {self.heading_deg:.1f}°" + + (f" bias {self.bias_deg:+.1f}°" if self.bias_active else "")) + arr.markers.append(txt) + self.p_markers.publish(arr) + + +def main(argv: list[str] | None = None) -> int: + p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + p.add_argument("--deg-per-frame", type=float, default=1.8, help="pattern pitch, display degrees per frame index (default: 1.8)") + p.add_argument("--frame-dir", type=int, default=1, choices=(1, -1), help="+1: an index increase moves the feature RIGHT (default)") + p.add_argument("--feature-az0", type=float, default=0.0, help="feature azimuth at index 0, degrees, right-positive (default: 0)") + p.add_argument("--assume-rate", type=float, default=50.0, help="FicTrac frame rate used for speed before the first measured second (default: 50)") + p.add_argument("--markers-hz", type=float, default=20.0, help="3D marker update rate (default: 20)") + p.add_argument("--stale-s", type=float, default=2.0, help="seconds of silence before a source reads STALE (default: 2)") + p.add_argument("--frame-id", default="arena", help="fixed frame for the markers (default: arena)") + args, ros_args = p.parse_known_args(argv) + rclpy.init(args=ros_args) + node = VizNode(args) + spin(node) + print("[viz] stopped", file=sys.stderr) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/ros2-poc/pixi.lock b/ros2-poc/pixi.lock index d58e202f..635d096d 100644 --- a/ros2-poc/pixi.lock +++ b/ros2-poc/pixi.lock @@ -146,6 +146,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/python-orocos-kdl-1.5.4-py312ha6a3dbb_0.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/pyzmq-27.2.0-py312h8a5ba0d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rapidjson-1.1.0.post20250205-h54a6638_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-hd6e31c0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb03c661_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.17.0-hb6aa676_2.conda @@ -179,6 +180,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zenoh-rust-abi-1.9.0.1.93.1-hbe27b5b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h901266b_12.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.25.0-py312h1b36aeb_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/adwaita-icon-theme-51.0-unix_0.conda @@ -207,6 +209,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-parser-0.12.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mcap-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda @@ -232,6 +235,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.1-pyh5ded981_0.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros-jazzy-demo-nodes-py-0.33.11-hb0f4dca_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros-jazzy-foxglove-bridge-3.6.0-hb0f4dca_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros-jazzy-rmw-zenoh-cpp-0.2.11-hb0f4dca_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros-jazzy-ros-base-0.11.0-hb0f4dca_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-action-msgs-2.0.4-np2py312h1bab3cf_25.conda @@ -295,6 +299,7 @@ environments: - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-fastrtps-2.14.7-np2py312h4c2334c_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-fastrtps-cmake-module-3.6.4-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-foonathan-memory-vendor-1.3.1-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-foxglove-bridge-3.6.0-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-geometry-msgs-5.3.8-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-geometry2-0.36.23-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-gmock-vendor-1.14.9000-np2py312h1bab3cf_25.conda @@ -311,6 +316,7 @@ environments: - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-testing-ros-0.26.13-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-xml-3.4.12-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-launch-yaml-3.4.12-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-libcurl-vendor-3.4.4-np2py312hd2d903f_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-liblz4-vendor-0.26.11-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-libstatistics-collector-1.7.4-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-libyaml-vendor-1.6.4-np2py312h1bab3cf_25.conda @@ -338,6 +344,7 @@ environments: - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rclpy-7.1.12-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcpputils-2.11.4-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rcutils-6.7.6-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-resource-retriever-3.4.4-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-7.3.4-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-connextdds-0.22.3-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-connextdds-common-0.22.3-np2py312h1bab3cf_25.conda @@ -409,6 +416,7 @@ environments: - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-interface-4.6.9-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-introspection-c-4.6.9-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosidl-typesupport-introspection-cpp-4.6.9-np2py312h1bab3cf_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosx-introspection-2.3.0-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rpyutils-0.4.2-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rti-connext-dds-cmake-module-0.22.3-np2py312h1bab3cf_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-sensor-msgs-5.3.8-np2py312h1bab3cf_25.conda @@ -477,6 +485,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-parser-0.12.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mcap-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda @@ -596,6 +605,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-orocos-kdl-1.5.4-py312h1535055_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py312h04c11ed_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.2.0-py312hdfb5542_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rapidjson-1.1.0.post20250205-h784d473_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h8b90a29_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rhash-1.4.6-h84a0fba_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/spdlog-1.17.0-h760df91_2.conda @@ -614,10 +624,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-cpp-0.8.0-h784d473_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zenoh-rust-abi-1.9.0.1.93.1-h3c1fe20_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h6eb0046_12.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.25.0-py312hbd136b4_4.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hf451053_7.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-ament-index-cpp-1.8.4-h60d57d3_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-demo-nodes-py-0.33.11-h60d57d3_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-fastcdr-2.2.7-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-foxglove-bridge-3.4.3-h60d57d3_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rcpputils-2.11.4-h60d57d3_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rcutils-6.7.6-h60d57d3_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rmw-7.3.3-np2py312haf4906a_21.conda @@ -691,6 +703,7 @@ environments: - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-fastrtps-2.14.6-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-fastrtps-cmake-module-3.6.4-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-foonathan-memory-vendor-1.3.1-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-foxglove-bridge-3.4.3-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-geometry-msgs-5.3.8-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-geometry2-0.36.22-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-gmock-vendor-1.14.9000-np2py312haf4906a_21.conda @@ -707,6 +720,7 @@ environments: - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-testing-ros-0.26.12-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-xml-3.4.11-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-launch-yaml-3.4.11-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-libcurl-vendor-3.4.4-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-liblz4-vendor-0.26.11-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-libstatistics-collector-1.7.4-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-libyaml-vendor-1.6.4-np2py312haf4906a_21.conda @@ -734,6 +748,7 @@ environments: - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rclpy-7.1.11-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcpputils-2.11.4-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rcutils-6.7.6-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-resource-retriever-3.4.4-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-7.3.3-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-connextdds-0.22.3-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-connextdds-common-0.22.3-np2py312haf4906a_21.conda @@ -804,6 +819,7 @@ environments: - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-interface-4.6.9-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-introspection-c-4.6.9-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosidl-typesupport-introspection-cpp-4.6.9-np2py312haf4906a_21.conda + - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosx-introspection-2.3.0-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rpyutils-0.4.2-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rti-connext-dds-cmake-module-0.22.3-np2py312haf4906a_21.conda - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-sensor-msgs-5.3.8-np2py312haf4906a_21.conda @@ -870,6 +886,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/lark-parser-0.12.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mcap-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.3-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda @@ -980,6 +997,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/python-orocos-kdl-1.5.4-py312hbb81ca0_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py312h05f76fc_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.2.0-py312h343a6d4_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/rapidjson-1.1.0.post20250205-h5112557_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/spdlog-1.17.0-hd227c35_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.54.0-hdb435a2_101.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.1.0-h272cf33_2.conda @@ -1006,8 +1024,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-cpp-0.8.0-h5112557_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zenoh-rust-abi-1.9.0.1.93.1-heb1d585_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h3a581c9_12.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py312he5662c2_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros-jazzy-demo-nodes-py-0.33.11-h9490d1a_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros-jazzy-foxglove-bridge-3.6.0-h9490d1a_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros-jazzy-rmw-zenoh-cpp-0.2.11-h9490d1a_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros-jazzy-ros-base-0.11.0-h9490d1a_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-action-msgs-2.0.4-np2py312hdd89193_25.conda @@ -1071,6 +1091,7 @@ environments: - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-fastrtps-2.14.7-np2py312h679732a_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-fastrtps-cmake-module-3.6.4-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-foonathan-memory-vendor-1.3.1-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-foxglove-bridge-3.6.0-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-geometry-msgs-5.3.8-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-geometry2-0.36.23-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-gmock-vendor-1.14.9000-np2py312hdd89193_25.conda @@ -1087,6 +1108,7 @@ environments: - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-testing-ros-0.26.13-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-xml-3.4.12-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-launch-yaml-3.4.12-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-libcurl-vendor-3.4.4-np2py312h3ebd44a_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-liblz4-vendor-0.26.11-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-libstatistics-collector-1.7.4-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-libyaml-vendor-1.6.4-np2py312hdd89193_25.conda @@ -1114,6 +1136,7 @@ environments: - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rclpy-7.1.12-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcpputils-2.11.4-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rcutils-6.7.6-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-resource-retriever-3.4.4-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-7.3.4-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-connextdds-0.22.3-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-connextdds-common-0.22.3-np2py312hdd89193_25.conda @@ -1185,6 +1208,7 @@ environments: - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-interface-4.6.9-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-introspection-c-4.6.9-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosidl-typesupport-introspection-cpp-4.6.9-np2py312hdd89193_25.conda + - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosx-introspection-2.3.0-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rpyutils-0.4.2-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rti-connext-dds-cmake-module-0.22.3-np2py312hdd89193_25.conda - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-sensor-msgs-5.3.8-np2py312hdd89193_25.conda @@ -3129,6 +3153,18 @@ packages: run_exports: {} size: 216556 timestamp: 1789730121925 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rapidjson-1.1.0.post20250205-h54a6638_0.conda + sha256: 6f56a91c14ca82f7df65adeedbcd45d6496baa34535c231e18c5cc45ba284821 + md5: faad3215cbf35faa42a37a77d44374c9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + run_exports: {} + size: 156127 + timestamp: 1784885303075 - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-hd6e31c0_1.conda sha256: 01b3fe073a66e321970d09e04b388708f8cbdca5cdfbfcb7c9eeb470ad10383d md5: 69c01c781e7c8190bbdaf79e3848c5ca @@ -3603,6 +3639,22 @@ packages: - zeromq >=4.3.5,<4.4.0a0 size: 321839 timestamp: 1789076548604 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.25.0-py312h1b36aeb_4.conda + sha256: a3183adc689cfafdaa7e6a21a2c9174894125fc838cb538955246c6543e5b8da + md5: 03519133f60c8fab1268a64887b518c2 + depends: + - python + - cffi >=1.11 + - zstd >=1.5.7,<1.5.8.0a0 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 466862 + timestamp: 1788604308908 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.conda sha256: 47d682b9f6d6ec9eb1a6e6c3e75ea6273e899e78fb7fc59f81d39745009fbc60 md5: aa459086047c0e5e27023ab19f8cb86a @@ -3916,6 +3968,18 @@ packages: run_exports: {} size: 86134 timestamp: 1725742423890 +- conda: https://conda.anaconda.org/conda-forge/noarch/mcap-1.5.0-pyhd8ed1ab_0.conda + sha256: a9e65350b33197bdb3e16adc8cb1c9acde577a937002d7516481309cb06e476e + md5: a86e816f1f59978b8f1f5effecc8870a + depends: + - lz4 + - python >=3.11 + - zstandard + license: MIT + license_family: MIT + run_exports: {} + size: 24267 + timestamp: 1790305238635 - conda: https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_1.conda sha256: 9b0037171dad0100f0296699a11ae7d355237b55f42f9094aebc0f41512d96a1 md5: 827064ddfe0de2917fb29f1da4f8f533 @@ -5609,6 +5673,17 @@ packages: run_exports: {} size: 197695 timestamp: 1789730185188 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rapidjson-1.1.0.post20250205-h784d473_0.conda + sha256: 1357623ce7d878448658a68605e564da578bb65a294a6143ceecd760de35e798 + md5: a0ef22bf61d623bcb6e46278b1478671 + depends: + - __osx >=11.0 + - libcxx >=19 + license: MIT + license_family: MIT + run_exports: {} + size: 157334 + timestamp: 1784885359604 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h8b90a29_1.conda sha256: d6782b430e6dce4fe8c7ac118cd988d5a193eb4a7f60741edfaede58016b6110 md5: 9347fd56a002e6b58946831d48fe62f6 @@ -5842,6 +5917,21 @@ packages: - zeromq >=4.3.5,<4.4.0a0 size: 244219 timestamp: 1789076600961 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.25.0-py312hbd136b4_4.conda + sha256: 4f9f7fa27289e49604cb99c572aa6acf3c8feadec10f826532b5f56fd73c00e4 + md5: 499a8bd66852513c4105d0954906232c + depends: + - python + - cffi >=1.11 + - zstd >=1.5.7,<1.5.8.0a0 + - __osx >=11.0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 375944 + timestamp: 1788604316671 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hf451053_7.conda sha256: da867f5092eb0cb746d353694f0098031fd9817a4ce7d5743121209ae0f406ca md5: 4ec2684c73812cc2c3d78379384a39cc @@ -7192,6 +7282,18 @@ packages: run_exports: {} size: 191813 timestamp: 1789730188711 +- conda: https://conda.anaconda.org/conda-forge/win-64/rapidjson-1.1.0.post20250205-h5112557_0.conda + sha256: 1c41755b6ce3ebe2c5c31e082a2b965d82b5e68bae4857531ccf9ba8a790b107 + md5: d34eccfd94486e47a0ffcd667a9082da + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + run_exports: {} + size: 153975 + timestamp: 1784885341946 - conda: https://conda.anaconda.org/conda-forge/win-64/spdlog-1.17.0-hd227c35_2.conda sha256: bd14e9166389be0c654e724e16290772b65745aee8d8bb8bacc65d3179330387 md5: 0d1e29b811d1fea9ba0fe8c869fa5e96 @@ -7557,6 +7659,23 @@ packages: - zeromq >=4.3.5,<4.3.6.0a0 size: 265930 timestamp: 1789076564779 +- conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py312he5662c2_4.conda + sha256: 7f8185e4861cc25d6182e25016764487eb9449fa09e24228d9c60a62f9176206 + md5: 74f23187a99a948722436be660e3344d + depends: + - python + - cffi >=1.11 + - zstd >=1.5.7,<1.5.8.0a0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + run_exports: {} + size: 374682 + timestamp: 1788604308360 - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_7.conda sha256: ca7daae4f218a11fab82cc2857f0ea518ec3f46acec60490485347a4c22c6b3e md5: e4ac308c39d6d0e131154976da67cf3b @@ -7579,6 +7698,13 @@ packages: - ros2-demo-nodes-py ==0.33.11 size: 2045 timestamp: 1791433832043 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros-jazzy-foxglove-bridge-3.6.0-hb0f4dca_25.conda + sha256: 20ea44e90d7cae768c7caabd10049ef28accbca3ccf62eb38141e0d92b08e811 + md5: 8d7e361c89470619fc85cf202e273dc4 + depends: + - ros2-foxglove-bridge ==3.6.0 + size: 2047 + timestamp: 1791441583937 - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros-jazzy-rmw-zenoh-cpp-0.2.11-hb0f4dca_25.conda sha256: 813d8468998f632975328dd866b7a9a4121c491d79ef1a75bcf806ee20416eff md5: 342c741ee7f06dfa8038817dc6f8ffaa @@ -8720,6 +8846,34 @@ packages: license: Apache-2.0 OR Zlib size: 19829 timestamp: 1791429651103 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-foxglove-bridge-3.6.0-np2py312h1bab3cf_25.conda + sha256: 870852c9e618c3eceb7b8692ebd9c2151d44183b921ca7272f1f70466a9ebaf9 + md5: c7d0c0bf3e7405b0019a5a05560c716b + depends: + - python + - ros2-ament-index-cpp + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl-interfaces + - ros2-rclcpp + - ros2-rclcpp-components + - ros2-rcpputils + - ros2-rcutils + - ros2-resource-retriever + - ros2-ros-workspace + - ros2-rosgraph-msgs + - ros2-rosidl-typesupport-introspection-cpp + - ros2-rosx-introspection + - ros2-service-msgs + - ros2-std-msgs + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - numpy >=1.25,<3 + license: MIT + size: 15904052 + timestamp: 1791440508440 - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-geometry-msgs-5.3.8-np2py312h1bab3cf_25.conda sha256: 40f9bad74860a1c8106464e09cd55d05741bd3ecf2cdb75d47d0a9116d487b53 md5: 92fb2a3b4e1fe5a1992ef442d7962b4b @@ -9016,6 +9170,25 @@ packages: license: Apache-2.0 size: 26809 timestamp: 1791429267662 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-libcurl-vendor-3.4.4-np2py312hd2d903f_25.conda + sha256: d4932d19bf5508b026aa3e8fa67b1ced6db195722feab7b6744297bee8266398 + md5: 22ee3c8229cac9fe5094781772e29bf6 + depends: + - libcurl + - pkg-config + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - libcurl >=8.22.0,<9.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 OR MIT + size: 24222 + timestamp: 1791428357817 - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-liblz4-vendor-0.26.11-np2py312h1bab3cf_25.conda sha256: 67c80c5459bc496b7fa7d26764f0db5ec899992f942256c03b9d0ec28d15f8f3 md5: 4243a4fc6e66b69c940ee5cbea1a6292 @@ -9588,6 +9761,25 @@ packages: license: Apache-2.0 size: 123308 timestamp: 1791430841156 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-resource-retriever-3.4.4-np2py312h1bab3cf_25.conda + sha256: ea549a205bd4dca2ae481f8c12ba096644f03fe6ba75abd1c931b7e65f7120a8 + md5: bf4c2a288724e56d0d8296e487e9fa71 + depends: + - python + - ros2-ament-index-cpp + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-libcurl-vendor + - ros2-ros-workspace + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + size: 45420 + timestamp: 1791430641423 - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rmw-7.3.4-np2py312h1bab3cf_25.conda sha256: 2bf0f646c1e0ede75632d2a126c1da4763716c67cb3fb577c6cb58c50587ee16 md5: 89c9036a74e348de8604d1b7e1eb9431 @@ -11200,6 +11392,26 @@ packages: license: Apache-2.0 size: 48835 timestamp: 1791431503806 +- conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rosx-introspection-2.3.0-np2py312h1bab3cf_25.conda + sha256: 9a98c86a2a879261f8cd2cbe5aacbe27de3d7be7ba4622888c0d0abf5201bcd3 + md5: 86082a737895a8062bf1179cf0a317dd + depends: + - python + - rapidjson + - ros2-ament-index-cpp + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclcpp + - ros2-ros-workspace + - ros2-rosbag2-cpp + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=15 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: MIT + size: 239381 + timestamp: 1791439753199 - conda: https://conda.anaconda.org/robostack-jazzy/linux-64/ros2-rpyutils-0.4.2-np2py312h1bab3cf_25.conda sha256: dda206bfb5900e2af1ac5abc2dae3595a13c32ef1510b8f8d7bc5f2005cb42e3 md5: f1c2268a4aca8425abecb0665c2cce3e @@ -12010,6 +12222,13 @@ packages: license: Apache-2.0 size: 81413 timestamp: 1788191643747 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-foxglove-bridge-3.4.3-h60d57d3_21.conda + sha256: 252014ea1aa0ae45191aecd195e5b0dbd0202fa85253f514d801ced68235564f + md5: dba21c81852acd3b39273560ed7b9fe7 + depends: + - ros2-foxglove-bridge ==3.4.3 + size: 2029 + timestamp: 1788464916101 - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros-jazzy-rcpputils-2.11.4-h60d57d3_25.conda sha256: 4255b96974c088b50b635a64517c8ff2c071c2a1170fbb0bfe0b9fa2c42ae618 md5: c5d66aba0e8ff9d7343237f9efbf98f1 @@ -13197,6 +13416,33 @@ packages: license: Apache-2.0 OR Zlib size: 21162 timestamp: 1788270684489 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-foxglove-bridge-3.4.3-np2py312haf4906a_21.conda + sha256: 1fc9d345bc538b849e19c9f2d148cbbfec8338893a2d25982e2a852474462bd2 + md5: 4b37b5dcf04848d686a2f90f31b147b1 + depends: + - python + - ros2-ament-index-cpp + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rcl-interfaces + - ros2-rclcpp + - ros2-rclcpp-components + - ros2-rcpputils + - ros2-rcutils + - ros2-resource-retriever + - ros2-ros-workspace + - ros2-rosgraph-msgs + - ros2-rosidl-typesupport-introspection-cpp + - ros2-rosx-introspection + - ros2-service-msgs + - ros2-std-msgs + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: MIT + size: 12599521 + timestamp: 1788464156279 - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-geometry-msgs-5.3.8-np2py312haf4906a_21.conda sha256: a8918e98a55a25371239a219b075e50699cdcbd9b0e90a7207994eeee59e8b2e md5: c6288c4a679dfe427fd8cc7e494d701f @@ -13484,6 +13730,24 @@ packages: license: Apache-2.0 size: 27789 timestamp: 1788269103182 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-libcurl-vendor-3.4.4-np2py312haf4906a_21.conda + sha256: dc930b0253120c95002c24701a97afea5a238f74c3b4342c60f755f60fe5fe34 + md5: f3227e15c96e1569abc59490cbc0f145 + depends: + - libcurl + - pkg-config + - python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-ros-workspace + - __osx >=12.0 + - libcxx >=19 + - python_abi 3.12.* *_cp312 + - libcurl >=8.21.0,<9.0a0 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - numpy >=1.25,<3 + license: Apache-2.0 OR MIT + size: 26059 + timestamp: 1788268625930 - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-liblz4-vendor-0.26.11-np2py312haf4906a_21.conda sha256: d119df00ba1df059b241ac4dc430139ee28ba6cfa130423d04dff9abc599b22d md5: 889ae1b5b42029e13aaabf71d7bae3e9 @@ -14029,6 +14293,24 @@ packages: license: Apache-2.0 size: 116477 timestamp: 1788271469515 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-resource-retriever-3.4.4-np2py312haf4906a_21.conda + sha256: 41746083c440eefafb726ebc89f6ce8e8b1ef631ef0366f8264ab31bce2b0152 + md5: b8a94203d773dacfffc7dfbd07487553 + depends: + - python + - ros2-ament-index-cpp + - ros2-ament-index-python + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-libcurl-vendor + - ros2-ros-workspace + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + license: BSD-3-Clause + size: 43599 + timestamp: 1788271358362 - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rmw-7.3.3-np2py312haf4906a_21.conda sha256: e50dc5e54dc21f047e0628f12b3bc5bc54b207dc96aea324cb3cbc42e764625f md5: 5172be7981c552e7495e7a197f4fc3d6 @@ -15545,6 +15827,25 @@ packages: license: Apache-2.0 size: 49326 timestamp: 1788361221532 +- conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rosx-introspection-2.3.0-np2py312haf4906a_21.conda + sha256: f674dac1046703c55261488f3544d60460f683882420634277780c50801b50f7 + md5: b083cb3aec118536051ec9a11264917a + depends: + - python + - rapidjson + - ros2-ament-index-cpp + - ros2-distro-mutex 0.16.* jazzy_* + - ros2-rclcpp + - ros2-ros-workspace + - ros2-rosbag2-cpp + - libcxx >=19 + - __osx >=12.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.16.0,<0.17.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + size: 190507 + timestamp: 1788463292413 - conda: https://conda.anaconda.org/robostack-jazzy/osx-arm64/ros2-rpyutils-0.4.2-np2py312haf4906a_21.conda sha256: 99b79db3c51891cf663c316dddf60892140bb431bb33bceddc2fdc100833cdc5 md5: 83c1f8b7abe0fd72d37f78a0382e84bb @@ -16275,6 +16576,13 @@ packages: - ros2-demo-nodes-py ==0.33.11 size: 2044 timestamp: 1791455531694 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros-jazzy-foxglove-bridge-3.6.0-h9490d1a_25.conda + sha256: 4ba13914a9eff2df36a9d4a05bc09889269b785a42359d56ddd0f74cc453e7f8 + md5: 9a47dcf91271903e16490498c24d990f + depends: + - ros2-foxglove-bridge ==3.6.0 + size: 2038 + timestamp: 1791486367751 - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros-jazzy-rmw-zenoh-cpp-0.2.11-h9490d1a_25.conda sha256: f0ae90d9267b1a7ed39ff4866b9fc872e12d78ec7d7a6ad60b79f5e99290fcaf md5: b49593864e427095476f3e6ddd1655c8 @@ -17416,6 +17724,34 @@ packages: license: Apache-2.0 OR Zlib size: 17564 timestamp: 1791437150995 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-foxglove-bridge-3.6.0-np2py312hdd89193_25.conda + sha256: 108338de70ab1d32125457718dda934b420ddff2c3f7c654689a333e16822418 + md5: e714d3349e7ad7177037f56b7c869a78 + depends: + - python + - ros2-ament-index-cpp + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rcl-interfaces + - ros2-rclcpp + - ros2-rclcpp-components + - ros2-rcpputils + - ros2-rcutils + - ros2-resource-retriever + - ros2-ros-workspace + - ros2-rosgraph-msgs + - ros2-rosidl-typesupport-introspection-cpp + - ros2-rosx-introspection + - ros2-service-msgs + - ros2-std-msgs + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + license: MIT + size: 15580413 + timestamp: 1791482466260 - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-geometry-msgs-5.3.8-np2py312hdd89193_25.conda sha256: 295fd3ad6e74ca8604e13effbdf5e66743ba3447c79f261d05e848ac3150b481 md5: 17bdb9252b629e85d7ba1692b8f6206b @@ -17710,6 +18046,25 @@ packages: license: Apache-2.0 size: 24025 timestamp: 1791435226732 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-libcurl-vendor-3.4.4-np2py312h3ebd44a_25.conda + sha256: 6a6a333e41b5a13e3bb5232d361d20adf899dd5007f9623995a1e7f0ba33805a + md5: 5c9f227e114f652358628fd7cf88aa6b + depends: + - libcurl + - pkg-config + - python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libcurl >=8.22.0,<9.0a0 + - numpy >=1.25,<3 + - python_abi 3.12.* *_cp312 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: Apache-2.0 OR MIT + size: 21268 + timestamp: 1791432926708 - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-liblz4-vendor-0.26.11-np2py312hdd89193_25.conda sha256: 8861784eec6b77cd50fc8436108c7b0361a3bc0c426833fa6c21a91d8fbd815d md5: 325f3c7f5e10e9dfd3fa822dc757e9aa @@ -18282,6 +18637,25 @@ packages: license: Apache-2.0 size: 127468 timestamp: 1791440954115 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-resource-retriever-3.4.4-np2py312hdd89193_25.conda + sha256: 5fa0424081e05994df1475f1f6e517f2ef451f71e9d6d7c97d2129fb79a1cd88 + md5: df4363819578c11db488c93f82bfa1b6 + depends: + - python + - ros2-ament-index-cpp + - ros2-ament-index-python + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-libcurl-vendor + - ros2-ros-workspace + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + license: BSD-3-Clause + size: 46319 + timestamp: 1791440321501 - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rmw-7.3.4-np2py312hdd89193_25.conda sha256: a5f8e20616574cd4f935514db0cb0bb684eddd674545b850c62a35ba9cb60603 md5: 82f4ac2ac7dc4773aaff0af1c675a6a4 @@ -19894,6 +20268,26 @@ packages: license: Apache-2.0 size: 49059 timestamp: 1791446276093 +- conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rosx-introspection-2.3.0-np2py312hdd89193_25.conda + sha256: 8c2eab5d17b87223932a120c8871533ba58a73db29a4606e18f420e7bdc11590 + md5: 11131715c823049d4ca78cbfa247f82d + depends: + - python + - rapidjson + - ros2-ament-index-cpp + - ros2-distro-mutex 0.19.* jazzy_* + - ros2-rclcpp + - ros2-ros-workspace + - ros2-rosbag2-cpp + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 + - numpy >=1.25,<3 + - ros2-distro-mutex >=0.19.0,<0.20.0a0 + license: MIT + size: 401210 + timestamp: 1791479420788 - conda: https://conda.anaconda.org/robostack-jazzy/win-64/ros2-rpyutils-0.4.2-np2py312hdd89193_25.conda sha256: feb51724aff743c03e9c25080663f212eeac6741210a040ffff1f35618dae0e1 md5: 3d8299e36e0c551683f76cd49f0e1d3a diff --git a/ros2-poc/pixi.toml b/ros2-poc/pixi.toml index afce7be8..9cdba36f 100644 --- a/ros2-poc/pixi.toml +++ b/ros2-poc/pixi.toml @@ -38,9 +38,16 @@ ros-jazzy-ros-base = "*" ros-jazzy-rmw-zenoh-cpp = "*" # The canonical talker/listener smoke test (`ros2 run demo_nodes_py …`); not part of ros-base. ros-jazzy-demo-nodes-py = "*" +# Foxglove: the stock bridge serves ROS topics to the Foxglove app over its own WebSocket +# (`pixi run foxglove`, port 8766 — 8765 is the Studio bridge). Layouts: foxglove/*.json. +ros-jazzy-foxglove-bridge = "*" python = "*" websockets = ">=12" pyzmq = "*" +# Log-format sizing study (sizing/*.py): MCAP writer + the two chunk compressors it supports. +mcap = "*" +zstandard = "*" +lz4 = "*" [tasks] # ── hour one: middleware bring-up ─────────────────────────────────────────── @@ -58,6 +65,13 @@ bridge-node = "python nodes/bridge_node.py" sim = "python ../fictrac-bridge/fictrac_sim.py" kinefly-sim = "python nodes/kinefly_sim.py" bias-sim = "python nodes/bias_sim.py" +# ── Foxglove dashboard (optional): typed republisher + the stock foxglove_bridge ─ +# Foxglove → Open connection → Foxglove WebSocket → ws://localhost:8766, then import a +# layout from foxglove/. `pixi run rig -- --foxglove` starts both with the rig. +viz = "python nodes/viz_node.py" +foxglove = "ros2 run foxglove_bridge foxglove_bridge --ros-args -p port:=8766 -p address:=127.0.0.1" +# ── log-format sizing (MCAP vs NDJSON; README "Log format") ──────────────── +size-study = "python sizing/compare.py" # ── the one command a rig runs ────────────────────────────────────────────── rig = "python nodes/rig.py" # ── acceptance test (LAB-303 PoC criteria): whole graph + Studio emulator + model fly ── diff --git a/ros2-poc/sizing/compare.py b/ros2-poc/sizing/compare.py new file mode 100644 index 00000000..919455ed --- /dev/null +++ b/ros2-poc/sizing/compare.py @@ -0,0 +1,94 @@ +"""compare.py — size one behavior_v2 run log (.jsonl or .jsonl.gz) as NDJSON vs MCAP layouts. + + pixi run size-study -- path/to/run.jsonl[.gz] + +Size comparison: our behavior_v2 NDJSON run log vs the same content in MCAP. + +Variants: + ndjson raw / gzip-9 (what the bridge writes) / gzip-6 / zstd-3 / zstd-19 / lz4 + mcap-json one channel per stream or event type, JSON-encoded messages with a JSON schema, + chunk compression none / lz4 / zstd (what the Foxglove SDK would produce) + mcap-packed high-rate rows as fixed little-endian structs (≈ what typed ROS 2 CDR messages + cost; CDR adds a 4-byte header + alignment), events still JSON; zstd +""" +import gzip, io, json, struct, sys, math, zlib +import zstandard, lz4.frame +from mcap.writer import Writer, CompressionType + +path = sys.argv[1] +raw = open(path, "rb").read() +if raw[:2] == b"\x1f\x8b": + raw = gzip.decompress(raw) +objs = [json.loads(l) for l in raw.decode().splitlines() if l.strip()] +t0 = next(o["ms"] for o in objs if isinstance(o, dict) and o.get("type") == "session") + +def kinds(o): + if isinstance(o, list): + return "fictrac/frame" if isinstance(o[0], (int, float)) else f"stream/{o[0]}" + t = o.get("type") + return f"event/{t}" + (f"/{o.get('event')}" if t == "log" else "") + +def log_time_ns(o): + if isinstance(o, list): + if isinstance(o[0], (int, float)): + rel = o[0] + elif o[0] == "a": + rel = o[1] + else: + rel = o[1] if isinstance(o[1], (int, float)) else 0 + return int((t0 + rel) * 1e6) + if isinstance(o.get("ms"), (int, float)): + ms = o["ms"] + return int((ms if ms > 1e11 else t0 + ms) * 1e6) + if isinstance(o.get("rx_ms"), (int, float)): + return int(o["rx_ms"] * 1e6) + return int(t0 * 1e6) + + +import mcap.writer as MW + +def write_mcap(level=3, msg_index=True, batch_streams=(), batch_s=1.0): + """JSON-schema channels, one per stream/event type; optional 1 s batching of named streams; + zstd chunk compression at `level` (the library hard-codes 3, so it is swapped underneath).""" + saved = MW.zstandard.compress + MW.zstandard.compress = lambda d, _l=level: zstandard.ZstdCompressor(level=_l).compress(d) + try: + buf = io.BytesIO() + from mcap.writer import IndexType + w = Writer(buf, compression=CompressionType.ZSTD, index_types=IndexType.ALL if msg_index else (IndexType.ALL & ~IndexType.MESSAGE)) + w.start(profile="", library="compare.py") + chans = {} + def chan(name): + if name not in chans: + chans[name] = w.register_channel(name, "json", w.register_schema(name, "jsonschema", b"{}")) + return chans[name] + seq = 0; buckets = {} + for o in objs: + k = kinds(o); ts = log_time_ns(o) + if k in batch_streams: + buckets.setdefault((k, int(ts // int(batch_s * 1e9))), []).append(o); continue + seq += 1 + w.add_message(chan(k), log_time=ts, publish_time=ts, data=json.dumps(o, separators=(",", ":")).encode(), sequence=seq) + for (k, b), rows in sorted(buckets.items(), key=lambda kv: kv[0][1]): + ts = log_time_ns(rows[0]); seq += 1 + w.add_message(chan(k + "/batch"), log_time=ts, publish_time=ts, data=json.dumps(rows, separators=(",", ":")).encode(), sequence=seq) + w.finish() + return len(buf.getvalue()) + finally: + MW.zstandard.compress = saved + +n = len(objs) +g9 = len(gzip.compress(raw, 9)) +print(f"{path.rsplit('/', 1)[-1]}: {n} records") +print(f"{'variant':62s} {'bytes':>9s} {'B/rec':>6s} {'vs gzip-9':>9s}") +for name, b in [ + ("NDJSON raw", len(raw)), + ("NDJSON gzip-9 (bridge 3.4 writes this)", g9), + ("NDJSON zstd-19", len(zstandard.ZstdCompressor(level=19).compress(raw))), + ("MCAP per record, rosbag2/SDK defaults (zstd-3, message index)", write_mcap()), + ("MCAP per record, no message index, zstd-3", write_mcap(msg_index=False)), + ("MCAP per record, no message index, zstd-19", write_mcap(level=19, msg_index=False)), + ("MCAP tuned: arena echoes batched 1 s, no msg index, zstd-19", write_mcap(level=19, msg_index=False, batch_streams=("stream/a",))), + ("MCAP all high-rate batched 1 s, zstd-19", write_mcap(level=19, msg_index=False, batch_streams=("stream/a", "stream/kf", "fictrac/frame"))), +]: + print(f"{name:62s} {b:9d} {b/n:6.1f} {b/g9:8.2f}×") diff --git a/ros2-poc/sizing/frames300.py b/ros2-poc/sizing/frames300.py new file mode 100644 index 00000000..1f943e78 --- /dev/null +++ b/ros2-poc/sizing/frames300.py @@ -0,0 +1,73 @@ +"""One hour of controller frame records at 300 Hz in the telemetry ring's cf shape: + ["cf", rx_epoch_ms, t_us, seq, idx, pattern, sd_load_us, spi_us, req_age_us, superseded, flags] +Realistic jitter: t_us steps 3333 µs ± a few µs; sd_load/spi vary; idx follows a 50 Hz Mode-3 loop +(changes every 6th frame on average). 'changes only' = one record per idx change.""" +import io, json, gzip, random, zstandard +import mcap.writer as MW +from mcap.writer import Writer, CompressionType, IndexType + +random.seed(1) +HZ, HOURS = 300, 1 +N = HZ * 3600 * HOURS +t0_ms = 1_792_000_000_000 +rows, changes = [], [] +t_us = 0; idx = 0; rx = t0_ms +for i in range(N): + t_us += 3333 + random.randint(-3, 3) + if i % 6 == 0: # a 0x70 landed (≈50 Hz): idx steps by -1..+2 + idx = (idx + random.choice((-1, 0, 1, 1, 2))) % 200 + changed = True + else: + changed = False + rx = t0_ms + (t_us // 1000) + random.randint(0, 2) # host epoch ms at drain + r = ["cf", rx, t_us, i, idx, 3, 180 + random.randint(0, 40), 95 + random.randint(0, 6), + random.randint(50, 900), 0, 0] + rows.append(r) + if changed: + changes.append(r) + +def ndjson_gz(rs): + return len(gzip.compress("".join(json.dumps(r, separators=(",", ":")) + "\n" for r in rs).encode(), 9)) + +def mcap_size(rs, batch_s=None, level=19, msg_index=False): + saved = MW.zstandard.compress + MW.zstandard.compress = lambda d, _l=level: zstandard.ZstdCompressor(level=_l).compress(d) + try: + buf = io.BytesIO() + w = Writer(buf, compression=CompressionType.ZSTD, + index_types=IndexType.ALL if msg_index else (IndexType.ALL & ~IndexType.MESSAGE)) + w.start(profile="", library="frames300") + cid = w.register_channel("controller/frame", "json", w.register_schema("cf", "jsonschema", b"{}")) + if batch_s is None: + for k, r in enumerate(rs): + ts = r[1] * 1_000_000 + w.add_message(cid, log_time=ts, publish_time=ts, data=json.dumps(r, separators=(",", ":")).encode(), sequence=k) + else: + cur, bucket, k = None, [], 0 + for r in rs: + b = int(r[1] // (batch_s * 1000)) + if cur is not None and b != cur: + ts = bucket[0][1] * 1_000_000; k += 1 + w.add_message(cid, log_time=ts, publish_time=ts, data=json.dumps(bucket, separators=(",", ":")).encode(), sequence=k) + bucket = [] + cur = b; bucket.append(r) + if bucket: + ts = bucket[0][1] * 1_000_000 + w.add_message(cid, log_time=ts, publish_time=ts, data=json.dumps(bucket, separators=(",", ":")).encode(), sequence=k + 1) + w.finish() + return len(buf.getvalue()) + finally: + MW.zstandard.compress = saved + +MB = 1024 * 1024 +print(f"{N} frame records/hour at {HZ} Hz; {len(changes)} idx changes/hour ({len(changes)/3600:.0f} Hz)") +print(f"{'variant':58s} {'every frame':>12s} {'changes only':>13s}") +for name, fn in [ + ("NDJSON gzip-9 (today's format)", lambda rs: ndjson_gz(rs)), + ("MCAP per-record, rosbag2/SDK defaults (zstd-3, msg index)", lambda rs: mcap_size(rs, level=3, msg_index=True)), + ("MCAP per-record, tuned (zstd-19, no msg index)", lambda rs: mcap_size(rs)), + ("MCAP batched 1 s per message, zstd-19", lambda rs: mcap_size(rs, batch_s=1.0)), + ("MCAP batched 10 s per message, zstd-19", lambda rs: mcap_size(rs, batch_s=10.0)), +]: + a, b = fn(rows), fn(changes) + print(f"{name:58s} {a/MB:9.1f} MB {b/MB:10.1f} MB") diff --git a/ros2-poc/tests/test_ros2_poc.py b/ros2-poc/tests/test_ros2_poc.py index 818bee25..30ed5bbf 100644 --- a/ros2-poc/tests/test_ros2_poc.py +++ b/ros2-poc/tests/test_ros2_poc.py @@ -316,13 +316,14 @@ def side_actor() -> None: else: print(" skip JS reader check: no `node` and no root pixi env (run `pixi install` at the repo root)", file=sys.stderr) - # No custom message types: only std_msgs in nodes/. + # No custom message types: only ros-base interface packages in nodes/. + STANDARD = ("std_msgs", "diagnostic_msgs", "visualization_msgs", "geometry_msgs") bad = [] for f in NODES.glob("*.py"): for line in f.read_text(encoding="utf-8").splitlines(): - if line.startswith("from ") and ".msg import" in line and not line.startswith("from std_msgs.msg"): + if line.startswith("from ") and ".msg import" in line and not any(line.startswith(f"from {p}.msg") for p in STANDARD): bad.append(f"{f.name}: {line.strip()}") - check("no custom message types (only std_msgs imported in nodes/)", not bad, "; ".join(bad)) + check("no custom message types (only ros-base interface packages imported in nodes/)", not bad, "; ".join(bad)) check("bridge node still alive at the end", bridge.alive()) finally: From 15d95aeb4e9f1aca36145825819524677ef0997d Mon Sep 17 00:00:00 2001 From: Michael B Reiser Date: Fri, 16 Oct 2026 11:01:25 -0400 Subject: [PATCH 8/9] ros2-poc viz: display rotation, deg/s rates, no dropped frames + clearer layouts From checking both dashboards in Foxglove (web 3.4) on ww18 hardware runs replayed at 1x through viz_node (data branch data/ros2-poc-ww18-2026-10-15): - /arena/frame subscription: RELIABLE_QOS (depth 200) like the other inputs. With depth 10 viz_node dropped 15 of 9,969 frames (step 5.2), 17 of 58,918 (soak), 8 of 12,226 (5c); now 9,969/9,969, 58,918/58,918 and 12,226/12,226. - /viz/arena/display_deg (DisplayAngle): the display's unwrapped rotation from the wrapped index (sum of index steps taken the short way round the modulus x frame_dir x deg_per_frame). The modulus is --frames N, else learned per epoch (largest index + 1). A 20-frame grating kept azimuth_deg inside one 36-degree period while the fly turned thousands of degrees; on the ww18 closed-loop runs display - turn - bias is now constant within +/-0.9 degrees (half a frame) in every epoch. The 3D feature bar sits at wrap180(display_deg): unchanged for a pattern spanning the arena, turning with a grating. - /viz/fictrac/fwd_dps, side_dps: rates of FicTrac's integrated cols 20/21 in deg/s (per frame-counter step, so a dropped frame does not double them), the units of speed_dps. - arena-fictrac: closed loop = fly turn vs display rotation; bias angle in its own plot; kinematics = speed / forward / side in deg/s; short indicator labels + panel titles. - arena-bias: camera frame count and displayed index on separate plots; BIAS / Camera / Video indicators with short labels; ROS log panels titled live-only (bags do not record /rosout). - tests/test_viz_node.py (pixi run test-viz): 11 checks of the math, no ROS graph. Co-Authored-By: Claude Opus 5.5 --- ros2-poc/README.md | 35 +++++++--- ros2-poc/foxglove/arena-bias.json | 48 +++++++++---- ros2-poc/foxglove/arena-fictrac.json | 46 ++++++++---- ros2-poc/nodes/viz_node.py | 100 ++++++++++++++++++++++++--- ros2-poc/pixi.toml | 1 + ros2-poc/tests/test_viz_node.py | 92 ++++++++++++++++++++++++ 6 files changed, 278 insertions(+), 44 deletions(-) create mode 100644 ros2-poc/tests/test_viz_node.py diff --git a/ros2-poc/README.md b/ros2-poc/README.md index adfbf5a6..2043067c 100644 --- a/ros2-poc/README.md +++ b/ros2-poc/README.md @@ -150,11 +150,23 @@ OK while data flows, STALE after `--stale-s`, WARN never seen, ERROR for BIAS un failed command, with rate / last sequence / latency / last error + time), and a `visualization_msgs/MarkerArray` on `/viz/markers`: the ball rotated by FicTrac's lab-frame orientation with markings so the rotation is visible, the fly fixed on top facing +X, the arena -as a translucent cylinder, the pattern feature as a bar on the wall at -`wrap180(frame_dir·idx·deg_per_frame + az0)` (the same mapping `fictrac_sim.py --model fly` -uses), and a text readout. The stock `foxglove_bridge` serves it on **ws://localhost:8766** +as a translucent cylinder, the pattern feature as a bar on the wall at `wrap180(display_deg)` +(below), and a text readout. The stock `foxglove_bridge` serves it on **ws://localhost:8766** (8765 is the Studio bridge). +**The display's rotation, not just its index.** The bridge reports the frame index mod the +pattern's frame count, so with a periodic pattern (a 20-frame grating) `azimuth_deg = +wrap180(frame_dir·idx·deg_per_frame + az0)` stays inside one 36° period while the fly turns +through thousands of degrees. `/viz/arena/display_deg` sums the index steps, each taken the short +way round the modulus. That is the display's unwrapped rotation, which the closed-loop plot sets +against the fly's turn. The modulus comes from `--frames N` when given; otherwise it is learned +within each epoch as the largest index seen + 1, which is enough because a wrap passes through +the largest index. For a pattern that spans the arena (n·deg_per_frame = 360), `wrap180(display_deg)` +equals the feature azimuth, so the 3D bar is unchanged there, and for a grating it now turns +with the pattern. `/viz/fictrac/fwd_dps` and `side_dps` are the rates of FicTrac's integrated +forward/side motion (cols 20/21) in °/s, the units of `speed_dps`, so the kinematics plot reads +on one axis. `pixi run test-viz` checks this math. + ```bash pixi run rig -- --sim --sim-args "--model fly --kp 2 --seed 1" --foxglove # Arena + FicTrac pixi run rig -- --sim --bias --bias-sim --foxglove # Arena + BIAS (sim) @@ -163,14 +175,15 @@ pixi run rig -- --sim --bias --foxglove # Layout → Import from file… → ros2-poc/foxglove/arena-fictrac.json or arena-bias.json ``` -`arena-fictrac.json`: 3D scene, closed-loop plot (fly turn vs feature azimuth vs bias angle), -kinematics plot, frame-index plot, FicTrac light + rate gauge, diagnostics summary/detail, last -error, log. `arena-bias.json`: 3D scene, BIAS state timeline (unreachable / idle / preview / -recording), frame count vs arena index, latest BIAS reply (shows the `artifact` path), reachable / -capturing / writing-video lights, fps gauge, diagnostics, last error, log. Both work live and on a -replayed MCAP once the log moves to MCAP. Verified here only as topics and advertised channels -(no GUI in the container); the layouts are hand-written Foxglove JSON, so a panel whose schema -drifted shows up empty and is one click to re-point. +`arena-fictrac.json`: 3D scene, closed-loop plot (fly turn vs display rotation), bias angle, +kinematics plot (speed, forward, side in °/s), frame-index plot, FicTrac light + rate gauge, +diagnostics summary/detail, last error, log. `arena-bias.json`: 3D scene, BIAS state timeline +(unreachable / idle / preview / recording), camera frame count and the displayed index on separate +plots, latest BIAS reply (shows the `artifact` path), BIAS / camera / video lights, fps gauge, +diagnostics, last error, log. The ROS log panel is live only: the bags do not record `/rosout`. +Both layouts were checked in Foxglove (web 3.4, 2026-10-16) on ww18 hardware runs: each bag was +played back at 1× through this node and its outputs recorded. The files and the checker +(`tools/check_layouts.py`) are on branch `data/ros2-poc-ww18-2026-10-15`. ## Log format: MCAP sizing and the two-channel plan (2026-10-15) diff --git a/ros2-poc/foxglove/arena-bias.json b/ros2-poc/foxglove/arena-bias.json index bd5d0f36..16d13ffc 100644 --- a/ros2-poc/foxglove/arena-bias.json +++ b/ros2-poc/foxglove/arena-bias.json @@ -37,36 +37,40 @@ "imageMode": {} }, "Indicator!reachable": { + "foxglovePanelTitle": "BIAS", "path": "/viz/bias/reachable.data", "style": "bulb", "fallbackColor": "#8b949e", - "fallbackLabel": "BIAS: no status yet", + "fallbackLabel": "no status", "rules": [ - { "operator": "=", "rawValue": "true", "color": "#00e676", "label": "BIAS reachable" }, - { "operator": "=", "rawValue": "false", "color": "#ff5252", "label": "BIAS unreachable" } + { "operator": "=", "rawValue": "true", "color": "#00e676", "label": "reachable" }, + { "operator": "=", "rawValue": "false", "color": "#ff5252", "label": "unreachable" } ] }, "Indicator!capturing": { + "foxglovePanelTitle": "Camera", "path": "/viz/bias/capturing.data", "style": "bulb", "fallbackColor": "#8b949e", - "fallbackLabel": "capture: unknown", + "fallbackLabel": "unknown", "rules": [ { "operator": "=", "rawValue": "true", "color": "#00e676", "label": "capturing" }, - { "operator": "=", "rawValue": "false", "color": "#8b949e", "label": "not capturing" } + { "operator": "=", "rawValue": "false", "color": "#8b949e", "label": "idle" } ] }, "Indicator!logging": { + "foxglovePanelTitle": "Video", "path": "/viz/bias/logging.data", "style": "bulb", "fallbackColor": "#8b949e", - "fallbackLabel": "video: unknown", + "fallbackLabel": "unknown", "rules": [ - { "operator": "=", "rawValue": "true", "color": "#ffd740", "label": "writing video" }, - { "operator": "=", "rawValue": "false", "color": "#8b949e", "label": "no video" } + { "operator": "=", "rawValue": "true", "color": "#ffd740", "label": "writing" }, + { "operator": "=", "rawValue": "false", "color": "#8b949e", "label": "off" } ] }, "Gauge!fps": { + "foxglovePanelTitle": "Camera fps", "path": "/viz/bias/fps.data", "minValue": 0, "maxValue": 200, @@ -82,10 +86,24 @@ "isSynced": true }, "Plot!frames": { - "title": "BIAS frame count vs displayed index", + "title": "BIAS camera frames", "paths": [ - { "value": "/viz/bias/frame_count.data", "enabled": true, "timestampMethod": "receiveTime", "label": "camera frames" }, - { "value": "/viz/arena/index.data", "enabled": true, "timestampMethod": "receiveTime", "label": "arena frame index" } + { "value": "/viz/bias/frame_count.data", "enabled": true, "timestampMethod": "receiveTime", "label": "camera frames" } + ], + "showXAxisLabels": true, + "showYAxisLabels": true, + "showLegend": true, + "legendDisplay": "floating", + "showPlotValuesInLegend": true, + "isSynced": true, + "xAxisVal": "timestamp", + "sidebarDimension": 240, + "followingViewWidth": 60 + }, + "Plot!arenaindex": { + "title": "Displayed frame index", + "paths": [ + { "value": "/viz/arena/index.data", "enabled": true, "timestampMethod": "receiveTime", "label": "frame index" } ], "showXAxisLabels": true, "showYAxisLabels": true, @@ -125,6 +143,7 @@ "expansion": "all" }, "RosOut!log": { + "foxglovePanelTitle": "ROS log (live only: bags do not record /rosout)", "searchTerms": [], "minLogLevel": 2, "nameFilter": {} @@ -147,7 +166,12 @@ "second": { "direction": "row", "splitPercentage": 55, - "first": "Plot!frames", + "first": { + "direction": "column", + "splitPercentage": 55, + "first": "Plot!frames", + "second": "Plot!arenaindex" + }, "second": "RawMessages!reply" } } diff --git a/ros2-poc/foxglove/arena-fictrac.json b/ros2-poc/foxglove/arena-fictrac.json index 71c24f41..283d409d 100644 --- a/ros2-poc/foxglove/arena-fictrac.json +++ b/ros2-poc/foxglove/arena-fictrac.json @@ -37,11 +37,25 @@ "imageMode": {} }, "Plot!closedloop": { - "title": "Closed loop: fly vs display", + "title": "Closed loop: fly turn vs display rotation (deg, unwrapped)", "paths": [ - { "value": "/viz/fictrac/turn_deg.data", "enabled": true, "timestampMethod": "receiveTime", "label": "fly turn (deg, unwrapped)" }, - { "value": "/viz/arena/azimuth_deg.data", "enabled": true, "timestampMethod": "receiveTime", "label": "feature azimuth (deg, right +)" }, - { "value": "/viz/arena/bias_deg.data", "enabled": true, "timestampMethod": "receiveTime", "label": "bias angle (deg)" } + { "value": "/viz/fictrac/turn_deg.data", "enabled": true, "timestampMethod": "receiveTime", "label": "fly turn" }, + { "value": "/viz/arena/display_deg.data", "enabled": true, "timestampMethod": "receiveTime", "label": "display rotation" } + ], + "showXAxisLabels": true, + "showYAxisLabels": true, + "showLegend": true, + "legendDisplay": "floating", + "showPlotValuesInLegend": true, + "isSynced": true, + "xAxisVal": "timestamp", + "sidebarDimension": 240, + "followingViewWidth": 30 + }, + "Plot!bias": { + "title": "Bias angle (deg)", + "paths": [ + { "value": "/viz/arena/bias_deg.data", "enabled": true, "timestampMethod": "receiveTime", "label": "bias" } ], "showXAxisLabels": true, "showYAxisLabels": true, @@ -54,11 +68,11 @@ "followingViewWidth": 30 }, "Plot!kinematics": { - "title": "FicTrac kinematics", + "title": "FicTrac kinematics (deg/s of ball rotation)", "paths": [ - { "value": "/viz/fictrac/speed_dps.data", "enabled": true, "timestampMethod": "receiveTime", "label": "speed (deg/s)" }, - { "value": "/viz/fictrac/fwd_rad.data", "enabled": true, "timestampMethod": "receiveTime", "label": "forward (rad, integrated)" }, - { "value": "/viz/fictrac/side_rad.data", "enabled": true, "timestampMethod": "receiveTime", "label": "side (rad, integrated)" } + { "value": "/viz/fictrac/speed_dps.data", "enabled": true, "timestampMethod": "receiveTime", "label": "speed" }, + { "value": "/viz/fictrac/fwd_dps.data", "enabled": true, "timestampMethod": "receiveTime", "label": "forward" }, + { "value": "/viz/fictrac/side_dps.data", "enabled": true, "timestampMethod": "receiveTime", "label": "side" } ], "showXAxisLabels": true, "showYAxisLabels": true, @@ -94,6 +108,7 @@ "collapsedSections": [] }, "Gauge!ftrate": { + "foxglovePanelTitle": "FicTrac rate (Hz)", "path": "/viz/fictrac/rate_hz.data", "minValue": 0, "maxValue": 120, @@ -103,13 +118,14 @@ "reverse": false }, "Indicator!fictrac": { + "foxglovePanelTitle": "FicTrac", "path": "/viz/fictrac/rate_hz.data", "style": "bulb", "fallbackColor": "#8b949e", - "fallbackLabel": "FicTrac: no data", + "fallbackLabel": "no data", "rules": [ - { "operator": ">", "rawValue": "5", "color": "#00e676", "label": "FicTrac flowing" }, - { "operator": "<=", "rawValue": "5", "color": "#ff5252", "label": "FicTrac stalled" } + { "operator": ">", "rawValue": "5", "color": "#00e676", "label": "flowing" }, + { "operator": "<=", "rawValue": "5", "color": "#ff5252", "label": "stalled" } ] }, "RawMessages!lasterror": { @@ -121,6 +137,7 @@ "expansion": "all" }, "RosOut!log": { + "foxglovePanelTitle": "ROS log (live only: bags do not record /rosout)", "searchTerms": [], "minLogLevel": 2, "nameFilter": {} @@ -139,7 +156,12 @@ "second": { "direction": "column", "splitPercentage": 55, - "first": "Plot!closedloop", + "first": { + "direction": "row", + "splitPercentage": 68, + "first": "Plot!closedloop", + "second": "Plot!bias" + }, "second": { "direction": "row", "splitPercentage": 60, diff --git a/ros2-poc/nodes/viz_node.py b/ros2-poc/nodes/viz_node.py index 6088f47a..b1a10ea4 100644 --- a/ros2-poc/nodes/viz_node.py +++ b/ros2-poc/nodes/viz_node.py @@ -8,10 +8,15 @@ /viz/fictrac/heading_deg FicTrac col 17 heading, degrees 0–360 /viz/fictrac/turn_deg unwrapped turn since the node started (Σ wrap180(Δheading)) /viz/fictrac/speed_dps col 19 (rad/frame) × measured frame rate, degrees per second - /viz/fictrac/fwd_rad, /viz/fictrac/side_rad cols 20 / 21 + /viz/fictrac/fwd_rad, /viz/fictrac/side_rad cols 20 / 21 (integrated since FicTrac started) + /viz/fictrac/fwd_dps, /viz/fictrac/side_dps rates of cols 20 / 21, degrees per second — + the same units as speed_dps, so the three share one plot /viz/fictrac/rate_hz measured FicTrac frame rate (1 Hz update) /viz/arena/index displayed frame index (from the bridge's /arena/frame) /viz/arena/azimuth_deg feature azimuth in the fly's view = wrap180(frame_dir·idx·deg_per_frame + az0) + /viz/arena/display_deg the display's UNWRAPPED rotation: Σ wrapped index steps × frame_dir × + deg_per_frame (DisplayAngle). A periodic pattern (a 20-frame grating) + keeps azimuth_deg inside one period; this follows the fly's turn /viz/arena/bias_deg live bias angle when a waveform runs (else 0) /viz/kinefly/left_deg, right_deg, lmr_deg, wbf_hz /viz/bias/frame_count, /viz/bias/fps @@ -25,12 +30,14 @@ visualization_msgs/MarkerArray /viz/markers (--markers-hz, default 20): the ball (sphere + markings rotated by FicTrac's lab-frame orientation, cols 12–14), the fly (arrow, fixed, facing +X), the arena (translucent cylinder) and the pattern - feature (bar on the wall at the current azimuth), a text readout. + feature (bar on the wall at wrap180(display_deg), which is the azimuth for a + pattern spanning the arena and the pattern's rotation for a grating), a + text readout. Pure presentation: nothing here is logged or fed back. Foxglove connects through the stock foxglove_bridge (`pixi run foxglove`, ws://localhost:8766); layouts in foxglove/*.json. - pixi run viz -- --deg-per-frame 1.8 --frame-dir 1 --feature-az0 0 + pixi run viz -- --deg-per-frame 1.8 --frame-dir 1 --feature-az0 0 [--frames 20] """ from __future__ import annotations @@ -59,6 +66,57 @@ def wrap180(deg: float) -> float: return ((deg + 180.0) % 360.0) - 180.0 +class DisplayAngle: + """The display's unwrapped rotation, from the WRAPPED frame index the bridge reports. + + The bridge sends idx mod n_frames, so a periodic pattern (a 20-frame grating at 1.8°/frame) + only ever reports 0…19 and its azimuth spans one 36° period while the fly turns through + thousands of degrees. Summing the index steps, each taken the short way round the modulus, + recovers the rotation: Σ step × frame_dir × deg_per_frame. It starts at the first frame's + azimuth (frame_dir·idx·deg_per_frame + az0), so for a pattern that spans the arena + (n·deg_per_frame = 360) wrap180(deg) equals the feature azimuth. + + The modulus is `frames` when given; otherwise it is learned within each epoch (the bridge's + `epoch` counts heading tares, i.e. trial starts, where the pattern may change) as the + largest index seen + 1. That is enough because a wrap always passes through the largest + index (19→0 or 0→19), which is then already counted. A jump at an epoch start (the tare + moving the display to its start frame) is kept as the step it is. + """ + + def __init__(self, deg_per_frame: float, frame_dir: int = 1, az0: float = 0.0, frames: int = 0) -> None: + self.dpf, self.dir, self.az0 = deg_per_frame, frame_dir, az0 + self.fixed = frames if frames and frames > 1 else 0 + self.n = self.fixed + self.deg: float | None = None + self._prev: int | None = None + self._epoch = None + + def step(self, idx: int, epoch=None) -> float: + if not self.fixed: + if epoch != self._epoch: + self.n = 0 + self.n = max(self.n, idx + 1) + self._epoch = epoch + if self._prev is None: + self.deg = self.dir * idx * self.dpf + self.az0 + else: + d = idx - self._prev + if self.n > 1: + d = (d + self.n // 2) % self.n - self.n // 2 + self.deg += self.dir * d * self.dpf + self._prev = idx + return self.deg + + +def per_frame_rate_dps(prev: tuple | None, fc: int, value: float, frame_rate_hz: float): + """deg/s of an integrated FicTrac quantity (cols 20/21, rad) between consecutive samples: + Δvalue / Δframe-counter × frame rate, so a dropped frame does not double the rate. None on + the first sample or when the counter does not advance (a FicTrac restart).""" + if prev is None or fc <= prev[0] or frame_rate_hz <= 0: + return None + return math.degrees(value - prev[1]) / (fc - prev[0]) * frame_rate_hz + + def rotvec_to_quat(rx: float, ry: float, rz: float): """Axis-angle rotation vector (rad) → (x, y, z, w).""" a = math.sqrt(rx * rx + ry * ry + rz * rz) @@ -138,9 +196,12 @@ def __init__(self, a: argparse.Namespace) -> None: "speed": f64("/viz/fictrac/speed_dps"), "fwd": f64("/viz/fictrac/fwd_rad"), "side": f64("/viz/fictrac/side_rad"), + "fwd_dps": f64("/viz/fictrac/fwd_dps"), + "side_dps": f64("/viz/fictrac/side_dps"), "ft_rate": f64("/viz/fictrac/rate_hz"), "index": f64("/viz/arena/index"), "az": f64("/viz/arena/azimuth_deg"), + "display": f64("/viz/arena/display_deg"), "bias": f64("/viz/arena/bias_deg"), "left": f64("/viz/kinefly/left_deg"), "right": f64("/viz/kinefly/right_deg"), @@ -163,15 +224,20 @@ def __init__(self, a: argparse.Namespace) -> None: self.create_subscription(String, "/kinefly/raw", self._kinefly, RELIABLE_QOS) self.create_subscription(String, "/bias/status", self._bias_status, RELIABLE_QOS) self.create_subscription(String, "/bias/reply", self._bias_reply, RELIABLE_QOS) - self.create_subscription(String, "/arena/frame", self._arena, 10) + # RELIABLE_QOS (depth 200) like the others: with depth 10 this subscription dropped 15 of + # 9,969 frames when a ww18 bag was replayed at 1x (2026-10-16). + self.create_subscription(String, "/arena/frame", self._arena, RELIABLE_QOS) # State for the markers self.quat = (0.0, 0.0, 0.0, 1.0) self.heading_deg = 0.0 self.turn_deg = 0.0 self._prev_hd = None + self._prev_motion = None # (frame counter, col 20, col 21) of the previous FicTrac frame self.idx = 0 self.az_deg = 0.0 + self.display = DisplayAngle(a.deg_per_frame, a.frame_dir, a.feature_az0, a.frames) + self.display_deg = None self.bias_deg = 0.0 self.bias_active = False self.bias_state = "unreachable" @@ -233,9 +299,18 @@ def _fictrac(self, msg: String) -> None: self.quat = rotvec_to_quat(f[11], f[12], f[13]) self._pub("heading", hd) self._pub("turn", self.turn_deg) - self._pub("speed", math.degrees(f[18]) * (s.rate_hz or self.a.assume_rate)) + rate = s.rate_hz or self.a.assume_rate + self._pub("speed", math.degrees(f[18]) * rate) self._pub("fwd", f[19]) self._pub("side", f[20]) + fc = int(f[0]) + prev = self._prev_motion + fwd = per_frame_rate_dps(prev and (prev[0], prev[1]), fc, f[19], rate) + side = per_frame_rate_dps(prev and (prev[0], prev[2]), fc, f[20], rate) + if fwd is not None and side is not None: + self._pub("fwd_dps", fwd) + self._pub("side_dps", side) + self._prev_motion = (fc, f[19], f[20]) def _kinefly(self, msg: String) -> None: env = self._env(msg) @@ -307,6 +382,8 @@ def _arena(self, msg: String) -> None: self._pub("index", idx) self.az_deg = wrap180(self.a.frame_dir * idx * self.a.deg_per_frame + self.a.feature_az0) self._pub("az", self.az_deg) + self.display_deg = self.display.step(idx, fr.get("epoch")) + self._pub("display", self.display_deg) b = fr.get("bias") self.bias_active = isinstance(b, (int, float)) self.bias_deg = float(b) if self.bias_active else 0.0 @@ -384,8 +461,10 @@ def _markers(self) -> None: cyl.scale.z = ARENA_H cyl.color = color(0.2, 0.6, 1.0, 0.12) arr.markers.append(cyl) - # 4: the pattern feature on the wall at the current azimuth (right-positive → −Y) - az = math.radians(self.az_deg) + # 4: the pattern feature on the wall (right-positive → −Y), at the display's rotation: the + # feature azimuth for a pattern that spans the arena, and for a periodic pattern (a + # grating) a point of the pattern turning with it rather than its phase in one period + az = math.radians(wrap180(self.display_deg) if self.display_deg is not None else self.az_deg) feat = self._marker(4, Marker.CUBE) feat.pose.position.x = (ARENA_R - 0.08) * math.cos(az) feat.pose.position.y = -(ARENA_R - 0.08) * math.sin(az) @@ -401,8 +480,9 @@ def _markers(self) -> None: txt.pose.position.z = BALL_R + ARENA_H + 0.6 txt.scale.z = 0.3 txt.color = color(0.9, 0.93, 0.95, 1.0) - txt.text = (f"idx {self.idx} az {self.az_deg:+.1f}° heading {self.heading_deg:.1f}°" - + (f" bias {self.bias_deg:+.1f}°" if self.bias_active else "")) + txt.text = (f"idx {self.idx} display {self.display_deg or 0.0:+.0f}° turn {self.turn_deg:+.0f}°" + f" heading {self.heading_deg:.0f}°" + + (f" bias {self.bias_deg:+.0f}°" if self.bias_active else "")) arr.markers.append(txt) self.p_markers.publish(arr) @@ -412,6 +492,8 @@ def main(argv: list[str] | None = None) -> int: p.add_argument("--deg-per-frame", type=float, default=1.8, help="pattern pitch, display degrees per frame index (default: 1.8)") p.add_argument("--frame-dir", type=int, default=1, choices=(1, -1), help="+1: an index increase moves the feature RIGHT (default)") p.add_argument("--feature-az0", type=float, default=0.0, help="feature azimuth at index 0, degrees, right-positive (default: 0)") + p.add_argument("--frames", type=int, default=0, + help="pattern frame count (the index modulus) for display_deg; 0 = learn it per epoch from the indices (default)") p.add_argument("--assume-rate", type=float, default=50.0, help="FicTrac frame rate used for speed before the first measured second (default: 50)") p.add_argument("--markers-hz", type=float, default=20.0, help="3D marker update rate (default: 20)") p.add_argument("--stale-s", type=float, default=2.0, help="seconds of silence before a source reads STALE (default: 2)") diff --git a/ros2-poc/pixi.toml b/ros2-poc/pixi.toml index 9cdba36f..b5dd6c47 100644 --- a/ros2-poc/pixi.toml +++ b/ros2-poc/pixi.toml @@ -76,4 +76,5 @@ size-study = "python sizing/compare.py" rig = "python nodes/rig.py" # ── acceptance test (LAB-303 PoC criteria): whole graph + Studio emulator + model fly ── test = "python tests/test_ros2_poc.py" +test-viz = "python tests/test_viz_node.py" studio-emulator = "python tests/studio_emulator.py" diff --git a/ros2-poc/tests/test_viz_node.py b/ros2-poc/tests/test_viz_node.py new file mode 100644 index 00000000..da2b097e --- /dev/null +++ b/ros2-poc/tests/test_viz_node.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 +"""test_viz_node.py — the pure math in nodes/viz_node.py (no ROS graph needed). + + pixi run python tests/test_viz_node.py + +DisplayAngle (the unwrapped display rotation from the bridge's wrapped index) and +per_frame_rate_dps (rates of FicTrac's integrated cols 20/21). Importing viz_node needs rclpy +and the std/visualization/diagnostic message packages, which every environment here has. +""" +from __future__ import annotations + +import math +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "nodes")) +from viz_node import DisplayAngle, per_frame_rate_dps, wrap180 # noqa: E402 + +failures = 0 + + +def check(name: str, ok: bool, detail: str = "") -> None: + global failures + failures += not ok + print(f"{'PASS' if ok else 'FAIL'} {name}" + (f" ({detail})" if detail and not ok else "")) + + +def close(a: float, b: float, tol: float = 1e-9) -> bool: + return abs(a - b) <= tol + + +# 1. A 20-frame grating turned forward through 3 periods: the wrapped index cycles 0..19 three +# times, the unwrapped angle grows by 1.8° a step (60 steps = 108°), never jumping at 19→0. +d = DisplayAngle(1.8, frames=20) +idx = [i % 20 for i in range(61)] +out = [d.step(i, epoch=1) for i in idx] +steps = [b - a for a, b in zip(out, out[1:])] +check("grating forward: every step +1.8° across the wraps", all(close(s, 1.8) for s in steps), + f"steps {sorted(set(round(s, 3) for s in steps))}") +check("grating forward: 60 steps = 108°", close(out[-1] - out[0], 108.0)) + +# 2. Backwards through the wrap 0 → 19: −1.8°, not +34.2°. +d = DisplayAngle(1.8, frames=20) +seq = [3, 2, 1, 0, 19, 18] +out = [d.step(i) for i in seq] +check("grating backward through 0→19: −1.8° steps", all(close(b - a, -1.8) for a, b in zip(out, out[1:]))) + +# 3. Learned modulus (frames=0): the same backward sequence, where 19 is first seen AT the wrap. +d = DisplayAngle(1.8) +out = [d.step(i, epoch=1) for i in seq] +check("learned modulus: wrap at the first sight of the top index", all(close(b - a, -1.8) for a, b in zip(out, out[1:])), + f"{[round(b - a, 2) for a, b in zip(out, out[1:])]}") + +# 4. Learned modulus re-learns at an epoch change (a pre-run test pattern with 129 frames, then +# the 20-frame grating): after the tare, 19→0 is again a +1 step, not −19. +d = DisplayAngle(1.8) +for i in range(129): + d.step(i, epoch=0) +before = d.step(0, epoch=1) # the tare: jump to the start frame +for i in range(1, 20): + d.step(i, epoch=1) +last19 = d.deg +after = d.step(0, epoch=1) +check("learned modulus resets per epoch (129-frame test pattern, then 20)", close(after - last19, 1.8), + f"19→0 step {after - last19:+.2f}°") + +# 5. A pattern spanning the arena (200 frames × 1.8° = 360°): wrap180(display) is the azimuth. +d = DisplayAngle(1.8, frame_dir=1, az0=10.0, frames=200) +ok = True +for i in list(range(0, 200, 7)) + list(range(199, -1, -9)): + deg = d.step(i) + ok &= close(wrap180(deg), wrap180(1.8 * i + 10.0), 1e-6) +check("full-arena pattern: wrap180(display) == feature azimuth", ok) + +# 6. frame_dir −1 mirrors the angle. +a, b = DisplayAngle(1.8, frame_dir=1, frames=20), DisplayAngle(1.8, frame_dir=-1, frames=20) +for i in [0, 1, 2, 3, 2, 1, 0, 19, 18]: + x, y = a.step(i), b.step(i) +check("frame_dir −1 mirrors the rotation", close(x, -y)) + +# 7. Rates of the integrated FicTrac columns. +r = per_frame_rate_dps(None, 10, 1.0, 100.0) +check("rate: none on the first sample", r is None) +r = per_frame_rate_dps((10, 1.0), 11, 1.0 + math.radians(0.5), 100.0) +check("rate: 0.5° in one frame at 100 Hz = 50 °/s", r is not None and close(r, 50.0, 1e-9)) +r = per_frame_rate_dps((10, 1.0), 12, 1.0 + math.radians(1.0), 100.0) +check("rate: a dropped frame does not double it (1° over 2 frames = 50 °/s)", r is not None and close(r, 50.0, 1e-9)) +r = per_frame_rate_dps((500, 1.0), 3, 0.0, 100.0) +check("rate: none when the frame counter goes back (FicTrac restarted)", r is None) + +print(f"\n{'FAIL' if failures else 'PASS'}: {failures} failure(s)") +sys.exit(1 if failures else 0) From 96b6dc53c19bce0948edb08210ff932b4535eb00 Mon Sep 17 00:00:00 2001 From: Michael B Reiser Date: Fri, 16 Oct 2026 11:11:09 -0400 Subject: [PATCH 9/9] ros2-poc viz: arena-bias indicators stacked full-width, BIAS online/offline In Foxglove (1316 px window) the BIAS light still clipped "reachable" and the gauge title "Camera fps": the three lights now stack in a 60 % column beside the gauge, and the BIAS light reads online / offline. Co-Authored-By: Claude Opus 5.5 --- ros2-poc/foxglove/arena-bias.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ros2-poc/foxglove/arena-bias.json b/ros2-poc/foxglove/arena-bias.json index 16d13ffc..a0ad90f0 100644 --- a/ros2-poc/foxglove/arena-bias.json +++ b/ros2-poc/foxglove/arena-bias.json @@ -43,8 +43,8 @@ "fallbackColor": "#8b949e", "fallbackLabel": "no status", "rules": [ - { "operator": "=", "rawValue": "true", "color": "#00e676", "label": "reachable" }, - { "operator": "=", "rawValue": "false", "color": "#ff5252", "label": "unreachable" } + { "operator": "=", "rawValue": "true", "color": "#00e676", "label": "online" }, + { "operator": "=", "rawValue": "false", "color": "#ff5252", "label": "offline" } ] }, "Indicator!capturing": { @@ -178,13 +178,13 @@ }, "second": { "direction": "column", - "splitPercentage": 28, + "splitPercentage": 34, "first": { "direction": "row", - "splitPercentage": 66, + "splitPercentage": 60, "first": { - "direction": "row", - "splitPercentage": 50, + "direction": "column", + "splitPercentage": 33, "first": "Indicator!reachable", "second": { "direction": "column",