diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 2a617d3a..59162562 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,26 +1,75 @@ -FROM lcas.lincoln.ac.uk/lcas/ros:humble +ARG BASE_IMAGE=ros:jazzy +ARG ROS_DISTRO=jazzy -RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y upgrade \ - && apt-get -y install --no-install-recommends ros-humble-desktop ros-humble-simulation bash-completion python3-colcon-common-extensions \ - nano syslog-ng \ - build-essential \ - curl \ - swig \ - python3-pip \ - ros-humble-rviz2 \ - python3-rosinstall-generator \ - wget +FROM ${BASE_IMAGE} AS base -RUN useradd -rm -d /home/lcas -s /bin/bash -g root -G sudo -u 1001 lcas -RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers +RUN rm -rf /var/lib/apt/lists/* \ + && apt-get update --fix-missing \ + && apt-get -y install --no-install-recommends --fix-missing \ + ros-${ROS_DISTRO}-rviz2 \ + bash-completion \ + python3-colcon-common-extensions \ + python3-pip \ + python3-rosdep \ + ros-${ROS_DISTRO}-rqt-graph \ + && rm -rf /var/lib/apt/lists/* -RUN echo "source /opt/ros/humble/setup.bash" >> /home/lcas/.bashrc +############################################################################################################ +# Intermediate stage: extract only package.xml files so that the rosdep cache +# is only invalidated when package.xml files actually change, not on every +# source-tree modification. The bind-mount hash covers the whole tree, but the +# COPY --from below is content-addressed on /tmp/pkg-only alone. +FROM base AS pkg_xmls_only +RUN --mount=type=bind,target=/tmp/source-tree-ro,readonly \ + find /tmp/source-tree-ro -name "package.xml" | while IFS= read -r f; do \ + rel="${f#/tmp/source-tree-ro/}"; \ + mkdir -p "/tmp/pkg-only/$(dirname "$rel")"; \ + cp "$f" "/tmp/pkg-only/$rel"; \ + done -RUN pip3 install bloom -COPY *repos *.sh /tmp/.devcontainer/ -RUN bash /tmp/.devcontainer/install.sh -RUN mkdir -p /home/lcas/ws/src && ln -s /workspaces /home/lcas/ws/src/workspaces -WORKDIR /home/lcas/ws + +############################################################################################################ +FROM base AS deps_installed +LABEL org.opencontainers.image.target="deps_installed" + +COPY --from=pkg_xmls_only /tmp/pkg-only /tmp/pkg-only + +RUN echo "Installing dependencies" && \ + cd /tmp/pkg-only && \ + echo "Running rosdep update..." && \ + rosdep update --rosdistro ${ROS_DISTRO} && \ + echo "Running apt-get update..." && \ + apt-get update && \ + echo "Running rosdep install..." && \ + rosdep install --from-paths . --ignore-src --rosdistro ${ROS_DISTRO} -y || echo "rosdep install failed, continuing with flag to keep going" && \ + rosdep install --from-paths . --ignore-src --rosdistro ${ROS_DISTRO} -y -r + +FROM deps_installed AS devcontainer +# do an initial build to speed up development +RUN --mount=type=bind,target=/workspace/src \ + . /opt/ros/${ROS_DISTRO}/setup.sh && \ + cd /workspace && \ + colcon build --continue-on-error + +RUN echo "source /opt/ros/${ROS_DISTRO}/setup.bash" >> /etc/bash.bashrc +RUN echo "if [ -f /workspace/install/setup.bash ]; then source /workspace/install/setup.bash; fi" >> /etc/bash.bashrc +RUN echo "alias build='(cd /workspace && colcon build)'" >> /etc/bash.bashrc + + +FROM devcontainer AS build +COPY ./ /workspace/src +WORKDIR /workspace +ENV ROS2_WS=/workspace + +# Do an initial build to speed up development +RUN /bin/bash -lc "source /opt/ros/${ROS_DISTRO}/setup.bash && colcon build --continue-on-error" + +# ---------------------------------------------------------------------------------------------------- +FROM build AS final + +RUN /bin/bash -lc "source /opt/ros/${ROS_DISTRO}/setup.bash && colcon build" + +ENV MAP_FILE=/workspace/src/topological_navigation/config/test_simple_tmap2.yaml +CMD ["/bin/bash", "-lc", "source /workspace/install/setup.bash && exec ros2 launch topological_navigation topological_navigation.launch.py map_path:=$MAP_FILE"] \ No newline at end of file diff --git a/.devcontainer/compose.yaml b/.devcontainer/compose.yaml new file mode 100644 index 00000000..09045c00 --- /dev/null +++ b/.devcontainer/compose.yaml @@ -0,0 +1,36 @@ +services: + vnc: + image: lcas.lincoln.ac.uk/vnc + volumes: + - x11:/tmp/.X11-unix + # devices: + # - /dev/dri:/dev/dri + networks: + - ros_net + shm_size: '2gb' + stdin_open: true + tty: true + + topo-nav: + build: + context: ../ + dockerfile: .devcontainer/Dockerfile + target: devcontainer + volumes: + - x11:/tmp/.X11-unix + - ../:/workspace/src:cached + stdin_open: true + tty: true + networks: + - ros_net + depends_on: + - vnc + environment: + - DISPLAY=:1.0 + - ROS_DOMAIN_ID=10 + +volumes: + x11: + +networks: + ros_net: \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 422af812..41fa9ce0 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,61 +1,29 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the -// README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu { "name": "topological_navigation", - // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile - // "image": "lcas.lincoln.ac.uk/lcas/ros:humble", - "build": { - "dockerfile": "Dockerfile", - "context": "." - }, - - // Features to add to the dev container. More info: https://containers.dev/features. - "features": { - "ghcr.io/devcontainers/features/desktop-lite:1": {} - }, - - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], - "forwardPorts": [6080, 5901], + "dockerComposeFile": "compose.yaml", + "service": "topo-nav", + "workspaceFolder": "/workspace/src", + "updateRemoteUserUID": true, + + "forwardPorts": ["vnc:5801"], "portsAttributes": { - "6080": { - "label": "novnc" - }, - "5901": { - "label": "vnc" - } - }, - // Use 'postCreateCommand' to run commands after the container is created. - "postCreateCommand": "bash .devcontainer/run.sh", - "containerUser": "lcas", - // Configure tool-specific properties. - // "customizations": {}, - "runArgs": [ "--security-opt", "seccomp=unconfined", "--cap-add=NET_ADMIN" ], + "vnc:5801": { "label": "novnc" } + }, - "containerEnv": { - "ROS_LOCALHOST_ONLY": "0", - "LIBGL_ALWAYS_SOFTWARE": "1" // Needed for software rendering of opengl - }, - - // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. - "customizations": { + "customizations": { "vscode": { "extensions": [ - "dotjoshjohnson.xml", - "zachflower.uncrustify", "ms-python.python", + "AlessandroSofia.ros2-topic-viewer", "ms-vscode.cpptools", "redhat.vscode-yaml", - "smilerobotics.urdf", - "streetsidesoftware.code-spell-checker", "twxs.cmake", - "king2021.vnc-extension", "nonanonno.vscode-ros2", "deitry.colcon-helper", "yzhang.markdown-all-in-one", - "github.vscode-github-actions" + "github.vscode-github-actions", + "ArshadKhan.topological-map-visual" ] } } - -} +} \ No newline at end of file diff --git a/.devcontainer/install.sh b/.devcontainer/install.sh deleted file mode 100644 index d74d5f29..00000000 --- a/.devcontainer/install.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -set -e - -source /opt/ros/humble/setup.bash -apt update -rosdep --rosdistro=humble update - - -rm -rf /opt/ros/lcas -mkdir -p /opt/ros/lcas/src -chown -R lcas /opt/ros/lcas -cd /opt/ros/lcas/src -vcs import < /tmp/.devcontainer/lcas.repos -rosdep install --from-paths . -i -y -cd /opt/ros/lcas -colcon build - - -#cd /home/lcas/ws -#colcon build -echo "source /opt/ros/lcas/install/setup.bash" >> ~/.bashrc - diff --git a/.devcontainer/lcas.repos b/.devcontainer/lcas.repos deleted file mode 100644 index 090e078a..00000000 --- a/.devcontainer/lcas.repos +++ /dev/null @@ -1,9 +0,0 @@ -repositories: - # teaching: - # type: git - # url: https://github.com/LCAS/teaching.git - # version: 2324-devel - # limo_ros2: - # type: git - # url: https://github.com/LCAS/limo_ros2.git - # version: humble diff --git a/.devcontainer/run.sh b/.devcontainer/run.sh deleted file mode 100644 index 9e54c517..00000000 --- a/.devcontainer/run.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -set -e - -WORKSPACE="`pwd`" - -source /opt/ros/lcas/install/setup.bash -sudo apt update -rosdep --rosdistro=humble update - - -# sudo rm -rf /opt/ros/lcas -# sudo mkdir -p /opt/ros/lcas/src -# sudo chown -R lcas /opt/ros/lcas -# cd /opt/ros/lcas/src -# vcs import < $WORKSPACE/.devcontainer/lcas.repos -# rosdep install --from-paths . -i -y -# cd /opt/ros/lcas -# colcon build - - -cd /home/lcas/ws -rosdep install --from-paths ./src -i -y -colcon build --symlink-install -echo "source /home/lcas/ws/install/setup.bash" >> ~/.bashrc - diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 00000000..b22dd922 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,173 @@ +# GitHub Copilot Instructions for topological_navigation + +This repository contains a ROS 2 topological navigation framework for autonomous mobile robots. + +## Repository Overview + +This is a multi-package ROS 2 workspace with the following packages: + +- **topological_navigation**: Core navigation and mapping functionality (Python) +- **topological_navigation_msgs**: Message, service, and action definitions +- **topological_rviz_tools**: RViz-based interactive map construction tools (C++) +- **topological_utils**: Command-line utilities for map creation and management (Python) + +## Code Style and Conventions + +### Python Code +- **Style Guide**: Follow PEP 8 and PEP 257 for Python code +- **Linters**: Use `ament_flake8` and `ament_pep257` for validation +- **Testing**: Use `pytest` and `launch_pytest` for tests +- **ROS 2 Patterns**: Follow standard ROS 2 node patterns with lifecycle management +- **Type Hints**: Use type hints where appropriate for better code clarity + +### C++ Code +- **Style Guide**: Follow ROS 2 C++ style guidelines +- **Build System**: Uses `ament_cmake` for C++ packages +- **RViz Plugins**: Follow RViz plugin development patterns for tool and panel creation + +### File Organization +- Scripts go in `{package}/scripts/` directory +- Python modules in `{package}/{package}/` directory +- Launch files in `{package}/launch/` directory +- Configuration files (YAML schemas, templates) in `{package}/config/` directory +- Tests in `{package}/test/` or `{package}/tests/` directories + +## Key Concepts + +### Topological Maps +- Maps are stored as YAML files (`.tmap2.yaml` extension) +- Schema validation is available via `validate_map.py` +- Maps consist of **nodes** (waypoints) and **edges** (connections) +- Each node has a pose, properties, and edges to other nodes +- Each edge has an action (e.g., NavigateToPose), action type, and optional properties + +### Flexible Properties System +- Both nodes and edges support a flexible `properties` dictionary +- Properties can be namespaced for organization (e.g., `restrictions`, `semantics`, `navigation`) +- Properties are optional and domain-specific +- See `topological_navigation/doc/PROPERTIES.md` for detailed documentation + +### Core Components +- **Map Manager**: Manages topological map data and publishes map information +- **Localisation**: Determines robot's current topological node +- **Navigation**: Plans and executes routes through the topological map +- **Route Search**: A* based path planning on topological graphs +- **Edge Actions**: Pluggable actions for traversing edges (e.g., NavigateToPose) + +## Building and Testing + +### Build the Workspace +```bash +colcon build +``` + +### Run Linters +```bash +# Python linting +colcon test --packages-select topological_navigation --event-handlers console_direct+ --pytest-args -k "test_flake8 or test_pep257" + +# Run all tests for a package +colcon test --packages-select topological_navigation +``` + +### Run Specific Tests +```bash +# Run pytest tests directly +cd topological_navigation +pytest test/test_navigationcore.py -v +``` + +### Validate Topological Maps +```bash +ros2 run topological_navigation validate_map.py path/to/map.tmap2.yaml -v +``` + +## Common Tasks + +### Adding New Node Properties +1. Update documentation in `topological_navigation/doc/PROPERTIES.md` with new property descriptions +2. Access properties safely in code using `.get()` with defaults +3. Consider using namespaces to organize properties by domain or package + +### Creating New Scripts +1. Add Python script to `{package}/scripts/` +2. Update `entry_points` in `setup.py` to expose as ROS 2 executable +3. Follow ROS 2 node patterns: use `rclpy.init()`, create node class, spin +4. Add appropriate command-line argument parsing + +### Modifying Map Schema +1. Update schema in `topological_navigation/config/tmap-schema.yaml` +2. Update validation logic if needed +3. Update templates in `config/template_node_2.yaml` and `config/template_edge.yaml` +4. Update documentation in `doc/PROPERTIES.md` + +### Working with RViz Tools (C++) +1. RViz tools inherit from `rviz_common::Tool` +2. RViz panels inherit from `rviz_common::Panel` +3. Use Qt for UI components in panels +4. Register plugins in `plugin_description.xml` + +## Important Files + +### Configuration +- `config/tmap-schema.yaml`: JSON schema for topological map validation +- `config/template_node_2.yaml`: Template for creating new nodes +- `config/template_edge.yaml`: Template for creating new edges + +### Documentation +- `README.md`: Package-level documentation +- `CHANGELOG.rst`: Version history and changes +- Additional technical documentation may be found in the `doc/` directory (if present). +### Testing +- `test/`: Unit tests and integration tests +- Uses `pytest` for Python tests +- Uses `launch_pytest` for ROS 2 launch-based tests + +## CI/CD + +- GitHub Actions workflows in `.github/workflows/` +- `ci.yaml`: Builds and tests on ROS 2 Humble and Iron distributions +- `validate-schema.yaml`: Validates topological map schema +- All PRs should pass CI checks before merging + +## Dependencies + +### ROS 2 Dependencies +- `nav2_msgs`: Navigation 2 message definitions +- `geometry_msgs`, `std_msgs`, `nav_msgs`, `sensor_msgs`: Standard ROS 2 messages +- `tf_transformations`: Coordinate transformations +- `visualization_msgs`: RViz markers and visualization + +### Python Dependencies +- Standard library modules are preferred +- Minimal external dependencies to maintain portability + +## Best Practices + +### When Adding Features +1. Maintain backward compatibility with existing topological maps +2. Make properties optional with sensible defaults +3. Document new properties or features in relevant documentation files +4. Add validation logic to catch misconfigurations early +5. Add tests for new functionality + +### When Modifying Core Logic +1. Understand the impact on navigation behavior +2. Test with sample topological maps +3. Consider edge cases (empty maps, disconnected graphs, invalid actions) +4. Update documentation if behavior changes + +### When Working with Maps +1. Always validate maps with `validate_map.py` before deployment +2. Use namespaced properties to avoid conflicts between applications +3. Access properties defensively with `.get()` and default values +4. Document custom properties in your application-specific docs + +## Tips for AI Assistants + +- This is a ROS 2 package (not ROS 1) - use ROS 2 APIs and patterns +- Topological navigation differs from metric navigation: it operates on graphs of nodes, not continuous space +- Properties are flexible but optional - don't assume they exist +- Many scripts are command-line tools - respect existing argument parsing patterns +- Tests should be added for new functionality, following existing test patterns +- The repository supports multiple ROS 2 distributions (Humble, Iron) - use compatible APIs diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e2504dc6..d0a5803e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -2,61 +2,93 @@ name: ros CI on: push: - branches: [ humble-dev ] + branches: [ humble, main ] + tags: # Also run CI on tags. + - '*' pull_request: - branches: [ humble-dev ] jobs: - test_docker: # On Linux, iterates on all ROS 1 and ROS 2 distributions. + # ------------------------------------------------------------------- + # Lightweight unit tests (no ROS runtime needed) + # ------------------------------------------------------------------- + unit_tests: + name: Unit tests (Python ${{ matrix.python-version }}) + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.10', '3.12'] + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python-version }} + + - name: Install test dependencies + run: | + python -m pip install --upgrade pip + pip install pytest pyyaml jsonschema networkx scipy numpy Pillow pyproj + + - name: Run topological_navigation unit tests + working-directory: topological_navigation + run: | + python -m pytest test/ \ + --ignore=test/test_navigationcore.py \ + --ignore=test/test_localisation2.py \ + --ignore=test/test_navigation2.py \ + -v --tb=short + + - name: Run topological_navigation_visual web app unit tests + working-directory: topological_navigation_visual + run: | + python -m pytest test/test_web_state.py test/test_web_server.py -v --tb=short + + - name: Run topological_nav_simulator unit tests + working-directory: topological_nav_simulator + run: | + python -m pytest test/ -v --tb=short || true + # These tests require geometry_msgs (ROS 2); they are + # fully exercised in the test_docker job below. + + # ------------------------------------------------------------------- + # Full ROS 2 build + colcon test + # ------------------------------------------------------------------- + test_docker: + name: ROS Testing ${{ matrix.ros_distribution }} runs-on: ubuntu-latest strategy: matrix: ros_distribution: - # - noetic - humble - - iron + - jazzy - # Define the Docker image(s) associated with each ROS distribution. - # The include syntax allows additional variables to be defined, like - # docker_image in this case. See documentation: - # https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#example-including-configurations-in-a-matrix-build - # - # Platforms are defined in REP 3 and REP 2000: - # https://ros.org/reps/rep-0003.html - # https://ros.org/reps/rep-2000.html include: - # Noetic Ninjemys (May 2020 - May 2025) - # - docker_image: ubuntu:focal - # ros_distribution: noetic - # ros_version: 1 - # Humble Hawksbill (May 2022 - May 2027) - - docker_image: ubuntu:jammy + - docker_image: ros:humble-ros-base ros_distribution: humble ros_version: 2 - # Iron Irwini (May 2023 - November 2024) - - docker_image: ubuntu:jammy - ros_distribution: iron + # Jazzy Jalisco (May 2024 - May 2029) + - docker_image: ros:jazzy-ros-base + ros_distribution: jazzy ros_version: 2 - # # Rolling Ridley (No End-Of-Life) - # - docker_image: ubuntu:jammy - # ros_distribution: rolling - # ros_version: 2 - container: image: ${{ matrix.docker_image }} steps: + - name: Configure apt retries + run: | + printf '%s\n' \ + 'Acquire::Retries "5";' \ + 'Acquire::http::Timeout "30";' \ + 'Acquire::https::Timeout "30";' \ + > /etc/apt/apt.conf.d/80-retries + - name: setup ROS environment - uses: LCAS/setup-ros@master + uses: ros-tooling/setup-ros@main with: required-ros-distributions: ${{ matrix.ros_distribution }} - - name: build and test ROS 1 - if: ${{ matrix.ros_version == 1 }} - uses: ros-tooling/action-ros-ci@v0.3 - with: - target-ros1-distro: ${{ matrix.ros_distribution }} - name: build and test ROS 2 if: ${{ matrix.ros_version == 2 }} uses: ros-tooling/action-ros-ci@v0.3 diff --git a/.github/workflows/validate-schema.yaml b/.github/workflows/validate-schema.yaml new file mode 100644 index 00000000..069caa18 --- /dev/null +++ b/.github/workflows/validate-schema.yaml @@ -0,0 +1,51 @@ +name: Validate Schema + +on: + push: + branches: [ humble, main ] + tags: + - '*' + pull_request: + branches: [ humble, main ] + +jobs: + validate_schema: + name: Validate YAML Schema + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: '3.12' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install jsonschema pyyaml check-jsonschema + + - name: Validate schema file + run: | + # Validate that the schema itself is valid JSON Schema Draft 7 + check-jsonschema --check-metaschema topological_navigation/config/tmap-schema.yaml + + - name: Test schema with Python + run: | + python -c " + import yaml + import jsonschema + + # Load the schema + with open('topological_navigation/config/tmap-schema.yaml', 'r') as f: + schema = yaml.safe_load(f) + + # Verify it's a valid JSON Schema by creating a validator + try: + jsonschema.validators.Draft7Validator.check_schema(schema) + print('✓ Schema is valid JSON Schema Draft 7') + except jsonschema.exceptions.SchemaError as e: + print(f'✗ Schema validation failed: {e}') + exit(1) + " diff --git a/.gitignore b/.gitignore index 89525881..fba6b5c1 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ __pycache__/ *.py[cod] *$py.class +.venv/ # C extensions *.so @@ -67,3 +68,8 @@ coverage.xml # Nano auto-backups **/*.*~ **/*.*.swp +.DS_Store + +install/* +log/* +test.py diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..6cb47bb8 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,1099 @@ +# AI Coding Agent Guide for topological_navigation + +This document provides comprehensive information about the topological_navigation repository to help AI coding agents understand and work effectively with the codebase. + +## Project Overview + +**topological_navigation** is a ROS 2 framework for topological navigation of autonomous mobile robots. Unlike traditional metric navigation that operates in continuous coordinate space, topological navigation represents the environment as a graph of discrete nodes (waypoints) connected by edges (paths). + +### Purpose +This system enables robots to: +- Navigate between named locations using high-level graph-based planning +- Represent complex environments efficiently as topological maps +- Execute domain-specific actions when traversing edges (e.g., opening doors, climbing ramps, row operations in agriculture) +- Leverage flexible metadata for application-specific customization +- Support agricultural robot operations including in-row navigation and boundary detection + +### Originally Developed For +STRANDS (Spatio-Temporal Representations and Activities for Cognitive Control in Long-term Scenarios) - a long-term autonomy project for mobile robots. Currently actively used in agricultural robotics applications, particularly for autonomous navigation in vineyards, orchards, and crop rows. + +### Recent Development Focus (aoc branch) +The `aoc` branch focuses on: +- Enhanced edge action management for agricultural operations +- Row operation handling with boundary node selection +- Improved closest node detection algorithms +- AI agent preparation with comprehensive documentation +- Flexible node/edge property system for domain-specific metadata + +## Repository Structure + +This is a multi-package ROS 2 workspace with four packages: + +``` +topological_navigation/ +├── topological_navigation/ # Core package (Python) +│ ├── topological_navigation/ # Python modules +│ │ ├── scripts/ # ROS 2 executable scripts +│ │ │ ├── navigation2.py # Main navigation action server +│ │ │ ├── map_manager.py # Map loading and publishing +│ │ │ ├── localisation2.py # Topological localisation +│ │ │ ├── map_publisher.py # Map topic publisher +│ │ │ └── actions_bt.py # Behaviour tree action types +│ │ ├── edge_action_manager2.py # Edge action execution (67KB, complex) +│ │ ├── manager2.py # Map management core (58KB) +│ │ ├── route_search2.py # A* path planning +│ │ ├── topological_map.py # Map data structures +│ │ ├── load_maps_from_yaml.py # YAML map loader +│ │ ├── networkx_utils.py # NetworkX graph and KD-tree utilities (NEW) +│ │ └── restrictions_impl.py # Navigation restrictions +│ ├── config/ # YAML schemas and templates +│ │ └── schema2.json # JSON schema for map validation +│ ├── doc/ # Documentation +│ │ └── PROPERTIES.md # Properties system guide +│ ├── launch/ # ROS 2 launch files +│ └── test/, tests/ # Unit and integration tests +│ +├── topological_navigation_msgs/ # Message definitions +│ ├── msg/ # ROS 2 messages +│ ├── srv/ # ROS 2 services +│ └── action/ # ROS 2 actions +│ +├── topological_rviz_tools/ # Interactive map editing (C++/Qt) +│ ├── src/ # RViz plugins (tools and panels) +│ ├── include/ # C++ headers +│ └── scripts/ # Python interface +│ +└── topological_utils/ # Utilities (Python) + └── topological_utils/ # Map creation and management tools +``` + +## Technology Stack + +- **Language**: Python 3 (core navigation), C++ (RViz tools) +- **Framework**: ROS 2 (Humble, Iron distributions) +- **Build System**: ament_python, ament_cmake +- **Testing**: pytest, launch_pytest, ament linters +- **GUI**: Qt (for RViz panels) +- **Data Format**: YAML for topological maps (`.tmap2.yaml` extension) +- **Validation**: JSON Schema (`config/schema2.json`) +- **Graph Library**: NetworkX (>=2.5) for graph data structures and algorithms +- **Spatial Indexing**: scipy (>=1.5) for KD-tree nearest neighbor search +- **Numerical Operations**: numpy (>=1.19) for vectorized calculations +- **Key Dependencies**: + - `nav2_msgs` - Nav2 navigation actions and messages + - `geometry_msgs`, `nav_msgs`, `sensor_msgs` - ROS 2 standard messages + - `tf_transformations` - Coordinate frame transformations + - `visualization_msgs` - RViz markers + - `topological_navigation_msgs` - Custom message definitions + - `networkx` - Graph data structures and algorithms + - `scipy` - KD-tree spatial indexing + - `numpy` - Numerical operations + +## Core Concepts + +### 1. Topological Maps + +Topological maps are the fundamental data structure in this system. + +**Structure**: +- **Nodes**: Represent discrete locations (waypoints) with: + - Unique name (string identifier) + - Pose (position + orientation) in a coordinate frame + - Parent frame (typically "map") + - Influence zone (polygon defining the node's spatial extent) + - Flexible properties dictionary (optional) + - List of outgoing edges + +- **Edges**: Represent navigable connections with: + - Target node reference (node name) + - Action name (e.g., "NavigateToPose", "OpenDoor", "RowOperation") + - Action type (ROS 2 message/action type) + - Edge ID (unique identifier) + - Flexible properties dictionary (optional) + +**File Format**: YAML with `.tmap2.yaml` extension + +**Example Node**: +```yaml +nodes: + - meta: + map: vineyard_01 + node: RowEntry_A1 + pointset: vineyard_01 + node: + name: RowEntry_A1 + parent_frame: map + pose: + position: {x: 10.5, y: 5.2, z: 0.0} + orientation: {w: 0.707, x: 0.0, y: 0.0, z: 0.707} + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + semantics: "row_entry" + roboflow: + enabled: true + confidence: 0.7 + edges: + - edge_id: RowEntry_A1_RowEnd_A1 + node: RowEnd_A1 + action: RowOperation + action_type: nav2_msgs/action/NavigateToPose + properties: + max_speed: 0.5 + row_type: "vineyard" +``` + +### 2. Flexible Properties System + +Both nodes and edges support an optional `properties` dictionary for application-specific metadata. + +**Key Features**: +- Completely flexible schema (any key-value pairs) +- Optional - properties can be omitted entirely +- Supports namespacing for organization +- Enables domain-specific customization without schema changes +- Validated against JSON schema for structural correctness + +**Common Property Patterns**: +- **Flat structure**: `{capacity: 2, zone: "A"}` +- **Domain namespaces**: `{restrictions: {capacity: 2}, semantics: {zone: "A"}}` +- **Package namespaces**: `{roboflow: {enabled: true, confidence: 0.7}}` +- **Navigation parameters**: `{xy_goal_tolerance: 0.3, max_speed: 0.8}` + +**Important**: Always access properties defensively: +```python +# Safe property access pattern +props = node["node"].get("properties", {}) +capacity = props.get("capacity", 1) # Default to 1 + +# Nested property access +roboflow_config = props.get("roboflow", {}) +enabled = roboflow_config.get("enabled", False) +``` + +See `topological_navigation/doc/PROPERTIES.md` for comprehensive documentation. + +### 3. Navigation Architecture + +**Key Components**: + +1. **Map Manager** (`scripts/map_manager.py`, `manager2.py`) + - Loads topological maps from YAML files + - Publishes map structure to ROS 2 topics (`/topological_map_2`) + - Handles map updates and modifications + - Validates map structure against JSON schema + - Manages node and edge metadata + +2. **Localisation** (`scripts/localisation2.py`, `networkx_utils.py`) + - Determines robot's current topological node + - Publishes `/current_node`, `/closest_node`, `/closest_node_distance`, `/closest_edges`, `/current_node/tag` + - Supports pose-based and topic-based localization + - Uses influence zones with ray-casting point-in-polygon checks + - Critical for navigation start conditions + - **Refactored with NetworkX and KD-tree** for O(log n) performance + - Uses `networkx_utils.py` module for graph operations and spatial indexing + - 35 unit tests in `test/test_localisation2.py` + - See `doc/LOCALISATION.md` for detailed technical documentation + +3. **Navigation** (`scripts/navigation2.py`) + - Executes topological navigation actions + - Coordinates with metric navigation (Nav2) + - Handles edge action execution via EdgeActionManager + - Implements navigation state machine + - Provides `/topological_navigation` action server + +4. **Route Search** (`route_search2.py`) + - A* based path planning on topological graph + - Finds optimal routes between nodes + - Considers edge properties for path optimization + - Handles node restrictions and blocked edges + - Returns ordered list of nodes and edges to traverse + +5. **Edge Action Manager** (`edge_action_manager2.py`) + - Manages execution of edge-specific actions + - Pluggable action system for custom behaviors + - Handles Nav2 action clients (NavigateToPose, NavigateThroughPoses, etc.) + - Implements row operations for agricultural navigation + - Manages boundary detection and edge side edges + - **Complex module**: 1,363 lines, extensive ROS 2 action handling + +### 4. Key Classes and Their Responsibilities + +#### EdgeActionManager2 (`edge_action_manager2.py`) +- **Purpose**: Execute navigation actions for edges, handle agricultural row operations +- **Key Methods**: + - `execute_action()` - Main action execution entry point + - `navigate_to_pose()` - Send Nav2 NavigateToPose actions + - `navigate_through_poses()` - Send Nav2 NavigateThroughPoses actions + - `handle_row_operations()` - Agricultural row navigation logic + - `get_boundary_nodes()` - Determine entry/exit boundary nodes for rows +- **Important**: Integrates with Nav2 action server, handles goal status callbacks + +#### TopologicalMap (`topological_map.py`) +- **Purpose**: In-memory representation of topological map +- **Key Methods**: + - `load_from_yaml()` - Load map from YAML file + - `get_node()` - Retrieve node by name + - `get_edges_from_node()` - Get all edges from a node + - `get_node_neighbours()` - Get neighbouring nodes + +#### TopologicalRouteSearch2 (`route_search2.py`) +- **Purpose**: A* path planning on topological graph +- **Key Methods**: + - `search_route()` - Find optimal path between nodes + - `get_path_cost()` - Calculate path cost with property-based weighting + - `is_node_blocked()` - Check if node is restricted/blocked + +### 5. NetworkX Refactoring and Spatial Indexing + +The localisation system has been refactored to use NetworkX graph data structures and KD-tree spatial indexing for improved performance and maintainability. + +#### NetworkX Utils Module (`networkx_utils.py`) + +**Purpose**: Provides graph-based data structures and efficient spatial queries for topological localization + +**Key Features**: +- NetworkX DiGraph representation of topological maps +- KD-tree spatial indexing for O(log n) nearest neighbor search +- Point-in-polygon checks using ray-casting algorithm +- Vectorized edge distance calculations +- NetworkX algorithm wrappers for shortest paths and connectivity + +**Core Functions**: + +1. **Graph Construction**: + - `build_graph_from_tmap(tmap_data, logger)` - Convert YAML map to NetworkX DiGraph + - Stores node positions, influence zones, properties as graph attributes + - Stores edge metadata (edge_id, action, action_type, properties) + - Returns `nx.DiGraph` with full topological map structure + +2. **KD-Tree Spatial Indexing**: + - `build_kdtree_from_graph(graph, logger)` - Build KD-tree from node positions + - Returns tuple of `(kdtree, node_names)` for efficient spatial queries + - Construction: O(n log n), Query: O(log n) average case + - Enables fast closest node detection for large maps (1000+ nodes) + +3. **Spatial Queries**: + - `query_nearest_nodes(kdtree, node_names, pose, k)` - Find k-nearest nodes + - Returns list of `{'node': name, 'dist': distance}` sorted by distance + - Used for efficient localization without checking all nodes + +4. **Geometric Operations**: + - `point_in_poly_nx(graph, node_name, pose)` - Check if pose is within influence zone + - Ray-casting algorithm: O(m) where m is polygon vertices + - Transforms pose to node-relative coordinates before checking + - `get_edge_distances_nx(graph, pose, logger)` - Calculate distances to all edges + - Vectorized numpy operations for efficiency + - Returns sorted `(edge_ids, distances)` tuple + +5. **Localization Logic**: + - `determine_current_node(graph, kdtree, node_names, pose, loc_by_topic, nogos)` - Find current node + - Priority 1: Topic-based localization (highest priority) + - Priority 2: Geometric localization using KD-tree + influence zones + - Only checks 3 closest nodes (KD-tree optimization) + - `determine_closest_node(kdtree, node_names, graph, current_node, nogos, names_by_topic, pose)` - Find closest node + - Filters no-go and topic-based nodes + - Returns `(node_name, distance)` tuple + +6. **Topic-Based Localization**: + - `update_loc_by_topic_nx(graph, logger)` - Extract topic-based localization config + - Parses JSON configuration from node attributes + - Sets default values for `localise_anywhere` and `persistency` + - Returns `(nodes_by_topic, names_by_topic)` tuple + +7. **NetworkX Algorithm Wrappers**: + - `compute_shortest_path(graph, source, target, weight, logger)` - Dijkstra's algorithm + - `compute_path_length(graph, source, target, weight, logger)` - Path length only + - `check_connectivity(graph, source, target, logger)` - Path existence check + - `get_neighbors(graph, node, logger)` - Get adjacent nodes + +**Performance Characteristics**: +- KD-tree construction: O(n log n) where n is number of nodes +- KD-tree query: O(log n) average case for nearest neighbor +- Point-in-polygon: O(m) where m is number of polygon vertices +- Edge distance: O(e) where e is number of edges (vectorized) +- Full localization: O(log n + k*m) where k=3 closest nodes + +**Usage Pattern in localisation2.py**: +```python +# Build graph and KD-tree when map is received +self._graph = build_graph_from_tmap(self.tmap, logger=self.get_logger()) +self._kdtree, self._kdtree_node_names = build_kdtree_from_graph(self._graph, logger=self.get_logger()) + +# Update topic-based localization configuration +self.nodes_by_topic, self.names_by_topic = update_loc_by_topic_nx(self._graph, logger=self.get_logger()) + +# During localization (pose_callback) +currentstr = determine_current_node( + self._graph, self._kdtree, self._kdtree_node_names, + msg, self.loc_by_topic, self.nogos +) + +closeststr, closest_dist = determine_closest_node( + self._kdtree, self._kdtree_node_names, self._graph, + currentstr, self.nogos, self.names_by_topic, msg +) + +# Get edge distances +closest_edges, edge_dists = get_edge_distances_nx(self._graph, msg, logger=self.get_logger()) +``` + +**Key Benefits**: +- **Performance**: O(log n) spatial queries vs O(n) linear search +- **Scalability**: Handles 1000+ node maps efficiently +- **Maintainability**: Uses standard NetworkX algorithms instead of custom implementations +- **Testability**: Modular functions with clear interfaces +- **Type Safety**: Comprehensive type hints on all public functions +- **Documentation**: Detailed docstrings with examples and performance notes + +**Dependencies**: +- `networkx` (>=2.5) - Graph data structures and algorithms +- `scipy` (>=1.5) - KD-tree spatial indexing (`scipy.spatial.KDTree`) +- `numpy` (>=1.19) - Numerical operations and vectorization + +**Testing**: +- Unit tests in `test/test_networkx_utils.py` +- Localisation unit tests in `test/test_localisation2.py` (35 tests) +- Performance tests verify O(log n) query times +- Coverage: 80%+ for all networkx_utils functions + +## Development Guidelines + +### Code Style + +**Python**: +- Follow PEP 8 style guide +- Use PEP 257 docstring conventions +- Type hints encouraged for clarity (especially in new code) +- Validated with `ament_flake8` and `ament_pep257` +- Line length: 120 characters (flexible, follow existing file style) + +**C++**: +- Follow ROS 2 C++ style guidelines +- Use modern C++ features (C++14 minimum) +- Follow ROS 2 naming conventions (snake_case for functions/variables) + +**ROS 2 Naming Conventions**: +- Node names: lowercase with underscores (e.g., `topological_navigation`) +- Topic names: lowercase with slashes (e.g., `/topological_map_2`) +- Service/action names: CamelCase (e.g., `NavigateToPose`) + +### Testing + +**Test Structure**: +- `test/` - Unit tests (pytest) +- `tests/` - Integration tests (launch_pytest) +- Test files: `test_*.py` or `*_tester.py` + +**Running Tests**: +```bash +# Run all tests for a package +colcon test --packages-select topological_navigation + +# Run with verbose output +colcon test --packages-select topological_navigation --event-handlers console_direct+ + +# Run specific test +colcon test --packages-select topological_navigation --pytest-args -k test_route_search +``` + +**Writing Tests**: +- Follow existing test patterns in `test/` and `tests/` directories +- Use pytest fixtures for common setup +- Integration tests should use launch_pytest for ROS 2 node lifecycle +- Mock external dependencies (Nav2 action servers, etc.) + +### Building + +```bash +# Build all packages in workspace +cd /path/to/workspace +colcon build + +# Build specific package +colcon build --packages-select topological_navigation + +# Build with symlink install (faster for Python changes) +colcon build --symlink-install + +# Clean build +colcon build --cmake-clean-cache +``` + +**Important**: After building, source the workspace: +```bash +source install/setup.bash +``` + +### Linting + +```bash +# Python linting (flake8) +colcon test --packages-select topological_navigation \ + --event-handlers console_direct+ \ + --pytest-args -k test_flake8 + +# PEP 257 docstring checks +colcon test --packages-select topological_navigation \ + --event-handlers console_direct+ \ + --pytest-args -k test_pep257 + +# Run all linters +colcon test --packages-select topological_navigation \ + --event-handlers console_direct+ +``` + +## Common Tasks for AI Agents + +### Task 1: Add New Property to Topological Maps + +**Goal**: Add a new property to node/edge definitions + +**Steps**: +1. **Update Map Files** (`.tmap2.yaml`): + ```yaml + properties: + my_new_property: value + ``` + +2. **Update Code to Use Property**: + ```python + props = node["node"].get("properties", {}) + my_value = props.get("my_new_property", default_value) + ``` + +3. **Update Documentation**: Add property description to `doc/PROPERTIES.md` + +4. **Consider Schema Update**: If property should be validated, update `config/schema2.json` + +**Key Files**: +- Map YAML files (*.tmap2.yaml) +- `doc/PROPERTIES.md` +- `config/schema2.json` (optional) +- Code files using the property + +### Task 2: Modify Edge Action Behavior + +**Goal**: Change how edges are executed during navigation + +**Key File**: `topological_navigation/edge_action_manager2.py` + +**Common Modifications**: +- Add new action type support +- Modify Nav2 goal parameters +- Add pre/post-action behaviors +- Implement custom action handlers + +**Example Pattern**: +```python +def execute_custom_action(self, edge_data): + """Execute custom edge action""" + # Extract properties + props = edge_data.get("properties", {}) + + # Prepare action goal + goal = CustomAction.Goal() + goal.parameter = props.get("custom_param", default) + + # Send action + self._send_goal(goal) +``` + +**Testing**: Add integration test in `tests/` directory + +### Task 3: Add New ROS 2 Node/Script + +**Goal**: Create a new ROS 2 executable script + +**Steps**: +1. **Create Script**: Add to `topological_navigation/topological_navigation/scripts/` +2. **Add to setup.py**: + ```python + entry_points={ + 'console_scripts': [ + 'my_new_node = topological_navigation.scripts.my_new_node:main', + ], + }, + ``` +3. **Follow ROS 2 Node Pattern**: + ```python + import rclpy + from rclpy.node import Node + + class MyNewNode(Node): + def __init__(self): + super().__init__('my_new_node') + self.get_logger().info('Node started') + + def main(args=None): + rclpy.init(args=args) + node = MyNewNode() + rclpy.spin(node) + node.destroy_node() + rclpy.shutdown() + ``` + +4. **Add Launch File** (optional): `launch/my_new_node.launch.py` +5. **Add Test**: `test/test_my_new_node.py` + +### Task 4: Fix Navigation Issues + +**Common Issues**: + +1. **Robot not localising correctly**: + - Check `localisation2.py` - verify influence zone configuration + - Check `/closest_node` topic - is closest node being published? + - Verify robot pose is being published to correct topic + +2. **Edge action not executing**: + - Check `edge_action_manager2.py` - verify action client is connected + - Check Nav2 action server is running + - Verify edge action type matches available action servers + - Check edge properties for correct action parameters + +3. **Route planning fails**: + - Check `route_search2.py` - verify graph connectivity + - Check for blocked/restricted nodes + - Verify source and target nodes exist in map + +**Debugging Tools**: +- `/topological_map_2` topic - view current map +- `/current_node` topic - view current localisation +- `/topological_navigation/feedback` - view navigation progress +- RViz markers - visualise topological map + +### Task 5: Update Map Schema + +**Goal**: Modify the structure of topological maps + +**Key File**: `config/schema2.json` + +**Steps**: +1. Update JSON schema with new fields +2. Update map loader (`load_maps_from_yaml.py`) +3. Update map validation logic +4. Update example maps in `tests/` directory +5. Update documentation (`doc/PROPERTIES.md`) +6. Run validation tests to ensure backward compatibility + +## Important Patterns + +### Pattern 1: Safe Property Access + +Always use defensive property access to avoid KeyErrors: + +```python +# Node properties +node_data = topological_map.get_node("node_name") +props = node_data["node"].get("properties", {}) +tolerance = props.get("xy_goal_tolerance", 0.5) # Default 0.5 + +# Nested properties +roboflow = props.get("roboflow", {}) +enabled = roboflow.get("enabled", False) + +# Check existence before use +if "custom_behavior" in props: + behavior = props["custom_behavior"] +else: + behavior = default_behavior +``` + +### Pattern 2: ROS 2 Action Client Usage + +Follow the pattern in `edge_action_manager2.py`: + +```python +from rclpy.action import ActionClient +from nav2_msgs.action import NavigateToPose + +class MyActionHandler: + def __init__(self, node): + self._nav_client = ActionClient( + node, + NavigateToPose, + '/navigate_to_pose' + ) + + def send_goal(self, pose): + # Wait for action server + self._nav_client.wait_for_server() + + # Prepare goal + goal_msg = NavigateToPose.Goal() + goal_msg.pose = pose + + # Send goal with feedback/result callbacks + send_goal_future = self._nav_client.send_goal_async( + goal_msg, + feedback_callback=self.feedback_callback + ) + send_goal_future.add_done_callback(self.goal_response_callback) +``` + +### Pattern 3: Map Loading and Validation + +```python +from topological_navigation.topological_map import TopologicalMap +from topological_navigation.load_maps_from_yaml import load_map_from_yaml + +# Load map +map_data = load_map_from_yaml("path/to/map.tmap2.yaml") + +# Create TopologicalMap object +topo_map = TopologicalMap() +topo_map.load_from_dict(map_data) + +# Access nodes +node = topo_map.get_node("node_name") +edges = topo_map.get_edges_from_node("node_name") +``` + +### Pattern 4: ROS 2 Parameter Handling + +```python +from rcl_interfaces.msg import ParameterDescriptor + +class MyNode(Node): + def __init__(self): + super().__init__('my_node') + + # Declare parameters with defaults + self.declare_parameter( + 'map_file', + '', + ParameterDescriptor(description='Path to topological map YAML') + ) + + # Get parameter value + map_file = self.get_parameter('map_file').value +``` + +### Pattern 5: NetworkX Graph and KD-Tree Usage + +Follow the pattern in `localisation2.py` for efficient spatial queries: + +```python +from topological_navigation.networkx_utils import ( + build_graph_from_tmap, + build_kdtree_from_graph, + query_nearest_nodes, + point_in_poly_nx, + get_edge_distances_nx, + determine_current_node, + determine_closest_node +) + +class MyLocalisationNode(Node): + def __init__(self): + super().__init__('my_localisation') + + # Initialize data structures + self._graph = None + self._kdtree = None + self._kdtree_node_names = [] + + def map_callback(self, msg): + # Build NetworkX graph from topological map + self._graph = build_graph_from_tmap( + self.tmap, + logger=self.get_logger() + ) + + if self._graph is None: + self.get_logger().error("Failed to build graph") + return + + # Build KD-tree for O(log n) spatial queries + self._kdtree, self._kdtree_node_names = build_kdtree_from_graph( + self._graph, + logger=self.get_logger() + ) + + if self._kdtree is None: + self.get_logger().error("Failed to build KD-tree") + return + + def localize(self, pose): + # Determine current node (within influence zone) + current_node = determine_current_node( + self._graph, + self._kdtree, + self._kdtree_node_names, + pose, + self.loc_by_topic, # Topic-based localization list + self.nogos # No-go nodes list + ) + + # Determine closest node by distance + closest_node, distance = determine_closest_node( + self._kdtree, + self._kdtree_node_names, + self._graph, + current_node, + self.nogos, + self.names_by_topic, + pose + ) + + # Get distances to edges + edge_ids, distances = get_edge_distances_nx( + self._graph, + pose, + logger=self.get_logger() + ) + + return current_node, closest_node, distance + + def check_influence_zone(self, node_name, pose): + # Check if pose is within node's influence zone + is_inside = point_in_poly_nx(self._graph, node_name, pose) + return is_inside + + def find_nearest_nodes(self, pose, k=3): + # Find k nearest nodes efficiently + nearest = query_nearest_nodes( + self._kdtree, + self._kdtree_node_names, + pose, + k=k + ) + # Returns: [{'node': 'WP1', 'dist': 2.5}, ...] + return nearest +``` + +**Key Points**: +- Build graph and KD-tree once when map is received +- Reuse KD-tree for multiple queries (O(log n) performance) +- Always check for None before using graph/KD-tree +- Use logger parameter for consistent error reporting +- KD-tree queries return sorted results by distance + +## Common Pitfalls + +### Pitfall 1: Property Access Without Defaults +**Wrong**: +```python +tolerance = node["node"]["properties"]["xy_goal_tolerance"] # KeyError if missing! +``` + +**Right**: +```python +props = node["node"].get("properties", {}) +tolerance = props.get("xy_goal_tolerance", 0.5) +``` + +### Pitfall 2: Not Checking Action Server Availability +**Wrong**: +```python +self._nav_client.send_goal_async(goal) # May fail silently +``` + +**Right**: +```python +if not self._nav_client.wait_for_server(timeout_sec=5.0): + self.get_logger().error("Nav2 action server not available") + return False +self._nav_client.send_goal_async(goal) +``` + +### Pitfall 3: Hardcoding Frame IDs +**Wrong**: +```python +pose.header.frame_id = "map" # May not match robot's frame +``` + +**Right**: +```python +pose.header.frame_id = node_data["node"]["parent_frame"] +``` + +### Pitfall 4: Ignoring ROS 2 Callback Groups +For concurrent operations in ROS 2, use appropriate callback groups: + +```python +from rclpy.callback_groups import MutuallyExclusiveCallbackGroup, ReentrantCallbackGroup + +# For actions that shouldn't block each other +self.callback_group = ReentrantCallbackGroup() +self._nav_client = ActionClient( + self, + NavigateToPose, + '/navigate_to_pose', + callback_group=self.callback_group +) +``` + +### Pitfall 5: Not Rebuilding KD-Tree After Map Updates +**Wrong**: +```python +def map_callback(self, msg): + self._graph = build_graph_from_tmap(self.tmap) + # Forgot to rebuild KD-tree! Old KD-tree has stale data +``` + +**Right**: +```python +def map_callback(self, msg): + # Always rebuild both graph AND KD-tree together + self._graph = build_graph_from_tmap(self.tmap, logger=self.get_logger()) + self._kdtree, self._kdtree_node_names = build_kdtree_from_graph( + self._graph, + logger=self.get_logger() + ) +``` + +### Pitfall 6: Using Linear Search Instead of KD-Tree +**Wrong**: +```python +# O(n) linear search through all nodes +min_dist = float('inf') +closest_node = None +for node_name in all_nodes: + dist = calculate_distance(pose, node_name) + if dist < min_dist: + min_dist = dist + closest_node = node_name +``` + +**Right**: +```python +# O(log n) KD-tree query +nearest = query_nearest_nodes(self._kdtree, self._kdtree_node_names, pose, k=1) +if nearest: + closest_node = nearest[0]['node'] + min_dist = nearest[0]['dist'] +``` + +## Key Files Reference + +### Core Navigation Files +- `scripts/navigation2.py` - Main navigation action server (topological navigation entry point) +- `edge_action_manager2.py` - Edge action execution (complex, 1363 lines) +- `route_search2.py` - A* path planning algorithm +- `scripts/localisation2.py` - Topological localisation node (refactored with NetworkX) +- `scripts/map_manager.py` - Map loading and publishing node +- `networkx_utils.py` - NetworkX graph and KD-tree utilities (NEW) + +### Map Data Structures +- `topological_map.py` - In-memory map representation +- `load_maps_from_yaml.py` - YAML map loader +- `manager2.py` - Map management core logic + +### Utility Classes +- `networkx_utils.py` - NetworkX graph operations and spatial indexing (NEW) +- `dict_tools` (in edge_action_manager2.py) - Nested dictionary operations +- `tmap_utils.py` - Map manipulation utilities +- `route_search.py` - Legacy route search (v1) + +### Configuration and Validation +- `config/schema2.json` - JSON schema for map validation +- `doc/PROPERTIES.md` - Properties system documentation + +### Documentation +- `doc/LOCALISATION.md` - Topological localisation technical documentation +- `doc/MANAGER2_DOCUMENTATION.md` - Map manager technical documentation +- `doc/PROPERTIES.md` - Properties system guide +- `doc/FLUID_NAVIGATION.md` - Fluid navigation guide +- `doc/WEB_APP.md` - Browser web app (`topological_navigation_visual/scripts/topological_web_app.py`, port 8083) + +### Testing +- `test/test_localisation2.py` - Localisation unit tests (35 tests) +- `test/test_networkx_utils.py` - NetworkX utilities unit tests +- `test/test_navigationcore.py` - Navigation core tests +- `tests/topological_navigation_tester_critical.py` - Critical integration tests +- `tests/map_manager_tester.py` - Map manager tests + +## Agricultural Navigation Specifics + +### Row Operations +The system includes specialized support for agricultural row navigation: + +**Key Features**: +- Boundary node detection for row entry/exit +- Side edge support for parallel row paths +- Roboflow integration for vision-based row detection +- Configurable row operation parameters + +**Usage Pattern**: +```yaml +edges: + - edge_id: entry_to_exit + node: row_exit + action: RowOperation + action_type: nav2_msgs/action/NavigateToPose + properties: + row_type: "vineyard" + roboflow: + enabled: true + confidence: 0.7 + max_speed: 0.5 +``` + +**Implementation**: See `edge_action_manager2.py` → `RowOperations` class integration + +### Boundary Detection +- `get_boundary_nodes()` in EdgeActionManager2 +- Uses side_edges property to identify parallel paths +- Determines optimal entry/exit points for row operations + +## Dependencies and External Systems + +### ROS 2 Navigation Stack (Nav2) +- **Actions Used**: + - `NavigateToPose` - Navigate to single goal + - `NavigateThroughPoses` - Navigate through waypoints + - `FollowWaypoints` - Follow ordered waypoint list + - `ComputePathToPose` - Path planning only + - `ComputePathThroughPoses` - Multi-goal path planning + +- **Integration Point**: `edge_action_manager2.py` +- **Assumption**: Nav2 action servers are running and accessible + +### Coordinate Frame Requirements +- **Base Frame**: Robot's base link (typically `base_link`) +- **Map Frame**: Global reference frame (typically `map`) +- **TF Tree**: Must have valid transforms between frames +- **Node Poses**: Defined in parent_frame (usually `map`) + +### Message Dependencies +- `geometry_msgs` - Pose, PoseStamped, Point, Quaternion +- `nav_msgs` - Odometry, Path +- `std_msgs` - Header, String +- `sensor_msgs` - Various sensor data +- `visualization_msgs` - Marker, MarkerArray (for RViz) + +## Debugging and Troubleshooting + +### Common ROS 2 Commands + +```bash +# List all nodes +ros2 node list + +# View node info +ros2 node info /topological_navigation + +# List topics +ros2 topic list + +# View topic data +ros2 topic echo /topological_map_2 +ros2 topic echo /current_node + +# Check action servers +ros2 action list + +# Send test action goal +ros2 action send_goal /topological_navigation \ + topological_navigation_msgs/action/GotoNode \ + "{target: 'node_name'}" + +# View logs +ros2 run rqt_console rqt_console +``` + +### Log Analysis +- **Info logs**: Normal operation, navigation progress +- **Warn logs**: Recoverable issues, fallback behaviors +- **Error logs**: Action failures, missing data, connectivity issues + +### RViz Visualization +Launch RViz to visualize topological map: +```bash +ros2 launch topological_rviz_tools topological_rviz.launch.py +``` + +**Markers**: +- Red spheres: Nodes +- Green arrows: Edges +- Blue lines: Planned route +- Yellow highlight: Current node + +## CI/CD and Quality Assurance + +### GitHub Actions Workflows +- YAML schema validation +- Python linting (flake8, pep257) +- Unit and integration tests +- Build verification + +### Pre-commit Checks +Before committing, run: +```bash +# Lint +colcon test --packages-select topological_navigation \ + --pytest-args -k "flake8 or pep257" + +# Unit tests +colcon test --packages-select topological_navigation +``` + +## Additional Resources + +### Documentation +- `README.md` - Package overview +- `doc/PROPERTIES.md` - Properties system detailed guide +- `.github/copilot-instructions.md` - GitHub Copilot specific guidance +- `REVIEW.md` - Code review guidelines + +### Example Maps +- `tests/` directory contains example topological maps +- Look for `.tmap2.yaml` files + +### External Links +- ROS 2 Documentation: https://docs.ros.org/ +- Nav2 Documentation: https://navigation.ros.org/ +- ROS 2 Action Documentation: https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Actions/Understanding-ROS2-Actions.html + +## Getting Help + +### Internal Resources +1. Check existing code patterns in similar files +2. Read test files for usage examples +3. Review commit history for recent changes: `git log --oneline` + +### External Resources +1. ROS 2 Discourse: https://discourse.ros.org/ +2. Nav2 GitHub Issues: https://github.com/ros-planning/navigation2/issues +3. ROS Answers: https://answers.ros.org/ + +## Agent-Specific Guidelines + +### When Analyzing This Codebase +1. **Start with map structure**: Understand topological maps first +2. **Follow data flow**: Map → Route Search → Navigation → Edge Actions +3. **Check properties**: Always verify what properties are available/required +4. **Test incrementally**: Small changes, test frequently +5. **Respect ROS 2 patterns**: Use established action/topic/service patterns + +### When Making Changes +1. **Preserve backward compatibility**: Especially for map formats +2. **Add tests**: Every new feature needs tests +3. **Update documentation**: Keep AGENTS.md, PROPERTIES.md, README.md in sync +4. **Follow existing patterns**: Don't introduce new patterns without discussion +5. **Consider agricultural use cases**: Changes impact real-world robot operations + +### When Creating Documentation +1. **Location**: Place all new documentation files in the `doc/` folder +2. **Track documentation**: Maintain a list of documentation files when creating new ones +3. **Keep synchronized**: When updating script or function functionalities: + - Update corresponding documentation in `doc/` folder + - Update references in AGENTS.md, README.md, and other relevant docs + - Ensure examples and code snippets reflect current implementation +4. **Naming convention**: Use descriptive names (e.g., `EDGE_ACTIONS.md`, `ROUTING_ALGORITHM.md`) +5. **Cross-reference**: Link related documentation files for easy navigation +6. **Version updates**: Update the "Last Updated" date at the bottom of modified documentation + +### When Debugging +1. **Start with logs**: Check ROS 2 logs for errors/warnings +2. **Verify map structure**: Ensure YAML maps are valid +3. **Check action servers**: Ensure Nav2 is running +4. **Use RViz**: Visualize to understand spatial relationships +5. **Isolate components**: Test map loading, routing, actions separately + +--- + +**Last Updated**: 2026-02-15 +**Branch**: agent_prep +**Maintainer**: AI Coding Agents diff --git a/README.md b/README.md index 8afd62fe..4332ac52 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,883 @@ -# topological_navigation +# Topological Navigation -A topological navigation planning framework +A ROS 2 framework for **graph-based topological navigation** of autonomous mobile robots. Unlike traditional metric navigation that operates in continuous coordinate space, topological navigation represents the environment as a graph of discrete **nodes** (waypoints) connected by **edges** (traversable paths), enabling high-level route planning, named-location navigation, and pluggable edge actions (e.g., Nav2 goals, row traversal, door opening). + +Originally developed for the [STRANDS](https://strands-project.eu/) long-term autonomy project, this framework is actively used in agricultural robotics for autonomous navigation in vineyards, orchards, and crop rows. + +> **ROS 2 Only** — version 4.0.0+ is ROS 2 exclusive (Humble / Iron). For ROS 1 support use version 3.x or earlier. + +--- + +## Table of Contents + +- [Topological Navigation](#topological-navigation) + - [Table of Contents](#table-of-contents) + - [Architecture Overview](#architecture-overview) + - [Packages](#packages) + - [topological\_navigation (Core)](#topological_navigation-core) + - [topological\_navigation\_msgs](#topological_navigation_msgs) + - [topological\_navigation\_visual](#topological_navigation_visual) + - [topological\_nav\_simulator](#topological_nav_simulator) + - [Installation](#installation) + - [Prerequisites](#prerequisites) + - [Build from Source](#build-from-source) + - [Python Dependencies](#python-dependencies) + - [Running the CLI Tools Without ROS 2](#running-the-cli-tools-without-ros-2) + - [Launching the System](#launching-the-system) + - [Full Stack (with Simulator)](#full-stack-with-simulator) + - [Standalone Simulator](#standalone-simulator) + - [Visualiser Only](#visualiser-only) + - [Web App](#web-app) + - [On a Real Robot](#on-a-real-robot) + - [Sending Navigation Goals](#sending-navigation-goals) + - [ROS 2 Node Parameters](#ros-2-node-parameters) + - [topological\_navigation (navigation2.py)](#topological_navigation-navigation2py) + - [topological\_localisation (localisation2.py)](#topological_localisation-localisation2py) + - [topological\_map\_manager\_2 (map\_manager2.py)](#topological_map_manager_2-map_manager2py) + - [manual\_tmapping\_node (manual\_topomapping.py)](#manual_tmapping_node-manual_topomappingpy) + - [map\_recorder (map\_recorder.py)](#map_recorder-map_recorderpy) + - [topological\_map\_visualiser (topological\_map\_visualiser.py)](#topological_map_visualiser-topological_map_visualiserpy) + - [route\_visualiser / occupancy\_visualiser (topological\_visual.py)](#route_visualiser--occupancy_visualiser-topological_visualpy) + - [topological\_web\_app (topological\_web\_app.py)](#topological_web_app-topological_web_apppy) + - [fake\_nav2\_server (fake\_nav2\_server.py — simulator)](#fake_nav2_server-fake_nav2_serverpy--simulator) + - [ROS 2 Topics](#ros-2-topics) + - [Published Topics](#published-topics) + - [Subscribed Topics](#subscribed-topics) + - [TF Broadcasts](#tf-broadcasts) + - [ROS 2 Services](#ros-2-services) + - [ROS 2 Actions](#ros-2-actions) + - [Action Servers](#action-servers) + - [Action Clients](#action-clients) + - [TF Frames](#tf-frames) + - [Custom Message, Service \& Action Definitions](#custom-message-service--action-definitions) + - [Messages (.msg)](#messages-msg) + - [Services (.srv)](#services-srv) + - [Actions (.action)](#actions-action) + - [Topological Map Format](#topological-map-format) + - [Flexible Properties System](#flexible-properties-system) + - [Recording Maps](#recording-maps) + - [Map Validation](#map-validation) + - [Command-Line Utilities](#command-line-utilities) + - [Testing](#testing) + - [Contributing](#contributing) + - [License](#license) + +--- + +## Architecture Overview + +``` +┌──────────────────────────────────────────────────────────────────────┐ +│ Topological Navigation Stack │ +│ │ +│ ┌────────────────┐ ┌──────────────────┐ ┌───────────────────┐ │ +│ │ Map Manager │──▶│ Localisation │──▶│ Navigation │ │ +│ │ (map_manager2)│ │ (localisation2) │ │ (navigation2) │ │ +│ │ │ │ │ │ │ │ +│ │ Loads YAML map │ │ Determines │ │ A* route planning │ │ +│ │ Publishes to │ │ current/closest │ │ Edge action exec │ │ +│ │ /topological_ │ │ node via KD-tree │ │ GotoNode action │ │ +│ │ map_2 topic │ │ + influence zones │ │ server │ │ +│ └────────────────┘ └──────────────────┘ └────────┬──────────┘ │ +│ │ │ +│ ▼ │ +│ ┌───────────────────┐ │ +│ │ Nav2 Stack │ │ +│ │ (or Simulator) │ │ +│ │ NavigateToPose │ │ +│ │ NavigateThrough │ │ +│ │ FollowWaypoints │ │ +│ └───────────────────┘ │ +│ │ +│ ┌────────────────────┐ ┌──────────────────────────────────────┐ │ +│ │ Map Visualiser │ │ Fake Nav2 Simulator │ │ +│ │ (visual package) │ │ (simulator package) │ │ +│ │ RViz markers + │ │ Virtual robot + fake action servers │ │ +│ │ interactive edit │ │ for testing without real hardware │ │ +│ └────────────────────┘ └──────────────────────────────────────┘ │ +└──────────────────────────────────────────────────────────────────────┘ +``` + +**Data Flow:** +1. **Map Manager** loads a `.tmap2.yaml` file and publishes it as a JSON string on `/topological_map_2` +2. **Localisation** subscribes to the map, builds a NetworkX graph with KD-tree spatial indexing, and continuously publishes which node the robot is at (`/current_node`, `/closest_node`) +3. **Navigation** receives `GotoNode` action goals, computes A\* routes, and executes edge actions by calling Nav2 action servers +4. **Visualiser** renders the topological map as interactive RViz markers for viewing and editing + +--- + +## Packages + +### topological_navigation (Core) + +| | | +|---|---| +| **Type** | `ament_python` | +| **Version** | 5.0.0 | +| **Purpose** | Core navigation stack: map management, localisation, route planning, navigation execution | + +**Key modules:** + +| Module | Description | +|--------|-------------| +| `scripts/navigation2.py` | Main navigation action server — receives `GotoNode` goals, plans routes (A\*), and executes edge actions via Nav2 | +| `scripts/localisation2.py` | Topological localisation — determines current/closest node using KD-tree + influence zone checks | +| `scripts/map_manager2.py` | Loads `.tmap2.yaml` maps, validates them against JSON schema, publishes to ROS topics | +| `scripts/manual_topomapping.py` | Joystick-driven waypoint recording for field mapping | +| `scripts/map_recorder.py` | ROS 2 action-driven topological map recorder with loop closure, latched `/recorded_tmap` preview, and load/save services | +| `map_recorder_utils.py` | Pure-Python map-building core used by `map_recorder.py` (node/edge creation, loop closure, bidirectional edges) | +| `networkx_utils.py` | NetworkX graph construction, KD-tree spatial indexing, point-in-polygon, edge distance calculations | +| `navigation_graph.py` | Navigation state machine, route planning, segment merging | +| `tmap_utils.py` | YAML map loading utilities | +| `validate_map.py` | CLI tool for topological map validation against schema | +| `convert_tmap.py` | Convert between topological map format versions | +| `map_analyser.py` | Standalone CLI (`analyse`/`check`/`svg`/`minify`/`merge`) for analysing, validating, rendering, minifying, and merging topological maps — runs without ROS 2 | +| `map_merger.py` | Core logic for merging multiple topological maps into one schema-valid map, with GPS-based reprojection and name deduplication (used by `map_analyser.py merge`) | + +### topological_navigation_msgs + +| | | +|---|---| +| **Type** | `ament_cmake` | +| **Version** | 3.0.5 | +| **Purpose** | ROS 2 message, service, and action interface definitions | + +Defines 16 message types, 9 service types, and 3 action types used across the navigation stack. See [Custom Message, Service & Action Definitions](#custom-message-service--action-definitions) below for full details. + +### topological_navigation_visual + +| | | +|---|---| +| **Type** | `ament_python` | +| **Version** | 1.0.0 | +| **Purpose** | RViz visualisation, interactive map editing and a browser-based web app | + +**Key executables:** + +| Executable | Description | +|-----------|-------------| +| `topological_map_visualiser.py` | Unified visualiser + interactive drag-and-drop editor for topological maps in RViz | +| `topological_visual.py` | Route and occupied-node visualisation | +| `topological_web_app.py` | Web app (port 8083) showing the map, live robot position/speed, goals and route; click a node to send the robot there (see [doc/WEB_APP.md](topological_navigation/doc/WEB_APP.md)) | +| `policy_marker.py` | Policy arrow visualisation for MDP planning | + +### topological_nav_simulator + +| | | +|---|---| +| **Type** | `ament_python` | +| **Version** | 1.0.0 | +| **Purpose** | Fake Nav2 action servers with a virtual robot for testing without real hardware | + +Provides `NavigateToPose`, `NavigateThroughPoses`, and `FollowWaypoints` action servers that simulate robot movement, publishing TF transforms, odometry, and RViz markers. The simulated robot smoothly interpolates toward goal poses at a configurable speed. + +--- + +## Installation + +### Prerequisites + +- **ROS 2** Humble or Iron +- **Python 3.8+** +- **Nav2** (for real robot deployment; the simulator replaces it for testing) + +### Build from Source + +```bash +# Create workspace +mkdir -p ~/ws/src && cd ~/ws/src +git clone https://github.com/LCAS/topological_navigation.git + +# Install dependencies +cd ~/ws +rosdep install --from-paths src --ignore-src -r -y + +# Build +colcon build --symlink-install + +# Source +source install/setup.bash +``` + +### Python Dependencies + +| Package | Min Version | Purpose | +|---------|------------|---------| +| `networkx` | 2.5 | Graph data structures and algorithms | +| `scipy` | 1.5 | KD-tree spatial indexing | +| `numpy` | 1.19 | Numerical operations | +| `jsonschema` | — | Map schema validation | +| `pyproj` | — | Geodetic (lat/long) to local ENU projection, used by `map_analyser.py merge` | + +All pure-Python dependencies are also listed in [requirements.txt](requirements.txt) at the repository root. + +### Running the CLI Tools Without ROS 2 + +The map inspection/validation/merge tools (`map_analyser.py`, `map_merger.py`, +`validate_map.py`, `convert_tmap.py`) have no ROS 2 runtime dependency — they +only need the pure-Python packages above, so they can be run standalone (e.g. +in a CI pipeline or a plain `venv`) without building or sourcing a ROS 2 +workspace: + +```bash +# From the repository root +python3 -m venv .venv +source .venv/bin/activate +pip install -r requirements.txt + +# Run map_analyser.py directly +python3 topological_navigation/topological_navigation/map_analyser.py analyse my_map.tmap2.yaml +python3 topological_navigation/topological_navigation/map_analyser.py check my_map.tmap2.yaml +python3 topological_navigation/topological_navigation/map_analyser.py merge map_a.tmap2.yaml map_b.tmap2.yaml -o merged.tmap2.yaml +``` + +See [doc/MAP_ANALYSER.md](topological_navigation/doc/MAP_ANALYSER.md) for the full command reference. When ROS 2 **is** sourced, the same tool is also available as `ros2 run topological_navigation map_analyser.py ...`. + +--- + +## Launching the System + +### Full Stack (with Simulator) + +Launch the complete topological navigation system with a virtual robot (no real hardware needed): + +```bash +ros2 launch topological_navigation topological_navigation.launch.py +``` + +Launch event handlers start processes when the preceding process starts; +they do not wait for ROS interfaces or other prerequisites to be ready. +Localisation and the fake Nav2 server start in parallel: + +| Launch trigger | Node | Description | +|---------------|------|-------------| +| Initially | `topological_map_manager_2` | Loads and publishes the topological map | +| After map manager process starts | `topological_localisation` | Starts localisation | +| After map manager process starts | `fake_nav2_server` | Virtual robot + fake Nav2 action servers | +| After localisation process starts | `topological_navigation` | Navigation action server | +| After navigation process starts | `topological_map_visualiser` | Interactive RViz map editor | +| After visualiser process starts | `topological_web_app` | Web app on http://localhost:8083/ (if `web_app:=true`) | +| After visualiser process starts | `rviz2` | RViz with pre-configured display layout | + +**Launch arguments:** + +| Argument | Default | Description | +|----------|---------|-------------| +| `map_path` | `/config/riseholme.tmap3.yaml` | Absolute path to a `.tmap2.yaml` or `.tmap3.yaml` topological map | +| `rviz_config` | `/rviz/topological_navigation.rviz` | Path to the RViz config file | +| `rviz` | `true` | Launch RViz (`true`/`false`) | +| `fake_nav2` | `true` | Launch the fake Nav2 simulator server (`true`/`false`) | +| `robot_speed` | `1.5` | Simulated robot linear speed (m/s) | +| `angular_speed` | `4.0` | Simulated robot angular speed (rad/s) | +| `goal_tolerance` | `0.15` | Distance tolerance for reaching goals (m) | +| `update_rate` | `30.0` | TF and marker publish rate (Hz) | +| `web_app` | `true` | Launch the topological navigation web app (`true`/`false`) | +| `web_app_port` | `8083` | HTTP port of the web app | +| `initial_x` | `0.0` | Initial robot X position (metres) | +| `initial_y` | `0.0` | Initial robot Y position (metres) | +| `initial_yaw` | `0.0` | Initial robot yaw (radians) | +| `map_frame` | `map` | Map TF frame | +| `odom_frame` | `odom` | Odometry TF frame | +| `base_frame` | `base_link` | Robot base TF frame | + +**Example with a custom map:** + +```bash +ros2 launch topological_navigation topological_navigation.launch.py \ + map_path:=/path/to/my_map.tmap2.yaml \ + initial_x:=5.0 initial_y:=3.0 +``` + +**Example configuring the simulated robot speed:** + +```bash +ros2 launch topological_navigation topological_navigation.launch.py \ + robot_speed:=1.2 angular_speed:=2.0 +``` + +### Standalone Simulator + +Launch only the fake Nav2 server (useful when developing against a simulated robot): + +```bash +ros2 launch topological_nav_simulator fake_nav2.launch.py +``` + +**Launch arguments:** + +| Argument | Default | Description | +|----------|---------|-------------| +| `robot_speed` | `0.8` | Simulated linear speed (m/s) | +| `angular_speed` | `1.5` | Simulated angular speed (rad/s) | +| `goal_tolerance` | `0.15` | Goal position tolerance (m) | +| `update_rate` | `30.0` | TF/marker publish rate (Hz) | +| `initial_x` | `0.0` | Initial robot X position | +| `initial_y` | `0.0` | Initial robot Y position | +| `initial_yaw` | `0.0` | Initial robot yaw (rad) | +| `map_frame` | `map` | Map TF frame | +| `odom_frame` | `odom` | Odometry TF frame | +| `base_frame` | `base_link` | Robot base TF frame | + +### Visualiser Only + +Launch the topological map visualiser standalone: + +```bash +ros2 launch topological_navigation_visual topological_map_visualiser.launch.py \ + map_file:=/path/to/map.tmap2.yaml edit_mode:=true +``` + +**Launch arguments:** + +| Argument | Default | Description | +|----------|---------|-------------| +| `map_file` | `''` | Path to `.tmap2.yaml` file (empty = subscribe to topic) | +| `auto_save` | `false` | Auto-save changes every 30 seconds | +| `marker_scale` | `0.5` | Base scale factor for RViz markers | +| `edit_mode` | `true` | Enable interactive drag-and-drop editing | +| `nav_action_name` | `/topological_navigation` | GotoNode action name for click-to-navigate | +| `show_node_labels` | `true` | Render per-node text labels (disable for large maps) | +| `show_zones` | `true` | Render node influence-zone polygons | +| `show_edges` | `true` | Render edges between nodes | +| `auto_marker_scale` | `false` | Derive `marker_scale` automatically from map spread | +| `interactive_marker_limit` | `750` | Max node count for editable markers; above this the map is shown read-only | + +> **Large maps & responsiveness.** The visualiser batches markers — all +> nodes into one `SPHERE_LIST`, all influence zones into one `LINE_LIST`, +> and edges into one `LINE_LIST` per action colour — so even maps with +> thousands of nodes/edges produce only a handful of RViz markers. For very +> large maps, set `show_node_labels:=false` (text is the most expensive RViz +> primitive) and/or raise `interactive_marker_limit` only if you really need +> per-node dragging. Enable `auto_marker_scale:=true` to size markers +> automatically from the map extent. +> +> All of these parameters (except `map_file` / `nav_action_name`) can be +> changed at **runtime** with `ros2 param set`, e.g.: +> +> ```bash +> ros2 param set /topological_map_visualiser show_node_labels false +> ros2 param set /topological_map_visualiser marker_scale 1.5 +> ros2 param set /topological_map_visualiser auto_marker_scale true +> ``` + +### Web App + +A browser-based UI (React + cytoscape.js, all assets bundled so it works +offline) is served on a single port, by default **8083**: + +```bash +ros2 run topological_navigation_visual topological_web_app.py +# open http://:8083/ +``` + +It shows the topological map as a zoomable/pannable graph (roboflow-enabled +nodes in a different colour, node name and properties on hover), the robot's +current node, metric position and speed, the current destination and goal +with a **Cancel goal** button, and highlights the planned route while the +robot moves. Clicking a node sends the robot there. All state lives in the +backend and is pushed to every browser, so all open clients stay in sync. All +URLs are relative, so it can also be served under a URL prefix behind a +reverse proxy. See [doc/WEB_APP.md](topological_navigation/doc/WEB_APP.md). + +### On a Real Robot + +When using a real robot with Nav2, launch the navigation stack without the simulator: + +```bash +# 1. Start Nav2 (robot-specific) +ros2 launch navigation.launch.py + +# 2. Start the map manager +ros2 run topological_navigation map_manager2.py /path/to/map.tmap2.yaml + +# 3. Start localisation +ros2 run topological_navigation localisation2.py + +# 4. Start topological navigation +ros2 run topological_navigation navigation2.py + +# 5. (Optional) Start visualiser +ros2 run topological_navigation_visual topological_map_visualiser.py + +# 6. (Optional) Start the web app on http://:8083/ +ros2 run topological_navigation_visual topological_web_app.py \ + --ros-args -p odom_topic:=/odom +``` + +### Sending Navigation Goals + +Once the system is running, send a robot to a named node: + +```bash +# Navigate to a node called "node3" +ros2 action send_goal /topological_navigation \ + topological_navigation_msgs/action/GotoNode \ + "{target: 'node3', no_orientation: false}" +``` + +--- + +## ROS 2 Node Parameters + +### topological_navigation (navigation2.py) + +| Parameter | Type | Default | Description | +|-----------|------|---------|-------------| +| `max_dist_to_closest_edge` | double | `1.0` | Maximum distance (m) to consider an edge as valid origin for navigation | +| `default_boundary_left` | double | `0.5` | Default left boundary offset for row corridor polygons | +| `default_boundary_right` | double | `0.5` | Default right boundary offset for row corridor polygons | +| `route_algorithm` | string | `"astar"` | Path planning algorithm: `"astar"` or `"dijkstra"` | +| `route_weight_attr` | string | `"weight"` | Edge attribute used as cost for path planning | + +> All five parameters above are **dynamically reconfigurable** — change them +> at runtime with `ros2 param set` and the new value is used on the next +> planned route (no restart needed). Invalid values (e.g. an unknown +> `route_algorithm`) are rejected. Example: +> +> ```bash +> ros2 param set /topological_navigation route_algorithm dijkstra +> ros2 param set /topological_navigation max_dist_to_closest_edge 2.0 +> ``` + +### topological_localisation (localisation2.py) + +| Parameter | Type | Default | Description | +|-----------|------|---------|-------------| +| `LocalisationThrottle` | int | `1` | Process every Nth pose callback (throttle rate) | +| `OnlyLatched` | bool | `true` | Only publish when values actually change | +| `base_frame` | string | `"base_link"` | Robot base TF frame for localisation lookups | + +### topological_map_manager_2 (map_manager2.py) + +| Parameter | Type | Default | Description | +|-----------|------|---------|-------------| +| `cache_topological_maps` | bool | `false` | Cache maps locally to `~/.ros/topological_maps` | +| `auto_write_topological_maps` | bool | `false` | Automatically save map on any modification | +| `topological_map2_name` | string | `""` | Current map name identifier | +| `topological_map2_path` | string | `""` | Filesystem path where maps are stored | + +### manual_tmapping_node (manual_topomapping.py) + +| Parameter | Type | Default | Description | +|-----------|------|---------|-------------| +| `tmap` | string | `""` | Map YAML filename | +| `tmap_dir` | string | `""` | Directory to save map files | +| `site_name` | string | `""` | Site or farm name | +| `node_thresh` | double | `0.5` | Minimum distance (m) between nodes when recording | +| `lock_btn` | int | `6` | Joystick lock button index | +| `add_btn` | int | `1` | Joystick add-node button index | +| `remove_btn` | int | `2` | Joystick remove-node button index | +| `gen_map_btn` | int | `3` | Joystick generate-map button index | +| `topic_joy` | string | `"/joy"` | Joystick input topic | +| `topic_pose` | string | `"/gps_base/odometry"` | Robot pose input topic | +| `topic_imu` | string | `"/gps_base/yaw"` | IMU yaw input topic | + +### map_recorder (map_recorder.py) + +| Parameter | Type | Default | Description | +|-----------|------|---------|-------------| +| `node_distance` | double | `1.0` | Minimum distance (m) travelled before a new node is recorded | +| `pointset` | string | `"recorded_map"` | Name/pointset given to the recorded map | +| `site_name` | string | `"map"` | Site name / metric map used for map meta data and TF frame | +| `tmap_dir` | string | `""` | Default directory used to resolve relative filenames for the save/load services | +| `pose_topic` | string | `"/odometry/filtered"` | `nav_msgs/Odometry` topic used as the robot pose source while recording | +| `source_tmap_topic` | string | `"/topological_map_2"` | Topic to inherit map meta data (transformation, actions, definitions) from when starting a fresh recording | + +### topological_map_visualiser (topological_map_visualiser.py) + +| Parameter | Type | Default | Description | +|-----------|------|---------|-------------| +| `map_file` | string | `""` | Path to `.tmap2.yaml` file for editing (empty = subscribe to topic). *Start-up only.* | +| `auto_save` | bool | `false` | Automatically save map every 30 seconds | +| `marker_scale` | double | `0.5` | Base scale factor for RViz markers | +| `edit_mode` | bool | `true` | Enable interactive drag-and-drop node editing | +| `nav_action_name` | string | `"/topological_navigation"` | GotoNode action name for click-to-navigate context menu. *Start-up only.* | +| `show_node_labels` | bool | `true` | Render per-node text labels (disable on large maps for speed) | +| `show_zones` | bool | `true` | Render node influence-zone polygons | +| `show_edges` | bool | `true` | Render edges between nodes | +| `auto_marker_scale` | bool | `false` | Derive `marker_scale` automatically from the spatial spread of the map | +| `interactive_marker_limit` | int | `750` | Max node count for which editable markers are created; above this the map is shown read-only | + +> Every parameter except `map_file` and `nav_action_name` can be changed at +> runtime via `ros2 param set /topological_map_visualiser `; +> the visualisation rebuilds automatically. + +### route_visualiser / occupancy_visualiser (topological_visual.py) + +| Parameter | Type | Default | Description | +|-----------|------|---------|-------------| +| `tmap` | string | *(required)* | Path to a `.tmap2.yaml` topological map file | + +### topological_web_app (topological_web_app.py) + +| Parameter | Type | Default | Description | +|-----------|------|---------|-------------| +| `port` | int | `8083` | HTTP port serving both the UI and the API | +| `host` | string | `"0.0.0.0"` | Interface to bind to | +| `odom_topic` | string | `"/odometry/global"` | `nav_msgs/Odometry` topic for the speed display | +| `base_frame` | string | `"base_link"` | Robot frame looked up in TF for the metric position | +| `map_frame` | string | `""` | Fixed frame for the TF lookup (empty = map's `topo_frame_id`, else `map`) | +| `action_name` | string | `"/topological_navigation"` | `GotoNode` action server used to send/cancel goals | +| `pose_rate` | double | `5.0` | Rate (Hz) of the TF pose lookup | +| `update_rate` | double | `10.0` | Max rate (Hz) of state updates pushed to clients | +| `web_root` | string | `""` | Alternative front-end directory (empty = bundled assets) | + +### fake_nav2_server (fake_nav2_server.py — simulator) + +| Parameter | Type | Default | Description | +|-----------|------|---------|-------------| +| `robot_speed` | double | `0.8` | Simulated linear speed (m/s) | +| `angular_speed` | double | `1.5` | Simulated angular speed (rad/s) | +| `goal_tolerance` | double | `0.15` | Position tolerance for goal reached (m) | +| `update_rate` | double | `30.0` | TF and marker publish rate (Hz) | +| `initial_x` | double | `0.0` | Initial robot X position | +| `initial_y` | double | `0.0` | Initial robot Y position | +| `initial_yaw` | double | `0.0` | Initial robot yaw (radians) | +| `map_frame` | string | `"map"` | Map TF frame | +| `odom_frame` | string | `"odom"` | Odometry TF frame | +| `base_frame` | string | `"base_link"` | Robot base TF frame | + +--- + +## ROS 2 Topics + +### Published Topics + +| Topic | Type | Publisher Node | Description | +|-------|------|---------------|-------------| +| `/topological_map_2` | `std_msgs/String` | Map Manager | Full topological map as a JSON string (latched) | +| `/topological_map_schema` | `std_msgs/String` | Map Manager | JSON schema for map validation (latched) | +| `/current_node` | `std_msgs/String` | Localisation | Name of the node the robot is currently inside (influence zone). `"none"` if outside all zones | +| `/closest_node` | `std_msgs/String` | Localisation | Name of the nearest node by Euclidean distance | +| `/closest_node_distance` | `std_msgs/Float32` | Localisation | Distance (m) to the closest node | +| `/closest_edges` | `topological_navigation_msgs/ClosestEdges` | Localisation | Sorted list of closest edge IDs with distances | +| `/current_node/tag` | `std_msgs/String` | Localisation | Semantic tag of the current node (from properties) | +| `/current_edge` | `std_msgs/String` | Navigation | Edge currently being traversed | +| `topological_navigation/Statistics` | `topological_navigation_msgs/NavStatistics` | Navigation | Navigation statistics for completed edges | +| `topological_navigation/Route` | `topological_navigation_msgs/TopologicalRoute` | Navigation | Currently planned route (list of node names) | +| `topological_navigation/move_action_status` | `std_msgs/String` | Navigation | Status of the current Nav2 move action | +| `/boundary_checker` | `geometry_msgs/PolygonStamped` | Navigation | Row corridor boundary polygon for agricultural operations | +| `/robot_operation_current_status` | `std_msgs/String` | Navigation | Current robot operation status | +| `/virtual_robot/markers` | `visualization_msgs/MarkerArray` | Fake Nav2 | Virtual robot body visualisation in RViz | +| `/odometry/global` | `nav_msgs/Odometry` | Fake Nav2 | Simulated global odometry | +| `/virtual_robot/pose` | `geometry_msgs/PoseStamped` | Fake Nav2 | Simulated robot pose | +| `topological_map_visualisation` | `visualization_msgs/MarkerArray` | Map Visualiser | Node and edge markers for RViz | +| `topological_route_visualisation` | `visualization_msgs/MarkerArray` | Route Visualiser | Active route highlight markers | +| `/topological_navigation/visual/occupied_node` | `visualization_msgs/MarkerArray` | Occupancy Visualiser | Occupied node indicators | +| `/tmapping_nodes` | `visualization_msgs/MarkerArray` | Manual Mapping | Recorded waypoint markers | +| `/recorded_tmap` | `std_msgs/String` | Map Recorder | Topological map being built, as a YAML string (latched, updated as nodes are added) | + +### Subscribed Topics + +| Topic | Type | Subscriber Node | Description | +|-------|------|----------------|-------------| +| `/topological_map_2` | `std_msgs/String` | Localisation, Navigation, Visualiser | Topological map data | +| `/current_node` | `std_msgs/String` | Navigation, Visualiser | Current node for navigation state | +| `/closest_node` | `std_msgs/String` | Navigation, Visualiser | Closest node for route origin | +| `/closest_edges` | `topological_navigation_msgs/ClosestEdges` | Navigation | Edge proximity for navigation decisions | +| `/initialpose` | `geometry_msgs/PoseStamped` | Fake Nav2 | Set the virtual robot's pose (e.g., from RViz **2D Pose Estimate**) | +| `topological_navigation/Route` | `topological_navigation_msgs/TopologicalRoute` | Route Visualiser | Route to highlight | +| `/topological_navigation/occupied_node` | `topological_navigation_msgs/TopologicalOccupiedNode` | Occupancy Visualiser | Nodes occupied by other robots | +| `/joy` | `sensor_msgs/Joy` | Manual Mapping | Joystick input for waypoint recording | +| `/odometry/filtered` | `nav_msgs/Odometry` | Map Recorder | Robot pose used to trigger automatic node recording | +| `/topological_map_2` | `std_msgs/String` | Map Recorder | Source map to inherit meta data (transformation, actions) from when starting a new recording | +| `mdp_plan_exec/current_policy_mode` | `topological_navigation_msgs/NavRoute` | Policy Marker | Policy route for arrow rendering | + +### TF Broadcasts + +| From | To | Publisher | Type | +|------|----|----------|------| +| `map` | `odom` | Fake Nav2 | Dynamic TF | +| `odom` | `base_link` | Fake Nav2 | Dynamic TF | +| `parent` | `topo_frame_id` | Map Manager | Static TF | + +--- + +## ROS 2 Services + +| Service | Type | Node | Description | +|---------|------|------|-------------| +| `/topological_map_manager2/get_topological_map` | `std_srvs/Trigger` | Map Manager | Returns the current map as a JSON string | +| `/topological_map_manager2/write_topological_map` | `WriteTopologicalMap` | Map Manager | Saves the current map to a YAML file | +| `/topological_map_manager2/switch_topological_map` | `WriteTopologicalMap` | Map Manager | Switches to a different map file | +| `/topological_localisation/localise_pose` | `LocalisePose` | Localisation | Localise an arbitrary pose (returns current + closest node) | +| `/tmapping_robot/save_waypoints` | `std_srvs/Trigger` | Manual Mapping | Save raw waypoints to file | +| `/tmapping_robot/save_map` | `std_srvs/Trigger` | Manual Mapping | Generate and save topological map from waypoints | +| `/save_map` | `std_srvs/Trigger` | Map Visualiser | Save the edited map to YAML | +| `/map_recorder/add_node` | `std_srvs/Trigger` | Map Recorder | Explicitly add the current pose as a new node | +| `/map_recorder/delete_last_node` | `std_srvs/Trigger` | Map Recorder | Remove the most recently recorded node | +| `/map_recorder/reset_map` | `std_srvs/Trigger` | Map Recorder | Clear the recorded map completely | +| `/map_recorder/save_map` | `WriteTopologicalMap` | Map Recorder | Save the recorded map to a YAML file | +| `/map_recorder/load_map` | `LoadTmap` | Map Recorder | Load a (partial) map from a file so recording can continue from it | + +--- + +## ROS 2 Actions + +### Action Servers + +| Action | Type | Node | Description | +|--------|------|------|-------------| +| `/topological_navigation` | `GotoNode` | Navigation | Navigate the robot to a target topological node | +| `/topological_navigation/execute_policy_mode` | `ExecutePolicyMode` | Navigation | Execute a pre-computed policy route | +| `/navigate_to_pose` | `nav2_msgs/NavigateToPose` | Fake Nav2 | Simulated single-goal metric navigation | +| `/navigate_through_poses` | `nav2_msgs/NavigateThroughPoses` | Fake Nav2 | Simulated multi-waypoint metric navigation | +| `/follow_waypoints` | `nav2_msgs/FollowWaypoints` | Fake Nav2 | Simulated waypoint-following navigation | +| `/record` | `RecordMap` | Map Recorder | Continuously record a topological map; cancel to stop recording | + +### Action Clients + +| Action | Type | Node | Description | +|--------|------|------|-------------| +| *(dynamic from map actions section)* | *(e.g., `nav2_msgs/NavigateToPose`)* | Navigation | Created for each unique `(action_type, action_server)` pair defined in the map | +| `/topological_navigation` | `GotoNode` | Map Visualiser | Click-to-navigate from RViz context menu | +| `/topological_navigation` | `GotoNode` | Web App | Click-to-navigate in the browser (cancel via `/topological_navigation/_action/cancel_goal`) | + +--- + +## TF Frames + +``` +map (global frame) + ├── topo_frame_id (static TF, published by map_manager2) + │ └── Topological node poses are defined in this frame + │ + └── odom (dynamic TF, published by simulator or real robot) + └── base_link (robot body frame) +``` + +The localisation node resolves the robot pose by looking up `topo_frame_id → base_frame` via `tf2_ros`. + +--- + +## Custom Message, Service & Action Definitions + +All definitions reside in the `topological_navigation_msgs` package. + +### Messages (.msg) + +| Message | Fields | Description | +|---------|--------|-------------| +| **NavRoute** | `string[] source`, `string[] edge_id` | Ordered route: source nodes and edge IDs to traverse | +| **TopologicalRoute** | `string[] nodes` | Ordered list of node names forming a route | +| **ClosestEdges** | `string[] edge_ids`, `float32[] distances` | Sorted edges by proximity with distances | +| **NavStatistics** | `string edge_id`, `string status`, `string origin`, `string target`, `string final_node`, `string date_started`, `string date_at_node`, `string date_finished`, `float64 time_to_waypoint`, `float64 operation_time`, `string topological_map` | Detailed statistics for one edge traversal | +| **CurrentEdge** | `Header header`, `string edge_id`, `bool active`, `bool result` | Currently active edge status | +| **GotoNodeFeedback** | `string route` | Navigation progress feedback (remaining route) | +| **ExecutePolicyModeFeedback** | `string current_wp`, `uint8 status` | Policy execution progress | +| **ExecutePolicyModeGoal** | `Header header`, `NavRoute route` | Policy execution goal with header | +| **TopologicalMap** | `string name`, `string map`, `string pointset`, `string last_updated`, `TopologicalNode[] nodes` | Full topological map structure | +| **TopologicalNode** | `string name`, `string map`, `string pointset`, `Pose pose`, `float64 yaw_goal_tolerance`, `float64 xy_goal_tolerance`, `Vertex[] verts`, `Edge[] edges`, `string localise_by_topic` | Single topological node with edges and influence zone | +| **Edge** | `string edge_id`, `string node`, `string action`, `float64 top_vel`, `string map_2d`, `float64 inflation_radius`, `string recovery_behaviours_config` | Edge connecting two nodes | +| **Vertex** | `float32 x`, `float32 y` | 2D vertex of an influence zone polygon | +| **AddNodeReq** | `string name`, `Pose pose`, `bool add_close_nodes` | Request to add a node to the map | +| **AddEdgeReq** | `string origin`, `string destination`, `string action`, `string action_type`, `string edge_id` | Request to add an edge between nodes | +| **SetInfluenceZoneReq** | `string name`, `float64[] vertices_x`, `float64[] vertices_y` | Request to set a node's influence zone polygon | +| **UpdateEdgeConfigReq** | `string edge_id`, `string namespace_name`, `string name`, `string value`, `bool value_is_string`, `bool not_reset` | Request to update edge configuration parameters | +| **TopologicalOccupiedNode** | `string[] nodes` | List of currently occupied node names | + +### Services (.srv) + +| Service | Request → Response | Description | +|---------|--------------------|-------------| +| **LocalisePose** | `Pose pose` → `string current_node, string closest_node` | Determine which node a pose belongs to | +| **GetRouteTo** | `string goal` → `NavRoute route` | Get route from current position to goal node | +| **GetRouteBetween** | `string origin, string goal` → `NavRoute route` | Get route between two named nodes | +| **WriteTopologicalMap** | `string filename, bool no_alias` → `bool success, string message` | Write / save a topological map to disk | +| **LoadTmap** | `string filename` → `bool success, string message, int32 num_nodes` | Load a (partial) tmap2 YAML file into the map recorder | +| **EvaluateEdge** | `string state, string edge, bool runtime` → `bool success, bool evaluation` | Evaluate restrictions on an edge | +| **EvaluateNode** | `string state, string node, bool runtime` → `bool success, bool evaluation` | Evaluate restrictions on a node | +| **ReconfAtEdges** | `string edge_id` → `bool success` | Reconfigure parameters at edge traversal | +| **LoadTopoNavTestScenario** | `string pointset` → *(empty)* | Load a test scenario | +| **RunTopoNavTestScenario** | *(empty)* → `bool nav_success, bool nav_timeout, bool graceful_fail, bool human_success, float64 min_distance_to_human, float64 mean_speed, float64 distance_travelled, float64 travel_time` | Run a test scenario and return metrics | + +### Actions (.action) + +| Action | Goal | Result | Feedback | +|--------|------|--------|----------| +| **GotoNode** | `string target`, `bool no_orientation` | `bool success` | `string route` | +| **ExecutePolicyMode** | `NavRoute route` | `bool success` | `string current_wp`, `uint8 status` | +| **BuildTopPrediction** | `Time start_range`, `Time end_range` | `bool success` | `string result` | +| **RecordMap** | `string map_name`, `float64 node_distance` | `bool success`, `string message`, `int32 num_nodes` | `int32 num_nodes`, `string last_node`, `string status` | + +--- + +## Topological Map Format + +Topological maps are YAML files with a `.tmap2.yaml` extension. Here is an abbreviated example: + +```yaml +meta: + last_updated: 08-03-2026_12-00-00 + origin: + latitude: 53.268 + longitude: -0.524 + altitude: 0 + +metric_map: my_farm +name: my_farm +pointset: my_farm + +transformation: + topo_frame_id: my_farm # Child frame for node poses + parent: map # Parent TF frame + rotation: {w: 1.0, x: 0.0, y: 0.0, z: 0.0} + translation: {x: 0.0, y: 0.0, z: 0.0} + +definitions: + default_bt: | + + + + + + + + + +actions: + navigate_to_pose: + composable: false + action_type: nav2_msgs.action.NavigateToPose + action_server: /navigate_to_pose + action_goal_template: + pose: + header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.default_bt}' + +nodes: + - meta: + map: my_farm + node: RowEntry_A1 + pointset: my_farm + node: + name: RowEntry_A1 + nav_frame: '${transformation.topo_frame_id}' + pose: + position: {x: 10.5, y: 5.2, z: 0.0} + orientation: {w: 0.707, x: 0.0, y: 0.0, z: 0.707} + properties: # Flexible key-value metadata + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + verts: # Influence zone polygon + - {x: -0.5, y: -0.5} + - {x: 0.5, y: -0.5} + - {x: 0.5, y: 0.5} + - {x: -0.5, y: 0.5} + edges: + - edge_id: RowEntry_A1_RowEnd_A1 + node: RowEnd_A1 # Target node name + action: navigate_to_pose # Action key from 'actions' section + properties: + max_speed: 0.5 +``` + +**Key sections:** +- **`meta`**: Map metadata (timestamps, origin coordinates) +- **`transformation`**: TF frame for all node poses (published as a static transform) +- **`definitions`**: Reusable templates (e.g., Nav2 behavior trees) +- **`actions`**: Named action configurations — each maps to a ROS 2 action server with a goal template supporting variable substitution (`${node.pose}`, `${definitions.default_bt}`, etc.) +- **`nodes`**: List of topological nodes, each with pose, properties, influence zone vertices, and outgoing edges + +### Flexible Properties System + +Both nodes and edges support an optional `properties` dictionary. Properties are freeform key-value pairs — no schema changes needed: + +```yaml +properties: + xy_goal_tolerance: 0.3 # Navigation tolerance + semantics: "row_entry" # Semantic label + roboflow: # Namespaced properties + enabled: true + confidence: 0.7 +``` + +Always access properties defensively in code: +```python +props = node["node"].get("properties", {}) +tolerance = props.get("xy_goal_tolerance", 0.5) +``` + +See [doc/PROPERTIES.md](topological_navigation/doc/PROPERTIES.md) for full documentation. + +### Recording Maps + +`ros2 run topological_navigation map_recorder.py` builds a `.tmap2.yaml` map while driving the robot around, using the `record` ROS 2 action (see [ROS 2 Actions](#ros-2-actions)): + +- New meta data (transformation, `actions`, `definitions`) is inherited from the currently active map (`/topological_map_2`) or sensible defaults. +- A node is added automatically every `node_distance` metres; nodes can also be added explicitly via the `add_node` service. +- **Loop closure**: if the robot re-enters an existing node's influence zone, that node is reused and linked to the previous one instead of duplicating it. +- Nodes are connected successively with **bidirectional** edges (an edge in each direction between consecutive nodes). +- Every recorded node gets `properties.map.source: recording` so it can be told apart from hand-authored nodes. +- The map under construction is published continuously on the latched `/recorded_tmap` topic, and can be saved (`save_map`), reset (`reset_map`), trimmed (`delete_last_node`), or extended from a file (`load_map`) at any time — even while recording is in progress. + +### Map Validation + +```bash +ros2 run topological_navigation validate_map.py /path/to/map.tmap2.yaml -v +``` + +--- + +## Command-Line Utilities + +| Command | Description | +|---------|-------------| +| `ros2 run topological_navigation validate_map.py -v` | Validate a map against the JSON schema | +| `ros2 run topological_navigation convert_tmap.py ` | Convert between topological map format versions | +| `map_analyser.py analyse [--svg out.svg]` | Full analysis report (schema, orphaned nodes, disconnected sub-maps, influence-zone overlaps, statistics), optionally with SVG rendering | +| `map_analyser.py check ` | CI-friendly validity check; exit code reflects the result | +| `map_analyser.py svg -o out.svg` | Render the map to an SVG image | +| `map_analyser.py minify ` | Write a smaller, semantically-identical copy of the map using YAML anchors | +| `map_analyser.py merge [...] -o merged.yaml` | Merge multiple topological maps into one schema-valid map (GPS reprojection, name deduplication, metadata merge) | +| `ros2 action send_goal /topological_navigation topological_navigation_msgs/action/GotoNode "{target: 'node_name'}"` | Send a navigation goal | +| `ros2 topic echo /current_node` | Monitor which node the robot is at | +| `ros2 topic echo /closest_node` | Monitor the nearest node | +| `ros2 service call /topological_localisation/localise_pose topological_navigation_msgs/srv/LocalisePose "{pose: {position: {x: 1.0, y: 2.0, z: 0.0}}}"` | Localise an arbitrary pose | +| `ros2 action send_goal /record topological_navigation_msgs/action/RecordMap "{map_name: 'my_map', node_distance: 1.0}"` | Start recording a topological map (Ctrl-C / cancel the goal to stop) | +| `ros2 service call /map_recorder/save_map topological_navigation_msgs/srv/WriteTopologicalMap "{filename: 'my_map.tmap2.yaml'}"` | Save the currently recorded map to disk | + +> `map_analyser.py` runs standalone without ROS 2 — see [Running the CLI Tools Without ROS 2](#running-the-cli-tools-without-ros-2). + +--- + +## Testing + +```bash +# Build the workspace +colcon build + +# Run all tests for the core package +colcon test --packages-select topological_navigation --event-handlers console_direct+ + +# Run specific tests +cd topological_navigation +pytest test/test_networkx_utils.py -v +pytest test/test_localisation2.py -v + +# Web app backend tests (no ROS 2 required) +cd ../topological_navigation_visual +pytest test/test_web_state.py test/test_web_server.py -v + +# Python linting +colcon test --packages-select topological_navigation \ + --event-handlers console_direct+ --pytest-args -k "test_flake8 or test_pep257" +``` + +--- + +## Contributing + +1. Follow **PEP 8** / **PEP 257** for Python code +2. Use `ament_flake8` and `ament_pep257` for validation +3. Add tests for new functionality +4. Validate maps with `validate_map.py` +5. Update documentation when changing behavior + +--- + +## License + +Apache License 2.0 — see [LICENSE](LICENSE) for details. diff --git a/REVIEW.md b/REVIEW.md new file mode 100644 index 00000000..037c3732 --- /dev/null +++ b/REVIEW.md @@ -0,0 +1,504 @@ +# Repository Structure Review and Improvement Recommendations + +**Date**: January 2026 +**Repository**: LCAS/topological_navigation +**Version**: 3.0.5 (ROS 2 Humble/Iron) + +This document provides an analysis of the current repository structure, identifies potential issues, and recommends improvements to guide future development and AI-assisted contributions. + +--- + +## Executive Summary + +The topological_navigation repository is a mature ROS 2 project with a well-established foundation. However, analysis reveals several areas for improvement: + +1. **Code Organization**: Presence of legacy "version 2" files alongside original versions creates confusion +2. **Documentation**: Inconsistent documentation coverage across packages +3. **Testing**: Limited test coverage, especially for newer ROS 2 features +4. **Code Duplication**: Some functionality exists in multiple versions (v1 vs v2) +5. **Technical Debt**: Several TODOs and FIXMEs in critical navigation code + +**Overall Assessment**: The repository is functional and well-maintained, but would benefit from modernization and consolidation efforts. + +--- + +## Structural Analysis + +### 1. Code Organization and Versioning + +**Issue: Multiple File Versions** + +The repository contains **15+ files with "2" suffix** (e.g., `localisation2.py`, `manager2.py`, `route_search2.py`), indicating parallel implementations: + +``` +topological_navigation/ +├── manager.py # Legacy version +├── manager2.py # Current version (1538 lines) +├── route_search.py # Legacy version +├── route_search2.py # Current version +├── localisation.py # Legacy version +└── scripts/ + └── localisation2.py # Current version +``` + +**Impact**: +- **Confusion for Contributors**: Unclear which files are authoritative +- **Maintenance Burden**: Bug fixes may need to be applied to multiple versions +- **Code Bloat**: Doubles the codebase size unnecessarily +- **AI Agent Confusion**: AI tools may reference or modify deprecated code + +**Recommendations**: + +1. **Short-term (High Priority)**: + - Add clear deprecation notices in legacy files: + ```python + """ + DEPRECATED: This file is maintained for backward compatibility only. + New development should use manager2.py instead. + Will be removed in version 4.0.0. + """ + ``` + - Update documentation to clarify which versions to use + +2. **Medium-term**: + - Create migration guide for users still on legacy versions + - Rename "2" files to remove suffix once legacy is removed: + - `manager2.py` → `manager.py` + - `route_search2.py` → `route_search.py` + - Consider semantic versioning for major API changes instead of file suffixes + +3. **Long-term (Version 4.0.0)**: + - Remove all legacy files after deprecation period + - Consolidate to single implementation per module + +### 2. Package Structure + +**Current Structure**: Well-organized multi-package workspace + +``` +topological_navigation/ +├── topological_navigation/ # Core (Python, ~8k LOC) +├── topological_navigation_msgs/ # Messages +├── topological_rviz_tools/ # RViz tools (C++/Qt) +└── topological_utils/ # Utilities (Python, ~70+ scripts) +``` + +**Strengths**: +- Clear separation of concerns +- Standard ROS 2 package layout +- Logical grouping of functionality + +**Issues**: + +1. **Script Proliferation**: `topological_utils` contains **70+ Python scripts**, making it difficult to discover and maintain tools + +2. **Inconsistent Naming**: Some scripts use underscores, others don't; some have `.py` extension in the name, others don't + +**Recommendations**: + +1. **Organize Utilities by Function**: + ``` + topological_utils/ + └── topological_utils/ + ├── commands/ # CLI tools + │ ├── map_management/ + │ │ ├── add_node.py + │ │ ├── remove_node.py + │ │ └── crop_map.py + │ ├── visualization/ + │ │ ├── plot_map.py + │ │ └── draw_predictions.py + │ └── migration/ + │ ├── migrate.py + │ └── map_converter.py + └── lib/ # Shared library code + ``` + +2. **Create Unified CLI Tool**: + - Consider a single entry point: `topo` command with subcommands + - Example: `topo map add-node` instead of `add_node.py` + - Reduces cognitive load and improves discoverability + - Similar to `git`, `docker`, or `ros2` command structure + +3. **Consolidate Duplicate Functionality**: + - Multiple map plotting tools exist (`plot_yaml.py`, `plot_yaml2.py`, `plot_topo_map.py`, `plot_topo_map2.py`) + - Consider single `plot` command with options for different formats + +### 3. Documentation + +**Current State**: + +| Package | README Length | Quality | +|---------|---------------|---------| +| Root | 14 lines | Minimal - just package list | +| topological_navigation | 278 lines | Good - comprehensive | +| topological_rviz_tools | 79 lines | Good - usage examples | +| topological_utils | None | **Missing** | +| topological_navigation_msgs | None | **Missing** | + +**Issues**: + +1. **Missing Package READMEs**: Two packages lack dedicated documentation +2. **Outdated Content**: Main README references ROS 1 concepts (MongoDB, `roslaunch`) +3. **No Architecture Diagrams**: Complex system lacks visual documentation +4. **API Documentation**: No generated API docs (Sphinx, Doxygen) + +**Recommendations**: + +1. **Immediate (High Priority)**: + - Add READMEs to `topological_utils` and `topological_navigation_msgs` + - Update root README with: + - Quick start guide for ROS 2 + - System requirements + - Installation instructions + - Link to key documentation + +2. **Short-term**: + - Create `docs/` directory with: + - Architecture overview with diagrams (use Mermaid or PlantUML) + - Component interaction diagrams + - Data flow diagrams + - API reference (auto-generated from code) + +3. **Medium-term**: + - Set up automated documentation generation: + - Python: Sphinx with autodoc + - C++: Doxygen + - Add documentation to CI/CD pipeline + - Host documentation (GitHub Pages, Read the Docs) + +4. **Enhanced Documentation Examples**: + ```markdown + docs/ + ├── index.md # Main documentation hub + ├── getting-started/ + │ ├── installation.md + │ ├── quick-start.md + │ └── tutorials/ + ├── architecture/ + │ ├── overview.md + │ ├── components.md + │ └── diagrams/ + ├── user-guide/ + │ ├── creating-maps.md + │ ├── navigation.md + │ └── properties-guide.md + ├── developer-guide/ + │ ├── contributing.md + │ ├── coding-standards.md + │ └── testing.md + └── api/ + ├── python/ + └── cpp/ + ``` + +### 4. Testing Infrastructure + +**Current State**: + +- **Python**: Uses pytest and launch_pytest ✓ +- **Linters**: ament_flake8, ament_pep257 ✓ +- **CI/CD**: GitHub Actions testing on Humble and Iron ✓ +- **Test Coverage**: Only 1-2 test files found, mostly integration tests + +**Issues**: + +1. **Low Unit Test Coverage**: Very few unit tests for core modules +2. **Legacy Test Documentation**: `tests/README.md` references ROS 1 tools (catkin_make, roslaunch, MongoDB, MORSE simulator) +3. **No Coverage Metrics**: No measurement of code coverage +4. **Manual Testing Required**: Some functionality requires manual verification + +**Recommendations**: + +1. **Immediate**: + - Update `tests/README.md` for ROS 2 (replace catkin_make with colcon, roslaunch with ros2 launch) + - Add unit tests for critical modules: + - `route_search2.py` - path planning algorithms + - `tmap_utils.py` - map utilities + - `restrictions_impl.py` - validation logic + +2. **Short-term**: + - Add code coverage reporting: + ```bash + pytest --cov=topological_navigation --cov-report=html + ``` + - Set coverage targets (aim for 70%+ for core modules) + - Add coverage badge to README + +3. **Medium-term**: + - Create comprehensive test suite: + - Unit tests for all public APIs + - Integration tests for navigation scenarios + - Property validation tests + - Add performance/benchmark tests for route planning + - Mock external dependencies (Nav2, TF) + +4. **Example Test Structure**: + ``` + topological_navigation/ + └── test/ + ├── unit/ + │ ├── test_route_search.py + │ ├── test_map_validation.py + │ └── test_properties.py + ├── integration/ + │ ├── test_navigation_flow.py + │ └── test_map_loading.py + └── fixtures/ + ├── sample_maps/ + └── mock_data/ + ``` + +### 5. Code Quality Issues + +**Technical Debt Identified**: + +1. **TODOs and FIXMEs**: 8+ instances in production code + ```python + # localisation2.py + # TODO: remove Temporary arg until tags functionality is MongoDB independent + + # navigation2.py + # FIXME: not implemented + + # edge_action_manager2.py + #TODO change this to actual + ``` + +2. **Wildcard Imports**: Found in 10+ utility scripts + ```python + from module import * # Anti-pattern + ``` + +3. **Large Files**: Some modules exceed 1000 lines + - `edge_action_manager2.py`: 1362 lines + - `manager2.py`: 1538 lines + +**Recommendations**: + +1. **Immediate**: + - Create GitHub issues for each TODO/FIXME + - Add issue references in code: + ```python + # TODO(#123): remove Temporary arg until tags functionality is MongoDB independent + ``` + +2. **Short-term**: + - Refactor wildcard imports to explicit imports + - Add pre-commit hooks to prevent new wildcard imports + - Configure linters to flag these issues + +3. **Medium-term**: + - Refactor large files into smaller, focused modules: + ```python + # Instead of edge_action_manager2.py (1362 lines) + edge_action_manager/ + ├── __init__.py + ├── base.py # Base classes + ├── actions.py # Action implementations + ├── state.py # State management + └── utils.py # Helper functions + ``` + - Apply SOLID principles for better maintainability + +### 6. Properties System (Positive Example) + +**Strengths**: + +- Excellent documentation in `PROPERTIES.md` ✓ +- Flexible, extensible design ✓ +- Backward compatible ✓ +- Well-thought-out namespacing approach ✓ + +**Minor Recommendations**: + +1. Add JSON Schema for property validation (optional but helpful) +2. Create property builder/validator classes for common patterns +3. Add examples directory with real-world property configurations + +### 7. Dependency Management + +**Current State**: +- Uses standard ROS 2 dependencies ✓ +- Minimal external dependencies ✓ +- Clear dependency declarations in `package.xml` ✓ + +**Potential Issues**: + +1. **No Dependency Pinning**: Not using specific versions +2. **No Security Scanning**: No automated vulnerability checks + +**Recommendations**: + +1. Add Dependabot or Renovate for dependency updates +2. Add security scanning to CI/CD (e.g., `safety` for Python) +3. Document tested dependency versions + +### 8. Potential Performance Concerns + +**Areas to Monitor**: + +1. **Large Map Handling**: Route planning on graphs with hundreds of nodes +2. **Visualization Performance**: Marker updates with many nodes/edges +3. **Memory Usage**: Loading multiple large maps simultaneously + +**Recommendations**: + +1. Add performance benchmarks for route planning +2. Implement map caching strategies +3. Consider lazy loading for large maps +4. Profile memory usage in long-running scenarios + +--- + +## Priority Recommendations Summary + +### High Priority (Address Soon) + +1. ✅ **Add deprecation notices** to legacy "version 1" files +2. ✅ **Create READMEs** for topological_utils and topological_navigation_msgs +3. ✅ **Update test documentation** for ROS 2 +4. ✅ **Convert TODOs to GitHub issues** with tracking +5. ✅ **Add basic unit tests** for core modules + +### Medium Priority (Next 6 Months) + +1. 📋 **Plan legacy code removal** for version 4.0.0 +2. 📋 **Refactor large files** (>1000 lines) into smaller modules +3. 📋 **Organize utility scripts** into logical subdirectories +4. 📋 **Generate API documentation** (Sphinx/Doxygen) +5. 📋 **Add code coverage** reporting and targets + +### Low Priority (Future Enhancements) + +1. 💡 **Create unified CLI tool** (`topo` command) +2. 💡 **Add architecture diagrams** to documentation +3. 💡 **Implement performance benchmarks** +4. 💡 **Add dependency security scanning** +5. 💡 **Create migration guides** between versions + +--- + +## Code Modernization Opportunities + +### Python Code + +1. **Type Hints**: Add comprehensive type hints to all public APIs + ```python + def find_route(start: str, end: str, map_name: str) -> List[str]: + """Find route between nodes.""" + ... + ``` + +2. **Dataclasses**: Use dataclasses for data structures + ```python + from dataclasses import dataclass + + @dataclass + class Node: + name: str + pose: Pose + properties: Dict[str, Any] + edges: List[Edge] + ``` + +3. **Async/Await**: Consider async patterns for I/O-bound operations + +### C++ Code + +1. **Modern C++**: Ensure consistent use of C++14/17 features +2. **Smart Pointers**: Verify consistent use of shared_ptr/unique_ptr +3. **RAII**: Ensure proper resource management + +--- + +## AI Agent Friendliness Assessment + +**Current Score: 7/10** + +**Strengths**: +- ✅ Clear package structure +- ✅ Excellent properties documentation +- ✅ Standard ROS 2 patterns +- ✅ Consistent Python style (PEP 8) + +**Areas for Improvement**: +- ⚠️ Legacy code confusion (version 1 vs 2) +- ⚠️ Limited inline documentation +- ⚠️ Missing API documentation +- ⚠️ Few code examples for common tasks + +**To Improve AI Agent Experience**: + +1. **Add more docstrings** with examples: + ```python + def add_edge(node_from: str, node_to: str, action: str) -> None: + """Add edge between two nodes. + + Args: + node_from: Source node name + node_to: Target node name + action: Action to execute (e.g., "NavigateToPose") + + Example: + >>> add_edge("Start", "Goal", "NavigateToPose") + + Raises: + ValueError: If either node doesn't exist + """ + ``` + +2. **Create examples directory**: + ``` + examples/ + ├── basic_navigation.py + ├── custom_properties.py + ├── map_creation.py + └── edge_actions.py + ``` + +3. **Add inline comments for complex algorithms** (e.g., A* implementation) + +4. **Provide migration examples** between versions + +--- + +## Conclusion + +The topological_navigation repository is a well-maintained, functional ROS 2 project with a solid foundation. The primary recommendations focus on: + +1. **Reducing confusion** by deprecating and eventually removing legacy code +2. **Improving discoverability** through better documentation and organization +3. **Increasing confidence** through comprehensive testing +4. **Modernizing code** to leverage current best practices + +These improvements will benefit both human developers and AI coding agents, making the repository easier to understand, maintain, and extend. + +**Estimated Effort**: +- High Priority Items: ~2-3 weeks of focused work +- Medium Priority Items: ~1-2 months spread over multiple sprints +- Low Priority Items: Ongoing improvements over 6-12 months + +**Expected Benefits**: +- Reduced onboarding time for new contributors +- Fewer bugs from using deprecated code +- Better AI agent assistance +- Improved maintainability and extensibility +- Higher confidence in code quality + +--- + +## Appendix: Metrics Summary + +| Metric | Value | Target | +|--------|-------|--------| +| Total Python Files | 144 | - | +| Files with "2" suffix | 15 | 0 (eventually) | +| Utility Scripts | ~70 | Consolidated | +| Test Files | ~2 | 20+ | +| Code Coverage | Unknown | 70%+ | +| TODOs/FIXMEs | 8+ | 0 (converted to issues) | +| Packages with READMEs | 2/4 | 4/4 | +| API Documentation | No | Yes | +| CI/CD Pipelines | 2 | 3+ (add coverage) | + diff --git a/conftest.py b/conftest.py new file mode 100644 index 00000000..5aff1d83 --- /dev/null +++ b/conftest.py @@ -0,0 +1,29 @@ +""" +Pytest configuration for topological_navigation workspace. + +This file ensures that the topological_navigation package can be imported +during testing by adding the source and build directories to the Python path. +""" + +import sys +from pathlib import Path + +# The ROS package directory that contains the actual Python package +_pkg_dir = Path(__file__).parent / 'topological_navigation' +if _pkg_dir.exists() and str(_pkg_dir) not in sys.path: + sys.path.insert(0, str(_pkg_dir)) + +# Also try the build directory (for colcon builds) +_build_dir = Path(__file__).parent / 'build' / 'topological_navigation' +if _build_dir.exists() and str(_build_dir) not in sys.path: + sys.path.insert(0, str(_build_dir)) + + +def pytest_configure(config): + """Pytest hook that runs before test collection. + + Ensures the source and build directories are in the Python path. + """ + for d in (_pkg_dir, _build_dir): + if d.exists() and str(d) not in sys.path: + sys.path.insert(0, str(d)) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..444e5aaa --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +pyyaml +jsonschema +networkx +scipy +numpy +pyproj +pytest diff --git a/topological_nav_simulator/README.md b/topological_nav_simulator/README.md new file mode 100644 index 00000000..f02cd5c7 --- /dev/null +++ b/topological_nav_simulator/README.md @@ -0,0 +1,114 @@ +# topological_nav_simulator + +Fake Nav2 action servers with a virtual robot for testing topological navigation **without a real robot or the full Nav2 stack**. + +## Motivation + +When developing and testing topological navigation behaviour (route planning, edge actions, localisation), you need a Nav2 action server responding to `NavigateToPose` / `NavigateThroughPoses` goals. Spinning up the full Nav2 stack with Gazebo is heavy and slow. This package provides lightweight **drop-in replacements** that: + +- Accept the same Nav2 action goals +- Simulate robot movement at configurable speed +- Publish TF (`map → odom → base_link`) so `localisation2` works +- Publish `/odometry/global` so `edge_action_manager2` works +- Show a **virtual robot marker** in RViz (cube + direction arrow + breadcrumb trail) +- Support cancel / preemption + +## Architecture + +``` +┌──────────────────────────────────────────────┐ +│ fake_nav2_server (node) │ +│ │ +│ Action Servers: │ +│ /navigate_to_pose (NavigateToPose) │ +│ /navigate_through_poses(NavigateThroughPoses)│ +│ /follow_waypoints (FollowWaypoints) │ +│ │ +│ Publishers: │ +│ TF: map → odom → base_link │ +│ /odometry/global (Odometry) │ +│ /virtual_robot/markers (MarkerArray) │ +│ /virtual_robot/pose (PoseStamped) │ +│ │ +│ Subscribers: │ +│ /initialpose (teleport from RViz) │ +└──────────────────────────────────────────────┘ +``` + +## Quick Start + +```bash +# Build +cd /path/to/workspace +colcon build --packages-select topological_nav_simulator +source install/setup.bash + +# Run +ros2 launch topological_nav_simulator fake_nav2.launch.py + +# In another terminal — send a test goal +ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose \ + "{pose: {header: {frame_id: 'map'}, pose: {position: {x: 5.0, y: 3.0}}}}" +``` + +## Parameters + +| Parameter | Type | Default | Description | +|---|---|---|---| +| `robot_speed` | double | 0.8 | Linear speed (m/s) | +| `angular_speed` | double | 1.5 | Angular speed (rad/s) | +| `goal_tolerance` | double | 0.15 | Distance to snap to goal (m) | +| `update_rate` | double | 30.0 | TF/marker publish rate (Hz) | +| `initial_x` | double | 0.0 | Starting X position | +| `initial_y` | double | 0.0 | Starting Y position | +| `initial_yaw` | double | 0.0 | Starting yaw (rad) | +| `map_frame` | string | `map` | Map TF frame | +| `odom_frame` | string | `odom` | Odometry TF frame | +| `base_frame` | string | `base_link` | Robot base TF frame | + +## RViz Visualization + +The virtual robot appears as: +- **Blue cube** — robot body +- **Red arrow** — heading direction +- **Green ring** — footprint +- **Blue trail** — breadcrumb path +- **🤖 Sim Robot** — floating label + +Use the **2D Pose Estimate** tool in RViz to teleport the robot to any location. + +An RViz config is provided: +```bash +rviz2 -d $(ros2 pkg prefix topological_nav_simulator)/share/topological_nav_simulator/config/fake_nav2.rviz +``` + +## Usage with Topological Navigation + +Launch the full topological navigation stack, replacing the real Nav2 with this simulator: + +```bash +# Terminal 1: Fake Nav2 +ros2 launch topological_nav_simulator fake_nav2.launch.py \ + initial_x:=10.5 initial_y:=5.2 + +# Terminal 2: Map manager + localisation + navigation +ros2 run topological_navigation map_manager2.py --ros-args -p topological_map2_name:=my_map +ros2 run topological_navigation localisation2.py +ros2 run topological_navigation navigation2.py + +# Terminal 3: Send topological nav goal +ros2 action send_goal /topological_navigation \ + topological_navigation_msgs/action/GotoNode \ + "{target: 'WayPoint1'}" +``` + +## Movement Simulation + +When a goal is received, the robot: +1. **Rotates** to face the target position +2. **Drives straight** toward it at `robot_speed` +3. **Rotates** to the goal's final orientation + +For `NavigateThroughPoses`, it moves through each waypoint sequentially. + +Feedback is published with `distance_remaining` so the topological navigation stack can monitor progress. diff --git a/topological_nav_simulator/config/fake_nav2.rviz b/topological_nav_simulator/config/fake_nav2.rviz new file mode 100644 index 00000000..f559d855 --- /dev/null +++ b/topological_nav_simulator/config/fake_nav2.rviz @@ -0,0 +1,57 @@ +Panels: + - Class: rviz_common/Displays + Name: Displays + - Class: rviz_common/Views + Name: Views +Visualization Manager: + Displays: + - Class: rviz_default_plugins/TF + Name: TF + Enabled: true + Show Arrows: true + Show Axes: true + Show Names: true + Update Interval: 0 + Frame Timeout: 15 + - Class: rviz_default_plugins/MarkerArray + Name: Virtual Robot + Enabled: true + Topic: + Value: /virtual_robot/markers + Depth: 5 + Reliability Policy: Reliable + - Class: rviz_default_plugins/Grid + Name: Grid + Enabled: true + Line Style: + Value: Lines + Cell Size: 1 + Color: 160; 160; 164 + Plane: XY + Plane Cell Count: 50 + Global Options: + Background Color: 48; 48; 48 + Fixed Frame: map + Frame Rate: 30 + Tools: + - Class: rviz_default_plugins/MoveCamera + - Class: rviz_default_plugins/SetInitialPose + Topic: + Value: /initialpose + - Class: rviz_default_plugins/SetGoal + Topic: + Value: /goal_pose + Views: + Current: + Class: rviz_default_plugins/Orbit + Distance: 30 + Focal Point: + X: 0 + Y: 0 + Z: 0 + Name: TopDown + Pitch: 1.5707 + Yaw: 0 +Window Geometry: + Width: 1200 + Height: 800 diff --git a/topological_nav_simulator/launch/fake_nav2.launch.py b/topological_nav_simulator/launch/fake_nav2.launch.py new file mode 100644 index 00000000..7d6f2c1e --- /dev/null +++ b/topological_nav_simulator/launch/fake_nav2.launch.py @@ -0,0 +1,65 @@ +# Copyright (c) 2026, topological_navigation contributors +# Licensed under the MIT License. +"""Launch fake Nav2 server with virtual robot visualization.""" + +from launch import LaunchDescription +from launch.actions import DeclareLaunchArgument +from launch.substitutions import LaunchConfiguration +from launch_ros.actions import Node + + +def generate_launch_description(): + """Generate launch description for the fake Nav2 simulator.""" + return LaunchDescription([ + # --- Arguments --- + DeclareLaunchArgument( + 'robot_speed', default_value='0.8', + description='Simulated robot linear speed (m/s)'), + DeclareLaunchArgument( + 'angular_speed', default_value='1.5', + description='Simulated robot angular speed (rad/s)'), + DeclareLaunchArgument( + 'goal_tolerance', default_value='0.15', + description='Distance tolerance for reaching goals (m)'), + DeclareLaunchArgument( + 'update_rate', default_value='30.0', + description='TF and marker publish rate (Hz)'), + DeclareLaunchArgument( + 'initial_x', default_value='0.0', + description='Initial robot X position'), + DeclareLaunchArgument( + 'initial_y', default_value='0.0', + description='Initial robot Y position'), + DeclareLaunchArgument( + 'initial_yaw', default_value='0.0', + description='Initial robot yaw (radians)'), + DeclareLaunchArgument( + 'map_frame', default_value='map', + description='Map TF frame'), + DeclareLaunchArgument( + 'odom_frame', default_value='odom', + description='Odometry TF frame'), + DeclareLaunchArgument( + 'base_frame', default_value='base_link', + description='Robot base TF frame'), + + # --- Fake Nav2 Server --- + Node( + package='topological_nav_simulator', + executable='fake_nav2_server', + name='fake_nav2_server', + output='screen', + parameters=[{ + 'robot_speed': LaunchConfiguration('robot_speed'), + 'angular_speed': LaunchConfiguration('angular_speed'), + 'goal_tolerance': LaunchConfiguration('goal_tolerance'), + 'update_rate': LaunchConfiguration('update_rate'), + 'initial_x': LaunchConfiguration('initial_x'), + 'initial_y': LaunchConfiguration('initial_y'), + 'initial_yaw': LaunchConfiguration('initial_yaw'), + 'map_frame': LaunchConfiguration('map_frame'), + 'odom_frame': LaunchConfiguration('odom_frame'), + 'base_frame': LaunchConfiguration('base_frame'), + }], + ), + ]) diff --git a/topological_nav_simulator/package.xml b/topological_nav_simulator/package.xml new file mode 100644 index 00000000..2e724c3a --- /dev/null +++ b/topological_nav_simulator/package.xml @@ -0,0 +1,34 @@ + + + + topological_nav_simulator + 1.0.0 + + Fake Nav2 action servers with a virtual robot for testing + topological navigation without a real robot or Nav2 stack. + Provides NavigateToPose, NavigateThroughPoses, and FollowWaypoints + action servers that simulate movement and visualize a virtual robot + marker in RViz. + + + Ibrahim Hroob + MIT + + rclpy + nav2_msgs + geometry_msgs + nav_msgs + std_msgs + visualization_msgs + tf2_ros + tf_transformations + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + + ament_python + + diff --git a/topological_navigation/__init__.py b/topological_nav_simulator/resource/topological_nav_simulator similarity index 100% rename from topological_navigation/__init__.py rename to topological_nav_simulator/resource/topological_nav_simulator diff --git a/topological_nav_simulator/setup.cfg b/topological_nav_simulator/setup.cfg new file mode 100644 index 00000000..b27d5747 --- /dev/null +++ b/topological_nav_simulator/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/topological_nav_simulator +[install] +install_scripts=$base/lib/topological_nav_simulator diff --git a/topological_nav_simulator/setup.py b/topological_nav_simulator/setup.py new file mode 100644 index 00000000..89a29c13 --- /dev/null +++ b/topological_nav_simulator/setup.py @@ -0,0 +1,29 @@ +from setuptools import find_packages, setup +from glob import glob + +package_name = 'topological_nav_simulator' + +setup( + name=package_name, + version='1.0.0', + packages=find_packages(), + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ('share/' + package_name + '/launch/', glob('launch/*')), + ('share/' + package_name + '/config/', glob('config/*')), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='Ibrahim Hroob', + maintainer_email='ihroob@lincoln.ac.uk', + description='Fake Nav2 action servers with virtual robot for testing topological navigation', + license='MIT', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + 'fake_nav2_server = topological_nav_simulator.fake_nav2_server:main', + ], + }, +) diff --git a/topological_nav_simulator/test/test_virtual_robot.py b/topological_nav_simulator/test/test_virtual_robot.py new file mode 100644 index 00000000..3d2c0626 --- /dev/null +++ b/topological_nav_simulator/test/test_virtual_robot.py @@ -0,0 +1,62 @@ +# Copyright (c) 2026, topological_navigation contributors +# Licensed under the MIT License. +"""Tests for virtual_robot module.""" + +import math + +import pytest +geometry_msgs = pytest.importorskip('geometry_msgs', reason='geometry_msgs not available') +from geometry_msgs.msg import Pose, Quaternion # noqa: E402 +from topological_nav_simulator.virtual_robot import ( + _euler_from_quaternion, + _lerp, + _quaternion_from_yaw, + _slerp_yaw, +) + + +def test_quaternion_from_yaw_zero(): + """Yaw=0 should produce identity-like quaternion.""" + q = _quaternion_from_yaw(0.0) + assert abs(q.w - 1.0) < 1e-6 + assert abs(q.z) < 1e-6 + + +def test_quaternion_from_yaw_90(): + """Yaw=pi/2 should produce z~0.707, w~0.707.""" + q = _quaternion_from_yaw(math.pi / 2.0) + assert abs(q.z - math.sin(math.pi / 4.0)) < 1e-6 + assert abs(q.w - math.cos(math.pi / 4.0)) < 1e-6 + + +def test_euler_from_quaternion_roundtrip(): + """Converting yaw to quaternion and back should preserve the value.""" + for yaw in [0.0, math.pi / 4, -math.pi / 3, math.pi, -math.pi / 2]: + q = _quaternion_from_yaw(yaw) + recovered = _euler_from_quaternion(q) + diff = abs(math.atan2(math.sin(yaw - recovered), math.cos(yaw - recovered))) + assert diff < 1e-6, f'Yaw {yaw} roundtrip failed: got {recovered}' + + +def test_lerp(): + """Linear interpolation basic checks.""" + assert abs(_lerp(0.0, 10.0, 0.0) - 0.0) < 1e-9 + assert abs(_lerp(0.0, 10.0, 1.0) - 10.0) < 1e-9 + assert abs(_lerp(0.0, 10.0, 0.5) - 5.0) < 1e-9 + + +def test_slerp_yaw(): + """Yaw interpolation basic checks.""" + assert abs(_slerp_yaw(0.0, math.pi, 0.0) - 0.0) < 1e-6 + r = _slerp_yaw(0.0, math.pi / 2, 0.5) + assert abs(r - math.pi / 4) < 1e-6 + + +def test_slerp_yaw_wraparound(): + """Slerp should take the short path around +-pi.""" + # From -170 to 170 degrees should go through 180, not through 0 + a = math.radians(-170) + b = math.radians(170) + mid = _slerp_yaw(a, b, 0.5) + # Should be near +-180 degrees + assert abs(abs(mid) - math.pi) < math.radians(5) diff --git a/topological_nav_simulator/topological_nav_simulator/__init__.py b/topological_nav_simulator/topological_nav_simulator/__init__.py new file mode 100644 index 00000000..f86b3e62 --- /dev/null +++ b/topological_nav_simulator/topological_nav_simulator/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) 2026, topological_navigation contributors +# Licensed under the MIT License. diff --git a/topological_nav_simulator/topological_nav_simulator/fake_nav2_server.py b/topological_nav_simulator/topological_nav_simulator/fake_nav2_server.py new file mode 100644 index 00000000..0134f662 --- /dev/null +++ b/topological_nav_simulator/topological_nav_simulator/fake_nav2_server.py @@ -0,0 +1,460 @@ +# Copyright (c) 2026, topological_navigation contributors +# Licensed under the MIT License. +""" +Fake Nav2 action servers for testing topological navigation. + +Provides NavigateToPose, NavigateThroughPoses, and FollowWaypoints action +servers that simulate robot movement and visualize a virtual robot in RViz. + +The virtual robot: +- Publishes TF (map -> odom -> base_link) so localisation2 works +- Publishes /odometry/global so edge_action_manager2 works +- Shows a coloured cube + direction arrow + trail in RViz +- Moves at a configurable speed toward goal poses + +Usage: + ros2 run topological_nav_simulator fake_nav2_server + ros2 run topological_nav_simulator fake_nav2_server --ros-args \ + -p robot_speed:=1.0 \ + -p initial_x:=0.0 \ + -p initial_y:=0.0 +""" + +import math +import threading +import time + +import rclpy +from rclpy.action import ActionServer, CancelResponse, GoalResponse +from rclpy.callback_groups import ReentrantCallbackGroup +from rclpy.executors import MultiThreadedExecutor +from rclpy.node import Node + +from geometry_msgs.msg import Pose, PoseStamped, Quaternion +from nav2_msgs.action import ( + FollowWaypoints, + NavigateThroughPoses, + NavigateToPose, +) + +from topological_nav_simulator.virtual_robot import ( + VirtualRobot, + _euler_from_quaternion, + _lerp, + _quaternion_from_yaw, + _slerp_yaw, +) + + +class FakeNav2Server(Node): + """ROS 2 node providing fake Nav2 action servers with a virtual robot.""" + + def __init__(self): + super().__init__('fake_nav2_server') + + # --- Parameters --- + self.declare_parameter('robot_speed', 0.8) + self.declare_parameter('angular_speed', 1.5) + self.declare_parameter('goal_tolerance', 0.15) + self.declare_parameter('update_rate', 30.0) + self.declare_parameter('initial_x', 0.0) + self.declare_parameter('initial_y', 0.0) + self.declare_parameter('initial_yaw', 0.0) + self.declare_parameter('map_frame', 'map') + self.declare_parameter('odom_frame', 'odom') + self.declare_parameter('base_frame', 'base_link') + + self._speed = self.get_parameter('robot_speed').value + self._ang_speed = self.get_parameter('angular_speed').value + self._goal_tol = self.get_parameter('goal_tolerance').value + self._rate = self.get_parameter('update_rate').value + init_x = self.get_parameter('initial_x').value + init_y = self.get_parameter('initial_y').value + init_yaw = self.get_parameter('initial_yaw').value + map_frame = self.get_parameter('map_frame').value + odom_frame = self.get_parameter('odom_frame').value + base_frame = self.get_parameter('base_frame').value + + # --- Virtual robot --- + self._robot = VirtualRobot(self, map_frame, base_frame, odom_frame) + initial_pose = Pose() + initial_pose.position.x = float(init_x) + initial_pose.position.y = float(init_y) + initial_pose.orientation = _quaternion_from_yaw(float(init_yaw)) + self._robot.set_pose(initial_pose) + + # Lock for concurrent goal handling + self._nav_lock = threading.Lock() + self._current_goal_handle = None + + # Callback group for action servers + cb_group = ReentrantCallbackGroup() + + # --- Action Servers --- + self._nav_to_pose_server = ActionServer( + self, + NavigateToPose, + 'navigate_to_pose', + execute_callback=self._execute_navigate_to_pose, + goal_callback=self._goal_callback, + cancel_callback=self._cancel_callback, + callback_group=cb_group, + ) + + self._nav_through_poses_server = ActionServer( + self, + NavigateThroughPoses, + 'navigate_through_poses', + execute_callback=self._execute_navigate_through_poses, + goal_callback=self._goal_callback, + cancel_callback=self._cancel_callback, + callback_group=cb_group, + ) + + self._follow_waypoints_server = ActionServer( + self, + FollowWaypoints, + 'follow_waypoints', + execute_callback=self._execute_follow_waypoints, + goal_callback=self._goal_callback, + cancel_callback=self._cancel_callback, + callback_group=cb_group, + ) + + # --- Initial pose subscriber (RViz 2D Pose Estimate) --- + self.create_subscription( + PoseStamped, + '/initialpose', + self._initialpose_cb, + 10, + ) + + # --- Periodic TF + marker publishing (even when idle) --- + timer_period = 1.0 / self._rate + self._pub_timer = self.create_timer(timer_period, self._publish_tick) + + self.get_logger().info( + '=== Fake Nav2 Server Started ===\n' + f' Speed: {self._speed} m/s | Angular: {self._ang_speed} rad/s\n' + f' Tolerance: {self._goal_tol} m | Rate: {self._rate} Hz\n' + f' Initial pose: ({init_x:.2f}, {init_y:.2f}, yaw={init_yaw:.2f})\n' + f' Action servers:\n' + f' /navigate_to_pose\n' + f' /navigate_through_poses\n' + f' /follow_waypoints\n' + f' Topics published:\n' + f' /odometry/global\n' + f' /virtual_robot/markers\n' + f' /virtual_robot/pose\n' + f' TF: {map_frame} -> {odom_frame} -> {base_frame}' + ) + + # ── Callbacks ──────────────────────────────────────────────────────── + + def _goal_callback(self, goal_request): + """Accept all incoming goals.""" + self.get_logger().info('Goal received') + return GoalResponse.ACCEPT + + def _cancel_callback(self, goal_handle): + """Accept all cancel requests.""" + self.get_logger().info('Cancel requested') + return CancelResponse.ACCEPT + + def _initialpose_cb(self, msg): + """Teleport robot to initial pose from RViz 2D Pose Estimate.""" + self.get_logger().info( + f'Teleporting robot to ({msg.pose.position.x:.2f}, ' + f'{msg.pose.position.y:.2f})' + ) + self._robot.set_pose(msg.pose) + self._robot.clear_trail() + + def _publish_tick(self): + """Periodic broadcast of TF and markers (even when idle).""" + self._robot.publish_all() + + # ── NavigateToPose ─────────────────────────────────────────────────── + + def _execute_navigate_to_pose(self, goal_handle): + """Execute NavigateToPose action — move to a single goal.""" + self.get_logger().info( + f'NavigateToPose -> ' + f'({goal_handle.request.pose.pose.position.x:.2f}, ' + f'{goal_handle.request.pose.pose.position.y:.2f})' + ) + + target = goal_handle.request.pose.pose + success = self._move_to_pose(target, goal_handle, 'NavigateToPose') + + result = NavigateToPose.Result() + if success: + goal_handle.succeed() + self.get_logger().info('NavigateToPose succeeded') + elif goal_handle.is_cancel_requested or goal_handle.status == 5: + # Already transitioned to CANCELED inside _move_to_pose + self.get_logger().info('NavigateToPose cancelled') + else: + goal_handle.abort() + self.get_logger().warn('NavigateToPose aborted') + return result + + # ── NavigateThroughPoses ───────────────────────────────────────────── + + def _execute_navigate_through_poses(self, goal_handle): + """Execute NavigateThroughPoses — move through a list of poses.""" + poses = goal_handle.request.poses + self.get_logger().info( + f'NavigateThroughPoses -> {len(poses)} waypoint(s)' + ) + + success = True + for i, pose_stamped in enumerate(poses): + self.get_logger().info( + f' Waypoint {i + 1}/{len(poses)}: ' + f'({pose_stamped.pose.position.x:.2f}, ' + f'{pose_stamped.pose.position.y:.2f})' + ) + if not self._move_to_pose( + pose_stamped.pose, goal_handle, + f'NavigateThroughPoses [{i + 1}/{len(poses)}]' + ): + success = False + break + + result = NavigateThroughPoses.Result() + if success: + goal_handle.succeed() + self.get_logger().info('NavigateThroughPoses succeeded') + elif goal_handle.is_cancel_requested or goal_handle.status == 5: + # Already transitioned to CANCELED inside _move_to_pose + self.get_logger().info('NavigateThroughPoses cancelled') + else: + goal_handle.abort() + self.get_logger().warn('NavigateThroughPoses aborted') + return result + + # ── FollowWaypoints ────────────────────────────────────────────────── + + def _execute_follow_waypoints(self, goal_handle): + """Execute FollowWaypoints — move through waypoints sequentially.""" + poses = goal_handle.request.poses + self.get_logger().info( + f'FollowWaypoints -> {len(poses)} waypoint(s)' + ) + + missed = [] + for i, pose_stamped in enumerate(poses): + self.get_logger().info( + f' Waypoint {i + 1}/{len(poses)}: ' + f'({pose_stamped.pose.position.x:.2f}, ' + f'{pose_stamped.pose.position.y:.2f})' + ) + if not self._move_to_pose( + pose_stamped.pose, goal_handle, + f'FollowWaypoints [{i + 1}/{len(poses)}]' + ): + missed.append(i) + break + + result = FollowWaypoints.Result() + result.missed_waypoints = missed + if not missed: + goal_handle.succeed() + self.get_logger().info('FollowWaypoints succeeded') + elif goal_handle.is_cancel_requested or goal_handle.status == 5: + # Already transitioned to CANCELED inside _move_to_pose + self.get_logger().info('FollowWaypoints cancelled') + else: + goal_handle.abort() + self.get_logger().warn( + f'FollowWaypoints aborted (missed: {missed})' + ) + return result + + # ── Core movement simulation ───────────────────────────────────────── + + def _move_to_pose(self, target_pose, goal_handle, action_label): + """ + Simulate robot movement from current pose to target pose. + + The robot first rotates to face the target, then drives in a + straight line, and finally rotates to the goal orientation. + Returns True on success, False if cancelled. + """ + dt = 1.0 / self._rate + + # Phase 1: Rotate to face the target + if not self._rotate_toward_target(target_pose, goal_handle, dt): + return False + + # Phase 2: Drive to the target position + if not self._drive_to_position(target_pose, goal_handle, dt, action_label): + return False + + # Phase 3: Rotate to final orientation + if not self._rotate_to_orientation(target_pose, goal_handle, dt): + return False + + return True + + def _rotate_toward_target(self, target_pose, goal_handle, dt): + """Rotate the robot to face the target position.""" + dx = target_pose.position.x - self._robot.pose.position.x + dy = target_pose.position.y - self._robot.pose.position.y + dist = math.hypot(dx, dy) + + if dist < self._goal_tol: + return True # Already close, skip rotation + + target_yaw = math.atan2(dy, dx) + current_yaw = _euler_from_quaternion(self._robot.pose.orientation) + yaw_diff = math.atan2( + math.sin(target_yaw - current_yaw), + math.cos(target_yaw - current_yaw), + ) + + if abs(yaw_diff) < 0.05: + return True # Close enough + + rotation_time = abs(yaw_diff) / self._ang_speed + steps = max(int(rotation_time / dt), 1) + start_yaw = current_yaw + + for i in range(1, steps + 1): + if goal_handle.is_cancel_requested: + goal_handle.canceled() + return False + t = float(i) / steps + yaw = _slerp_yaw(start_yaw, target_yaw, t) + self._robot.pose.orientation = _quaternion_from_yaw(yaw) + time.sleep(dt) + + return True + + def _drive_to_position(self, target_pose, goal_handle, dt, action_label): + """Drive the robot in a straight line toward the target.""" + while True: + if goal_handle.is_cancel_requested: + goal_handle.canceled() + return False + + dx = target_pose.position.x - self._robot.pose.position.x + dy = target_pose.position.y - self._robot.pose.position.y + dist = math.hypot(dx, dy) + + if dist < self._goal_tol: + # Snap to exact position + self._robot.pose.position.x = target_pose.position.x + self._robot.pose.position.y = target_pose.position.y + return True + + # Move toward target + step = min(self._speed * dt, dist) + angle = math.atan2(dy, dx) + self._robot.pose.position.x += step * math.cos(angle) + self._robot.pose.position.y += step * math.sin(angle) + self._robot.pose.orientation = _quaternion_from_yaw(angle) + + # Publish feedback + self._publish_feedback(goal_handle, action_label, dist) + + time.sleep(dt) + + def _rotate_to_orientation(self, target_pose, goal_handle, dt): + """Rotate the robot to the goal's final orientation.""" + target_yaw = _euler_from_quaternion(target_pose.orientation) + current_yaw = _euler_from_quaternion(self._robot.pose.orientation) + yaw_diff = math.atan2( + math.sin(target_yaw - current_yaw), + math.cos(target_yaw - current_yaw), + ) + + if abs(yaw_diff) < 0.05: + self._robot.pose.orientation = target_pose.orientation + return True + + rotation_time = abs(yaw_diff) / self._ang_speed + steps = max(int(rotation_time / dt), 1) + start_yaw = current_yaw + + for i in range(1, steps + 1): + if goal_handle.is_cancel_requested: + goal_handle.canceled() + return False + t = float(i) / steps + yaw = _slerp_yaw(start_yaw, target_yaw, t) + self._robot.pose.orientation = _quaternion_from_yaw(yaw) + time.sleep(dt) + + self._robot.pose.orientation = target_pose.orientation + return True + + def _publish_feedback(self, goal_handle, label, distance_remaining): + """Publish action feedback with distance remaining.""" + # NavigateToPose and NavigateThroughPoses have different feedback types + # but both have a current_pose field and distance_remaining + try: + # Try NavigateThroughPoses feedback + feedback = NavigateThroughPoses.Feedback() + feedback.current_pose = PoseStamped() + feedback.current_pose.header.frame_id = ( + self.get_parameter('map_frame').value + ) + feedback.current_pose.header.stamp = ( + self.get_clock().now().to_msg() + ) + feedback.current_pose.pose = self._robot.pose + feedback.distance_remaining = float(distance_remaining) + goal_handle.publish_feedback(feedback) + except Exception: + # Fallback: try NavigateToPose feedback + try: + feedback = NavigateToPose.Feedback() + feedback.current_pose = PoseStamped() + feedback.current_pose.header.frame_id = ( + self.get_parameter('map_frame').value + ) + feedback.current_pose.header.stamp = ( + self.get_clock().now().to_msg() + ) + feedback.current_pose.pose = self._robot.pose + feedback.distance_remaining = float(distance_remaining) + goal_handle.publish_feedback(feedback) + except Exception: + pass # FollowWaypoints has different feedback + + +def main(args=None): + """Entry point.""" + rclpy.init(args=args) + node = None + executor = None + + try: + node = FakeNav2Server() + executor = MultiThreadedExecutor(num_threads=4) + executor.add_node(node) + executor.spin() + except KeyboardInterrupt: + pass + finally: + try: + if executor is not None and node is not None: + executor.remove_node(node) + except Exception: + pass + try: + if node is not None: + node.destroy_node() + except Exception: + pass + try: + if rclpy.ok(): + rclpy.shutdown() + except Exception: + pass + + +if __name__ == '__main__': + main() diff --git a/topological_nav_simulator/topological_nav_simulator/virtual_robot.py b/topological_nav_simulator/topological_nav_simulator/virtual_robot.py new file mode 100644 index 00000000..1da6a4bf --- /dev/null +++ b/topological_nav_simulator/topological_nav_simulator/virtual_robot.py @@ -0,0 +1,231 @@ +# Copyright (c) 2026, topological_navigation contributors +# Licensed under the MIT License. +"""Virtual robot that tracks simulated pose, publishes TF and RViz markers.""" + +import math + +import rclpy +from geometry_msgs.msg import ( + Point, + Pose, + PoseStamped, + Quaternion, + TransformStamped, + Vector3, +) +from nav_msgs.msg import Odometry +from std_msgs.msg import ColorRGBA, Header +from tf2_ros import TransformBroadcaster +from visualization_msgs.msg import Marker, MarkerArray + + +def _euler_from_quaternion(q): + """Extract yaw from quaternion (z-axis rotation).""" + siny_cosp = 2.0 * (q.w * q.z + q.x * q.y) + cosy_cosp = 1.0 - 2.0 * (q.y * q.y + q.z * q.z) + return math.atan2(siny_cosp, cosy_cosp) + + +def _quaternion_from_yaw(yaw): + """Create quaternion from yaw angle.""" + return Quaternion(x=0.0, y=0.0, z=math.sin(yaw / 2.0), w=math.cos(yaw / 2.0)) + + +def _lerp(a, b, t): + """Linear interpolation between a and b.""" + return a + (b - a) * t + + +def _slerp_yaw(yaw_a, yaw_b, t): + """Spherical linear interpolation for yaw angles.""" + diff = yaw_b - yaw_a + # Normalize to [-pi, pi] + diff = math.atan2(math.sin(diff), math.cos(diff)) + return yaw_a + diff * t + + +class VirtualRobot: + """Manages virtual robot state, TF broadcasting, and RViz marker publishing.""" + + def __init__(self, node, map_frame, base_frame, odom_frame): + self._node = node + self._map_frame = map_frame + self._base_frame = base_frame + self._odom_frame = odom_frame + + # Current pose + self.pose = Pose() + self.pose.orientation.w = 1.0 + + # TF broadcaster + self._tf_broadcaster = TransformBroadcaster(node) + + # Publishers + self._marker_pub = node.create_publisher( + MarkerArray, '/virtual_robot/markers', 10 + ) + self._odom_pub = node.create_publisher( + Odometry, '/odometry/global', 10 + ) + self._pose_pub = node.create_publisher( + PoseStamped, '/virtual_robot/pose', 10 + ) + + # Trail of past positions for visualization + self._trail_points = [] + self._max_trail_points = 500 + + node.get_logger().info( + f'Virtual robot initialized: {map_frame} -> {odom_frame} -> {base_frame}' + ) + + def set_pose(self, pose): + """Set the robot pose directly.""" + self.pose = pose + + def publish_all(self): + """Publish TF, odometry, markers, and pose.""" + now = self._node.get_clock().now().to_msg() + self._publish_tf(now) + self._publish_odometry(now) + self._publish_pose(now) + self._publish_markers(now) + + def _publish_tf(self, stamp): + """Broadcast map->odom (identity) and odom->base_link transforms.""" + # map -> odom (identity) + t_map_odom = TransformStamped() + t_map_odom.header.stamp = stamp + t_map_odom.header.frame_id = self._map_frame + t_map_odom.child_frame_id = self._odom_frame + t_map_odom.transform.rotation.w = 1.0 + + # odom -> base_link (robot pose) + t_odom_base = TransformStamped() + t_odom_base.header.stamp = stamp + t_odom_base.header.frame_id = self._odom_frame + t_odom_base.child_frame_id = self._base_frame + t_odom_base.transform.translation.x = self.pose.position.x + t_odom_base.transform.translation.y = self.pose.position.y + t_odom_base.transform.translation.z = self.pose.position.z + t_odom_base.transform.rotation = self.pose.orientation + + self._tf_broadcaster.sendTransform([t_map_odom, t_odom_base]) + + def _publish_odometry(self, stamp): + """Publish odometry message.""" + odom = Odometry() + odom.header.stamp = stamp + odom.header.frame_id = self._odom_frame + odom.child_frame_id = self._base_frame + odom.pose.pose = self.pose + self._odom_pub.publish(odom) + + def _publish_pose(self, stamp): + """Publish pose stamped.""" + ps = PoseStamped() + ps.header.stamp = stamp + ps.header.frame_id = self._map_frame + ps.pose = self.pose + self._pose_pub.publish(ps) + + def _publish_markers(self, stamp): + """Publish RViz markers for the virtual robot.""" + markers = MarkerArray() + header = Header(stamp=stamp, frame_id=self._map_frame) + + # --- Robot body: a cube --- + body = Marker() + body.header = header + body.ns = 'virtual_robot' + body.id = 0 + body.type = Marker.CUBE + body.action = Marker.ADD + body.pose = self.pose + body.scale = Vector3(x=0.5, y=0.3, z=0.3) + body.color = ColorRGBA(r=0.1, g=0.7, b=1.0, a=0.9) + body.lifetime.sec = 0 + markers.markers.append(body) + + # --- Direction arrow --- + arrow = Marker() + arrow.header = header + arrow.ns = 'virtual_robot' + arrow.id = 1 + arrow.type = Marker.ARROW + arrow.action = Marker.ADD + arrow.pose = self.pose + arrow.scale = Vector3(x=0.6, y=0.12, z=0.12) + arrow.color = ColorRGBA(r=1.0, g=0.3, b=0.1, a=0.9) + arrow.lifetime.sec = 0 + markers.markers.append(arrow) + + # --- Label text --- + label = Marker() + label.header = header + label.ns = 'virtual_robot' + label.id = 2 + label.type = Marker.TEXT_VIEW_FACING + label.action = Marker.ADD + label.pose = Pose() + label.pose.position.x = self.pose.position.x + label.pose.position.y = self.pose.position.y + label.pose.position.z = self.pose.position.z + 0.5 + label.pose.orientation.w = 1.0 + label.scale = Vector3(x=0.0, y=0.0, z=0.2) + label.color = ColorRGBA(r=1.0, g=1.0, b=1.0, a=1.0) + label.text = '\U0001F916 Sim Robot' + label.lifetime.sec = 0 + markers.markers.append(label) + + # --- Footprint ring (circle of small spheres) --- + footprint = Marker() + footprint.header = header + footprint.ns = 'virtual_robot' + footprint.id = 3 + footprint.type = Marker.LINE_STRIP + footprint.action = Marker.ADD + footprint.pose = self.pose + footprint.scale = Vector3(x=0.03, y=0.0, z=0.0) + footprint.color = ColorRGBA(r=0.1, g=1.0, b=0.3, a=0.6) + num_pts = 32 + radius = 0.35 + for i in range(num_pts + 1): + angle = 2.0 * math.pi * i / num_pts + pt = Point( + x=radius * math.cos(angle), + y=radius * math.sin(angle), + z=0.0, + ) + footprint.points.append(pt) + footprint.lifetime.sec = 0 + markers.markers.append(footprint) + + # --- Trail (breadcrumb path) --- + self._trail_points.append(Point( + x=self.pose.position.x, + y=self.pose.position.y, + z=0.02, + )) + if len(self._trail_points) > self._max_trail_points: + self._trail_points = self._trail_points[-self._max_trail_points:] + + if len(self._trail_points) > 1: + trail = Marker() + trail.header = header + trail.ns = 'virtual_robot' + trail.id = 4 + trail.type = Marker.LINE_STRIP + trail.action = Marker.ADD + trail.pose.orientation.w = 1.0 + trail.scale = Vector3(x=0.04, y=0.0, z=0.0) + trail.color = ColorRGBA(r=0.3, g=0.3, b=1.0, a=0.4) + trail.points = list(self._trail_points) + trail.lifetime.sec = 0 + markers.markers.append(trail) + + self._marker_pub.publish(markers) + + def clear_trail(self): + """Clear the breadcrumb trail.""" + self._trail_points.clear() diff --git a/topological_navigation/README.md b/topological_navigation/README.md index b9e97d0f..6021d344 100644 --- a/topological_navigation/README.md +++ b/topological_navigation/README.md @@ -1,9 +1,40 @@ Topological Navigation ====================== +> **⚠️ IMPORTANT: ROS2 Version** +> This is the ROS2 version of topological navigation (v4.0.0+). All ROS1 code has been removed. +> For ROS1 support, use version 3.x or earlier. + + +## Interactive Map Editor (NEW in v4.0.0) + +A Python-based tool for editing topological maps visually in RViz2: + +```bash +# Launch the editor +ros2 launch topological_navigation interactive_map_editor.launch.py \ + map_file:=/path/to/your/map.tmap2.yaml + +# Open RViz2 and add Interactive Markers display +rviz2 +``` + +Features: +- ✅ Move node positions by dragging markers +- ✅ Rotate node orientations using rotation controls +- ✅ Real-time visual feedback +- ✅ Save changes back to YAML files +- ✅ Auto-save option + +--- + **These instructions are intended for the legacy branch of topological navigation. Instructions for the master branch (topological navigation 2) are to do.** -This node provides support for topological navigation in the STRANDS system. +This package provides support for topological navigation, originally devised for the STRANDS system. + +## Flexible Properties System + +The topological map schema now supports a flexible properties system that allows you to attach custom metadata to nodes and edges without requiring schema modifications. This enables domain-specific customization such as setting navigation tolerances, semantic labels, operational zones, and application-specific attributes. This module requires: * move_base diff --git a/topological_navigation/config/bt_tree_default.xml b/topological_navigation/config/bt_tree_default.xml deleted file mode 100644 index 76464f11..00000000 --- a/topological_navigation/config/bt_tree_default.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/topological_navigation/config/bt_tree_goal_align.xml b/topological_navigation/config/bt_tree_goal_align.xml deleted file mode 100644 index a6341f23..00000000 --- a/topological_navigation/config/bt_tree_goal_align.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/topological_navigation/config/bt_tree_in_row.xml b/topological_navigation/config/bt_tree_in_row.xml deleted file mode 100644 index f87538dc..00000000 --- a/topological_navigation/config/bt_tree_in_row.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/topological_navigation/config/bt_tree_in_row_operation.xml b/topological_navigation/config/bt_tree_in_row_operation.xml deleted file mode 100644 index 1387f230..00000000 --- a/topological_navigation/config/bt_tree_in_row_operation.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/topological_navigation/config/bt_tree_in_row_recovery.xml b/topological_navigation/config/bt_tree_in_row_recovery.xml deleted file mode 100644 index 1387f230..00000000 --- a/topological_navigation/config/bt_tree_in_row_recovery.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/topological_navigation/config/navigation-config-schema.yaml b/topological_navigation/config/navigation-config-schema.yaml new file mode 100644 index 00000000..62c15306 --- /dev/null +++ b/topological_navigation/config/navigation-config-schema.yaml @@ -0,0 +1,56 @@ +$schema: http://json-schema.org/draft-07/schema# +title: Topological Navigation Config Schema +description: Schema for a sidecar YAML file containing topological action and definition configuration. +type: object +required: + - definitions + - actions +additionalProperties: false +properties: + definitions: + type: object + description: Named reusable values referenced from action templates, commonly Behaviour Tree XML strings. + additionalProperties: + type: string + actions: + type: object + description: Named edge action configurations used by the topological navigation map. + minProperties: 1 + additionalProperties: + type: object + required: + - action_type + - action_server + - action_goal_template + additionalProperties: true + properties: + composable: + type: boolean + description: Whether consecutive edges with this action can be composed into one goal. + action_type: + type: string + minLength: 1 + pattern: ^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)+$ + description: Dotted Python import path for the ROS 2 action type. + action_server: + type: string + minLength: 1 + description: ROS 2 action server name. + set_ros_params: + description: >- + ROS 2 parameters applied while this action executes and restored afterwards. + Either a node-keyed mapping ({node: {param: value}}), a flat {param: value} + mapping targeting the goal-checker node, or a list of + {node, param, value} / {node, params} entries. Edge-level 'set_ros_params' + overrides these per node/parameter. + oneOf: + - type: object + additionalProperties: true + - type: array + items: + type: object + additionalProperties: true + action_goal_template: + type: object + description: Goal template matching the selected action goal structure. + additionalProperties: true diff --git a/topological_navigation/config/navigation_goal.yaml b/topological_navigation/config/navigation_goal.yaml deleted file mode 100644 index 7da02e70..00000000 --- a/topological_navigation/config/navigation_goal.yaml +++ /dev/null @@ -1,8 +0,0 @@ -topological_navigation/navigation_goal: - action_type: geometry_msgs/PoseStamped - action: NavigateToPose - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose diff --git a/topological_navigation/config/sample_edge_reconfig_groups.yaml b/topological_navigation/config/sample_edge_reconfig_groups.yaml deleted file mode 100644 index d3010d48..00000000 --- a/topological_navigation/config/sample_edge_reconfig_groups.yaml +++ /dev/null @@ -1,141 +0,0 @@ -edge_nav_reconfig_groups: - group_A: - edges: [] - parameters: - - &id001 - name: forward_point_distance - ns: move_base/DWAPlannerROS - type: double - value: 0.48297542551971 - - &id002 - name: vth_samples - ns: move_base/DWAPlannerROS - type: int - value: 67.0 - - &id003 - name: prune_plan - ns: move_base/DWAPlannerROS - type: bool - value: true - - &id004 - name: goal_distance_bias - ns: move_base/DWAPlannerROS - type: double - value: 37.0 - - &id005 - name: occdist_scale - ns: move_base/DWAPlannerROS - type: double - value: 0.17095456476021975 - - &id006 - name: vx_samples - ns: move_base/DWAPlannerROS - type: int - value: 35.0 - - &id007 - name: path_distance_bias - ns: move_base/DWAPlannerROS - type: double - value: 28.786107042177363 - - &id008 - name: sim_time - ns: move_base/DWAPlannerROS - type: double - value: 2.56592652856906 - - &id009 - name: max_scaling_factor - ns: move_base/DWAPlannerROS - type: double - value: 0.572649261744206 - - &id010 - name: scaling_speed - ns: move_base/DWAPlannerROS - type: double - value: 0.013910991085600694 - - &id011 - name: sim_granularity - ns: move_base/DWAPlannerROS - type: double - value: 0.04403610426260697 - - &id012 - name: stop_time_buffer - ns: move_base/DWAPlannerROS - type: double - value: 0.18229162576485147 - - &id013 - name: oscillation_reset_dist - ns: move_base/DWAPlannerROS - type: double - value: 0.015779064792816565 - group_B: - edges: [] - parameters: - - *id001 - - *id002 - - *id003 - - *id004 - - *id005 - - *id006 - - *id007 - - *id008 - - *id009 - - *id010 - - *id011 - - *id012 - - *id013 - group_C: - edges: [] - parameters: - - name: forward_point_distance - ns: move_base/DWAPlannerROS - type: double - value: 0.1402690117118645 - - name: vth_samples - ns: move_base/DWAPlannerROS - type: int - value: 73.0 - - name: prune_plan - ns: move_base/DWAPlannerROS - type: bool - value: false - - name: goal_distance_bias - ns: move_base/DWAPlannerROS - type: double - value: 55.0 - - name: occdist_scale - ns: move_base/DWAPlannerROS - type: double - value: 0.5922531975286119 - - name: vx_samples - ns: move_base/DWAPlannerROS - type: int - value: 50.0 - - name: path_distance_bias - ns: move_base/DWAPlannerROS - type: double - value: 7.0 - - name: sim_time - ns: move_base/DWAPlannerROS - type: double - value: 2.801314735789211 - - name: max_scaling_factor - ns: move_base/DWAPlannerROS - type: double - value: 0.8779488542935023 - - name: scaling_speed - ns: move_base/DWAPlannerROS - type: double - value: 0.31177421746048395 - - name: sim_granularity - ns: move_base/DWAPlannerROS - type: double - value: 0.02537100021859829 - - name: stop_time_buffer - ns: move_base/DWAPlannerROS - type: double - value: 1.0 - - name: oscillation_reset_dist - ns: move_base/DWAPlannerROS - type: double - value: 0.054441156382406555 - diff --git a/topological_navigation/config/template_action.yaml b/topological_navigation/config/template_action.yaml new file mode 100644 index 00000000..b018d31f --- /dev/null +++ b/topological_navigation/config/template_action.yaml @@ -0,0 +1,22 @@ +definitions: + default_bt: | + + + + + + + + + +actions: + navigate_to_pose: + composable: false + action_type: nav2_msgs.action.NavigateToPose + action_server: /navigate_to_pose + action_goal_template: + pose: # Nested to match geometry_msgs/PoseStamped + header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.default_bt}' \ No newline at end of file diff --git a/topological_navigation/config/template_edge.yaml b/topological_navigation/config/template_edge.yaml index 12bd5a47..4b02da1d 100644 --- a/topological_navigation/config/template_edge.yaml +++ b/topological_navigation/config/template_edge.yaml @@ -1,15 +1,4 @@ -action: move_base -action_type: move_base_msgs/MoveBaseGoal -config: [] +action: navigate_to_pose edge_id: origin_destination -fail_policy: fail -fluid_navigation: True -goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose node: destination -recovery_behaviours_config: '' -restrictions_planning: 'True' -restrictions_runtime: 'True' \ No newline at end of file +properties: {} \ No newline at end of file diff --git a/topological_navigation/config/template_node.yaml b/topological_navigation/config/template_node.yaml new file mode 100644 index 00000000..a57a658f --- /dev/null +++ b/topological_navigation/config/template_node.yaml @@ -0,0 +1,30 @@ +meta: + map: map_2d + node: NodeName + pointset: PointSet +node: + edges: [] + name: NodeName + nav_frame: map + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 6.29 + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 \ No newline at end of file diff --git a/topological_navigation/config/template_node_2.yaml b/topological_navigation/config/template_node_2.yaml deleted file mode 100644 index 16684d7e..00000000 --- a/topological_navigation/config/template_node_2.yaml +++ /dev/null @@ -1,41 +0,0 @@ -meta: - map: map_2d - node: NodeName - pointset: PointSet -node: - edges: [] - localise_by_topic: '' - name: NodeName - parent_frame: map - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.29 - restrictions_planning: 'True' - restrictions_runtime: 'True' - verts: - - x: 0.689999997616 - y: 0.287000000477 - - x: 0.287000000477 - y: 0.490000009537 - - x: -0.287000000477 - y: 0.490000009537 - - x: -0.689999997616 - y: 0.287000000477 - - x: -0.689999997616 - y: -0.287000000477 - - x: -0.287000000477 - y: -0.490000009537 - - x: 0.287000000477 - y: -0.490000009537 - - x: 0.689999997616 - y: -0.287000000477 \ No newline at end of file diff --git a/topological_navigation/config/test_complex_tmap2.yaml b/topological_navigation/config/test_complex_tmap2.yaml new file mode 100644 index 00000000..134e8ab7 --- /dev/null +++ b/topological_navigation/config/test_complex_tmap2.yaml @@ -0,0 +1,1172 @@ +# ============================================================================= +# Complex topological map for comprehensive navigation testing. +# +# Layout (top-down view): +# +# TopicNode Isolated +# (-5,0) (30,0) +# | +# Charging ──nav──► HN1 ──nav_poses──► HN2 ──nav_poses──► HN3 ──nav──► WP_E +# (0,0) (5,0) (10,0) (15,0) (20,0) +# ▲ │ ▲ │ ▲ │ ▲ │ +# │ nav nav nav nav nav nav nav +# │ ▼ │ ▼ │ ▼ │ │ +# │ RowA0 │ RowB0 │ RowC0 │ ▼ +# │ (5,-3)│ (10,-3) │ (15,-3) │ AlignDock +# │ │ │ │ │ │ │ (20,-10) +# │ row │ row │ row │ +# │ │ │ │ │ │ │ +# │ ▼ │ ▼ │ ▼ │ +# │ RowA1 │ RowB1 │ RowC1 │ +# │ (5,-8)│ (10,-8) │ (15,-8) │ +# │ │ │ │ │ │ │ +# │ row │ row │ row │ +# │ │ │ │ │ │ │ +# │ ▼ │ ▼ │ ▼ │ +# │ RowA2 │ RowB2 │ RowC2 │ +# │ (5,-13)│ (10,-13) │ (15,-13) │ +# │ │ │ │ │ │ │ +# │ row │ row │ row │ +# │ │ │ │ │ │ │ +# │ ▼ │ ▼ │ ▼ │ +# │ RowA3 │ RowB3 │ RowC3 │ +# │ (5,-18)│ (10,-18) │ (15,-18) │ +# │ │ │ │ NoGo +# │ align align align (25,-10) +# │ ▼ ▼ ▼ +# │ HS1 ──nav_poses──► HS2 ──nav_poses──► HS3 ──nav──► WP_SE +# │ (5,-20) (10,-20) (15,-20) (20,-20) +# │ │ │ +# └──────nav─────┘ │ +# ◄────────────nav─────────────┘ +# +# Edge types used: +# navigate_to_pose (non-composable) – headland links, junctions +# navigate_to_poses (composable) – headland traversals, multi-waypoint +# row_traversal (composable) – crop row segments with boundaries +# goal_align (non-composable) – precision docking / row exit alignment +# +# Bidirectional edges: HN1↔HN2, HN2↔HN3, HS1↔HS2, HS2↔HS3, +# HN1↔RowA0, HN2↔RowB0, HN3↔RowC0, +# WP_E↔WP_SE, Charging↔HN1 +# Unidirectional edges: row traversals (southward only), +# align exits (row end → headland south), +# HN3→WP_E, WP_E→AlignDock, HS1→Charging, +# WP_SE→Charging +# +# Special nodes: +# Isolated – disconnected (connectivity test) +# NoGo – no_go: true (restricted area) +# TopicNode – localise_by_topic (topic-based localisation) +# AlignDock – dead-end precision docking target +# ============================================================================= + +meta: + last_updated: 09-03-2026_12-00-00 + origin: + latitude: 53.268642038 + longitude: -0.524509505881 + altitude: 0 + +metric_map: complex_nav_test +name: complex_nav_test +pointset: complex_nav_test + +transformation: + topo_frame_id: complex_nav_test + parent: map + rotation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + translation: + x: 0.0 + y: 0.0 + z: 0.0 + +# ───────────────────────────────────────────────────────────────────────────── +# Nodes +# ───────────────────────────────────────────────────────────────────────────── +nodes: + + # ========================= Charging Station ================================ + - meta: + map: complex_nav_test + node: Charging + pointset: complex_nav_test + tag: ['charging_station', 'home'] + node: + edges: + # Bidirectional: Charging <-> HN1 + - action: navigate_to_pose + edge_id: Charging_HN1 + node: HN1 + properties: + max_speed: 1.0 + name: Charging + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.1 + yaw_goal_tolerance: 0.05 + semantics: charging_station + priority: 10 + verts: + - x: -1.5 + y: -1.5 + - x: 1.5 + y: -1.5 + - x: 1.5 + y: 1.5 + - x: -1.5 + y: 1.5 + + # ==================== Headland North ======================================= + - meta: + map: complex_nav_test + node: HN1 + pointset: complex_nav_test + tag: ['headland', 'junction'] + node: + edges: + # Bidirectional: HN1 <-> Charging + - action: navigate_to_pose + edge_id: HN1_Charging + node: Charging + properties: + max_speed: 1.0 + # Bidirectional: HN1 <-> HN2 (composable navigate_to_poses) + - action: navigate_to_poses + edge_id: HN1_HN2 + node: HN2 + properties: + max_speed: 0.8 + # Unidirectional: HN1 -> RowA0 (enter row A from north) + - action: navigate_to_pose + edge_id: HN1_RowA0 + node: RowA0 + properties: + max_speed: 0.5 + name: HN1 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 5.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + semantics: headland_junction + verts: + - x: -1.0 + y: -1.0 + - x: 1.0 + y: -1.0 + - x: 1.0 + y: 1.0 + - x: -1.0 + y: 1.0 + + - meta: + map: complex_nav_test + node: HN2 + pointset: complex_nav_test + tag: ['headland', 'junction'] + node: + edges: + # Bidirectional: HN2 <-> HN1 + - action: navigate_to_poses + edge_id: HN2_HN1 + node: HN1 + properties: + max_speed: 0.8 + # Bidirectional: HN2 <-> HN3 + - action: navigate_to_poses + edge_id: HN2_HN3 + node: HN3 + properties: + max_speed: 0.8 + # Unidirectional: HN2 -> RowB0 (enter row B from north) + - action: navigate_to_pose + edge_id: HN2_RowB0 + node: RowB0 + properties: + max_speed: 0.5 + name: HN2 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 10.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + semantics: headland_junction + verts: + - x: -1.0 + y: -1.0 + - x: 1.0 + y: -1.0 + - x: 1.0 + y: 1.0 + - x: -1.0 + y: 1.0 + + - meta: + map: complex_nav_test + node: HN3 + pointset: complex_nav_test + tag: ['headland', 'junction'] + node: + edges: + # Bidirectional: HN3 <-> HN2 + - action: navigate_to_poses + edge_id: HN3_HN2 + node: HN2 + properties: + max_speed: 0.8 + # Unidirectional: HN3 -> RowC0 (enter row C from north) + - action: navigate_to_pose + edge_id: HN3_RowC0 + node: RowC0 + properties: + max_speed: 0.5 + # Unidirectional: HN3 -> WP_E + - action: navigate_to_pose + edge_id: HN3_WP_E + node: WP_E + properties: + max_speed: 0.8 + name: HN3 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 15.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + semantics: headland_junction + verts: + - x: -1.0 + y: -1.0 + - x: 1.0 + y: -1.0 + - x: 1.0 + y: 1.0 + - x: -1.0 + y: 1.0 + + # ========================= Row A (x=5) ==================================== + - meta: + map: complex_nav_test + node: RowA0 + pointset: complex_nav_test + tag: ['row_entry'] + node: + edges: + # Bidirectional: RowA0 -> HN1 (return to headland) + - action: navigate_to_pose + edge_id: RowA0_HN1 + node: HN1 + properties: + max_speed: 0.5 + # Unidirectional: RowA0 -> RowA1 (row traversal south) + - action: row_traversal + edge_id: RowA0_RowA1 + node: RowA1 + properties: + boundary_left: 0.4 + boundary_right: 0.4 + max_speed: 0.3 + row_type: vineyard + name: RowA0 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: -0.707 + position: + x: 5.0 + y: -3.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.15 + yaw_goal_tolerance: 0.05 + semantics: row_entry + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: complex_nav_test + node: RowA1 + pointset: complex_nav_test + tag: ['row_mid'] + node: + edges: + # Unidirectional: RowA1 -> RowA2 (continue row traversal) + - action: row_traversal + edge_id: RowA1_RowA2 + node: RowA2 + properties: + boundary_left: 0.4 + boundary_right: 0.4 + max_speed: 0.3 + row_type: vineyard + name: RowA1 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: -0.707 + position: + x: 5.0 + y: -8.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.15 + yaw_goal_tolerance: 0.1 + semantics: row_mid + verts: + - x: -0.4 + y: -0.4 + - x: 0.4 + y: -0.4 + - x: 0.4 + y: 0.4 + - x: -0.4 + y: 0.4 + + - meta: + map: complex_nav_test + node: RowA2 + pointset: complex_nav_test + tag: ['row_mid'] + node: + edges: + # Unidirectional: RowA2 -> RowA3 (continue row traversal) + - action: row_traversal + edge_id: RowA2_RowA3 + node: RowA3 + properties: + boundary_left: 0.4 + boundary_right: 0.4 + max_speed: 0.3 + row_type: vineyard + name: RowA2 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: -0.707 + position: + x: 5.0 + y: -13.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.15 + yaw_goal_tolerance: 0.1 + semantics: row_mid + verts: + - x: -0.4 + y: -0.4 + - x: 0.4 + y: -0.4 + - x: 0.4 + y: 0.4 + - x: -0.4 + y: 0.4 + + - meta: + map: complex_nav_test + node: RowA3 + pointset: complex_nav_test + tag: ['row_exit'] + node: + edges: + # Unidirectional: RowA3 -> HS1 (goal_align exit to south headland) + - action: goal_align + edge_id: RowA3_HS1 + node: HS1 + name: RowA3 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: -0.707 + position: + x: 5.0 + y: -18.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.1 + yaw_goal_tolerance: 0.05 + semantics: row_exit + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + # ========================= Row B (x=10) =================================== + - meta: + map: complex_nav_test + node: RowB0 + pointset: complex_nav_test + tag: ['row_entry'] + node: + edges: + # Bidirectional: RowB0 -> HN2 + - action: navigate_to_pose + edge_id: RowB0_HN2 + node: HN2 + properties: + max_speed: 0.5 + # Unidirectional: RowB0 -> RowB1 + - action: row_traversal + edge_id: RowB0_RowB1 + node: RowB1 + properties: + boundary_left: 0.5 + boundary_right: 0.5 + max_speed: 0.25 + row_type: orchard + roboflow: + enabled: true + confidence: 0.7 + name: RowB0 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: -0.707 + position: + x: 10.0 + y: -3.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.15 + yaw_goal_tolerance: 0.05 + semantics: row_entry + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: complex_nav_test + node: RowB1 + pointset: complex_nav_test + tag: ['row_mid'] + node: + edges: + - action: row_traversal + edge_id: RowB1_RowB2 + node: RowB2 + properties: + boundary_left: 0.5 + boundary_right: 0.5 + max_speed: 0.25 + row_type: orchard + roboflow: + enabled: true + confidence: 0.7 + name: RowB1 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: -0.707 + position: + x: 10.0 + y: -8.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.15 + yaw_goal_tolerance: 0.1 + semantics: row_mid + verts: + - x: -0.4 + y: -0.4 + - x: 0.4 + y: -0.4 + - x: 0.4 + y: 0.4 + - x: -0.4 + y: 0.4 + + - meta: + map: complex_nav_test + node: RowB2 + pointset: complex_nav_test + tag: ['row_mid'] + node: + edges: + - action: row_traversal + edge_id: RowB2_RowB3 + node: RowB3 + properties: + boundary_left: 0.5 + boundary_right: 0.5 + max_speed: 0.25 + row_type: orchard + name: RowB2 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: -0.707 + position: + x: 10.0 + y: -13.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.15 + yaw_goal_tolerance: 0.1 + semantics: row_mid + verts: + - x: -0.4 + y: -0.4 + - x: 0.4 + y: -0.4 + - x: 0.4 + y: 0.4 + - x: -0.4 + y: 0.4 + + - meta: + map: complex_nav_test + node: RowB3 + pointset: complex_nav_test + tag: ['row_exit'] + node: + edges: + - action: goal_align + edge_id: RowB3_HS2 + node: HS2 + name: RowB3 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: -0.707 + position: + x: 10.0 + y: -18.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.1 + yaw_goal_tolerance: 0.05 + semantics: row_exit + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + # ========================= Row C (x=15) =================================== + - meta: + map: complex_nav_test + node: RowC0 + pointset: complex_nav_test + tag: ['row_entry'] + node: + edges: + # Bidirectional: RowC0 -> HN3 + - action: navigate_to_pose + edge_id: RowC0_HN3 + node: HN3 + properties: + max_speed: 0.5 + # Unidirectional: RowC0 -> RowC1 + - action: row_traversal + edge_id: RowC0_RowC1 + node: RowC1 + properties: + boundary_left: 0.6 + boundary_right: 0.6 + max_speed: 0.2 + row_type: crop_row + name: RowC0 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: -0.707 + position: + x: 15.0 + y: -3.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.15 + yaw_goal_tolerance: 0.05 + semantics: row_entry + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: complex_nav_test + node: RowC1 + pointset: complex_nav_test + tag: ['row_mid'] + node: + edges: + - action: row_traversal + edge_id: RowC1_RowC2 + node: RowC2 + properties: + boundary_left: 0.6 + boundary_right: 0.6 + max_speed: 0.2 + row_type: crop_row + name: RowC1 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: -0.707 + position: + x: 15.0 + y: -8.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.15 + yaw_goal_tolerance: 0.1 + semantics: row_mid + verts: + - x: -0.4 + y: -0.4 + - x: 0.4 + y: -0.4 + - x: 0.4 + y: 0.4 + - x: -0.4 + y: 0.4 + + - meta: + map: complex_nav_test + node: RowC2 + pointset: complex_nav_test + tag: ['row_mid'] + node: + edges: + - action: row_traversal + edge_id: RowC2_RowC3 + node: RowC3 + properties: + boundary_left: 0.6 + boundary_right: 0.6 + max_speed: 0.2 + row_type: crop_row + name: RowC2 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: -0.707 + position: + x: 15.0 + y: -13.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.15 + yaw_goal_tolerance: 0.1 + semantics: row_mid + verts: + - x: -0.4 + y: -0.4 + - x: 0.4 + y: -0.4 + - x: 0.4 + y: 0.4 + - x: -0.4 + y: 0.4 + + - meta: + map: complex_nav_test + node: RowC3 + pointset: complex_nav_test + tag: ['row_exit'] + node: + edges: + - action: goal_align + edge_id: RowC3_HS3 + node: HS3 + name: RowC3 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: -0.707 + position: + x: 15.0 + y: -18.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.1 + yaw_goal_tolerance: 0.05 + semantics: row_exit + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + # ==================== Headland South ======================================= + - meta: + map: complex_nav_test + node: HS1 + pointset: complex_nav_test + tag: ['headland', 'junction'] + node: + edges: + # Bidirectional: HS1 <-> HS2 (composable navigate_to_poses) + - action: navigate_to_poses + edge_id: HS1_HS2 + node: HS2 + properties: + max_speed: 0.8 + # Unidirectional: HS1 -> Charging (return home shortcut) + - action: navigate_to_pose + edge_id: HS1_Charging + node: Charging + properties: + max_speed: 1.0 + name: HS1 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 5.0 + y: -20.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + semantics: headland_junction + verts: + - x: -1.0 + y: -1.0 + - x: 1.0 + y: -1.0 + - x: 1.0 + y: 1.0 + - x: -1.0 + y: 1.0 + + - meta: + map: complex_nav_test + node: HS2 + pointset: complex_nav_test + tag: ['headland', 'junction'] + node: + edges: + # Bidirectional: HS2 <-> HS1 + - action: navigate_to_poses + edge_id: HS2_HS1 + node: HS1 + properties: + max_speed: 0.8 + # Bidirectional: HS2 <-> HS3 + - action: navigate_to_poses + edge_id: HS2_HS3 + node: HS3 + properties: + max_speed: 0.8 + name: HS2 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 10.0 + y: -20.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + semantics: headland_junction + verts: + - x: -1.0 + y: -1.0 + - x: 1.0 + y: -1.0 + - x: 1.0 + y: 1.0 + - x: -1.0 + y: 1.0 + + - meta: + map: complex_nav_test + node: HS3 + pointset: complex_nav_test + tag: ['headland', 'junction'] + node: + edges: + # Bidirectional: HS3 <-> HS2 + - action: navigate_to_poses + edge_id: HS3_HS2 + node: HS2 + properties: + max_speed: 0.8 + # Unidirectional: HS3 -> WP_SE + - action: navigate_to_pose + edge_id: HS3_WP_SE + node: WP_SE + properties: + max_speed: 0.8 + name: HS3 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 15.0 + y: -20.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + semantics: headland_junction + verts: + - x: -1.0 + y: -1.0 + - x: 1.0 + y: -1.0 + - x: 1.0 + y: 1.0 + - x: -1.0 + y: 1.0 + + # ==================== Eastern Waypoints ==================================== + - meta: + map: complex_nav_test + node: WP_E + pointset: complex_nav_test + tag: ['waypoint'] + node: + edges: + # Bidirectional: WP_E <-> WP_SE + - action: navigate_to_pose + edge_id: WP_E_WP_SE + node: WP_SE + properties: + max_speed: 0.8 + # Unidirectional: WP_E -> AlignDock (precision docking) + - action: goal_align + edge_id: WP_E_AlignDock + node: AlignDock + name: WP_E + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: -0.707 + position: + x: 20.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + semantics: waypoint + verts: + - x: -1.0 + y: -1.0 + - x: 1.0 + y: -1.0 + - x: 1.0 + y: 1.0 + - x: -1.0 + y: 1.0 + + - meta: + map: complex_nav_test + node: WP_SE + pointset: complex_nav_test + tag: ['waypoint'] + node: + edges: + # Bidirectional: WP_SE <-> WP_E + - action: navigate_to_pose + edge_id: WP_SE_WP_E + node: WP_E + properties: + max_speed: 0.8 + # Unidirectional: WP_SE -> Charging (long return path) + - action: navigate_to_pose + edge_id: WP_SE_Charging + node: Charging + properties: + max_speed: 1.0 + name: WP_SE + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 20.0 + y: -20.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + semantics: waypoint + verts: + - x: -1.0 + y: -1.0 + - x: 1.0 + y: -1.0 + - x: 1.0 + y: 1.0 + - x: -1.0 + y: 1.0 + + # ========================= AlignDock (dead-end) ============================ + - meta: + map: complex_nav_test + node: AlignDock + pointset: complex_nav_test + tag: ['docking_station'] + node: + edges: + # Unidirectional: AlignDock -> WP_E (undock and leave) + - action: navigate_to_pose + edge_id: AlignDock_WP_E + node: WP_E + properties: + max_speed: 0.3 + name: AlignDock + nav_frame: map # override: use 'map' frame instead of topo_frame_id + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: -0.707 + position: + x: 20.0 + y: -10.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.02 + yaw_goal_tolerance: 0.01 + semantics: docking_station + dock_type: precision + verts: + - x: -0.3 + y: -0.3 + - x: 0.3 + y: -0.3 + - x: 0.3 + y: 0.3 + - x: -0.3 + y: 0.3 + + # ========================= Isolated node (disconnected) ==================== + - meta: + map: complex_nav_test + node: Isolated + pointset: complex_nav_test + tag: ['isolated', 'test'] + node: + edges: [] + name: Isolated + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 30.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 6.28 + semantics: isolated + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + # ========================= No-Go Zone (restricted) ======================== + - meta: + map: complex_nav_test + node: NoGo + pointset: complex_nav_test + tag: ['no_go'] + node: + edges: [] + name: NoGo + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 25.0 + y: -10.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 6.28 + no_go: true + semantics: restricted_area + verts: + - x: -2.0 + y: -2.0 + - x: 2.0 + y: -2.0 + - x: 2.0 + y: 2.0 + - x: -2.0 + y: 2.0 + + # ========================= Topic Localisation Node ========================= + - meta: + map: complex_nav_test + node: TopicNode + pointset: complex_nav_test + tag: ['topic_localise'] + node: + edges: + # Unidirectional: TopicNode -> Charging + - action: navigate_to_pose + edge_id: TopicNode_Charging + node: Charging + properties: + max_speed: 0.5 + localise_by_topic: '{"topic": "/special_zone", "field": "data", "val": "active", "localise_anywhere": true, "persistency": 5}' + name: TopicNode + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: -5.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.5 + yaw_goal_tolerance: 6.28 + semantics: special_zone + verts: + - x: -1.0 + y: -1.0 + - x: 1.0 + y: -1.0 + - x: 1.0 + y: 1.0 + - x: -1.0 + y: 1.0 diff --git a/topological_navigation/config/test_simple_tmap2.yaml b/topological_navigation/config/test_simple_tmap2.yaml new file mode 100644 index 00000000..ef9b7334 --- /dev/null +++ b/topological_navigation/config/test_simple_tmap2.yaml @@ -0,0 +1,203 @@ +meta: + last_updated: 08-03-2026_12-00-00 + origin: + latitude: 53.268642038 + longitude: -0.524509505881 + altitude: 0 + +metric_map: test_map +name: test_map +pointset: test_map + +transformation: + topo_frame_id: test_map + parent: map + rotation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + translation: + x: 0.0 + y: 0.0 + z: 0.0 + +nodes: + - meta: + map: test_map + node: node0 + pointset: test_map + node: + edges: + - action: row_traversal + edge_id: node0_node1 + node: node1 + properties: + boundary_left: 0.4 + boundary_right: 0.6 + name: node0 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 6.28 + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: test_map + node: node1 + pointset: test_map + node: + edges: + - action: row_traversal + edge_id: node1_node2 + node: node2 + properties: + boundary_left: 0.4 + boundary_right: 0.6 + name: node1 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 2.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 6.28 + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: test_map + node: node2 + pointset: test_map + node: + edges: + - action: row_traversal + edge_id: node2_node3 + node: node3 + properties: + boundary_left: 0.4 + boundary_right: 0.6 + name: node2 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 4.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 6.28 + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: test_map + node: node3 + pointset: test_map + node: + edges: + - action: row_traversal + edge_id: node3_node4 + node: node4 + properties: + boundary_left: 0.4 + boundary_right: 0.6 + name: node3 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 6.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 6.28 + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: test_map + node: node4 + pointset: test_map + node: + edges: [] + name: node4 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 8.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 6.28 + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 diff --git a/topological_navigation/config/tmap-schema.yaml b/topological_navigation/config/tmap-schema.yaml index f372675d..0a027938 100644 --- a/topological_navigation/config/tmap-schema.yaml +++ b/topological_navigation/config/tmap-schema.yaml @@ -14,7 +14,6 @@ properties: properties: last_updated: type: string - pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}$ required: - last_updated additionalProperties: true @@ -22,6 +21,12 @@ properties: type: string name: type: string + navigation_config_file: + type: string + description: > + Optional path to a sidecar YAML file, conventionally named + topological_navigation_config.yaml, containing the top-level definitions + and actions sections. nodes: type: array items: @@ -48,7 +53,7 @@ properties: required: - edges - name - - parent_frame + # - parent_frame additionalProperties: true properties: edges: @@ -64,9 +69,32 @@ properties: type: string node: type: string + properties: + type: object + additionalProperties: true + description: Flexible dictionary of application-specific edge properties (e.g., max_speed, priority, surface_type) + properties: + set_ros_params: + description: >- + ROS 2 parameters applied while this edge's segment executes and + restored afterwards. Overrides the action-level 'set_ros_params' + per node/parameter. Accepts {node: {param: value}}, + {param: value} (goal-checker node), or a list of + {node, param, value} / {node, params} entries. + oneOf: + - type: object + additionalProperties: true + - type: array + items: + type: object + additionalProperties: true name: type: string parent_frame: type: string + properties: + type: object + additionalProperties: true + description: Flexible dictionary of application-specific node properties (e.g., xy_goal_tolerance, yaw_goal_tolerance, semantics, zone) pointset: type: string diff --git a/topological_navigation/config/topological_navigation_config.yaml b/topological_navigation/config/topological_navigation_config.yaml new file mode 100644 index 00000000..4924af3c --- /dev/null +++ b/topological_navigation/config/topological_navigation_config.yaml @@ -0,0 +1,91 @@ +# ───────────────────────────────────────────────────────────────────────────── +# Definitions – behaviour trees referenced by actions +# ───────────────────────────────────────────────────────────────────────────── +definitions: + default_bt: | + + + + + + + + + goal_align_bt: | + + + + + + + + + row_traversal_bt: | + + + + + + + + + +# ───────────────────────────────────────────────────────────────────────────── +# Actions – all four action types +# ───────────────────────────────────────────────────────────────────────────── +actions: + navigate_to_pose: + composable: false + action_type: nav2_msgs.action.NavigateToPose + action_server: /navigate_to_pose + action_goal_template: + pose: + header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.default_bt}' + + navigate_to_poses: + composable: true + action_type: nav2_msgs.action.NavigateThroughPoses + action_server: /navigate_through_poses + action_goal_template: + poses: + - header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.default_bt}' + + navigate_through_poses: + composable: true + action_type: nav2_msgs.action.NavigateThroughPoses + action_server: /navigate_through_poses + action_goal_template: + poses: + - header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.default_bt}' + + + goal_align: + composable: false + action_type: nav2_msgs.action.NavigateToPose + action_server: /navigate_to_pose + action_goal_template: + pose: + header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.goal_align_bt}' + + row_traversal: + composable: true + action_type: nav2_msgs.action.NavigateThroughPoses + action_server: /navigate_through_poses + action_goal_template: + poses: + - header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.row_traversal_bt}' \ No newline at end of file diff --git a/topological_navigation/cyclonedds.log b/topological_navigation/cyclonedds.log deleted file mode 100644 index ffdadc87..00000000 --- a/topological_navigation/cyclonedds.log +++ /dev/null @@ -1,19889 +0,0 @@ -1711462090.567383 [0] python3: config: Domain/General/MulticastRecvNetworkInterfaceAddresses/#text: preferred {} -1711462090.567392 [0] python3: config: Domain/General/Interfaces/NetworkInterface[@autodetermine]: false {} -1711462090.567395 [0] python3: config: Domain/General/Interfaces/NetworkInterface[@name]: wlp0s20f3 {} -1711462090.567397 [0] python3: config: Domain/General/Interfaces/NetworkInterface[@address]: (null) {} -1711462090.567399 [0] python3: config: Domain/General/Interfaces/NetworkInterface[@priority]: default {} -1711462090.567401 [0] python3: config: Domain/General/Interfaces/NetworkInterface[@prefer_multicast]: false {} -1711462090.567403 [0] python3: config: Domain/General/Interfaces/NetworkInterface[@presence_required]: true {} -1711462090.567405 [0] python3: config: Domain/General/Interfaces/NetworkInterface[@multicast]: default {} -1711462090.567407 [0] python3: config: Domain/General/ExternalNetworkAddress/#text: auto {} -1711462090.567409 [0] python3: config: Domain/General/ExternalNetworkMask/#text: 0.0.0.0 {} -1711462090.567412 [0] python3: config: Domain/General/AllowMulticast/#text: true {1} -1711462090.567414 [0] python3: config: Domain/General/MulticastTimeToLive/#text: 32 {} -1711462090.567416 [0] python3: config: Domain/General/DontRoute/#text: false {} -1711462090.567418 [0] python3: config: Domain/General/Transport/#text: udp {1} -1711462090.567420 [0] python3: config: Domain/General/EnableMulticastLoopback/#text: true {} -1711462090.567422 [0] python3: config: Domain/General/MaxMessageSize/#text: 10 MiB {1} -1711462090.567424 [0] python3: config: Domain/General/MaxRexmitMessageSize/#text: 1456 B {} -1711462090.567427 [0] python3: config: Domain/General/FragmentSize/#text: 20500 B {1} -1711462090.567428 [0] python3: config: Domain/General/RedundantNetworking/#text: false {} -1711462090.567430 [0] python3: config: Domain/General/EntityAutoNaming/#text: empty {} -1711462090.567433 [0] python3: config: Domain/General/EntityAutoNaming[@seed]: 3774755673 3481944393 1593628943 1496008116 2812686077 1486759785 1135171669 2415018896 {} -1711462090.567436 [0] python3: config: Domain/Sizing/ReceiveBufferSize/#text: 1 MiB {} -1711462090.567438 [0] python3: config: Domain/Sizing/ReceiveBufferChunkSize/#text: 128 KiB {} -1711462090.567440 [0] python3: config: Domain/Compatibility/StandardsConformance/#text: lax {} -1711462090.567442 [0] python3: config: Domain/Compatibility/ExplicitlyPublishQosSetToDefault/#text: false {} -1711462090.567444 [0] python3: config: Domain/Compatibility/ManySocketsMode/#text: single {} -1711462090.567446 [0] python3: config: Domain/Compatibility/AssumeRtiHasPmdEndpoints/#text: false {} -1711462090.567448 [0] python3: config: Domain/Discovery/Tag/#text: {} -1711462090.567450 [0] python3: config: Domain/Discovery/ExternalDomainId/#text: 0 {} -1711462090.567452 [0] python3: config: Domain/Discovery/DSGracePeriod/#text: 30 s {} -1711462090.567455 [0] python3: config: Domain/Discovery/Peers/Peer[@Address]: localhost {1} -1711462090.567457 [0] python3: config: Domain/Discovery/ParticipantIndex/#text: auto {1} -1711462090.567459 [0] python3: config: Domain/Discovery/MaxAutoParticipantIndex/#text: 100 {1} -1711462090.567461 [0] python3: config: Domain/Discovery/SPDPMulticastAddress/#text: 239.255.0.1 {} -1711462090.567463 [0] python3: config: Domain/Discovery/SPDPInterval/#text: 30 s {} -1711462090.567465 [0] python3: config: Domain/Discovery/DefaultMulticastAddress/#text: auto {} -1711462090.567467 [0] python3: config: Domain/Discovery/Ports/Base/#text: 7400 {} -1711462090.567469 [0] python3: config: Domain/Discovery/Ports/DomainGain/#text: 250 {} -1711462090.567471 [0] python3: config: Domain/Discovery/Ports/ParticipantGain/#text: 2 {} -1711462090.567473 [0] python3: config: Domain/Discovery/Ports/MulticastMetaOffset/#text: 0 {} -1711462090.567475 [0] python3: config: Domain/Discovery/Ports/UnicastMetaOffset/#text: 10 {} -1711462090.567477 [0] python3: config: Domain/Discovery/Ports/MulticastDataOffset/#text: 1 {} -1711462090.567482 [0] python3: config: Domain/Discovery/Ports/UnicastDataOffset/#text: 11 {} -1711462090.567484 [0] python3: config: Domain/Discovery/EnableTopicDiscoveryEndpoints/#text: false {} -1711462090.567486 [0] python3: config: Domain/Discovery/LeaseDuration/#text: 10 s {} -1711462090.567490 [0] python3: config: Domain/Tracing/Category/#text: trace {1} -1711462090.567492 [0] python3: config: Domain/Tracing/OutputFile/#text: cyclonedds.log {1} -1711462090.567494 [0] python3: config: Domain/Tracing/AppendToFile/#text: false {} -1711462090.567496 [0] python3: config: Domain/Tracing/PacketCaptureFile/#text: {} -1711462090.567498 [0] python3: config: Domain/Internal/DeliveryQueueMaxSamples/#text: 256 {} -1711462090.567500 [0] python3: config: Domain/Internal/PrimaryReorderMaxSamples/#text: 128 {} -1711462090.567502 [0] python3: config: Domain/Internal/SecondaryReorderMaxSamples/#text: 128 {} -1711462090.567504 [0] python3: config: Domain/Internal/DefragUnreliableMaxSamples/#text: 4 {} -1711462090.567505 [0] python3: config: Domain/Internal/DefragReliableMaxSamples/#text: 16 {} -1711462090.567507 [0] python3: config: Domain/Internal/BuiltinEndpointSet/#text: writers {} -1711462090.567509 [0] python3: config: Domain/Internal/MeasureHbToAckLatency/#text: false {} -1711462090.567511 [0] python3: config: Domain/Internal/UnicastResponseToSPDPMessages/#text: true {} -1711462090.567520 [0] python3: config: Domain/Internal/SynchronousDeliveryPriorityThreshold/#text: 0 {} -1711462090.567522 [0] python3: config: Domain/Internal/SynchronousDeliveryLatencyBound/#text: inf {} -1711462090.567524 [0] python3: config: Domain/Internal/MaxParticipants/#text: 0 {} -1711462090.567526 [0] python3: config: Domain/Internal/AccelerateRexmitBlockSize/#text: 0 {} -1711462090.567529 [0] python3: config: Domain/Internal/RetransmitMerging/#text: never {} -1711462090.567531 [0] python3: config: Domain/Internal/RetransmitMergingPeriod/#text: 5 ms {} -1711462090.567533 [0] python3: config: Domain/Internal/HeartbeatInterval/#text: 100 ms {} -1711462090.567535 [0] python3: config: Domain/Internal/HeartbeatInterval[@min]: 5 ms {} -1711462090.567537 [0] python3: config: Domain/Internal/HeartbeatInterval[@minsched]: 20 ms {} -1711462090.567538 [0] python3: config: Domain/Internal/HeartbeatInterval[@max]: 8 s {} -1711462090.567540 [0] python3: config: Domain/Internal/MaxQueuedRexmitBytes/#text: 512 KiB {} -1711462090.567542 [0] python3: config: Domain/Internal/MaxQueuedRexmitMessages/#text: 200 {} -1711462090.567544 [0] python3: config: Domain/Internal/WriterLingerDuration/#text: 1 s {} -1711462090.567546 [0] python3: config: Domain/Internal/SocketReceiveBufferSize[@min]: 30 MiB {1} -1711462090.567547 [0] python3: config: Domain/Internal/SocketReceiveBufferSize[@max]: default {} -1711462090.567549 [0] python3: config: Domain/Internal/SocketSendBufferSize[@min]: 64 KiB {} -1711462090.567551 [0] python3: config: Domain/Internal/SocketSendBufferSize[@max]: default {} -1711462090.567552 [0] python3: config: Domain/Internal/NackDelay/#text: 100 ms {} -1711462090.567554 [0] python3: config: Domain/Internal/AckDelay/#text: 10 ms {} -1711462090.567557 [0] python3: config: Domain/Internal/AutoReschedNackDelay/#text: 3 s {} -1711462090.567559 [0] python3: config: Domain/Internal/PreEmptiveAckDelay/#text: 10 ms {} -1711462090.567561 [0] python3: config: Domain/Internal/ScheduleTimeRounding/#text: 0 s {} -1711462090.567562 [0] python3: config: Domain/Internal/DDSI2DirectMaxThreads/#text: 1 {} -1711462090.567564 [0] python3: config: Domain/Internal/SquashParticipants/#text: false {} -1711462090.567566 [0] python3: config: Domain/Internal/SPDPResponseMaxDelay/#text: 0 s {} -1711462090.567568 [0] python3: config: Domain/Internal/LateAckMode/#text: false {} -1711462090.567570 [0] python3: config: Domain/Internal/RetryOnRejectBestEffort/#text: false {} -1711462090.567572 [0] python3: config: Domain/Internal/GenerateKeyhash/#text: false {} -1711462090.567573 [0] python3: config: Domain/Internal/MaxSampleSize/#text: 2147483647 B {} -1711462090.567577 [0] python3: config: Domain/Internal/LivelinessMonitoring/#text: false {} -1711462090.567578 [0] python3: config: Domain/Internal/LivelinessMonitoring[@StackTraces]: true {} -1711462090.567580 [0] python3: config: Domain/Internal/LivelinessMonitoring[@Interval]: 1 s {} -1711462090.567582 [0] python3: config: Domain/Internal/MonitorPort/#text: -1 {} -1711462090.567583 [0] python3: config: Domain/Internal/PrioritizeRetransmit/#text: true {} -1711462090.567585 [0] python3: config: Domain/Internal/UseMulticastIfMreqn/#text: 0 {} -1711462090.567587 [0] python3: config: Domain/Internal/RediscoveryBlacklistDuration/#text: 0 s {} -1711462090.567588 [0] python3: config: Domain/Internal/RediscoveryBlacklistDuration[@enforce]: false {} -1711462090.567590 [0] python3: config: Domain/Internal/MultipleReceiveThreads/#text: default {} -1711462090.567592 [0] python3: config: Domain/Internal/MultipleReceiveThreads[@maxretries]: 4294967295 {} -1711462090.567594 [0] python3: config: Domain/Internal/Test/XmitLossiness/#text: 0 {} -1711462090.567596 [0] python3: config: Domain/Internal/Watermarks/WhcLow/#text: 1 KiB {} -1711462090.567598 [0] python3: config: Domain/Internal/Watermarks/WhcHigh/#text: 500 KiB {1} -1711462090.567599 [0] python3: config: Domain/Internal/Watermarks/WhcHighInit/#text: 30 KiB {} -1711462090.567601 [0] python3: config: Domain/Internal/Watermarks/WhcAdaptive/#text: true {} -1711462090.567603 [0] python3: config: Domain/Internal/BurstSize/MaxRexmit/#text: 1 MiB {} -1711462090.567605 [0] python3: config: Domain/Internal/BurstSize/MaxInitTransmit/#text: 4294967295 {} -1711462090.567608 [0] python3: config: Domain/Internal/EnableExpensiveChecks/#text: {} -1711462090.567610 [0] python3: config: Domain/TCP/NoDelay/#text: true {} -1711462090.567612 [0] python3: config: Domain/TCP/Port/#text: -1 {} -1711462090.567614 [0] python3: config: Domain/TCP/ReadTimeout/#text: 2 s {} -1711462090.567616 [0] python3: config: Domain/TCP/WriteTimeout/#text: 2 s {} -1711462090.567617 [0] python3: config: Domain/TCP/AlwaysUsePeeraddrForUnicast/#text: false {} -1711462090.567620 [0] python3: config: Domain/SSL/Enable/#text: false {} -1711462090.567623 [0] python3: config: Domain/SSL/CertificateVerification/#text: true {} -1711462090.567624 [0] python3: config: Domain/SSL/VerifyClient/#text: true {} -1711462090.567626 [0] python3: config: Domain/SSL/SelfSignedCertificates/#text: false {} -1711462090.567629 [0] python3: config: Domain/SSL/KeystoreFile/#text: keystore {} -1711462090.567630 [0] python3: config: Domain/SSL/KeyPassphrase/#text: secret {} -1711462090.567632 [0] python3: config: Domain/SSL/Ciphers/#text: ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH {} -1711462090.567634 [0] python3: config: Domain/SSL/EntropyFile/#text: {} -1711462090.567636 [0] python3: config: Domain/SSL/MinimumTLSVersion/#text: 1.3 {} -1711462090.567638 [0] python3: config: Domain/SharedMemory/Enable/#text: false {} -1711462090.567640 [0] python3: config: Domain/SharedMemory/Locator/#text: {} -1711462090.567643 [0] python3: config: Domain/SharedMemory/Prefix/#text: DDS_CYCLONE {} -1711462090.567645 [0] python3: config: Domain/SharedMemory/LogLevel/#text: info {} -1711462090.567647 [0] python3: config: Domain[@Id]: 0 {1} -1711462090.567660 [0] python3: started at 1711462090.06567651 -- 2024-03-26 14:08:10+00:00 -1711462090.567672 [0] python3: udp initialized -1711462090.569666 [0] python3: interfaces: lo udp/127.0.0.1(q1) wlp0s20f3 wireless udp/10.101.12.71(q9) br-d76075d5ea89 udp/172.18.0.1(q9) br-56769bca490c udp/172.20.0.1(q9) docker0 udp/172.17.0.1(q9) br-9ff433288a2a udp/172.19.0.1(q9) -1711462090.569671 [0] python3: selected interfaces: wlp0s20f3 (index 2 priority 0) -1711462090.569683 [0] python3: ownip: udp/10.101.12.71 -1711462090.569684 [0] python3: extmask: invalid/0 (not applicable) -1711462090.569685 [0] python3: SPDP MC: udp/239.255.0.1 -1711462090.569687 [0] python3: default MC: udp/239.255.0.1 -1711462090.569690 [0] python3: SSM support included -1711462090.569756 [0] python3: rtps_init: trying to find a free participant index -1711462090.569779 [0] python3: ddsi_udp_create_conn unicast socket 5 port 7418 -1711462090.569782 [0] python3: ddsi_udp_create_conn unicast socket 6 port 7419 -1711462090.569784 [0] python3: rtps_init: uc ports: disc 7418 data 7419 -1711462090.569785 [0] python3: rtps_init: domainid 0 participantid 5 -1711462090.569787 [0] python3: Unicast Ports: discovery 7418 data 7419 -1711462090.569793 [0] python3: ddsi_udp_create_conn multicast socket 7 port 7400 -1711462090.569797 [0] python3: ddsi_udp_create_conn multicast socket 8 port 7401 -1711462090.569798 [0] python3: Multicast Ports: discovery 7400 data 7401 -1711462090.569804 [0] python3: ddsi_udp_create_conn transmit(uc/mc) socket 9 port 52025 -1711462090.569807 [0] python3: interface wlp0s20f3: transmit port 52025 -1711462090.569813 [0] python3: join conn 0x653a1b46f210 for (udp/239.255.0.1, *) interface udp/10.101.12.71 -1711462090.569816 [0] python3: join conn 0x653a1b466f10 for (udp/239.255.0.1, *) interface udp/10.101.12.71 -1711462090.569819 [0] python3: join conn 0x653a1b46f210 for (udp/239.255.0.1, *) interface (default): already joined -1711462090.569820 [0] python3: join conn 0x653a1b466f10 for (udp/239.255.0.1, *) interface (default): already joined -1711462090.569913 [0] python3: add_peer_addresses: add udp/127.0.0.1:7410, :7412, :7414, :7416, :7418, :7420, :7422, :7424, :7426, :7428, :7430, :7432, :7434, :7436, :7438, :7440, :7442, :7444, :7446, :7448, :7450, :7452, :7454, :7456, :7458, :7460, :7462, :7464, :7466, :7468, :7470, :7472, :7474, :7476, :7478, :7480, :7482, :7484, :7486, :7488, :7490, :7492, :7494, :7496, :7498, :7500, :7502, :7504, :7506, :7508, :7510, :7512, :7514, :7516, :7518, :7520, :7522, :7524, :7526, :7528, :7530, :7532, :7534, :7536, :7538, :7540, :7542, :7544, :7546, :7548, :7550, :7552, :7554, :7556, :7558, :7560, :7562, :7564, :7566, :7568, :7570, :7572, :7574, :7576, :7578, :7580, :7582, :7584, :7586, :7588, :7590, :7592, :7594, :7596, :7598, :7600, :7602, :7604, :7606, :7608 -1711462090.569925 [0] python3: ddsi_new_local_orphan_writer(DCPSParticipant/org::eclipse::cyclonedds::builtin::DCPSParticipant) -1711462090.569942 [0] python3: WRITER 0:0:0:100c2 QOS={user_data=0<>,topic_name="DCPSParticipant",type_name="org::eclipse::cyclonedds::builtin::DCPSParticipant",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=1:0:0,partition={"__BUILT-IN PARTITION__"},transport_priority=0,data_representation=1(0),adlink_writer_data_lifecycle=1} -1711462090.569947 [0] python3: match_writer_with_readers(wr 0:0:0:100c2) scanning all rds of topic DCPSParticipant -1711462090.569948 [0] python3: ddsi_new_local_orphan_writer(DCPSTopic/org::eclipse::cyclonedds::builtin::DCPSTopic) -1711462090.569956 [0] python3: WRITER 0:0:0:2c2 QOS={user_data=0<>,topic_name="DCPSTopic",type_name="org::eclipse::cyclonedds::builtin::DCPSTopic",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=1:0:0,partition={"__BUILT-IN PARTITION__"},transport_priority=0,data_representation=1(0),adlink_writer_data_lifecycle=1} -1711462090.569959 [0] python3: match_writer_with_readers(wr 0:0:0:2c2) scanning all rds of topic DCPSTopic -1711462090.569960 [0] python3: ddsi_new_local_orphan_writer(DCPSPublication/org::eclipse::cyclonedds::builtin::DCPSPublication) -1711462090.569967 [0] python3: WRITER 0:0:0:3c2 QOS={user_data=0<>,topic_name="DCPSPublication",type_name="org::eclipse::cyclonedds::builtin::DCPSPublication",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=1:0:0,partition={"__BUILT-IN PARTITION__"},transport_priority=0,data_representation=1(0),adlink_writer_data_lifecycle=1} -1711462090.569970 [0] python3: match_writer_with_readers(wr 0:0:0:3c2) scanning all rds of topic DCPSPublication -1711462090.569972 [0] python3: ddsi_new_local_orphan_writer(DCPSSubscription/org::eclipse::cyclonedds::builtin::DCPSSubscription) -1711462090.569979 [0] python3: WRITER 0:0:0:4c2 QOS={user_data=0<>,topic_name="DCPSSubscription",type_name="org::eclipse::cyclonedds::builtin::DCPSSubscription",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=1:0:0,partition={"__BUILT-IN PARTITION__"},transport_priority=0,data_representation=1(0),adlink_writer_data_lifecycle=1} -1711462090.569981 [0] python3: match_writer_with_readers(wr 0:0:0:4c2) scanning all rds of topic DCPSSubscription -1711462090.569985 [0] python3: create_thread: gc: class 0 priority 0 stack 0 -1711462090.570018 [0] python3: create_thread: dq.builtins: class 0 priority 0 stack 0 -1711462090.570042 [0] python3: create_thread: dq.user: class 0 priority 0 stack 0 -1711462090.570054 [0] gc: started new thread 192809: gc -1711462090.570079 [0] dq.builtin: started new thread 192810: dq.builtins -1711462090.570080 [0] python3: create_thread: tev: class 0 priority 0 stack 0 -1711462090.570089 [0] dq.user: started new thread 192811: dq.user -1711462090.570104 [0] dq.builtin: thread_cputime 0.000000000 -1711462090.570109 [0] gc: thread_cputime 0.000000000 -1711462090.570111 [0] python3: create_thread: recv: class 0 priority 0 stack 0 -1711462090.570117 [0] tev: started new thread 192812: tev -1711462090.570112 [0] dq.user: thread_cputime 0.000000000 -1711462090.570136 [0] python3: create_thread: recvMC: class 0 priority 0 stack 0 -1711462090.570137 [0] tev: thread_cputime 0.000000000 -1711462090.570150 [0] recv: started new thread 192813: recv -1711462090.570161 [0] python3: create_thread: recvUC: class 0 priority 0 stack 0 -1711462090.570164 [0] recv: thread_cputime 0.000000000 -1711462090.570170 [0] recvMC: started new thread 192814: recvMC -1711462090.570179 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 332 from udp/10.101.12.71:44991 -1711462090.570185 [0] recvMC: thread_cputime 0.000000000 -1711462090.570190 [0] recvUC: started new thread 192815: recvUC -1711462090.570193 [0] recvUC: thread_cputime 0.000000000 -1711462090.570195 [0] python3: ddsi_new_participant(110aba1:7b19badd:ce0adb73:1c1, 0) -1711462090.570195 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 496 from udp/10.101.12.71:44991 -1711462090.570186 [0] recv: INFOTS(1711462090.569761244) -1711462090.570201 [0] recvMC: INFOTS(1711462090.569771719) -1711462090.570206 [0] gc: gc 0x653a1b47e890: not yet, shortsleep -1711462090.570207 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #9 110443d:bb7f10a5:18901533:403? -> 0:0:0:0) -1711462090.570206 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #7 110443d:bb7f10a5:18901533:4c2? -> 0:0:0:0) -1711462090.570207 [0] python3: PARTICIPANT 110aba1:7b19badd:ce0adb73:1c1 QOS={user_data=10<"enclave=/;">,liveliness=0:10000000000,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},adlink_entity_factory=0} -1711462090.570212 [0] recvMC: HEARTBEAT(F#14:9..9 110443d:bb7f10a5:18901533:403? -> 0:0:0:0) -1711462090.570220 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:100c2, (null).DCPSParticipant/ParticipantBuiltinTopicData) -1711462090.570225 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:100c2 @ 0x653a1b3e3734) user 1 builtin 1 -1711462090.570235 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:100c2 QOS={user_data=0<>,topic_name="DCPSParticipant",type_name="ParticipantBuiltinTopicData",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=0:0,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_reader_lifespan=0:9223372036854775807,adlink_writer_data_lifecycle=1,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.570238 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:100c2) scanning proxy participants tgt=0 -1711462090.570241 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:4c2, (null).DCPSSubscription/SubscriptionBuiltinTopicData) -1711462090.570243 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:4c2 @ 0x653a1b3e3c14) user 1 builtin 2 -1711462090.570250 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:4c2 QOS={user_data=0<>,topic_name="DCPSSubscription",type_name="SubscriptionBuiltinTopicData",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_writer_data_lifecycle=1} -1711462090.570252 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:4c2) scanning proxy participants tgt=4c7 -1711462090.570254 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:3c2, (null).DCPSPublication/PublicationBuiltinTopicData) -1711462090.570256 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:3c2 @ 0x653a1b3e4134) user 1 builtin 3 -1711462090.570262 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:3c2 QOS={user_data=0<>,topic_name="DCPSPublication",type_name="PublicationBuiltinTopicData",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_writer_data_lifecycle=1} -1711462090.570264 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:3c2) scanning proxy participants tgt=3c7 -1711462090.570266 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:200c2, (null).DCPSParticipantMessage/ParticipantMessageData) -1711462090.570268 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:200c2 @ 0x653a1b3e4714) user 1 builtin 4 -1711462090.570274 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:200c2 QOS={user_data=0<>,topic_name="DCPSParticipantMessage",type_name="ParticipantMessageData",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_writer_data_lifecycle=1} -1711462090.570276 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:200c2) scanning proxy participants tgt=200c7 -1711462090.570279 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:300c3, (null).DCPSTypeLookupRequest/DDS::Builtin::TypeLookup_Request) -1711462090.570281 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:300c3 @ 0x653a1b3e4ea4) user 1 builtin 5 -1711462090.570287 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:300c3 QOS={user_data=0<>,topic_name="DCPSTypeLookupRequest",type_name="DDS::Builtin::TypeLookup_Request",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,lifespan=9223372036854775807,destination_order=0,history=1:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_writer_data_lifecycle=1} -1711462090.570289 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:300c3) scanning proxy participants tgt=300c4 -1711462090.570291 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:301c3, (null).DCPSTypeLookupReply/DDS::Builtin::TypeLookup_Reply) -1711462090.570293 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:301c3 @ 0x653a1b484114) user 1 builtin 6 -1711462090.570299 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:301c3 QOS={user_data=0<>,topic_name="DCPSTypeLookupReply",type_name="DDS::Builtin::TypeLookup_Reply",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,lifespan=9223372036854775807,destination_order=0,history=1:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_writer_data_lifecycle=1} -1711462090.570301 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:301c3) scanning proxy participants tgt=301c4 -1711462090.570303 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:100c7, (null).DCPSParticipant/ParticipantBuiltinTopicData) -1711462090.570305 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:100c7 @ 0x653a1af2dee4) user 1 builtin 7 -1711462090.570313 [0] python3: READER 110aba1:7b19badd:ce0adb73:100c7 QOS={user_data=0<>,topic_name="DCPSParticipant",type_name="ParticipantBuiltinTopicData",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=0:0,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_reader_lifespan=0:9223372036854775807,adlink_writer_data_lifecycle=1,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.570315 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:100c7) scanning proxy participants tgt=0 -1711462090.570316 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:4c7, (null).DCPSSubscription/SubscriptionBuiltinTopicData) -1711462090.570318 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:4c7 @ 0x653a1af72b04) user 1 builtin 8 -1711462090.570325 [0] python3: READER 110aba1:7b19badd:ce0adb73:4c7 QOS={user_data=0<>,topic_name="DCPSSubscription",type_name="SubscriptionBuiltinTopicData",topic_data=0<>,group_data=0<>,durability=1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.570328 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:4c7) scanning proxy participants tgt=4c2 -1711462090.570329 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:3c7, (null).DCPSPublication/PublicationBuiltinTopicData) -1711462090.570331 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:3c7 @ 0x653a1af94554) user 1 builtin 9 -1711462090.570337 [0] python3: READER 110aba1:7b19badd:ce0adb73:3c7 QOS={user_data=0<>,topic_name="DCPSPublication",type_name="PublicationBuiltinTopicData",topic_data=0<>,group_data=0<>,durability=1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.570339 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:3c7) scanning proxy participants tgt=3c2 -1711462090.570341 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:200c7, (null).DCPSParticipantMessage/ParticipantMessageData) -1711462090.570343 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:200c7 @ 0x653a1af86bb4) user 1 builtin 10 -1711462090.570349 [0] python3: READER 110aba1:7b19badd:ce0adb73:200c7 QOS={user_data=0<>,topic_name="DCPSParticipantMessage",type_name="ParticipantMessageData",topic_data=0<>,group_data=0<>,durability=1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.570351 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:200c7) scanning proxy participants tgt=200c2 -1711462090.570353 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:300c4, (null).DCPSTypeLookupRequest/DDS::Builtin::TypeLookup_Request) -1711462090.570354 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:300c4 @ 0x653a1af22f84) user 1 builtin 11 -1711462090.570361 [0] python3: READER 110aba1:7b19badd:ce0adb73:300c4 QOS={user_data=0<>,topic_name="DCPSTypeLookupRequest",type_name="DDS::Builtin::TypeLookup_Request",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,destination_order=0,history=1:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.570363 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:300c4) scanning proxy participants tgt=300c3 -1711462090.570364 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:301c4, (null).DCPSTypeLookupReply/DDS::Builtin::TypeLookup_Reply) -1711462090.570366 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:301c4 @ 0x653a1aeda794) user 1 builtin 12 -1711462090.570372 [0] python3: READER 110aba1:7b19badd:ce0adb73:301c4 QOS={user_data=0<>,topic_name="DCPSTypeLookupReply",type_name="DDS::Builtin::TypeLookup_Reply",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,destination_order=0,history=1:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.570375 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:301c4) scanning proxy participants tgt=301c3 -1711462090.570379 [0] python3: => EVERYONE -1711462090.570381 [0] python3: spdp_write(110aba1:7b19badd:ce0adb73:1c1) -1711462090.570384 [0] python3: spdp_write(110aba1:7b19badd:ce0adb73:1c1) - internals: op-Alienware-x16-R1/0.10.4/Linux/Linux -1711462090.570406 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:100c2 #1: ST0 DCPSParticipant/ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.570410 [0] python3: non-timed queue now has 1 items -1711462090.570420 [0] tev: xpack_addmsg 0x770414001390 0x653a1aebe8d0 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 444 -1711462090.570426 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b2540c0 reg?yes refc 2 DCPSParticipant/org::eclipse::cyclonedds::builtin::DCPSParticipant) -1711462090.570427 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.570429 [0] python3: create_and_lock_ktopic: ktp 0x653a1b4966f0 -1711462090.570430 [0] python3: dds_create_topic_generic: reuse sertype 0x653a1b2540c0 -1711462090.570433 [0] python3: dds_create_topic_generic: new topic 865392310 -1711462090.570437 [0] tev: write_sample 110aba1:7b19badd:ce0adb73:200c2 #1: ST0 DCPSParticipantMessage/ParticipantMessageData:{110aba1:7b19badd:ce0adb73:1}:1<0> -1711462090.570439 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:107, __BUILT-IN PARTITION__.DCPSParticipant/org::eclipse::cyclonedds::builtin::DCPSParticipant) -1711462090.570445 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:107 @ 0x653a1b295fa4) user 2 builtin 12 -1711462090.570450 [0] tev: resched pmd(110aba1:7b19badd:ce0adb73:1c1): 8s -1711462090.570453 [0] python3: READER 110aba1:7b19badd:ce0adb73:107 QOS={user_data=0<>,topic_name="DCPSParticipant",type_name="org::eclipse::cyclonedds::builtin::DCPSParticipant",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=1:0:0,partition={"__BUILT-IN PARTITION__"},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.570456 [0] python3: => EVERYONE -1711462090.570458 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:107) scanning all pwrs of topic DCPSParticipant -1711462090.570460 [0] python3: match_reader_with_writers(rd 110aba1:7b19badd:ce0adb73:107) scanning all wrs of topic DCPSParticipant -1711462090.570464 [0] python3: reader_add_local_connection(wr 0:0:0:100c2 rd 110aba1:7b19badd:ce0adb73:107) -1711462090.570470 [0] python3: writer_add_local_connection(wr 0:0:0:100c2 rd 110aba1:7b19badd:ce0adb73:107) -1711462090.570474 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b2d50f0 reg?yes refc 2 DCPSSubscription/org::eclipse::cyclonedds::builtin::DCPSSubscription) -1711462090.570475 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.570476 [0] python3: create_and_lock_ktopic: ktp 0x653a1af95750 -1711462090.570478 [0] python3: dds_create_topic_generic: reuse sertype 0x653a1b2d50f0 -1711462090.570479 [0] python3: dds_create_topic_generic: new topic 531669467 -1711462090.570482 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462090.570485 [0] recv: INFOTS(1711462090.570393375) -1711462090.570483 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:207, __BUILT-IN PARTITION__.DCPSSubscription/org::eclipse::cyclonedds::builtin::DCPSSubscription) -1711462090.570494 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462090.570495 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:207 @ 0x653a1b3fe704) user 3 builtin 12 -1711462090.570504 [0] python3: READER 110aba1:7b19badd:ce0adb73:207 QOS={user_data=0<>,topic_name="DCPSSubscription",type_name="org::eclipse::cyclonedds::builtin::DCPSSubscription",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=1:0:0,partition={"__BUILT-IN PARTITION__"},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.570507 [0] python3: => EVERYONE -1711462090.570509 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:207) scanning all pwrs of topic DCPSSubscription -1711462090.570512 [0] python3: match_reader_with_writers(rd 110aba1:7b19badd:ce0adb73:207) scanning all wrs of topic DCPSSubscription -1711462090.570514 [0] python3: reader_add_local_connection(wr 0:0:0:4c2 rd 110aba1:7b19badd:ce0adb73:207) -1711462090.570524 [0] python3: writer_add_local_connection(wr 0:0:0:4c2 rd 110aba1:7b19badd:ce0adb73:207) -1711462090.570531 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b2d5150 reg?yes refc 2 DCPSPublication/org::eclipse::cyclonedds::builtin::DCPSPublication) -1711462090.570537 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.570539 [0] python3: create_and_lock_ktopic: ktp 0x653a1b2b1d50 -1711462090.570540 [0] python3: dds_create_topic_generic: reuse sertype 0x653a1b2d5150 -1711462090.570542 [0] python3: dds_create_topic_generic: new topic 859371661 -1711462090.570542 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462090.570546 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:307, __BUILT-IN PARTITION__.DCPSPublication/org::eclipse::cyclonedds::builtin::DCPSPublication) -1711462090.570550 [0] recv: INFOTS(1711462090.570393375) -1711462090.570552 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:307 @ 0x653a1b3ea574) user 4 builtin 12 -1711462090.570557 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462090.570564 [0] python3: READER 110aba1:7b19badd:ce0adb73:307 QOS={user_data=0<>,topic_name="DCPSPublication",type_name="org::eclipse::cyclonedds::builtin::DCPSPublication",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:100000000,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=1:0:0,partition={"__BUILT-IN PARTITION__"},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.570567 [0] python3: => EVERYONE -1711462090.570568 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.570571 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:307) scanning all pwrs of topic DCPSPublication -1711462090.570575 [0] python3: match_reader_with_writers(rd 110aba1:7b19badd:ce0adb73:307) scanning all wrs of topic DCPSPublication -1711462090.570575 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (local) -1711462090.570578 [0] python3: reader_add_local_connection(wr 0:0:0:3c2 rd 110aba1:7b19badd:ce0adb73:307) -1711462090.570582 [0] python3: writer_add_local_connection(wr 0:0:0:3c2 rd 110aba1:7b19badd:ce0adb73:307) -1711462090.570588 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.570590 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (local) -1711462090.570779 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b269990 reg?no refc 1 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_) -1711462090.570782 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.570785 [0] python3: create_and_lock_ktopic: ktp 0x653a1b3e5620 -1711462090.570789 [0] python3: dds_create_topic_generic: register new sertype 0x653a1b269990 -1711462090.570792 [0] python3: dds_create_topic_generic: new topic 1225600693 -1711462090.570806 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:403, (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_) -1711462090.570810 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:403 @ 0x653a1b487c64) user 5 builtin 12 -1711462090.570821 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:403 QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.570826 [0] python3: => EVERYONE -1711462090.570830 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:403) scanning all prds of topic ros_discovery_info -1711462090.570835 [0] python3: match_writer_with_readers(wr 110aba1:7b19badd:ce0adb73:403) scanning all rds of topic ros_discovery_info -1711462090.570845 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:3c2 #1: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.570872 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1ae7deb0 reg?no refc 1 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_) -1711462090.570874 [0] python3: lookup_and_check_ktopic_may_unlock_pp: ktp 0x653a1b3e5620 reuse -1711462090.570877 [0] python3: dds_create_topic_generic: reuse sertype 0x653a1b269990 -1711462090.570881 [0] python3: dds_create_topic_generic: new topic 139754145 -1711462090.570887 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:504, (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_) -1711462090.570889 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:504 @ 0x653a1b2c9994) user 6 builtin 12 -1711462090.570898 [0] python3: READER 110aba1:7b19badd:ce0adb73:504 QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=1:-1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.570902 [0] python3: => EVERYONE -1711462090.570906 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:504) scanning all pwrs of topic ros_discovery_info -1711462090.570910 [0] python3: match_reader_with_writers(rd 110aba1:7b19badd:ce0adb73:504) scanning all wrs of topic ros_discovery_info -1711462090.570919 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:4c2 #1: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,history=1:-1,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:504},adlink_entity_factory=1} -1711462090.570970 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #1: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{},{}}}} -1711462090.570972 [0] python3: => EVERYONE -1711462090.571172 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 460 from udp/10.101.12.71:58212 -1711462090.571177 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.571180 [0] recv: INFOTS(1711462090.519442682) -1711462090.571186 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462090.571191 [0] tev: nn_xpack_send 444: 0x77041400139c:20 0x653a1b3ebde8:36 0x653a1b2b4514:388 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.(trunc) -1711462090.571197 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.571202 [0] tev: traffic-xmit (101) 444 -1711462090.571213 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1ae7deb0 reg?no refc 1 rt/rosout/rcl_interfaces::msg::dds_::Log_) -1711462090.571214 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 bes fc3f NEW (0x00000000-0x0000002c-0x00000000-0x00000000-0x00000000 op-Alienware-x16-R1/0.10.4/Linux/Linux) (data udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 meta udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2) QOS={user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{}} -1711462090.571215 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.571222 [0] python3: create_and_lock_ktopic: ktp 0x653a1b46bca0 -1711462090.571219 [0] dq.builtin: lease_new(tdur 10000000000 guid 110e21c:d0762c48:a9f0fb28:1c1) @ 0x77041c001c10 -1711462090.571225 [0] python3: dds_create_topic_generic: register new sertype 0x653a1ae7deb0 -1711462090.571229 [0] dq.builtin: lease_new(tdur 10000000000 guid 110e21c:d0762c48:a9f0fb28:1c1) @ 0x77041c001c90 -1711462090.571232 [0] python3: dds_create_topic_generic: new topic 638628323 -1711462090.571239 [0] dq.builtin: match_proxy_reader_with_writers(prd 110e21c:d0762c48:a9f0fb28:100c7) scanning participants tgt=0 -1711462090.571241 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:603, (default).rt/rosout/rcl_interfaces::msg::dds_::Log_) -1711462090.571243 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:3c2) scanning participants tgt=3c7 -1711462090.571246 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:603 @ 0x653a1b2cb464) user 7 builtin 12 -1711462090.571252 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:3c7 init_acknack_count = 1 -1711462090.571257 [0] dq.builtin: reader_add_connection(pwr 110e21c:d0762c48:a9f0fb28:3c2 rd 110aba1:7b19badd:ce0adb73:3c7) -1711462090.571261 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:603 QOS={user_data=0<>,topic_name="rt/rosout",type_name="rcl_interfaces::msg::dds_::Log_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1000:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=10000000000,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.571264 [0] gc: gc 0x653a1b47e890: deleting -1711462090.571262 [0] dq.builtin: proxy_writer_add_connection(pwr 110e21c:d0762c48:a9f0fb28:3c2 rd 110aba1:7b19badd:ce0adb73:3c7) - out-of-sync -1711462090.571267 [0] python3: => EVERYONE -1711462090.571273 [0] dq.builtin: match_proxy_reader_with_writers(prd 110e21c:d0762c48:a9f0fb28:3c7) scanning participants tgt=3c2 -1711462090.571274 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:603) scanning all prds of topic rt/rosout -1711462090.571276 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:3c2 prd 110e21c:d0762c48:a9f0fb28:3c7) -1711462090.571280 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:3c2 prd 110e21c:d0762c48:a9f0fb28:3c7) - ack seq 1 -1711462090.571281 [0] python3: match_writer_with_readers(wr 110aba1:7b19badd:ce0adb73:603) scanning all rds of topic rt/rosout -1711462090.571284 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 -1711462090.571289 [0] dq.builtin: reduced nlocs=2 -1711462090.571291 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571294 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571296 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462090.571299 [0] dq.builtin: a -1711462090.571302 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u } -1711462090.571304 [0] dq.builtin: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462090.571306 [0] dq.builtin: best = 0 -1711462090.571308 [0] dq.builtin: simple udp/10.101.12.71:7412@2 -1711462090.571312 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:3c2): udp/10.101.12.71:7412@2 (burst size 4294901760 rexmit 1048576) -1711462090.571316 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:4c2) scanning participants tgt=4c7 -1711462090.571317 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:4c7 init_acknack_count = 1 -1711462090.571319 [0] dq.builtin: reader_add_connection(pwr 110e21c:d0762c48:a9f0fb28:4c2 rd 110aba1:7b19badd:ce0adb73:4c7) -1711462090.571319 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:3c2 #2: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/rosout",type_name="rcl_interfaces::msg::dds_::Log_",durability=1,durability_service=0:0:1000:-1:-1:-1,reliability=1:9223372036854775807,lifespan=10000000000,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.571323 [0] dq.builtin: proxy_writer_add_connection(pwr 110e21c:d0762c48:a9f0fb28:4c2 rd 110aba1:7b19badd:ce0adb73:4c7) - out-of-sync -1711462090.571329 [0] dq.builtin: match_proxy_reader_with_writers(prd 110e21c:d0762c48:a9f0fb28:4c7) scanning participants tgt=4c2 -1711462090.571332 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:4c2 prd 110e21c:d0762c48:a9f0fb28:4c7) -1711462090.571336 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:4c2 prd 110e21c:d0762c48:a9f0fb28:4c7) - ack seq 1 -1711462090.571329 [0] python3: non-timed queue now has 1 items -1711462090.571340 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 -1711462090.571345 [0] dq.builtin: reduced nlocs=2 -1711462090.571347 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571348 [0] tev: xpack_addmsg 0x770414001390 0x653a1b2cbe40 0(data(110aba1:7b19badd:ce0adb73:3c2:#2/1)): niov 0 sz 0 => now niov 3 sz 256 -1711462090.571349 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571355 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462090.571358 [0] dq.builtin: a -1711462090.571355 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #2: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}}}}} -1711462090.571361 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u } -1711462090.571364 [0] tev: nn_xpack_send 256: 0x77041400139c:20 0x653a1af32538:36 0x653a1af8b024:200 [ udp/10.101.12.71:7412@2 ] -1711462090.571365 [0] python3: => EVERYONE -1711462090.571370 [0] tev: traffic-xmit (1) 256 -1711462090.571365 [0] dq.builtin: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462090.571381 [0] dq.builtin: best = 0 -1711462090.571383 [0] dq.builtin: simple udp/10.101.12.71:7412@2 -1711462090.571386 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:4c2): udp/10.101.12.71:7412@2 (burst size 4294901760 rexmit 1048576) -1711462090.571392 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:200c2) scanning participants tgt=200c7 -1711462090.571394 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:200c7 init_acknack_count = 1 -1711462090.571396 [0] dq.builtin: reader_add_connection(pwr 110e21c:d0762c48:a9f0fb28:200c2 rd 110aba1:7b19badd:ce0adb73:200c7) -1711462090.571398 [0] dq.builtin: proxy_writer_add_connection(pwr 110e21c:d0762c48:a9f0fb28:200c2 rd 110aba1:7b19badd:ce0adb73:200c7) - out-of-sync -1711462090.571401 [0] dq.builtin: match_proxy_reader_with_writers(prd 110e21c:d0762c48:a9f0fb28:200c7) scanning participants tgt=200c2 -1711462090.571405 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:200c2 prd 110e21c:d0762c48:a9f0fb28:200c7) -1711462090.571407 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:200c2 prd 110e21c:d0762c48:a9f0fb28:200c7) - ack seq 1 -1711462090.571411 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 -1711462090.571412 [0] dq.builtin: reduced nlocs=2 -1711462090.571414 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571417 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571418 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462090.571421 [0] dq.builtin: a -1711462090.571423 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u } -1711462090.571426 [0] dq.builtin: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462090.571428 [0] dq.builtin: best = 0 -1711462090.571429 [0] dq.builtin: simple udp/10.101.12.71:7412@2 -1711462090.571433 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:200c2): udp/10.101.12.71:7412@2 (burst size 4294901760 rexmit 1048576) -1711462090.571437 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:300c3) scanning participants tgt=300c4 -1711462090.571438 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:300c4 init_acknack_count = 1 -1711462090.571443 [0] dq.builtin: reader_add_connection(pwr 110e21c:d0762c48:a9f0fb28:300c3 rd 110aba1:7b19badd:ce0adb73:300c4) -1711462090.571446 [0] dq.builtin: proxy_writer_add_connection(pwr 110e21c:d0762c48:a9f0fb28:300c3 rd 110aba1:7b19badd:ce0adb73:300c4) - out-of-sync -1711462090.571454 [0] dq.builtin: match_proxy_reader_with_writers(prd 110e21c:d0762c48:a9f0fb28:300c4) scanning participants tgt=300c3 -1711462090.571458 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:300c3 prd 110e21c:d0762c48:a9f0fb28:300c4) -1711462090.571460 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:300c3 prd 110e21c:d0762c48:a9f0fb28:300c4) - ack seq 0 -1711462090.571455 [0] gc: gc 0x77041c005430: not yet, shortsleep -1711462090.571466 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 -1711462090.571468 [0] dq.builtin: reduced nlocs=2 -1711462090.571471 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571473 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571476 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462090.571477 [0] dq.builtin: a -1711462090.571479 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u } -1711462090.571482 [0] dq.builtin: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462090.571483 [0] dq.builtin: best = 0 -1711462090.571486 [0] dq.builtin: simple udp/10.101.12.71:7412@2 -1711462090.571488 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:300c3): udp/10.101.12.71:7412@2 (burst size 4294901760 rexmit 1048576) -1711462090.571492 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:301c3) scanning participants tgt=301c4 -1711462090.571494 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:301c4 init_acknack_count = 1 -1711462090.571496 [0] dq.builtin: reader_add_connection(pwr 110e21c:d0762c48:a9f0fb28:301c3 rd 110aba1:7b19badd:ce0adb73:301c4) -1711462090.571498 [0] dq.builtin: proxy_writer_add_connection(pwr 110e21c:d0762c48:a9f0fb28:301c3 rd 110aba1:7b19badd:ce0adb73:301c4) - out-of-sync -1711462090.571502 [0] dq.builtin: match_proxy_reader_with_writers(prd 110e21c:d0762c48:a9f0fb28:301c4) scanning participants tgt=301c3 -1711462090.571503 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:301c3 prd 110e21c:d0762c48:a9f0fb28:301c4) -1711462090.571506 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:301c3 prd 110e21c:d0762c48:a9f0fb28:301c4) - ack seq 0 -1711462090.571509 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 -1711462090.571511 [0] dq.builtin: reduced nlocs=2 -1711462090.571513 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571514 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571517 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462090.571518 [0] dq.builtin: a -1711462090.571521 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u } -1711462090.571523 [0] dq.builtin: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462090.571526 [0] dq.builtin: best = 0 -1711462090.571527 [0] dq.builtin: simple udp/10.101.12.71:7412@2 -1711462090.571529 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:301c3): udp/10.101.12.71:7412@2 (burst size 4294901760 rexmit 1048576) -1711462090.571538 [0] dq.builtin: => EVERYONE -1711462090.571544 [0] dq.builtin: lease_register(l 0x77041c001c90 guid 110e21c:d0762c48:a9f0fb28:1c1) -1711462090.571546 [0] dq.builtin: directed SPDP packet -> not responding -1711462090.571576 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 460 from udp/10.101.12.71:44991 -1711462090.571579 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.571584 [0] recv: INFOTS(1711462090.549308855) -1711462090.571589 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462090.571593 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 460 from udp/10.101.12.71:40473 -1711462090.571594 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.571596 [0] recv: INFOTS(1711462090.541682763) -1711462090.571597 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.571598 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462090.571606 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 bes fc3f NEW (0x00000000-0x0000002c-0x00000000-0x00000000-0x00000000 op-Alienware-x16-R1/0.10.4/Linux/Linux) (data udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 meta udp/239.255.0.1:7400@2 udp/10.101.12.71:7416@2) QOS={user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{}} -1711462090.571609 [0] dq.builtin: lease_new(tdur 10000000000 guid 110443d:bb7f10a5:18901533:1c1) @ 0x77041c006550 -1711462090.571611 [0] dq.builtin: lease_new(tdur 10000000000 guid 110443d:bb7f10a5:18901533:1c1) @ 0x77041c0065d0 -1711462090.571615 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:100c7) scanning participants tgt=0 -1711462090.571618 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:3c2) scanning participants tgt=3c7 -1711462090.571620 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:3c7 init_acknack_count = 1 -1711462090.571621 [0] dq.builtin: reader_add_connection(pwr 110443d:bb7f10a5:18901533:3c2 rd 110aba1:7b19badd:ce0adb73:3c7) -1711462090.571624 [0] dq.builtin: proxy_writer_add_connection(pwr 110443d:bb7f10a5:18901533:3c2 rd 110aba1:7b19badd:ce0adb73:3c7) - out-of-sync -1711462090.571627 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:3c7) scanning participants tgt=3c2 -1711462090.571629 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:3c2 prd 110443d:bb7f10a5:18901533:3c7) -1711462090.571630 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:3c2 prd 110443d:bb7f10a5:18901533:3c7) - ack seq 2 -1711462090.571633 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7416@2 -1711462090.571635 [0] dq.builtin: reduced nlocs=3 -1711462090.571637 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571639 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571641 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462090.571642 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571645 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 1 -> 0 -1711462090.571647 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462090.571648 [0] dq.builtin: a b -1711462090.571651 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462090.571653 [0] dq.builtin: loc 1 = udp/10.101.12.71:7416@2 1 { .. +u } -1711462090.571655 [0] dq.builtin: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462090.571658 [0] dq.builtin: best = 2 -1711462090.571661 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.571663 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.571666 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:4c2) scanning participants tgt=4c7 -1711462090.571668 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:4c7 init_acknack_count = 1 -1711462090.571670 [0] dq.builtin: reader_add_connection(pwr 110443d:bb7f10a5:18901533:4c2 rd 110aba1:7b19badd:ce0adb73:4c7) -1711462090.571672 [0] dq.builtin: proxy_writer_add_connection(pwr 110443d:bb7f10a5:18901533:4c2 rd 110aba1:7b19badd:ce0adb73:4c7) - out-of-sync -1711462090.571675 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:4c7) scanning participants tgt=4c2 -1711462090.571678 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:4c2 prd 110443d:bb7f10a5:18901533:4c7) -1711462090.571680 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:4c2 prd 110443d:bb7f10a5:18901533:4c7) - ack seq 1 -1711462090.571683 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7416@2 -1711462090.571686 [0] dq.builtin: reduced nlocs=3 -1711462090.571687 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571690 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571691 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462090.571694 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571695 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 1 -> 0 -1711462090.571697 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462090.571700 [0] dq.builtin: a b -1711462090.571702 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462090.571705 [0] dq.builtin: loc 1 = udp/10.101.12.71:7416@2 1 { .. +u } -1711462090.571708 [0] dq.builtin: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462090.571709 [0] dq.builtin: best = 2 -1711462090.571712 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.571718 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.571721 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:200c2) scanning participants tgt=200c7 -1711462090.571723 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:200c7 init_acknack_count = 1 -1711462090.571725 [0] dq.builtin: reader_add_connection(pwr 110443d:bb7f10a5:18901533:200c2 rd 110aba1:7b19badd:ce0adb73:200c7) -1711462090.571727 [0] dq.builtin: proxy_writer_add_connection(pwr 110443d:bb7f10a5:18901533:200c2 rd 110aba1:7b19badd:ce0adb73:200c7) - out-of-sync -1711462090.571730 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:200c7) scanning participants tgt=200c2 -1711462090.571733 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:200c2 prd 110443d:bb7f10a5:18901533:200c7) -1711462090.571735 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:200c2 prd 110443d:bb7f10a5:18901533:200c7) - ack seq 1 -1711462090.571740 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7416@2 -1711462090.571742 [0] dq.builtin: reduced nlocs=3 -1711462090.571743 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571745 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571748 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462090.571751 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571753 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 1 -> 0 -1711462090.571754 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462090.571756 [0] dq.builtin: a b -1711462090.571760 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462090.571762 [0] dq.builtin: loc 1 = udp/10.101.12.71:7416@2 1 { .. +u } -1711462090.571764 [0] dq.builtin: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462090.571766 [0] dq.builtin: best = 2 -1711462090.571769 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.571771 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.571775 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:300c3) scanning participants tgt=300c4 -1711462090.571776 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:300c4 init_acknack_count = 1 -1711462090.571778 [0] dq.builtin: reader_add_connection(pwr 110443d:bb7f10a5:18901533:300c3 rd 110aba1:7b19badd:ce0adb73:300c4) -1711462090.571779 [0] dq.builtin: proxy_writer_add_connection(pwr 110443d:bb7f10a5:18901533:300c3 rd 110aba1:7b19badd:ce0adb73:300c4) - out-of-sync -1711462090.571784 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:300c4) scanning participants tgt=300c3 -1711462090.571786 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:300c3 prd 110443d:bb7f10a5:18901533:300c4) -1711462090.571787 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:300c3 prd 110443d:bb7f10a5:18901533:300c4) - ack seq 0 -1711462090.571791 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7416@2 -1711462090.571793 [0] dq.builtin: reduced nlocs=3 -1711462090.571794 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571797 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571799 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462090.571800 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571802 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 1 -> 0 -1711462090.571804 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462090.571807 [0] dq.builtin: a b -1711462090.571809 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462090.571811 [0] dq.builtin: loc 1 = udp/10.101.12.71:7416@2 1 { .. +u } -1711462090.571813 [0] dq.builtin: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462090.571814 [0] dq.builtin: best = 2 -1711462090.571815 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.571819 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.571822 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:301c3) scanning participants tgt=301c4 -1711462090.571825 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:301c4 init_acknack_count = 1 -1711462090.571827 [0] dq.builtin: reader_add_connection(pwr 110443d:bb7f10a5:18901533:301c3 rd 110aba1:7b19badd:ce0adb73:301c4) -1711462090.571833 [0] dq.builtin: proxy_writer_add_connection(pwr 110443d:bb7f10a5:18901533:301c3 rd 110aba1:7b19badd:ce0adb73:301c4) - out-of-sync -1711462090.571835 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:301c4) scanning participants tgt=301c3 -1711462090.571837 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:301c3 prd 110443d:bb7f10a5:18901533:301c4) -1711462090.571839 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:301c3 prd 110443d:bb7f10a5:18901533:301c4) - ack seq 0 -1711462090.571842 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7416@2 -1711462090.571844 [0] dq.builtin: reduced nlocs=3 -1711462090.571845 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571849 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571851 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462090.571853 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571855 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 1 -> 0 -1711462090.571857 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462090.571859 [0] dq.builtin: a b -1711462090.571862 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462090.571865 [0] dq.builtin: loc 1 = udp/10.101.12.71:7416@2 1 { .. +u } -1711462090.571867 [0] dq.builtin: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462090.571868 [0] dq.builtin: best = 2 -1711462090.571870 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.571872 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.571880 [0] dq.builtin: => EVERYONE -1711462090.571882 [0] dq.builtin: lease_register(l 0x77041c0065d0 guid 110443d:bb7f10a5:18901533:1c1) -1711462090.571883 [0] dq.builtin: directed SPDP packet -> not responding -1711462090.571892 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.571899 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 bes fc3f NEW (0x00000000-0x0000002c-0x00000000-0x00000000-0x00000000 op-Alienware-x16-R1/0.10.4/Linux/Linux) (data udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 meta udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2) QOS={user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{}} -1711462090.571901 [0] dq.builtin: lease_new(tdur 10000000000 guid 110d7b4:17c5b8c5:94bd0ff4:1c1) @ 0x77041c00b710 -1711462090.571905 [0] dq.builtin: lease_new(tdur 10000000000 guid 110d7b4:17c5b8c5:94bd0ff4:1c1) @ 0x77041c00b790 -1711462090.571910 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:100c7) scanning participants tgt=0 -1711462090.571915 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) scanning participants tgt=3c7 -1711462090.571916 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:3c7 init_acknack_count = 1 -1711462090.571919 [0] dq.builtin: reader_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:3c2 rd 110aba1:7b19badd:ce0adb73:3c7) -1711462090.571920 [0] dq.builtin: proxy_writer_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:3c2 rd 110aba1:7b19badd:ce0adb73:3c7) - out-of-sync -1711462090.571923 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3c7) scanning participants tgt=3c2 -1711462090.571925 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:3c2 prd 110d7b4:17c5b8c5:94bd0ff4:3c7) -1711462090.571927 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:3c2 prd 110d7b4:17c5b8c5:94bd0ff4:3c7) - ack seq 2 -1711462090.571931 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.571933 [0] dq.builtin: reduced nlocs=4 -1711462090.571934 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571937 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571940 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.571941 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571945 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.571946 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.571948 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571950 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.571952 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.571954 [0] dq.builtin: a b c -1711462090.571956 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462090.571958 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462090.571960 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462090.571963 [0] dq.builtin: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462090.571965 [0] dq.builtin: best = 3 -1711462090.571968 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.571971 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.571975 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4c2) scanning participants tgt=4c7 -1711462090.571976 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:4c7 init_acknack_count = 1 -1711462090.571979 [0] dq.builtin: reader_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:4c2 rd 110aba1:7b19badd:ce0adb73:4c7) -1711462090.571980 [0] dq.builtin: proxy_writer_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:4c2 rd 110aba1:7b19badd:ce0adb73:4c7) - out-of-sync -1711462090.571983 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4c7) scanning participants tgt=4c2 -1711462090.571984 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:4c2 prd 110d7b4:17c5b8c5:94bd0ff4:4c7) -1711462090.571986 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:4c2 prd 110d7b4:17c5b8c5:94bd0ff4:4c7) - ack seq 1 -1711462090.571989 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.571991 [0] dq.builtin: reduced nlocs=4 -1711462090.571993 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571995 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571997 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.571998 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572000 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.572002 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.572003 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 204 from udp/10.101.12.71:44991 -1711462090.572006 [0] recv: INFOTS(1711462090.571973111) -1711462090.572004 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572014 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.572018 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.572011 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #10 L(:1c1 16938.231510) 110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.572021 [0] dq.builtin: a b c -1711462090.572028 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462090.572030 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462090.572032 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462090.572035 [0] dq.builtin: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462090.572038 [0] dq.builtin: best = 3 -1711462090.572039 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.572043 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.572046 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:200c2) scanning participants tgt=200c7 -1711462090.572049 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:200c7 init_acknack_count = 1 -1711462090.572051 [0] dq.builtin: reader_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:200c2 rd 110aba1:7b19badd:ce0adb73:200c7) -1711462090.572054 [0] dq.builtin: proxy_writer_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:200c2 rd 110aba1:7b19badd:ce0adb73:200c7) - out-of-sync -1711462090.572056 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:200c7) scanning participants tgt=200c2 -1711462090.572059 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:200c2 prd 110d7b4:17c5b8c5:94bd0ff4:200c7) -1711462090.572062 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:200c2 prd 110d7b4:17c5b8c5:94bd0ff4:200c7) - ack seq 1 -1711462090.572065 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.572066 [0] dq.builtin: reduced nlocs=4 -1711462090.572068 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572071 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.572075 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.572086 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572090 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.572094 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.572098 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572080 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 520 from udp/10.101.12.71:44991 -1711462090.572102 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.572115 [0] recvMC: INFOTS(1711462090.571985769) -1711462090.572119 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.572123 [0] dq.builtin: a b c -1711462090.572127 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462090.572130 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462090.572130 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #10 110443d:bb7f10a5:18901533:403? -> 0:0:0:0) -1711462090.572135 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462090.572141 [0] recvMC: HEARTBEAT(F#15:10..10 110443d:bb7f10a5:18901533:403? -> 0:0:0:0) -1711462090.572143 [0] dq.builtin: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462090.572146 [0] dq.builtin: best = 3 -1711462090.572149 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.572152 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.572156 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:300c3) scanning participants tgt=300c4 -1711462090.572157 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:300c4 init_acknack_count = 1 -1711462090.572159 [0] dq.builtin: reader_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:300c3 rd 110aba1:7b19badd:ce0adb73:300c4) -1711462090.572161 [0] dq.builtin: proxy_writer_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:300c3 rd 110aba1:7b19badd:ce0adb73:300c4) - out-of-sync -1711462090.572164 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:300c4) scanning participants tgt=300c3 -1711462090.572166 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:300c3 prd 110d7b4:17c5b8c5:94bd0ff4:300c4) -1711462090.572170 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:300c3 prd 110d7b4:17c5b8c5:94bd0ff4:300c4) - ack seq 0 -1711462090.572176 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.572179 [0] dq.builtin: reduced nlocs=4 -1711462090.572180 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572182 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.572183 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.572185 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572187 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.572188 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.572190 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572192 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.572193 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.572195 [0] dq.builtin: a b c -1711462090.572197 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462090.572199 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462090.572201 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462090.572204 [0] dq.builtin: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462090.572208 [0] dq.builtin: best = 3 -1711462090.572209 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.572211 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.572216 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:301c3) scanning participants tgt=301c4 -1711462090.572227 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:301c4 init_acknack_count = 1 -1711462090.572229 [0] dq.builtin: reader_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:301c3 rd 110aba1:7b19badd:ce0adb73:301c4) -1711462090.572230 [0] dq.builtin: proxy_writer_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:301c3 rd 110aba1:7b19badd:ce0adb73:301c4) - out-of-sync -1711462090.572234 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:301c4) scanning participants tgt=301c3 -1711462090.572235 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:301c3 prd 110d7b4:17c5b8c5:94bd0ff4:301c4) -1711462090.572237 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:301c3 prd 110d7b4:17c5b8c5:94bd0ff4:301c4) - ack seq 0 -1711462090.572240 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.572242 [0] dq.builtin: reduced nlocs=4 -1711462090.572244 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572245 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.572247 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.572248 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572251 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.572252 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.572253 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572255 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.572257 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462090.572259 [0] dq.builtin: a b c -1711462090.572261 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462090.572264 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462090.572267 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462090.572270 [0] dq.builtin: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462090.572271 [0] dq.builtin: best = 3 -1711462090.572273 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.572276 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.572282 [0] dq.builtin: => EVERYONE -1711462090.572284 [0] dq.builtin: lease_register(l 0x77041c00b790 guid 110d7b4:17c5b8c5:94bd0ff4:1c1) -1711462090.572287 [0] dq.builtin: directed SPDP packet -> not responding -1711462090.572375 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:3c2 multicasting (rel-prd 3 seq-eq-max 0 seq 2 maxseq 2) -1711462090.572385 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:3c2) sent, resched in 0.1 s (min-ack 1!, avail-seq 2, xmit 2) -1711462090.572390 [0] tev: xpack_addmsg 0x770414001390 0x653a1b2cbe40 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462090.572395 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:4c2 multicasting (rel-prd 3 seq-eq-max 0 seq 1 maxseq 1) -1711462090.572399 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:4c2) sent, resched in 0.1 s (min-ack 1!, avail-seq 1, xmit 1) -1711462090.572406 [0] tev: xpack_addmsg 0x770414001390 0x653a1aebe8d0 0(control): niov 2 sz 52 => now niov 3 sz 84 -1711462090.572427 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 84 from udp/10.101.12.71:52025 -1711462090.572430 [0] recv: HEARTBEAT(#1:1..2 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462090.572435 [0] recv: HEARTBEAT(#1:1..1 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462090.572431 [0] tev: nn_xpack_send 84: 0x77041400139c:20 0x653a1af32538:32 0x653a1b3ebde8:32 [ udp/239.255.0.1:7400@2 ] -1711462090.572441 [0] tev: traffic-xmit (1) 84 -1711462090.572446 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:200c2 multicasting (rel-prd 3 seq-eq-max 0 seq 1 maxseq 1) -1711462090.572450 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:200c2) sent, resched in 0.1 s (min-ack 1!, avail-seq 1, xmit 1) -1711462090.572454 [0] tev: xpack_addmsg 0x770414001390 0x653a1b2cbe40 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462090.572473 [0] tev: nn_xpack_send 52: 0x77041400139c:20 0x653a1af32538:32 [ udp/239.255.0.1:7400@2 ] -1711462090.572479 [0] tev: traffic-xmit (1) 52 -1711462090.572479 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 52 from udp/10.101.12.71:52025 -1711462090.572493 [0] recv: HEARTBEAT(#1:1..1 110aba1:7b19badd:ce0adb73:200c2? -> 0:0:0:0) -1711462090.572509 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 100 from udp/10.101.12.71:40473 -1711462090.572513 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:300c3 multicasting (rel-prd 3 seq-eq-max 0 seq 0 maxseq 0) -1711462090.572516 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.572522 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:300c3) sent, resched in 0.1 s (min-ack 0!, avail-seq 0, xmit 0) -1711462090.572538 [0] tev: xpack_addmsg 0x770414001390 0x653a1b2cbe40 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462090.572539 [0] recv: ACKNACK(F#1:1/2:11 L(:1c1 16938.232019) 110d7b4:17c5b8c5:94bd0ff4:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 complying RX1non-timed queue now has 1 items -1711462090.572512 [0] gc: gc 0x77041c005430: deleting -1711462090.572549 [0] recv: RX2non-timed queue now has 2 items -1711462090.572560 [0] recv: rexmit#2 maxseq:2<2<=2defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:3c2 -> 110d7b4:17c5b8c5:94bd0ff4:3c7 - queue for transmit -1711462090.572563 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:301c3 multicasting (rel-prd 3 seq-eq-max 0 seq 0 maxseq 0) -1711462090.572555 [0] gc: gc 0x77041c006ae0: deleting -1711462090.572569 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:301c3) sent, resched in 0.1 s (min-ack 0!, avail-seq 0, xmit 0) -1711462090.572578 [0] tev: xpack_addmsg 0x770414001390 0x653a1aebe8d0 0(control): niov 2 sz 52 => now niov 3 sz 84 -1711462090.572565 [0] recv: ) -1711462090.572579 [0] gc: gc 0x77041c00b2e0: deleting -1711462090.572593 [0] recv: ACKNACK(F#1:1/1:1 110d7b4:17c5b8c5:94bd0ff4:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 complying RX1non-timed queue now has 2 items -1711462090.572593 [0] gc: gc 0x77041c00fb20: deleting -1711462090.572598 [0] recv: rexmit#1 maxseq:1<1<=1defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:4c2 -> 110d7b4:17c5b8c5:94bd0ff4:4c7 - queue for transmit -1711462090.572603 [0] recv: non-timed queue now has 3 items -1711462090.572608 [0] recv: ) -1711462090.572604 [0] tev: nn_xpack_send 84: 0x77041400139c:20 0x653a1af32538:32 0x653a1b3ebde8:32 [ udp/239.255.0.1:7400@2 ] -1711462090.572619 [0] tev: traffic-xmit (1) 84 -1711462090.572613 [0] recv: send_deferred_heartbeat: 34e8ac789b0d206c -> ab74337e0dc0d6b8 - queue for transmit -1711462090.572628 [0] tev: xpack_addmsg 0x770414001390 0x77040c001390 0(rexmit(110aba1:7b19badd:ce0adb73:3c2:#1/1)): niov 0 sz 0 => now niov 3 sz 244 -1711462090.572637 [0] recv: non-timed queue now has 4 items -1711462090.572649 [0] tev: xpack_addmsg 0x770414001390 0x77040c001560 0(rexmit(110aba1:7b19badd:ce0adb73:3c2:#2/1)): niov 3 sz 244 => now niov 5 sz 480 -1711462090.572650 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 68 from udp/10.101.12.71:40473 -1711462090.572654 [0] tev: xpack_addmsg 0x770414001390 0x77040c0018b0 0(rexmit(110aba1:7b19badd:ce0adb73:4c2:#1/1)): niov 5 sz 480 => now niov 7 sz 692 -1711462090.572661 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.572666 [0] tev: xpack_addmsg 0x770414001390 0x77040c001730 0(control): niov 7 sz 692 => now niov 8 sz 724 -1711462090.572673 [0] recv: ACKNACK(F#1:1/1:1 L(:1c1 16938.232164) 110d7b4:17c5b8c5:94bd0ff4:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 complying RX1non-timed queue now has 1 items -1711462090.572676 [0] recv: rexmit#1 maxseq:1<1<=1defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:200c2 -> 110d7b4:17c5b8c5:94bd0ff4:200c7 - queue for transmit -1711462090.572680 [0] recv: ) -1711462090.572674 [0] tev: xpack_addmsg 0x770414001390 0x77040c001ad0 0(control): niov 8 sz 724 => now niov 9 sz 756 -1711462090.572681 [0] recv: send_deferred_heartbeat: 83fc25c67f0bf70f -> a8ebede2376e2416 - queue for transmit -1711462090.572687 [0] tev: xpack_addmsg 0x770414001390 0x77040c001ca0 0(rexmit(110aba1:7b19badd:ce0adb73:200c2:#1/1)): niov 9 sz 756 => now niov 11 sz 820 -1711462090.572688 [0] recv: non-timed queue now has 1 items -1711462090.572698 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 84 from udp/10.101.12.71:52025 -1711462090.572700 [0] tev: xpack_addmsg 0x770414001390 0x77040c001e70 0(control): niov 11 sz 820 => now niov 12 sz 852 -1711462090.572701 [0] recv: HEARTBEAT(#1:1..0 110aba1:7b19badd:ce0adb73:300c3? -> 0:0:0:0) -1711462090.572706 [0] recv: HEARTBEAT(#1:1..0 110aba1:7b19badd:ce0adb73:301c3? -> 0:0:0:0) -1711462090.572711 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 132 from udp/10.101.12.71:44991 -1711462090.572712 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.572716 [0] recv: ACKNACK(F#1:1/2:11 L(:1c1 16938.232216) 110443d:bb7f10a5:18901533:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 complying RX1non-timed queue now has 1 items -1711462090.572718 [0] recv: RX2non-timed queue now has 2 items -1711462090.572719 [0] tev: nn_xpack_send 852: 0x77041400139c:20 0x77040c001478:52 0x653a1b4036c4:172 0x77040c001658:36 0x653a1af8b024:200 0x77040c0019a8:36 0x653a1b2ca014:176 0x77040c001828:32 0x77040c001bc8:32 0x77040c001d98:36 0x7704140024ec:28 0x77040c001f68:32 [ udp/10.101.12.71:7414@2 ] -1711462090.572720 [0] recv: rexmit#2 maxseq:2<2<=2defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:3c2 -> 110443d:bb7f10a5:18901533:3c7 - queue for transmit -1711462090.572727 [0] recv: ) -1711462090.572724 [0] tev: traffic-xmit (1) 852 -1711462090.572730 [0] recv: ACKNACK(F#1:1/1:1 110443d:bb7f10a5:18901533:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 complying RX1non-timed queue now has 3 items -1711462090.572736 [0] recv: rexmit#1 maxseq:1<1<=1defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:4c2 -> 110443d:bb7f10a5:18901533:4c7 - queue for transmit -1711462090.572737 [0] recv: non-timed queue now has 4 items -1711462090.572741 [0] recv: ) -1711462090.572745 [0] recv: ACKNACK(F#1:1/1:1 110443d:bb7f10a5:18901533:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 complying RX1non-timed queue now has 4 items -1711462090.572748 [0] recv: rexmit#1 maxseq:1<1<=1defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:200c2 -> 110443d:bb7f10a5:18901533:200c7 - queue for transmit -1711462090.572750 [0] recv: non-timed queue now has 5 items -1711462090.572752 [0] recv: ) -1711462090.572745 [0] tev: xpack_addmsg 0x770414001390 0x77040c002040 0(rexmit(110aba1:7b19badd:ce0adb73:3c2:#1/1)): niov 0 sz 0 => now niov 3 sz 244 -1711462090.572754 [0] recv: send_deferred_heartbeat: 83fc25c67f0bf70f -> 1ba0b4e5d073b591 - queue for transmit -1711462090.572761 [0] recv: non-timed queue now has 5 items -1711462090.572759 [0] tev: xpack_addmsg 0x770414001390 0x77040c0021c0 0(rexmit(110aba1:7b19badd:ce0adb73:3c2:#2/1)): niov 3 sz 244 => now niov 5 sz 480 -1711462090.572766 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 132 from udp/10.101.12.71:58212 -1711462090.572769 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.572772 [0] recv: ACKNACK(F#1:1/2:11 L(:1c1 16938.232273) 110e21c:d0762c48:a9f0fb28:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 complying RX1non-timed queue now has 5 items -1711462090.572775 [0] recv: RX2non-timed queue now has 6 items -1711462090.572777 [0] recv: rexmit#2 maxseq:2<2<=2defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:3c2 -> 110e21c:d0762c48:a9f0fb28:3c7 - queue for transmit -1711462090.572782 [0] recv: ) -1711462090.572773 [0] tev: xpack_addmsg 0x770414001390 0x77040c002510 0(rexmit(110aba1:7b19badd:ce0adb73:4c2:#1/1)): niov 5 sz 480 => now niov 7 sz 692 -1711462090.572784 [0] recv: ACKNACK(F#1:1/1:1 110e21c:d0762c48:a9f0fb28:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 complying RX1non-timed queue now has 7 items -1711462090.572790 [0] recv: rexmit#1 maxseq:1<1<=1defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:4c2 -> 110e21c:d0762c48:a9f0fb28:4c7 - queue for transmit -1711462090.572794 [0] recv: non-timed queue now has 7 items -1711462090.572796 [0] recv: ) -1711462090.572794 [0] tev: xpack_addmsg 0x770414001390 0x77040c002390 0(control): niov 7 sz 692 => now niov 8 sz 724 -1711462090.572799 [0] recv: ACKNACK(F#1:1/1:1 110e21c:d0762c48:a9f0fb28:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 complying RX1 (110aba1:7b19badd:ce0adb73:200c2#1/1:1+1->*) rexmit#1 maxseq:1<1<=1defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:200c2 -> 110e21c:d0762c48:a9f0fb28:200c7 - queue for transmit -1711462090.572803 [0] recv: non-timed queue now has 7 items -1711462090.572804 [0] recv: ) -1711462090.572806 [0] recv: send_deferred_heartbeat: 83fc25c67f0bf70f -> ff2b90d6377b7c1e - queue for transmit -1711462090.572808 [0] recv: non-timed queue now has 8 items -1711462090.572811 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 92 from udp/10.101.12.71:58212 -1711462090.572813 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.572813 [0] tev: nn_xpack_send 724: 0x77041400139c:20 0x77040c002128:52 0x653a1b4036c4:172 0x77040c0022b8:36 0x653a1af8b024:200 0x77040c002608:36 0x653a1b2ca014:176 0x77040c002488:32 [ udp/10.101.12.71:7416@2 ] -1711462090.572817 [0] recv: ACKNACK(F#1:1/0: L(:1c1 16938.232318) 110e21c:d0762c48:a9f0fb28:300c4 -> 110aba1:7b19badd:ce0adb73:300c3 setting-has-replied-to-hb happy-now) -1711462090.572820 [0] recv: ACKNACK(F#1:1/0: 110e21c:d0762c48:a9f0fb28:301c4 -> 110aba1:7b19badd:ce0adb73:301c3 setting-has-replied-to-hb happy-now) -1711462090.572818 [0] tev: traffic-xmit (1) 724 -1711462090.572825 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 92 from udp/10.101.12.71:44991 -1711462090.572831 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.572832 [0] tev: xpack_addmsg 0x770414001390 0x77040c0028b0 0(rexmit(110aba1:7b19badd:ce0adb73:200c2:#1/1)): niov 0 sz 0 => now niov 3 sz 84 -1711462090.572835 [0] recv: ACKNACK(F#1:1/0: L(:1c1 16938.232336) 110443d:bb7f10a5:18901533:300c4 -> 110aba1:7b19badd:ce0adb73:300c3 setting-has-replied-to-hb happy-now) -1711462090.572837 [0] recv: ACKNACK(F#1:1/0: 110443d:bb7f10a5:18901533:301c4 -> 110aba1:7b19badd:ce0adb73:301c3 setting-has-replied-to-hb happy-now) -1711462090.572840 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 92 from udp/10.101.12.71:40473 -1711462090.572842 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.572844 [0] recv: ACKNACK(F#1:1/0: L(:1c1 16938.232346) 110d7b4:17c5b8c5:94bd0ff4:300c4 -> 110aba1:7b19badd:ce0adb73:300c3 setting-has-replied-to-hb happy-now) -1711462090.572846 [0] recv: ACKNACK(F#1:1/0: 110d7b4:17c5b8c5:94bd0ff4:301c4 -> 110aba1:7b19badd:ce0adb73:301c3 setting-has-replied-to-hb happy-now) -1711462090.572850 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 804 from udp/10.101.12.71:50807 -1711462090.572852 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.572852 [0] tev: nn_xpack_send 84: 0x77041400139c:20 0x77040c0029a8:36 0x7704140024ec:28 [ udp/239.255.0.1:7400@2 ] -1711462090.572857 [0] recv: ACKNACK(F#1:1/2:11 110cd0d:56a27910:57318171:3c7? -> 110aba1:7b19badd:ce0adb73:3c2) -1711462090.572863 [0] tev: traffic-xmit (1) 84 -1711462090.572864 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.572875 [0] recv: ACKNACK(F#12:3/0: 110cd0d:e3b81b8d:1ccb65b1:3c7? -> 110aba1:7b19badd:ce0adb73:3c2) -1711462090.572877 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462090.572880 [0] recv: ACKNACK(F#6:3/0: 110cd0d:79d6eeac:ea4a8907:3c7? -> 110aba1:7b19badd:ce0adb73:3c2) -1711462090.572882 [0] recv: INFOSRC(110cd0d:56a27910:57318171 vendor 1.16) -1711462090.572871 [0] tev: xpack_addmsg 0x770414001390 0x77040c002730 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.572885 [0] recv: ACKNACK(F#1:1/1:1 110cd0d:56a27910:57318171:4c7? -> 110aba1:7b19badd:ce0adb73:4c2) -1711462090.572892 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.572893 [0] tev: xpack_addmsg 0x770414001390 0x77040c002ad0 0(control): niov 2 sz 68 => now niov 3 sz 100 -1711462090.572895 [0] recv: ACKNACK(F#10:2/0: 110cd0d:e3b81b8d:1ccb65b1:4c7? -> 110aba1:7b19badd:ce0adb73:4c2) -1711462090.572899 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462090.572901 [0] tev: nn_xpack_send 100: 0x77041400139c:20 0x77040c002818:48 0x77040c002bc8:32 [ udp/10.101.12.71:7416@2 ] -1711462090.572905 [0] tev: traffic-xmit (1) 100 -1711462090.572902 [0] recv: ACKNACK(F#5:2/0: 110cd0d:79d6eeac:ea4a8907:4c7? -> 110aba1:7b19badd:ce0adb73:4c2) -1711462090.572909 [0] recv: INFOSRC(110cd0d:56a27910:57318171 vendor 1.16) -1711462090.572908 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(rexmit(110aba1:7b19badd:ce0adb73:3c2:#1/1)): niov 0 sz 0 => now niov 3 sz 244 -1711462090.572912 [0] recv: ACKNACK(F#1:1/1:1 110cd0d:56a27910:57318171:200c7? -> 110aba1:7b19badd:ce0adb73:200c2) -1711462090.572916 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.572919 [0] recv: ACKNACK(F#7:2/0: 110cd0d:e3b81b8d:1ccb65b1:200c7? -> 110aba1:7b19badd:ce0adb73:200c2) -1711462090.572923 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462090.572921 [0] tev: xpack_addmsg 0x770414001390 0x77040c002dd0 0(rexmit(110aba1:7b19badd:ce0adb73:3c2:#2/1)): niov 3 sz 244 => now niov 5 sz 480 -1711462090.572925 [0] recv: ACKNACK(F#5:2/0: 110cd0d:79d6eeac:ea4a8907:200c7? -> 110aba1:7b19badd:ce0adb73:200c2) -1711462090.572930 [0] tev: xpack_addmsg 0x770414001390 0x77040c003120 0(rexmit(110aba1:7b19badd:ce0adb73:4c2:#1/1)): niov 5 sz 480 => now niov 7 sz 692 -1711462090.572935 [0] recv: INFOSRC(110cd0d:56a27910:57318171 vendor 1.16) -1711462090.572938 [0] recv: ACKNACK(F#1:1/0: 110cd0d:56a27910:57318171:300c4? -> 110aba1:7b19badd:ce0adb73:300c3) -1711462090.572942 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.572939 [0] tev: xpack_addmsg 0x770414001390 0x77040c002fa0 0(control): niov 7 sz 692 => now niov 8 sz 724 -1711462090.572944 [0] recv: ACKNACK(F#5:1/0: 110cd0d:e3b81b8d:1ccb65b1:300c4? -> 110aba1:7b19badd:ce0adb73:300c3) -1711462090.572947 [0] tev: xpack_addmsg 0x770414001390 0x77040c0032f0 0(control): niov 8 sz 724 => now niov 9 sz 756 -1711462090.572950 [0] tev: xpack_addmsg 0x770414001390 0x77040c003470 0(control): niov 9 sz 756 => now niov 10 sz 788 -1711462090.572948 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462090.572955 [0] recv: ACKNACK(F#3:1/0: 110cd0d:79d6eeac:ea4a8907:300c4? -> 110aba1:7b19badd:ce0adb73:300c3) -1711462090.572959 [0] recv: INFOSRC(110cd0d:56a27910:57318171 vendor 1.16) -1711462090.572958 [0] tev: nn_xpack_send 788: 0x77041400139c:20 0x77040c002d38:52 0x653a1b4036c4:172 0x77040c002ec8:36 0x653a1af8b024:200 0x77040c003218:36 0x653a1b2ca014:176 0x77040c003098:32 0x77040c0033e8:32 0x77040c003568:32 [ udp/10.101.12.71:7412@2 ] -1711462090.572961 [0] recv: ACKNACK(F#1:1/0: 110cd0d:56a27910:57318171:301c4? -> 110aba1:7b19badd:ce0adb73:301c3) -1711462090.572963 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.572965 [0] recv: ACKNACK(F#5:1/0: 110cd0d:e3b81b8d:1ccb65b1:301c4? -> 110aba1:7b19badd:ce0adb73:301c3) -1711462090.572966 [0] tev: traffic-xmit (1) 788 -1711462090.572967 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462090.572972 [0] recv: ACKNACK(F#3:1/0: 110cd0d:79d6eeac:ea4a8907:301c4? -> 110aba1:7b19badd:ce0adb73:301c3) -1711462090.572975 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 1356 from udp/10.101.12.71:50807 -1711462090.572977 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.572979 [0] recv: INFOTS(1711462090.143481252) -1711462090.572982 [0] recv: DATA(110cd0d:56a27910:57318171:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462090.572983 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.572984 [0] recv: INFOTS(1711462067.905323275) -1711462090.572986 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462090.572988 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462090.572989 [0] recv: INFOTS(1711462069.653526636) -1711462090.572991 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462090.572992 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:56a27910:57318171:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.572993 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 84 from udp/10.101.12.71:52025 -1711462090.572996 [0] recv: INFOTS(1711462090.570429633) -1711462090.572999 [0] recv: DATA(110aba1:7b19badd:ce0adb73:200c2 -> 0:0:0:0 #1 110aba1:7b19badd:ce0adb73:200c2? -> 0:0:0:0) -1711462090.573001 [0] dq.builtin: SPDP ST0 110cd0d:56a27910:57318171:1c1 bes fc3f NEW (0x00000000-0x0000002c-0x00000000-0x00000000-0x00000000 op-Alienware-x16-R1/0.10.4/Linux/Linux) (data udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 meta udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2) QOS={user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{}} -1711462090.573001 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 120 from udp/10.101.12.71:40473 -1711462090.573009 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.573007 [0] dq.builtin: lease_new(tdur 10000000000 guid 110cd0d:56a27910:57318171:1c1) @ 0x77041c00ff50 -1711462090.573013 [0] recv: ACKNACK(F#2:3/0: L(:1c1 16938.232513) 110d7b4:17c5b8c5:94bd0ff4:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 setting-has-replied-to-hb happy-now) -1711462090.573016 [0] dq.builtin: lease_new(tdur 10000000000 guid 110cd0d:56a27910:57318171:1c1) @ 0x77041c00ffd0 -1711462090.573018 [0] recv: ACKNACK(F#2:2/0: 110d7b4:17c5b8c5:94bd0ff4:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 setting-has-replied-to-hb happy-now) -1711462090.573022 [0] recv: ACKNACK(F#2:2/0: 110d7b4:17c5b8c5:94bd0ff4:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 setting-has-replied-to-hb happy-now) -1711462090.573024 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:100c7) scanning participants tgt=0 -1711462090.573025 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462090.573034 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.573031 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:56a27910:57318171:3c2) scanning participants tgt=3c7 -1711462090.573037 [0] recv: ACKNACK(F#2:3/0: L(:1c1 16938.232538) 110443d:bb7f10a5:18901533:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 setting-has-replied-to-hb happy-now) -1711462090.573039 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:3c7 init_acknack_count = 1 -1711462090.573041 [0] dq.builtin: reader_add_connection(pwr 110cd0d:56a27910:57318171:3c2 rd 110aba1:7b19badd:ce0adb73:3c7) -1711462090.573045 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 92 from udp/10.101.12.71:44991 -1711462090.573046 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:56a27910:57318171:3c2 rd 110aba1:7b19badd:ce0adb73:3c7) - out-of-sync -1711462090.573046 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.573049 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:3c7) scanning participants tgt=3c2 -1711462090.573051 [0] recv: ACKNACK(F#2:2/0: L(:1c1 16938.232550) 110443d:bb7f10a5:18901533:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 setting-has-replied-to-hb happy-now) -1711462090.573052 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:3c2 prd 110cd0d:56a27910:57318171:3c7) -1711462090.573054 [0] recv: ACKNACK(F#2:2/0: 110443d:bb7f10a5:18901533:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 setting-has-replied-to-hb happy-now) -1711462090.573056 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:3c2 prd 110cd0d:56a27910:57318171:3c7) - ack seq 2 -1711462090.573064 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.573066 [0] dq.builtin: reduced nlocs=5 -1711462090.573067 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573069 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573071 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573073 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573074 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.573078 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573079 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573082 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.573083 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573086 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573089 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.573091 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573093 [0] dq.builtin: a b c d -1711462090.573095 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 1 { +u .. .. .. } -1711462090.573097 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. +u .. .. } -1711462090.573099 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.573101 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. +u .. } -1711462090.573103 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.573105 [0] dq.builtin: best = 4 -1711462090.573106 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 120 from udp/10.101.12.71:58212 -1711462090.573108 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.573106 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.573114 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.573120 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:56a27910:57318171:4c2) scanning participants tgt=4c7 -1711462090.573121 [0] recv: ACKNACK(F#2:3/0: L(:1c1 16938.232613) 110e21c:d0762c48:a9f0fb28:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK1 RM0 setting-has-replied-to-hb happy-now) -1711462090.573121 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:4c7 init_acknack_count = 1 -1711462090.573126 [0] dq.builtin: reader_add_connection(pwr 110cd0d:56a27910:57318171:4c2 rd 110aba1:7b19badd:ce0adb73:4c7) -1711462090.573128 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:56a27910:57318171:4c2 rd 110aba1:7b19badd:ce0adb73:4c7) - out-of-sync -1711462090.573124 [0] recv: ACKNACK(F#2:2/0: 110e21c:d0762c48:a9f0fb28:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 setting-has-replied-to-hb happy-now) -1711462090.573132 [0] recv: ACKNACK(F#2:2/0: 110e21c:d0762c48:a9f0fb28:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 setting-has-replied-to-hb happy-now) -1711462090.573135 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:4c7) scanning participants tgt=4c2 -1711462090.573137 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:4c2 prd 110cd0d:56a27910:57318171:4c7) -1711462090.573139 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:4c2 prd 110cd0d:56a27910:57318171:4c7) - ack seq 1 -1711462090.573141 [0] gc: gc 0x77041c0123e0: not yet, shortsleep -1711462090.573144 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.573150 [0] dq.builtin: reduced nlocs=5 -1711462090.573152 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573153 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573155 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573156 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573158 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.573160 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573161 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573163 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.573165 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573166 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573168 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.573169 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573171 [0] dq.builtin: a b c d -1711462090.573175 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 1 { +u .. .. .. } -1711462090.573177 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. +u .. .. } -1711462090.573179 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.573181 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. +u .. } -1711462090.573184 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.573185 [0] dq.builtin: best = 4 -1711462090.573186 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.573188 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.573193 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:56a27910:57318171:200c2) scanning participants tgt=200c7 -1711462090.573195 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:200c7 init_acknack_count = 1 -1711462090.573196 [0] dq.builtin: reader_add_connection(pwr 110cd0d:56a27910:57318171:200c2 rd 110aba1:7b19badd:ce0adb73:200c7) -1711462090.573198 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:56a27910:57318171:200c2 rd 110aba1:7b19badd:ce0adb73:200c7) - out-of-sync -1711462090.573202 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:200c7) scanning participants tgt=200c2 -1711462090.573203 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:200c2 prd 110cd0d:56a27910:57318171:200c7) -1711462090.573205 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:200c2 prd 110cd0d:56a27910:57318171:200c7) - ack seq 1 -1711462090.573209 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.573210 [0] dq.builtin: reduced nlocs=5 -1711462090.573211 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573213 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573215 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573216 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573217 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.573219 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573221 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573222 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.573224 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573226 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573227 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.573229 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573231 [0] dq.builtin: a b c d -1711462090.573233 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 1 { +u .. .. .. } -1711462090.573235 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. +u .. .. } -1711462090.573237 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.573238 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. +u .. } -1711462090.573240 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.573241 [0] dq.builtin: best = 4 -1711462090.573244 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.573246 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.573249 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:56a27910:57318171:300c3) scanning participants tgt=300c4 -1711462090.573252 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:300c4 init_acknack_count = 1 -1711462090.573253 [0] dq.builtin: reader_add_connection(pwr 110cd0d:56a27910:57318171:300c3 rd 110aba1:7b19badd:ce0adb73:300c4) -1711462090.573255 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:56a27910:57318171:300c3 rd 110aba1:7b19badd:ce0adb73:300c4) - out-of-sync -1711462090.573257 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:300c4) scanning participants tgt=300c3 -1711462090.573259 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:300c3 prd 110cd0d:56a27910:57318171:300c4) -1711462090.573260 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:300c3 prd 110cd0d:56a27910:57318171:300c4) - ack seq 0 -1711462090.573264 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.573266 [0] dq.builtin: reduced nlocs=5 -1711462090.573267 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573268 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573270 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573271 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573273 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.573274 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573275 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573277 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.573278 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573280 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573281 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.573283 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573284 [0] dq.builtin: a b c d -1711462090.573286 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 1 { +u .. .. .. } -1711462090.573288 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. +u .. .. } -1711462090.573290 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.573292 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. +u .. } -1711462090.573294 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.573295 [0] dq.builtin: best = 4 -1711462090.573296 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.573298 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.573302 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:56a27910:57318171:301c3) scanning participants tgt=301c4 -1711462090.573303 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:301c4 init_acknack_count = 1 -1711462090.573305 [0] dq.builtin: reader_add_connection(pwr 110cd0d:56a27910:57318171:301c3 rd 110aba1:7b19badd:ce0adb73:301c4) -1711462090.573306 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:56a27910:57318171:301c3 rd 110aba1:7b19badd:ce0adb73:301c4) - out-of-sync -1711462090.573308 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:301c4) scanning participants tgt=301c3 -1711462090.573310 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:301c3 prd 110cd0d:56a27910:57318171:301c4) -1711462090.573311 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:301c3 prd 110cd0d:56a27910:57318171:301c4) - ack seq 0 -1711462090.573315 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.573316 [0] dq.builtin: reduced nlocs=5 -1711462090.573318 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573320 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573322 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573323 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573324 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.573326 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573327 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573329 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.573330 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573331 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573333 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.573334 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573336 [0] dq.builtin: a b c d -1711462090.573338 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 1 { +u .. .. .. } -1711462090.573340 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. +u .. .. } -1711462090.573341 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.573343 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. +u .. } -1711462090.573345 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.573346 [0] dq.builtin: best = 4 -1711462090.573348 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.573350 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.573356 [0] dq.builtin: => EVERYONE -1711462090.573359 [0] dq.builtin: lease_register(l 0x77041c00ffd0 guid 110cd0d:56a27910:57318171:1c1) -1711462090.573360 [0] dq.builtin: directed SPDP packet -> not responding -1711462090.573370 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.573377 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 bes fc3f NEW (0x00000000-0x0000002c-0x00000000-0x00000000-0x00000000 op-Alienware-x16-R1/0.10.4/Linux/Linux) (data udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 meta udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2) QOS={user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{}} -1711462090.573380 [0] dq.builtin: lease_new(tdur 10000000000 guid 110cd0d:e3b81b8d:1ccb65b1:1c1) @ 0x77041c015050 -1711462090.573381 [0] dq.builtin: lease_new(tdur 10000000000 guid 110cd0d:e3b81b8d:1ccb65b1:1c1) @ 0x77041c0150d0 -1711462090.573385 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:100c7) scanning participants tgt=0 -1711462090.573388 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:e3b81b8d:1ccb65b1:3c2) scanning participants tgt=3c7 -1711462090.573389 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:3c7 init_acknack_count = 1 -1711462090.573390 [0] dq.builtin: reader_add_connection(pwr 110cd0d:e3b81b8d:1ccb65b1:3c2 rd 110aba1:7b19badd:ce0adb73:3c7) -1711462090.573392 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:e3b81b8d:1ccb65b1:3c2 rd 110aba1:7b19badd:ce0adb73:3c7) - out-of-sync -1711462090.573397 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:3c7) scanning participants tgt=3c2 -1711462090.573399 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:3c2 prd 110cd0d:e3b81b8d:1ccb65b1:3c7) -1711462090.573401 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:3c2 prd 110cd0d:e3b81b8d:1ccb65b1:3c7) - ack seq 2 -1711462090.573405 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.573406 [0] dq.builtin: reduced nlocs=5 -1711462090.573408 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573409 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573411 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573412 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573413 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573415 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573416 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573417 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.573419 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573420 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573422 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.573423 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573424 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573426 [0] dq.builtin: rdidx 4 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.573427 [0] dq.builtin: rdidx 4 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573429 [0] dq.builtin: a b c d e -1711462090.573431 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 0 { +u +u .. .. .. } -1711462090.573433 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. +u .. .. } -1711462090.573435 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. .. +u } -1711462090.573437 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. .. +u .. } -1711462090.573439 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -2 { +1 +1 +1 +1 +1 } -1711462090.573440 [0] dq.builtin: best = 4 -1711462090.573442 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.573444 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.573446 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:e3b81b8d:1ccb65b1:4c2) scanning participants tgt=4c7 -1711462090.573448 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:4c7 init_acknack_count = 1 -1711462090.573449 [0] dq.builtin: reader_add_connection(pwr 110cd0d:e3b81b8d:1ccb65b1:4c2 rd 110aba1:7b19badd:ce0adb73:4c7) -1711462090.573451 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:e3b81b8d:1ccb65b1:4c2 rd 110aba1:7b19badd:ce0adb73:4c7) - out-of-sync -1711462090.573454 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:4c7) scanning participants tgt=4c2 -1711462090.573457 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:4c2 prd 110cd0d:e3b81b8d:1ccb65b1:4c7) -1711462090.573458 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:4c2 prd 110cd0d:e3b81b8d:1ccb65b1:4c7) - ack seq 1 -1711462090.573462 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.573463 [0] dq.builtin: reduced nlocs=5 -1711462090.573466 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573468 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573470 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573471 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573473 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573474 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573476 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573477 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.573478 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573480 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573481 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.573483 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573484 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573485 [0] dq.builtin: rdidx 4 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.573487 [0] dq.builtin: rdidx 4 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573488 [0] dq.builtin: a b c d e -1711462090.573491 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 0 { +u +u .. .. .. } -1711462090.573492 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. +u .. .. } -1711462090.573494 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. .. +u } -1711462090.573496 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. .. +u .. } -1711462090.573498 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -2 { +1 +1 +1 +1 +1 } -1711462090.573499 [0] dq.builtin: best = 4 -1711462090.573501 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.573503 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.573506 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:e3b81b8d:1ccb65b1:200c2) scanning participants tgt=200c7 -1711462090.573507 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:200c7 init_acknack_count = 1 -1711462090.573508 [0] dq.builtin: reader_add_connection(pwr 110cd0d:e3b81b8d:1ccb65b1:200c2 rd 110aba1:7b19badd:ce0adb73:200c7) -1711462090.573510 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:e3b81b8d:1ccb65b1:200c2 rd 110aba1:7b19badd:ce0adb73:200c7) - out-of-sync -1711462090.573512 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:200c7) scanning participants tgt=200c2 -1711462090.573514 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:200c2 prd 110cd0d:e3b81b8d:1ccb65b1:200c7) -1711462090.573515 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:200c2 prd 110cd0d:e3b81b8d:1ccb65b1:200c7) - ack seq 1 -1711462090.573519 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.573520 [0] dq.builtin: reduced nlocs=5 -1711462090.573522 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573523 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573525 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573526 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573527 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573529 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573530 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573532 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.573533 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573534 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573536 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.573538 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573540 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573541 [0] dq.builtin: rdidx 4 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.573543 [0] dq.builtin: rdidx 4 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573545 [0] dq.builtin: a b c d e -1711462090.573547 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 0 { +u +u .. .. .. } -1711462090.573549 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. +u .. .. } -1711462090.573551 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. .. +u } -1711462090.573553 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. .. +u .. } -1711462090.573555 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -2 { +1 +1 +1 +1 +1 } -1711462090.573556 [0] dq.builtin: best = 4 -1711462090.573558 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.573560 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.573563 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:e3b81b8d:1ccb65b1:300c3) scanning participants tgt=300c4 -1711462090.573565 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:300c4 init_acknack_count = 1 -1711462090.573566 [0] dq.builtin: reader_add_connection(pwr 110cd0d:e3b81b8d:1ccb65b1:300c3 rd 110aba1:7b19badd:ce0adb73:300c4) -1711462090.573568 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:e3b81b8d:1ccb65b1:300c3 rd 110aba1:7b19badd:ce0adb73:300c4) - out-of-sync -1711462090.573571 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:300c4) scanning participants tgt=300c3 -1711462090.573573 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:300c3 prd 110cd0d:e3b81b8d:1ccb65b1:300c4) -1711462090.573574 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:300c3 prd 110cd0d:e3b81b8d:1ccb65b1:300c4) - ack seq 0 -1711462090.573578 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.573579 [0] dq.builtin: reduced nlocs=5 -1711462090.573581 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573582 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573584 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573585 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573586 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573588 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573589 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573591 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.573592 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573593 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573596 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.573597 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573598 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573600 [0] dq.builtin: rdidx 4 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.573601 [0] dq.builtin: rdidx 4 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573603 [0] dq.builtin: a b c d e -1711462090.573605 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 0 { +u +u .. .. .. } -1711462090.573607 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. +u .. .. } -1711462090.573609 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. .. +u } -1711462090.573612 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. .. +u .. } -1711462090.573614 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -2 { +1 +1 +1 +1 +1 } -1711462090.573615 [0] dq.builtin: best = 4 -1711462090.573616 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.573619 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.573621 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:e3b81b8d:1ccb65b1:301c3) scanning participants tgt=301c4 -1711462090.573623 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:301c4 init_acknack_count = 1 -1711462090.573625 [0] dq.builtin: reader_add_connection(pwr 110cd0d:e3b81b8d:1ccb65b1:301c3 rd 110aba1:7b19badd:ce0adb73:301c4) -1711462090.573627 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:e3b81b8d:1ccb65b1:301c3 rd 110aba1:7b19badd:ce0adb73:301c4) - out-of-sync -1711462090.573630 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:301c4) scanning participants tgt=301c3 -1711462090.573632 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:301c3 prd 110cd0d:e3b81b8d:1ccb65b1:301c4) -1711462090.573638 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:301c3 prd 110cd0d:e3b81b8d:1ccb65b1:301c4) - ack seq 0 -1711462090.573645 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.573646 [0] dq.builtin: reduced nlocs=5 -1711462090.573648 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573651 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573654 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573656 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573659 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573659 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 612 from udp/10.101.12.71:40473 -1711462090.573660 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573664 [0] recv: INFOTS(1711462090.573532356) -1711462090.573666 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573671 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.573674 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 536 from udp/10.101.12.71:40473 -1711462090.573680 [0] recvMC: INFOTS(1711462090.573586880) -1711462090.573685 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #10 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.573675 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573691 [0] recvMC: HEARTBEAT(F#16:10..10 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.573700 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573705 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.573709 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573712 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573712 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #10 L(:1c1 16938.233167) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.573714 [0] dq.builtin: rdidx 4 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.573726 [0] dq.builtin: rdidx 4 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573723 [0] recv: INFOTS(1711462090.573575071) -1711462090.573728 [0] dq.builtin: a b c d e -1711462090.573733 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #8 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.573734 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 0 { +u +u .. .. .. } -1711462090.573754 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. +u .. .. } -1711462090.573767 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. .. +u } -1711462090.573771 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. .. +u .. } -1711462090.573776 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -2 { +1 +1 +1 +1 +1 } -1711462090.573779 [0] dq.builtin: best = 4 -1711462090.573782 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.573789 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.573807 [0] dq.builtin: => EVERYONE -1711462090.573813 [0] dq.builtin: lease_register(l 0x77041c0150d0 guid 110cd0d:e3b81b8d:1ccb65b1:1c1) -1711462090.573815 [0] dq.builtin: directed SPDP packet -> not responding -1711462090.573834 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.573849 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 bes fc3f NEW (0x00000000-0x0000002c-0x00000000-0x00000000-0x00000000 op-Alienware-x16-R1/0.10.4/Linux/Linux) (data udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 meta udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2) QOS={user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{}} -1711462090.573853 [0] dq.builtin: lease_new(tdur 10000000000 guid 110cd0d:79d6eeac:ea4a8907:1c1) @ 0x77041c019810 -1711462090.573855 [0] dq.builtin: lease_new(tdur 10000000000 guid 110cd0d:79d6eeac:ea4a8907:1c1) @ 0x77041c019890 -1711462090.573864 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:100c7) scanning participants tgt=0 -1711462090.573870 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:79d6eeac:ea4a8907:3c2) scanning participants tgt=3c7 -1711462090.573873 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:3c7 init_acknack_count = 1 -1711462090.573875 [0] dq.builtin: reader_add_connection(pwr 110cd0d:79d6eeac:ea4a8907:3c2 rd 110aba1:7b19badd:ce0adb73:3c7) -1711462090.573879 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:79d6eeac:ea4a8907:3c2 rd 110aba1:7b19badd:ce0adb73:3c7) - out-of-sync -1711462090.573884 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:3c7) scanning participants tgt=3c2 -1711462090.573886 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:3c2 prd 110cd0d:79d6eeac:ea4a8907:3c7) -1711462090.573890 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:3c2 prd 110cd0d:79d6eeac:ea4a8907:3c7) - ack seq 2 -1711462090.573898 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.573901 [0] dq.builtin: reduced nlocs=5 -1711462090.573904 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573907 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573910 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573912 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573916 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573918 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573924 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573927 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.573930 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573933 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573936 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.573939 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573941 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573943 [0] dq.builtin: rdidx 4 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.573946 [0] dq.builtin: rdidx 4 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573948 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.573950 [0] dq.builtin: rdidx 5 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.573952 [0] dq.builtin: rdidx 5 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.573956 [0] dq.builtin: a b c d e f -1711462090.573961 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. .. .. } -1711462090.573964 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u .. .. } -1711462090.573967 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. .. .. +u } -1711462090.573971 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. .. .. +u .. } -1711462090.573975 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -3 { +1 +1 +1 +1 +1 +1 } -1711462090.573977 [0] dq.builtin: best = 4 -1711462090.573979 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.573984 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.573989 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:79d6eeac:ea4a8907:4c2) scanning participants tgt=4c7 -1711462090.573992 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:4c7 init_acknack_count = 1 -1711462090.573995 [0] dq.builtin: reader_add_connection(pwr 110cd0d:79d6eeac:ea4a8907:4c2 rd 110aba1:7b19badd:ce0adb73:4c7) -1711462090.573997 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:79d6eeac:ea4a8907:4c2 rd 110aba1:7b19badd:ce0adb73:4c7) - out-of-sync -1711462090.574002 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:4c7) scanning participants tgt=4c2 -1711462090.574004 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:4c2 prd 110cd0d:79d6eeac:ea4a8907:4c7) -1711462090.574007 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:4c2 prd 110cd0d:79d6eeac:ea4a8907:4c7) - ack seq 1 -1711462090.574014 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.574016 [0] dq.builtin: reduced nlocs=5 -1711462090.574019 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574022 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.574024 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574026 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574028 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.574031 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574033 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574036 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.574038 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574040 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574043 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.574045 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574049 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574052 [0] dq.builtin: rdidx 4 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.574055 [0] dq.builtin: rdidx 4 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574056 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574059 [0] dq.builtin: rdidx 5 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.574062 [0] dq.builtin: rdidx 5 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574065 [0] dq.builtin: a b c d e f -1711462090.574068 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. .. .. } -1711462090.574072 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u .. .. } -1711462090.574075 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. .. .. +u } -1711462090.574078 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. .. .. +u .. } -1711462090.574082 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -3 { +1 +1 +1 +1 +1 +1 } -1711462090.574084 [0] dq.builtin: best = 4 -1711462090.574087 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.574091 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.574096 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:79d6eeac:ea4a8907:200c2) scanning participants tgt=200c7 -1711462090.574098 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:200c7 init_acknack_count = 1 -1711462090.574100 [0] dq.builtin: reader_add_connection(pwr 110cd0d:79d6eeac:ea4a8907:200c2 rd 110aba1:7b19badd:ce0adb73:200c7) -1711462090.574103 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:79d6eeac:ea4a8907:200c2 rd 110aba1:7b19badd:ce0adb73:200c7) - out-of-sync -1711462090.574108 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:200c7) scanning participants tgt=200c2 -1711462090.574110 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:200c2 prd 110cd0d:79d6eeac:ea4a8907:200c7) -1711462090.574113 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:200c2 prd 110cd0d:79d6eeac:ea4a8907:200c7) - ack seq 1 -1711462090.574120 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.574122 [0] dq.builtin: reduced nlocs=5 -1711462090.574126 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574128 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.574131 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574133 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574135 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.574138 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574139 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574142 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.574144 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574147 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574149 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.574152 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574154 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574156 [0] dq.builtin: rdidx 4 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.574158 [0] dq.builtin: rdidx 4 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574160 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574163 [0] dq.builtin: rdidx 5 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.574165 [0] dq.builtin: rdidx 5 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574168 [0] dq.builtin: a b c d e f -1711462090.574174 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. .. .. } -1711462090.574177 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u .. .. } -1711462090.574178 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:3c2) suppressed, resched in 0.1 s (min-ack 2!, avail-seq 2, xmit 2) -1711462090.574180 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. .. .. +u } -1711462090.574189 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. .. .. +u .. } -1711462090.574194 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -3 { +1 +1 +1 +1 +1 +1 } -1711462090.574195 [0] dq.builtin: best = 4 -1711462090.574198 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.574202 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.574203 [0] gc: gc 0x77041c0123e0: deleting -1711462090.574208 [0] gc: gc 0x77041c014c20: deleting -1711462090.574212 [0] gc: gc 0x77041c0193e0: deleting -1711462090.574209 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:79d6eeac:ea4a8907:300c3) scanning participants tgt=300c4 -1711462090.574218 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:300c4 init_acknack_count = 1 -1711462090.574220 [0] dq.builtin: reader_add_connection(pwr 110cd0d:79d6eeac:ea4a8907:300c3 rd 110aba1:7b19badd:ce0adb73:300c4) -1711462090.574223 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:79d6eeac:ea4a8907:300c3 rd 110aba1:7b19badd:ce0adb73:300c4) - out-of-sync -1711462090.574228 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:300c4) scanning participants tgt=300c3 -1711462090.574230 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:300c3 prd 110cd0d:79d6eeac:ea4a8907:300c4) -1711462090.574233 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:300c3 prd 110cd0d:79d6eeac:ea4a8907:300c4) - ack seq 0 -1711462090.574241 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.574243 [0] dq.builtin: reduced nlocs=5 -1711462090.574245 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574247 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.574251 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574248 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:4c2) suppressed, resched in 0.1 s (min-ack 1!, avail-seq 1, xmit 1) -1711462090.574253 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574259 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:200c2) suppressed, resched in 0.1 s (min-ack 1!, avail-seq 1, xmit 1) -1711462090.574260 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.574266 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574268 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574270 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.574273 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574275 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574278 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.574280 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574282 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574285 [0] dq.builtin: rdidx 4 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.574288 [0] dq.builtin: rdidx 4 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574290 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574293 [0] dq.builtin: rdidx 5 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.574298 [0] dq.builtin: rdidx 5 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574301 [0] dq.builtin: a b c d e f -1711462090.574306 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. .. .. } -1711462090.574309 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u .. .. } -1711462090.574313 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. .. .. +u } -1711462090.574316 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. .. .. +u .. } -1711462090.574321 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -3 { +1 +1 +1 +1 +1 +1 } -1711462090.574323 [0] dq.builtin: best = 4 -1711462090.574326 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.574330 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.574336 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:79d6eeac:ea4a8907:301c3) scanning participants tgt=301c4 -1711462090.574338 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:301c4 init_acknack_count = 1 -1711462090.574341 [0] dq.builtin: reader_add_connection(pwr 110cd0d:79d6eeac:ea4a8907:301c3 rd 110aba1:7b19badd:ce0adb73:301c4) -1711462090.574344 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:79d6eeac:ea4a8907:301c3 rd 110aba1:7b19badd:ce0adb73:301c4) - out-of-sync -1711462090.574350 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:301c4) scanning participants tgt=301c3 -1711462090.574352 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:301c3 prd 110cd0d:79d6eeac:ea4a8907:301c4) -1711462090.574355 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:301c3 prd 110cd0d:79d6eeac:ea4a8907:301c4) - ack seq 0 -1711462090.574355 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:300c3) suppressed, resched in 0.1 s (min-ack 0!, avail-seq 0, xmit 0) -1711462090.574364 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462090.574366 [0] dq.builtin: reduced nlocs=5 -1711462090.574369 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574371 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.574374 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574376 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574379 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.574382 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574384 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574387 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462090.574390 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574392 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574395 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462090.574397 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574400 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574402 [0] dq.builtin: rdidx 4 lidx udp/10.101.12.71:7416@2 3 -> 0 -1711462090.574405 [0] dq.builtin: rdidx 4 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574407 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.574410 [0] dq.builtin: rdidx 5 lidx udp/10.101.12.71:7414@2 2 -> 0 -1711462090.574413 [0] dq.builtin: rdidx 5 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.574416 [0] dq.builtin: a b c d e f -1711462090.574420 [0] dq.builtin: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. .. .. } -1711462090.574425 [0] dq.builtin: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u .. .. } -1711462090.574429 [0] dq.builtin: loc 2 = udp/10.101.12.71:7414@2 1 { .. .. .. .. .. +u } -1711462090.574433 [0] dq.builtin: loc 3 = udp/10.101.12.71:7416@2 1 { .. .. .. .. +u .. } -1711462090.574438 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -3 { +1 +1 +1 +1 +1 +1 } -1711462090.574439 [0] dq.builtin: best = 4 -1711462090.574442 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.574446 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.574452 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:301c3) suppressed, resched in 0.1 s (min-ack 0!, avail-seq 0, xmit 0) -1711462090.574457 [0] dq.builtin: => EVERYONE -1711462090.574463 [0] dq.builtin: lease_register(l 0x77041c019890 guid 110cd0d:79d6eeac:ea4a8907:1c1) -1711462090.574466 [0] dq.builtin: directed SPDP packet -> not responding -1711462090.574469 [0] gc: gc 0x77041c01d7a0: deleting -1711462090.575588 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 656 from udp/10.101.12.71:40473 -1711462090.575606 [0] recv: INFOTS(1711462090.575442461) -1711462090.575606 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 584 from udp/10.101.12.71:40473 -1711462090.575612 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #11 L(:1c1 16938.235109) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.575620 [0] recv: INFOTS(1711462090.575483556) -1711462090.575618 [0] recvMC: INFOTS(1711462090.575495060) -1711462090.575624 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #9 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.575632 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #11 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.575638 [0] recvMC: HEARTBEAT(F#17:11..11 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.575763 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 328 from udp/10.101.12.71:40473 -1711462090.575766 [0] recv: INFOTS(1711462090.575726889) -1711462090.575771 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #12 L(:1c1 16938.235270) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.575814 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 320 from udp/10.101.12.71:40473 -1711462090.575817 [0] recv: INFOTS(1711462090.575762290) -1711462090.575823 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #10 L(:1c1 16938.235321) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.575865 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 632 from udp/10.101.12.71:40473 -1711462090.575872 [0] recvMC: INFOTS(1711462090.575799187) -1711462090.575876 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #12 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.575880 [0] recvMC: HEARTBEAT(F#18:12..12 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.576029 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.576031 [0] recv: INFOTS(1711462090.575995325) -1711462090.576037 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #13 L(:1c1 16938.235535) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.576069 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 332 from udp/10.101.12.71:40473 -1711462090.576072 [0] recv: INFOTS(1711462090.576028935) -1711462090.576078 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #11 L(:1c1 16938.235576) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.576125 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 680 from udp/10.101.12.71:40473 -1711462090.576132 [0] recvMC: INFOTS(1711462090.576052639) -1711462090.576140 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #13 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.576144 [0] recvMC: HEARTBEAT(F#19:13..13 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.576302 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 356 from udp/10.101.12.71:40473 -1711462090.576305 [0] recv: INFOTS(1711462090.576266665) -1711462090.576311 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #14 L(:1c1 16938.235808) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.576338 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 348 from udp/10.101.12.71:40473 -1711462090.576340 [0] recv: INFOTS(1711462090.576303013) -1711462090.576344 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #12 L(:1c1 16938.235844) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.576393 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 728 from udp/10.101.12.71:40473 -1711462090.576400 [0] recvMC: INFOTS(1711462090.576322325) -1711462090.576407 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #14 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.576411 [0] recvMC: HEARTBEAT(F#20:14..14 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.576565 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 352 from udp/10.101.12.71:40473 -1711462090.576568 [0] recv: INFOTS(1711462090.576532468) -1711462090.576575 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #15 L(:1c1 16938.236072) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.576608 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 348 from udp/10.101.12.71:40473 -1711462090.576610 [0] recv: INFOTS(1711462090.576567173) -1711462090.576617 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #13 L(:1c1 16938.236114) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.576654 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 776 from udp/10.101.12.71:40473 -1711462090.576661 [0] recvMC: INFOTS(1711462090.576579736) -1711462090.576666 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #15 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.576672 [0] recvMC: HEARTBEAT(F#21:15..15 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.576780 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 352 from udp/10.101.12.71:40473 -1711462090.576790 [0] recv: INFOTS(1711462090.576742682) -1711462090.576798 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #16 L(:1c1 16938.236293) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.576842 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 348 from udp/10.101.12.71:40473 -1711462090.576850 [0] recv: INFOTS(1711462090.576793854) -1711462090.576857 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #14 L(:1c1 16938.236353) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.576877 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 824 from udp/10.101.12.71:40473 -1711462090.576885 [0] recvMC: INFOTS(1711462090.576805226) -1711462090.576891 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #16 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.576906 [0] recvMC: HEARTBEAT(F#22:16..16 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.577431 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 652 from udp/10.101.12.71:40473 -1711462090.577439 [0] recv: INFOTS(1711462090.577330990) -1711462090.577444 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #17 L(:1c1 16938.236942) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.577448 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 872 from udp/10.101.12.71:40473 -1711462090.577449 [0] recv: INFOTS(1711462090.577371768) -1711462090.577456 [0] recvMC: INFOTS(1711462090.577381731) -1711462090.577467 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #15 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.577479 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #17 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.577492 [0] recvMC: HEARTBEAT(F#23:17..17 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.577629 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.577635 [0] recv: INFOTS(1711462090.577582984) -1711462090.577640 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #18 L(:1c1 16938.237139) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.577668 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.577674 [0] recv: INFOTS(1711462090.577626247) -1711462090.577680 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #16 L(:1c1 16938.237177) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.577719 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 920 from udp/10.101.12.71:40473 -1711462090.577727 [0] recvMC: INFOTS(1711462090.577649910) -1711462090.577731 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #18 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.577738 [0] recvMC: HEARTBEAT(F#24:18..18 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.577886 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.577890 [0] recv: INFOTS(1711462090.577848971) -1711462090.577895 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #19 L(:1c1 16938.237394) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.577927 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.577930 [0] recv: INFOTS(1711462090.577884615) -1711462090.577935 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #17 L(:1c1 16938.237434) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.577962 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 968 from udp/10.101.12.71:40473 -1711462090.577969 [0] recvMC: INFOTS(1711462090.577896758) -1711462090.577973 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #19 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.577977 [0] recvMC: HEARTBEAT(F#25:19..19 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.578076 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 332 from udp/10.101.12.71:40473 -1711462090.578082 [0] recv: INFOTS(1711462090.578042902) -1711462090.578087 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #20 L(:1c1 16938.237585) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.578116 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 324 from udp/10.101.12.71:40473 -1711462090.578123 [0] recv: INFOTS(1711462090.578086523) -1711462090.578128 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #18 L(:1c1 16938.237626) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.578156 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1016 from udp/10.101.12.71:40473 -1711462090.578163 [0] recvMC: INFOTS(1711462090.578098378) -1711462090.578168 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #20 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.578173 [0] recvMC: HEARTBEAT(F#26:20..20 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.578324 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.578329 [0] recv: INFOTS(1711462090.578286739) -1711462090.578333 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #21 L(:1c1 16938.237832) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.578363 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 332 from udp/10.101.12.71:40473 -1711462090.578372 [0] recv: INFOTS(1711462090.578323981) -1711462090.578378 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #19 L(:1c1 16938.237875) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.578411 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1064 from udp/10.101.12.71:40473 -1711462090.578416 [0] recvMC: INFOTS(1711462090.578342953) -1711462090.578421 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #21 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.578426 [0] recvMC: HEARTBEAT(F#27:21..21 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.578566 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.578571 [0] recv: INFOTS(1711462090.578531397) -1711462090.578575 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #22 L(:1c1 16938.238074) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.578610 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 332 from udp/10.101.12.71:40473 -1711462090.578618 [0] recv: INFOTS(1711462090.578575730) -1711462090.578622 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #20 L(:1c1 16938.238121) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.578661 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1112 from udp/10.101.12.71:40473 -1711462090.578667 [0] recvMC: INFOTS(1711462090.578589065) -1711462090.578674 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #22 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.578677 [0] recvMC: HEARTBEAT(F#28:22..22 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.578783 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.578787 [0] recv: INFOTS(1711462090.578749181) -1711462090.578793 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #23 L(:1c1 16938.238291) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.578821 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 328 from udp/10.101.12.71:40473 -1711462090.578828 [0] recv: INFOTS(1711462090.578795007) -1711462090.578833 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #21 L(:1c1 16938.238332) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.578865 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1160 from udp/10.101.12.71:40473 -1711462090.578869 [0] recvMC: INFOTS(1711462090.578803795) -1711462090.578876 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #23 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.578879 [0] recvMC: HEARTBEAT(F#29:23..23 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.579032 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 352 from udp/10.101.12.71:40473 -1711462090.579036 [0] recv: INFOTS(1711462090.578997155) -1711462090.579042 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #24 L(:1c1 16938.238540) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.579078 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 348 from udp/10.101.12.71:40473 -1711462090.579083 [0] recv: INFOTS(1711462090.579038346) -1711462090.579090 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #22 L(:1c1 16938.238587) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.579116 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1208 from udp/10.101.12.71:40473 -1711462090.579120 [0] recvMC: INFOTS(1711462090.579057465) -1711462090.579127 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #24 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.579131 [0] recvMC: HEARTBEAT(F#30:24..24 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.579281 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.579315 [0] recv: INFOTS(1711462090.579246849) -1711462090.579324 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #25 L(:1c1 16938.238818) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.579369 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 328 from udp/10.101.12.71:40473 -1711462090.579375 [0] recv: INFOTS(1711462090.579338744) -1711462090.579381 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #23 L(:1c1 16938.238878) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.579403 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1256 from udp/10.101.12.71:40473 -1711462090.579407 [0] recvMC: INFOTS(1711462090.579348653) -1711462090.579411 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #25 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.579416 [0] recvMC: HEARTBEAT(F#31:25..25 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.579565 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.579571 [0] recv: INFOTS(1711462090.579526903) -1711462090.579576 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #26 L(:1c1 16938.239075) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.579610 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 324 from udp/10.101.12.71:40473 -1711462090.579613 [0] recv: INFOTS(1711462090.579582890) -1711462090.579617 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #24 L(:1c1 16938.239117) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.579654 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1304 from udp/10.101.12.71:40473 -1711462090.579660 [0] recvMC: INFOTS(1711462090.579592017) -1711462090.579665 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #26 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.579674 [0] recvMC: HEARTBEAT(F#32:26..26 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.579762 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.579763 [0] recv: INFOTS(1711462090.579726226) -1711462090.579767 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #27 L(:1c1 16938.239267) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.579805 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 324 from udp/10.101.12.71:40473 -1711462090.579812 [0] recv: INFOTS(1711462090.579761832) -1711462090.579818 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #25 L(:1c1 16938.239316) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.579848 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1352 from udp/10.101.12.71:40473 -1711462090.579857 [0] recvMC: INFOTS(1711462090.579784458) -1711462090.579863 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #27 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.579868 [0] recvMC: HEARTBEAT(F#33:27..27 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.580008 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 352 from udp/10.101.12.71:40473 -1711462090.580014 [0] recv: INFOTS(1711462090.579973596) -1711462090.580020 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #28 L(:1c1 16938.239518) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.580055 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.580061 [0] recv: INFOTS(1711462090.580027501) -1711462090.580067 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #26 L(:1c1 16938.239565) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.580097 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1400 from udp/10.101.12.71:40473 -1711462090.580103 [0] recvMC: INFOTS(1711462090.580038123) -1711462090.580108 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #28 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.580117 [0] recvMC: HEARTBEAT(F#34:28..28 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.580221 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 352 from udp/10.101.12.71:40473 -1711462090.580226 [0] recv: INFOTS(1711462090.580189530) -1711462090.580232 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #29 L(:1c1 16938.239730) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.580266 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 348 from udp/10.101.12.71:40473 -1711462090.580268 [0] recv: INFOTS(1711462090.580241067) -1711462090.580273 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #27 L(:1c1 16938.239772) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.580310 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1448 from udp/10.101.12.71:40473 -1711462090.580319 [0] recvMC: INFOTS(1711462090.580250371) -1711462090.580323 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #29 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.580327 [0] recvMC: HEARTBEAT(F#35:29..29 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.580426 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 356 from udp/10.101.12.71:40473 -1711462090.580427 [0] recv: INFOTS(1711462090.580393021) -1711462090.580431 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #30 L(:1c1 16938.239932) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.580466 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 352 from udp/10.101.12.71:40473 -1711462090.580468 [0] recv: INFOTS(1711462090.580434684) -1711462090.580472 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #28 L(:1c1 16938.239972) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.580520 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1496 from udp/10.101.12.71:40473 -1711462090.580526 [0] recvMC: INFOTS(1711462090.580451532) -1711462090.580534 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #30 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.580539 [0] recvMC: HEARTBEAT(F#36:30..30 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.580692 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 356 from udp/10.101.12.71:40473 -1711462090.580694 [0] recv: INFOTS(1711462090.580658980) -1711462090.580697 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #31 L(:1c1 16938.240198) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.580740 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.580742 [0] recv: INFOTS(1711462090.580705816) -1711462090.580751 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #29 L(:1c1 16938.240246) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.580789 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1544 from udp/10.101.12.71:40473 -1711462090.580797 [0] recvMC: INFOTS(1711462090.580722130) -1711462090.580802 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #31 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.580806 [0] recvMC: HEARTBEAT(F#37:31..31 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.580903 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 356 from udp/10.101.12.71:40473 -1711462090.580908 [0] recv: INFOTS(1711462090.580867994) -1711462090.580915 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #32 L(:1c1 16938.240412) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.580944 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.580950 [0] recv: INFOTS(1711462090.580901717) -1711462090.580955 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #30 L(:1c1 16938.240454) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.580989 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1592 from udp/10.101.12.71:40473 -1711462090.580990 [0] recvMC: INFOTS(1711462090.580918119) -1711462090.580992 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #32 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.580996 [0] recvMC: HEARTBEAT(F#38:32..32 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.581196 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.581200 [0] recv: INFOTS(1711462090.581146130) -1711462090.581205 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #33 L(:1c1 16938.240704) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.581236 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 324 from udp/10.101.12.71:40473 -1711462090.581240 [0] recv: INFOTS(1711462090.581210847) -1711462090.581245 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #31 L(:1c1 16938.240744) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.581278 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1640 from udp/10.101.12.71:40473 -1711462090.581280 [0] recvMC: INFOTS(1711462090.581220310) -1711462090.581283 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #33 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.581285 [0] recvMC: HEARTBEAT(F#39:33..33 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.581299 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.581315 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x77040c002d38:44 [ udp/10.101.12.71:7412@2 ] -1711462090.581316 [0] tev: traffic-xmit (1) 64 -1711462090.581319 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.581323 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x77040c002d38:44 [ udp/10.101.12.71:7412@2 ] -1711462090.581324 [0] tev: traffic-xmit (1) 64 -1711462090.581362 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 68 from udp/10.101.12.71:58212 -1711462090.581366 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.581372 [0] recv: HEARTBEAT(#7:1..10 L(:1c1 16938.240870)110e21c:d0762c48:a9f0fb28:3c2 -> 110aba1:7b19badd:ce0adb73:3c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:3c7 #10) 110aba1:7b19badd:ce0adb73:3c7@0) -1711462090.581376 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#1:1/10:1111111111 -1711462090.581378 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462090.581379 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 68 from udp/10.101.12.71:58212 -1711462090.581382 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.581384 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.581388 [0] recv: HEARTBEAT(#7:1..8 L(:1c1 16938.240888)110e21c:d0762c48:a9f0fb28:4c2 -> 110aba1:7b19badd:ce0adb73:4c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:4c7 #8) 110aba1:7b19badd:ce0adb73:4c7@0) -1711462090.581390 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x77040c002d38:48 [ udp/10.101.12.71:7412@2 ] -1711462090.581391 [0] tev: traffic-xmit (1) 68 -1711462090.581394 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#1:1/8:11111111 -1711462090.581395 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462090.581397 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.581399 [0] tev: xpack_addmsg 0x770414001390 0x77040c002dd0 0(control): niov 2 sz 68 => now niov 3 sz 96 -1711462090.581405 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x77040c002d38:48 0x77040c002ec8:28 [ udp/10.101.12.71:7412@2 ] -1711462090.581406 [0] tev: traffic-xmit (1) 96 -1711462090.581462 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.581467 [0] recv: INFOTS(1711462090.581430143) -1711462090.581472 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #34 L(:1c1 16938.240971) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.581490 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.581493 [0] tev: xpack_addmsg 0x770414001390 0x77040c002dd0 0(control): niov 2 sz 64 => now niov 3 sz 92 -1711462090.581497 [0] tev: nn_xpack_send 92: 0x77041400139c:20 0x77040c002d38:44 0x77040c002ec8:28 [ udp/10.101.12.71:7412@2 ] -1711462090.581499 [0] tev: traffic-xmit (1) 92 -1711462090.581517 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 332 from udp/10.101.12.71:40473 -1711462090.581522 [0] recv: INFOTS(1711462090.581483917) -1711462090.581529 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #32 L(:1c1 16938.241026) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.581534 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 1316 from udp/10.101.12.71:58212 -1711462090.581538 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.581541 [0] recv: INFOTS(1711462090.520347756) -1711462090.581547 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #1 L(:1c1 16938.241042)) -1711462090.581549 [0] recv: INFOTS(1711462090.521064613) -1711462090.581552 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #2) -1711462090.581553 [0] recv: INFOTS(1711462090.539011681) -1711462090.581555 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #3) -1711462090.581557 [0] recv: INFOTS(1711462090.539559928) -1711462090.581559 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #4) -1711462090.581561 [0] recv: INFOTS(1711462090.539806527) -1711462090.581563 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #5) -1711462090.581566 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1688 from udp/10.101.12.71:40473 -1711462090.581566 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #1: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581575 [0] recvMC: INFOTS(1711462090.581502801) -1711462090.581581 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #34 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.581585 [0] recvMC: HEARTBEAT(F#40:34..34 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.581602 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:403 reliable transient-local writer unnamed: (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581608 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 1316 from udp/10.101.12.71:58212 -1711462090.581612 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.581614 [0] recv: INFOTS(1711462090.540014801) -1711462090.581616 [0] dq.builtin: => EVERYONE -1711462090.581617 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #6 L(:1c1 16938.241116)) -1711462090.581621 [0] recv: INFOTS(1711462090.540228660) -1711462090.581623 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #7) -1711462090.581629 [0] recv: INFOTS(1711462090.540493479) -1711462090.581623 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:403) scanning all rds of topic ros_discovery_info -1711462090.581631 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #8) -1711462090.581635 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:504 init_acknack_count = 1 -1711462090.581635 [0] recv: INFOTS(1711462090.540726396) -1711462090.581648 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #9) -1711462090.581645 [0] dq.builtin: reader_add_connection(pwr 110e21c:d0762c48:a9f0fb28:403 rd 110aba1:7b19badd:ce0adb73:504) -1711462090.581670 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.581673 [0] dq.builtin: proxy_writer_add_connection(pwr 110e21c:d0762c48:a9f0fb28:403 rd 110aba1:7b19badd:ce0adb73:504) - out-of-sync -1711462090.581675 [0] tev: xpack_addmsg 0x770414001390 0x77040c002dd0 0(control): niov 2 sz 64 => now niov 3 sz 92 -1711462090.581680 [0] tev: nn_xpack_send 92: 0x77041400139c:20 0x77040c002d38:44 0x77040c002ec8:28 [ udp/10.101.12.71:7416@2 ] -1711462090.581681 [0] tev: traffic-xmit (1) 92 -1711462090.581684 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #2: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/rosout",type_name="rcl_interfaces::msg::dds_::Log_",durability=1,durability_service=0:0:1000:-1:-1:-1,reliability=1:9223372036854775807,lifespan=10000000000,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581700 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:603 reliable transient-local writer unnamed: (default).rt/rosout/rcl_interfaces::msg::dds_::Log_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=0<>,topic_name="rt/rosout",type_name="rcl_interfaces::msg::dds_::Log_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1000:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=10000000000,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581708 [0] dq.builtin: => EVERYONE -1711462090.581712 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:603) scanning all rds of topic rt/rosout -1711462090.581719 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #3: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:703},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581732 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:703 reliable volatile writer unnamed: (default).rt/parameter_events/rcl_interfaces::msg::dds_::ParameterEvent_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=0<>,topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581736 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 1404 from udp/10.101.12.71:58212 -1711462090.581741 [0] dq.builtin: => EVERYONE -1711462090.581741 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.581746 [0] recv: INFOTS(1711462090.542833137) -1711462090.581746 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:703) scanning all rds of topic rt/parameter_events -1711462090.581750 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #10 L(:1c1 16938.241245) msr_in_sync(110aba1:7b19badd:ce0adb73:3c7 out-of-sync to tlcatchup)) -1711462090.581756 [0] recv: HEARTBEAT(#8:1..10 110e21c:d0762c48:a9f0fb28:3c2 -> 110aba1:7b19badd:ce0adb73:3c7: 110aba1:7b19badd:ce0adb73:3c7@10(sync)) -1711462090.581758 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #4: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.1;">,topic_name="rr/topological_transform_publisher/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581759 [0] recv: INFOTS(1711462090.520486974) -1711462090.581765 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #1) -1711462090.581770 [0] recv: INFOTS(1711462090.539611271) -1711462090.581774 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:803 reliable volatile writer unnamed: (default).rr/topological_transform_publisher/describe_parametersReply/rcl_interfaces::srv::dds_::DescribeParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.1;">,topic_name="rr/topological_transform_publisher/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581772 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.581779 [0] dq.builtin: => EVERYONE -1711462090.581774 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #2) -1711462090.581780 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#2:11/0: -1711462090.581783 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:803) scanning all rds of topic rr/topological_transform_publisher/describe_parametersReply -1711462090.581795 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462090.581790 [0] recv: INFOTS(1711462090.539853097) -1711462090.581803 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #5: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.2;">,topic_name="rr/topological_transform_publisher/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581806 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #3) -1711462090.581812 [0] recv: INFOTS(1711462090.540055318) -1711462090.581809 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x77040c002d38:44 [ udp/10.101.12.71:7416@2 ] -1711462090.581816 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #4) -1711462090.581819 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:a03 reliable volatile writer unnamed: (default).rr/topological_transform_publisher/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.2;">,topic_name="rr/topological_transform_publisher/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581824 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 100 from udp/10.101.12.71:44991 -1711462090.581828 [0] dq.builtin: => EVERYONE -1711462090.581830 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.581833 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:a03) scanning all rds of topic rr/topological_transform_publisher/get_parametersReply -1711462090.581841 [0] recv: HEARTBEAT(#5:1..10 L(:1c1 16938.241333)110443d:bb7f10a5:18901533:3c2 -> 110aba1:7b19badd:ce0adb73:3c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:3c7 #10) 110aba1:7b19badd:ce0adb73:3c7@0) -1711462090.581844 [0] tev: traffic-xmit (1) 64 -1711462090.581847 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #6: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.3;">,topic_name="rr/topological_transform_publisher/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581849 [0] tev: xpack_addmsg 0x770414001390 0x77040c002dd0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.581848 [0] recv: HEARTBEAT(#5:1..7 110443d:bb7f10a5:18901533:4c2 -> 110aba1:7b19badd:ce0adb73:4c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:4c7 #7) 110aba1:7b19badd:ce0adb73:4c7@0) -1711462090.581858 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 328 from udp/10.101.12.71:40473 -1711462090.581863 [0] recv: INFOTS(1711462090.581730334) -1711462090.581863 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:c03 reliable volatile writer unnamed: (default).rr/topological_transform_publisher/get_parameter_typesReply/rcl_interfaces::srv::dds_::GetParameterTypes_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.3;">,topic_name="rr/topological_transform_publisher/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581867 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x77040c002eb8:44 [ udp/10.101.12.71:7412@2 ] -1711462090.581869 [0] dq.builtin: => EVERYONE -1711462090.581871 [0] tev: traffic-xmit (1) 64 -1711462090.581883 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.581888 [0] tev: xpack_addmsg 0x770414001390 0x77040c002dd0 0(control): niov 2 sz 64 => now niov 3 sz 92 -1711462090.581865 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1736 from udp/10.101.12.71:40473 -1711462090.581879 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:c03) scanning all rds of topic rr/topological_transform_publisher/get_parameter_typesReply -1711462090.581895 [0] recvMC: INFOTS(1711462090.581796803) -1711462090.581897 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #35 L(:1c1 16938.241367) 110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.581893 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#1:1/10:1111111111 -1711462090.581901 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #35 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.581903 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462090.581902 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 1288 from udp/10.101.12.71:58212 -1711462090.581904 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #7: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.4;">,topic_name="rr/topological_transform_publisher/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581907 [0] tev: xpack_addmsg 0x770414001390 0x77040c003120 0(control): niov 3 sz 92 => now niov 4 sz 124 -1711462090.581908 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.581914 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110443d:bb7f10a5:18901533:4c2: F#1:1/7:1111111 -1711462090.581906 [0] recvMC: HEARTBEAT(F#41:35..35 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.581917 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110443d:bb7f10a5:18901533:4c2) -1711462090.581915 [0] recv: INFOTS(1711462090.540298409) -1711462090.581920 [0] tev: xpack_addmsg 0x770414001390 0x77040c002fa0 0(control): niov 4 sz 124 => now niov 5 sz 156 -1711462090.581922 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #5 L(:1c1 16938.241412)) -1711462090.581924 [0] recv: INFOTS(1711462090.540543814) -1711462090.581923 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:e03 reliable volatile writer unnamed: (default).rr/topological_transform_publisher/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.4;">,topic_name="rr/topological_transform_publisher/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581927 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #6) -1711462090.581929 [0] recv: INFOTS(1711462090.540764980) -1711462090.581928 [0] tev: nn_xpack_send 156: 0x77041400139c:20 0x77040c002d38:44 0x77040c002ec8:28 0x77040c003218:32 0x77040c003098:32 [ udp/10.101.12.71:7416@2 ] -1711462090.581931 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #7) -1711462090.581936 [0] tev: traffic-xmit (1) 156 -1711462090.581938 [0] tev: xpack_addmsg 0x770414001390 0x77040c0032f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.581939 [0] recv: INFOTS(1711462090.543211087) -1711462090.581942 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #8 msr_in_sync(110aba1:7b19badd:ce0adb73:4c7 out-of-sync to tlcatchup)) -1711462090.581943 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x77040c0033d8:44 [ udp/10.101.12.71:7414@2 ] -1711462090.581944 [0] tev: traffic-xmit (1) 64 -1711462090.581946 [0] recv: HEARTBEAT(#8:1..8 110e21c:d0762c48:a9f0fb28:4c2 -> 110aba1:7b19badd:ce0adb73:4c7: 110aba1:7b19badd:ce0adb73:4c7@8(sync)) -1711462090.581939 [0] dq.builtin: => EVERYONE -1711462090.581947 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#2:9/0: -1711462090.581951 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462090.581953 [0] tev: xpack_addmsg 0x770414001390 0x77040c0032f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.581958 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110e21c:d0762c48:a9f0fb28:200c2: F#1:1/1:1 -1711462090.581949 [0] recv: HEARTBEAT(#7:1..1 110e21c:d0762c48:a9f0fb28:200c2 -> 110aba1:7b19badd:ce0adb73:200c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:200c7 #1) 110aba1:7b19badd:ce0adb73:200c7@0) -1711462090.581959 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110e21c:d0762c48:a9f0fb28:200c2) -1711462090.581960 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:e03) scanning all rds of topic rr/topological_transform_publisher/list_parametersReply -1711462090.581962 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 2 sz 64 => now niov 3 sz 96 -1711462090.581967 [0] recv: HEARTBEAT(#4:1..0 110e21c:d0762c48:a9f0fb28:300c3 -> 110aba1:7b19badd:ce0adb73:300c4: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:300c4 #0) msr_in_sync(110aba1:7b19badd:ce0adb73:300c4 out-of-sync to tlcatchup) 110aba1:7b19badd:ce0adb73:300c4@0(sync)) -1711462090.581968 [0] tev: acknack 110aba1:7b19badd:ce0adb73:300c4 -> 110e21c:d0762c48:a9f0fb28:300c3: F#1:1/0: -1711462090.581970 [0] recv: HEARTBEAT(#4:1..0 110e21c:d0762c48:a9f0fb28:301c3 -> 110aba1:7b19badd:ce0adb73:301c4: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:301c4 #0) msr_in_sync(110aba1:7b19badd:ce0adb73:301c4 out-of-sync to tlcatchup) 110aba1:7b19badd:ce0adb73:301c4@0(sync)) -1711462090.581971 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:300c4 -> pwr 110e21c:d0762c48:a9f0fb28:300c3) -1711462090.581969 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #8: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.5;">,topic_name="rr/topological_transform_publisher/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:1003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581973 [0] tev: xpack_addmsg 0x770414001390 0x77040c002dd0 0(control): niov 3 sz 96 => now niov 4 sz 124 -1711462090.581973 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 324 from udp/10.101.12.71:40473 -1711462090.581978 [0] tev: acknack 110aba1:7b19badd:ce0adb73:301c4 -> 110e21c:d0762c48:a9f0fb28:301c3: F#1:1/0: -1711462090.581979 [0] recv: INFOTS(1711462090.581783677) -1711462090.581980 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:301c4 -> pwr 110e21c:d0762c48:a9f0fb28:301c3) -1711462090.581982 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #33 L(:1c1 16938.241483) 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: no heartbeat seen yet) -1711462090.581985 [0] tev: xpack_addmsg 0x770414001390 0x77040c003120 0(control): niov 4 sz 124 => now niov 5 sz 152 -1711462090.581988 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:1003 reliable volatile writer unnamed: (default).rr/topological_transform_publisher/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.5;">,topic_name="rr/topological_transform_publisher/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581991 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 68 from udp/10.101.12.71:44991 -1711462090.581995 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.581995 [0] dq.builtin: => EVERYONE -1711462090.581999 [0] recv: HEARTBEAT(#5:1..1 L(:1c1 16938.241499)110443d:bb7f10a5:18901533:200c2 -> 110aba1:7b19badd:ce0adb73:200c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:200c7 #1) 110aba1:7b19badd:ce0adb73:200c7@0) -1711462090.582005 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 68 from udp/10.101.12.71:44991 -1711462090.582006 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:1003) scanning all rds of topic rr/topological_transform_publisher/set_parametersReply -1711462090.582007 [0] tev: nn_xpack_send 152: 0x77041400139c:20 0x77040c0033d8:44 0x77040c002d48:32 0x77040c002ec8:28 0x77040c003218:28 [ udp/10.101.12.71:7412@2 ] -1711462090.582011 [0] tev: traffic-xmit (1) 152 -1711462090.582007 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582015 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #9: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.6;">,topic_name="rr/topological_transform_publisher/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:1203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582014 [0] tev: xpack_addmsg 0x770414001390 0x77040c002fa0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.582017 [0] recv: HEARTBEAT(#2:1..0 L(:1c1 16938.241511)110443d:bb7f10a5:18901533:300c3 -> 110aba1:7b19badd:ce0adb73:300c4: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:300c4 #0) msr_in_sync(110aba1:7b19badd:ce0adb73:300c4 out-of-sync to tlcatchup) 110aba1:7b19badd:ce0adb73:300c4@0(sync)) -1711462090.582021 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110443d:bb7f10a5:18901533:200c2: F#1:1/1:1 -1711462090.582023 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 68 from udp/10.101.12.71:40473 -1711462090.582025 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110443d:bb7f10a5:18901533:200c2) -1711462090.582025 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582030 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x77040c003088:44 [ udp/10.101.12.71:7414@2 ] -1711462090.582031 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:1203 reliable volatile writer unnamed: (default).rr/topological_transform_publisher/set_parameters_atomicallyReply/rcl_interfaces::srv::dds_::SetParametersAtomically_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.6;">,topic_name="rr/topological_transform_publisher/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582035 [0] tev: traffic-xmit (1) 64 -1711462090.582031 [0] recv: HEARTBEAT(#6:1..35 L(:1c1 16938.241529)110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:3c7 #35) 110aba1:7b19badd:ce0adb73:3c7@0) -1711462090.582038 [0] tev: xpack_addmsg 0x770414001390 0x77040c0032f0 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.582043 [0] dq.builtin: => EVERYONE -1711462090.582043 [0] tev: acknack 110aba1:7b19badd:ce0adb73:300c4 -> 110443d:bb7f10a5:18901533:300c3: F#1:1/0: -1711462090.582050 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:300c4 -> pwr 110443d:bb7f10a5:18901533:300c3) -1711462090.582048 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:1203) scanning all rds of topic rr/topological_transform_publisher/set_parameters_atomicallyReply -1711462090.582053 [0] tev: xpack_addmsg 0x770414001390 0x77040c002fa0 0(control): niov 2 sz 68 => now niov 3 sz 96 -1711462090.582056 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 100 from udp/10.101.12.71:58212 -1711462090.582062 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582059 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#1:1/35:11111111111111111111111111111111111 -1711462090.582064 [0] recv: INFOTS(1711462090.519500902) -1711462090.582066 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #10: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/tf_static",type_name="tf2_msgs::msg::dds_::TFMessage_",durability=1,reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:1403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582068 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:200c2 -> 110aba1:7b19badd:ce0adb73:200c7 #1 L(:1c1 16938.241566) msr_in_sync(110aba1:7b19badd:ce0adb73:200c7 out-of-sync to tlcatchup)) -1711462090.582071 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.582074 [0] recv: INFOTS(1711462090.582034642) -1711462090.582071 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462090.582083 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:1403 reliable transient-local writer unnamed: (default).rt/tf_static/tf2_msgs::msg::dds_::TFMessage_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=0<>,topic_name="rt/tf_static",type_name="tf2_msgs::msg::dds_::TFMessage_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582084 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #36 L(:1c1 16938.241578)) -1711462090.582086 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x77040c0033d8:48 0x77040c003098:28 [ udp/10.101.12.71:7416@2 ] -1711462090.582090 [0] tev: traffic-xmit (1) 96 -1711462090.582092 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 72 -1711462090.582093 [0] dq.builtin: => EVERYONE -1711462090.582097 [0] tev: xpack_addmsg 0x770414001390 0x77040c0032f0 0(control): niov 2 sz 72 => now niov 3 sz 100 -1711462090.582095 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 68 from udp/10.101.12.71:58212 -1711462090.582108 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582105 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110e21c:d0762c48:a9f0fb28:1403) scanning all rds of topic rt/tf_static -1711462090.582111 [0] recv: HEARTBEAT(#8:1..1 L(:1c1 16938.241612)110e21c:d0762c48:a9f0fb28:200c2 -> 110aba1:7b19badd:ce0adb73:200c7: 110aba1:7b19badd:ce0adb73:200c7@1(sync)) -1711462090.582105 [0] tev: nn_xpack_send 100: 0x77041400139c:20 0x77040c002d38:52 0x77040c0033e8:28 [ udp/10.101.12.71:7414@2 ] -1711462090.582117 [0] tev: traffic-xmit (1) 100 -1711462090.582120 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110e21c:d0762c48:a9f0fb28:200c2: F#2:2/0: -1711462090.582128 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110e21c:d0762c48:a9f0fb28:200c2) -1711462090.582130 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.582120 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 68 from udp/10.101.12.71:40473 -1711462090.582134 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x77040c002d38:44 [ udp/10.101.12.71:7412@2 ] -1711462090.582121 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #1: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,history=1:-1,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:504},adlink_entity_factory=1} -1711462090.582137 [0] tev: traffic-xmit (1) 64 -1711462090.582136 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582148 [0] recv: HEARTBEAT(#6:1..33 L(:1c1 16938.241640)110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:4c7 #33) 110aba1:7b19badd:ce0adb73:4c7@0) -1711462090.582153 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2: F#1:1/33:111111111111111111111111111111111 -1711462090.582155 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462090.582157 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 72 -1711462090.582155 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:504 reliable transient-local reader unnamed: (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=1:-1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.582159 [0] tev: xpack_addmsg 0x770414001390 0x77040c0032f0 0(control): niov 2 sz 72 => now niov 3 sz 100 -1711462090.582164 [0] dq.builtin: => EVERYONE -1711462090.582164 [0] tev: nn_xpack_send 100: 0x77041400139c:20 0x77040c002d38:52 0x77040c0033e8:28 [ udp/10.101.12.71:7414@2 ] -1711462090.582169 [0] tev: traffic-xmit (1) 100 -1711462090.582169 [0] dq.builtin: match_proxy_reader_with_writers(prd 110e21c:d0762c48:a9f0fb28:504) scanning all wrs of topic ros_discovery_info -1711462090.582175 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1784 from udp/10.101.12.71:40473 -1711462090.582176 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:403 prd 110e21c:d0762c48:a9f0fb28:504) -1711462090.582177 [0] recvMC: INFOTS(1711462090.582110521) -1711462090.582180 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:403 prd 110e21c:d0762c48:a9f0fb28:504) - ack seq 2 -1711462090.582184 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #36 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.582189 [0] recvMC: HEARTBEAT(F#42:36..36 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.582182 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 1324 from udp/10.101.12.71:44991 -1711462090.582196 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582200 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 -1711462090.582203 [0] recv: HEARTBEAT(#2:1..0 L(:1c1 16938.241700)110443d:bb7f10a5:18901533:301c3 -> 110aba1:7b19badd:ce0adb73:301c4: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:301c4 #0) msr_in_sync(110aba1:7b19badd:ce0adb73:301c4 out-of-sync to tlcatchup) 110aba1:7b19badd:ce0adb73:301c4@0(sync)) -1711462090.582208 [0] recv: INFOTS(1711462090.550118373) -1711462090.582206 [0] tev: acknack 110aba1:7b19badd:ce0adb73:301c4 -> 110443d:bb7f10a5:18901533:301c3: F#1:1/0: -1711462090.582216 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:301c4 -> pwr 110443d:bb7f10a5:18901533:301c3) -1711462090.582221 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.582212 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #1) -1711462090.582204 [0] dq.builtin: reduced nlocs=2 -1711462090.582225 [0] recv: INFOTS(1711462090.551060212) -1711462090.582225 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x77040c002d38:44 [ udp/10.101.12.71:7416@2 ] -1711462090.582230 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #2) -1711462090.582235 [0] recv: INFOTS(1711462090.567575352) -1711462090.582238 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #3) -1711462090.582240 [0] recv: INFOTS(1711462090.568216939) -1711462090.582243 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #4) -1711462090.582245 [0] recv: INFOTS(1711462090.568522519) -1711462090.582230 [0] tev: traffic-xmit (1) 64 -1711462090.582230 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.582247 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #5) -1711462090.582253 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7413@2 0 -> 0 -1711462090.582249 [0] tev: xpack_addmsg 0x770414001390 0x77040c0032f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.582257 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 340 from udp/10.101.12.71:40473 -1711462090.582261 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7401@2 1 -> 8 -1711462090.582265 [0] recv: INFOTS(1711462090.582090581) -1711462090.582266 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x77040c0033d8:44 [ udp/10.101.12.71:7414@2 ] -1711462090.582274 [0] tev: traffic-xmit (1) 64 -1711462090.582272 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #34 L(:1c1 16938.241769)) -1711462090.582269 [0] dq.builtin: a -1711462090.582292 [0] dq.builtin: loc 0 = udp/10.101.12.71:7413@2 1 { +u } -1711462090.582297 [0] dq.builtin: loc 1 = udp/239.255.0.1:7401@2 2 { +1 } -1711462090.582298 [0] dq.builtin: best = 0 -1711462090.582301 [0] dq.builtin: simple udp/10.101.12.71:7413@2 -1711462090.582305 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:403): udp/10.101.12.71:7413@2 (burst size 4294901760 rexmit 1048576) -1711462090.582306 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 1452 from udp/10.101.12.71:44991 -1711462090.582311 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582312 [0] recv: INFOTS(1711462090.568841289) -1711462090.582314 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #6 L(:1c1 16938.241815)) -1711462090.582316 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #2: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.1;">,topic_name="rq/topological_transform_publisher/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:904},adlink_entity_factory=1} -1711462090.582317 [0] recv: INFOTS(1711462090.569135598) -1711462090.582323 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #7) -1711462090.582324 [0] recv: INFOTS(1711462090.569441604) -1711462090.582327 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #8) -1711462090.582328 [0] recv: INFOTS(1711462090.569710842) -1711462090.582330 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #9) -1711462090.582331 [0] recv: INFOTS(1711462090.571973111) -1711462090.582333 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #10 msr_in_sync(110aba1:7b19badd:ce0adb73:3c7 out-of-sync to tlcatchup)) -1711462090.582336 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 1444 from udp/10.101.12.71:44991 -1711462090.582336 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:904 reliable volatile reader unnamed: (default).rq/topological_transform_publisher/describe_parametersRequest/rcl_interfaces::srv::dds_::DescribeParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.1;">,topic_name="rq/topological_transform_publisher/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.582337 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582341 [0] recv: INFOTS(1711462090.550298409) -1711462090.582343 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #1 L(:1c1 16938.241841)) -1711462090.582345 [0] recv: INFOTS(1711462090.568255806) -1711462090.582346 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #2) -1711462090.582349 [0] recv: INFOTS(1711462090.568565213) -1711462090.582347 [0] dq.builtin: => EVERYONE -1711462090.582351 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #3) -1711462090.582354 [0] dq.builtin: match_proxy_reader_with_writers(prd 110e21c:d0762c48:a9f0fb28:904) scanning all wrs of topic rq/topological_transform_publisher/describe_parametersRequest -1711462090.582354 [0] recv: INFOTS(1711462090.568893800) -1711462090.582359 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #4) -1711462090.582360 [0] recv: INFOTS(1711462090.569197394) -1711462090.582362 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #5) -1711462090.582364 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #3: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.2;">,topic_name="rq/topological_transform_publisher/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:b04},adlink_entity_factory=1} -1711462090.582366 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 800 from udp/10.101.12.71:44991 -1711462090.582371 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582373 [0] recv: INFOTS(1711462090.569489785) -1711462090.582375 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #6 L(:1c1 16938.241875)) -1711462090.582376 [0] recv: INFOTS(1711462090.569761244) -1711462090.582378 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #7 msr_in_sync(110aba1:7b19badd:ce0adb73:4c7 out-of-sync to tlcatchup)) -1711462090.582381 [0] recv: HEARTBEAT(#6:1..10 110443d:bb7f10a5:18901533:3c2 -> 110aba1:7b19badd:ce0adb73:3c7: 110aba1:7b19badd:ce0adb73:3c7@10(sync)) -1711462090.582384 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#2:11/0: -1711462090.582384 [0] recv: HEARTBEAT(#6:1..7 110443d:bb7f10a5:18901533:4c2 -> 110aba1:7b19badd:ce0adb73:4c7: 110aba1:7b19badd:ce0adb73:4c7@7(sync)) -1711462090.582386 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462090.582388 [0] tev: xpack_addmsg 0x770414001390 0x77040c0032f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.582391 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110443d:bb7f10a5:18901533:4c2: F#2:8/0: -1711462090.582392 [0] recv: INFOTS(1711462090.549382637) -1711462090.582392 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110443d:bb7f10a5:18901533:4c2) -1711462090.582395 [0] recv: DATA(110443d:bb7f10a5:18901533:200c2 -> 110aba1:7b19badd:ce0adb73:200c7 #1 msr_in_sync(110aba1:7b19badd:ce0adb73:200c7 out-of-sync to tlcatchup)) -1711462090.582384 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:b04 reliable volatile reader unnamed: (default).rq/topological_transform_publisher/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.2;">,topic_name="rq/topological_transform_publisher/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.582397 [0] recv: HEARTBEAT(#6:1..1 110443d:bb7f10a5:18901533:200c2 -> 110aba1:7b19badd:ce0adb73:200c7: 110aba1:7b19badd:ce0adb73:200c7@1(sync)) -1711462090.582401 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 2 sz 64 => now niov 3 sz 92 -1711462090.582402 [0] dq.builtin: => EVERYONE -1711462090.582406 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110443d:bb7f10a5:18901533:200c2: F#2:2/0: -1711462090.582406 [0] dq.builtin: match_proxy_reader_with_writers(prd 110e21c:d0762c48:a9f0fb28:b04) scanning all wrs of topic rq/topological_transform_publisher/get_parametersRequest -1711462090.582409 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110443d:bb7f10a5:18901533:200c2) -1711462090.582411 [0] tev: xpack_addmsg 0x770414001390 0x77040c002fa0 0(control): niov 3 sz 92 => now niov 4 sz 120 -1711462090.582415 [0] tev: nn_xpack_send 120: 0x77041400139c:20 0x77040c0033d8:44 0x77040c002d48:28 0x77040c003098:28 [ udp/10.101.12.71:7416@2 ] -1711462090.582417 [0] tev: traffic-xmit (1) 120 -1711462090.582419 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #4: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.3;">,topic_name="rq/topological_transform_publisher/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:d04},adlink_entity_factory=1} -1711462090.582442 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:d04 reliable volatile reader unnamed: (default).rq/topological_transform_publisher/get_parameter_typesRequest/rcl_interfaces::srv::dds_::GetParameterTypes_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.3;">,topic_name="rq/topological_transform_publisher/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.582454 [0] dq.builtin: => EVERYONE -1711462090.582458 [0] gc: gc 0x77041c025520: not yet, shortsleep -1711462090.582459 [0] dq.builtin: match_proxy_reader_with_writers(prd 110e21c:d0762c48:a9f0fb28:d04) scanning all wrs of topic rq/topological_transform_publisher/get_parameter_typesRequest -1711462090.582466 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1276 from udp/10.101.12.71:40473 -1711462090.582469 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582471 [0] recv: INFOTS(1711462090.542116783) -1711462090.582471 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #5: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.4;">,topic_name="rq/topological_transform_publisher/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:f04},adlink_entity_factory=1} -1711462090.582474 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #1 L(:1c1 16938.241973)) -1711462090.582476 [0] recv: INFOTS(1711462090.542538066) -1711462090.582477 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #2) -1711462090.582479 [0] recv: INFOTS(1711462090.557958448) -1711462090.582482 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #3) -1711462090.582483 [0] recv: INFOTS(1711462090.558506480) -1711462090.582487 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #4) -1711462090.582488 [0] recv: INFOTS(1711462090.558775861) -1711462090.582490 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #5) -1711462090.582490 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:f04 reliable volatile reader unnamed: (default).rq/topological_transform_publisher/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.4;">,topic_name="rq/topological_transform_publisher/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.582502 [0] dq.builtin: => EVERYONE -1711462090.582506 [0] dq.builtin: match_proxy_reader_with_writers(prd 110e21c:d0762c48:a9f0fb28:f04) scanning all wrs of topic rq/topological_transform_publisher/list_parametersRequest -1711462090.582514 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #6: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.5;">,topic_name="rq/topological_transform_publisher/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:1104},adlink_entity_factory=1} -1711462090.582530 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:1104 reliable volatile reader unnamed: (default).rq/topological_transform_publisher/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.5;">,topic_name="rq/topological_transform_publisher/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.582534 [0] dq.builtin: => EVERYONE -1711462090.582538 [0] dq.builtin: match_proxy_reader_with_writers(prd 110e21c:d0762c48:a9f0fb28:1104) scanning all wrs of topic rq/topological_transform_publisher/set_parametersRequest -1711462090.582542 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1832 from udp/10.101.12.71:40473 -1711462090.582545 [0] recvMC: INFOTS(1711462090.582480087) -1711462090.582545 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #7: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.6;">,topic_name="rq/topological_transform_publisher/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:1304},adlink_entity_factory=1} -1711462090.582551 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #37 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.582555 [0] recvMC: HEARTBEAT(F#43:37..37 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.582570 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:1304 reliable volatile reader unnamed: (default).rq/topological_transform_publisher/set_parameters_atomicallyRequest/rcl_interfaces::srv::dds_::SetParametersAtomically_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.e2.1c.d0.76.2c.48.a9.f0.fb.28.0.0.0.6;">,topic_name="rq/topological_transform_publisher/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.582579 [0] dq.builtin: => EVERYONE -1711462090.582583 [0] dq.builtin: match_proxy_reader_with_writers(prd 110e21c:d0762c48:a9f0fb28:1304) scanning all wrs of topic rq/topological_transform_publisher/set_parameters_atomicallyRequest -1711462090.582590 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #8: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="rt/topological_map_2",type_name="std_msgs::msg::dds_::String_",durability=1,reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110e21c:d0762c48:a9f0fb28:1504},adlink_entity_factory=1} -1711462090.582605 [0] dq.builtin: SEDP ST0 110e21c:d0762c48:a9f0fb28:1504 reliable transient-local reader unnamed: (default).rt/topological_map_2/std_msgs::msg::dds_::String_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 ssm=0) QOS={user_data=0<>,topic_name="rt/topological_map_2",type_name="std_msgs::msg::dds_::String_",topic_data=0<>,group_data=0<>,durability=1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.582611 [0] dq.builtin: => EVERYONE -1711462090.582615 [0] dq.builtin: match_proxy_reader_with_writers(prd 110e21c:d0762c48:a9f0fb28:1504) scanning all wrs of topic rt/topological_map_2 -1711462090.582619 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:200c2 #1: ST0 DCPSParticipantMessage/ParticipantMessageData:{110e21c:d0762c48:a9f0fb28:1}:1<0> -1711462090.582623 [0] dq.builtin: PMD ST0 pp 110e21c:d0762c48:a9f0fb28 kind 1 data 1 -1711462090.582632 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #36: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.21;">,topic_name="rr/topological_map_manager2/update_fail_policyReply",type_name="topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582649 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4803 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_fail_policyReply/topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.21;">,topic_name="rr/topological_map_manager2/update_fail_policyReply",type_name="topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582657 [0] dq.builtin: => EVERYONE -1711462090.582660 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4803) scanning all rds of topic rr/topological_map_manager2/update_fail_policyReply -1711462090.582668 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #1: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582685 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:403 reliable transient-local writer unnamed: (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582690 [0] dq.builtin: => EVERYONE -1711462090.582693 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:403) scanning all rds of topic ros_discovery_info -1711462090.582697 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:504 init_acknack_count = 1 -1711462090.582698 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1236 from udp/10.101.12.71:40473 -1711462090.582703 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582700 [0] dq.builtin: reader_add_connection(pwr 110443d:bb7f10a5:18901533:403 rd 110aba1:7b19badd:ce0adb73:504) -1711462090.582705 [0] recv: INFOTS(1711462090.559026057) -1711462090.582713 [0] dq.builtin: proxy_writer_add_connection(pwr 110443d:bb7f10a5:18901533:403 rd 110aba1:7b19badd:ce0adb73:504) - out-of-sync -1711462090.582715 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #6 L(:1c1 16938.242207)) -1711462090.582718 [0] recv: INFOTS(1711462090.559364009) -1711462090.582720 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #7) -1711462090.582721 [0] recv: INFOTS(1711462090.559658827) -1711462090.582722 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #8) -1711462090.582724 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #2: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/rosout",type_name="rcl_interfaces::msg::dds_::Log_",durability=1,durability_service=0:0:1000:-1:-1:-1,reliability=1:9223372036854775807,lifespan=10000000000,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582724 [0] recv: INFOTS(1711462090.559900367) -1711462090.582729 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #9) -1711462090.582740 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:603 reliable transient-local writer unnamed: (default).rt/rosout/rcl_interfaces::msg::dds_::Log_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=0<>,topic_name="rt/rosout",type_name="rcl_interfaces::msg::dds_::Log_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1000:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=10000000000,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582748 [0] dq.builtin: => EVERYONE -1711462090.582752 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:603) scanning all rds of topic rt/rosout -1711462090.582756 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1284 from udp/10.101.12.71:40473 -1711462090.582757 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582760 [0] recv: INFOTS(1711462090.573532356) -1711462090.582758 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #3: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:703},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582765 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #10 L(:1c1 16938.242261)) -1711462090.582770 [0] recv: INFOTS(1711462090.575442461) -1711462090.582772 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #11) -1711462090.582774 [0] recv: INFOTS(1711462090.575726889) -1711462090.582775 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #12) -1711462090.582776 [0] recv: INFOTS(1711462090.575995325) -1711462090.582779 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #13) -1711462090.582782 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:703 reliable volatile writer unnamed: (default).rt/parameter_events/rcl_interfaces::msg::dds_::ParameterEvent_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=0<>,topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582782 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 372 from udp/10.101.12.71:40473 -1711462090.582790 [0] dq.builtin: => EVERYONE -1711462090.582791 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582795 [0] recv: INFOTS(1711462090.576266665) -1711462090.582797 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #14 L(:1c1 16938.242295)) -1711462090.582797 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:703) scanning all rds of topic rt/parameter_events -1711462090.582811 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #4: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.1;">,topic_name="rr/static_transformer/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582820 [0] recvUC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462090.582822 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582824 [0] recvUC: ACKNACK(#0:1/0: 110d7b4:17c5b8c5:94bd0ff4:504? -> 110aba1:7b19badd:ce0adb73:403) -1711462090.582828 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:803 reliable volatile writer unnamed: (default).rr/static_transformer/describe_parametersReply/rcl_interfaces::srv::dds_::DescribeParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.1;">,topic_name="rr/static_transformer/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582868 [0] dq.builtin: => EVERYONE -1711462090.582872 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:803) scanning all rds of topic rr/static_transformer/describe_parametersReply -1711462090.582880 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1344 from udp/10.101.12.71:40473 -1711462090.582881 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #5: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.2;">,topic_name="rr/static_transformer/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582882 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582889 [0] recv: INFOTS(1711462090.576532468) -1711462090.582887 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1880 from udp/10.101.12.71:40473 -1711462090.582902 [0] recvMC: INFOTS(1711462090.582807206) -1711462090.582899 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:a03 reliable volatile writer unnamed: (default).rr/static_transformer/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.2;">,topic_name="rr/static_transformer/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582904 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #38 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.582898 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #15 L(:1c1 16938.242386)) -1711462090.582909 [0] recv: INFOTS(1711462090.576742682) -1711462090.582910 [0] recvMC: HEARTBEAT(F#44:38..38 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.582914 [0] dq.builtin: => EVERYONE -1711462090.582914 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #16) -1711462090.582921 [0] recv: INFOTS(1711462090.577330990) -1711462090.582923 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #17) -1711462090.582925 [0] recv: INFOTS(1711462090.577582984) -1711462090.582918 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:a03) scanning all rds of topic rr/static_transformer/get_parametersReply -1711462090.582927 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #18) -1711462090.582932 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1320 from udp/10.101.12.71:40473 -1711462090.582934 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582937 [0] recv: INFOTS(1711462090.577848971) -1711462090.582935 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #34: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.21;">,topic_name="rq/topological_map_manager2/update_fail_policyRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4904},adlink_entity_factory=1} -1711462090.582939 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #19 L(:1c1 16938.242439)) -1711462090.582945 [0] recv: INFOTS(1711462090.578042902) -1711462090.582947 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #20) -1711462090.582949 [0] recv: INFOTS(1711462090.578286739) -1711462090.582950 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #21) -1711462090.582952 [0] recv: INFOTS(1711462090.578531397) -1711462090.582954 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #22) -1711462090.582957 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4904 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_fail_policyRequest/topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.21;">,topic_name="rq/topological_map_manager2/update_fail_policyRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.582965 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462090.582965 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1316 from udp/10.101.12.71:40473 -1711462090.582971 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582968 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.582972 [0] recv: INFOTS(1711462090.578749181) -1711462090.582975 [0] recvUC: ACKNACK(#0:1/0: 110443d:bb7f10a5:18901533:504? -> 110aba1:7b19badd:ce0adb73:403) -1711462090.582968 [0] dq.builtin: => EVERYONE -1711462090.582981 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4904) scanning all wrs of topic rq/topological_map_manager2/update_fail_policyRequest -1711462090.582981 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #23 L(:1c1 16938.242475)) -1711462090.582985 [0] recv: INFOTS(1711462090.578997155) -1711462090.582987 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #24) -1711462090.582988 [0] recv: INFOTS(1711462090.579246849) -1711462090.582989 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #25) -1711462090.582992 [0] recv: INFOTS(1711462090.579526903) -1711462090.582990 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #6: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.3;">,topic_name="rr/static_transformer/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582994 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #26) -1711462090.582999 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1352 from udp/10.101.12.71:40473 -1711462090.583001 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.583003 [0] recv: INFOTS(1711462090.579726226) -1711462090.583005 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #27 L(:1c1 16938.242505)) -1711462090.583006 [0] recv: INFOTS(1711462090.579973596) -1711462090.583008 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #28) -1711462090.583012 [0] recv: INFOTS(1711462090.580189530) -1711462090.583010 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:c03 reliable volatile writer unnamed: (default).rr/static_transformer/get_parameter_typesReply/rcl_interfaces::srv::dds_::GetParameterTypes_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.3;">,topic_name="rr/static_transformer/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583016 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #29) -1711462090.583020 [0] recv: INFOTS(1711462090.580393021) -1711462090.583022 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #30) -1711462090.583024 [0] dq.builtin: => EVERYONE -1711462090.583028 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:c03) scanning all rds of topic rr/static_transformer/get_parameter_typesReply -1711462090.583033 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1340 from udp/10.101.12.71:40473 -1711462090.583034 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.583036 [0] recv: INFOTS(1711462090.580658980) -1711462090.583038 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #31 L(:1c1 16938.242538)) -1711462090.583040 [0] recv: INFOTS(1711462090.580867994) -1711462090.583036 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #7: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.4;">,topic_name="rr/static_transformer/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583042 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #32) -1711462090.583046 [0] recv: INFOTS(1711462090.581146130) -1711462090.583047 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #33) -1711462090.583049 [0] recv: INFOTS(1711462090.581430143) -1711462090.583051 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #34) -1711462090.583057 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:e03 reliable volatile writer unnamed: (default).rr/static_transformer/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.4;">,topic_name="rr/static_transformer/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583059 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.583062 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.583063 [0] dq.builtin: => EVERYONE -1711462090.583063 [0] recv: INFOTS(1711462090.581730334) -1711462090.583073 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #35 L(:1c1 16938.242566) msr_in_sync(110aba1:7b19badd:ce0adb73:3c7 out-of-sync to tlcatchup)) -1711462090.583074 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:e03) scanning all rds of topic rr/static_transformer/list_parametersReply -1711462090.583081 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #8: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.5;">,topic_name="rr/static_transformer/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:1003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583084 [0] tev: xpack_addmsg 0x770414001390 0x77040c0032f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.583087 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 352 from udp/10.101.12.71:40473 -1711462090.583089 [0] recv: INFOTS(1711462090.582385748) -1711462090.583092 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #37 L(:1c1 16938.242594)) -1711462090.583094 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x77040c0033d8:44 [ udp/10.101.12.71:7410@2 ] -1711462090.583105 [0] tev: traffic-xmit (1) 64 -1711462090.583103 [0] recvUC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462090.583116 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.583096 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:1003 reliable volatile writer unnamed: (default).rr/static_transformer/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.5;">,topic_name="rr/static_transformer/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583120 [0] recvUC: ACKNACK(#0:1/0: L(:1c1 16938.242620) 110e21c:d0762c48:a9f0fb28:504 -> 110aba1:7b19badd:ce0adb73:403 preemptive-nack rebase defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:403 -> 110e21c:d0762c48:a9f0fb28:504 - queue for transmit -1711462090.583122 [0] dq.builtin: => EVERYONE -1711462090.583124 [0] recvUC: non-timed queue now has 1 items -1711462090.583127 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:1003) scanning all rds of topic rr/static_transformer/set_parametersReply -1711462090.583130 [0] recvUC: ) -1711462090.583132 [0] tev: xpack_addmsg 0x770414001390 0x77040c0032f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.583138 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x77040c0033d8:44 [ udp/10.101.12.71:7410@2 ] -1711462090.583140 [0] tev: traffic-xmit (1) 64 -1711462090.583142 [0] tev: xpack_addmsg 0x770414001390 0x770404001390 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.583143 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #9: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.6;">,topic_name="rr/static_transformer/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:1203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583148 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x770404001478:48 [ udp/10.101.12.71:7413@2 ] -1711462090.583150 [0] tev: traffic-xmit (1) 68 -1711462090.583152 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 100 from udp/10.101.12.71:40473 -1711462090.583160 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.583161 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:1203 reliable volatile writer unnamed: (default).rr/static_transformer/set_parameters_atomicallyReply/rcl_interfaces::srv::dds_::SetParametersAtomically_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.6;">,topic_name="rr/static_transformer/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583167 [0] recv: HEARTBEAT(#7:1..36 L(:1c1 16938.242664)110d7b4:17c5b8c5:94bd0ff4:3c2 -> 110aba1:7b19badd:ce0adb73:3c7: 110aba1:7b19badd:ce0adb73:3c7@37(sync)) -1711462090.583169 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#2:38/0: -1711462090.583170 [0] recv: HEARTBEAT(#6:1..1 110d7b4:17c5b8c5:94bd0ff4:200c2 -> 110aba1:7b19badd:ce0adb73:200c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:200c7 #1) 110aba1:7b19badd:ce0adb73:200c7@0) -1711462090.583173 [0] dq.builtin: => EVERYONE -1711462090.583175 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 68 from udp/10.101.12.71:50807 -1711462090.583177 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:1203) scanning all rds of topic rr/static_transformer/set_parameters_atomicallyReply -1711462090.583177 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.583171 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462090.583190 [0] tev: xpack_addmsg 0x770414001390 0x770404001390 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.583187 [0] recv: HEARTBEAT(#7:1..9 L(:1c1 16938.242681)110cd0d:56a27910:57318171:3c2 -> 110aba1:7b19badd:ce0adb73:3c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:3c7 #9) 110aba1:7b19badd:ce0adb73:3c7@0) -1711462090.583194 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110d7b4:17c5b8c5:94bd0ff4:200c2: F#1:1/1:1 -1711462090.583187 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #10: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/tf_static",type_name="tf2_msgs::msg::dds_::TFMessage_",durability=1,reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:1403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583205 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462090.583212 [0] tev: xpack_addmsg 0x770414001390 0x77040c0032f0 0(control): niov 2 sz 64 => now niov 3 sz 96 -1711462090.583207 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.583218 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:56a27910:57318171:3c2: F#1:1/9:111111111 -1711462090.583223 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110cd0d:56a27910:57318171:3c2) -1711462090.583223 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:1403 reliable transient-local writer unnamed: (default).rt/tf_static/tf2_msgs::msg::dds_::TFMessage_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=0<>,topic_name="rt/tf_static",type_name="tf2_msgs::msg::dds_::TFMessage_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583226 [0] recv: INFOTS(1711462090.582465762) -1711462090.583233 [0] dq.builtin: => EVERYONE -1711462090.583240 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #35 L(:1c1 16938.242729)) -1711462090.583243 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:1403) scanning all rds of topic rt/tf_static -1711462090.583227 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770404001478:44 0x77040c0033e8:32 [ udp/10.101.12.71:7414@2 ] -1711462090.583249 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 68 from udp/10.101.12.71:50807 -1711462090.583252 [0] tev: traffic-xmit (1) 96 -1711462090.583253 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.583255 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.583236 [0] recvUC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 68 from udp/10.101.12.71:58212 -1711462090.583259 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1928 from udp/10.101.12.71:40473 -1711462090.583266 [0] recvMC: INFOTS(1711462090.583170500) -1711462090.583269 [0] tev: xpack_addmsg 0x770414001390 0x770404001390 0(control): niov 2 sz 68 => now niov 3 sz 96 -1711462090.583274 [0] tev: xpack_addmsg 0x770414001390 0x77040c0032f0 0(control): niov 3 sz 96 => now niov 4 sz 124 -1711462090.583252 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #1: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,history=1:-1,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:504},adlink_entity_factory=1} -1711462090.583262 [0] recv: HEARTBEAT(#7:1..10 L(:1c1 16938.242756)110cd0d:56a27910:57318171:4c2 -> 110aba1:7b19badd:ce0adb73:4c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:4c7 #10) 110aba1:7b19badd:ce0adb73:4c7@0) -1711462090.583278 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:56a27910:57318171:4c2: F#1:1/10:1111111111 -1711462090.583290 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110cd0d:56a27910:57318171:4c2) -1711462090.583263 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.583291 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1416 from udp/10.101.12.71:40473 -1711462090.583292 [0] tev: xpack_addmsg 0x770414001390 0x77040c002fa0 0(control): niov 4 sz 124 => now niov 5 sz 156 -1711462090.583296 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.583301 [0] recv: INFOTS(1711462090.542199398) -1711462090.583271 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #39 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.583297 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:504 reliable transient-local reader unnamed: (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=1:-1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.583302 [0] tev: nn_xpack_send 156: 0x77041400139c:20 0x77040c002d38:48 0x770404001488:28 0x77040c0033e8:28 0x77040c003098:32 [ udp/10.101.12.71:7410@2 ] -1711462090.583314 [0] tev: traffic-xmit (1) 156 -1711462090.583312 [0] recvMC: HEARTBEAT(F#45:39..39 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.583312 [0] recvUC: ACKNACK(F#1:2/1:1 L(:1c1 16938.242765) 110e21c:d0762c48:a9f0fb28:504 -> 110aba1:7b19badd:ce0adb73:403 complying RX2non-timed queue now has 1 items -1711462090.583321 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #1 L(:1c1 16938.242799)) -1711462090.583328 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.583328 [0] recvUC: rexmit#1 maxseq:2<2<=2defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:403 -> 110e21c:d0762c48:a9f0fb28:504 - queue for transmit -1711462090.583332 [0] recv: INFOTS(1711462090.558560619) -1711462090.583340 [0] recvUC: ) -1711462090.583349 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #2) -1711462090.583357 [0] recvUC: send_deferred_heartbeat: 3aa8b43931dec43 -> 2b8c74ae6267e33e - queue for transmit -1711462090.583343 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 unicasting to prd 110e21c:d0762c48:a9f0fb28:504 (rel-prd 1 seq-eq-max 0 seq 2 maxseq 2) -1711462090.583342 [0] dq.builtin: => EVERYONE -1711462090.583358 [0] recv: INFOTS(1711462090.558823217) -1711462090.583368 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:504) scanning all wrs of topic ros_discovery_info -1711462090.583367 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:403) sent, resched in 0.1 s (min-ack 2!, avail-seq 2, xmit 2) -1711462090.583374 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:403 prd 110443d:bb7f10a5:18901533:504) -1711462090.583372 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #3) -1711462090.583382 [0] recv: INFOTS(1711462090.559079317) -1711462090.583362 [0] recvUC: non-timed queue now has 2 items -1711462090.583387 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #4) -1711462090.583396 [0] recv: INFOTS(1711462090.559428765) -1711462090.583396 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:403 prd 110443d:bb7f10a5:18901533:504) - ack seq 2 -1711462090.583396 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x77040c002d38:44 [ udp/10.101.12.71:7410@2 ] -1711462090.583404 [0] tev: traffic-xmit (1) 64 -1711462090.583407 [0] tev: xpack_addmsg 0x770414001390 0x770404001390 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.583407 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7417@2 -1711462090.583413 [0] dq.builtin: reduced nlocs=3 -1711462090.583401 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #5) -1711462090.583414 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x770404001478:48 [ udp/10.101.12.71:7413@2 ] -1711462090.583417 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.583417 [0] tev: traffic-xmit (1) 68 -1711462090.583420 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.583427 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7413@2 0 -> 0 -1711462090.583427 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x77040c002d38:44 [ udp/10.101.12.71:7410@2 ] -1711462090.583433 [0] tev: traffic-xmit (1) 64 -1711462090.583435 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1232 from udp/10.101.12.71:40473 -1711462090.583430 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462090.583440 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.583448 [0] recv: INFOTS(1711462090.559691960) -1711462090.583436 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(rexmit(110aba1:7b19badd:ce0adb73:403:#2/1)): niov 0 sz 0 => now niov 3 sz 176 -1711462090.583450 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.583456 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #6 L(:1c1 16938.242944)) -1711462090.583462 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7417@2 1 -> 0 -1711462090.583465 [0] recv: INFOTS(1711462090.559945133) -1711462090.583471 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #7) -1711462090.583463 [0] tev: nn_xpack_send 176: 0x77041400139c:20 0x770404001648:52 0x653a1b479c90:104 [ udp/10.101.12.71:7413@2 ] -1711462090.583475 [0] recv: INFOTS(1711462090.573575071) -1711462090.583480 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #8) -1711462090.583484 [0] recv: INFOTS(1711462090.575483556) -1711462090.583472 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462090.583489 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #9) -1711462090.583494 [0] dq.builtin: a b -1711462090.583502 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1304 from udp/10.101.12.71:40473 -1711462090.583505 [0] dq.builtin: loc 0 = udp/10.101.12.71:7413@2 1 { +u .. } -1711462090.583507 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.583510 [0] dq.builtin: loc 1 = udp/10.101.12.71:7417@2 1 { .. +u } -1711462090.583511 [0] recv: INFOTS(1711462090.575762290) -1711462090.583481 [0] tev: traffic-xmit (1) 176 -1711462090.583517 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.583519 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #10 L(:1c1 16938.243010)) -1711462090.583515 [0] dq.builtin: loc 2 = udp/239.255.0.1:7401@2 1 { +1 +1 } -1711462090.583523 [0] recv: INFOTS(1711462090.576028935) -1711462090.583520 [0] gc: gc 0x77041c025520: deleting -1711462090.583521 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(control): niov 2 sz 64 => now niov 3 sz 92 -1711462090.583534 [0] dq.builtin: best = 2 -1711462090.583532 [0] gc: gc 0x77041c02c7c0: deleting -1711462090.583537 [0] dq.builtin: simple udp/239.255.0.1:7401@2 -1711462090.583528 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #11) -1711462090.583538 [0] tev: nn_xpack_send 92: 0x77041400139c:20 0x77040c002d38:44 0x770404001658:28 [ udp/10.101.12.71:7410@2 ] -1711462090.583555 [0] tev: traffic-xmit (1) 92 -1711462090.583547 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462090.583558 [0] tev: xpack_addmsg 0x770414001390 0x7704040016e0 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.583551 [0] recv: INFOTS(1711462090.576303013) -1711462090.583568 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #12) -1711462090.583572 [0] recv: INFOTS(1711462090.576567173) -1711462090.583565 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x7704040017c8:48 [ udp/10.101.12.71:7413@2 ] -1711462090.583577 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #2: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.1;">,topic_name="rq/static_transformer/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:904},adlink_entity_factory=1} -1711462090.583587 [0] tev: traffic-xmit (1) 68 -1711462090.583586 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #13) -1711462090.583601 [0] tev: xpack_addmsg 0x770414001390 0x7704040016e0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.583607 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 324 from udp/10.101.12.71:40473 -1711462090.583611 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:904 reliable volatile reader unnamed: (default).rq/static_transformer/describe_parametersRequest/rcl_interfaces::srv::dds_::DescribeParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.1;">,topic_name="rq/static_transformer/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.583610 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x7704040017c8:44 [ udp/10.101.12.71:7410@2 ] -1711462090.583619 [0] dq.builtin: => EVERYONE -1711462090.583620 [0] tev: traffic-xmit (1) 64 -1711462090.583614 [0] recv: INFOTS(1711462090.582707552) -1711462090.583628 [0] tev: xpack_addmsg 0x770414001390 0x7704040016e0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.583634 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #38 L(:1c1 16938.243117)) -1711462090.583626 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:904) scanning all wrs of topic rq/static_transformer/describe_parametersRequest -1711462090.583642 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1976 from udp/10.101.12.71:40473 -1711462090.583647 [0] recvMC: INFOTS(1711462090.583554164) -1711462090.583636 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x7704040017c8:44 [ udp/10.101.12.71:7410@2 ] -1711462090.583650 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #3: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.2;">,topic_name="rq/static_transformer/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:b04},adlink_entity_factory=1} -1711462090.583658 [0] tev: traffic-xmit (1) 64 -1711462090.583643 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1308 from udp/10.101.12.71:40473 -1711462090.583667 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.583653 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #40 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.583670 [0] recv: INFOTS(1711462090.576793854) -1711462090.583679 [0] recvMC: HEARTBEAT(F#46:40..40 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462090.583678 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:b04 reliable volatile reader unnamed: (default).rq/static_transformer/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.2;">,topic_name="rq/static_transformer/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.583685 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #14 L(:1c1 16938.243170)) -1711462090.583697 [0] recv: INFOTS(1711462090.577371768) -1711462090.583697 [0] dq.builtin: => EVERYONE -1711462090.583703 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #15) -1711462090.583705 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:b04) scanning all wrs of topic rq/static_transformer/get_parametersRequest -1711462090.583709 [0] recv: INFOTS(1711462090.577626247) -1711462090.583714 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #16) -1711462090.583718 [0] recv: INFOTS(1711462090.577884615) -1711462090.583720 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #4: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.3;">,topic_name="rq/static_transformer/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:d04},adlink_entity_factory=1} -1711462090.583725 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #17) -1711462090.583732 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 964 from udp/10.101.12.71:40473 -1711462090.583737 [0] recv: INFOTS(1711462090.582794562) -1711462090.583739 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:d04 reliable volatile reader unnamed: (default).rq/static_transformer/get_parameter_typesRequest/rcl_interfaces::srv::dds_::GetParameterTypes_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.3;">,topic_name="rq/static_transformer/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.583883 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #36 L(:1c1 16938.243240)) -1711462090.583888 [0] recv: INFOTS(1711462090.583082734) -1711462090.583892 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #39) -1711462090.583894 [0] dq.builtin: => EVERYONE -1711462090.583898 [0] recv: INFOTS(1711462090.583152869) -1711462090.583904 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:d04) scanning all wrs of topic rq/static_transformer/get_parameter_typesRequest -1711462090.583911 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #37) -1711462090.583915 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #5: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.4;">,topic_name="rq/static_transformer/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:f04},adlink_entity_factory=1} -1711462090.583920 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1272 from udp/10.101.12.71:40473 -1711462090.583920 [0] tev: xpack_addmsg 0x770414001390 0x7704040016e0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.583928 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.583934 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:f04 reliable volatile reader unnamed: (default).rq/static_transformer/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.4;">,topic_name="rq/static_transformer/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.583938 [0] recv: INFOTS(1711462090.578086523) -1711462090.583934 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x7704040017c8:44 [ udp/10.101.12.71:7410@2 ] -1711462090.583946 [0] tev: traffic-xmit (1) 64 -1711462090.583946 [0] dq.builtin: => EVERYONE -1711462090.583944 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #18 L(:1c1 16938.243431)) -1711462090.583955 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:f04) scanning all wrs of topic rq/static_transformer/list_parametersRequest -1711462090.583960 [0] recv: INFOTS(1711462090.578323981) -1711462090.583965 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #19) -1711462090.583967 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #6: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.5;">,topic_name="rq/static_transformer/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:1104},adlink_entity_factory=1} -1711462090.583968 [0] recv: INFOTS(1711462090.578575730) -1711462090.583980 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #20) -1711462090.583983 [0] recv: INFOTS(1711462090.578795007) -1711462090.583987 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #21) -1711462090.583987 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:1104 reliable volatile reader unnamed: (default).rq/static_transformer/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.5;">,topic_name="rq/static_transformer/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.583994 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 680 from udp/10.101.12.71:40473 -1711462090.583998 [0] recv: INFOTS(1711462090.583470556) -1711462090.584002 [0] dq.builtin: => EVERYONE -1711462090.584004 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #40 L(:1c1 16938.243501)) -1711462090.584006 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:1104) scanning all wrs of topic rq/static_transformer/set_parametersRequest -1711462090.584012 [0] recv: INFOTS(1711462090.583536280) -1711462090.584019 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #38) -1711462090.584022 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #7: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.6;">,topic_name="rq/static_transformer/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:1304},adlink_entity_factory=1} -1711462090.584026 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1280 from udp/10.101.12.71:40473 -1711462090.584031 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584034 [0] recv: INFOTS(1711462090.579038346) -1711462090.584039 [0] tev: xpack_addmsg 0x770414001390 0x7704040016e0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.584041 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #22 L(:1c1 16938.243535)) -1711462090.584041 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:1304 reliable volatile reader unnamed: (default).rq/static_transformer/set_parameters_atomicallyRequest/rcl_interfaces::srv::dds_::SetParametersAtomically_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.6;">,topic_name="rq/static_transformer/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.584044 [0] recv: INFOTS(1711462090.579338744) -1711462090.584052 [0] dq.builtin: => EVERYONE -1711462090.584056 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #23) -1711462090.584061 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:1304) scanning all wrs of topic rq/static_transformer/set_parameters_atomicallyRequest -1711462090.584046 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x7704040017c8:44 [ udp/10.101.12.71:7410@2 ] -1711462090.584070 [0] tev: traffic-xmit (1) 64 -1711462090.584066 [0] recv: INFOTS(1711462090.579582890) -1711462090.584067 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:200c2 #1: ST0 DCPSParticipantMessage/ParticipantMessageData:{110443d:bb7f10a5:18901533:1}:1<0> -1711462090.584077 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #24) -1711462090.584079 [0] dq.builtin: PMD ST0 pp 110443d:bb7f10a5:18901533 kind 1 data 1 -1711462090.584081 [0] recv: INFOTS(1711462090.579761832) -1711462090.584089 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #1: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584091 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #25) -1711462090.584097 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 360 from udp/10.101.12.71:40473 -1711462090.584104 [0] recv: INFOTS(1711462090.583967232) -1711462090.584100 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2024 from udp/10.101.12.71:40473 -1711462090.584109 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:403 reliable transient-local writer unnamed: (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584110 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #41 L(:1c1 16938.243607)) -1711462090.584115 [0] recvMC: INFOTS(1711462090.584035736) -1711462090.584125 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1344 from udp/10.101.12.71:40473 -1711462090.584125 [0] dq.builtin: => EVERYONE -1711462090.584129 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584134 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:403) scanning all rds of topic ros_discovery_info -1711462090.584135 [0] recv: INFOTS(1711462090.580027501) -1711462090.584141 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:504 init_acknack_count = 1 -1711462090.584147 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #26 L(:1c1 16938.243632)) -1711462090.584149 [0] dq.builtin: reader_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:403 rd 110aba1:7b19badd:ce0adb73:504) -1711462090.584151 [0] recv: INFOTS(1711462090.580241067) -1711462090.584153 [0] dq.builtin: proxy_writer_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:403 rd 110aba1:7b19badd:ce0adb73:504) - out-of-sync -1711462090.584155 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #27) -1711462090.584137 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #41 L(:1c1 16938.243618) 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: no readers) -1711462090.584158 [0] recv: INFOTS(1711462090.580434684) -1711462090.584165 [0] recvMC: HEARTBEAT(F#47:41..41 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:504 #41) 110aba1:7b19badd:ce0adb73:504@40) -1711462090.584168 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #28) -1711462090.584146 [0] tev: xpack_addmsg 0x770414001390 0x7704040016e0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.584172 [0] recv: INFOTS(1711462090.580705816) -1711462090.584164 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #2: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/rosout",type_name="rcl_interfaces::msg::dds_::Log_",durability=1,durability_service=0:0:1000:-1:-1:-1,reliability=1:9223372036854775807,lifespan=10000000000,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584176 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #29) -1711462090.584182 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#1:41/1:1 -1711462090.584185 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462090.584182 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 356 from udp/10.101.12.71:40473 -1711462090.584190 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x7704040017c8:44 [ udp/10.101.12.71:7410@2 ] -1711462090.584195 [0] recv: INFOTS(1711462090.584023477) -1711462090.584195 [0] tev: traffic-xmit (1) 64 -1711462090.584192 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:603 reliable transient-local writer unnamed: (default).rt/rosout/rcl_interfaces::msg::dds_::Log_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=0<>,topic_name="rt/rosout",type_name="rcl_interfaces::msg::dds_::Log_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1000:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=10000000000,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584205 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #39 L(:1c1 16938.243698)) -1711462090.584204 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.584212 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 1276 from udp/10.101.12.71:50807 -1711462090.584209 [0] dq.builtin: => EVERYONE -1711462090.584217 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x77040c002d38:48 [ udp/10.101.12.71:7415@2 ] -1711462090.584219 [0] tev: traffic-xmit (1) 68 -1711462090.584222 [0] tev: xpack_addmsg 0x770414001390 0x7704040016e0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.584219 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584225 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x7704040017c8:44 [ udp/10.101.12.71:7410@2 ] -1711462090.584226 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:603) scanning all rds of topic rt/rosout -1711462090.584227 [0] tev: traffic-xmit (1) 64 -1711462090.584231 [0] recv: INFOTS(1711462090.144360961) -1711462090.584235 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #3: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:703},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584236 [0] recv: DATA(110cd0d:56a27910:57318171:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #1 L(:1c1 16938.243723)) -1711462090.584243 [0] recv: INFOTS(1711462090.144914546) -1711462090.584247 [0] recv: DATA(110cd0d:56a27910:57318171:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #2) -1711462090.584250 [0] recv: INFOTS(1711462090.145397528) -1711462090.584253 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:703 reliable volatile writer unnamed: (default).rt/parameter_events/rcl_interfaces::msg::dds_::ParameterEvent_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=0<>,topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584256 [0] recv: DATA(110cd0d:56a27910:57318171:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #3) -1711462090.584259 [0] recv: INFOTS(1711462090.146281233) -1711462090.584262 [0] recv: DATA(110cd0d:56a27910:57318171:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #4) -1711462090.584266 [0] recv: INFOTS(1711462090.146691062) -1711462090.584263 [0] dq.builtin: => EVERYONE -1711462090.584270 [0] recv: DATA(110cd0d:56a27910:57318171:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #5) -1711462090.584275 [0] recvUC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2008 from udp/10.101.12.71:40473 -1711462090.584282 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1344 from udp/10.101.12.71:40473 -1711462090.584286 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584273 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:703) scanning all rds of topic rt/parameter_events -1711462090.584291 [0] recvUC: INFOTS(1711462090.584035736) -1711462090.584287 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584297 [0] recv: INFOTS(1711462090.580901717) -1711462090.584300 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #4: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1;">,topic_name="rr/map_manager/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584302 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #30 L(:1c1 16938.243790)) -1711462090.584305 [0] recv: INFOTS(1711462090.581210847) -1711462090.584309 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #31) -1711462090.584312 [0] recv: INFOTS(1711462090.581483917) -1711462090.584315 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #32) -1711462090.584317 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:803 reliable volatile writer unnamed: (default).rr/map_manager/describe_parametersReply/rcl_interfaces::srv::dds_::DescribeParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1;">,topic_name="rr/map_manager/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584318 [0] recv: INFOTS(1711462090.581783677) -1711462090.584323 [0] dq.builtin: => EVERYONE -1711462090.584326 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:803) scanning all rds of topic rr/map_manager/describe_parametersReply -1711462090.584326 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #33 msr_in_sync(110aba1:7b19badd:ce0adb73:4c7 out-of-sync to tlcatchup)) -1711462090.584335 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #5: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.2;">,topic_name="rr/map_manager/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584336 [0] recv: HEARTBEAT(#7:1..35 110d7b4:17c5b8c5:94bd0ff4:4c2 -> 110aba1:7b19badd:ce0adb73:4c7: 110aba1:7b19badd:ce0adb73:4c7@39(sync)) -1711462090.584347 [0] recv: HEARTBEAT(#3:1..0 110d7b4:17c5b8c5:94bd0ff4:300c3 -> 110aba1:7b19badd:ce0adb73:300c4: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:300c4 #0) msr_in_sync(110aba1:7b19badd:ce0adb73:300c4 out-of-sync to tlcatchup) 110aba1:7b19badd:ce0adb73:300c4@0(sync)) -1711462090.584353 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:a03 reliable volatile writer unnamed: (default).rr/map_manager/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.2;">,topic_name="rr/map_manager/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584354 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 68 from udp/10.101.12.71:40473 -1711462090.584364 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584365 [0] dq.builtin: => EVERYONE -1711462090.584371 [0] recvUC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 110aba1:7b19badd:ce0adb73:504 #41 msr_in_sync(110aba1:7b19badd:ce0adb73:504 out-of-sync to tlcatchup)data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #41: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3 =>110aba1:7b19badd:ce0adb73:504 -1711462090.584371 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:a03) scanning all rds of topic rr/map_manager/get_parametersReply -1711462090.584372 [0] recv: HEARTBEAT(#3:1..0 L(:1c1 16938.243867)110d7b4:17c5b8c5:94bd0ff4:301c3 -> 110aba1:7b19badd:ce0adb73:301c4: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:301c4 #0) msr_in_sync(110aba1:7b19badd:ce0adb73:301c4 out-of-sync to tlcatchup) 110aba1:7b19badd:ce0adb73:301c4@0(sync)) -1711462090.584385 [0] tev: xpack_addmsg 0x770414001390 0x7704040016e0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.584388 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 360 from udp/10.101.12.71:40473 -1711462090.584394 [0] recv: INFOTS(1711462090.584293877) -1711462090.584383 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #6: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.3;">,topic_name="rr/map_manager/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584399 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #42 L(:1c1 16938.243898)) -1711462090.584386 [0] recvUC: ) -1711462090.584405 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 1328 from udp/10.101.12.71:50807 -1711462090.584390 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2: F#2:40/0: -1711462090.584417 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462090.584409 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584415 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:c03 reliable volatile writer unnamed: (default).rr/map_manager/get_parameter_typesReply/rcl_interfaces::srv::dds_::GetParameterTypes_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.3;">,topic_name="rr/map_manager/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584425 [0] recv: INFOTS(1711462090.147101166) -1711462090.584422 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x7704040017c8:44 [ udp/10.101.12.71:7410@2 ] -1711462090.584431 [0] tev: traffic-xmit (1) 64 -1711462090.584410 [0] recvUC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 68 from udp/10.101.12.71:40473 -1711462090.584434 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.584431 [0] recv: DATA(110cd0d:56a27910:57318171:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #6 L(:1c1 16938.243913)) -1711462090.584438 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584445 [0] recv: INFOTS(1711462090.147462171) -1711462090.584439 [0] dq.builtin: => EVERYONE -1711462090.584453 [0] recv: DATA(110cd0d:56a27910:57318171:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #7) -1711462090.584458 [0] recv: INFOTS(1711462090.148077554) -1711462090.584442 [0] tev: acknack 110aba1:7b19badd:ce0adb73:300c4 -> 110d7b4:17c5b8c5:94bd0ff4:300c3: F#1:1/0: -1711462090.584463 [0] recv: DATA(110cd0d:56a27910:57318171:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #8) -1711462090.584456 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:c03) scanning all rds of topic rr/map_manager/get_parameter_typesReply -1711462090.584467 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:300c4 -> pwr 110d7b4:17c5b8c5:94bd0ff4:300c3) -1711462090.584472 [0] recv: INFOTS(1711462090.148485952) -1711462090.584441 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2072 from udp/10.101.12.71:40473 -1711462090.584477 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #7: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.4;">,topic_name="rr/map_manager/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584476 [0] tev: xpack_addmsg 0x770414001390 0x7704040016e0 0(control): niov 2 sz 64 => now niov 3 sz 92 -1711462090.584480 [0] recvUC: HEARTBEAT(#48:41..41 L(:1c1 16938.243941)110d7b4:17c5b8c5:94bd0ff4:403 -> 110aba1:7b19badd:ce0adb73:504: 110aba1:7b19badd:ce0adb73:504@41(sync)) -1711462090.584479 [0] recvMC: INFOTS(1711462090.584362470) -1711462090.584485 [0] recv: DATA(110cd0d:56a27910:57318171:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #9 msr_in_sync(110aba1:7b19badd:ce0adb73:3c7 out-of-sync to tlcatchup)) -1711462090.584501 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:e03 reliable volatile writer unnamed: (default).rr/map_manager/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.4;">,topic_name="rr/map_manager/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584483 [0] tev: acknack 110aba1:7b19badd:ce0adb73:301c4 -> 110d7b4:17c5b8c5:94bd0ff4:301c3: F#1:1/0: -1711462090.584510 [0] recv: HEARTBEAT(#8:1..9 110cd0d:56a27910:57318171:3c2 -> 110aba1:7b19badd:ce0adb73:3c7: 110aba1:7b19badd:ce0adb73:3c7@9(sync)) -1711462090.584515 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:301c4 -> pwr 110d7b4:17c5b8c5:94bd0ff4:301c3) -1711462090.584515 [0] dq.builtin: => EVERYONE -1711462090.584523 [0] recv: HEARTBEAT(#7:1..1 110cd0d:56a27910:57318171:200c2 -> 110aba1:7b19badd:ce0adb73:200c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:200c7 #1) 110aba1:7b19badd:ce0adb73:200c7@0) -1711462090.584526 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:e03) scanning all rds of topic rr/map_manager/list_parametersReply -1711462090.584522 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(control): niov 3 sz 92 => now niov 4 sz 120 -1711462090.584530 [0] recv: HEARTBEAT(#4:1..0 110cd0d:56a27910:57318171:300c3 -> 110aba1:7b19badd:ce0adb73:300c4: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:300c4 #0) msr_in_sync(110aba1:7b19badd:ce0adb73:300c4 out-of-sync to tlcatchup) 110aba1:7b19badd:ce0adb73:300c4@0(sync)) -1711462090.584532 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#2:42/0: -1711462090.584533 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462090.584535 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #8: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.5;">,topic_name="rr/map_manager/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584537 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 356 from udp/10.101.12.71:40473 -1711462090.584538 [0] tev: nn_xpack_send 120: 0x77041400139c:20 0x77040c002d38:44 0x7704040017d8:28 0x770404001658:28 [ udp/10.101.12.71:7414@2 ] -1711462090.584541 [0] recv: INFOTS(1711462090.584335539) -1711462090.584542 [0] tev: traffic-xmit (1) 120 -1711462090.584547 [0] tev: xpack_addmsg 0x770414001390 0x770404001390 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.584547 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #40 L(:1c1 16938.244044)) -1711462090.584549 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:56a27910:57318171:3c2: F#2:10/0: -1711462090.584544 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #42 L(:1c1 16938.243983) => EVERYONE -1711462090.584554 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110cd0d:56a27910:57318171:3c2) -1711462090.584552 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1003 reliable volatile writer unnamed: (default).rr/map_manager/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.5;">,topic_name="rr/map_manager/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584558 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404001478:44 [ udp/10.101.12.71:7415@2 ] -1711462090.584560 [0] tev: traffic-xmit (1) 64 -1711462090.584556 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 132 from udp/10.101.12.71:40473 -1711462090.584563 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.584567 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584566 [0] dq.builtin: => EVERYONE -1711462090.584571 [0] recv: INFOTS(1711462090.541742955) -1711462090.584574 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:1003) scanning all rds of topic rr/map_manager/set_parametersReply -1711462090.584569 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:56a27910:57318171:200c2: F#1:1/1:1 -1711462090.584578 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:200c2 -> 110aba1:7b19badd:ce0adb73:200c7 #1 L(:1c1 16938.244070) msr_in_sync(110aba1:7b19badd:ce0adb73:200c7 out-of-sync to tlcatchup)) -1711462090.584579 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110cd0d:56a27910:57318171:200c2) -1711462090.584583 [0] tev: xpack_addmsg 0x770414001390 0x770404001390 0(control): niov 2 sz 64 => now niov 3 sz 96 -1711462090.584583 [0] recv: HEARTBEAT(#7:1..1 110d7b4:17c5b8c5:94bd0ff4:200c2 -> 110aba1:7b19badd:ce0adb73:200c7: 110aba1:7b19badd:ce0adb73:200c7@1(sync)) -1711462090.584584 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #9: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.6;">,topic_name="rr/map_manager/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584585 [0] tev: acknack 110aba1:7b19badd:ce0adb73:300c4 -> 110cd0d:56a27910:57318171:300c3: F#1:1/0: -1711462090.584590 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 1400 from udp/10.101.12.71:50807 -1711462090.584592 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:300c4 -> pwr 110cd0d:56a27910:57318171:300c3) -1711462090.584594 [0] tev: xpack_addmsg 0x770414001390 0x7704040016e0 0(control): niov 3 sz 96 => now niov 4 sz 124 -1711462090.584596 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584598 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:403) suppressed, resched in 0.1 s (min-ack 2!, avail-seq 2, xmit 2) -1711462090.584602 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110d7b4:17c5b8c5:94bd0ff4:200c2: F#2:2/0: -1711462090.584600 [0] recv: INFOTS(1711462090.144576280) -1711462090.584605 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1203 reliable volatile writer unnamed: (default).rr/map_manager/set_parameters_atomicallyReply/rcl_interfaces::srv::dds_::SetParametersAtomically_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.6;">,topic_name="rr/map_manager/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584604 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462090.584609 [0] recv: DATA(110cd0d:56a27910:57318171:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #1 L(:1c1 16938.244099)) -1711462090.584614 [0] tev: nn_xpack_send 124: 0x77041400139c:20 0x77040c002d38:44 0x770404001488:32 0x7704040017d8:28 [ udp/10.101.12.71:7410@2 ] -1711462090.584617 [0] dq.builtin: => EVERYONE -1711462090.584620 [0] gc: gc 0x77041c037f70: not yet, shortsleep -1711462090.584618 [0] recv: INFOTS(1711462090.146372602) -1711462090.584620 [0] tev: traffic-xmit (1) 124 -1711462090.584633 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:1203) scanning all rds of topic rr/map_manager/set_parameters_atomicallyReply -1711462090.584634 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.584634 [0] recv: DATA(110cd0d:56a27910:57318171:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #2) -1711462090.584643 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404001648:44 [ udp/10.101.12.71:7414@2 ] -1711462090.584644 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #10: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.7;">,topic_name="rr/topological_map_manager2/get_topological_mapReply",type_name="std_srvs::srv::dds_::Trigger_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584648 [0] tev: traffic-xmit (1) 64 -1711462090.584647 [0] recv: INFOTS(1711462090.146779354) -1711462090.584634 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #42: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.584656 [0] recv: DATA(110cd0d:56a27910:57318171:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #3) -1711462090.584660 [0] recv: INFOTS(1711462090.147181889) -1711462090.584660 [0] recvMC: HEARTBEAT(F#49:42..42 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@42(sync)) -1711462090.584665 [0] recv: DATA(110cd0d:56a27910:57318171:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #4) -1711462090.584668 [0] recv: INFOTS(1711462090.147550622) -1711462090.584671 [0] recv: DATA(110cd0d:56a27910:57318171:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #5) -1711462090.584676 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1403 reliable volatile writer unnamed: (default).rr/topological_map_manager2/get_topological_mapReply/std_srvs::srv::dds_::Trigger_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.7;">,topic_name="rr/topological_map_manager2/get_topological_mapReply",type_name="std_srvs::srv::dds_::Trigger_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584678 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 1384 from udp/10.101.12.71:50807 -1711462090.584683 [0] dq.builtin: => EVERYONE -1711462090.584685 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584688 [0] recv: INFOTS(1711462090.148164095) -1711462090.584691 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:1403) scanning all rds of topic rr/topological_map_manager2/get_topological_mapReply -1711462090.584692 [0] recv: DATA(110cd0d:56a27910:57318171:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #6 L(:1c1 16938.244189)) -1711462090.584695 [0] recv: INFOTS(1711462090.148579939) -1711462090.584698 [0] recv: DATA(110cd0d:56a27910:57318171:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #7) -1711462090.584699 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #11: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.8;">,topic_name="rr/topological_map_manager2/get_tagged_nodesReply",type_name="topological_navigation_msgs::srv::dds_::GetTaggedNodes_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584701 [0] recv: INFOTS(1711462090.148933169) -1711462090.584709 [0] recv: DATA(110cd0d:56a27910:57318171:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #8) -1711462090.584711 [0] recv: INFOTS(1711462090.149246179) -1711462090.584715 [0] recv: DATA(110cd0d:56a27910:57318171:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #9) -1711462090.584717 [0] recv: INFOTS(1711462090.149509963) -1711462090.584719 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1603 reliable volatile writer unnamed: (default).rr/topological_map_manager2/get_tagged_nodesReply/topological_navigation_msgs::srv::dds_::GetTaggedNodes_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.8;">,topic_name="rr/topological_map_manager2/get_tagged_nodesReply",type_name="topological_navigation_msgs::srv::dds_::GetTaggedNodes_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584721 [0] recv: DATA(110cd0d:56a27910:57318171:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #10 msr_in_sync(110aba1:7b19badd:ce0adb73:4c7 out-of-sync to tlcatchup)) -1711462090.584723 [0] dq.builtin: => EVERYONE -1711462090.584727 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:1603) scanning all rds of topic rr/topological_map_manager2/get_tagged_nodesReply -1711462090.584729 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:56a27910:57318171:4c2: F#2:11/0: -1711462090.584727 [0] recv: HEARTBEAT(#8:1..10 110cd0d:56a27910:57318171:4c2 -> 110aba1:7b19badd:ce0adb73:4c7: 110aba1:7b19badd:ce0adb73:4c7@10(sync)) -1711462090.584731 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110cd0d:56a27910:57318171:4c2) -1711462090.584735 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #12: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.9;">,topic_name="rr/topological_map_manager2/get_tagsReply",type_name="topological_navigation_msgs::srv::dds_::GetTags_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584736 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.584743 [0] tev: acknack 110aba1:7b19badd:ce0adb73:301c4 -> 110cd0d:56a27910:57318171:301c3: F#1:1/0: -1711462090.584744 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:301c4 -> pwr 110cd0d:56a27910:57318171:301c3) -1711462090.584740 [0] recv: HEARTBEAT(#4:1..0 110cd0d:56a27910:57318171:301c3 -> 110aba1:7b19badd:ce0adb73:301c4: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:301c4 #0) msr_in_sync(110aba1:7b19badd:ce0adb73:301c4 out-of-sync to tlcatchup) 110aba1:7b19badd:ce0adb73:301c4@0(sync)) -1711462090.584746 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 2 sz 64 => now niov 3 sz 92 -1711462090.584750 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.584753 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1803 reliable volatile writer unnamed: (default).rr/topological_map_manager2/get_tagsReply/topological_navigation_msgs::srv::dds_::GetTags_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.9;">,topic_name="rr/topological_map_manager2/get_tagsReply",type_name="topological_navigation_msgs::srv::dds_::GetTags_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584754 [0] tev: nn_xpack_send 92: 0x77041400139c:20 0x770404001648:44 0x77040c002d48:28 [ udp/10.101.12.71:7410@2 ] -1711462090.584763 [0] tev: traffic-xmit (1) 92 -1711462090.584760 [0] recv: HEARTBEAT(#26:1..10 L(:1c1 16938.244189)110cd0d:e3b81b8d:1ccb65b1:3c2 -> 110aba1:7b19badd:ce0adb73:3c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:3c7 #10) 110aba1:7b19badd:ce0adb73:3c7@0) -1711462090.584766 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:e3b81b8d:1ccb65b1:3c2: F#1:1/10:1111111111 -1711462090.584768 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110cd0d:e3b81b8d:1ccb65b1:3c2) -1711462090.584766 [0] dq.builtin: => EVERYONE -1711462090.584770 [0] recv: HEARTBEAT(#25:1..10 110cd0d:e3b81b8d:1ccb65b1:4c2 -> 110aba1:7b19badd:ce0adb73:4c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:4c7 #10) 110aba1:7b19badd:ce0adb73:4c7@0) -1711462090.584773 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:1803) scanning all rds of topic rr/topological_map_manager2/get_tagsReply -1711462090.584770 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.584776 [0] recv: HEARTBEAT(#27:3..3 110cd0d:e3b81b8d:1ccb65b1:200c2 -> 110aba1:7b19badd:ce0adb73:200c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:200c7 #3) 110aba1:7b19badd:ce0adb73:200c7@2) -1711462090.584779 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:e3b81b8d:1ccb65b1:4c2: F#1:1/10:1111111111 -1711462090.584781 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110cd0d:e3b81b8d:1ccb65b1:4c2) -1711462090.584782 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 2 sz 68 => now niov 3 sz 100 -1711462090.584783 [0] recv: HEARTBEAT(#14:1..0 110cd0d:e3b81b8d:1ccb65b1:300c3 -> 110aba1:7b19badd:ce0adb73:300c4: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:300c4 #0) msr_in_sync(110aba1:7b19badd:ce0adb73:300c4 out-of-sync to tlcatchup) 110aba1:7b19badd:ce0adb73:300c4@0(sync)) -1711462090.584785 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2: F#1:3/1:1 -1711462090.584788 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110cd0d:e3b81b8d:1ccb65b1:200c2) -1711462090.584782 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #13: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.a;">,topic_name="rr/topological_map_manager2/get_node_tagsReply",type_name="topological_navigation_msgs::srv::dds_::GetNodeTags_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584788 [0] recv: HEARTBEAT(#14:1..0 110cd0d:e3b81b8d:1ccb65b1:301c3 -> 110aba1:7b19badd:ce0adb73:301c4: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:301c4 #0) msr_in_sync(110aba1:7b19badd:ce0adb73:301c4 out-of-sync to tlcatchup) 110aba1:7b19badd:ce0adb73:301c4@0(sync)) -1711462090.584790 [0] tev: xpack_addmsg 0x770414001390 0x770404001390 0(control): niov 3 sz 100 => now niov 4 sz 132 -1711462090.584798 [0] tev: acknack 110aba1:7b19badd:ce0adb73:300c4 -> 110cd0d:e3b81b8d:1ccb65b1:300c3: F#1:1/0: -1711462090.584800 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:300c4 -> pwr 110cd0d:e3b81b8d:1ccb65b1:300c3) -1711462090.584800 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 68 from udp/10.101.12.71:50807 -1711462090.584801 [0] tev: xpack_addmsg 0x770414001390 0x7704040016e0 0(control): niov 4 sz 132 => now niov 5 sz 160 -1711462090.584805 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584807 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1a03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/get_node_tagsReply/topological_navigation_msgs::srv::dds_::GetNodeTags_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.a;">,topic_name="rr/topological_map_manager2/get_node_tagsReply",type_name="topological_navigation_msgs::srv::dds_::GetNodeTags_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584807 [0] tev: acknack 110aba1:7b19badd:ce0adb73:301c4 -> 110cd0d:e3b81b8d:1ccb65b1:301c3: F#1:1/0: -1711462090.584812 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:301c4 -> pwr 110cd0d:e3b81b8d:1ccb65b1:301c3) -1711462090.584812 [0] recv: HEARTBEAT(#18:1..10 L(:1c1 16938.244308)110cd0d:79d6eeac:ea4a8907:3c2 -> 110aba1:7b19badd:ce0adb73:3c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:3c7 #10) 110aba1:7b19badd:ce0adb73:3c7@0) -1711462090.584812 [0] dq.builtin: => EVERYONE -1711462090.584813 [0] tev: xpack_addmsg 0x770414001390 0x77040c0032f0 0(control): niov 5 sz 160 => now niov 6 sz 188 -1711462090.584819 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 68 from udp/10.101.12.71:50807 -1711462090.584823 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584824 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:79d6eeac:ea4a8907:3c2: F#1:1/10:1111111111 -1711462090.584823 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:1a03) scanning all rds of topic rr/topological_map_manager2/get_node_tagsReply -1711462090.584826 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110cd0d:79d6eeac:ea4a8907:3c2) -1711462090.584828 [0] tev: xpack_addmsg 0x770414001390 0x77040c002fa0 0(control): niov 6 sz 188 => now niov 7 sz 236 -1711462090.584829 [0] recv: HEARTBEAT(#17:1..10 L(:1c1 16938.244326)110cd0d:79d6eeac:ea4a8907:4c2 -> 110aba1:7b19badd:ce0adb73:4c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:4c7 #10) 110aba1:7b19badd:ce0adb73:4c7@0) -1711462090.584831 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:79d6eeac:ea4a8907:4c2: F#1:1/10:1111111111 -1711462090.584840 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 68 from udp/10.101.12.71:50807 -1711462090.584840 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110cd0d:79d6eeac:ea4a8907:4c2) -1711462090.584845 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #14: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.b;">,topic_name="rr/topological_map_manager2/get_edges_between_nodesReply",type_name="topological_navigation_msgs::srv::dds_::GetEdgesBetweenNodes_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584847 [0] tev: xpack_addmsg 0x770414001390 0x77040c002dd0 0(control): niov 7 sz 236 => now niov 8 sz 268 -1711462090.584844 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584852 [0] tev: nn_xpack_send 268: 0x77041400139c:20 0x770404001648:48 0x77040c002d48:32 0x770404001488:32 0x7704040017d8:28 0x77040c0033e8:28 0x77040c003088:48 0x77040c002ec8:32 [ udp/10.101.12.71:7410@2 ] -1711462090.584853 [0] tev: traffic-xmit (1) 268 -1711462090.584855 [0] recv: HEARTBEAT(#19:3..3 L(:1c1 16938.244347)110cd0d:79d6eeac:ea4a8907:200c2 -> 110aba1:7b19badd:ce0adb73:200c7: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:200c7 #3) 110aba1:7b19badd:ce0adb73:200c7@2) -1711462090.584855 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2: F#1:3/1:1 -1711462090.584860 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110cd0d:79d6eeac:ea4a8907:200c2) -1711462090.584861 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/get_edges_between_nodesReply/topological_navigation_msgs::srv::dds_::GetEdgesBetweenNodes_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.b;">,topic_name="rr/topological_map_manager2/get_edges_between_nodesReply",type_name="topological_navigation_msgs::srv::dds_::GetEdgesBetweenNodes_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584862 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.584862 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 68 from udp/10.101.12.71:50807 -1711462090.584868 [0] dq.builtin: => EVERYONE -1711462090.584872 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:1c03) scanning all rds of topic rr/topological_map_manager2/get_edges_between_nodesReply -1711462090.584869 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x770404001648:48 [ udp/10.101.12.71:7410@2 ] -1711462090.584876 [0] tev: traffic-xmit (1) 68 -1711462090.584874 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584881 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #15: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.c;">,topic_name="rr/topological_map_manager2/write_topological_mapReply",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584886 [0] recv: HEARTBEAT(#9:1..0 L(:1c1 16938.244378)110cd0d:79d6eeac:ea4a8907:300c3 -> 110aba1:7b19badd:ce0adb73:300c4: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:300c4 #0) msr_in_sync(110aba1:7b19badd:ce0adb73:300c4 out-of-sync to tlcatchup) 110aba1:7b19badd:ce0adb73:300c4@0(sync)) -1711462090.584888 [0] tev: acknack 110aba1:7b19badd:ce0adb73:300c4 -> 110cd0d:79d6eeac:ea4a8907:300c3: F#1:1/0: -1711462090.584893 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 68 from udp/10.101.12.71:50807 -1711462090.584894 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:300c4 -> pwr 110cd0d:79d6eeac:ea4a8907:300c3) -1711462090.584899 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.584900 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1e03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/write_topological_mapReply/topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.c;">,topic_name="rr/topological_map_manager2/write_topological_mapReply",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584897 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584902 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404001648:44 [ udp/10.101.12.71:7410@2 ] -1711462090.584904 [0] tev: traffic-xmit (1) 64 -1711462090.584909 [0] dq.builtin: => EVERYONE -1711462090.584912 [0] recv: HEARTBEAT(#9:1..0 L(:1c1 16938.244401)110cd0d:79d6eeac:ea4a8907:301c3 -> 110aba1:7b19badd:ce0adb73:301c4: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:301c4 #0) msr_in_sync(110aba1:7b19badd:ce0adb73:301c4 out-of-sync to tlcatchup) 110aba1:7b19badd:ce0adb73:301c4@0(sync)) -1711462090.584913 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:1e03) scanning all rds of topic rr/topological_map_manager2/write_topological_mapReply -1711462090.584920 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 132 from udp/10.101.12.71:50807 -1711462090.584914 [0] tev: acknack 110aba1:7b19badd:ce0adb73:301c4 -> 110cd0d:79d6eeac:ea4a8907:301c3: F#1:1/0: -1711462090.584926 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #16: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.d;">,topic_name="rr/topological_map_manager2/switch_topological_mapReply",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584924 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584927 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:301c4 -> pwr 110cd0d:79d6eeac:ea4a8907:301c3) -1711462090.584933 [0] recv: INFOTS(1711462090.143586504) -1711462090.584934 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.584940 [0] recv: DATA(110cd0d:56a27910:57318171:200c2 -> 110aba1:7b19badd:ce0adb73:200c7 #1 L(:1c1 16938.244428) msr_in_sync(110aba1:7b19badd:ce0adb73:200c7 out-of-sync to tlcatchup)) -1711462090.584941 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404001648:44 [ udp/10.101.12.71:7410@2 ] -1711462090.584948 [0] tev: traffic-xmit (1) 64 -1711462090.584951 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:56a27910:57318171:200c2: F#2:2/0: -1711462090.584953 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110cd0d:56a27910:57318171:200c2) -1711462090.584955 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.584946 [0] recv: HEARTBEAT(#8:1..1 110cd0d:56a27910:57318171:200c2 -> 110aba1:7b19badd:ce0adb73:200c7: 110aba1:7b19badd:ce0adb73:200c7@1(sync)) -1711462090.584944 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2003 reliable volatile writer unnamed: (default).rr/topological_map_manager2/switch_topological_mapReply/topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.d;">,topic_name="rr/topological_map_manager2/switch_topological_mapReply",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584964 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 1340 from udp/10.101.12.71:50807 -1711462090.584959 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404001648:44 [ udp/10.101.12.71:7410@2 ] -1711462090.584968 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.584968 [0] dq.builtin: => EVERYONE -1711462090.584973 [0] recv: INFOTS(1711462067.906161391) -1711462090.584975 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2003) scanning all rds of topic rr/topological_map_manager2/switch_topological_mapReply -1711462090.584978 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #1 L(:1c1 16938.244472)) -1711462090.584970 [0] tev: traffic-xmit (1) 64 -1711462090.584982 [0] recv: INFOTS(1711462067.920967451) -1711462090.584984 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #17: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.e;">,topic_name="rr/topological_map_manager2/add_topological_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddNode_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584987 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #3) -1711462090.584990 [0] recv: INFOTS(1711462067.921934444) -1711462090.584994 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #4) -1711462090.584997 [0] recv: INFOTS(1711462067.922332717) -1711462090.584999 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2203 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_topological_nodeReply/topological_navigation_msgs::srv::dds_::AddNode_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.e;">,topic_name="rr/topological_map_manager2/add_topological_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddNode_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585001 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #5) -1711462090.585008 [0] recv: INFOTS(1711462067.922693393) -1711462090.585010 [0] dq.builtin: => EVERYONE -1711462090.585012 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #6) -1711462090.585014 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2203) scanning all rds of topic rr/topological_map_manager2/add_topological_nodeReply -1711462090.585022 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #18: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.f;">,topic_name="rr/topological_map_manager2/remove_topological_nodeReply",type_name="topological_navigation_msgs::srv::dds_::RmvNode_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585038 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2403 reliable volatile writer unnamed: (default).rr/topological_map_manager2/remove_topological_nodeReply/topological_navigation_msgs::srv::dds_::RmvNode_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.f;">,topic_name="rr/topological_map_manager2/remove_topological_nodeReply",type_name="topological_navigation_msgs::srv::dds_::RmvNode_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585043 [0] dq.builtin: => EVERYONE -1711462090.585047 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2403) scanning all rds of topic rr/topological_map_manager2/remove_topological_nodeReply -1711462090.585056 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #19: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.10;">,topic_name="rr/topological_map_manager2/add_edges_between_nodesReply",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585062 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 1180 from udp/10.101.12.71:50807 -1711462090.585066 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.585069 [0] recv: INFOTS(1711462067.923065472) -1711462090.585072 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2603 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_edges_between_nodesReply/topological_navigation_msgs::srv::dds_::AddEdge_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.10;">,topic_name="rr/topological_map_manager2/add_edges_between_nodesReply",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585074 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #7 L(:1c1 16938.244570)) -1711462090.585081 [0] recv: INFOTS(1711462067.923472842) -1711462090.585082 [0] dq.builtin: => EVERYONE -1711462090.585085 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #8) -1711462090.585089 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2603) scanning all rds of topic rr/topological_map_manager2/add_edges_between_nodesReply -1711462090.585092 [0] recv: INFOTS(1711462067.923854920) -1711462090.585099 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #9) -1711462090.585101 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #20: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.11;">,topic_name="rr/topological_map_manager2/remove_edgeReply",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585104 [0] recv: GAP(2..3/8 110cd0d:e3b81b8d:1ccb65b1:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 msr_in_sync(110aba1:7b19badd:ce0adb73:3c7 out-of-sync to tlcatchup)) -1711462090.585110 [0] recv: INFOTS(1711462067.906312171) -1711462090.585114 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #1) -1711462090.585118 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2803 reliable volatile writer unnamed: (default).rr/topological_map_manager2/remove_edgeReply/topological_navigation_msgs::srv::dds_::AddEdge_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.11;">,topic_name="rr/topological_map_manager2/remove_edgeReply",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585120 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 1188 from udp/10.101.12.71:50807 -1711462090.585127 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.585131 [0] recv: INFOTS(1711462067.922001214) -1711462090.585128 [0] dq.builtin: => EVERYONE -1711462090.585136 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #2 L(:1c1 16938.244630)) -1711462090.585140 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2803) scanning all rds of topic rr/topological_map_manager2/remove_edgeReply -1711462090.585143 [0] recv: INFOTS(1711462067.922399199) -1711462090.585152 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #21: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.12;">,topic_name="rr/topological_map_manager2/add_content_to_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddContent_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585155 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #3) -1711462090.585158 [0] recv: INFOTS(1711462067.922751849) -1711462090.585161 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #4) -1711462090.585164 [0] recv: INFOTS(1711462067.923122963) -1711462090.585168 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #5) -1711462090.585169 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2a03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_content_to_nodeReply/topological_navigation_msgs::srv::dds_::AddContent_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.12;">,topic_name="rr/topological_map_manager2/add_content_to_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddContent_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585175 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 1264 from udp/10.101.12.71:50807 -1711462090.585177 [0] dq.builtin: => EVERYONE -1711462090.585178 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.585180 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2a03) scanning all rds of topic rr/topological_map_manager2/add_content_to_nodeReply -1711462090.585181 [0] recv: INFOTS(1711462067.923536312) -1711462090.585189 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #22: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.13;">,topic_name="rr/topological_map_manager2/update_node_nameReply",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeName_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585190 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #6 L(:1c1 16938.244681)) -1711462090.585197 [0] recv: INFOTS(1711462067.923914544) -1711462090.585201 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #7) -1711462090.585203 [0] recv: INFOTS(1711462067.925434417) -1711462090.585206 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2c03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_node_nameReply/topological_navigation_msgs::srv::dds_::UpdateNodeName_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.13;">,topic_name="rr/topological_map_manager2/update_node_nameReply",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeName_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585206 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #8) -1711462090.585213 [0] recv: INFOTS(1711462067.925734727) -1711462090.585214 [0] dq.builtin: => EVERYONE -1711462090.585217 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #9) -1711462090.585220 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2c03) scanning all rds of topic rr/topological_map_manager2/update_node_nameReply -1711462090.585223 [0] recv: INFOTS(1711462067.925980789) -1711462090.585230 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #10 msr_in_sync(110aba1:7b19badd:ce0adb73:4c7 out-of-sync to tlcatchup)) -1711462090.585232 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #23: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.14;">,topic_name="rr/topological_map_manager2/update_node_poseReply",type_name="topological_navigation_msgs::srv::dds_::AddNode_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585237 [0] recv: HEARTBEAT(#27:1..10 110cd0d:e3b81b8d:1ccb65b1:3c2 -> 110aba1:7b19badd:ce0adb73:3c7: 110aba1:7b19badd:ce0adb73:3c7@10(sync)) -1711462090.585239 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:e3b81b8d:1ccb65b1:3c2: F#2:11/0: -1711462090.585243 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110cd0d:e3b81b8d:1ccb65b1:3c2) -1711462090.585241 [0] recv: INFOTS(1711462083.905805667) -1711462090.585245 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.585250 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:200c2 -> 110aba1:7b19badd:ce0adb73:200c7 #3 msr_in_sync(110aba1:7b19badd:ce0adb73:200c7 out-of-sync to tlcatchup)) -1711462090.585252 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2e03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_node_poseReply/topological_navigation_msgs::srv::dds_::AddNode_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.14;">,topic_name="rr/topological_map_manager2/update_node_poseReply",type_name="topological_navigation_msgs::srv::dds_::AddNode_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585255 [0] recv: HEARTBEAT(#26:1..10 110cd0d:e3b81b8d:1ccb65b1:4c2 -> 110aba1:7b19badd:ce0adb73:4c7: 110aba1:7b19badd:ce0adb73:4c7@10(sync)) -1711462090.585258 [0] dq.builtin: => EVERYONE -1711462090.585253 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404001648:44 [ udp/10.101.12.71:7410@2 ] -1711462090.585262 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2e03) scanning all rds of topic rr/topological_map_manager2/update_node_poseReply -1711462090.585265 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 1328 from udp/10.101.12.71:50807 -1711462090.585263 [0] tev: traffic-xmit (1) 64 -1711462090.585270 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.585271 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:e3b81b8d:1ccb65b1:4c2: F#2:11/0: -1711462090.585273 [0] recv: INFOTS(1711462069.653857118) -1711462090.585271 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #24: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.15;">,topic_name="rr/topological_map_manager2/update_node_toleranceReply",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeTolerance_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585275 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110cd0d:e3b81b8d:1ccb65b1:4c2) -1711462090.585280 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #1 L(:1c1 16938.244773)) -1711462090.585281 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.585284 [0] recv: INFOTS(1711462069.654474792) -1711462090.585288 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404001648:44 [ udp/10.101.12.71:7410@2 ] -1711462090.585292 [0] tev: traffic-xmit (1) 64 -1711462090.585292 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #3) -1711462090.585297 [0] recv: INFOTS(1711462069.655041546) -1711462090.585292 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3003 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_node_toleranceReply/topological_navigation_msgs::srv::dds_::UpdateNodeTolerance_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.15;">,topic_name="rr/topological_map_manager2/update_node_toleranceReply",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeTolerance_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585303 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #4) -1711462090.585305 [0] recv: INFOTS(1711462069.655283557) -1711462090.585308 [0] dq.builtin: => EVERYONE -1711462090.585310 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #5) -1711462090.585312 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3003) scanning all rds of topic rr/topological_map_manager2/update_node_toleranceReply -1711462090.585312 [0] recv: INFOTS(1711462069.655486748) -1711462090.585320 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #6) -1711462090.585321 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #25: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.16;">,topic_name="rr/topological_map_manager2/modify_node_tagsReply",type_name="topological_navigation_msgs::srv::dds_::ModifyTag_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585327 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 1248 from udp/10.101.12.71:50807 -1711462090.585330 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.585332 [0] recv: INFOTS(1711462069.655692789) -1711462090.585338 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #7 L(:1c1 16938.244834)) -1711462090.585341 [0] recv: INFOTS(1711462069.655921271) -1711462090.585342 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3203 reliable volatile writer unnamed: (default).rr/topological_map_manager2/modify_node_tagsReply/topological_navigation_msgs::srv::dds_::ModifyTag_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.16;">,topic_name="rr/topological_map_manager2/modify_node_tagsReply",type_name="topological_navigation_msgs::srv::dds_::ModifyTag_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585344 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #8) -1711462090.585347 [0] dq.builtin: => EVERYONE -1711462090.585347 [0] recv: INFOTS(1711462069.656160198) -1711462090.585354 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3203) scanning all rds of topic rr/topological_map_manager2/modify_node_tagsReply -1711462090.585355 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 #9) -1711462090.585360 [0] recv: GAP(2..3/8 110cd0d:79d6eeac:ea4a8907:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 msr_in_sync(110aba1:7b19badd:ce0adb73:3c7 out-of-sync to tlcatchup)) -1711462090.585362 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #26: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.17;">,topic_name="rr/topological_map_manager2/add_tag_to_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddTag_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585363 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.585373 [0] recv: HEARTBEAT(#28:3..3 L(:1c1 16938.244834)110cd0d:e3b81b8d:1ccb65b1:200c2 -> 110aba1:7b19badd:ce0adb73:200c7: 110aba1:7b19badd:ce0adb73:200c7@3(sync)) -1711462090.585374 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2: F#2:4/0: -1711462090.585376 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462090.585376 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110cd0d:e3b81b8d:1ccb65b1:200c2) -1711462090.585379 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3403 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_tag_to_nodeReply/topological_navigation_msgs::srv::dds_::AddTag_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.17;">,topic_name="rr/topological_map_manager2/add_tag_to_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddTag_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585381 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.585379 [0] recv: INFOTS(1711462069.653934558) -1711462090.585384 [0] dq.builtin: => EVERYONE -1711462090.585386 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #1) -1711462090.585385 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404001648:44 [ udp/10.101.12.71:7410@2 ] -1711462090.585392 [0] tev: traffic-xmit (1) 64 -1711462090.585394 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 1452 from udp/10.101.12.71:50807 -1711462090.585388 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3403) scanning all rds of topic rr/topological_map_manager2/add_tag_to_nodeReply -1711462090.585398 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.585403 [0] recv: INFOTS(1711462069.655092444) -1711462090.585407 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #27: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.18;">,topic_name="rr/topological_map_manager2/rm_tag_from_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddTag_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585408 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #2 L(:1c1 16938.244901)) -1711462090.585414 [0] recv: INFOTS(1711462069.655331767) -1711462090.585418 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #3) -1711462090.585421 [0] recv: INFOTS(1711462069.655532459) -1711462090.585424 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #4) -1711462090.585425 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3603 reliable volatile writer unnamed: (default).rr/topological_map_manager2/rm_tag_from_nodeReply/topological_navigation_msgs::srv::dds_::AddTag_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.18;">,topic_name="rr/topological_map_manager2/rm_tag_from_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddTag_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585426 [0] recv: INFOTS(1711462069.655736184) -1711462090.585434 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #5) -1711462090.585438 [0] recv: INFOTS(1711462069.655967082) -1711462090.585435 [0] dq.builtin: => EVERYONE -1711462090.585444 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #6) -1711462090.585445 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3603) scanning all rds of topic rr/topological_map_manager2/rm_tag_from_nodeReply -1711462090.585451 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 1008 from udp/10.101.12.71:50807 -1711462090.585454 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.585457 [0] recv: INFOTS(1711462069.656205405) -1711462090.585457 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #28: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.19;">,topic_name="rr/topological_map_manager2/add_param_to_edge_configReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585461 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #7 L(:1c1 16938.244958)) -1711462090.585464 [0] recv: INFOTS(1711462069.656430660) -1711462090.585467 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #8) -1711462090.585470 [0] recv: INFOTS(1711462069.656644590) -1711462090.585473 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #9) -1711462090.585475 [0] recv: INFOTS(1711462069.656823224) -1711462090.585476 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3803 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_param_to_edge_configReply/topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.19;">,topic_name="rr/topological_map_manager2/add_param_to_edge_configReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585480 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 #10 msr_in_sync(110aba1:7b19badd:ce0adb73:4c7 out-of-sync to tlcatchup)) -1711462090.585484 [0] dq.builtin: => EVERYONE -1711462090.585486 [0] recv: HEARTBEAT(#19:1..10 110cd0d:79d6eeac:ea4a8907:3c2 -> 110aba1:7b19badd:ce0adb73:3c7: 110aba1:7b19badd:ce0adb73:3c7@10(sync)) -1711462090.585487 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3803) scanning all rds of topic rr/topological_map_manager2/add_param_to_edge_configReply -1711462090.585491 [0] recv: HEARTBEAT(#18:1..10 110cd0d:79d6eeac:ea4a8907:4c2 -> 110aba1:7b19badd:ce0adb73:4c7: 110aba1:7b19badd:ce0adb73:4c7@10(sync)) -1711462090.585488 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:79d6eeac:ea4a8907:3c2: F#2:11/0: -1711462090.585497 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110cd0d:79d6eeac:ea4a8907:3c2) -1711462090.585498 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.585499 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #29: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1a;">,topic_name="rr/topological_map_manager2/rm_param_from_edge_configReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585495 [0] recv: INFOTS(1711462085.654169463) -1711462090.585501 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:79d6eeac:ea4a8907:4c2: F#2:11/0: -1711462090.585506 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110cd0d:79d6eeac:ea4a8907:4c2) -1711462090.585507 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:200c2 -> 110aba1:7b19badd:ce0adb73:200c7 #3 msr_in_sync(110aba1:7b19badd:ce0adb73:200c7 out-of-sync to tlcatchup)) -1711462090.585508 [0] tev: xpack_addmsg 0x770414001390 0x77040c002c50 0(control): niov 2 sz 64 => now niov 3 sz 92 -1711462090.585513 [0] recv: HEARTBEAT(#20:3..3 110cd0d:79d6eeac:ea4a8907:200c2 -> 110aba1:7b19badd:ce0adb73:200c7: 110aba1:7b19badd:ce0adb73:200c7@3(sync)) -1711462090.585514 [0] tev: nn_xpack_send 92: 0x77041400139c:20 0x770404001648:44 0x77040c002d48:28 [ udp/10.101.12.71:7410@2 ] -1711462090.585517 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3a03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/rm_param_from_edge_configReply/topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1a;">,topic_name="rr/topological_map_manager2/rm_param_from_edge_configReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585517 [0] tev: traffic-xmit (1) 92 -1711462090.585522 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2: F#2:4/0: -1711462090.585524 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110cd0d:79d6eeac:ea4a8907:200c2) -1711462090.585526 [0] tev: xpack_addmsg 0x770414001390 0x770404001560 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.585526 [0] dq.builtin: => EVERYONE -1711462090.585530 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404001648:44 [ udp/10.101.12.71:7410@2 ] -1711462090.585531 [0] tev: traffic-xmit (1) 64 -1711462090.585532 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3a03) scanning all rds of topic rr/topological_map_manager2/rm_param_from_edge_configReply -1711462090.585540 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #30: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1b;">,topic_name="rr/topological_map_manager2/rm_param_from_topological_mapReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585557 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3c03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/rm_param_from_topological_mapReply/topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1b;">,topic_name="rr/topological_map_manager2/rm_param_from_topological_mapReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585564 [0] dq.builtin: => EVERYONE -1711462090.585567 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3c03) scanning all rds of topic rr/topological_map_manager2/rm_param_from_topological_mapReply -1711462090.585575 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #31: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1c;">,topic_name="rr/topological_map_manager2/update_node_restrictionsReply",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585590 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3e03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_node_restrictionsReply/topological_navigation_msgs::srv::dds_::UpdateRestrictions_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1c;">,topic_name="rr/topological_map_manager2/update_node_restrictionsReply",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585595 [0] dq.builtin: => EVERYONE -1711462090.585598 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3e03) scanning all rds of topic rr/topological_map_manager2/update_node_restrictionsReply -1711462090.585605 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #32: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1d;">,topic_name="rr/topological_map_manager2/update_edge_restrictionsReply",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585621 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4003 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_edge_restrictionsReply/topological_navigation_msgs::srv::dds_::UpdateRestrictions_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1d;">,topic_name="rr/topological_map_manager2/update_edge_restrictionsReply",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585628 [0] dq.builtin: => EVERYONE -1711462090.585632 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4003) scanning all rds of topic rr/topological_map_manager2/update_edge_restrictionsReply -1711462090.585640 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #33: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1e;">,topic_name="rr/topological_map_manager2/update_edgeReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdge_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585656 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4203 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_edgeReply/topological_navigation_msgs::srv::dds_::UpdateEdge_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1e;">,topic_name="rr/topological_map_manager2/update_edgeReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdge_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585661 [0] dq.builtin: => EVERYONE -1711462090.585664 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4203) scanning all rds of topic rr/topological_map_manager2/update_edgeReply -1711462090.585671 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #34: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1f;">,topic_name="rr/topological_map_manager2/update_actionReply",type_name="topological_navigation_msgs::srv::dds_::UpdateAction_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585683 [0] gc: gc 0x77041c037f70: deleting -1711462090.585687 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4403 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_actionReply/topological_navigation_msgs::srv::dds_::UpdateAction_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1f;">,topic_name="rr/topological_map_manager2/update_actionReply",type_name="topological_navigation_msgs::srv::dds_::UpdateAction_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585699 [0] dq.builtin: => EVERYONE -1711462090.585702 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4403) scanning all rds of topic rr/topological_map_manager2/update_actionReply -1711462090.585710 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #35: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.20;">,topic_name="rr/topological_map_manager2/add_datumReply",type_name="topological_navigation_msgs::srv::dds_::AddDatum_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585726 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4603 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_datumReply/topological_navigation_msgs::srv::dds_::AddDatum_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.20;">,topic_name="rr/topological_map_manager2/add_datumReply",type_name="topological_navigation_msgs::srv::dds_::AddDatum_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585731 [0] dq.builtin: => EVERYONE -1711462090.585734 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4603) scanning all rds of topic rr/topological_map_manager2/add_datumReply -1711462090.585742 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #36: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.21;">,topic_name="rr/topological_map_manager2/update_fail_policyReply",type_name="topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585746 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4803 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_fail_policyReply/topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Response_ p(open) known -1711462090.585760 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.21;">,topic_name="rr/topological_map_manager2/update_fail_policyReply",type_name="topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585770 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #37: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.22;">,topic_name="rr/topological_map_manager2/set_node_influence_zoneReply",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZone_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585785 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4a03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/set_node_influence_zoneReply/topological_navigation_msgs::srv::dds_::SetInfluenceZone_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.22;">,topic_name="rr/topological_map_manager2/set_node_influence_zoneReply",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZone_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.585793 [0] dq.builtin: => EVERYONE -1711462090.585796 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4a03) scanning all rds of topic rr/topological_map_manager2/set_node_influence_zoneReply -1711462090.585803 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #35: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.22;">,topic_name="rq/topological_map_manager2/set_node_influence_zoneRequest",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZone_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4b04},adlink_entity_factory=1} -1711462090.585820 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4b04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/set_node_influence_zoneRequest/topological_navigation_msgs::srv::dds_::SetInfluenceZone_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.22;">,topic_name="rq/topological_map_manager2/set_node_influence_zoneRequest",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZone_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.585826 [0] dq.builtin: => EVERYONE -1711462090.585829 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4b04) scanning all wrs of topic rq/topological_map_manager2/set_node_influence_zoneRequest -1711462090.585837 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #1: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,history=1:-1,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:504},adlink_entity_factory=1} -1711462090.585854 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:504 reliable transient-local reader unnamed: (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=1:-1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.585861 [0] dq.builtin: => EVERYONE -1711462090.585864 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:504) scanning all wrs of topic ros_discovery_info -1711462090.585868 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:403 prd 110d7b4:17c5b8c5:94bd0ff4:504) -1711462090.585871 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:403 prd 110d7b4:17c5b8c5:94bd0ff4:504) - ack seq 2 -1711462090.585878 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7415@2 udp/10.101.12.71:7417@2 -1711462090.585880 [0] dq.builtin: reduced nlocs=4 -1711462090.585883 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.585886 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7413@2 0 -> 0 -1711462090.585889 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7401@2 3 -> 8 -1711462090.585891 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.585894 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7417@2 2 -> 0 -1711462090.585897 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7401@2 3 -> 8 -1711462090.585899 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.585902 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7415@2 1 -> 0 -1711462090.585904 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7401@2 3 -> 8 -1711462090.585908 [0] dq.builtin: a b c -1711462090.585912 [0] dq.builtin: loc 0 = udp/10.101.12.71:7413@2 1 { +u .. .. } -1711462090.585915 [0] dq.builtin: loc 1 = udp/10.101.12.71:7415@2 1 { .. .. +u } -1711462090.585918 [0] dq.builtin: loc 2 = udp/10.101.12.71:7417@2 1 { .. +u .. } -1711462090.585923 [0] dq.builtin: loc 3 = udp/239.255.0.1:7401@2 0 { +1 +1 +1 } -1711462090.585924 [0] dq.builtin: best = 3 -1711462090.585927 [0] dq.builtin: simple udp/239.255.0.1:7401@2 -1711462090.585932 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462090.585941 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #2: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1;">,topic_name="rq/map_manager/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:904},adlink_entity_factory=1} -1711462090.585959 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:904 reliable volatile reader unnamed: (default).rq/map_manager/describe_parametersRequest/rcl_interfaces::srv::dds_::DescribeParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1;">,topic_name="rq/map_manager/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.585965 [0] dq.builtin: => EVERYONE -1711462090.585971 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:904) scanning all wrs of topic rq/map_manager/describe_parametersRequest -1711462090.585979 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #3: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.2;">,topic_name="rq/map_manager/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:b04},adlink_entity_factory=1} -1711462090.585996 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:b04 reliable volatile reader unnamed: (default).rq/map_manager/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.2;">,topic_name="rq/map_manager/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586001 [0] dq.builtin: => EVERYONE -1711462090.586004 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:b04) scanning all wrs of topic rq/map_manager/get_parametersRequest -1711462090.586011 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #4: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.3;">,topic_name="rq/map_manager/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:d04},adlink_entity_factory=1} -1711462090.586027 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:d04 reliable volatile reader unnamed: (default).rq/map_manager/get_parameter_typesRequest/rcl_interfaces::srv::dds_::GetParameterTypes_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.3;">,topic_name="rq/map_manager/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586032 [0] dq.builtin: => EVERYONE -1711462090.586035 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:d04) scanning all wrs of topic rq/map_manager/get_parameter_typesRequest -1711462090.586043 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #5: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.4;">,topic_name="rq/map_manager/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:f04},adlink_entity_factory=1} -1711462090.586059 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:f04 reliable volatile reader unnamed: (default).rq/map_manager/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.4;">,topic_name="rq/map_manager/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586066 [0] dq.builtin: => EVERYONE -1711462090.586069 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:f04) scanning all wrs of topic rq/map_manager/list_parametersRequest -1711462090.586077 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #6: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.5;">,topic_name="rq/map_manager/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1104},adlink_entity_factory=1} -1711462090.586094 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1104 reliable volatile reader unnamed: (default).rq/map_manager/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.5;">,topic_name="rq/map_manager/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586099 [0] dq.builtin: => EVERYONE -1711462090.586102 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:1104) scanning all wrs of topic rq/map_manager/set_parametersRequest -1711462090.586110 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #7: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.6;">,topic_name="rq/map_manager/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1304},adlink_entity_factory=1} -1711462090.586127 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1304 reliable volatile reader unnamed: (default).rq/map_manager/set_parameters_atomicallyRequest/rcl_interfaces::srv::dds_::SetParametersAtomically_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.6;">,topic_name="rq/map_manager/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586136 [0] dq.builtin: => EVERYONE -1711462090.586139 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:1304) scanning all wrs of topic rq/map_manager/set_parameters_atomicallyRequest -1711462090.586147 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #8: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.7;">,topic_name="rq/topological_map_manager2/get_topological_mapRequest",type_name="std_srvs::srv::dds_::Trigger_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1504},adlink_entity_factory=1} -1711462090.586163 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1504 reliable volatile reader unnamed: (default).rq/topological_map_manager2/get_topological_mapRequest/std_srvs::srv::dds_::Trigger_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.7;">,topic_name="rq/topological_map_manager2/get_topological_mapRequest",type_name="std_srvs::srv::dds_::Trigger_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586168 [0] dq.builtin: => EVERYONE -1711462090.586171 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:1504) scanning all wrs of topic rq/topological_map_manager2/get_topological_mapRequest -1711462090.586178 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #9: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.8;">,topic_name="rq/topological_map_manager2/get_tagged_nodesRequest",type_name="topological_navigation_msgs::srv::dds_::GetTaggedNodes_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1704},adlink_entity_factory=1} -1711462090.586194 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1704 reliable volatile reader unnamed: (default).rq/topological_map_manager2/get_tagged_nodesRequest/topological_navigation_msgs::srv::dds_::GetTaggedNodes_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.8;">,topic_name="rq/topological_map_manager2/get_tagged_nodesRequest",type_name="topological_navigation_msgs::srv::dds_::GetTaggedNodes_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586202 [0] dq.builtin: => EVERYONE -1711462090.586206 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:1704) scanning all wrs of topic rq/topological_map_manager2/get_tagged_nodesRequest -1711462090.586213 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #10: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.9;">,topic_name="rq/topological_map_manager2/get_tagsRequest",type_name="topological_navigation_msgs::srv::dds_::GetTags_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1904},adlink_entity_factory=1} -1711462090.586229 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1904 reliable volatile reader unnamed: (default).rq/topological_map_manager2/get_tagsRequest/topological_navigation_msgs::srv::dds_::GetTags_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.9;">,topic_name="rq/topological_map_manager2/get_tagsRequest",type_name="topological_navigation_msgs::srv::dds_::GetTags_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586234 [0] dq.builtin: => EVERYONE -1711462090.586238 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:1904) scanning all wrs of topic rq/topological_map_manager2/get_tagsRequest -1711462090.586245 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #11: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.a;">,topic_name="rq/topological_map_manager2/get_node_tagsRequest",type_name="topological_navigation_msgs::srv::dds_::GetNodeTags_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1b04},adlink_entity_factory=1} -1711462090.586262 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1b04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/get_node_tagsRequest/topological_navigation_msgs::srv::dds_::GetNodeTags_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.a;">,topic_name="rq/topological_map_manager2/get_node_tagsRequest",type_name="topological_navigation_msgs::srv::dds_::GetNodeTags_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586269 [0] dq.builtin: => EVERYONE -1711462090.586272 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:1b04) scanning all wrs of topic rq/topological_map_manager2/get_node_tagsRequest -1711462090.586280 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #12: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.b;">,topic_name="rq/topological_map_manager2/get_edges_between_nodesRequest",type_name="topological_navigation_msgs::srv::dds_::GetEdgesBetweenNodes_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1d04},adlink_entity_factory=1} -1711462090.586296 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1d04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/get_edges_between_nodesRequest/topological_navigation_msgs::srv::dds_::GetEdgesBetweenNodes_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.b;">,topic_name="rq/topological_map_manager2/get_edges_between_nodesRequest",type_name="topological_navigation_msgs::srv::dds_::GetEdgesBetweenNodes_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586303 [0] dq.builtin: => EVERYONE -1711462090.586307 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:1d04) scanning all wrs of topic rq/topological_map_manager2/get_edges_between_nodesRequest -1711462090.586314 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #13: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.c;">,topic_name="rq/topological_map_manager2/write_topological_mapRequest",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1f04},adlink_entity_factory=1} -1711462090.586331 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1f04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/write_topological_mapRequest/topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.c;">,topic_name="rq/topological_map_manager2/write_topological_mapRequest",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586335 [0] dq.builtin: => EVERYONE -1711462090.586338 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:1f04) scanning all wrs of topic rq/topological_map_manager2/write_topological_mapRequest -1711462090.586346 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #38: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.23;">,topic_name="rr/topological_map_manager2/clear_topological_nodesReply",type_name="std_srvs::srv::dds_::Empty_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.586363 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4c03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/clear_topological_nodesReply/std_srvs::srv::dds_::Empty_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.23;">,topic_name="rr/topological_map_manager2/clear_topological_nodesReply",type_name="std_srvs::srv::dds_::Empty_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.586372 [0] dq.builtin: => EVERYONE -1711462090.586375 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4c03) scanning all rds of topic rr/topological_map_manager2/clear_topological_nodesReply -1711462090.586383 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #14: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.d;">,topic_name="rq/topological_map_manager2/switch_topological_mapRequest",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2104},adlink_entity_factory=1} -1711462090.586400 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2104 reliable volatile reader unnamed: (default).rq/topological_map_manager2/switch_topological_mapRequest/topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.d;">,topic_name="rq/topological_map_manager2/switch_topological_mapRequest",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586404 [0] dq.builtin: => EVERYONE -1711462090.586407 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2104) scanning all wrs of topic rq/topological_map_manager2/switch_topological_mapRequest -1711462090.586415 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #15: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.e;">,topic_name="rq/topological_map_manager2/add_topological_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddNode_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2304},adlink_entity_factory=1} -1711462090.586431 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2304 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_topological_nodeRequest/topological_navigation_msgs::srv::dds_::AddNode_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.e;">,topic_name="rq/topological_map_manager2/add_topological_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddNode_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586438 [0] dq.builtin: => EVERYONE -1711462090.586442 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2304) scanning all wrs of topic rq/topological_map_manager2/add_topological_nodeRequest -1711462090.586449 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #16: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.f;">,topic_name="rq/topological_map_manager2/remove_topological_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::RmvNode_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2504},adlink_entity_factory=1} -1711462090.586466 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2504 reliable volatile reader unnamed: (default).rq/topological_map_manager2/remove_topological_nodeRequest/topological_navigation_msgs::srv::dds_::RmvNode_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.f;">,topic_name="rq/topological_map_manager2/remove_topological_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::RmvNode_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586470 [0] dq.builtin: => EVERYONE -1711462090.586474 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2504) scanning all wrs of topic rq/topological_map_manager2/remove_topological_nodeRequest -1711462090.586480 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #17: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.10;">,topic_name="rq/topological_map_manager2/add_edges_between_nodesRequest",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2704},adlink_entity_factory=1} -1711462090.586497 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2704 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_edges_between_nodesRequest/topological_navigation_msgs::srv::dds_::AddEdge_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.10;">,topic_name="rq/topological_map_manager2/add_edges_between_nodesRequest",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586505 [0] dq.builtin: => EVERYONE -1711462090.586508 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2704) scanning all wrs of topic rq/topological_map_manager2/add_edges_between_nodesRequest -1711462090.586516 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #36: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.23;">,topic_name="rq/topological_map_manager2/clear_topological_nodesRequest",type_name="std_srvs::srv::dds_::Empty_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4d04},adlink_entity_factory=1} -1711462090.586533 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4d04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/clear_topological_nodesRequest/std_srvs::srv::dds_::Empty_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.23;">,topic_name="rq/topological_map_manager2/clear_topological_nodesRequest",type_name="std_srvs::srv::dds_::Empty_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586538 [0] dq.builtin: => EVERYONE -1711462090.586541 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4d04) scanning all wrs of topic rq/topological_map_manager2/clear_topological_nodesRequest -1711462090.586549 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #39: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.24;">,topic_name="rr/topological_map_manager2/add_topological_node_multiReply",type_name="topological_navigation_msgs::srv::dds_::AddNodeArray_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.586567 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4e03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_topological_node_multiReply/topological_navigation_msgs::srv::dds_::AddNodeArray_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.24;">,topic_name="rr/topological_map_manager2/add_topological_node_multiReply",type_name="topological_navigation_msgs::srv::dds_::AddNodeArray_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.586574 [0] dq.builtin: => EVERYONE -1711462090.586578 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4e03) scanning all rds of topic rr/topological_map_manager2/add_topological_node_multiReply -1711462090.586586 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #37: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.24;">,topic_name="rq/topological_map_manager2/add_topological_node_multiRequest",type_name="topological_navigation_msgs::srv::dds_::AddNodeArray_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4f04},adlink_entity_factory=1} -1711462090.586604 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4f04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_topological_node_multiRequest/topological_navigation_msgs::srv::dds_::AddNodeArray_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.24;">,topic_name="rq/topological_map_manager2/add_topological_node_multiRequest",type_name="topological_navigation_msgs::srv::dds_::AddNodeArray_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586611 [0] dq.builtin: => EVERYONE -1711462090.586614 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4f04) scanning all wrs of topic rq/topological_map_manager2/add_topological_node_multiRequest -1711462090.586621 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #18: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.11;">,topic_name="rq/topological_map_manager2/remove_edgeRequest",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2904},adlink_entity_factory=1} -1711462090.586638 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2904 reliable volatile reader unnamed: (default).rq/topological_map_manager2/remove_edgeRequest/topological_navigation_msgs::srv::dds_::AddEdge_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.11;">,topic_name="rq/topological_map_manager2/remove_edgeRequest",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586642 [0] dq.builtin: => EVERYONE -1711462090.586646 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2904) scanning all wrs of topic rq/topological_map_manager2/remove_edgeRequest -1711462090.586653 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #19: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.12;">,topic_name="rq/topological_map_manager2/add_content_to_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddContent_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2b04},adlink_entity_factory=1} -1711462090.586670 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2b04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_content_to_nodeRequest/topological_navigation_msgs::srv::dds_::AddContent_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.12;">,topic_name="rq/topological_map_manager2/add_content_to_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddContent_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586678 [0] dq.builtin: => EVERYONE -1711462090.586681 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2b04) scanning all wrs of topic rq/topological_map_manager2/add_content_to_nodeRequest -1711462090.586689 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #20: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.13;">,topic_name="rq/topological_map_manager2/update_node_nameRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeName_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2d04},adlink_entity_factory=1} -1711462090.586706 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2d04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_node_nameRequest/topological_navigation_msgs::srv::dds_::UpdateNodeName_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.13;">,topic_name="rq/topological_map_manager2/update_node_nameRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeName_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586710 [0] dq.builtin: => EVERYONE -1711462090.586713 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2d04) scanning all wrs of topic rq/topological_map_manager2/update_node_nameRequest -1711462090.586721 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #21: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.14;">,topic_name="rq/topological_map_manager2/update_node_poseRequest",type_name="topological_navigation_msgs::srv::dds_::AddNode_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2f04},adlink_entity_factory=1} -1711462090.586738 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2f04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_node_poseRequest/topological_navigation_msgs::srv::dds_::AddNode_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.14;">,topic_name="rq/topological_map_manager2/update_node_poseRequest",type_name="topological_navigation_msgs::srv::dds_::AddNode_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586745 [0] dq.builtin: => EVERYONE -1711462090.586748 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2f04) scanning all wrs of topic rq/topological_map_manager2/update_node_poseRequest -1711462090.586757 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #40: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.25;">,topic_name="rr/topological_map_manager2/add_edges_between_nodes_multiReply",type_name="topological_navigation_msgs::srv::dds_::AddEdgeArray_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.586774 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5003 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_edges_between_nodes_multiReply/topological_navigation_msgs::srv::dds_::AddEdgeArray_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.25;">,topic_name="rr/topological_map_manager2/add_edges_between_nodes_multiReply",type_name="topological_navigation_msgs::srv::dds_::AddEdgeArray_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.586779 [0] dq.builtin: => EVERYONE -1711462090.586783 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:5003) scanning all rds of topic rr/topological_map_manager2/add_edges_between_nodes_multiReply -1711462090.586790 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #38: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.25;">,topic_name="rq/topological_map_manager2/add_edges_between_nodes_multiRequest",type_name="topological_navigation_msgs::srv::dds_::AddEdgeArray_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5104},adlink_entity_factory=1} -1711462090.586807 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5104 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_edges_between_nodes_multiRequest/topological_navigation_msgs::srv::dds_::AddEdgeArray_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.25;">,topic_name="rq/topological_map_manager2/add_edges_between_nodes_multiRequest",type_name="topological_navigation_msgs::srv::dds_::AddEdgeArray_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586814 [0] dq.builtin: => EVERYONE -1711462090.586817 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:5104) scanning all wrs of topic rq/topological_map_manager2/add_edges_between_nodes_multiRequest -1711462090.586826 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #22: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.15;">,topic_name="rq/topological_map_manager2/update_node_toleranceRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeTolerance_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3104},adlink_entity_factory=1} -1711462090.586842 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3104 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_node_toleranceRequest/topological_navigation_msgs::srv::dds_::UpdateNodeTolerance_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.15;">,topic_name="rq/topological_map_manager2/update_node_toleranceRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeTolerance_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586851 [0] dq.builtin: => EVERYONE -1711462090.586857 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3104) scanning all wrs of topic rq/topological_map_manager2/update_node_toleranceRequest -1711462090.586858 [0] gc: gc 0x77041c058960: not yet, shortsleep -1711462090.586865 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #23: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.16;">,topic_name="rq/topological_map_manager2/modify_node_tagsRequest",type_name="topological_navigation_msgs::srv::dds_::ModifyTag_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3304},adlink_entity_factory=1} -1711462090.586887 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3304 reliable volatile reader unnamed: (default).rq/topological_map_manager2/modify_node_tagsRequest/topological_navigation_msgs::srv::dds_::ModifyTag_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.16;">,topic_name="rq/topological_map_manager2/modify_node_tagsRequest",type_name="topological_navigation_msgs::srv::dds_::ModifyTag_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586892 [0] dq.builtin: => EVERYONE -1711462090.586895 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3304) scanning all wrs of topic rq/topological_map_manager2/modify_node_tagsRequest -1711462090.586902 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #24: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.17;">,topic_name="rq/topological_map_manager2/add_tag_to_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddTag_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3504},adlink_entity_factory=1} -1711462090.586920 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3504 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_tag_to_nodeRequest/topological_navigation_msgs::srv::dds_::AddTag_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.17;">,topic_name="rq/topological_map_manager2/add_tag_to_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddTag_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586925 [0] dq.builtin: => EVERYONE -1711462090.586928 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3504) scanning all wrs of topic rq/topological_map_manager2/add_tag_to_nodeRequest -1711462090.586936 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #25: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.18;">,topic_name="rq/topological_map_manager2/rm_tag_from_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddTag_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3704},adlink_entity_factory=1} -1711462090.586953 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3704 reliable volatile reader unnamed: (default).rq/topological_map_manager2/rm_tag_from_nodeRequest/topological_navigation_msgs::srv::dds_::AddTag_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.18;">,topic_name="rq/topological_map_manager2/rm_tag_from_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddTag_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.586961 [0] dq.builtin: => EVERYONE -1711462090.586964 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3704) scanning all wrs of topic rq/topological_map_manager2/rm_tag_from_nodeRequest -1711462090.586973 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #41: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.26;">,topic_name="rr/topological_map_manager2/add_param_to_edge_config_multiReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.586989 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:403) suppressed, resched in 0.1 s (min-ack 2!, avail-seq 2, xmit 2) -1711462090.586990 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5203 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_param_to_edge_config_multiReply/topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.26;">,topic_name="rr/topological_map_manager2/add_param_to_edge_config_multiReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587005 [0] dq.builtin: => EVERYONE -1711462090.587009 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:5203) scanning all rds of topic rr/topological_map_manager2/add_param_to_edge_config_multiReply -1711462090.587017 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #26: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.19;">,topic_name="rq/topological_map_manager2/add_param_to_edge_configRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3904},adlink_entity_factory=1} -1711462090.587034 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3904 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_param_to_edge_configRequest/topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.19;">,topic_name="rq/topological_map_manager2/add_param_to_edge_configRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587039 [0] dq.builtin: => EVERYONE -1711462090.587043 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3904) scanning all wrs of topic rq/topological_map_manager2/add_param_to_edge_configRequest -1711462090.587051 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #27: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1a;">,topic_name="rq/topological_map_manager2/rm_param_from_edge_configRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3b04},adlink_entity_factory=1} -1711462090.587068 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3b04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/rm_param_from_edge_configRequest/topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1a;">,topic_name="rq/topological_map_manager2/rm_param_from_edge_configRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587075 [0] dq.builtin: => EVERYONE -1711462090.587079 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3b04) scanning all wrs of topic rq/topological_map_manager2/rm_param_from_edge_configRequest -1711462090.587087 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #28: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1b;">,topic_name="rq/topological_map_manager2/rm_param_from_topological_mapRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3d04},adlink_entity_factory=1} -1711462090.587104 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3d04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/rm_param_from_topological_mapRequest/topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1b;">,topic_name="rq/topological_map_manager2/rm_param_from_topological_mapRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587109 [0] dq.builtin: => EVERYONE -1711462090.587112 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3d04) scanning all wrs of topic rq/topological_map_manager2/rm_param_from_topological_mapRequest -1711462090.587121 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #29: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1c;">,topic_name="rq/topological_map_manager2/update_node_restrictionsRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3f04},adlink_entity_factory=1} -1711462090.587138 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3f04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_node_restrictionsRequest/topological_navigation_msgs::srv::dds_::UpdateRestrictions_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1c;">,topic_name="rq/topological_map_manager2/update_node_restrictionsRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587145 [0] dq.builtin: => EVERYONE -1711462090.587148 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3f04) scanning all wrs of topic rq/topological_map_manager2/update_node_restrictionsRequest -1711462090.587156 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #39: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.26;">,topic_name="rq/topological_map_manager2/add_param_to_edge_config_multiRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5304},adlink_entity_factory=1} -1711462090.587173 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5304 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_param_to_edge_config_multiRequest/topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.26;">,topic_name="rq/topological_map_manager2/add_param_to_edge_config_multiRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587178 [0] dq.builtin: => EVERYONE -1711462090.587181 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:5304) scanning all wrs of topic rq/topological_map_manager2/add_param_to_edge_config_multiRequest -1711462090.587190 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:3c2 #1: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587206 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:403 reliable transient-local writer unnamed: (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587214 [0] dq.builtin: => EVERYONE -1711462090.587217 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:56a27910:57318171:403) scanning all rds of topic ros_discovery_info -1711462090.587221 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:504 init_acknack_count = 1 -1711462090.587223 [0] dq.builtin: reader_add_connection(pwr 110cd0d:56a27910:57318171:403 rd 110aba1:7b19badd:ce0adb73:504) -1711462090.587231 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:56a27910:57318171:403 rd 110aba1:7b19badd:ce0adb73:504) - out-of-sync -1711462090.587240 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:3c2 #2: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/rosout",type_name="rcl_interfaces::msg::dds_::Log_",durability=1,durability_service=0:0:1000:-1:-1:-1,reliability=1:9223372036854775807,lifespan=10000000000,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587255 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:603 reliable transient-local writer unnamed: (default).rt/rosout/rcl_interfaces::msg::dds_::Log_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="rt/rosout",type_name="rcl_interfaces::msg::dds_::Log_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1000:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=10000000000,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587260 [0] dq.builtin: => EVERYONE -1711462090.587267 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:56a27910:57318171:603) scanning all rds of topic rt/rosout -1711462090.587275 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:3c2 #3: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:703},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587290 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:703 reliable volatile writer unnamed: (default).rt/parameter_events/rcl_interfaces::msg::dds_::ParameterEvent_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587295 [0] dq.builtin: => EVERYONE -1711462090.587298 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:56a27910:57318171:703) scanning all rds of topic rt/parameter_events -1711462090.587305 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:3c2 #4: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.1;">,topic_name="rr/test_node/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587321 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:803 reliable volatile writer unnamed: (default).rr/test_node/describe_parametersReply/rcl_interfaces::srv::dds_::DescribeParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.1;">,topic_name="rr/test_node/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587329 [0] dq.builtin: => EVERYONE -1711462090.587332 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:56a27910:57318171:803) scanning all rds of topic rr/test_node/describe_parametersReply -1711462090.587340 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:3c2 #5: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.2;">,topic_name="rr/test_node/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587354 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:a03 reliable volatile writer unnamed: (default).rr/test_node/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.2;">,topic_name="rr/test_node/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587358 [0] dq.builtin: => EVERYONE -1711462090.587361 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:56a27910:57318171:a03) scanning all rds of topic rr/test_node/get_parametersReply -1711462090.587368 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #30: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1d;">,topic_name="rq/topological_map_manager2/update_edge_restrictionsRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4104},adlink_entity_factory=1} -1711462090.587386 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4104 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_edge_restrictionsRequest/topological_navigation_msgs::srv::dds_::UpdateRestrictions_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1d;">,topic_name="rq/topological_map_manager2/update_edge_restrictionsRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587396 [0] dq.builtin: => EVERYONE -1711462090.587399 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4104) scanning all wrs of topic rq/topological_map_manager2/update_edge_restrictionsRequest -1711462090.587407 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #31: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1e;">,topic_name="rq/topological_map_manager2/update_edgeRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdge_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4304},adlink_entity_factory=1} -1711462090.587421 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4304 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_edgeRequest/topological_navigation_msgs::srv::dds_::UpdateEdge_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1e;">,topic_name="rq/topological_map_manager2/update_edgeRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdge_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587426 [0] dq.builtin: => EVERYONE -1711462090.587429 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4304) scanning all wrs of topic rq/topological_map_manager2/update_edgeRequest -1711462090.587435 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #32: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1f;">,topic_name="rq/topological_map_manager2/update_actionRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateAction_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4504},adlink_entity_factory=1} -1711462090.587449 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4504 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_actionRequest/topological_navigation_msgs::srv::dds_::UpdateAction_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1f;">,topic_name="rq/topological_map_manager2/update_actionRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateAction_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587459 [0] dq.builtin: => EVERYONE -1711462090.587462 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4504) scanning all wrs of topic rq/topological_map_manager2/update_actionRequest -1711462090.587468 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #33: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.20;">,topic_name="rq/topological_map_manager2/add_datumRequest",type_name="topological_navigation_msgs::srv::dds_::AddDatum_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4704},adlink_entity_factory=1} -1711462090.587482 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4704 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_datumRequest/topological_navigation_msgs::srv::dds_::AddDatum_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.20;">,topic_name="rq/topological_map_manager2/add_datumRequest",type_name="topological_navigation_msgs::srv::dds_::AddDatum_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587486 [0] dq.builtin: => EVERYONE -1711462090.587492 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4704) scanning all wrs of topic rq/topological_map_manager2/add_datumRequest -1711462090.587499 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #34: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.21;">,topic_name="rq/topological_map_manager2/update_fail_policyRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4904},adlink_entity_factory=1} -1711462090.587503 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4904 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_fail_policyRequest/topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Request_ p(open) known -1711462090.587518 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.21;">,topic_name="rq/topological_map_manager2/update_fail_policyRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587526 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #35: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.22;">,topic_name="rq/topological_map_manager2/set_node_influence_zoneRequest",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZone_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4b04},adlink_entity_factory=1} -1711462090.587530 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4b04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/set_node_influence_zoneRequest/topological_navigation_msgs::srv::dds_::SetInfluenceZone_Request_ p(open) known -1711462090.587543 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.22;">,topic_name="rq/topological_map_manager2/set_node_influence_zoneRequest",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZone_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587549 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #36: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.23;">,topic_name="rq/topological_map_manager2/clear_topological_nodesRequest",type_name="std_srvs::srv::dds_::Empty_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4d04},adlink_entity_factory=1} -1711462090.587553 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4d04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/clear_topological_nodesRequest/std_srvs::srv::dds_::Empty_Request_ p(open) known -1711462090.587566 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.23;">,topic_name="rq/topological_map_manager2/clear_topological_nodesRequest",type_name="std_srvs::srv::dds_::Empty_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587573 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #37: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.24;">,topic_name="rq/topological_map_manager2/add_topological_node_multiRequest",type_name="topological_navigation_msgs::srv::dds_::AddNodeArray_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4f04},adlink_entity_factory=1} -1711462090.587576 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4f04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_topological_node_multiRequest/topological_navigation_msgs::srv::dds_::AddNodeArray_Request_ p(open) known -1711462090.587588 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.24;">,topic_name="rq/topological_map_manager2/add_topological_node_multiRequest",type_name="topological_navigation_msgs::srv::dds_::AddNodeArray_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587596 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #38: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.25;">,topic_name="rq/topological_map_manager2/add_edges_between_nodes_multiRequest",type_name="topological_navigation_msgs::srv::dds_::AddEdgeArray_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5104},adlink_entity_factory=1} -1711462090.587600 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5104 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_edges_between_nodes_multiRequest/topological_navigation_msgs::srv::dds_::AddEdgeArray_Request_ p(open) known -1711462090.587613 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.25;">,topic_name="rq/topological_map_manager2/add_edges_between_nodes_multiRequest",type_name="topological_navigation_msgs::srv::dds_::AddEdgeArray_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587621 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #39: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.26;">,topic_name="rq/topological_map_manager2/add_param_to_edge_config_multiRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5304},adlink_entity_factory=1} -1711462090.587625 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5304 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_param_to_edge_config_multiRequest/topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Request_ p(open) known -1711462090.587638 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.26;">,topic_name="rq/topological_map_manager2/add_param_to_edge_config_multiRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587645 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #42: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.27;">,topic_name="rr/topological_map_manager2/set_node_influence_zone_multiReply",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZoneArray_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587660 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5403 reliable volatile writer unnamed: (default).rr/topological_map_manager2/set_node_influence_zone_multiReply/topological_navigation_msgs::srv::dds_::SetInfluenceZoneArray_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.27;">,topic_name="rr/topological_map_manager2/set_node_influence_zone_multiReply",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZoneArray_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587666 [0] dq.builtin: => EVERYONE -1711462090.587670 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:5403) scanning all rds of topic rr/topological_map_manager2/set_node_influence_zone_multiReply -1711462090.587678 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:3c2 #6: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.3;">,topic_name="rr/test_node/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587692 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:c03 reliable volatile writer unnamed: (default).rr/test_node/get_parameter_typesReply/rcl_interfaces::srv::dds_::GetParameterTypes_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.3;">,topic_name="rr/test_node/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587700 [0] dq.builtin: => EVERYONE -1711462090.587703 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:56a27910:57318171:c03) scanning all rds of topic rr/test_node/get_parameter_typesReply -1711462090.587711 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:3c2 #7: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.4;">,topic_name="rr/test_node/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587725 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:e03 reliable volatile writer unnamed: (default).rr/test_node/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.4;">,topic_name="rr/test_node/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587729 [0] dq.builtin: => EVERYONE -1711462090.587732 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:56a27910:57318171:e03) scanning all rds of topic rr/test_node/list_parametersReply -1711462090.587739 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:3c2 #8: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.5;">,topic_name="rr/test_node/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:1003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587753 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:1003 reliable volatile writer unnamed: (default).rr/test_node/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.5;">,topic_name="rr/test_node/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587760 [0] dq.builtin: => EVERYONE -1711462090.587763 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:56a27910:57318171:1003) scanning all rds of topic rr/test_node/set_parametersReply -1711462090.587771 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:3c2 #9: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.6;">,topic_name="rr/test_node/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:1203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587786 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:1203 reliable volatile writer unnamed: (default).rr/test_node/set_parameters_atomicallyReply/rcl_interfaces::srv::dds_::SetParametersAtomically_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.6;">,topic_name="rr/test_node/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.587791 [0] dq.builtin: => EVERYONE -1711462090.587794 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:56a27910:57318171:1203) scanning all rds of topic rr/test_node/set_parameters_atomicallyReply -1711462090.587802 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #40: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.27;">,topic_name="rq/topological_map_manager2/set_node_influence_zone_multiRequest",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZoneArray_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5504},adlink_entity_factory=1} -1711462090.587817 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5504 reliable volatile reader unnamed: (default).rq/topological_map_manager2/set_node_influence_zone_multiRequest/topological_navigation_msgs::srv::dds_::SetInfluenceZoneArray_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.27;">,topic_name="rq/topological_map_manager2/set_node_influence_zone_multiRequest",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZoneArray_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587825 [0] dq.builtin: => EVERYONE -1711462090.587828 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:5504) scanning all wrs of topic rq/topological_map_manager2/set_node_influence_zone_multiRequest -1711462090.587833 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:200c2 #1: ST0 DCPSParticipantMessage/ParticipantMessageData:{110d7b4:17c5b8c5:94bd0ff4:1}:1<0> -1711462090.587836 [0] dq.builtin: PMD ST0 pp 110d7b4:17c5b8c5:94bd0ff4 kind 1 data 1 -1711462090.587843 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:4c2 #1: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,history=1:-1,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:504},adlink_entity_factory=1} -1711462090.587859 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:504 reliable transient-local reader unnamed: (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=1:-1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587864 [0] dq.builtin: => EVERYONE -1711462090.587868 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:504) scanning all wrs of topic ros_discovery_info -1711462090.587871 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:403 prd 110cd0d:56a27910:57318171:504) -1711462090.587874 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:403 prd 110cd0d:56a27910:57318171:504) - ack seq 2 -1711462090.587882 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7415@2 udp/10.101.12.71:7417@2 -1711462090.587887 [0] dq.builtin: reduced nlocs=5 -1711462090.587890 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.587893 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462090.587895 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.587898 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.587900 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7413@2 1 -> 0 -1711462090.587903 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.587905 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.587907 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7417@2 3 -> 0 -1711462090.587909 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.587911 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.587914 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7415@2 2 -> 0 -1711462090.587917 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.587920 [0] dq.builtin: a b c d -1711462090.587924 [0] dq.builtin: loc 0 = udp/10.101.12.71:7411@2 1 { +u .. .. .. } -1711462090.587927 [0] dq.builtin: loc 1 = udp/10.101.12.71:7413@2 1 { .. +u .. .. } -1711462090.587931 [0] dq.builtin: loc 2 = udp/10.101.12.71:7415@2 1 { .. .. .. +u } -1711462090.587934 [0] dq.builtin: loc 3 = udp/10.101.12.71:7417@2 1 { .. .. +u .. } -1711462090.587938 [0] dq.builtin: loc 4 = udp/239.255.0.1:7401@2 -1 { +1 +1 +1 +1 } -1711462090.587939 [0] dq.builtin: best = 4 -1711462090.587942 [0] dq.builtin: simple udp/239.255.0.1:7401@2 -1711462090.587946 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462090.587957 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:4c2 #2: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.1;">,topic_name="rq/test_node/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:904},adlink_entity_factory=1} -1711462090.587965 [0] gc: gc 0x77041c058960: deleting -1711462090.587972 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:904 reliable volatile reader unnamed: (default).rq/test_node/describe_parametersRequest/rcl_interfaces::srv::dds_::DescribeParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.1;">,topic_name="rq/test_node/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.587978 [0] dq.builtin: => EVERYONE -1711462090.587981 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:904) scanning all wrs of topic rq/test_node/describe_parametersRequest -1711462090.587988 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:4c2 #3: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.2;">,topic_name="rq/test_node/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:b04},adlink_entity_factory=1} -1711462090.588005 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:b04 reliable volatile reader unnamed: (default).rq/test_node/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.2;">,topic_name="rq/test_node/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588010 [0] dq.builtin: => EVERYONE -1711462090.588013 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:b04) scanning all wrs of topic rq/test_node/get_parametersRequest -1711462090.588020 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:4c2 #4: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.3;">,topic_name="rq/test_node/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:d04},adlink_entity_factory=1} -1711462090.588038 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:d04 reliable volatile reader unnamed: (default).rq/test_node/get_parameter_typesRequest/rcl_interfaces::srv::dds_::GetParameterTypes_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.3;">,topic_name="rq/test_node/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588042 [0] dq.builtin: => EVERYONE -1711462090.588045 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:d04) scanning all wrs of topic rq/test_node/get_parameter_typesRequest -1711462090.588053 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:4c2 #5: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.4;">,topic_name="rq/test_node/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:f04},adlink_entity_factory=1} -1711462090.588069 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:f04 reliable volatile reader unnamed: (default).rq/test_node/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.4;">,topic_name="rq/test_node/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588079 [0] dq.builtin: => EVERYONE -1711462090.588084 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:f04) scanning all wrs of topic rq/test_node/list_parametersRequest -1711462090.588090 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:4c2 #6: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.5;">,topic_name="rq/test_node/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:1104},adlink_entity_factory=1} -1711462090.588103 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:1104 reliable volatile reader unnamed: (default).rq/test_node/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.5;">,topic_name="rq/test_node/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588107 [0] dq.builtin: => EVERYONE -1711462090.588113 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:1104) scanning all wrs of topic rq/test_node/set_parametersRequest -1711462090.588119 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:4c2 #7: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.6;">,topic_name="rq/test_node/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:1304},adlink_entity_factory=1} -1711462090.588136 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:1304 reliable volatile reader unnamed: (default).rq/test_node/set_parameters_atomicallyRequest/rcl_interfaces::srv::dds_::SetParametersAtomically_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.56.a2.79.10.57.31.81.71.0.0.0.6;">,topic_name="rq/test_node/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588150 [0] dq.builtin: => EVERYONE -1711462090.588168 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:1304) scanning all wrs of topic rq/test_node/set_parameters_atomicallyRequest -1711462090.588180 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:4c2 #8: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="rt/topological_map_2",type_name="std_msgs::msg::dds_::String_",reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:1404},adlink_entity_factory=1} -1711462090.588195 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:1404 reliable volatile reader unnamed: (default).rt/topological_map_2/std_msgs::msg::dds_::String_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="rt/topological_map_2",type_name="std_msgs::msg::dds_::String_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588207 [0] dq.builtin: => EVERYONE -1711462090.588211 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:1404) scanning all wrs of topic rt/topological_map_2 -1711462090.588217 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:4c2 #9: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="rt/closest_node",type_name="std_msgs::msg::dds_::String_",reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:1504},adlink_entity_factory=1} -1711462090.588228 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:1504 reliable volatile reader unnamed: (default).rt/closest_node/std_msgs::msg::dds_::String_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="rt/closest_node",type_name="std_msgs::msg::dds_::String_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588231 [0] dq.builtin: => EVERYONE -1711462090.588234 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:1504) scanning all wrs of topic rt/closest_node -1711462090.588240 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:4c2 #10: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="rt/current_node",type_name="std_msgs::msg::dds_::String_",reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:56a27910:57318171:1604},adlink_entity_factory=1} -1711462090.588249 [0] dq.builtin: SEDP ST0 110cd0d:56a27910:57318171:1604 reliable volatile reader unnamed: (default).rt/current_node/std_msgs::msg::dds_::String_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="rt/current_node",type_name="std_msgs::msg::dds_::String_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588252 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1ae885c0 reg?no refc 1 rt/parameter_events/rcl_interfaces::msg::dds_::ParameterEvent_) -1711462090.588254 [0] dq.builtin: => EVERYONE -1711462090.588259 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.588262 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:56a27910:57318171:1604) scanning all wrs of topic rt/current_node -1711462090.588264 [0] python3: create_and_lock_ktopic: ktp 0x653a1b4aa9b0 -1711462090.588267 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:200c2 #1: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:56a27910:57318171:1}:1<0> -1711462090.588268 [0] python3: dds_create_topic_generic: register new sertype 0x653a1ae885c0 -1711462090.588269 [0] dq.builtin: PMD ST0 pp 110cd0d:56a27910:57318171 kind 1 data 1 -1711462090.588275 [0] python3: dds_create_topic_generic: new topic 287716525 -1711462090.588277 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:3c2 #1: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588289 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:703, (default).rt/parameter_events/rcl_interfaces::msg::dds_::ParameterEvent_) -1711462090.588290 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:403 reliable transient-local writer unnamed: (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588296 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:703 @ 0x653a1b3ea6c4) user 8 builtin 12 -1711462090.588298 [0] dq.builtin: => EVERYONE -1711462090.588302 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:e3b81b8d:1ccb65b1:403) scanning all rds of topic ros_discovery_info -1711462090.588306 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:504 init_acknack_count = 1 -1711462090.588308 [0] dq.builtin: reader_add_connection(pwr 110cd0d:e3b81b8d:1ccb65b1:403 rd 110aba1:7b19badd:ce0adb73:504) -1711462090.588311 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:e3b81b8d:1ccb65b1:403 rd 110aba1:7b19badd:ce0adb73:504) - out-of-sync -1711462090.588314 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:703 QOS={user_data=0<>,topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588316 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:3c2 #3: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:703},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588322 [0] python3: => EVERYONE -1711462090.588325 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:703 reliable volatile writer unnamed: (default).rt/parameter_events/rcl_interfaces::msg::dds_::ParameterEvent_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588329 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:703) scanning all prds of topic rt/parameter_events -1711462090.588332 [0] dq.builtin: => EVERYONE -1711462090.588334 [0] python3: match_writer_with_readers(wr 110aba1:7b19badd:ce0adb73:703) scanning all rds of topic rt/parameter_events -1711462090.588335 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:e3b81b8d:1ccb65b1:703) scanning all rds of topic rt/parameter_events -1711462090.588342 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:3c2 #4: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.1;">,topic_name="rr/test_node/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588352 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:803 reliable volatile writer unnamed: (default).rr/test_node/describe_parametersReply/rcl_interfaces::srv::dds_::DescribeParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.1;">,topic_name="rr/test_node/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588353 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:3c2 #3: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:703},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588355 [0] dq.builtin: => EVERYONE -1711462090.588358 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:e3b81b8d:1ccb65b1:803) scanning all rds of topic rr/test_node/describe_parametersReply -1711462090.588360 [0] python3: non-timed queue now has 1 items -1711462090.588365 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:3c2 #5: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.2;">,topic_name="rr/test_node/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588367 [0] tev: xpack_addmsg 0x770414001390 0x653a1b43cf70 0(data(110aba1:7b19badd:ce0adb73:3c2:#3/1)): niov 0 sz 0 => now niov 3 sz 224 -1711462090.588374 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:a03 reliable volatile writer unnamed: (default).rr/test_node/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.2;">,topic_name="rr/test_node/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588380 [0] dq.builtin: => EVERYONE -1711462090.588382 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:e3b81b8d:1ccb65b1:a03) scanning all rds of topic rr/test_node/get_parametersReply -1711462090.588386 [0] tev: nn_xpack_send 224: 0x77041400139c:20 0x653a1aec0a18:36 0x653a1b380e74:168 [ udp/239.255.0.1:7400@2 ] -1711462090.588388 [0] tev: traffic-xmit (1) 224 -1711462090.588390 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:3c2 #6: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.3;">,topic_name="rr/test_node/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588391 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #3: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}}}}} -1711462090.588391 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 224 from udp/10.101.12.71:52025 -1711462090.588400 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:c03 reliable volatile writer unnamed: (default).rr/test_node/get_parameter_typesReply/rcl_interfaces::srv::dds_::GetParameterTypes_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.3;">,topic_name="rr/test_node/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588409 [0] recv: INFOTS(1711462090.588344046) -1711462090.588413 [0] dq.builtin: => EVERYONE -1711462090.588404 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b380cc0 0(data(110aba1:7b19badd:ce0adb73:403:#3/1)): niov 0 sz 0 => now niov 3 sz 184 -1711462090.588416 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #3 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462090.588422 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 4 seq-eq-max 0 seq 3 maxseq 2) -1711462090.588418 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:e3b81b8d:1ccb65b1:c03) scanning all rds of topic rr/test_node/get_parameter_typesReply -1711462090.588433 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403) piggybacked, resched in 0.000571083 s (min-ack 2!, avail-seq 3, xmit 2) -1711462090.588437 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b382310 0(control): niov 3 sz 184 => now niov 4 sz 216 -1711462090.588439 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:3c2 #7: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.4;">,topic_name="rr/test_node/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588457 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:e03 reliable volatile writer unnamed: (default).rr/test_node/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.4;">,topic_name="rr/test_node/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588461 [0] dq.builtin: => EVERYONE -1711462090.588465 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:e3b81b8d:1ccb65b1:e03) scanning all rds of topic rr/test_node/list_parametersReply -1711462090.588471 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 216 from udp/10.101.12.71:52025 -1711462090.588473 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:3c2 #8: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.5;">,topic_name="rr/test_node/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:1003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588473 [0] python3: nn_xpack_send 216: 0x653a1add92cc:20 0x653a1b381278:36 0x653a1b3811c0:128 0x653a1b382408:32 [ udp/239.255.0.1:7401@2 ] -1711462090.588477 [0] recvMC: INFOTS(1711462090.588369545) -1711462090.588487 [0] python3: traffic-xmit (1) 216 -1711462090.588489 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:1003 reliable volatile writer unnamed: (default).rr/test_node/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.5;">,topic_name="rr/test_node/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588494 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #3 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.588499 [0] python3: => EVERYONE -1711462090.588511 [0] recvMC: HEARTBEAT(#4:3..3 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.588516 [0] dq.builtin: => EVERYONE -1711462090.588520 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:e3b81b8d:1ccb65b1:1003) scanning all rds of topic rr/test_node/set_parametersReply -1711462090.588528 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:3c2 #9: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.6;">,topic_name="rr/test_node/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:1203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588540 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 68 from udp/10.101.12.71:44991 -1711462090.588543 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:1203 reliable volatile writer unnamed: (default).rr/test_node/set_parameters_atomicallyReply/rcl_interfaces::srv::dds_::SetParametersAtomically_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.6;">,topic_name="rr/test_node/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588545 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.588547 [0] dq.builtin: => EVERYONE -1711462090.588549 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:e3b81b8d:1ccb65b1:1203) scanning all rds of topic rr/test_node/set_parameters_atomicallyReply -1711462090.588554 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:4c2 #1: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,history=1:-1,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:504},adlink_entity_factory=1} -1711462090.588555 [0] recvUC: ACKNACK(F#1:3/1:1 L(:1c1 16938.248048) 110443d:bb7f10a5:18901533:504 -> 110aba1:7b19badd:ce0adb73:403 complying RX3non-timed queue now has 1 items -1711462090.588561 [0] recvUC: rexmit#1 maxseq:3<3<=3defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:403 -> 110443d:bb7f10a5:18901533:504 - queue for transmit -1711462090.588564 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:504 reliable transient-local reader unnamed: (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=1:-1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588565 [0] recvUC: ) -1711462090.588562 [0] tev: xpack_addmsg 0x770414001390 0x770404001910 0(rexmit(110aba1:7b19badd:ce0adb73:403:#3/1)): niov 0 sz 0 => now niov 3 sz 200 -1711462090.588568 [0] recvUC: send_deferred_heartbeat: 3aa8b43931dec43 -> 92e6e35aff0ad2b8 - queue for transmit -1711462090.588571 [0] dq.builtin: => EVERYONE -1711462090.588572 [0] recvUC: non-timed queue now has 1 items -1711462090.588574 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:504) scanning all wrs of topic ros_discovery_info -1711462090.588576 [0] tev: nn_xpack_send 200: 0x77041400139c:20 0x7704040019f8:52 0x653a1b3811c0:128 [ udp/10.101.12.71:7417@2 ] -1711462090.588577 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:403 prd 110cd0d:e3b81b8d:1ccb65b1:504) -1711462090.588577 [0] recvUC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462090.588579 [0] tev: traffic-xmit (1) 200 -1711462090.588582 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.588585 [0] tev: xpack_addmsg 0x770414001390 0x770404001a90 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.588585 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:403 prd 110cd0d:e3b81b8d:1ccb65b1:504) - ack seq 3 -1711462090.588589 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x770404001b78:48 [ udp/10.101.12.71:7417@2 ] -1711462090.588591 [0] tev: traffic-xmit (1) 68 -1711462090.588593 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7415@2 udp/10.101.12.71:7417@2 -1711462090.588595 [0] dq.builtin: reduced nlocs=5 -1711462090.588597 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.588599 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462090.588601 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.588602 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.588604 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462090.588605 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.588607 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.588608 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7413@2 1 -> 0 -1711462090.588610 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.588611 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.588613 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7417@2 3 -> 0 -1711462090.588615 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.588616 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.588618 [0] dq.builtin: rdidx 4 lidx udp/10.101.12.71:7415@2 2 -> 0 -1711462090.588619 [0] dq.builtin: rdidx 4 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.588622 [0] dq.builtin: a b c d e -1711462090.588625 [0] dq.builtin: loc 0 = udp/10.101.12.71:7411@2 0 { +u +u .. .. .. } -1711462090.588629 [0] dq.builtin: loc 1 = udp/10.101.12.71:7413@2 1 { .. .. +u .. .. } -1711462090.588633 [0] dq.builtin: loc 2 = udp/10.101.12.71:7415@2 1 { .. .. .. .. +u } -1711462090.588637 [0] dq.builtin: loc 3 = udp/10.101.12.71:7417@2 1 { .. .. .. +u .. } -1711462090.588642 [0] dq.builtin: loc 4 = udp/239.255.0.1:7401@2 -2 { +1 +1 +1 +1 +1 } -1711462090.588644 [0] dq.builtin: best = 4 -1711462090.588646 [0] dq.builtin: simple udp/239.255.0.1:7401@2 -1711462090.588649 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462090.588654 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:4c2 #2: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.1;">,topic_name="rq/test_node/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:904},adlink_entity_factory=1} -1711462090.588657 [0] recvUC: ACKNACK(F#2:4/0: L(:1c1 16938.248085) 110e21c:d0762c48:a9f0fb28:504 -> 110aba1:7b19badd:ce0adb73:403 ACK1 RM0 setting-has-replied-to-hb happy-now) -1711462090.588663 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462090.588664 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:904 reliable volatile reader unnamed: (default).rq/test_node/describe_parametersRequest/rcl_interfaces::srv::dds_::DescribeParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.1;">,topic_name="rq/test_node/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588667 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.588675 [0] dq.builtin: => EVERYONE -1711462090.588676 [0] recvUC: ACKNACK(F#2:4/0: L(:1c1 16938.248170) 110443d:bb7f10a5:18901533:504 -> 110aba1:7b19badd:ce0adb73:403 ACK1 RM0 setting-has-replied-to-hb happy-now) -1711462090.588678 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:904) scanning all wrs of topic rq/test_node/describe_parametersRequest -1711462090.588685 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:4c2 #3: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.2;">,topic_name="rq/test_node/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:b04},adlink_entity_factory=1} -1711462090.588694 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:b04 reliable volatile reader unnamed: (default).rq/test_node/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.2;">,topic_name="rq/test_node/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588697 [0] dq.builtin: => EVERYONE -1711462090.588700 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:b04) scanning all wrs of topic rq/test_node/get_parametersRequest -1711462090.588704 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:4c2 #4: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.3;">,topic_name="rq/test_node/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:d04},adlink_entity_factory=1} -1711462090.588712 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:d04 reliable volatile reader unnamed: (default).rq/test_node/get_parameter_typesRequest/rcl_interfaces::srv::dds_::GetParameterTypes_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.3;">,topic_name="rq/test_node/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588715 [0] dq.builtin: => EVERYONE -1711462090.588719 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:d04) scanning all wrs of topic rq/test_node/get_parameter_typesRequest -1711462090.588724 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:4c2 #5: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.4;">,topic_name="rq/test_node/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:f04},adlink_entity_factory=1} -1711462090.588732 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:f04 reliable volatile reader unnamed: (default).rq/test_node/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.4;">,topic_name="rq/test_node/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588736 [0] dq.builtin: => EVERYONE -1711462090.588738 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:f04) scanning all wrs of topic rq/test_node/list_parametersRequest -1711462090.588742 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:4c2 #6: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.5;">,topic_name="rq/test_node/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:1104},adlink_entity_factory=1} -1711462090.588751 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:1104 reliable volatile reader unnamed: (default).rq/test_node/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.5;">,topic_name="rq/test_node/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588761 [0] dq.builtin: => EVERYONE -1711462090.588763 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:1104) scanning all wrs of topic rq/test_node/set_parametersRequest -1711462090.588765 [0] gc: gc 0x77041c074ce0: not yet, shortsleep -1711462090.588768 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:4c2 #7: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.6;">,topic_name="rq/test_node/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:1304},adlink_entity_factory=1} -1711462090.588779 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:1304 reliable volatile reader unnamed: (default).rq/test_node/set_parameters_atomicallyRequest/rcl_interfaces::srv::dds_::SetParametersAtomically_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.cd.d.e3.b8.1b.8d.1c.cb.65.b1.0.0.0.6;">,topic_name="rq/test_node/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588782 [0] dq.builtin: => EVERYONE -1711462090.588784 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:1304) scanning all wrs of topic rq/test_node/set_parameters_atomicallyRequest -1711462090.588788 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:4c2 #8: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="rt/topological_map_2",type_name="std_msgs::msg::dds_::String_",reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:1404},adlink_entity_factory=1} -1711462090.588797 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:1404 reliable volatile reader unnamed: (default).rt/topological_map_2/std_msgs::msg::dds_::String_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="rt/topological_map_2",type_name="std_msgs::msg::dds_::String_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588802 [0] dq.builtin: => EVERYONE -1711462090.588804 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:1404) scanning all wrs of topic rt/topological_map_2 -1711462090.588808 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:4c2 #9: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="rt/closest_node",type_name="std_msgs::msg::dds_::String_",reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:1504},adlink_entity_factory=1} -1711462090.588816 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:1504 reliable volatile reader unnamed: (default).rt/closest_node/std_msgs::msg::dds_::String_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="rt/closest_node",type_name="std_msgs::msg::dds_::String_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588819 [0] dq.builtin: => EVERYONE -1711462090.588821 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:1504) scanning all wrs of topic rt/closest_node -1711462090.588825 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:4c2 #10: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="rt/current_node",type_name="std_msgs::msg::dds_::String_",reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:1604},adlink_entity_factory=1} -1711462090.588833 [0] dq.builtin: SEDP ST0 110cd0d:e3b81b8d:1ccb65b1:1604 reliable volatile reader unnamed: (default).rt/current_node/std_msgs::msg::dds_::String_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="rt/current_node",type_name="std_msgs::msg::dds_::String_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.588838 [0] dq.builtin: => EVERYONE -1711462090.588840 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:e3b81b8d:1ccb65b1:1604) scanning all wrs of topic rt/current_node -1711462090.588843 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:200c2 #3: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:e3b81b8d:1ccb65b1:1}:1<0> -1711462090.588845 [0] dq.builtin: PMD ST0 pp 110cd0d:e3b81b8d:1ccb65b1 kind 1 data 1 -1711462090.588849 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:3c2 #1: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588857 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:403 reliable transient-local writer unnamed: (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588861 [0] dq.builtin: => EVERYONE -1711462090.588863 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:79d6eeac:ea4a8907:403) scanning all rds of topic ros_discovery_info -1711462090.588865 [0] dq.builtin: reader 110aba1:7b19badd:ce0adb73:504 init_acknack_count = 1 -1711462090.588866 [0] dq.builtin: reader_add_connection(pwr 110cd0d:79d6eeac:ea4a8907:403 rd 110aba1:7b19badd:ce0adb73:504) -1711462090.588869 [0] dq.builtin: proxy_writer_add_connection(pwr 110cd0d:79d6eeac:ea4a8907:403 rd 110aba1:7b19badd:ce0adb73:504) - out-of-sync -1711462090.588873 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:3c2 #3: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:703},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588881 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:703 reliable volatile writer unnamed: (default).rt/parameter_events/rcl_interfaces::msg::dds_::ParameterEvent_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588887 [0] dq.builtin: => EVERYONE -1711462090.588889 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:79d6eeac:ea4a8907:703) scanning all rds of topic rt/parameter_events -1711462090.588894 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:3c2 #4: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.1;">,topic_name="rr/test_node/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588906 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:803 reliable volatile writer unnamed: (default).rr/test_node/describe_parametersReply/rcl_interfaces::srv::dds_::DescribeParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.1;">,topic_name="rr/test_node/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588910 [0] dq.builtin: => EVERYONE -1711462090.588912 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:79d6eeac:ea4a8907:803) scanning all rds of topic rr/test_node/describe_parametersReply -1711462090.588916 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:3c2 #5: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.2;">,topic_name="rr/test_node/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588924 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:a03 reliable volatile writer unnamed: (default).rr/test_node/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.2;">,topic_name="rr/test_node/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588929 [0] dq.builtin: => EVERYONE -1711462090.588930 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:703 #1: ST0 rt/parameter_events/rcl_interfaces::msg::dds_::ParameterEvent_:{{1711462090,588851954},"/topological_navigation_core",{{"use_sim_time",{1,0,0,0.000000,"",{{}},{{}},{{}},{{}},{{}}}}},{},{}} -1711462090.588931 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:79d6eeac:ea4a8907:a03) scanning all rds of topic rr/test_node/get_parametersReply -1711462090.588938 [0] python3: => EVERYONE -1711462090.588945 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:3c2 #6: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.3;">,topic_name="rr/test_node/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588957 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:c03 reliable volatile writer unnamed: (default).rr/test_node/get_parameter_typesReply/rcl_interfaces::srv::dds_::GetParameterTypes_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.3;">,topic_name="rr/test_node/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588960 [0] dq.builtin: => EVERYONE -1711462090.588962 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:79d6eeac:ea4a8907:c03) scanning all rds of topic rr/test_node/get_parameter_typesReply -1711462090.588967 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:3c2 #7: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.4;">,topic_name="rr/test_node/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588975 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:e03 reliable volatile writer unnamed: (default).rr/test_node/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.4;">,topic_name="rr/test_node/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588980 [0] dq.builtin: => EVERYONE -1711462090.588982 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:79d6eeac:ea4a8907:e03) scanning all rds of topic rr/test_node/list_parametersReply -1711462090.588986 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:3c2 #8: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.5;">,topic_name="rr/test_node/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:1003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588994 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:1003 reliable volatile writer unnamed: (default).rr/test_node/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.5;">,topic_name="rr/test_node/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588999 [0] dq.builtin: => EVERYONE -1711462090.589001 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:79d6eeac:ea4a8907:1003) scanning all rds of topic rr/test_node/set_parametersReply -1711462090.589006 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:3c2 #9: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.6;">,topic_name="rr/test_node/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:1203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.589014 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:1203 reliable volatile writer unnamed: (default).rr/test_node/set_parameters_atomicallyReply/rcl_interfaces::srv::dds_::SetParametersAtomically_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.6;">,topic_name="rr/test_node/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.589017 [0] dq.builtin: => EVERYONE -1711462090.589019 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110cd0d:79d6eeac:ea4a8907:1203) scanning all rds of topic rr/test_node/set_parameters_atomicallyReply -1711462090.589023 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:4c2 #1: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,history=1:-1,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:504},adlink_entity_factory=1} -1711462090.589032 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:504 reliable transient-local reader unnamed: (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=1:-1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.589037 [0] dq.builtin: => EVERYONE -1711462090.589036 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:403) suppressed, resched in 0.1 s (min-ack 2!, avail-seq 3, xmit 3) -1711462090.589041 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:504) scanning all wrs of topic ros_discovery_info -1711462090.589046 [0] dq.builtin: proxy_reader_add_connection(wr 110aba1:7b19badd:ce0adb73:403 prd 110cd0d:79d6eeac:ea4a8907:504) -1711462090.589047 [0] dq.builtin: writer_add_connection(wr 110aba1:7b19badd:ce0adb73:403 prd 110cd0d:79d6eeac:ea4a8907:504) - ack seq 3 -1711462090.589052 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7415@2 udp/10.101.12.71:7417@2 -1711462090.589054 [0] dq.builtin: reduced nlocs=5 -1711462090.589055 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.589057 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462090.589058 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.589059 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.589061 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462090.589063 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.589064 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.589066 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462090.589067 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.589068 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.589070 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7413@2 1 -> 0 -1711462090.589071 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.589073 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.589074 [0] dq.builtin: rdidx 4 lidx udp/10.101.12.71:7417@2 3 -> 0 -1711462090.589076 [0] dq.builtin: rdidx 4 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.589077 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.589078 [0] dq.builtin: rdidx 5 lidx udp/10.101.12.71:7415@2 2 -> 0 -1711462090.589080 [0] dq.builtin: rdidx 5 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.589082 [0] dq.builtin: a b c d e f -1711462090.589084 [0] dq.builtin: loc 0 = udp/10.101.12.71:7411@2 -1 { +u +u +u .. .. .. } -1711462090.589086 [0] dq.builtin: loc 1 = udp/10.101.12.71:7413@2 1 { .. .. .. +u .. .. } -1711462090.589088 [0] dq.builtin: loc 2 = udp/10.101.12.71:7415@2 1 { .. .. .. .. .. +u } -1711462090.589090 [0] dq.builtin: loc 3 = udp/10.101.12.71:7417@2 1 { .. .. .. .. +u .. } -1711462090.589092 [0] dq.builtin: loc 4 = udp/239.255.0.1:7401@2 -3 { +1 +1 +1 +1 +1 +1 } -1711462090.589094 [0] dq.builtin: best = 4 -1711462090.589095 [0] dq.builtin: simple udp/239.255.0.1:7401@2 -1711462090.589098 [0] dq.builtin: ddsi_rebuild_writer_addrset(110aba1:7b19badd:ce0adb73:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462090.589103 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:4c2 #2: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.1;">,topic_name="rq/test_node/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:904},adlink_entity_factory=1} -1711462090.589111 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:904 reliable volatile reader unnamed: (default).rq/test_node/describe_parametersRequest/rcl_interfaces::srv::dds_::DescribeParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.1;">,topic_name="rq/test_node/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.589114 [0] dq.builtin: => EVERYONE -1711462090.589116 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:904) scanning all wrs of topic rq/test_node/describe_parametersRequest -1711462090.589121 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:4c2 #3: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.2;">,topic_name="rq/test_node/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:b04},adlink_entity_factory=1} -1711462090.589129 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:b04 reliable volatile reader unnamed: (default).rq/test_node/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.2;">,topic_name="rq/test_node/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.589135 [0] dq.builtin: => EVERYONE -1711462090.589137 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:b04) scanning all wrs of topic rq/test_node/get_parametersRequest -1711462090.589141 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:4c2 #4: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.3;">,topic_name="rq/test_node/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:d04},adlink_entity_factory=1} -1711462090.589149 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:d04 reliable volatile reader unnamed: (default).rq/test_node/get_parameter_typesRequest/rcl_interfaces::srv::dds_::GetParameterTypes_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.3;">,topic_name="rq/test_node/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.589152 [0] dq.builtin: => EVERYONE -1711462090.589154 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:d04) scanning all wrs of topic rq/test_node/get_parameter_typesRequest -1711462090.589158 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:4c2 #5: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.4;">,topic_name="rq/test_node/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:f04},adlink_entity_factory=1} -1711462090.589167 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:f04 reliable volatile reader unnamed: (default).rq/test_node/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.4;">,topic_name="rq/test_node/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.589172 [0] dq.builtin: => EVERYONE -1711462090.589174 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:f04) scanning all wrs of topic rq/test_node/list_parametersRequest -1711462090.589179 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:4c2 #6: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.5;">,topic_name="rq/test_node/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:1104},adlink_entity_factory=1} -1711462090.589187 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:1104 reliable volatile reader unnamed: (default).rq/test_node/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.5;">,topic_name="rq/test_node/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.589190 [0] dq.builtin: => EVERYONE -1711462090.589192 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:1104) scanning all wrs of topic rq/test_node/set_parametersRequest -1711462090.589196 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:4c2 #7: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.6;">,topic_name="rq/test_node/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:1304},adlink_entity_factory=1} -1711462090.589205 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:1304 reliable volatile reader unnamed: (default).rq/test_node/set_parameters_atomicallyRequest/rcl_interfaces::srv::dds_::SetParametersAtomically_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=52<"serviceid= 1.10.cd.d.79.d6.ee.ac.ea.4a.89.7.0.0.0.6;">,topic_name="rq/test_node/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.589210 [0] dq.builtin: => EVERYONE -1711462090.589212 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:1304) scanning all wrs of topic rq/test_node/set_parameters_atomicallyRequest -1711462090.589213 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b3841d0 reg?no refc 1 rr/topological_navigation_core/describe_parametersReply/rcl_interfaces::srv::dds_::DescribeParameters_Response_) -1711462090.589216 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:4c2 #8: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="rt/topological_map_2",type_name="std_msgs::msg::dds_::String_",reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:1404},adlink_entity_factory=1} -1711462090.589220 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.589225 [0] python3: create_and_lock_ktopic: ktp 0x653a1b3837e0 -1711462090.589228 [0] python3: dds_create_topic_generic: register new sertype 0x653a1b3841d0 -1711462090.589229 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:1404 reliable volatile reader unnamed: (default).rt/topological_map_2/std_msgs::msg::dds_::String_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="rt/topological_map_2",type_name="std_msgs::msg::dds_::String_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.589235 [0] dq.builtin: => EVERYONE -1711462090.589239 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:1404) scanning all wrs of topic rt/topological_map_2 -1711462090.589235 [0] python3: dds_create_topic_generic: new topic 1185260289 -1711462090.589242 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:4c2 #9: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="rt/closest_node",type_name="std_msgs::msg::dds_::String_",reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:1504},adlink_entity_factory=1} -1711462090.589249 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b386cd0 reg?no refc 1 rq/topological_navigation_core/describe_parametersRequest/rcl_interfaces::srv::dds_::DescribeParameters_Request_) -1711462090.589251 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:1504 reliable volatile reader unnamed: (default).rt/closest_node/std_msgs::msg::dds_::String_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="rt/closest_node",type_name="std_msgs::msg::dds_::String_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.589253 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.589259 [0] dq.builtin: => EVERYONE -1711462090.589260 [0] python3: create_and_lock_ktopic: ktp 0x653a1b387450 -1711462090.589262 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:1504) scanning all wrs of topic rt/closest_node -1711462090.589264 [0] python3: dds_create_topic_generic: register new sertype 0x653a1b386cd0 -1711462090.589268 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:4c2 #10: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="rt/current_node",type_name="std_msgs::msg::dds_::String_",reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110cd0d:79d6eeac:ea4a8907:1604},adlink_entity_factory=1} -1711462090.589269 [0] python3: dds_create_topic_generic: new topic 308518741 -1711462090.589277 [0] dq.builtin: SEDP ST0 110cd0d:79d6eeac:ea4a8907:1604 reliable volatile reader unnamed: (default).rt/current_node/std_msgs::msg::dds_::String_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 ssm=0) QOS={user_data=0<>,topic_name="rt/current_node",type_name="std_msgs::msg::dds_::String_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.589280 [0] dq.builtin: => EVERYONE -1711462090.589282 [0] dq.builtin: match_proxy_reader_with_writers(prd 110cd0d:79d6eeac:ea4a8907:1604) scanning all wrs of topic rt/current_node -1711462090.589285 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:200c2 #3: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:79d6eeac:ea4a8907:1}:1<0> -1711462090.589286 [0] dq.builtin: PMD ST0 pp 110cd0d:79d6eeac:ea4a8907 kind 1 data 1 -1711462090.589292 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:803, (default).rr/topological_navigation_core/describe_parametersReply/rcl_interfaces::srv::dds_::DescribeParameters_Response_) -1711462090.589298 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:803 @ 0x653a1b2ebe84) user 9 builtin 12 -1711462090.589314 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:803 QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.1;">,topic_name="rr/topological_navigation_core/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.589322 [0] python3: => EVERYONE -1711462090.589329 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:803) scanning all prds of topic rr/topological_navigation_core/describe_parametersReply -1711462090.589333 [0] python3: match_writer_with_readers(wr 110aba1:7b19badd:ce0adb73:803) scanning all rds of topic rr/topological_navigation_core/describe_parametersReply -1711462090.589351 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:3c2 #4: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.1;">,topic_name="rr/topological_navigation_core/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.589358 [0] python3: non-timed queue now has 1 items -1711462090.589363 [0] tev: xpack_addmsg 0x770414001390 0x653a1b382310 0(data(110aba1:7b19badd:ce0adb73:3c2:#4/1)): niov 0 sz 0 => now niov 3 sz 336 -1711462090.589369 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:904, (default).rq/topological_navigation_core/describe_parametersRequest/rcl_interfaces::srv::dds_::DescribeParameters_Request_) -1711462090.589372 [0] tev: nn_xpack_send 336: 0x77041400139c:20 0x653a1b382408:36 0x653a1ad693c4:280 [ udp/239.255.0.1:7400@2 ] -1711462090.589375 [0] tev: traffic-xmit (1) 336 -1711462090.589376 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:904 @ 0x653a1b3ded14) user 10 builtin 12 -1711462090.589380 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 336 from udp/10.101.12.71:52025 -1711462090.589384 [0] recvUC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 68 from udp/10.101.12.71:40473 -1711462090.589392 [0] python3: READER 110aba1:7b19badd:ce0adb73:904 QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.1;">,topic_name="rq/topological_navigation_core/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.589394 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.589399 [0] python3: => EVERYONE -1711462090.589387 [0] recv: INFOTS(1711462090.589341876) -1711462090.589405 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:904) scanning all pwrs of topic rq/topological_navigation_core/describe_parametersRequest -1711462090.589405 [0] recvUC: ACKNACK(F#1:3/1:1 L(:1c1 16938.248898) 110d7b4:17c5b8c5:94bd0ff4:504 -> 110aba1:7b19badd:ce0adb73:403 complying RX3non-timed queue now has 1 items -1711462090.589410 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #4 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462090.589413 [0] python3: match_reader_with_writers(rd 110aba1:7b19badd:ce0adb73:904) scanning all wrs of topic rq/topological_navigation_core/describe_parametersRequest -1711462090.589418 [0] recvUC: rexmit#1 maxseq:3<3<=3defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:403 -> 110d7b4:17c5b8c5:94bd0ff4:504 - queue for transmit -1711462090.589418 [0] tev: xpack_addmsg 0x770414001390 0x770404001c10 0(rexmit(110aba1:7b19badd:ce0adb73:403:#3/1)): niov 0 sz 0 => now niov 3 sz 200 -1711462090.589424 [0] recvUC: ) -1711462090.589429 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:4c2 #2: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.1;">,topic_name="rq/topological_navigation_core/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:904},adlink_entity_factory=1} -1711462090.589431 [0] recvUC: send_deferred_heartbeat: 3aa8b43931dec43 -> ba3f356d8b9e85c4 - queue for transmit -1711462090.589429 [0] tev: nn_xpack_send 200: 0x77041400139c:20 0x770404001cf8:52 0x653a1b3811c0:128 [ udp/10.101.12.71:7415@2 ] -1711462090.589434 [0] recvUC: non-timed queue now has 1 items -1711462090.589435 [0] tev: traffic-xmit (1) 200 -1711462090.589441 [0] python3: non-timed queue now has 2 items -1711462090.589451 [0] tev: xpack_addmsg 0x770414001390 0x770404001d90 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.589456 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x770404001e78:48 [ udp/10.101.12.71:7415@2 ] -1711462090.589457 [0] tev: traffic-xmit (1) 68 -1711462090.589459 [0] tev: xpack_addmsg 0x770414001390 0x653a1b380cc0 0(data(110aba1:7b19badd:ce0adb73:4c2:#2/1)): niov 0 sz 0 => now niov 3 sz 332 -1711462090.589467 [0] tev: nn_xpack_send 332: 0x77041400139c:20 0x653a1b381278:36 0x653a1b430db4:276 [ udp/239.255.0.1:7400@2 ] -1711462090.589468 [0] tev: traffic-xmit (1) 332 -1711462090.589479 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 332 from udp/10.101.12.71:52025 -1711462090.589484 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #4: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}}}}} -1711462090.589486 [0] recv: INFOTS(1711462090.589420872) -1711462090.589496 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b389500 0(data(110aba1:7b19badd:ce0adb73:403:#4/1)): niov 0 sz 0 => now niov 3 sz 232 -1711462090.589497 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #2 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462090.589501 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 2 seq 4 maxseq 3) -1711462090.589507 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.000634423 s (min-ack 2!, avail-seq 4, xmit 3) -1711462090.589512 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b389680 0(control): niov 3 sz 232 => now niov 4 sz 264 -1711462090.589539 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 264 from udp/10.101.12.71:52025 -1711462090.589543 [0] python3: nn_xpack_send 264: 0x653a1add92cc:20 0x653a1b3895f8:36 0x653a1b436780:176 0x653a1b389778:32 [ udp/239.255.0.1:7401@2 ] -1711462090.589544 [0] recvMC: INFOTS(1711462090.589459043) -1711462090.589549 [0] python3: traffic-xmit (1) 264 -1711462090.589557 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #4 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.589561 [0] recvMC: HEARTBEAT(F#7:4..4 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.589566 [0] python3: => EVERYONE -1711462090.589599 [0] recvUC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462090.589605 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.589613 [0] recvUC: ACKNACK(F#2:4/0: L(:1c1 16938.249108) 110d7b4:17c5b8c5:94bd0ff4:504 -> 110aba1:7b19badd:ce0adb73:403 ACK1 RM0 setting-has-replied-to-hb happy-now) -1711462090.589738 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b38ac30 reg?no refc 1 rr/topological_navigation_core/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_) -1711462090.589745 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.589748 [0] python3: create_and_lock_ktopic: ktp 0x653a1b389f70 -1711462090.589752 [0] python3: dds_create_topic_generic: register new sertype 0x653a1b38ac30 -1711462090.589757 [0] python3: dds_create_topic_generic: new topic 584095406 -1711462090.589765 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b38dc70 reg?no refc 1 rq/topological_navigation_core/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_) -1711462090.589768 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.589770 [0] python3: create_and_lock_ktopic: ktp 0x653a1b38e410 -1711462090.589773 [0] python3: dds_create_topic_generic: register new sertype 0x653a1b38dc70 -1711462090.589777 [0] python3: dds_create_topic_generic: new topic 857333311 -1711462090.589790 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:a03, (default).rr/topological_navigation_core/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_) -1711462090.589796 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:a03 @ 0x653a1b38f034) user 11 builtin 12 -1711462090.589811 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:a03 QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.2;">,topic_name="rr/topological_navigation_core/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.589818 [0] python3: => EVERYONE -1711462090.589824 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:a03) scanning all prds of topic rr/topological_navigation_core/get_parametersReply -1711462090.589828 [0] python3: match_writer_with_readers(wr 110aba1:7b19badd:ce0adb73:a03) scanning all rds of topic rr/topological_navigation_core/get_parametersReply -1711462090.589827 [0] gc: gc 0x77041c074ce0: deleting -1711462090.589847 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:3c2 #5: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.2;">,topic_name="rr/topological_navigation_core/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.589852 [0] python3: non-timed queue now has 1 items -1711462090.589858 [0] tev: xpack_addmsg 0x770414001390 0x653a1b389680 0(data(110aba1:7b19badd:ce0adb73:3c2:#5/1)): niov 0 sz 0 => now niov 3 sz 328 -1711462090.589863 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:b04, (default).rq/topological_navigation_core/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_) -1711462090.589865 [0] tev: nn_xpack_send 328: 0x77041400139c:20 0x653a1b389778:36 0x653a1aea0434:272 [ udp/239.255.0.1:7400@2 ] -1711462090.589868 [0] tev: traffic-xmit (1) 328 -1711462090.589869 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:b04 @ 0x653a1b38fd64) user 12 builtin 12 -1711462090.589871 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 328 from udp/10.101.12.71:52025 -1711462090.589875 [0] recv: INFOTS(1711462090.589837664) -1711462090.589881 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #5 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462090.589884 [0] python3: READER 110aba1:7b19badd:ce0adb73:b04 QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.2;">,topic_name="rq/topological_navigation_core/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.589890 [0] python3: => EVERYONE -1711462090.589895 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:b04) scanning all pwrs of topic rq/topological_navigation_core/get_parametersRequest -1711462090.589899 [0] python3: match_reader_with_writers(rd 110aba1:7b19badd:ce0adb73:b04) scanning all wrs of topic rq/topological_navigation_core/get_parametersRequest -1711462090.589914 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:4c2 #3: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.2;">,topic_name="rq/topological_navigation_core/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:b04},adlink_entity_factory=1} -1711462090.589919 [0] python3: non-timed queue now has 1 items -1711462090.589928 [0] tev: xpack_addmsg 0x770414001390 0x653a1b389500 0(data(110aba1:7b19badd:ce0adb73:4c2:#3/1)): niov 0 sz 0 => now niov 3 sz 324 -1711462090.589936 [0] tev: nn_xpack_send 324: 0x77041400139c:20 0x653a1b3895f8:36 0x653a1ad658a4:268 [ udp/239.255.0.1:7400@2 ] -1711462090.589937 [0] tev: traffic-xmit (1) 324 -1711462090.589938 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 324 from udp/10.101.12.71:52025 -1711462090.589944 [0] recv: INFOTS(1711462090.589906240) -1711462090.589947 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #3 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462090.589963 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #5: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}}}}} -1711462090.589970 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b3909f0 0(data(110aba1:7b19badd:ce0adb73:403:#5/1)): niov 0 sz 0 => now niov 3 sz 280 -1711462090.589979 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 3 seq 5 maxseq 3) -1711462090.589984 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.000161673 s (min-ack 2!, avail-seq 5, xmit 4) -1711462090.589987 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b390b70 0(control): niov 3 sz 280 => now niov 4 sz 312 -1711462090.590013 [0] python3: nn_xpack_send 312: 0x653a1add92cc:20 0x653a1b390ae8:36 0x653a1b390860:224 0x653a1b390c68:32 [ udp/239.255.0.1:7401@2 ] -1711462090.590019 [0] python3: traffic-xmit (1) 312 -1711462090.590015 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 312 from udp/10.101.12.71:52025 -1711462090.590023 [0] python3: => EVERYONE -1711462090.590028 [0] recvMC: INFOTS(1711462090.589932268) -1711462090.590039 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #5 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.590043 [0] recvMC: HEARTBEAT(F#8:5..5 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.590152 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:403) suppressed, resched in 0.1 s (min-ack 2!, avail-seq 5, xmit 5) -1711462090.590159 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b391a50 reg?no refc 1 rr/topological_navigation_core/get_parameter_typesReply/rcl_interfaces::srv::dds_::GetParameterTypes_Response_) -1711462090.590164 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.590168 [0] python3: create_and_lock_ktopic: ktp 0x653a1b391530 -1711462090.590171 [0] python3: dds_create_topic_generic: register new sertype 0x653a1b391a50 -1711462090.590176 [0] python3: dds_create_topic_generic: new topic 2012040662 -1711462090.590184 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b392510 reg?no refc 1 rq/topological_navigation_core/get_parameter_typesRequest/rcl_interfaces::srv::dds_::GetParameterTypes_Request_) -1711462090.590186 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.590189 [0] python3: create_and_lock_ktopic: ktp 0x653a1b392d80 -1711462090.590192 [0] python3: dds_create_topic_generic: register new sertype 0x653a1b392510 -1711462090.590196 [0] python3: dds_create_topic_generic: new topic 1928216990 -1711462090.590209 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:c03, (default).rr/topological_navigation_core/get_parameter_typesReply/rcl_interfaces::srv::dds_::GetParameterTypes_Response_) -1711462090.590214 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:c03 @ 0x653a1b3939c4) user 13 builtin 12 -1711462090.590228 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:c03 QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.3;">,topic_name="rr/topological_navigation_core/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.590235 [0] python3: => EVERYONE -1711462090.590241 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:c03) scanning all prds of topic rr/topological_navigation_core/get_parameter_typesReply -1711462090.590245 [0] python3: match_writer_with_readers(wr 110aba1:7b19badd:ce0adb73:c03) scanning all rds of topic rr/topological_navigation_core/get_parameter_typesReply -1711462090.590262 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:3c2 #6: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.3;">,topic_name="rr/topological_navigation_core/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.590267 [0] python3: non-timed queue now has 1 items -1711462090.590272 [0] tev: xpack_addmsg 0x770414001390 0x653a1b390b70 0(data(110aba1:7b19badd:ce0adb73:3c2:#6/1)): niov 0 sz 0 => now niov 3 sz 336 -1711462090.590277 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:d04, (default).rq/topological_navigation_core/get_parameter_typesRequest/rcl_interfaces::srv::dds_::GetParameterTypes_Request_) -1711462090.590279 [0] tev: nn_xpack_send 336: 0x77041400139c:20 0x653a1b390c68:36 0x653a1b38a754:280 [ udp/239.255.0.1:7400@2 ] -1711462090.590283 [0] tev: traffic-xmit (1) 336 -1711462090.590283 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 336 from udp/10.101.12.71:52025 -1711462090.590289 [0] recv: INFOTS(1711462090.590253167) -1711462090.590284 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:d04 @ 0x653a1b3948d4) user 14 builtin 12 -1711462090.590295 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #6 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462090.590312 [0] python3: READER 110aba1:7b19badd:ce0adb73:d04 QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.3;">,topic_name="rq/topological_navigation_core/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.590322 [0] python3: => EVERYONE -1711462090.590327 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:d04) scanning all pwrs of topic rq/topological_navigation_core/get_parameter_typesRequest -1711462090.590331 [0] python3: match_reader_with_writers(rd 110aba1:7b19badd:ce0adb73:d04) scanning all wrs of topic rq/topological_navigation_core/get_parameter_typesRequest -1711462090.590346 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:4c2 #4: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.3;">,topic_name="rq/topological_navigation_core/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:d04},adlink_entity_factory=1} -1711462090.590352 [0] python3: non-timed queue now has 1 items -1711462090.590357 [0] tev: xpack_addmsg 0x770414001390 0x653a1b3909f0 0(data(110aba1:7b19badd:ce0adb73:4c2:#4/1)): niov 0 sz 0 => now niov 3 sz 332 -1711462090.590363 [0] tev: nn_xpack_send 332: 0x77041400139c:20 0x653a1b390ae8:36 0x653a1ac1cf74:276 [ udp/239.255.0.1:7400@2 ] -1711462090.590364 [0] tev: traffic-xmit (1) 332 -1711462090.590367 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 332 from udp/10.101.12.71:52025 -1711462090.590370 [0] recv: INFOTS(1711462090.590339038) -1711462090.590375 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #4 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462090.590397 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #6: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,12,3,0,0,0,0,0,0,0,0}}}}}}} -1711462090.590406 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b395790 0(data(110aba1:7b19badd:ce0adb73:403:#6/1)): niov 0 sz 0 => now niov 3 sz 328 -1711462090.590410 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 3 seq 6 maxseq 3) -1711462090.590415 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0997847 s (min-ack 2!, avail-seq 6, xmit 5) -1711462090.590419 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b395910 0(control): niov 3 sz 328 => now niov 4 sz 360 -1711462090.590443 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 360 from udp/10.101.12.71:52025 -1711462090.590442 [0] python3: nn_xpack_send 360: 0x653a1add92cc:20 0x653a1b395888:36 0x653a1b3955d0:272 0x653a1b395a08:32 [ udp/239.255.0.1:7401@2 ] -1711462090.590449 [0] recvMC: INFOTS(1711462090.590361377) -1711462090.590455 [0] python3: traffic-xmit (1) 360 -1711462090.590455 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #6 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.590460 [0] python3: => EVERYONE -1711462090.590466 [0] recvMC: HEARTBEAT(F#9:6..6 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.590623 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b396ac0 reg?no refc 1 rr/topological_navigation_core/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_) -1711462090.590629 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.590633 [0] python3: create_and_lock_ktopic: ktp 0x653a1b3963a0 -1711462090.590637 [0] python3: dds_create_topic_generic: register new sertype 0x653a1b396ac0 -1711462090.590645 [0] python3: dds_create_topic_generic: new topic 1330459960 -1711462090.590655 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b397940 reg?no refc 1 rq/topological_navigation_core/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_) -1711462090.590658 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.590661 [0] python3: create_and_lock_ktopic: ktp 0x653a1b398260 -1711462090.590663 [0] python3: dds_create_topic_generic: register new sertype 0x653a1b397940 -1711462090.590668 [0] python3: dds_create_topic_generic: new topic 2110528528 -1711462090.590681 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:e03, (default).rr/topological_navigation_core/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_) -1711462090.590687 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:e03 @ 0x653a1b398e84) user 15 builtin 12 -1711462090.590702 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:e03 QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.4;">,topic_name="rr/topological_navigation_core/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.590714 [0] python3: => EVERYONE -1711462090.590720 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:e03) scanning all prds of topic rr/topological_navigation_core/list_parametersReply -1711462090.590725 [0] python3: match_writer_with_readers(wr 110aba1:7b19badd:ce0adb73:e03) scanning all rds of topic rr/topological_navigation_core/list_parametersReply -1711462090.590742 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:3c2 #7: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.4;">,topic_name="rr/topological_navigation_core/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.590748 [0] python3: non-timed queue now has 1 items -1711462090.590753 [0] tev: xpack_addmsg 0x770414001390 0x653a1b395910 0(data(110aba1:7b19badd:ce0adb73:3c2:#7/1)): niov 0 sz 0 => now niov 3 sz 328 -1711462090.590759 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:f04, (default).rq/topological_navigation_core/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_) -1711462090.590759 [0] tev: nn_xpack_send 328: 0x77041400139c:20 0x653a1b395a08:36 0x653a1b399994:272 [ udp/239.255.0.1:7400@2 ] -1711462090.590764 [0] tev: traffic-xmit (1) 328 -1711462090.590765 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:f04 @ 0x653a1b39a0c4) user 16 builtin 12 -1711462090.590765 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 328 from udp/10.101.12.71:52025 -1711462090.590777 [0] recv: INFOTS(1711462090.590733363) -1711462090.590780 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #7 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462090.590782 [0] python3: READER 110aba1:7b19badd:ce0adb73:f04 QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.4;">,topic_name="rq/topological_navigation_core/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.590792 [0] python3: => EVERYONE -1711462090.590798 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:f04) scanning all pwrs of topic rq/topological_navigation_core/list_parametersRequest -1711462090.590802 [0] python3: match_reader_with_writers(rd 110aba1:7b19badd:ce0adb73:f04) scanning all wrs of topic rq/topological_navigation_core/list_parametersRequest -1711462090.590817 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:4c2 #5: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.4;">,topic_name="rq/topological_navigation_core/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:f04},adlink_entity_factory=1} -1711462090.590822 [0] python3: non-timed queue now has 1 items -1711462090.590828 [0] tev: xpack_addmsg 0x770414001390 0x653a1b395790 0(data(110aba1:7b19badd:ce0adb73:4c2:#5/1)): niov 0 sz 0 => now niov 3 sz 324 -1711462090.590835 [0] tev: nn_xpack_send 324: 0x77041400139c:20 0x653a1b395888:36 0x653a1b39ac34:268 [ udp/239.255.0.1:7400@2 ] -1711462090.590836 [0] tev: traffic-xmit (1) 324 -1711462090.590837 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 324 from udp/10.101.12.71:52025 -1711462090.590840 [0] recv: INFOTS(1711462090.590809109) -1711462090.590843 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #5 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462090.590876 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #7: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,15,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,14,3,0,0,0,0,0,0,0,0}}}}}}} -1711462090.590884 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b444c20 0(data(110aba1:7b19badd:ce0adb73:403:#7/1)): niov 0 sz 0 => now niov 3 sz 376 -1711462090.590888 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 3 seq 7 maxseq 3) -1711462090.590893 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0993134 s (min-ack 2!, avail-seq 7, xmit 6) -1711462090.590897 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b444da0 0(control): niov 3 sz 376 => now niov 4 sz 408 -1711462090.590920 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 408 from udp/10.101.12.71:52025 -1711462090.590927 [0] recvMC: INFOTS(1711462090.590832188) -1711462090.590922 [0] python3: nn_xpack_send 408: 0x653a1add92cc:20 0x653a1b444d18:36 0x653a1b444a30:320 0x653a1b444e98:32 [ udp/239.255.0.1:7401@2 ] -1711462090.590933 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #7 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.590937 [0] python3: traffic-xmit (1) 408 -1711462090.590941 [0] recvMC: HEARTBEAT(F#10:7..7 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.590945 [0] python3: => EVERYONE -1711462090.591100 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b4464b0 reg?no refc 1 rr/topological_navigation_core/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_) -1711462090.591107 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.591110 [0] python3: create_and_lock_ktopic: ktp 0x653a1b445e90 -1711462090.591113 [0] python3: dds_create_topic_generic: register new sertype 0x653a1b4464b0 -1711462090.591118 [0] python3: dds_create_topic_generic: new topic 364593783 -1711462090.591149 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b447270 reg?no refc 1 rq/topological_navigation_core/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_) -1711462090.591152 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.591155 [0] python3: create_and_lock_ktopic: ktp 0x653a1b449ae0 -1711462090.591158 [0] python3: dds_create_topic_generic: register new sertype 0x653a1b447270 -1711462090.591162 [0] python3: dds_create_topic_generic: new topic 1707060952 -1711462090.591175 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:1003, (default).rr/topological_navigation_core/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_) -1711462090.591181 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1003 @ 0x653a1b44a5e4) user 17 builtin 12 -1711462090.591196 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:1003 QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.5;">,topic_name="rr/topological_navigation_core/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.591203 [0] python3: => EVERYONE -1711462090.591209 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:1003) scanning all prds of topic rr/topological_navigation_core/set_parametersReply -1711462090.591213 [0] python3: match_writer_with_readers(wr 110aba1:7b19badd:ce0adb73:1003) scanning all rds of topic rr/topological_navigation_core/set_parametersReply -1711462090.591230 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:3c2 #8: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.5;">,topic_name="rr/topological_navigation_core/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.591236 [0] python3: non-timed queue now has 1 items -1711462090.591241 [0] tev: xpack_addmsg 0x770414001390 0x653a1b444da0 0(data(110aba1:7b19badd:ce0adb73:3c2:#8/1)): niov 0 sz 0 => now niov 3 sz 328 -1711462090.591246 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:1104, (default).rq/topological_navigation_core/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_) -1711462090.591247 [0] tev: nn_xpack_send 328: 0x77041400139c:20 0x653a1b444e98:36 0x653a1b44ad24:272 [ udp/239.255.0.1:7400@2 ] -1711462090.591252 [0] tev: traffic-xmit (1) 328 -1711462090.591252 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1104 @ 0x653a1b44b6f4) user 18 builtin 12 -1711462090.591279 [0] python3: READER 110aba1:7b19badd:ce0adb73:1104 QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.5;">,topic_name="rq/topological_navigation_core/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.591285 [0] python3: => EVERYONE -1711462090.591253 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 328 from udp/10.101.12.71:52025 -1711462090.591291 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:1104) scanning all pwrs of topic rq/topological_navigation_core/set_parametersRequest -1711462090.591297 [0] python3: match_reader_with_writers(rd 110aba1:7b19badd:ce0adb73:1104) scanning all wrs of topic rq/topological_navigation_core/set_parametersRequest -1711462090.591315 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:4c2 #6: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.5;">,topic_name="rq/topological_navigation_core/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1104},adlink_entity_factory=1} -1711462090.591317 [0] recv: INFOTS(1711462090.591221553) -1711462090.591322 [0] python3: non-timed queue now has 1 items -1711462090.591325 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #8 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462090.591327 [0] tev: xpack_addmsg 0x770414001390 0x653a1b444c20 0(data(110aba1:7b19badd:ce0adb73:4c2:#6/1)): niov 0 sz 0 => now niov 3 sz 324 -1711462090.591335 [0] tev: nn_xpack_send 324: 0x77041400139c:20 0x653a1b444d18:36 0x653a1b44c264:268 [ udp/239.255.0.1:7400@2 ] -1711462090.591336 [0] tev: traffic-xmit (1) 324 -1711462090.591341 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 324 from udp/10.101.12.71:52025 -1711462090.591345 [0] recv: INFOTS(1711462090.591307020) -1711462090.591350 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #6 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462090.591386 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #8: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,17,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,16,3,0,0,0,0,0,0,0,0}}}}}}} -1711462090.591392 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b44ca20 0(data(110aba1:7b19badd:ce0adb73:403:#8/1)): niov 0 sz 0 => now niov 3 sz 424 -1711462090.591394 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 3 seq 8 maxseq 3) -1711462090.591398 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0988136 s (min-ack 2!, avail-seq 8, xmit 7) -1711462090.591400 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b44cba0 0(control): niov 3 sz 424 => now niov 4 sz 456 -1711462090.591417 [0] python3: nn_xpack_send 456: 0x653a1add92cc:20 0x653a1b44cb18:36 0x653a1b44c800:368 0x653a1b44cc98:32 [ udp/239.255.0.1:7401@2 ] -1711462090.591424 [0] python3: traffic-xmit (1) 456 -1711462090.591420 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 456 from udp/10.101.12.71:52025 -1711462090.591428 [0] python3: => EVERYONE -1711462090.591437 [0] recvMC: INFOTS(1711462090.591332052) -1711462090.591444 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #8 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.591448 [0] recvMC: HEARTBEAT(F#11:8..8 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.591547 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b44e180 reg?no refc 1 rr/topological_navigation_core/set_parameters_atomicallyReply/rcl_interfaces::srv::dds_::SetParametersAtomically_Response_) -1711462090.591550 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.591551 [0] python3: create_and_lock_ktopic: ktp 0x653a1b44dba0 -1711462090.591553 [0] python3: dds_create_topic_generic: register new sertype 0x653a1b44e180 -1711462090.591557 [0] python3: dds_create_topic_generic: new topic 1573531873 -1711462090.591572 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b44ee20 reg?no refc 1 rq/topological_navigation_core/set_parameters_atomicallyRequest/rcl_interfaces::srv::dds_::SetParametersAtomically_Request_) -1711462090.591573 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.591575 [0] python3: create_and_lock_ktopic: ktp 0x653a1b44eed0 -1711462090.591576 [0] python3: dds_create_topic_generic: register new sertype 0x653a1b44ee20 -1711462090.591578 [0] python3: dds_create_topic_generic: new topic 705050328 -1711462090.591586 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:1203, (default).rr/topological_navigation_core/set_parameters_atomicallyReply/rcl_interfaces::srv::dds_::SetParametersAtomically_Response_) -1711462090.591590 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1203 @ 0x653a1b4523c4) user 19 builtin 12 -1711462090.591600 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:1203 QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.6;">,topic_name="rr/topological_navigation_core/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.591605 [0] python3: => EVERYONE -1711462090.591609 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:1203) scanning all prds of topic rr/topological_navigation_core/set_parameters_atomicallyReply -1711462090.591611 [0] python3: match_writer_with_readers(wr 110aba1:7b19badd:ce0adb73:1203) scanning all rds of topic rr/topological_navigation_core/set_parameters_atomicallyReply -1711462090.591623 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:3c2 #9: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.6;">,topic_name="rr/topological_navigation_core/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.591626 [0] python3: non-timed queue now has 1 items -1711462090.591630 [0] tev: xpack_addmsg 0x770414001390 0x653a1b444c20 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.591631 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:1304, (default).rq/topological_navigation_core/set_parameters_atomicallyRequest/rcl_interfaces::srv::dds_::SetParametersAtomically_Request_) -1711462090.591634 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1304 @ 0x653a1b444a34) user 20 builtin 12 -1711462090.591636 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1b444d08:44 [ udp/10.101.12.71:7413@2 ] -1711462090.591638 [0] tev: traffic-xmit (1) 64 -1711462090.591640 [0] tev: xpack_addmsg 0x770414001390 0x653a1b44cba0 0(data(110aba1:7b19badd:ce0adb73:3c2:#9/1)): niov 0 sz 0 => now niov 3 sz 352 -1711462090.591643 [0] python3: READER 110aba1:7b19badd:ce0adb73:1304 QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.6;">,topic_name="rq/topological_navigation_core/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.591647 [0] python3: => EVERYONE -1711462090.591647 [0] tev: nn_xpack_send 352: 0x77041400139c:20 0x653a1b44cc98:36 0x653a1b452ea4:296 [ udp/239.255.0.1:7400@2 ] -1711462090.591653 [0] tev: traffic-xmit (1) 352 -1711462090.591651 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:1304) scanning all pwrs of topic rq/topological_navigation_core/set_parameters_atomicallyRequest -1711462090.591651 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 352 from udp/10.101.12.71:52025 -1711462090.591667 [0] recv: INFOTS(1711462090.591617144) -1711462090.591665 [0] python3: match_reader_with_writers(rd 110aba1:7b19badd:ce0adb73:1304) scanning all wrs of topic rq/topological_navigation_core/set_parameters_atomicallyRequest -1711462090.591670 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #9 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462090.591682 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:4c2 #7: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.6;">,topic_name="rq/topological_navigation_core/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1304},adlink_entity_factory=1} -1711462090.591685 [0] python3: non-timed queue now has 1 items -1711462090.591690 [0] tev: xpack_addmsg 0x770414001390 0x653a1b44ca20 0(data(110aba1:7b19badd:ce0adb73:4c2:#7/1)): niov 0 sz 0 => now niov 3 sz 340 -1711462090.591697 [0] tev: nn_xpack_send 340: 0x77041400139c:20 0x653a1b44cb18:36 0x653a1b44deb4:284 [ udp/239.255.0.1:7400@2 ] -1711462090.591699 [0] tev: traffic-xmit (1) 340 -1711462090.591700 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 340 from udp/10.101.12.71:52025 -1711462090.591706 [0] recv: INFOTS(1711462090.591678024) -1711462090.591710 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #7 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462090.591710 [0] recvUC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 68 from udp/10.101.12.71:58212 -1711462090.591723 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.591733 [0] recvUC: HEARTBEAT(#16:11..11 L(:1c1 16938.251226)110e21c:d0762c48:a9f0fb28:403 -> 110aba1:7b19badd:ce0adb73:504: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:504 #11) 110aba1:7b19badd:ce0adb73:504@10) -1711462090.591736 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110e21c:d0762c48:a9f0fb28:403: F#1:11/1:1 -1711462090.591739 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #9: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,19,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206, -1711462090.591741 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110e21c:d0762c48:a9f0fb28:403) -1711462090.591745 [0] tev: xpack_addmsg 0x770414001390 0x653a1b44ca20 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.591746 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b454360 0(data(110aba1:7b19badd:ce0adb73:403:#9/1)): niov 0 sz 0 => now niov 3 sz 472 -1711462090.591750 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x653a1b44cb08:48 [ udp/10.101.12.71:7413@2 ] -1711462090.591752 [0] tev: traffic-xmit (1) 68 -1711462090.591751 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 3 seq 9 maxseq 3) -1711462090.591758 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0984537 s (min-ack 2!, avail-seq 9, xmit 8) -1711462090.591760 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b4544e0 0(control): niov 3 sz 472 => now niov 4 sz 504 -1711462090.591778 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 504 from udp/10.101.12.71:52025 -1711462090.591787 [0] recvMC: INFOTS(1711462090.591692230) -1711462090.591791 [0] python3: nn_xpack_send 504: 0x653a1add92cc:20 0x653a1b454458:36 0x653a1ada15f0:416 0x653a1b4545d8:32 [ udp/239.255.0.1:7401@2 ] -1711462090.591793 [0] python3: traffic-xmit (1) 504 -1711462090.591797 [0] python3: => EVERYONE -1711462090.591791 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #9 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.591801 [0] recvMC: HEARTBEAT(F#12:9..9 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.591834 [0] recvUC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 540 from udp/10.101.12.71:58212 -1711462090.591839 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.591843 [0] recvUC: INFOTS(1711462090.543222303) -1711462090.591847 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b455d30 reg?no refc 1 rq/controller_server/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_) -1711462090.591849 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.591851 [0] python3: create_and_lock_ktopic: ktp 0x653a1b458620 -1711462090.591852 [0] python3: dds_create_topic_generic: reuse sertype 0x653a1b447270 -1711462090.591857 [0] python3: dds_create_topic_generic: new topic 357629096 -1711462090.591862 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b455d30 reg?no refc 1 rr/controller_server/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_) -1711462090.591864 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.591865 [0] python3: create_and_lock_ktopic: ktp 0x653a1b453bb0 -1711462090.591866 [0] python3: dds_create_topic_generic: reuse sertype 0x653a1b4464b0 -1711462090.591869 [0] python3: dds_create_topic_generic: new topic 994292308 -1711462090.591875 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:1403, (default).rq/controller_server/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_) -1711462090.591878 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1403 @ 0x653a1b458d64) user 21 builtin 12 -1711462090.591887 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:1403 QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.7;">,topic_name="rq/controller_server/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.591891 [0] python3: => EVERYONE -1711462090.591894 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:1403) scanning all prds of topic rq/controller_server/set_parametersRequest -1711462090.591896 [0] python3: match_writer_with_readers(wr 110aba1:7b19badd:ce0adb73:1403) scanning all rds of topic rq/controller_server/set_parametersRequest -1711462090.591901 [0] recvUC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 110aba1:7b19badd:ce0adb73:504 #11 L(:1c1 16938.251342) msr_in_sync(110aba1:7b19badd:ce0adb73:504 out-of-sync to tlcatchup)data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #11: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,14,3,0,0, =>110aba1:7b19badd:ce0adb73:504 -1711462090.591905 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:3c2 #10: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.7;">,topic_name="rq/controller_server/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.591908 [0] python3: non-timed queue now has 1 items -1711462090.591911 [0] tev: xpack_addmsg 0x770414001390 0x653a1b4544e0 0(data(110aba1:7b19badd:ce0adb73:3c2:#10/1)): niov 0 sz 0 => now niov 3 sz 316 -1711462090.591911 [0] recvUC: ) -1711462090.591913 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:1504, (default).rr/controller_server/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_) -1711462090.591918 [0] tev: nn_xpack_send 316: 0x77041400139c:20 0x653a1b4545d8:36 0x653a1aec35d4:260 [ udp/239.255.0.1:7400@2 ] -1711462090.591920 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1504 @ 0x653a1b459964) user 22 builtin 12 -1711462090.591919 [0] recvUC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 68 from udp/10.101.12.71:58212 -1711462090.591918 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 316 from udp/10.101.12.71:52025 -1711462090.591920 [0] tev: traffic-xmit (1) 316 -1711462090.591932 [0] recv: INFOTS(1711462090.591900460) -1711462090.591935 [0] python3: READER 110aba1:7b19badd:ce0adb73:1504 QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.7;">,topic_name="rr/controller_server/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.591938 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #10 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462090.591940 [0] python3: => EVERYONE -1711462090.591931 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.591944 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:1504) scanning all pwrs of topic rr/controller_server/set_parametersReply -1711462090.591950 [0] python3: match_reader_with_writers(rd 110aba1:7b19badd:ce0adb73:1504) scanning all wrs of topic rr/controller_server/set_parametersReply -1711462090.591954 [0] recvUC: HEARTBEAT(#17:11..11 L(:1c1 16938.251434)110e21c:d0762c48:a9f0fb28:403 -> 110aba1:7b19badd:ce0adb73:504: 110aba1:7b19badd:ce0adb73:504@11(sync)) -1711462090.591956 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110e21c:d0762c48:a9f0fb28:403: F#2:12/0: -1711462090.591959 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:4c2 #8: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.7;">,topic_name="rr/controller_server/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1504},adlink_entity_factory=1} -1711462090.591963 [0] python3: non-timed queue now has 1 items -1711462090.591961 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110e21c:d0762c48:a9f0fb28:403) -1711462090.591967 [0] tev: xpack_addmsg 0x770414001390 0x653a1b4544e0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.591972 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1b4545c8:44 [ udp/10.101.12.71:7413@2 ] -1711462090.591973 [0] tev: traffic-xmit (1) 64 -1711462090.591975 [0] tev: xpack_addmsg 0x770414001390 0x653a1b454360 0(data(110aba1:7b19badd:ce0adb73:4c2:#8/1)): niov 0 sz 0 => now niov 3 sz 308 -1711462090.591984 [0] tev: nn_xpack_send 308: 0x77041400139c:20 0x653a1b454458:36 0x653a1adcc124:252 [ udp/239.255.0.1:7400@2 ] -1711462090.591990 [0] tev: traffic-xmit (1) 308 -1711462090.591985 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 308 from udp/10.101.12.71:52025 -1711462090.591994 [0] recv: INFOTS(1711462090.591954823) -1711462090.591998 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #8 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462090.592019 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #10: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206, -1711462090.592024 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b395470 0(data(110aba1:7b19badd:ce0adb73:403:#10/1)): niov 0 sz 0 => now niov 3 sz 520 -1711462090.592027 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 3 seq 10 maxseq 3) -1711462090.592030 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0981777 s (min-ack 2!, avail-seq 10, xmit 9) -1711462090.592032 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1ada16a0 0(control): niov 3 sz 520 => now niov 4 sz 552 -1711462090.592047 [0] python3: nn_xpack_send 552: 0x653a1add92cc:20 0x653a1ada1618:36 0x653a1aed0ae0:464 0x653a1b45a558:32 [ udp/239.255.0.1:7401@2 ] -1711462090.592050 [0] python3: traffic-xmit (1) 552 -1711462090.592055 [0] python3: => EVERYONE -1711462090.592048 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 552 from udp/10.101.12.71:52025 -1711462090.592066 [0] recvMC: INFOTS(1711462090.591969903) -1711462090.592071 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #10 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.592075 [0] recvMC: HEARTBEAT(F#13:10..10 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.592098 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b45b260 reg?no refc 1 rq/controller_server/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_) -1711462090.592100 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.592102 [0] python3: create_and_lock_ktopic: ktp 0x653a1b452ac0 -1711462090.592103 [0] python3: dds_create_topic_generic: reuse sertype 0x653a1b397940 -1711462090.592106 [0] python3: dds_create_topic_generic: new topic 972247460 -1711462090.592114 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b45b260 reg?no refc 1 rr/controller_server/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_) -1711462090.592115 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.592116 [0] python3: create_and_lock_ktopic: ktp 0x653a1b455ce0 -1711462090.592118 [0] python3: dds_create_topic_generic: reuse sertype 0x653a1b396ac0 -1711462090.592121 [0] python3: dds_create_topic_generic: new topic 1835298763 -1711462090.592128 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:1603, (default).rq/controller_server/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_) -1711462090.592131 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1603 @ 0x653a1b39b554) user 23 builtin 12 -1711462090.592141 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:1603 QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.8;">,topic_name="rq/controller_server/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.592145 [0] python3: => EVERYONE -1711462090.592147 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:1603) scanning all prds of topic rq/controller_server/list_parametersRequest -1711462090.592150 [0] python3: match_writer_with_readers(wr 110aba1:7b19badd:ce0adb73:1603) scanning all rds of topic rq/controller_server/list_parametersRequest -1711462090.592160 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:3c2 #11: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.8;">,topic_name="rq/controller_server/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.592162 [0] python3: non-timed queue now has 1 items -1711462090.592165 [0] tev: xpack_addmsg 0x770414001390 0x653a1ada16a0 0(data(110aba1:7b19badd:ce0adb73:3c2:#11/1)): niov 0 sz 0 => now niov 3 sz 316 -1711462090.592168 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:1704, (default).rr/controller_server/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_) -1711462090.592170 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1704 @ 0x653a1b39c054) user 24 builtin 12 -1711462090.592174 [0] tev: nn_xpack_send 316: 0x77041400139c:20 0x653a1b45a558:36 0x653a1ad3b8b4:260 [ udp/239.255.0.1:7400@2 ] -1711462090.592177 [0] tev: traffic-xmit (1) 316 -1711462090.592175 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 316 from udp/10.101.12.71:52025 -1711462090.592184 [0] recv: INFOTS(1711462090.592154676) -1711462090.592187 [0] python3: READER 110aba1:7b19badd:ce0adb73:1704 QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.8;">,topic_name="rr/controller_server/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.592187 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #11 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462090.592192 [0] python3: => EVERYONE -1711462090.592196 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:1704) scanning all pwrs of topic rr/controller_server/list_parametersReply -1711462090.592199 [0] python3: match_reader_with_writers(rd 110aba1:7b19badd:ce0adb73:1704) scanning all wrs of topic rr/controller_server/list_parametersReply -1711462090.592209 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:4c2 #9: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.8;">,topic_name="rr/controller_server/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1704},adlink_entity_factory=1} -1711462090.592211 [0] python3: non-timed queue now has 1 items -1711462090.592216 [0] tev: xpack_addmsg 0x770414001390 0x653a1b395470 0(data(110aba1:7b19badd:ce0adb73:4c2:#9/1)): niov 0 sz 0 => now niov 3 sz 308 -1711462090.592225 [0] tev: nn_xpack_send 308: 0x77041400139c:20 0x653a1ada1618:36 0x653a1aa5ff64:252 [ udp/239.255.0.1:7400@2 ] -1711462090.592227 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 308 from udp/10.101.12.71:52025 -1711462090.592232 [0] recv: INFOTS(1711462090.592204340) -1711462090.592236 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #9 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462090.592228 [0] tev: traffic-xmit (1) 308 -1711462090.592264 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #11: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206, -1711462090.592269 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b39d0a0 0(data(110aba1:7b19badd:ce0adb73:403:#11/1)): niov 0 sz 0 => now niov 3 sz 568 -1711462090.592272 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 3 seq 11 maxseq 3) -1711462090.592274 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.097931 s (min-ack 2!, avail-seq 11, xmit 10) -1711462090.592277 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b39d170 0(control): niov 3 sz 568 => now niov 4 sz 600 -1711462090.592290 [0] python3: nn_xpack_send 600: 0x653a1add92cc:20 0x653a1b45b288:36 0x653a1b38a960:512 0x653a1b39d268:32 [ udp/239.255.0.1:7401@2 ] -1711462090.592295 [0] python3: traffic-xmit (1) 600 -1711462090.592300 [0] python3: => EVERYONE -1711462090.592291 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 600 from udp/10.101.12.71:52025 -1711462090.592307 [0] recvMC: INFOTS(1711462090.592217036) -1711462090.592312 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #11 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.592315 [0] recvMC: HEARTBEAT(F#14:11..11 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.592336 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b39e620 reg?no refc 1 rq/controller_server/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_) -1711462090.592338 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.592339 [0] python3: create_and_lock_ktopic: ktp 0x653a1b39e9c0 -1711462090.592341 [0] python3: dds_create_topic_generic: reuse sertype 0x653a1b38dc70 -1711462090.592344 [0] python3: dds_create_topic_generic: new topic 1361955521 -1711462090.592361 [0] python3: dds_create_topic_generic (pp 0x653a1b4855a0 110aba1:7b19badd:ce0adb73:1c1 sertype 0x653a1b39e620 reg?no refc 1 rr/controller_server/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_) -1711462090.592362 [0] python3: lookup_and_check_ktopic_may_unlock_pp: no such ktopic -1711462090.592364 [0] python3: create_and_lock_ktopic: ktp 0x653a1b454e10 -1711462090.592366 [0] python3: dds_create_topic_generic: reuse sertype 0x653a1b38ac30 -1711462090.592371 [0] python3: dds_create_topic_generic: new topic 1248342734 -1711462090.592377 [0] python3: new_writer(guid 110aba1:7b19badd:ce0adb73:1803, (default).rq/controller_server/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_) -1711462090.592380 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1803 @ 0x653a1b39f924) user 25 builtin 12 -1711462090.592389 [0] python3: WRITER 110aba1:7b19badd:ce0adb73:1803 QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.9;">,topic_name="rq/controller_server/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.592393 [0] python3: => EVERYONE -1711462090.592396 [0] python3: match_writer_with_proxy_readers(wr 110aba1:7b19badd:ce0adb73:1803) scanning all prds of topic rq/controller_server/get_parametersRequest -1711462090.592398 [0] python3: match_writer_with_readers(wr 110aba1:7b19badd:ce0adb73:1803) scanning all rds of topic rq/controller_server/get_parametersRequest -1711462090.592408 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:3c2 #12: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.9;">,topic_name="rq/controller_server/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.592411 [0] python3: non-timed queue now has 1 items -1711462090.592413 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d170 0(data(110aba1:7b19badd:ce0adb73:3c2:#12/1)): niov 0 sz 0 => now niov 3 sz 316 -1711462090.592415 [0] python3: new_reader(guid 110aba1:7b19badd:ce0adb73:1904, (default).rr/controller_server/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_) -1711462090.592418 [0] python3: ddsi_ref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1904 @ 0x653a1b3a0714) user 26 builtin 12 -1711462090.592422 [0] tev: nn_xpack_send 316: 0x77041400139c:20 0x653a1b39d268:36 0x653a1b3a00f4:260 [ udp/239.255.0.1:7400@2 ] -1711462090.592426 [0] tev: traffic-xmit (1) 316 -1711462090.592423 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 316 from udp/10.101.12.71:52025 -1711462090.592433 [0] recv: INFOTS(1711462090.592403130) -1711462090.592435 [0] python3: READER 110aba1:7b19badd:ce0adb73:1904 QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.9;">,topic_name="rr/controller_server/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.592439 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #12 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462090.592445 [0] python3: => EVERYONE -1711462090.592448 [0] python3: match_reader_with_proxy_writers(rd 110aba1:7b19badd:ce0adb73:1904) scanning all pwrs of topic rr/controller_server/get_parametersReply -1711462090.592451 [0] python3: match_reader_with_writers(rd 110aba1:7b19badd:ce0adb73:1904) scanning all wrs of topic rr/controller_server/get_parametersReply -1711462090.592459 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:4c2 #10: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.9;">,topic_name="rr/controller_server/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1904},adlink_entity_factory=1} -1711462090.592462 [0] python3: non-timed queue now has 1 items -1711462090.592465 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(data(110aba1:7b19badd:ce0adb73:4c2:#10/1)): niov 0 sz 0 => now niov 3 sz 308 -1711462090.592473 [0] tev: nn_xpack_send 308: 0x77041400139c:20 0x653a1b45b288:36 0x653a1b3a0ff4:252 [ udp/239.255.0.1:7400@2 ] -1711462090.592476 [0] tev: traffic-xmit (1) 308 -1711462090.592474 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 308 from udp/10.101.12.71:52025 -1711462090.592484 [0] recv: INFOTS(1711462090.592455025) -1711462090.592488 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #10 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462090.592526 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #12: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206, -1711462090.592531 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b44c6d0 0(data(110aba1:7b19badd:ce0adb73:403:#12/1)): niov 0 sz 0 => now niov 3 sz 616 -1711462090.592535 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 3 seq 12 maxseq 3) -1711462090.592539 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0976805 s (min-ack 2!, avail-seq 12, xmit 11) -1711462090.592542 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1b3a0d30 0(control): niov 3 sz 616 => now niov 4 sz 648 -1711462090.592560 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 648 from udp/10.101.12.71:52025 -1711462090.592560 [0] python3: nn_xpack_send 648: 0x653a1add92cc:20 0x653a1b39e648:36 0x653a1b3a15d0:560 0x653a1b3a18d8:32 [ udp/239.255.0.1:7401@2 ] -1711462090.592582 [0] recvMC: INFOTS(1711462090.592467231) -1711462090.592583 [0] python3: traffic-xmit (1) 648 -1711462090.592591 [0] python3: => EVERYONE -1711462090.592587 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #12 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.592599 [0] recvMC: HEARTBEAT(F#15:12..12 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.592743 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.592752 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1b45b278:44 [ udp/10.101.12.71:7417@2 ] -1711462090.592755 [0] tev: traffic-xmit (1) 64 -1711462090.592802 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 68 from udp/10.101.12.71:44991 -1711462090.592808 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.592819 [0] recvUC: HEARTBEAT(#16:10..10 L(:1c1 16938.252311)110443d:bb7f10a5:18901533:403 -> 110aba1:7b19badd:ce0adb73:504: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:504 #10) 110aba1:7b19badd:ce0adb73:504@9) -1711462090.592823 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110443d:bb7f10a5:18901533:403: F#1:10/1:1 -1711462090.592826 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462090.592830 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.592837 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x653a1b45b278:48 [ udp/10.101.12.71:7417@2 ] -1711462090.592839 [0] tev: traffic-xmit (1) 68 -1711462090.592871 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 504 from udp/10.101.12.71:44991 -1711462090.592877 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.592883 [0] recvUC: INFOTS(1711462090.571985769) -1711462090.592949 [0] recvUC: DATA(110443d:bb7f10a5:18901533:403 -> 110aba1:7b19badd:ce0adb73:504 #10 L(:1c1 16938.252380) msr_in_sync(110aba1:7b19badd:ce0adb73:504 out-of-sync to tlcatchup)data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #10: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,19,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,16,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,16 =>110aba1:7b19badd:ce0adb73:504 -1711462090.592956 [0] recvUC: ) -1711462090.592962 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 68 from udp/10.101.12.71:44991 -1711462090.592971 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.592978 [0] recvUC: HEARTBEAT(#17:10..10 L(:1c1 16938.252474)110443d:bb7f10a5:18901533:403 -> 110aba1:7b19badd:ce0adb73:504: 110aba1:7b19badd:ce0adb73:504@10(sync)) -1711462090.592983 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110443d:bb7f10a5:18901533:403: F#2:11/0: -1711462090.592986 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462090.592989 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.592997 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1b45b278:44 [ udp/10.101.12.71:7417@2 ] -1711462090.592999 [0] tev: traffic-xmit (1) 64 -1711462090.597279 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.597333 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1b45b278:44 [ udp/10.101.12.71:7411@2 ] -1711462090.597338 [0] tev: traffic-xmit (1) 64 -1711462090.598358 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.598381 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1b45b278:44 [ udp/10.101.12.71:7411@2 ] -1711462090.598385 [0] tev: traffic-xmit (1) 64 -1711462090.598918 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.598936 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1b45b278:44 [ udp/10.101.12.71:7411@2 ] -1711462090.598941 [0] tev: traffic-xmit (1) 64 -1711462090.619799 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 444 from udp/10.101.12.71:58212 -1711462090.619836 [0] recv: INFOTS(1711462090.519442682) -1711462090.619855 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #1) -1711462090.619871 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 444 from udp/10.101.12.71:58212 -1711462090.619893 [0] recv: INFOTS(1711462090.519442682) -1711462090.619904 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #1) -1711462090.619913 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.619930 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16938.279431) -1711462090.619955 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.619968 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16938.279471) -1711462090.642157 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 444 from udp/10.101.12.71:40473 -1711462090.642192 [0] recv: INFOTS(1711462090.541682763) -1711462090.642201 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 0:0:0:0 #1) -1711462090.642210 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 444 from udp/10.101.12.71:40473 -1711462090.642214 [0] recv: INFOTS(1711462090.541682763) -1711462090.642221 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 0:0:0:0 #1) -1711462090.642232 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.642243 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16938.301746) -1711462090.642263 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.642269 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16938.301772) -1711462090.649536 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 444 from udp/10.101.12.71:44991 -1711462090.649544 [0] recv: INFOTS(1711462090.549308855) -1711462090.649554 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #1) -1711462090.649591 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 444 from udp/10.101.12.71:44991 -1711462090.649597 [0] recv: INFOTS(1711462090.549308855) -1711462090.649604 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #1) -1711462090.649705 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.649740 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16938.309240) -1711462090.649777 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.649787 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16938.309289) -1711462090.670514 [0] tev: non-timed queue now has 1 items -1711462090.670551 [0] tev: xmit spdp 110aba1:7b19badd:ce0adb73:1c1 to 0:0:0:100c7 (resched 8s) -1711462090.670563 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 444 -1711462090.670687 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462090.670702 [0] recv: INFOTS(1711462090.570393375) -1711462090.670711 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462090.670727 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462090.670731 [0] recv: INFOTS(1711462090.570393375) -1711462090.670735 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462090.670781 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.670813 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (local) -1711462090.670847 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.670855 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (local) -1711462090.671539 [0] tev: nn_xpack_send 444: 0x77041400139c:20 0x653a1b45b288:36 0x653a1b2b4514:388 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.(trunc) -1711462090.671554 [0] tev: traffic-xmit (101) 444 -1711462090.671881 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 84 from udp/10.101.12.71:58212 -1711462090.671901 [0] recv: HEARTBEAT(#9:1..10 L(:1c1 16938.331390)110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:3c7@10(sync)) -1711462090.671908 [0] recv: HEARTBEAT(#9:1..8 110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:4c7@8(sync)) -1711462090.671923 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#3:11/0: -1711462090.671925 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462090.671937 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462090.671948 [0] recv: HEARTBEAT(#7:1..10 L(:1c1 16938.331447)110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:3c7@10(sync)) -1711462090.671958 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.671967 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#3:9/0: -1711462090.671985 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462090.671999 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d170 0(control): niov 2 sz 64 => now niov 3 sz 92 -1711462090.672006 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#3:11/0: -1711462090.672012 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462090.672037 [0] tev: nn_xpack_send 92: 0x77041400139c:20 0x653a1b45b278:44 0x653a1b39d268:28 [ udp/10.101.12.71:7412@2 ] -1711462090.672042 [0] tev: traffic-xmit (1) 92 -1711462090.672062 [0] tev: xpack_addmsg 0x770414001390 0x653a1b395470 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.672077 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1ada1608:44 [ udp/10.101.12.71:7416@2 ] -1711462090.672089 [0] tev: traffic-xmit (1) 64 -1711462090.672107 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462090.672134 [0] recv: HEARTBEAT(#5:1..0 L(:1c1 16938.331629)110e21c:d0762c48:a9f0fb28:300c3 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:300c4@0(sync)) -1711462090.672144 [0] tev: acknack 110aba1:7b19badd:ce0adb73:300c4 -> 110e21c:d0762c48:a9f0fb28:300c3: F#2:1/0: -1711462090.672150 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462090.672153 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:300c4 -> pwr 110e21c:d0762c48:a9f0fb28:300c3) -1711462090.672159 [0] recv: HEARTBEAT(#7:1..7 L(:1c1 16938.331658)110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:4c7@7(sync)) -1711462090.672160 [0] tev: xpack_addmsg 0x770414001390 0x653a1b395470 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.672177 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110443d:bb7f10a5:18901533:4c2: F#3:8/0: -1711462090.672183 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110443d:bb7f10a5:18901533:4c2) -1711462090.672197 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1ada1608:44 [ udp/10.101.12.71:7412@2 ] -1711462090.672204 [0] tev: traffic-xmit (1) 64 -1711462090.672220 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.672197 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462090.672237 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1b45b278:44 [ udp/10.101.12.71:7416@2 ] -1711462090.672252 [0] tev: traffic-xmit (1) 64 -1711462090.672245 [0] recv: HEARTBEAT(#8:1..42 L(:1c1 16938.331742)110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:3c7@42(sync)) -1711462090.672262 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#3:43/0: -1711462090.672274 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462090.672277 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462090.672293 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.672305 [0] tev: acknack 110aba1:7b19badd:ce0adb73:301c4 -> 110e21c:d0762c48:a9f0fb28:301c3: F#2:1/0: -1711462090.672313 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:301c4 -> pwr 110e21c:d0762c48:a9f0fb28:301c3) -1711462090.672333 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1b45b278:44 [ udp/10.101.12.71:7414@2 ] -1711462090.672342 [0] tev: traffic-xmit (1) 64 -1711462090.672349 [0] tev: xpack_addmsg 0x770414001390 0x653a1b395470 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.672364 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1ada1608:44 [ udp/10.101.12.71:7412@2 ] -1711462090.672369 [0] tev: traffic-xmit (1) 64 -1711462090.672286 [0] recv: HEARTBEAT(#5:1..0 L(:1c1 16938.331784)110e21c:d0762c48:a9f0fb28:301c3 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:301c4@0(sync)) -1711462090.672405 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462090.672438 [0] recv: HEARTBEAT(#7:1..1 L(:1c1 16938.331930)110443d:bb7f10a5:18901533:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@1(sync)) -1711462090.672445 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110443d:bb7f10a5:18901533:200c2: F#3:2/0: -1711462090.672451 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110443d:bb7f10a5:18901533:200c2) -1711462090.672457 [0] tev: xpack_addmsg 0x770414001390 0x653a1b395470 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.672474 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1ada1608:44 [ udp/10.101.12.71:7416@2 ] -1711462090.672480 [0] tev: traffic-xmit (1) 64 -1711462090.672542 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462090.672559 [0] recv: HEARTBEAT(#8:1..40 L(:1c1 16938.332052)110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:4c7@40(sync)) -1711462090.672569 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462090.672582 [0] recv: HEARTBEAT(#3:1..0 L(:1c1 16938.332078)110443d:bb7f10a5:18901533:300c3 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:300c4@0(sync)) -1711462090.672586 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2: F#3:41/0: -1711462090.672604 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462090.672613 [0] tev: xpack_addmsg 0x770414001390 0x653a1b395470 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.672620 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462090.672622 [0] tev: acknack 110aba1:7b19badd:ce0adb73:300c4 -> 110443d:bb7f10a5:18901533:300c3: F#2:1/0: -1711462090.672644 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:300c4 -> pwr 110443d:bb7f10a5:18901533:300c3) -1711462090.672659 [0] recv: HEARTBEAT(#3:1..0 L(:1c1 16938.332135)110443d:bb7f10a5:18901533:301c3 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:301c4@0(sync)) -1711462090.672674 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1ada1608:44 [ udp/10.101.12.71:7414@2 ] -1711462090.672783 [0] tev: traffic-xmit (1) 64 -1711462090.672794 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.672807 [0] tev: acknack 110aba1:7b19badd:ce0adb73:301c4 -> 110443d:bb7f10a5:18901533:301c3: F#2:1/0: -1711462090.672811 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:301c4 -> pwr 110443d:bb7f10a5:18901533:301c3) -1711462090.672818 [0] tev: xpack_addmsg 0x770414001390 0x653a1b395470 0(control): niov 2 sz 64 => now niov 3 sz 92 -1711462090.672837 [0] tev: nn_xpack_send 92: 0x77041400139c:20 0x653a1b45b278:44 0x653a1ada1618:28 [ udp/10.101.12.71:7416@2 ] -1711462090.672849 [0] tev: traffic-xmit (1) 92 -1711462090.674277 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:3c2 multicasting (rel-prd 6 seq-eq-max 3 seq 12 maxseq 2) -1711462090.674293 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:3c2) sent, resched in 0.1 s (min-ack 2!, avail-seq 12, xmit 12) -1711462090.674299 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462090.674303 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:4c2 multicasting (rel-prd 6 seq-eq-max 3 seq 10 maxseq 1) -1711462090.674308 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:4c2) sent, resched in 0.1 s (min-ack 1!, avail-seq 10, xmit 10) -1711462090.674312 [0] tev: xpack_addmsg 0x770414001390 0x653a1b395470 0(control): niov 2 sz 52 => now niov 3 sz 84 -1711462090.674317 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:200c2 multicasting (rel-prd 6 seq-eq-max 3 seq 1 maxseq 1) -1711462090.674322 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:200c2) sent, resched in 0.1 s (min-ack 1!, avail-seq 1, xmit 1) -1711462090.674326 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d170 0(control): niov 3 sz 84 => now niov 4 sz 116 -1711462090.674360 [0] tev: nn_xpack_send 116: 0x77041400139c:20 0x653a1b45b288:32 0x653a1ada1618:32 0x653a1b39d268:32 [ udp/239.255.0.1:7400@2 ] -1711462090.674368 [0] tev: traffic-xmit (1) 116 -1711462090.674368 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 116 from udp/10.101.12.71:52025 -1711462090.674378 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:300c3 multicasting (rel-prd 6 seq-eq-max 0 seq 0 maxseq 0) -1711462090.674405 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:300c3) sent, resched in 0.1 s (min-ack 0!, avail-seq 0, xmit 0) -1711462090.674413 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462090.674413 [0] recv: HEARTBEAT(#5:1..12 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462090.674430 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:301c3 multicasting (rel-prd 6 seq-eq-max 0 seq 0 maxseq 0) -1711462090.674444 [0] recv: HEARTBEAT(#5:1..10 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462090.674445 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:301c3) sent, resched in 0.1 s (min-ack 0!, avail-seq 0, xmit 0) -1711462090.674477 [0] tev: xpack_addmsg 0x770414001390 0x653a1b395470 0(control): niov 2 sz 52 => now niov 3 sz 84 -1711462090.674468 [0] recv: HEARTBEAT(#5:1..1 110aba1:7b19badd:ce0adb73:200c2? -> 0:0:0:0) -1711462090.674496 [0] tev: nn_xpack_send 84: 0x77041400139c:20 0x653a1b45b288:32 0x653a1ada1618:32 [ udp/239.255.0.1:7400@2 ] -1711462090.674501 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462090.674503 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 84 from udp/10.101.12.71:52025 -1711462090.674542 [0] recvMC: HEARTBEAT(#18:11..11 L(:1c1 16938.334035)110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@11(sync)) -1711462090.674547 [0] recv: HEARTBEAT(#2:1..0 110aba1:7b19badd:ce0adb73:300c3? -> 0:0:0:0) -1711462090.674555 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462090.674504 [0] tev: traffic-xmit (1) 84 -1711462090.674560 [0] recv: HEARTBEAT(#2:1..0 110aba1:7b19badd:ce0adb73:301c3? -> 0:0:0:0) -1711462090.674574 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110e21c:d0762c48:a9f0fb28:403: F#3:12/0: -1711462090.674584 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110e21c:d0762c48:a9f0fb28:403) -1711462090.674593 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 92 from udp/10.101.12.71:58212 -1711462090.674565 [0] recvMC: HEARTBEAT(#18:10..10 L(:1c1 16938.334065)110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@10(sync)) -1711462090.674596 [0] tev: xpack_addmsg 0x770414001390 0x653a1b39d0a0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.674607 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.674621 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110443d:bb7f10a5:18901533:403: F#3:11/0: -1711462090.674637 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462090.674638 [0] recv: ACKNACK(F#3:13/0: L(:1c1 16938.334109) 110e21c:d0762c48:a9f0fb28:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK10 RM0) -1711462090.674652 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1b45b278:44 [ udp/10.101.12.71:7413@2 ] -1711462090.674670 [0] tev: traffic-xmit (1) 64 -1711462090.674664 [0] recv: ACKNACK(F#3:11/0: 110e21c:d0762c48:a9f0fb28:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 ACK9 RM0) -1711462090.674675 [0] tev: xpack_addmsg 0x770414001390 0x653a1b395470 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.674697 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 92 from udp/10.101.12.71:44991 -1711462090.674700 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x653a1ada1608:44 [ udp/10.101.12.71:7417@2 ] -1711462090.674712 [0] tev: traffic-xmit (1) 64 -1711462090.674706 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.674741 [0] recv: ACKNACK(F#3:13/0: L(:1c1 16938.334208) 110443d:bb7f10a5:18901533:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK10 RM0) -1711462090.674755 [0] recv: ACKNACK(F#3:11/0: 110443d:bb7f10a5:18901533:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 ACK9 RM0) -1711462090.674788 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 120 from udp/10.101.12.71:40473 -1711462090.674801 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.674814 [0] recv: ACKNACK(F#3:13/0: L(:1c1 16938.334303) 110d7b4:17c5b8c5:94bd0ff4:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK10 RM0) -1711462090.674824 [0] recv: ACKNACK(F#3:11/0: 110d7b4:17c5b8c5:94bd0ff4:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 ACK9 RM0) -1711462090.674836 [0] recv: ACKNACK(F#3:2/0: 110d7b4:17c5b8c5:94bd0ff4:200c7 -> 110aba1:7b19badd:ce0adb73:200c2) -1711462090.674851 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 120 from udp/10.101.12.71:44991 -1711462090.674858 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.674881 [0] recv: ACKNACK(F#3:2/0: L(:1c1 16938.334361) 110443d:bb7f10a5:18901533:200c7 -> 110aba1:7b19badd:ce0adb73:200c2) -1711462090.674890 [0] recv: ACKNACK(F#2:1/0: 110443d:bb7f10a5:18901533:300c4 -> 110aba1:7b19badd:ce0adb73:300c3) -1711462090.674898 [0] recv: ACKNACK(F#2:1/0: 110443d:bb7f10a5:18901533:301c4 -> 110aba1:7b19badd:ce0adb73:301c3) -1711462090.674911 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 92 from udp/10.101.12.71:40473 -1711462090.674917 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.674927 [0] recv: ACKNACK(F#2:1/0: L(:1c1 16938.334420) 110d7b4:17c5b8c5:94bd0ff4:300c4 -> 110aba1:7b19badd:ce0adb73:300c3) -1711462090.674935 [0] recv: ACKNACK(F#2:1/0: 110d7b4:17c5b8c5:94bd0ff4:301c4 -> 110aba1:7b19badd:ce0adb73:301c3) -1711462090.674947 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462090.674953 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.674963 [0] recv: ACKNACK(F#3:2/0: L(:1c1 16938.334456) 110e21c:d0762c48:a9f0fb28:200c7 -> 110aba1:7b19badd:ce0adb73:200c2) -1711462090.674975 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 332 from udp/10.101.12.71:50807 -1711462090.674983 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.675005 [0] recv: ACKNACK(F#2:1/12:110000000000 L(:1c1 16938.334485) 110cd0d:56a27910:57318171:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 complying RX1non-timed queue now has 1 items -1711462090.675020 [0] tev: xpack_addmsg 0x770414001390 0x653a1b44c6d0 0(rexmit(110aba1:7b19badd:ce0adb73:3c2:#1/1)): niov 0 sz 0 => now niov 3 sz 244 -1711462090.675025 [0] recv: RX2non-timed queue now has 1 items -1711462090.675039 [0] recv: rexmit#2 maxseq:2<12<=12defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:3c2 -> 110cd0d:56a27910:57318171:3c7 - queue for transmit -1711462090.675048 [0] recv: ) -1711462090.675054 [0] tev: xpack_addmsg 0x770414001390 0x653a1b3a0d30 0(rexmit(110aba1:7b19badd:ce0adb73:3c2:#2/1)): niov 3 sz 244 => now niov 5 sz 480 -1711462090.675059 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.675075 [0] tev: nn_xpack_send 480: 0x77041400139c:20 0x653a1b39e638:52 0x653a1b4036c4:172 0x653a1b3a18d8:36 0x653a1af8b024:200 [ udp/10.101.12.71:7410@2 ] -1711462090.675078 [0] recv: ACKNACK(F#13:13/0: L(:1c1 16938.334485) 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK10 RM0 setting-has-replied-to-hb happy-now) -1711462090.675079 [0] tev: traffic-xmit (1) 480 -1711462090.675089 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462090.675101 [0] recv: ACKNACK(F#7:13/0: L(:1c1 16938.334485) 110cd0d:79d6eeac:ea4a8907:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK10 RM0 setting-has-replied-to-hb happy-now) -1711462090.675107 [0] recv: INFOSRC(110cd0d:56a27910:57318171 vendor 1.16) -1711462090.675121 [0] recv: ACKNACK(F#2:1/10:1000000000 110cd0d:56a27910:57318171:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 complying RX1non-timed queue now has 1 items -1711462090.675130 [0] recv: rexmit#1 maxseq:1<10<=10defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:4c2 -> 110cd0d:56a27910:57318171:4c7 - queue for transmit -1711462090.675132 [0] tev: xpack_addmsg 0x770414001390 0x77040c005dc0 0(rexmit(110aba1:7b19badd:ce0adb73:4c2:#1/1)): niov 0 sz 0 => now niov 3 sz 248 -1711462090.675153 [0] recv: non-timed queue now has 1 items -1711462090.675168 [0] tev: xpack_addmsg 0x770414001390 0x77040c005c40 0(control): niov 3 sz 248 => now niov 4 sz 280 -1711462090.675173 [0] recv: ) -1711462090.675181 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.675181 [0] tev: nn_xpack_send 280: 0x77041400139c:20 0x77040c005ea8:52 0x653a1b2ca014:176 0x77040c005d38:32 [ udp/10.101.12.71:7410@2 ] -1711462090.675209 [0] recv: ACKNACK(F#11:11/0: 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 ACK9 RM0 setting-has-replied-to-hb happy-now) -1711462090.675222 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462090.675228 [0] recv: ACKNACK(F#6:11/0: 110cd0d:79d6eeac:ea4a8907:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 ACK9 RM0 setting-has-replied-to-hb happy-now) -1711462090.675236 [0] recv: send_deferred_heartbeat: 34e8ac789b0d206c -> 130111643236e53f - queue for transmit -1711462090.675240 [0] recv: non-timed queue now has 1 items -1711462090.675255 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 92 from udp/10.101.12.71:58212 -1711462090.675259 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.675268 [0] recv: ACKNACK(F#2:1/0: L(:1c1 16938.334762) 110e21c:d0762c48:a9f0fb28:300c4 -> 110aba1:7b19badd:ce0adb73:300c3) -1711462090.675275 [0] recv: ACKNACK(F#2:1/0: 110e21c:d0762c48:a9f0fb28:301c4 -> 110aba1:7b19badd:ce0adb73:301c3) -1711462090.675281 [0] tev: traffic-xmit (1) 280 -1711462090.675290 [0] tev: xpack_addmsg 0x770414001390 0x77040c005f40 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.675299 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x77040c006028:48 [ udp/10.101.12.71:7410@2 ] -1711462090.675304 [0] tev: traffic-xmit (1) 68 -1711462090.675641 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 480 from udp/10.101.12.71:50807 -1711462090.675655 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.675671 [0] recv: ACKNACK(F#2:2/0: L(:1c1 16938.335156) 110cd0d:56a27910:57318171:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 setting-has-replied-to-hb happy-now) -1711462090.675681 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.675692 [0] recv: ACKNACK(F#8:2/0: L(:1c1 16938.335156) 110cd0d:e3b81b8d:1ccb65b1:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 setting-has-replied-to-hb happy-now) -1711462090.675698 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462090.675708 [0] recv: ACKNACK(F#6:2/0: L(:1c1 16938.335156) 110cd0d:79d6eeac:ea4a8907:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 setting-has-replied-to-hb happy-now) -1711462090.675715 [0] recv: INFOSRC(110cd0d:56a27910:57318171 vendor 1.16) -1711462090.675725 [0] recv: ACKNACK(F#2:1/0: 110cd0d:56a27910:57318171:300c4 -> 110aba1:7b19badd:ce0adb73:300c3 setting-has-replied-to-hb happy-now) -1711462090.675731 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.675739 [0] recv: ACKNACK(F#6:1/0: 110cd0d:e3b81b8d:1ccb65b1:300c4 -> 110aba1:7b19badd:ce0adb73:300c3 setting-has-replied-to-hb happy-now) -1711462090.675748 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462090.675761 [0] recv: ACKNACK(F#4:1/0: 110cd0d:79d6eeac:ea4a8907:300c4 -> 110aba1:7b19badd:ce0adb73:300c3 setting-has-replied-to-hb happy-now) -1711462090.675767 [0] recv: INFOSRC(110cd0d:56a27910:57318171 vendor 1.16) -1711462090.675776 [0] recv: ACKNACK(F#2:1/0: 110cd0d:56a27910:57318171:301c4 -> 110aba1:7b19badd:ce0adb73:301c3 setting-has-replied-to-hb happy-now) -1711462090.675783 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.675790 [0] recv: ACKNACK(F#6:1/0: 110cd0d:e3b81b8d:1ccb65b1:301c4 -> 110aba1:7b19badd:ce0adb73:301c3 setting-has-replied-to-hb happy-now) -1711462090.675796 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462090.675803 [0] recv: ACKNACK(F#4:1/0: 110cd0d:79d6eeac:ea4a8907:301c4 -> 110aba1:7b19badd:ce0adb73:301c3 setting-has-replied-to-hb happy-now) -1711462090.675943 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 92 from udp/10.101.12.71:50807 -1711462090.675950 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.675965 [0] recv: ACKNACK(F#3:13/0: L(:1c1 16938.335453) 110cd0d:56a27910:57318171:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK10 RM0 setting-has-replied-to-hb happy-now) -1711462090.675979 [0] recv: ACKNACK(F#3:11/0: 110cd0d:56a27910:57318171:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 ACK9 RM0 setting-has-replied-to-hb happy-now) -1711462090.677479 [0] recvUC: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 124 from udp/10.101.12.71:50807 -1711462090.677491 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.677514 [0] recvUC: HEARTBEAT(#7:12..12 L(:1c1 16938.336993)110cd0d:56a27910:57318171:403 -> 110aba1:7b19badd:ce0adb73:0: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:504 #12) 110aba1:7b19badd:ce0adb73:504@11) -1711462090.677520 [0] recvUC: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.677550 [0] recvUC: HEARTBEAT(#26:13..13 L(:1c1 16938.336993)110cd0d:e3b81b8d:1ccb65b1:403 -> 110aba1:7b19badd:ce0adb73:0: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:504 #13) 110aba1:7b19badd:ce0adb73:504@12) -1711462090.677557 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110cd0d:56a27910:57318171:403: F#1:12/1:1 -1711462090.677563 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110cd0d:56a27910:57318171:403) -1711462090.677568 [0] tev: xpack_addmsg 0x770414001390 0x77040c005f40 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.677574 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110cd0d:e3b81b8d:1ccb65b1:403: F#1:13/1:1 -1711462090.677577 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110cd0d:e3b81b8d:1ccb65b1:403) -1711462090.677582 [0] tev: xpack_addmsg 0x770414001390 0x77040c005dc0 0(control): niov 2 sz 68 => now niov 3 sz 116 -1711462090.677603 [0] tev: nn_xpack_send 116: 0x77041400139c:20 0x77040c006028:48 0x77040c005ea8:48 [ udp/10.101.12.71:7411@2 ] -1711462090.677606 [0] tev: traffic-xmit (1) 116 -1711462090.677622 [0] recvUC: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 68 from udp/10.101.12.71:50807 -1711462090.677630 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.677649 [0] recvUC: HEARTBEAT(#18:13..13 L(:1c1 16938.337132)110cd0d:79d6eeac:ea4a8907:403 -> 110aba1:7b19badd:ce0adb73:0: end-of-tl-seq(rd 110aba1:7b19badd:ce0adb73:504 #13) 110aba1:7b19badd:ce0adb73:504@12) -1711462090.677656 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110cd0d:79d6eeac:ea4a8907:403: F#1:13/1:1 -1711462090.677660 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110cd0d:79d6eeac:ea4a8907:403) -1711462090.677665 [0] tev: xpack_addmsg 0x770414001390 0x77040c005f40 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.677674 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x77040c006028:48 [ udp/10.101.12.71:7411@2 ] -1711462090.677678 [0] tev: traffic-xmit (1) 68 -1711462090.677715 [0] recvUC: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 544 from udp/10.101.12.71:50807 -1711462090.677727 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.677734 [0] recvUC: INFOTS(1711462090.149525610) -1711462090.677859 [0] recvUC: DATA(110cd0d:56a27910:57318171:403 -> 110aba1:7b19badd:ce0adb73:504 #12 L(:1c1 16938.337229) msr_in_sync(110aba1:7b19badd:ce0adb73:504 out-of-sync to tlcatchup)data(application, vendor 1.16): 110cd0d:56a27910:57318171:403 #12: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162, =>110aba1:7b19badd:ce0adb73:504 -1711462090.677877 [0] recvUC: ) -1711462090.677889 [0] recvUC: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 632 from udp/10.101.12.71:50807 -1711462090.677898 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.677903 [0] recvUC: INFOTS(1711462069.292105261) -1711462090.678009 [0] recvUC: DATA(110cd0d:e3b81b8d:1ccb65b1:403 -> 110aba1:7b19badd:ce0adb73:504 #13 L(:1c1 16938.337400) msr_in_sync(110aba1:7b19badd:ce0adb73:504 out-of-sync to tlcatchup)data(application, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:403 #13: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,12,3,0,0,0,0,0,0 =>110aba1:7b19badd:ce0adb73:504 -1711462090.678021 [0] recvUC: ) -1711462090.678026 [0] recvUC: INFOSRC(110cd0d:56a27910:57318171 vendor 1.16) -1711462090.678041 [0] recvUC: HEARTBEAT(#8:12..12 L(:1c1 16938.337400)110cd0d:56a27910:57318171:403 -> 110aba1:7b19badd:ce0adb73:504: 110aba1:7b19badd:ce0adb73:504@12(sync)) -1711462090.678046 [0] recvUC: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.678055 [0] recvUC: HEARTBEAT(#27:13..13 110cd0d:e3b81b8d:1ccb65b1:403 -> 110aba1:7b19badd:ce0adb73:504: 110aba1:7b19badd:ce0adb73:504@13(sync)) -1711462090.678066 [0] recvUC: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 520 from udp/10.101.12.71:50807 -1711462090.678066 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110cd0d:56a27910:57318171:403: F#2:13/0: -1711462090.678085 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110cd0d:56a27910:57318171:403) -1711462090.678074 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.678090 [0] tev: xpack_addmsg 0x770414001390 0x77040c005f40 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.678106 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110cd0d:e3b81b8d:1ccb65b1:403: F#2:14/0: -1711462090.678098 [0] recvUC: INFOTS(1711462089.657917473) -1711462090.678109 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110cd0d:e3b81b8d:1ccb65b1:403) -1711462090.678122 [0] tev: xpack_addmsg 0x770414001390 0x77040c005dc0 0(control): niov 2 sz 64 => now niov 3 sz 108 -1711462090.678133 [0] tev: nn_xpack_send 108: 0x77041400139c:20 0x77040c006028:44 0x77040c005ea8:44 [ udp/10.101.12.71:7411@2 ] -1711462090.678136 [0] tev: traffic-xmit (1) 108 -1711462090.678222 [0] recvUC: DATA(110cd0d:79d6eeac:ea4a8907:403 -> 110aba1:7b19badd:ce0adb73:504 #13 L(:1c1 16938.337576) msr_in_sync(110aba1:7b19badd:ce0adb73:504 out-of-sync to tlcatchup)data(application, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:403 #13: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16 =>110aba1:7b19badd:ce0adb73:504 -1711462090.678233 [0] recvUC: ) -1711462090.678244 [0] recvUC: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 68 from udp/10.101.12.71:50807 -1711462090.678249 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.678261 [0] recvUC: HEARTBEAT(#19:13..13 L(:1c1 16938.337752)110cd0d:79d6eeac:ea4a8907:403 -> 110aba1:7b19badd:ce0adb73:504: 110aba1:7b19badd:ce0adb73:504@13(sync)) -1711462090.678267 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110cd0d:79d6eeac:ea4a8907:403: F#2:14/0: -1711462090.678271 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110cd0d:79d6eeac:ea4a8907:403) -1711462090.678275 [0] tev: xpack_addmsg 0x770414001390 0x77040c005f40 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.678284 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x77040c006028:44 [ udp/10.101.12.71:7411@2 ] -1711462090.678287 [0] tev: traffic-xmit (1) 64 -1711462090.685477 [0] recvUC: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462090.685489 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.685501 [0] recvUC: ACKNACK(#0:1/0: L(:1c1 16938.344991) 110cd0d:56a27910:57318171:504 -> 110aba1:7b19badd:ce0adb73:403 preemptive-nack rebase defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:403 -> 110cd0d:56a27910:57318171:504 - queue for transmit -1711462090.685511 [0] recvUC: non-timed queue now has 1 items -1711462090.685516 [0] recvUC: ) -1711462090.685522 [0] recvUC: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462090.685531 [0] recvUC: ACKNACK(#0:1/0: L(:1c1 16938.344991) 110cd0d:79d6eeac:ea4a8907:504 -> 110aba1:7b19badd:ce0adb73:403 preemptive-nack rebase defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:403 -> 110cd0d:79d6eeac:ea4a8907:504 - queue for transmit -1711462090.685533 [0] tev: xpack_addmsg 0x770414001390 0x770404002e30 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.685545 [0] recvUC: non-timed queue now has 1 items -1711462090.685555 [0] recvUC: ) -1711462090.685560 [0] tev: xpack_addmsg 0x770414001390 0x770404002fb0 0(control): niov 2 sz 68 => now niov 3 sz 116 -1711462090.685560 [0] recvUC: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.685572 [0] tev: nn_xpack_send 116: 0x77041400139c:20 0x770404002f18:48 0x770404003098:48 [ udp/10.101.12.71:7411@2 ] -1711462090.685582 [0] tev: traffic-xmit (1) 116 -1711462090.685583 [0] recvUC: ACKNACK(#0:1/0: L(:1c1 16938.344991) 110cd0d:e3b81b8d:1ccb65b1:504 -> 110aba1:7b19badd:ce0adb73:403 preemptive-nack rebase defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:403 -> 110cd0d:e3b81b8d:1ccb65b1:504 - queue for transmit -1711462090.685603 [0] recvUC: non-timed queue now has 1 items -1711462090.685610 [0] recvUC: ) -1711462090.685614 [0] tev: xpack_addmsg 0x770414001390 0x770404003130 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.685624 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x770404003218:48 [ udp/10.101.12.71:7411@2 ] -1711462090.685628 [0] tev: traffic-xmit (1) 68 -1711462090.685680 [0] recvUC: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 68 from udp/10.101.12.71:50807 -1711462090.685692 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.685712 [0] recvUC: ACKNACK(F#1:12/1:1 L(:1c1 16938.345194) 110cd0d:56a27910:57318171:504 -> 110aba1:7b19badd:ce0adb73:403 ACK9 RM0 complying RX12non-timed queue now has 1 items -1711462090.685723 [0] recvUC: rexmit#1 maxseq:12<12<=12defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:403 -> 110cd0d:56a27910:57318171:504 - queue for transmit -1711462090.685727 [0] tev: xpack_addmsg 0x770414001390 0x7704040032b0 0(rexmit(110aba1:7b19badd:ce0adb73:403:#12/1)): niov 0 sz 0 => now niov 3 sz 632 -1711462090.685731 [0] recvUC: ) -1711462090.685742 [0] tev: nn_xpack_send 632: 0x77041400139c:20 0x770404003398:52 0x653a1b3a15d0:560 [ udp/10.101.12.71:7411@2 ] -1711462090.685749 [0] recvUC: send_deferred_heartbeat: 3aa8b43931dec43 -> 52c2ca619c723b37 - queue for transmit -1711462090.685759 [0] recvUC: non-timed queue now has 1 items -1711462090.685762 [0] tev: traffic-xmit (1) 632 -1711462090.685772 [0] recvUC: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 68 from udp/10.101.12.71:50807 -1711462090.685774 [0] tev: xpack_addmsg 0x770414001390 0x770404003430 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.685783 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.685800 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x770404003518:48 [ udp/10.101.12.71:7411@2 ] -1711462090.685805 [0] tev: traffic-xmit (1) 68 -1711462090.685812 [0] recvUC: ACKNACK(F#8:12/1:1 L(:1c1 16938.345285) 110cd0d:79d6eeac:ea4a8907:504 -> 110aba1:7b19badd:ce0adb73:403 ACK8 RM0 complying RX12non-timed queue now has 1 items -1711462090.685822 [0] recvUC: rexmit#1 maxseq:12<12<=12defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:403 -> 110cd0d:79d6eeac:ea4a8907:504 - queue for transmit -1711462090.685825 [0] tev: xpack_addmsg 0x770414001390 0x7704040035b0 0(rexmit(110aba1:7b19badd:ce0adb73:403:#12/1)): niov 0 sz 0 => now niov 3 sz 632 -1711462090.685831 [0] recvUC: ) -1711462090.685839 [0] recvUC: send_deferred_heartbeat: 3aa8b43931dec43 -> e46f26c62d5068b - queue for transmit -1711462090.685846 [0] recvUC: non-timed queue now has 1 items -1711462090.685859 [0] tev: xpack_addmsg 0x770414001390 0x770404003730 0(control): niov 3 sz 632 => now niov 4 sz 664 -1711462090.685859 [0] recvUC: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 68 from udp/10.101.12.71:50807 -1711462090.685872 [0] tev: nn_xpack_send 664: 0x77041400139c:20 0x770404003698:52 0x653a1b3a15d0:560 0x770404003828:32 [ udp/10.101.12.71:7411@2 ] -1711462090.685878 [0] tev: traffic-xmit (1) 664 -1711462090.685886 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.685902 [0] recvUC: ACKNACK(F#17:12/1:1 L(:1c1 16938.345388) 110cd0d:e3b81b8d:1ccb65b1:504 -> 110aba1:7b19badd:ce0adb73:403 ACK8 RM0 complying RX12non-timed queue now has 1 items -1711462090.685911 [0] recvUC: rexmit#1 maxseq:12<12<=12defer_heartbeat_to_peer: 110aba1:7b19badd:ce0adb73:403 -> 110cd0d:e3b81b8d:1ccb65b1:504 - queue for transmit -1711462090.685915 [0] tev: xpack_addmsg 0x770414001390 0x7704040038b0 0(rexmit(110aba1:7b19badd:ce0adb73:403:#12/1)): niov 0 sz 0 => now niov 3 sz 632 -1711462090.685917 [0] recvUC: ) -1711462090.685924 [0] recvUC: send_deferred_heartbeat: 3aa8b43931dec43 -> a5c74bd281b51900 - queue for transmit -1711462090.685926 [0] tev: nn_xpack_send 632: 0x77041400139c:20 0x770404003998:52 0x653a1b3a15d0:560 [ udp/10.101.12.71:7411@2 ] -1711462090.685930 [0] recvUC: non-timed queue now has 1 items -1711462090.685931 [0] tev: traffic-xmit (1) 632 -1711462090.685944 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.685953 [0] tev: nn_xpack_send 68: 0x77041400139c:20 0x770404003b18:48 [ udp/10.101.12.71:7411@2 ] -1711462090.685963 [0] tev: traffic-xmit (1) 68 -1711462090.686269 [0] recvUC: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 64 from udp/10.101.12.71:50807 -1711462090.686279 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.686292 [0] recvUC: ACKNACK(F#2:13/0: L(:1c1 16938.345781) 110cd0d:56a27910:57318171:504 -> 110aba1:7b19badd:ce0adb73:403 ACK1 RM0 setting-has-replied-to-hb happy-now) -1711462090.686335 [0] recvUC: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 64 from udp/10.101.12.71:50807 -1711462090.686343 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.686353 [0] recvUC: ACKNACK(F#9:13/0: L(:1c1 16938.345846) 110cd0d:79d6eeac:ea4a8907:504 -> 110aba1:7b19badd:ce0adb73:403 ACK1 RM0 setting-has-replied-to-hb happy-now) -1711462090.686441 [0] recvUC: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 64 from udp/10.101.12.71:50807 -1711462090.686449 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.686459 [0] recvUC: ACKNACK(F#18:13/0: L(:1c1 16938.345951) 110cd0d:e3b81b8d:1ccb65b1:504 -> 110aba1:7b19badd:ce0adb73:403 ACK1 RM0 setting-has-replied-to-hb happy-now) -1711462090.690247 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:403) suppressed, resched in 0.1 s (min-ack 3, avail-seq 12, xmit 12) -1711462090.774454 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:3c2) suppressed, resched in inf s (min-ack 12, avail-seq 12, xmit 12) -1711462090.774475 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:4c2) suppressed, resched in inf s (min-ack 10, avail-seq 10, xmit 10) -1711462090.774480 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:200c2) suppressed, resched in inf s (min-ack 1, avail-seq 1, xmit 1) -1711462090.774484 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:300c3) suppressed, resched in inf s (min-ack 0, avail-seq 0, xmit 0) -1711462090.774488 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:301c3) suppressed, resched in inf s (min-ack 0, avail-seq 0, xmit 0) -1711462090.774544 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462090.774574 [0] recvMC: HEARTBEAT(#50:42..42 L(:1c1 16938.434064)110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@42(sync)) -1711462090.774635 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#3:43/0: -1711462090.774652 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462090.774657 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.774685 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7415@2 ] -1711462090.774689 [0] tev: traffic-xmit (1) 64 -1711462090.790396 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 3 seq 12 maxseq 12) -1711462090.790422 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:403) sent, resched in 0.1 s (min-ack 3, avail-seq 12, xmit 12) -1711462090.790429 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462090.790472 [0] tev: nn_xpack_send 52: 0x77041400139c:20 0x770404003b28:32 [ udp/239.255.0.1:7401@2 ] -1711462090.790475 [0] tev: traffic-xmit (1) 52 -1711462090.790638 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 52 from udp/10.101.12.71:52025 -1711462090.790664 [0] recvMC: HEARTBEAT(#22:12..12 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.790868 [0] recvUC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462090.790890 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.790906 [0] recvUC: ACKNACK(F#3:13/0: L(:1c1 16938.450391) 110d7b4:17c5b8c5:94bd0ff4:504 -> 110aba1:7b19badd:ce0adb73:403 ACK9 RM0) -1711462090.790918 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462090.790922 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.790932 [0] recvUC: ACKNACK(F#3:13/0: L(:1c1 16938.450425) 110443d:bb7f10a5:18901533:504 -> 110aba1:7b19badd:ce0adb73:403 ACK9 RM0) -1711462090.790941 [0] recvUC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462090.790945 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.790953 [0] recvUC: ACKNACK(F#3:13/0: L(:1c1 16938.450448) 110e21c:d0762c48:a9f0fb28:504 -> 110aba1:7b19badd:ce0adb73:403 ACK9 RM0) -1711462090.790961 [0] recvUC: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462090.790965 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462090.790973 [0] recvUC: ACKNACK(F#3:13/0: L(:1c1 16938.450468) 110cd0d:56a27910:57318171:504 -> 110aba1:7b19badd:ce0adb73:403) -1711462090.790977 [0] recvUC: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462090.790984 [0] recvUC: ACKNACK(F#19:13/0: L(:1c1 16938.450468) 110cd0d:e3b81b8d:1ccb65b1:504 -> 110aba1:7b19badd:ce0adb73:403) -1711462090.790988 [0] recvUC: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462090.790995 [0] recvUC: ACKNACK(F#10:13/0: L(:1c1 16938.450468) 110cd0d:79d6eeac:ea4a8907:504 -> 110aba1:7b19badd:ce0adb73:403) -1711462090.890548 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:403) suppressed, resched in inf s (min-ack 12, avail-seq 12, xmit 12) -1711462091.469301 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 256 from udp/10.101.12.71:40473 -1711462091.469337 [0] recv: INFOTS(1711462091.469007481) -1711462091.469354 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #43 L(:1c1 16939.128838)) -1711462091.469420 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #43: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/topological_map_2",type_name="std_msgs::msg::dds_::String_",durability=1,durability_service=0:0:10:-1:-1:-1,reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462091.469317 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2096 from udp/10.101.12.71:40473 -1711462091.469473 [0] recvMC: INFOTS(1711462091.469060530) -1711462091.469464 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5603 reliable transient-local writer unnamed: (default).rt/topological_map_2/std_msgs::msg::dds_::String_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=0<>,topic_name="rt/topological_map_2",type_name="std_msgs::msg::dds_::String_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:10:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462091.469484 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #43 L(:1c1 16939.128974) => EVERYONE -1711462091.469540 [0] dq.builtin: => EVERYONE -1711462091.469581 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #43: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462091.469592 [0] recvMC: HEARTBEAT(#51:43..43 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@43(sync)) -1711462091.469593 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:5603) scanning all rds of topic rt/topological_map_2 -1711462091.469632 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#4:44/0: -1711462091.469875 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462091.469883 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462091.469885 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462091.469891 [0] recvMC: HEARTBEAT(#1:1..0 L(:1c1 16939.129391)110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0:110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 no-reliable-readers) -1711462091.469924 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7415@2 ] -1711462091.469932 [0] tev: traffic-xmit (1) 64 -1711462091.481806 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 200 from udp/10.101.12.71:40473 -1711462091.481821 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2120 from udp/10.101.12.71:40473 -1711462091.481851 [0] recvMC: INFOTS(1711462091.481540997) -1711462091.481834 [0] recv: INFOTS(1711462091.481496692) -1711462091.481869 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #44 L(:1c1 16939.141352) => EVERYONE -1711462091.481881 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #44) -1711462091.481976 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #44: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/tf",type_name="tf2_msgs::msg::dds_::TFMessage_",reliability=1:9223372036854775807,history=0:100,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5703},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462091.482006 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #44: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462091.482019 [0] recvMC: HEARTBEAT(F#52:44..44 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@44(sync)) -1711462091.482031 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5703 reliable volatile writer unnamed: (default).rt/tf/tf2_msgs::msg::dds_::TFMessage_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=0<>,topic_name="rt/tf",type_name="tf2_msgs::msg::dds_::TFMessage_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:100,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462091.482293 [0] dq.builtin: => EVERYONE -1711462091.482314 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:5703) scanning all rds of topic rt/tf -1711462091.482986 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 276 from udp/10.101.12.71:40473 -1711462091.483001 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2144 from udp/10.101.12.71:40473 -1711462091.483027 [0] recvMC: INFOTS(1711462091.482763810) -1711462091.483009 [0] recv: INFOTS(1711462091.482728775) -1711462091.483042 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #45 L(:1c1 16939.142528) => EVERYONE -1711462091.483050 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #45) -1711462091.483094 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #45: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/topological_map",type_name="topological_navigation_msgs::msg::dds_::TopologicalMap_",durability=1,durability_service=0:0:10:-1:-1:-1,reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462091.483145 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5803 reliable transient-local writer unnamed: (default).rt/topological_map/topological_navigation_msgs::msg::dds_::TopologicalMap_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=0<>,topic_name="rt/topological_map",type_name="topological_navigation_msgs::msg::dds_::TopologicalMap_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:10:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462091.483169 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #45: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462091.483181 [0] recvMC: HEARTBEAT(F#53:45..45 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@45(sync)) -1711462091.483190 [0] dq.builtin: => EVERYONE -1711462091.483204 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:5803) scanning all rds of topic rt/topological_map -1711462091.569367 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462091.569407 [0] recv: HEARTBEAT(#9:1..45 L(:1c1 16939.228892)110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:3c7@45(sync)) -1711462091.569574 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#4:46/0: -1711462091.569608 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462091.569618 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462091.569653 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7414@2 ] -1711462091.569662 [0] tev: traffic-xmit (1) 64 -1711462091.571599 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 460 from udp/10.101.12.71:58212 -1711462091.571624 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462091.571632 [0] recv: INFOTS(1711462090.519442682) -1711462091.571648 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462091.571657 [0] recv: thread_cputime 0.007394000 -1711462091.571686 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 460 from udp/10.101.12.71:44991 -1711462091.571694 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462091.571700 [0] recv: INFOTS(1711462090.549308855) -1711462091.571708 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462091.571751 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462091.571777 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16939.231277) -1711462091.571785 [0] dq.builtin: thread_cputime 0.005238000 -1711462091.571818 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462091.571829 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 460 from udp/10.101.12.71:40473 -1711462091.571849 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462091.571832 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16939.231333) -1711462091.571860 [0] recv: INFOTS(1711462090.541682763) -1711462091.571884 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462091.571977 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462091.571999 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16939.231500) -1711462091.573055 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 1356 from udp/10.101.12.71:50807 -1711462091.573073 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462091.573081 [0] recv: INFOTS(1711462090.143481252) -1711462091.573095 [0] recv: DATA(110cd0d:56a27910:57318171:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462091.573101 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462091.573106 [0] recv: INFOTS(1711462067.905323275) -1711462091.573113 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462091.573118 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462091.573123 [0] recv: INFOTS(1711462069.653526636) -1711462091.573130 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462091.573155 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:56a27910:57318171:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462091.573180 [0] dq.builtin: SPDP ST0 110cd0d:56a27910:57318171:1c1 (known) L(:1c1 16939.232680) -1711462091.573213 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462091.573226 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (known) L(:1c1 16939.232728) -1711462091.573256 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462091.573266 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (known) L(:1c1 16939.232768) -1711462091.625953 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #1: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462091,625880474},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462091.625991 [0] python3: => EVERYONE -1711462091.669877 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462091.669988 [0] recvMC: HEARTBEAT(#54:45..45 L(:1c1 16939.329448)110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@45(sync)) -1711462091.670004 [0] recvMC: thread_cputime 0.001222000 -1711462091.670056 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462091.670059 [0] tev: thread_cputime 0.000000000 -1711462091.670154 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#5:46/0: -1711462091.670194 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462091.670079 [0] recvMC: HEARTBEAT(#3:1..1 L(:1c1 16939.329571)110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0:110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 no-reliable-readers) -1711462091.670274 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462091.670393 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7415@2 ] -1711462091.670449 [0] tev: traffic-xmit (1) 64 -1711462091.671717 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20568 from udp/10.101.12.71:40473 -1711462091.671766 [0] recvMC: INFOTS(1711462091.478307355) -1711462091.671793 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[1..1]/[0..20500) of 340680 L(:1c1 16939.331265) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.673579 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.673640 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[5..5]/[82000..102500) of 340680 L(:1c1 16939.333125) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.673679 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.673693 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[6..6]/[102500..123000) of 340680 L(:1c1 16939.333190) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.673951 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.674000 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[7..7]/[123000..143500) of 340680 L(:1c1 16939.333487) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.674027 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.674043 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[8..8]/[143500..164000) of 340680 L(:1c1 16939.333540) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.674099 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.674112 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[9..9]/[164000..184500) of 340680 L(:1c1 16939.333610) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.674365 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.674416 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[10..10]/[184500..205000) of 340680 L(:1c1 16939.333903) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.674444 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.674459 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[11..11]/[205000..225500) of 340680 L(:1c1 16939.333956) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.674536 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.674561 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[12..12]/[225500..246000) of 340680 L(:1c1 16939.334057) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.676611 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.676656 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[13..13]/[246000..266500) of 340680 L(:1c1 16939.336147) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.676681 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.676696 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[14..14]/[266500..287000) of 340680 L(:1c1 16939.336194) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.676714 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.676723 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[15..15]/[287000..307500) of 340680 L(:1c1 16939.336222) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.676743 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.676780 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[16..16]/[307500..328000) of 340680 L(:1c1 16939.336279) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.680215 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 12736 from udp/10.101.12.71:40473 -1711462091.680276 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[17..17]/[328000..340680) of 340680 L(:1c1 16939.339763) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.680326 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.680343 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[2..2]/[20500..41000) of 340680 L(:1c1 16939.339840) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.680389 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.680400 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[3..3]/[41000..61500) of 340680 L(:1c1 16939.339898) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.680626 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.680677 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[4..4]/[61500..82000) of 340680 L(:1c1 16939.340164) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.680709 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.680732 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[5..5]/[82000..102500) of 340680 L(:1c1 16939.340229) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.680752 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.680766 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[6..6]/[102500..123000) of 340680 L(:1c1 16939.340265) 110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: no readers) -1711462091.906149 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462091.906213 [0] recv: INFOTS(1711462091.905809560) -1711462091.906241 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:200c2 -> 0:0:0:0 #4 L(:1c1 16939.565712)) -1711462091.906272 [0] recv: HEARTBEAT(#29:4..4 110cd0d:e3b81b8d:1ccb65b1:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@4(sync)) -1711462091.906326 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2: F#3:5/0: -1711462091.906361 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110cd0d:e3b81b8d:1ccb65b1:200c2) -1711462091.906377 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462091.906383 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:200c2 #4: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:e3b81b8d:1ccb65b1:1}:1<0> -1711462091.906415 [0] dq.builtin: PMD ST0 pp 110cd0d:e3b81b8d:1ccb65b1 kind 1 data 1 -1711462091.906527 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7410@2 ] -1711462091.906560 [0] tev: traffic-xmit (1) 64 -1711462092.006445 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462092.006547 [0] recv: INFOTS(1711462067.905323275) -1711462092.006631 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 0:0:0:0 #1) -1711462092.006678 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462092.006695 [0] recv: INFOTS(1711462067.905323275) -1711462092.006714 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 0:0:0:0 #1) -1711462092.006806 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462092.006865 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (known) L(:1c1 16939.666361) -1711462092.006927 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462092.006948 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (known) L(:1c1 16939.666447) -1711462092.571680 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 460 from udp/10.101.12.71:58212 -1711462092.571759 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462092.571779 [0] recv: INFOTS(1711462090.519442682) -1711462092.571813 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462092.571833 [0] recv: thread_cputime 0.008399000 -1711462092.571866 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 460 from udp/10.101.12.71:40473 -1711462092.571882 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462092.571893 [0] recv: INFOTS(1711462090.541682763) -1711462092.571909 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462092.571988 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 460 from udp/10.101.12.71:44991 -1711462092.572005 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462092.572016 [0] recv: INFOTS(1711462090.549308855) -1711462092.572032 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462092.572104 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462092.572191 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16940.231685) -1711462092.572266 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462092.572292 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16940.231791) -1711462092.572309 [0] dq.builtin: thread_cputime 0.005635000 -1711462092.572373 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462092.572396 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16940.231895) -1711462092.573601 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 1356 from udp/10.101.12.71:50807 -1711462092.573654 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462092.573670 [0] recv: INFOTS(1711462090.143481252) -1711462092.573703 [0] recv: DATA(110cd0d:56a27910:57318171:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462092.573716 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462092.573725 [0] recv: INFOTS(1711462067.905323275) -1711462092.573738 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462092.573747 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462092.573757 [0] recv: INFOTS(1711462069.653526636) -1711462092.573770 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462092.573971 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:56a27910:57318171:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462092.574038 [0] dq.builtin: SPDP ST0 110cd0d:56a27910:57318171:1c1 (known) L(:1c1 16940.233533) -1711462092.574103 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462092.574126 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (known) L(:1c1 16940.233625) -1711462092.574182 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462092.574204 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (known) L(:1c1 16940.233703) -1711462092.628483 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #2: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462092,628416427},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462092.628536 [0] python3: => EVERYONE -1711462093.571895 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 460 from udp/10.101.12.71:58212 -1711462093.571959 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462093.571977 [0] recv: INFOTS(1711462090.519442682) -1711462093.572011 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462093.572030 [0] recv: thread_cputime 0.009172000 -1711462093.572061 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 460 from udp/10.101.12.71:40473 -1711462093.572076 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462093.572090 [0] recv: INFOTS(1711462090.541682763) -1711462093.572107 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462093.572136 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 460 from udp/10.101.12.71:44991 -1711462093.572148 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462093.572159 [0] recv: INFOTS(1711462090.549308855) -1711462093.572174 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462093.572301 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462093.572393 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16941.231886) -1711462093.572485 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462093.572549 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16941.232047) -1711462093.572585 [0] dq.builtin: thread_cputime 0.005635000 -1711462093.572652 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462093.572675 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16941.232173) -1711462093.573546 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 1356 from udp/10.101.12.71:50807 -1711462093.573605 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462093.573624 [0] recv: INFOTS(1711462090.143481252) -1711462093.573655 [0] recv: DATA(110cd0d:56a27910:57318171:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462093.573668 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462093.573679 [0] recv: INFOTS(1711462067.905323275) -1711462093.573692 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462093.573703 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462093.573713 [0] recv: INFOTS(1711462069.653526636) -1711462093.573727 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 110aba1:7b19badd:ce0adb73:100c7 #1) -1711462093.573897 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:56a27910:57318171:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462093.573974 [0] dq.builtin: SPDP ST0 110cd0d:56a27910:57318171:1c1 (known) L(:1c1 16941.233468) -1711462093.574039 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462093.574062 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (known) L(:1c1 16941.233560) -1711462093.574118 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462093.574138 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (known) L(:1c1 16941.233637) -1711462093.631085 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #3: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462093,631011940},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462093.631123 [0] python3: => EVERYONE -1711462093.654843 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462093.654912 [0] recv: INFOTS(1711462093.654299867) -1711462093.654952 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:200c2 -> 0:0:0:0 #4 L(:1c1 16941.314410)) -1711462093.655004 [0] recv: HEARTBEAT(#21:4..4 110cd0d:79d6eeac:ea4a8907:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@4(sync)) -1711462093.655111 [0] tev: thread_cputime 0.000000000 -1711462093.655460 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:200c2 #4: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:79d6eeac:ea4a8907:1}:1<0> -1711462093.655515 [0] dq.builtin: PMD ST0 pp 110cd0d:79d6eeac:ea4a8907 kind 1 data 1 -1711462093.655491 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2: F#3:5/0: -1711462093.655578 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110cd0d:79d6eeac:ea4a8907:200c2) -1711462093.655599 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462093.655690 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7410@2 ] -1711462093.655706 [0] tev: traffic-xmit (1) 64 -1711462093.754387 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462093.754436 [0] recv: INFOTS(1711462069.653526636) -1711462093.754458 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 0:0:0:0 #1) -1711462093.754489 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462093.754496 [0] recv: INFOTS(1711462069.653526636) -1711462093.754515 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 0:0:0:0 #1) -1711462093.754581 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462093.754616 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (known) L(:1c1 16941.414115) -1711462093.754672 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462093.754688 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (known) L(:1c1 16941.414189) -1711462094.633442 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #4: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462094,633356879},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462094.633487 [0] python3: => EVERYONE -1711462095.636690 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #5: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462095,636452133},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462095.636758 [0] python3: => EVERYONE -1711462096.641501 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #6: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462096,641316097},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462096.641580 [0] python3: => EVERYONE -1711462097.645189 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #7: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462097,645025498},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462097.645276 [0] python3: => EVERYONE -1711462098.144633 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462098.144750 [0] recv: INFOTS(1711462098.144063519) -1711462098.144804 [0] recv: DATA(110cd0d:56a27910:57318171:200c2 -> 0:0:0:0 #2 L(:1c1 16945.804248)) -1711462098.144835 [0] recv: HEARTBEAT(#9:2..2 110cd0d:56a27910:57318171:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@2(sync)) -1711462098.144853 [0] recv: thread_cputime 0.010577000 -1711462098.145024 [0] tev: thread_cputime 0.000000000 -1711462098.145041 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:200c2 #2: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:56a27910:57318171:1}:1<0> -1711462098.145156 [0] dq.builtin: PMD ST0 pp 110cd0d:56a27910:57318171 kind 1 data 1 -1711462098.145181 [0] dq.builtin: thread_cputime 0.005635000 -1711462098.145118 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:56a27910:57318171:200c2: F#3:3/0: -1711462098.145465 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110cd0d:56a27910:57318171:200c2) -1711462098.145486 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462098.145582 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7410@2 ] -1711462098.145600 [0] tev: traffic-xmit (1) 64 -1711462098.244408 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462098.244481 [0] recv: INFOTS(1711462090.143481252) -1711462098.244582 [0] recv: DATA(110cd0d:56a27910:57318171:100c2 -> 0:0:0:0 #1) -1711462098.244621 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462098.244631 [0] recv: INFOTS(1711462090.143481252) -1711462098.244645 [0] recv: DATA(110cd0d:56a27910:57318171:100c2 -> 0:0:0:0 #1) -1711462098.244786 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:56a27910:57318171:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.244818 [0] dq.builtin: SPDP ST0 110cd0d:56a27910:57318171:1c1 (known) L(:1c1 16945.904316) -1711462098.244894 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:56a27910:57318171:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.244930 [0] dq.builtin: SPDP ST0 110cd0d:56a27910:57318171:1c1 (known) L(:1c1 16945.904430) -1711462098.520053 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 116 from udp/10.101.12.71:58212 -1711462098.520104 [0] recv: INFOTS(1711462098.519615324) -1711462098.520134 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:200c2 -> 0:0:0:0 #2 L(:1c1 16946.179602)) -1711462098.520183 [0] recv: HEARTBEAT(#10:2..2 110e21c:d0762c48:a9f0fb28:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@2(sync)) -1711462098.520393 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:200c2 #2: ST0 DCPSParticipantMessage/ParticipantMessageData:{110e21c:d0762c48:a9f0fb28:1}:1<0> -1711462098.520463 [0] dq.builtin: PMD ST0 pp 110e21c:d0762c48:a9f0fb28 kind 1 data 1 -1711462098.520394 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110e21c:d0762c48:a9f0fb28:200c2: F#3:3/0: -1711462098.520635 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110e21c:d0762c48:a9f0fb28:200c2) -1711462098.520662 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462098.520774 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7412@2 ] -1711462098.520793 [0] tev: traffic-xmit (1) 64 -1711462098.542263 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 116 from udp/10.101.12.71:40473 -1711462098.542280 [0] recv: INFOTS(1711462098.541939305) -1711462098.542298 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:200c2 -> 0:0:0:0 #2 L(:1c1 16946.201782)) -1711462098.542316 [0] recv: HEARTBEAT(#8:2..2 110d7b4:17c5b8c5:94bd0ff4:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@2(sync)) -1711462098.542395 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:200c2 #2: ST0 DCPSParticipantMessage/ParticipantMessageData:{110d7b4:17c5b8c5:94bd0ff4:1}:1<0> -1711462098.542430 [0] dq.builtin: PMD ST0 pp 110d7b4:17c5b8c5:94bd0ff4 kind 1 data 1 -1711462098.542515 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110d7b4:17c5b8c5:94bd0ff4:200c2: F#3:3/0: -1711462098.542571 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462098.542594 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462098.542707 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7414@2 ] -1711462098.542749 [0] tev: traffic-xmit (1) 64 -1711462098.549632 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 116 from udp/10.101.12.71:44991 -1711462098.549651 [0] recv: INFOTS(1711462098.549450527) -1711462098.549676 [0] recv: DATA(110443d:bb7f10a5:18901533:200c2 -> 0:0:0:0 #2 L(:1c1 16946.209150)) -1711462098.549694 [0] recv: HEARTBEAT(#8:2..2 110443d:bb7f10a5:18901533:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@2(sync)) -1711462098.549868 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:200c2 #2: ST0 DCPSParticipantMessage/ParticipantMessageData:{110443d:bb7f10a5:18901533:1}:1<0> -1711462098.549904 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110443d:bb7f10a5:18901533:200c2: F#4:3/0: -1711462098.549965 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110443d:bb7f10a5:18901533:200c2) -1711462098.549984 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462098.549917 [0] dq.builtin: PMD ST0 pp 110443d:bb7f10a5:18901533 kind 1 data 1 -1711462098.550082 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7416@2 ] -1711462098.550245 [0] tev: traffic-xmit (1) 64 -1711462098.570629 [0] tev: write_sample 110aba1:7b19badd:ce0adb73:200c2 #2: ST0 DCPSParticipantMessage/ParticipantMessageData:{110aba1:7b19badd:ce0adb73:1}:1<0> -1711462098.570680 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(data(110aba1:7b19badd:ce0adb73:200c2:#2/1)): niov 0 sz 0 => now niov 3 sz 84 -1711462098.570691 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:200c2 multicasting (rel-prd 6 seq-eq-max 6 seq 2 maxseq 1) -1711462098.570704 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:200c2) piggybacked, resched in 0.1 s (min-ack 1, avail-seq 2, xmit 1) -1711462098.570712 [0] tev: xpack_addmsg 0x770414001390 0x7704040038b0 0(control): niov 3 sz 84 => now niov 4 sz 116 -1711462098.570784 [0] tev: nn_xpack_send 116: 0x77041400139c:20 0x770404003b28:36 0x77041400279c:28 0x7704040039a8:32 [ udp/239.255.0.1:7400@2 ] -1711462098.570793 [0] tev: traffic-xmit (1) 116 -1711462098.570802 [0] tev: resched pmd(110aba1:7b19badd:ce0adb73:1c1): 8s -1711462098.570830 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 116 from udp/10.101.12.71:52025 -1711462098.570851 [0] recv: INFOTS(1711462098.570608394) -1711462098.570872 [0] recv: DATA(110aba1:7b19badd:ce0adb73:200c2 -> 0:0:0:0 #2 110aba1:7b19badd:ce0adb73:200c2? -> 0:0:0:0) -1711462098.570879 [0] recv: HEARTBEAT(#6:2..2 110aba1:7b19badd:ce0adb73:200c2? -> 0:0:0:0) -1711462098.571015 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462098.571023 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462098.571041 [0] recv: ACKNACK(F#4:3/0: L(:1c1 16946.230525) 110443d:bb7f10a5:18901533:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 ACK1 RM0) -1711462098.571087 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462098.571093 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462098.571102 [0] recv: ACKNACK(F#4:3/0: L(:1c1 16946.230597) 110d7b4:17c5b8c5:94bd0ff4:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 ACK1 RM0) -1711462098.571140 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462098.571148 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462098.571155 [0] recv: ACKNACK(F#4:3/0: L(:1c1 16946.230651) 110e21c:d0762c48:a9f0fb28:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 ACK1 RM0) -1711462098.571163 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462098.571167 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462098.571174 [0] recv: ACKNACK(F#3:3/0: L(:1c1 16946.230670) 110cd0d:56a27910:57318171:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 ACK1 RM0) -1711462098.571178 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462098.571185 [0] recv: ACKNACK(F#9:3/0: L(:1c1 16946.230670) 110cd0d:e3b81b8d:1ccb65b1:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 ACK1 RM0) -1711462098.571189 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462098.571196 [0] recv: ACKNACK(F#7:3/0: L(:1c1 16946.230670) 110cd0d:79d6eeac:ea4a8907:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 ACK1 RM0) -1711462098.620168 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 444 from udp/10.101.12.71:58212 -1711462098.620193 [0] recv: INFOTS(1711462090.519442682) -1711462098.620226 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #1) -1711462098.620331 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 444 from udp/10.101.12.71:58212 -1711462098.620364 [0] recv: INFOTS(1711462090.519442682) -1711462098.620382 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #1) -1711462098.620344 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.620434 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16946.279931) -1711462098.620487 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.620539 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16946.280038) -1711462098.642437 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 444 from udp/10.101.12.71:40473 -1711462098.642485 [0] recv: INFOTS(1711462090.541682763) -1711462098.642546 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 0:0:0:0 #1) -1711462098.642570 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 444 from udp/10.101.12.71:40473 -1711462098.642581 [0] recv: INFOTS(1711462090.541682763) -1711462098.642591 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 0:0:0:0 #1) -1711462098.642631 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.642681 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16946.302181) -1711462098.642723 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.642755 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16946.302256) -1711462098.648195 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #8: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462098,648083000},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462098.648249 [0] python3: => EVERYONE -1711462098.649872 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 444 from udp/10.101.12.71:44991 -1711462098.649901 [0] recv: INFOTS(1711462090.549308855) -1711462098.649927 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #1) -1711462098.649949 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 444 from udp/10.101.12.71:44991 -1711462098.649960 [0] recv: INFOTS(1711462090.549308855) -1711462098.649974 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #1) -1711462098.650023 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.650075 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16946.309575) -1711462098.650128 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.650140 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16946.309642) -1711462098.670621 [0] tev: non-timed queue now has 1 items -1711462098.670666 [0] tev: xmit spdp 110aba1:7b19badd:ce0adb73:1c1 to 0:0:0:100c7 (resched 8s) -1711462098.670680 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:200c2) suppressed, resched in inf s (min-ack 2, avail-seq 2, xmit 2) -1711462098.670690 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 444 -1711462098.670820 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462098.670844 [0] recv: INFOTS(1711462090.570393375) -1711462098.670857 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462098.670868 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462098.670873 [0] recv: INFOTS(1711462090.570393375) -1711462098.670877 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462098.670944 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.670968 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (local) -1711462098.670992 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.671001 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (local) -1711462098.671924 [0] tev: nn_xpack_send 444: 0x77041400139c:20 0x770404003b28:36 0x653a1b2b4514:388 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.(trunc) -1711462098.671937 [0] tev: traffic-xmit (101) 444 -1711462099.651577 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #9: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462099,651428765},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462099.651663 [0] python3: => EVERYONE -1711462099.906728 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462099.906796 [0] recv: INFOTS(1711462099.906152938) -1711462099.906823 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:200c2 -> 0:0:0:0 #5 L(:1c1 16947.566296)) -1711462099.906845 [0] recv: HEARTBEAT(#30:5..5 110cd0d:e3b81b8d:1ccb65b1:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@5(sync)) -1711462099.906862 [0] recv: thread_cputime 0.012825000 -1711462099.907028 [0] tev: thread_cputime 0.000000000 -1711462099.907048 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:200c2 #5: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:e3b81b8d:1ccb65b1:1}:1<0> -1711462099.907153 [0] dq.builtin: PMD ST0 pp 110cd0d:e3b81b8d:1ccb65b1 kind 1 data 1 -1711462099.907168 [0] dq.builtin: thread_cputime 0.005635000 -1711462099.907106 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2: F#4:6/0: -1711462099.907252 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110cd0d:e3b81b8d:1ccb65b1:200c2) -1711462099.907271 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462099.907348 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7410@2 ] -1711462099.907360 [0] tev: traffic-xmit (1) 64 -1711462100.006679 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462100.006728 [0] recv: INFOTS(1711462067.905323275) -1711462100.006756 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 0:0:0:0 #1) -1711462100.006916 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462100.006931 [0] recv: INFOTS(1711462067.905323275) -1711462100.007000 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 0:0:0:0 #1) -1711462100.006914 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462100.007163 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (known) L(:1c1 16947.666654) -1711462100.007223 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462100.007236 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (known) L(:1c1 16947.666737) -1711462100.571482 [0] gc: thread_cputime 0.000000000 -1711462100.654475 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #10: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462100,654389597},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462100.654521 [0] python3: => EVERYONE -1711462101.626198 [0] tev: thread_cputime 0.000000000 -1711462101.655202 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462101.655304 [0] recv: INFOTS(1711462101.654695551) -1711462101.655335 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:200c2 -> 0:0:0:0 #5 L(:1c1 16949.314801)) -1711462101.655369 [0] recv: HEARTBEAT(#22:5..5 110cd0d:79d6eeac:ea4a8907:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@5(sync)) -1711462101.655392 [0] recv: thread_cputime 0.013366000 -1711462101.655587 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:200c2 #5: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:79d6eeac:ea4a8907:1}:1<0> -1711462101.655671 [0] dq.builtin: PMD ST0 pp 110cd0d:79d6eeac:ea4a8907 kind 1 data 1 -1711462101.655701 [0] dq.builtin: thread_cputime 0.005635000 -1711462101.655589 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2: F#4:6/0: -1711462101.655773 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110cd0d:79d6eeac:ea4a8907:200c2) -1711462101.655797 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462101.655908 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7410@2 ] -1711462101.655927 [0] tev: traffic-xmit (1) 64 -1711462101.657900 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #11: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462101,657789967},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462101.657943 [0] python3: => EVERYONE -1711462101.754736 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462101.754788 [0] recv: INFOTS(1711462069.653526636) -1711462101.754823 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 0:0:0:0 #1) -1711462101.754863 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462101.754878 [0] recv: INFOTS(1711462069.653526636) -1711462101.754893 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 0:0:0:0 #1) -1711462101.755054 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462101.755145 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (known) L(:1c1 16949.414642) -1711462101.755193 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462101.755229 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (known) L(:1c1 16949.414730) -1711462102.628783 [0] tev: thread_cputime 0.000000000 -1711462102.661508 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #12: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462102,661351033},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462102.661601 [0] python3: => EVERYONE -1711462103.631282 [0] tev: thread_cputime 0.000000000 -1711462103.664954 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #13: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462103,664794328},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462103.665041 [0] python3: => EVERYONE -1711462104.633681 [0] tev: thread_cputime 0.000000000 -1711462104.668242 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #14: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462104,668103899},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462104.668313 [0] python3: => EVERYONE -1711462105.636913 [0] tev: thread_cputime 0.000000000 -1711462105.671620 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #15: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462105,671463026},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462105.671708 [0] python3: => EVERYONE -1711462106.144559 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462106.144635 [0] recv: INFOTS(1711462106.144172669) -1711462106.144658 [0] recv: DATA(110cd0d:56a27910:57318171:200c2 -> 0:0:0:0 #3 L(:1c1 16953.804135)) -1711462106.144682 [0] recv: HEARTBEAT(#10:3..3 110cd0d:56a27910:57318171:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@3(sync)) -1711462106.144698 [0] recv: thread_cputime 0.013366000 -1711462106.144815 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:56a27910:57318171:200c2: F#4:4/0: -1711462106.144863 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110cd0d:56a27910:57318171:200c2) -1711462106.144878 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462106.144943 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7410@2 ] -1711462106.144831 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:200c2 #3: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:56a27910:57318171:1}:1<0> -1711462106.144956 [0] tev: traffic-xmit (1) 64 -1711462106.144998 [0] dq.builtin: PMD ST0 pp 110cd0d:56a27910:57318171 kind 1 data 1 -1711462106.145017 [0] dq.builtin: thread_cputime 0.005635000 -1711462106.244546 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462106.244579 [0] recv: INFOTS(1711462090.143481252) -1711462106.244601 [0] recv: DATA(110cd0d:56a27910:57318171:100c2 -> 0:0:0:0 #1) -1711462106.244613 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462106.244618 [0] recv: INFOTS(1711462090.143481252) -1711462106.244624 [0] recv: DATA(110cd0d:56a27910:57318171:100c2 -> 0:0:0:0 #1) -1711462106.244669 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:56a27910:57318171:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.244706 [0] dq.builtin: SPDP ST0 110cd0d:56a27910:57318171:1c1 (known) L(:1c1 16953.904206) -1711462106.244751 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:56a27910:57318171:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.244760 [0] dq.builtin: SPDP ST0 110cd0d:56a27910:57318171:1c1 (known) L(:1c1 16953.904262) -1711462106.520048 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 116 from udp/10.101.12.71:58212 -1711462106.520091 [0] recv: INFOTS(1711462106.519773993) -1711462106.520112 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:200c2 -> 0:0:0:0 #3 L(:1c1 16954.179592)) -1711462106.520127 [0] recv: HEARTBEAT(#11:3..3 110e21c:d0762c48:a9f0fb28:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@3(sync)) -1711462106.520168 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:200c2 #3: ST0 DCPSParticipantMessage/ParticipantMessageData:{110e21c:d0762c48:a9f0fb28:1}:1<0> -1711462106.520169 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110e21c:d0762c48:a9f0fb28:200c2: F#4:4/0: -1711462106.520217 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110e21c:d0762c48:a9f0fb28:200c2) -1711462106.520186 [0] dq.builtin: PMD ST0 pp 110e21c:d0762c48:a9f0fb28 kind 1 data 1 -1711462106.520229 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462106.520298 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7412@2 ] -1711462106.520307 [0] tev: traffic-xmit (1) 64 -1711462106.542264 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 116 from udp/10.101.12.71:40473 -1711462106.542292 [0] recv: INFOTS(1711462106.542026862) -1711462106.542314 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:200c2 -> 0:0:0:0 #3 L(:1c1 16954.201793)) -1711462106.542327 [0] recv: HEARTBEAT(#9:3..3 110d7b4:17c5b8c5:94bd0ff4:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@3(sync)) -1711462106.542419 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:200c2 #3: ST0 DCPSParticipantMessage/ParticipantMessageData:{110d7b4:17c5b8c5:94bd0ff4:1}:1<0> -1711462106.542446 [0] dq.builtin: PMD ST0 pp 110d7b4:17c5b8c5:94bd0ff4 kind 1 data 1 -1711462106.542495 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110d7b4:17c5b8c5:94bd0ff4:200c2: F#4:4/0: -1711462106.542524 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462106.542547 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462106.542596 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7414@2 ] -1711462106.542606 [0] tev: traffic-xmit (1) 64 -1711462106.549745 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 116 from udp/10.101.12.71:44991 -1711462106.549764 [0] recv: INFOTS(1711462106.549523877) -1711462106.549780 [0] recv: DATA(110443d:bb7f10a5:18901533:200c2 -> 0:0:0:0 #3 L(:1c1 16954.209263)) -1711462106.549804 [0] recv: HEARTBEAT(#9:3..3 110443d:bb7f10a5:18901533:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@3(sync)) -1711462106.549842 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:200c2 #3: ST0 DCPSParticipantMessage/ParticipantMessageData:{110443d:bb7f10a5:18901533:1}:1<0> -1711462106.549872 [0] dq.builtin: PMD ST0 pp 110443d:bb7f10a5:18901533 kind 1 data 1 -1711462106.550007 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110443d:bb7f10a5:18901533:200c2: F#5:4/0: -1711462106.550058 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110443d:bb7f10a5:18901533:200c2) -1711462106.550077 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462106.550183 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7416@2 ] -1711462106.550206 [0] tev: traffic-xmit (1) 64 -1711462106.570871 [0] tev: write_sample 110aba1:7b19badd:ce0adb73:200c2 #3: ST0 DCPSParticipantMessage/ParticipantMessageData:{110aba1:7b19badd:ce0adb73:1}:1<0> -1711462106.570967 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(data(110aba1:7b19badd:ce0adb73:200c2:#3/1)): niov 0 sz 0 => now niov 3 sz 84 -1711462106.570988 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:200c2 multicasting (rel-prd 6 seq-eq-max 6 seq 3 maxseq 2) -1711462106.571013 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:200c2) piggybacked, resched in 0.1 s (min-ack 2, avail-seq 3, xmit 2) -1711462106.571029 [0] tev: xpack_addmsg 0x770414001390 0x7704040038b0 0(control): niov 3 sz 84 => now niov 4 sz 116 -1711462106.571180 [0] tev: nn_xpack_send 116: 0x77041400139c:20 0x770404003b28:36 0x7704140024ec:28 0x7704040039a8:32 [ udp/239.255.0.1:7400@2 ] -1711462106.571198 [0] tev: traffic-xmit (1) 116 -1711462106.571218 [0] tev: resched pmd(110aba1:7b19badd:ce0adb73:1c1): 8s -1711462106.571326 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 116 from udp/10.101.12.71:52025 -1711462106.571381 [0] recv: INFOTS(1711462106.570832443) -1711462106.571402 [0] recv: DATA(110aba1:7b19badd:ce0adb73:200c2 -> 0:0:0:0 #3 110aba1:7b19badd:ce0adb73:200c2? -> 0:0:0:0) -1711462106.571437 [0] recv: HEARTBEAT(#7:3..3 110aba1:7b19badd:ce0adb73:200c2? -> 0:0:0:0) -1711462106.571911 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462106.571966 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462106.572003 [0] recv: ACKNACK(F#5:4/0: L(:1c1 16954.231463) 110d7b4:17c5b8c5:94bd0ff4:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 ACK1 RM0) -1711462106.572033 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462106.572043 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462106.572059 [0] recv: ACKNACK(F#5:4/0: L(:1c1 16954.231544) 110443d:bb7f10a5:18901533:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 ACK1 RM0) -1711462106.572076 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462106.572084 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462106.572106 [0] recv: ACKNACK(F#5:4/0: L(:1c1 16954.231587) 110e21c:d0762c48:a9f0fb28:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 ACK1 RM0) -1711462106.572210 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462106.572228 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462106.572245 [0] recv: ACKNACK(F#4:4/0: L(:1c1 16954.231729) 110cd0d:56a27910:57318171:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 ACK1 RM0) -1711462106.572254 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462106.572267 [0] recv: ACKNACK(F#10:4/0: L(:1c1 16954.231729) 110cd0d:e3b81b8d:1ccb65b1:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 ACK1 RM0) -1711462106.572274 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462106.572289 [0] recv: ACKNACK(F#8:4/0: L(:1c1 16954.231729) 110cd0d:79d6eeac:ea4a8907:200c7 -> 110aba1:7b19badd:ce0adb73:200c2 ACK1 RM0) -1711462106.620320 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 444 from udp/10.101.12.71:58212 -1711462106.620344 [0] recv: INFOTS(1711462090.519442682) -1711462106.620367 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #1) -1711462106.620376 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 444 from udp/10.101.12.71:58212 -1711462106.620382 [0] recv: INFOTS(1711462090.519442682) -1711462106.620387 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #1) -1711462106.620557 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.620595 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16954.280095) -1711462106.620620 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.620629 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16954.280132) -1711462106.641679 [0] tev: thread_cputime 0.000000000 -1711462106.642550 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 444 from udp/10.101.12.71:40473 -1711462106.642587 [0] recv: INFOTS(1711462090.541682763) -1711462106.642623 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 0:0:0:0 #1) -1711462106.642643 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 444 from udp/10.101.12.71:40473 -1711462106.642652 [0] recv: INFOTS(1711462090.541682763) -1711462106.642659 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 0:0:0:0 #1) -1711462106.642797 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.642841 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16954.302341) -1711462106.642875 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.642883 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16954.302386) -1711462106.650183 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 444 from udp/10.101.12.71:44991 -1711462106.650231 [0] recv: INFOTS(1711462090.549308855) -1711462106.650348 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #1) -1711462106.650366 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 444 from udp/10.101.12.71:44991 -1711462106.650380 [0] recv: INFOTS(1711462090.549308855) -1711462106.650402 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #1) -1711462106.650454 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.650485 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16954.309983) -1711462106.650582 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.650604 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16954.310105) -1711462106.670860 [0] tev: non-timed queue now has 1 items -1711462106.670947 [0] tev: xmit spdp 110aba1:7b19badd:ce0adb73:1c1 to 0:0:0:100c7 (resched 8s) -1711462106.670973 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:200c2) suppressed, resched in inf s (min-ack 3, avail-seq 3, xmit 3) -1711462106.670997 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 444 -1711462106.671317 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462106.671367 [0] recv: INFOTS(1711462090.570393375) -1711462106.671433 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462106.671471 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462106.671489 [0] recv: INFOTS(1711462090.570393375) -1711462106.671501 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462106.671653 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.671751 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (local) -1711462106.671811 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.671824 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (local) -1711462106.673476 [0] tev: nn_xpack_send 444: 0x77041400139c:20 0x770404003b28:36 0x653a1b2b4514:388 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.(trunc) -1711462106.673505 [0] tev: traffic-xmit (101) 444 -1711462106.675023 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #16: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462106,674889026},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462106.675069 [0] python3: => EVERYONE -1711462107.645244 [0] tev: thread_cputime 0.002890000 -1711462107.678436 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #17: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462107,678259247},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462107.678537 [0] python3: => EVERYONE -1711462107.906917 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462107.906974 [0] recv: INFOTS(1711462107.906432793) -1711462107.907028 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:200c2 -> 0:0:0:0 #6 L(:1c1 16955.566471)) -1711462107.907071 [0] recv: HEARTBEAT(#31:6..6 110cd0d:e3b81b8d:1ccb65b1:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@6(sync)) -1711462107.907091 [0] recv: thread_cputime 0.013366000 -1711462107.907203 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2: F#5:7/0: -1711462107.907244 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110cd0d:e3b81b8d:1ccb65b1:200c2) -1711462107.907297 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462107.907259 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:e3b81b8d:1ccb65b1:200c2 #6: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:e3b81b8d:1ccb65b1:1}:1<0> -1711462107.907364 [0] dq.builtin: PMD ST0 pp 110cd0d:e3b81b8d:1ccb65b1 kind 1 data 1 -1711462107.907401 [0] dq.builtin: thread_cputime 0.005635000 -1711462107.907378 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7410@2 ] -1711462107.907444 [0] tev: traffic-xmit (1) 64 -1711462108.007025 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462108.007108 [0] recv: INFOTS(1711462067.905323275) -1711462108.007181 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 0:0:0:0 #1) -1711462108.007232 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462108.007241 [0] recv: INFOTS(1711462067.905323275) -1711462108.007261 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 0:0:0:0 #1) -1711462108.007426 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462108.007559 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (known) L(:1c1 16955.667056) -1711462108.007620 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462108.007636 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (known) L(:1c1 16955.667137) -1711462108.571428 [0] gc: thread_cputime 0.000000000 -1711462108.648381 [0] tev: thread_cputime 0.003345000 -1711462108.681684 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #18: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462108,681534805},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462108.681781 [0] python3: => EVERYONE -1711462109.651755 [0] tev: thread_cputime 0.003477000 -1711462109.655014 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462109.655051 [0] recv: INFOTS(1711462109.654791672) -1711462109.655078 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:200c2 -> 0:0:0:0 #6 L(:1c1 16957.314552)) -1711462109.655092 [0] recv: HEARTBEAT(#23:6..6 110cd0d:79d6eeac:ea4a8907:200c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:200c7@6(sync)) -1711462109.655103 [0] recv: thread_cputime 0.013701000 -1711462109.655137 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:79d6eeac:ea4a8907:200c2 #6: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:79d6eeac:ea4a8907:1}:1<0> -1711462109.655152 [0] dq.builtin: PMD ST0 pp 110cd0d:79d6eeac:ea4a8907 kind 1 data 1 -1711462109.655163 [0] dq.builtin: thread_cputime 0.005635000 -1711462109.655220 [0] tev: acknack 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2: F#5:7/0: -1711462109.655238 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:200c7 -> pwr 110cd0d:79d6eeac:ea4a8907:200c2) -1711462109.655248 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462109.655292 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7410@2 ] -1711462109.655304 [0] tev: traffic-xmit (1) 64 -1711462109.684395 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:603 #19: ST0 rt/rosout/rcl_interfaces::msg::dds_::Log_:{{1711462109,684296957},30,"topological_navigation_core","service not available, waiting again... /controller_server/set_parameters","/home/developer/aoc_strawberry_scenario_ws/install/topological_navigation/lib/python3.10/site-packages/topological_navigation/scripts/param_processing.py","__init__",18} -1711462109.684453 [0] python3: => EVERYONE -1711462109.754734 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462109.754771 [0] recv: INFOTS(1711462069.653526636) -1711462109.754810 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 0:0:0:0 #1) -1711462109.754834 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462109.754841 [0] recv: INFOTS(1711462069.653526636) -1711462109.754853 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 0:0:0:0 #1) -1711462109.755028 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462109.755092 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (known) L(:1c1 16957.414591) -1711462109.755138 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462109.755155 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (known) L(:1c1 16957.414657) -1711462110.007371 [0] gc: thread_cputime 0.000000000 -1711462110.151030 [0] recvMC: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 536 from udp/10.101.12.71:50807 -1711462110.151095 [0] recvMC: INFOTS(1711462110.150718264) -1711462110.151121 [0] recvMC: DATA(110cd0d:56a27910:57318171:403 -> 0:0:0:0 #13 L(:1c1 16957.810589) => EVERYONE -1711462110.151322 [0] recvMC: data(application, vendor 1.16): 110cd0d:56a27910:57318171:403 #13: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162) -1711462110.151365 [0] recvMC: HEARTBEAT(#9:13..13 110cd0d:56a27910:57318171:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@13(sync)) -1711462110.151377 [0] recvMC: thread_cputime 0.002372000 -1711462110.151389 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110cd0d:56a27910:57318171:403: F#3:14/0: -1711462110.151411 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110cd0d:56a27910:57318171:403) -1711462110.151418 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.151450 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7411@2 ] -1711462110.151454 [0] tev: traffic-xmit (1) 64 -1711462110.151686 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 96 from udp/10.101.12.71:50807 -1711462110.151709 [0] recv: INFOTS(1711462110.151439386) -1711462110.151731 [0] recv: DATA(110cd0d:56a27910:57318171:3c2 -> 0:0:0:0 #10 L(:1c1 16957.811210)) -1711462110.151779 [0] dq.builtin: data(builtin, vendor 1.16): 110cd0d:56a27910:57318171:3c2 #10: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:603}} -1711462110.151804 [0] dq.builtin: SEDP ST3 110cd0d:56a27910:57318171:603 ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:603) - deleting -1711462110.151818 [0] dq.builtin: => EVERYONE -1711462110.151855 [0] dq.builtin: delete -1711462110.151921 [0] gc: gc 0x77041c0814a0: deleting -1711462110.151940 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c0814a0, 110cd0d:56a27910:57318171:603) -1711462110.151969 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c0814a0, 110cd0d:56a27910:57318171:603) -1711462110.151985 [0] dq.user: thread_cputime 0.000000000 -1711462110.152051 [0] gc: gc 0x77041c0814a0: deleting -1711462110.152069 [0] gc: gc_delete_proxy_writer (0x77041c0814a0, 110cd0d:56a27910:57318171:603) -1711462110.152080 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=30 -1711462110.152100 [0] gc: gc 0x77041c014c20: deleting -1711462110.176653 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 472 from udp/10.101.12.71:44991 -1711462110.176673 [0] recvMC: INFOTS(1711462110.176055959) -1711462110.176692 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #11 L(:1c1 16957.836173) => EVERYONE -1711462110.176695 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #13: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206, -1711462110.176737 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae6110 0(data(110aba1:7b19badd:ce0adb73:403:#13/1)): niov 0 sz 0 => now niov 3 sz 568 -1711462110.176754 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 6 seq 13 maxseq 12) -1711462110.176769 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403) piggybacked, resched in 0.1 s (min-ack 12, avail-seq 13, xmit 12) -1711462110.176778 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae61e0 0(control): niov 3 sz 568 => now niov 4 sz 600 -1711462110.176815 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #11: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,17,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,16,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.176847 [0] recvMC: HEARTBEAT(#19:11..11 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@11(sync)) -1711462110.176854 [0] python3: nn_xpack_send 600: 0x653a1add92cc:20 0x653a1b3a4ae8:36 0x653a1aae5e60:512 0x653a1b3a47f8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.176887 [0] python3: traffic-xmit (1) 600 -1711462110.176897 [0] python3: => EVERYONE -1711462110.176903 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110443d:bb7f10a5:18901533:403: F#4:12/0: -1711462110.176944 [0] python3: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:1304) ... -1711462110.176965 [0] python3: => EVERYONE -1711462110.176951 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462110.176878 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 600 from udp/10.101.12.71:52025 -1711462110.177006 [0] recvMC: INFOTS(1711462110.176561088) -1711462110.177023 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #13 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.177035 [0] recvMC: HEARTBEAT(#23:13..13 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.177097 [0] tev: xpack_addmsg 0x770414001390 0x770404003a30 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.177150 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.177161 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770404003b18:44 [ udp/10.101.12.71:7417@2 ] -1711462110.177180 [0] tev: traffic-xmit (1) 64 -1711462110.177171 [0] recv: INFOTS(1711462110.176811721) -1711462110.177243 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #8 L(:1c1 16957.836671)) -1711462110.177019 [0] gc: gc 0x653a1aae64b0: not yet, shortsleep -1711462110.177381 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #8: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:1304}} -1711462110.177425 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:1304 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:1304) => EVERYONE -1711462110.177454 [0] dq.builtin: - deleting -1711462110.177467 [0] dq.builtin: delete -1711462110.177724 [0] recvUC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462110.177749 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.177815 [0] recvUC: ACKNACK(F#4:14/0: L(:1c1 16957.837248) 110e21c:d0762c48:a9f0fb28:504 -> 110aba1:7b19badd:ce0adb73:403 ACK1 RM0) -1711462110.177866 [0] recvUC: thread_cputime 0.000000000 -1711462110.177885 [0] recvUC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462110.177896 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.177913 [0] recvUC: ACKNACK(F#4:14/0: L(:1c1 16957.837397) 110d7b4:17c5b8c5:94bd0ff4:504 -> 110aba1:7b19badd:ce0adb73:403 ACK1 RM0) -1711462110.178113 [0] recvUC: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462110.178135 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.178158 [0] recvUC: ACKNACK(F#4:14/0: L(:1c1 16957.837635) 110cd0d:56a27910:57318171:504 -> 110aba1:7b19badd:ce0adb73:403 ACK1 RM0) -1711462110.178167 [0] recvUC: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462110.178183 [0] recvUC: ACKNACK(F#20:14/0: L(:1c1 16957.837635) 110cd0d:e3b81b8d:1ccb65b1:504 -> 110aba1:7b19badd:ce0adb73:403 ACK1 RM0) -1711462110.178191 [0] recvUC: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462110.178204 [0] recvUC: ACKNACK(F#11:14/0: L(:1c1 16957.837635) 110cd0d:79d6eeac:ea4a8907:504 -> 110aba1:7b19badd:ce0adb73:403 ACK1 RM0) -1711462110.178220 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462110.178229 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.178243 [0] recvUC: ACKNACK(F#4:14/0: L(:1c1 16957.837731) 110443d:bb7f10a5:18901533:504 -> 110aba1:7b19badd:ce0adb73:403 ACK1 RM0) -1711462110.178358 [0] gc: gc 0x653a1aae64b0: deleting -1711462110.178373 [0] gc: gc_delete_reader(0x653a1aae64b0, 110aba1:7b19badd:ce0adb73:1304) -1711462110.178420 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:4c2 #11: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1304}} -1711462110.178442 [0] gc: non-timed queue now has 1 items -1711462110.178465 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1304 @ 0x653a1b444a34) user 25 builtin 12 -1711462110.178464 [0] tev: xpack_addmsg 0x770414001390 0x7704240013d0 0(data(110aba1:7b19badd:ce0adb73:4c2:#11/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.178483 [0] gc: gc 0x77041c0814a0: deleting -1711462110.178495 [0] gc: gc_delete_proxy_reader (0x77041c0814a0, 110443d:bb7f10a5:18901533:1304) -1711462110.178506 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=28 -1711462110.178519 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.178553 [0] python3: ddsi_unblock_throttled_writer(guid 110aba1:7b19badd:ce0adb73:1203) ... -1711462110.178566 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:1203) state transition 0 -> 1 -1711462110.178573 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:1203) ... -1711462110.178578 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:1203) - no unack'ed samples -1711462110.178583 [0] python3: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:1203) ... -1711462110.178599 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.178600 [0] python3: => EVERYONE -1711462110.178581 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x7704240014c8:48 0x7704240015b4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.178630 [0] recv: INFOTS(1711462110.178392915) -1711462110.178651 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:1203) state transition 1 -> 3 -1711462110.178675 [0] tev: traffic-xmit (1) 96 -1711462110.178658 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #11 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462110.179464 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.179494 [0] recv: INFOTS(1711462110.179299892) -1711462110.179515 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #11 L(:1c1 16957.838995)) -1711462110.179583 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #11: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:1203}} -1711462110.179614 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:1203 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:1203) - deleting -1711462110.179614 [0] gc: gc 0x77041c014c20: deleting -1711462110.179655 [0] gc: gc 0x77041c0814a0: deleting -1711462110.179666 [0] gc: gc 0x653a1b4507a0: deleting -1711462110.179630 [0] dq.builtin: => EVERYONE -1711462110.179674 [0] gc: gc_delete_writer(0x653a1b4507a0, 110aba1:7b19badd:ce0adb73:1203) -1711462110.179707 [0] dq.builtin: delete -1711462110.179735 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:3c2 #13: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1203}} -1711462110.179735 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 424 from udp/10.101.12.71:44991 -1711462110.179775 [0] gc: non-timed queue now has 1 items -1711462110.179793 [0] recvMC: INFOTS(1711462110.179423769) -1711462110.179837 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1203 @ 0x653a1b4523c4) user 24 builtin 12 -1711462110.179845 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #12 L(:1c1 16957.839293) => EVERYONE -1711462110.179848 [0] gc: gc 0x77041c0814a0: deleting -1711462110.179879 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c0814a0, 110443d:bb7f10a5:18901533:1203) -1711462110.179836 [0] tev: xpack_addmsg 0x770414001390 0x770424001680 0(data(110aba1:7b19badd:ce0adb73:3c2:#13/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.179887 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.179909 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c0814a0, 110443d:bb7f10a5:18901533:1203) -1711462110.179962 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #12: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,15,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.179980 [0] recvMC: HEARTBEAT(F#20:12..12 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@12(sync)) -1711462110.180007 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.180040 [0] recv: INFOTS(1711462110.179720416) -1711462110.180009 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424001778:48 0x770424001864:28 [ udp/239.255.0.1:7400@2 ] -1711462110.180072 [0] tev: traffic-xmit (1) 96 -1711462110.180056 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #14: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206, -1711462110.180115 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae6110 0(data(110aba1:7b19badd:ce0adb73:403:#14/1)): niov 0 sz 0 => now niov 3 sz 520 -1711462110.180131 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 6 seq 14 maxseq 13) -1711462110.180057 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #13 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462110.180151 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0966763 s (min-ack 13, avail-seq 14, xmit 13) -1711462110.180189 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae61e0 0(control): niov 3 sz 520 => now niov 4 sz 552 -1711462110.180251 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 552 from udp/10.101.12.71:52025 -1711462110.180259 [0] python3: nn_xpack_send 552: 0x653a1add92cc:20 0x653a1b3a4ae8:36 0x653a1ae73c30:464 0x653a1b3a47f8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.180259 [0] recvMC: INFOTS(1711462110.179892567) -1711462110.180277 [0] python3: traffic-xmit (1) 552 -1711462110.180294 [0] python3: => EVERYONE -1711462110.180307 [0] python3: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:1104) ... -1711462110.180317 [0] python3: => EVERYONE -1711462110.180310 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #14 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.180337 [0] recvMC: HEARTBEAT(F#24:14..14 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.180811 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.180833 [0] recv: INFOTS(1711462110.180647407) -1711462110.180863 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #9 L(:1c1 16957.840333)) -1711462110.180905 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #9: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:1104}} -1711462110.180922 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:1104 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:1104) => EVERYONE -1711462110.180935 [0] dq.builtin: - deleting -1711462110.180945 [0] dq.builtin: delete -1711462110.180971 [0] gc: gc 0x77041c014c20: deleting -1711462110.180979 [0] gc: gc 0x77041c0814a0: deleting -1711462110.180987 [0] gc: gc_delete_proxy_writer (0x77041c0814a0, 110443d:bb7f10a5:18901533:1203) -1711462110.180994 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=27 -1711462110.181004 [0] gc: gc 0x653a1b4507a0: deleting -1711462110.181009 [0] gc: gc_delete_reader(0x653a1b4507a0, 110aba1:7b19badd:ce0adb73:1104) -1711462110.181026 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:4c2 #12: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1104}} -1711462110.181036 [0] gc: non-timed queue now has 1 items -1711462110.181049 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1104 @ 0x653a1b44b6f4) user 23 builtin 12 -1711462110.181055 [0] gc: gc 0x77041c0816d0: deleting -1711462110.181068 [0] python3: ddsi_unblock_throttled_writer(guid 110aba1:7b19badd:ce0adb73:1003) ... -1711462110.181070 [0] gc: gc_delete_proxy_reader (0x77041c0816d0, 110443d:bb7f10a5:18901533:1104) -1711462110.181083 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:1003) state transition 0 -> 1 -1711462110.181061 [0] tev: xpack_addmsg 0x770414001390 0x770424001890 0(data(110aba1:7b19badd:ce0adb73:4c2:#12/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.181114 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=26 -1711462110.181096 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:1003) ... -1711462110.181124 [0] gc: gc 0x77041c014c20: deleting -1711462110.181142 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:1003) - no unack'ed samples -1711462110.181148 [0] gc: gc 0x653a1b4507a0: not yet, shortsleep -1711462110.181149 [0] python3: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:1003) ... -1711462110.181168 [0] python3: => EVERYONE -1711462110.181176 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424001988:48 0x770424001a74:28 [ udp/239.255.0.1:7400@2 ] -1711462110.181185 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.181212 [0] recv: INFOTS(1711462110.181018038) -1711462110.181181 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:1003) state transition 1 -> 3 -1711462110.181193 [0] tev: traffic-xmit (1) 96 -1711462110.181227 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #12 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462110.182015 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.182030 [0] recv: INFOTS(1711462110.181868318) -1711462110.182045 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #12 L(:1c1 16957.841531)) -1711462110.182101 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #12: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:1003}} -1711462110.182124 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:1003 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:1003) - deleting -1711462110.182133 [0] dq.builtin: => EVERYONE -1711462110.182147 [0] dq.builtin: delete -1711462110.182199 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 376 from udp/10.101.12.71:44991 -1711462110.182215 [0] gc: gc 0x653a1b4507a0: deleting -1711462110.182236 [0] gc: gc 0x77041c0816d0: deleting -1711462110.182264 [0] gc: gc 0x653a1b4509d0: deleting -1711462110.182280 [0] gc: gc_delete_writer(0x653a1b4509d0, 110aba1:7b19badd:ce0adb73:1003) -1711462110.182218 [0] recvMC: INFOTS(1711462110.181963719) -1711462110.182306 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:3c2 #14: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1003}} -1711462110.182316 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #13 L(:1c1 16957.841719) => EVERYONE -1711462110.182323 [0] gc: non-timed queue now has 1 items -1711462110.182355 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1003 @ 0x653a1b44a5e4) user 22 builtin 12 -1711462110.182369 [0] gc: gc 0x77041c0814a0: deleting -1711462110.182375 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c0814a0, 110443d:bb7f10a5:18901533:1003) -1711462110.182360 [0] tev: xpack_addmsg 0x770414001390 0x770424001aa0 0(data(110aba1:7b19badd:ce0adb73:3c2:#14/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.182391 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.182409 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c0814a0, 110443d:bb7f10a5:18901533:1003) -1711462110.182445 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #13: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,13,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.182458 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424001b98:48 0x770424001c84:28 [ udp/239.255.0.1:7400@2 ] -1711462110.182473 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.182488 [0] recv: INFOTS(1711462110.182296975) -1711462110.182462 [0] recvMC: HEARTBEAT(F#21:13..13 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@13(sync)) -1711462110.182507 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #14 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462110.182478 [0] tev: traffic-xmit (1) 96 -1711462110.182524 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #15: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,20,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206, -1711462110.182547 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae6110 0(data(110aba1:7b19badd:ce0adb73:403:#15/1)): niov 0 sz 0 => now niov 3 sz 472 -1711462110.182555 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 6 seq 15 maxseq 13) -1711462110.182583 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0941893 s (min-ack 13, avail-seq 15, xmit 14) -1711462110.182590 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae61e0 0(control): niov 3 sz 472 => now niov 4 sz 504 -1711462110.182644 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 504 from udp/10.101.12.71:52025 -1711462110.182650 [0] recvMC: INFOTS(1711462110.182388702) -1711462110.182668 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #15 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.182685 [0] recvMC: HEARTBEAT(F#25:15..15 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.182651 [0] python3: nn_xpack_send 504: 0x653a1add92cc:20 0x653a1b3a4ae8:36 0x653a1b4591d0:416 0x653a1b3a47f8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.182705 [0] python3: traffic-xmit (1) 504 -1711462110.182710 [0] python3: => EVERYONE -1711462110.182718 [0] python3: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:f04) ... -1711462110.182723 [0] python3: => EVERYONE -1711462110.183201 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.183211 [0] recv: INFOTS(1711462110.183032571) -1711462110.183228 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #10 L(:1c1 16957.842714)) -1711462110.183280 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #10: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:f04}} -1711462110.183303 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:f04 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:f04) => EVERYONE -1711462110.183317 [0] dq.builtin: - deleting -1711462110.183329 [0] dq.builtin: delete -1711462110.183496 [0] gc: gc 0x77041c014c20: deleting -1711462110.183516 [0] gc: gc 0x77041c0814a0: deleting -1711462110.183528 [0] gc: gc_delete_proxy_writer (0x77041c0814a0, 110443d:bb7f10a5:18901533:1003) -1711462110.183542 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=25 -1711462110.183560 [0] gc: gc 0x653a1b4507a0: deleting -1711462110.183569 [0] gc: gc_delete_reader(0x653a1b4507a0, 110aba1:7b19badd:ce0adb73:f04) -1711462110.183611 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:4c2 #13: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:f04}} -1711462110.183661 [0] gc: non-timed queue now has 1 items -1711462110.183687 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:f04 @ 0x653a1b39a0c4) user 21 builtin 12 -1711462110.183693 [0] python3: ddsi_unblock_throttled_writer(guid 110aba1:7b19badd:ce0adb73:e03) ... -1711462110.183699 [0] gc: gc 0x77041c031bc0: deleting -1711462110.183712 [0] gc: gc_delete_proxy_reader (0x77041c031bc0, 110443d:bb7f10a5:18901533:f04) -1711462110.183700 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:e03) state transition 0 -> 1 -1711462110.183699 [0] tev: xpack_addmsg 0x770414001390 0x770424001cb0 0(data(110aba1:7b19badd:ce0adb73:4c2:#13/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.183724 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:e03) ... -1711462110.183750 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:e03) - no unack'ed samples -1711462110.183755 [0] python3: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:e03) ... -1711462110.183755 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=24 -1711462110.183766 [0] python3: => EVERYONE -1711462110.183780 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:e03) state transition 1 -> 3 -1711462110.183782 [0] gc: gc 0x77041c014c20: deleting -1711462110.183791 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424001da8:48 0x770424001e94:28 [ udp/239.255.0.1:7400@2 ] -1711462110.183809 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.183836 [0] recv: INFOTS(1711462110.183595883) -1711462110.183851 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #13 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462110.183869 [0] tev: traffic-xmit (1) 96 -1711462110.183816 [0] gc: gc 0x653a1b4507a0: not yet, shortsleep -1711462110.184426 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.184449 [0] recv: INFOTS(1711462110.184270366) -1711462110.184475 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #13 L(:1c1 16957.843949)) -1711462110.184546 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #13: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:e03}} -1711462110.184560 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:e03 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:e03) - deleting -1711462110.184565 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 328 from udp/10.101.12.71:44991 -1711462110.184570 [0] dq.builtin: => EVERYONE -1711462110.184669 [0] dq.builtin: delete -1711462110.184653 [0] recvMC: INFOTS(1711462110.184354578) -1711462110.184755 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #14 L(:1c1 16957.844147) => EVERYONE -1711462110.184918 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #14: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.184956 [0] recvMC: HEARTBEAT(F#22:14..14 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@14(sync)) -1711462110.184970 [0] gc: gc 0x653a1b4507a0: deleting -1711462110.185010 [0] gc: gc 0x77041c031bc0: deleting -1711462110.185025 [0] gc: gc 0x653a1b4509d0: deleting -1711462110.185033 [0] gc: gc_delete_writer(0x653a1b4509d0, 110aba1:7b19badd:ce0adb73:e03) -1711462110.185080 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:3c2 #15: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:e03}} -1711462110.185099 [0] gc: non-timed queue now has 1 items -1711462110.185124 [0] tev: xpack_addmsg 0x770414001390 0x770424001ec0 0(data(110aba1:7b19badd:ce0adb73:3c2:#15/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.185127 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:e03 @ 0x653a1b398e84) user 20 builtin 12 -1711462110.185166 [0] gc: gc 0x77041c02e1f0: deleting -1711462110.185174 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c02e1f0, 110443d:bb7f10a5:18901533:e03) -1711462110.185185 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.185202 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424001fb8:48 0x7704240020a4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.185225 [0] tev: traffic-xmit (1) 96 -1711462110.185204 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.185247 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #16: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,20,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,22,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,24,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.185263 [0] recv: INFOTS(1711462110.185066146) -1711462110.185281 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #15 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462110.185203 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c02e1f0, 110443d:bb7f10a5:18901533:e03) -1711462110.185290 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae6110 0(data(110aba1:7b19badd:ce0adb73:403:#16/1)): niov 0 sz 0 => now niov 3 sz 424 -1711462110.185346 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 6 seq 16 maxseq 13) -1711462110.185361 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0914344 s (min-ack 13, avail-seq 16, xmit 15) -1711462110.185374 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae61e0 0(control): niov 3 sz 424 => now niov 4 sz 456 -1711462110.185425 [0] python3: nn_xpack_send 456: 0x653a1add92cc:20 0x653a1b3a4ae8:36 0x653a1b3b0da0:368 0x653a1b3a47f8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.185436 [0] python3: traffic-xmit (1) 456 -1711462110.185452 [0] python3: => EVERYONE -1711462110.185429 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 456 from udp/10.101.12.71:52025 -1711462110.185471 [0] python3: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:d04) ... -1711462110.185484 [0] python3: => EVERYONE -1711462110.185502 [0] recvMC: INFOTS(1711462110.185144558) -1711462110.185517 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #16 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.185529 [0] recvMC: HEARTBEAT(F#26:16..16 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.185651 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.185678 [0] recv: INFOTS(1711462110.185500957) -1711462110.185720 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #11 L(:1c1 16957.845179)) -1711462110.185745 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #11: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:d04}} -1711462110.185756 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:d04 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:d04) => EVERYONE -1711462110.185774 [0] dq.builtin: - deleting -1711462110.185788 [0] dq.builtin: delete -1711462110.186261 [0] gc: gc 0x77041c014c20: deleting -1711462110.186280 [0] gc: gc 0x77041c02e1f0: deleting -1711462110.186289 [0] gc: gc_delete_proxy_writer (0x77041c02e1f0, 110443d:bb7f10a5:18901533:e03) -1711462110.186298 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=23 -1711462110.186315 [0] gc: gc 0x653a1b4507a0: deleting -1711462110.186322 [0] gc: gc_delete_reader(0x653a1b4507a0, 110aba1:7b19badd:ce0adb73:d04) -1711462110.186347 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:4c2 #14: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:d04}} -1711462110.186365 [0] gc: non-timed queue now has 1 items -1711462110.186383 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:d04 @ 0x653a1b3948d4) user 19 builtin 12 -1711462110.186394 [0] gc: gc 0x77041c0313c0: deleting -1711462110.186401 [0] gc: gc_delete_proxy_reader (0x77041c0313c0, 110443d:bb7f10a5:18901533:d04) -1711462110.186409 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=22 -1711462110.186413 [0] tev: xpack_addmsg 0x770414001390 0x7704240020d0 0(data(110aba1:7b19badd:ce0adb73:4c2:#14/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.186422 [0] gc: gc 0x77041c014c20: deleting -1711462110.186438 [0] python3: ddsi_unblock_throttled_writer(guid 110aba1:7b19badd:ce0adb73:c03) ... -1711462110.186462 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:c03) state transition 0 -> 1 -1711462110.186469 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:c03) ... -1711462110.186476 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:c03) - no unack'ed samples -1711462110.186453 [0] gc: gc 0x653a1b4507a0: deleting -1711462110.186492 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x7704240021c8:48 0x7704240022b4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.186482 [0] python3: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:c03) ... -1711462110.186518 [0] tev: traffic-xmit (1) 96 -1711462110.186496 [0] gc: gc 0x77041c0313c0: not yet, shortsleep -1711462110.186496 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.186575 [0] recv: INFOTS(1711462110.186335683) -1711462110.186578 [0] python3: => EVERYONE -1711462110.186592 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #14 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462110.186614 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:c03) state transition 1 -> 3 -1711462110.186991 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.187015 [0] recv: INFOTS(1711462110.186833962) -1711462110.187032 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #14 L(:1c1 16957.846517)) -1711462110.187085 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #14: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:c03}} -1711462110.187108 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:c03 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:c03) - deleting -1711462110.187116 [0] dq.builtin: => EVERYONE -1711462110.187132 [0] dq.builtin: delete -1711462110.187224 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 280 from udp/10.101.12.71:44991 -1711462110.187252 [0] recvMC: INFOTS(1711462110.186930064) -1711462110.187276 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #15 L(:1c1 16957.846751) => EVERYONE -1711462110.187418 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #15: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.187444 [0] recvMC: HEARTBEAT(F#23:15..15 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@15(sync)) -1711462110.187623 [0] gc: gc 0x77041c0313c0: deleting -1711462110.187642 [0] gc: gc 0x653a1b4507a0: deleting -1711462110.187650 [0] gc: gc_delete_writer(0x653a1b4507a0, 110aba1:7b19badd:ce0adb73:c03) -1711462110.187703 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:3c2 #16: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:c03}} -1711462110.187723 [0] gc: non-timed queue now has 1 items -1711462110.187750 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:c03 @ 0x653a1b3939c4) user 18 builtin 12 -1711462110.187754 [0] tev: xpack_addmsg 0x770414001390 0x7704240022e0 0(data(110aba1:7b19badd:ce0adb73:3c2:#16/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.187765 [0] gc: gc 0x77041c031bc0: deleting -1711462110.187796 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c031bc0, 110443d:bb7f10a5:18901533:c03) -1711462110.187809 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.187826 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c031bc0, 110443d:bb7f10a5:18901533:c03) -1711462110.187837 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.187834 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x7704240023d8:48 0x7704240024c4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.187859 [0] recv: INFOTS(1711462110.187668713) -1711462110.187880 [0] tev: traffic-xmit (1) 96 -1711462110.187907 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #16 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462110.187924 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #17: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,20,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,22,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,24,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.187947 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae6110 0(data(110aba1:7b19badd:ce0adb73:403:#17/1)): niov 0 sz 0 => now niov 3 sz 376 -1711462110.187967 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 6 seq 17 maxseq 13) -1711462110.187993 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0887647 s (min-ack 13, avail-seq 17, xmit 16) -1711462110.188002 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae61e0 0(control): niov 3 sz 376 => now niov 4 sz 408 -1711462110.188064 [0] python3: nn_xpack_send 408: 0x653a1add92cc:20 0x653a1b3a4ae8:36 0x653a1b44b100:320 0x653a1b3a47f8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.188079 [0] python3: traffic-xmit (1) 408 -1711462110.188106 [0] python3: => EVERYONE -1711462110.188067 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 408 from udp/10.101.12.71:52025 -1711462110.188120 [0] python3: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:b04) ... -1711462110.188136 [0] recvMC: INFOTS(1711462110.187809186) -1711462110.188155 [0] python3: => EVERYONE -1711462110.188155 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #17 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.188183 [0] recvMC: HEARTBEAT(F#27:17..17 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.188354 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.188365 [0] recv: INFOTS(1711462110.188204641) -1711462110.188390 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #12 L(:1c1 16957.847868)) -1711462110.188456 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #12: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:b04}} -1711462110.188483 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:b04 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:b04) => EVERYONE -1711462110.188529 [0] dq.builtin: - deleting -1711462110.188546 [0] dq.builtin: delete -1711462110.188886 [0] gc: gc 0x77041c014c20: deleting -1711462110.188903 [0] gc: gc 0x77041c031bc0: deleting -1711462110.188911 [0] gc: gc_delete_proxy_writer (0x77041c031bc0, 110443d:bb7f10a5:18901533:c03) -1711462110.188920 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=21 -1711462110.188934 [0] gc: gc 0x653a1b392270: deleting -1711462110.188941 [0] gc: gc_delete_reader(0x653a1b392270, 110aba1:7b19badd:ce0adb73:b04) -1711462110.188965 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:4c2 #15: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:b04}} -1711462110.188983 [0] gc: non-timed queue now has 1 items -1711462110.189004 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:b04 @ 0x653a1b38fd64) user 17 builtin 12 -1711462110.189017 [0] gc: gc 0x77041c02e1f0: deleting -1711462110.189027 [0] gc: gc_delete_proxy_reader (0x77041c02e1f0, 110443d:bb7f10a5:18901533:b04) -1711462110.189038 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=20 -1711462110.189005 [0] tev: xpack_addmsg 0x770414001390 0x7704240024f0 0(data(110aba1:7b19badd:ce0adb73:4c2:#15/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.189056 [0] gc: gc 0x77041c014c20: deleting -1711462110.189065 [0] gc: gc 0x653a1b392270: not yet, shortsleep -1711462110.189106 [0] python3: ddsi_unblock_throttled_writer(guid 110aba1:7b19badd:ce0adb73:a03) ... -1711462110.189138 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.189160 [0] recv: INFOTS(1711462110.188954699) -1711462110.189147 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:a03) state transition 0 -> 1 -1711462110.189171 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #15 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462110.189184 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:a03) ... -1711462110.189201 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:a03) - no unack'ed samples -1711462110.189211 [0] python3: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:a03) ... -1711462110.189230 [0] python3: => EVERYONE -1711462110.189118 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x7704240025e8:48 0x7704240026d4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.189289 [0] tev: traffic-xmit (1) 96 -1711462110.189270 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:a03) state transition 1 -> 3 -1711462110.189895 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.189914 [0] recv: INFOTS(1711462110.189703464) -1711462110.189932 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #15 L(:1c1 16957.849417)) -1711462110.189971 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #15: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:a03}} -1711462110.189989 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:a03 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:a03) - deleting -1711462110.190006 [0] dq.builtin: => EVERYONE -1711462110.190035 [0] dq.builtin: delete -1711462110.190100 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 232 from udp/10.101.12.71:44991 -1711462110.190123 [0] recvMC: INFOTS(1711462110.189872726) -1711462110.190138 [0] gc: gc 0x653a1b392270: deleting -1711462110.190140 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #16 L(:1c1 16957.849625) => EVERYONE -1711462110.190166 [0] gc: gc 0x77041c02e1f0: deleting -1711462110.190204 [0] gc: gc 0x653a1b38e4e0: deleting -1711462110.190212 [0] gc: gc_delete_writer(0x653a1b38e4e0, 110aba1:7b19badd:ce0adb73:a03) -1711462110.190272 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:3c2 #17: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:a03}} -1711462110.190292 [0] gc: non-timed queue now has 1 items -1711462110.190331 [0] tev: xpack_addmsg 0x770414001390 0x770424002700 0(data(110aba1:7b19badd:ce0adb73:3c2:#17/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.190333 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #16: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.190349 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:a03 @ 0x653a1b38f034) user 16 builtin 12 -1711462110.190377 [0] recvMC: HEARTBEAT(F#24:16..16 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@16(sync)) -1711462110.190387 [0] gc: gc 0x77041c02d8b0: deleting -1711462110.190397 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c02d8b0, 110443d:bb7f10a5:18901533:a03) -1711462110.190422 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.190437 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c02d8b0, 110443d:bb7f10a5:18901533:a03) -1711462110.190472 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.190522 [0] recv: INFOTS(1711462110.190259026) -1711462110.190536 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #17 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462110.190560 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #18: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,20,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,22,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,24,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.190491 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x7704240027f8:48 0x7704240028e4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.190616 [0] tev: traffic-xmit (1) 96 -1711462110.190599 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae6110 0(data(110aba1:7b19badd:ce0adb73:403:#18/1)): niov 0 sz 0 => now niov 3 sz 328 -1711462110.190792 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 6 seq 18 maxseq 13) -1711462110.190814 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0861065 s (min-ack 13, avail-seq 18, xmit 17) -1711462110.190828 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae61e0 0(control): niov 3 sz 328 => now niov 4 sz 360 -1711462110.190910 [0] python3: nn_xpack_send 360: 0x653a1add92cc:20 0x653a1b3a4ae8:36 0x653a1b44bd40:272 0x653a1b3a47f8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.190933 [0] python3: traffic-xmit (1) 360 -1711462110.190954 [0] python3: => EVERYONE -1711462110.190922 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 360 from udp/10.101.12.71:52025 -1711462110.190988 [0] python3: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:904) ... -1711462110.190996 [0] recvMC: INFOTS(1711462110.190464105) -1711462110.191003 [0] python3: => EVERYONE -1711462110.191014 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #18 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.191028 [0] recvMC: HEARTBEAT(F#28:18..18 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.191137 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.191161 [0] recv: INFOTS(1711462110.190989734) -1711462110.191186 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #13 L(:1c1 16957.850661)) -1711462110.191227 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #13: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:904}} -1711462110.191255 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:904 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:904) => EVERYONE -1711462110.191276 [0] dq.builtin: - deleting -1711462110.191288 [0] dq.builtin: delete -1711462110.191497 [0] gc: gc 0x77041c014c20: deleting -1711462110.191505 [0] gc: gc 0x77041c02d8b0: deleting -1711462110.191511 [0] gc: gc_delete_proxy_writer (0x77041c02d8b0, 110443d:bb7f10a5:18901533:a03) -1711462110.191518 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=19 -1711462110.191528 [0] gc: gc 0x653a1b314040: deleting -1711462110.191534 [0] gc: gc_delete_reader(0x653a1b314040, 110aba1:7b19badd:ce0adb73:904) -1711462110.191560 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:4c2 #16: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:904}} -1711462110.191575 [0] gc: non-timed queue now has 1 items -1711462110.191588 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:904 @ 0x653a1b3ded14) user 15 builtin 12 -1711462110.191594 [0] gc: gc 0x77041c0313c0: deleting -1711462110.191598 [0] tev: xpack_addmsg 0x770414001390 0x770424002910 0(data(110aba1:7b19badd:ce0adb73:4c2:#16/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.191601 [0] gc: gc_delete_proxy_reader (0x77041c0313c0, 110443d:bb7f10a5:18901533:904) -1711462110.191630 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=18 -1711462110.191630 [0] python3: ddsi_unblock_throttled_writer(guid 110aba1:7b19badd:ce0adb73:803) ... -1711462110.191646 [0] gc: gc 0x77041c014c20: deleting -1711462110.191663 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:803) state transition 0 -> 1 -1711462110.191687 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:803) ... -1711462110.191646 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 508 from udp/10.101.12.71:58212 -1711462110.191706 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424002a08:48 0x770424002af4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.191744 [0] tev: traffic-xmit (1) 96 -1711462110.191702 [0] gc: gc 0x653a1b314040: not yet, shortsleep -1711462110.191745 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.191818 [0] recv: INFOTS(1711462110.191549194) -1711462110.191827 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:803) - no unack'ed samples -1711462110.191843 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #16 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462110.191717 [0] recvMC: INFOTS(1711462110.191353654) -1711462110.191876 [0] python3: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:803) ... -1711462110.191883 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #12 L(:1c1 16957.851217) => EVERYONE -1711462110.191991 [0] python3: => EVERYONE -1711462110.192070 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:803) state transition 1 -> 3 -1711462110.192148 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #12: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,16,3,0,0,) -1711462110.192186 [0] recvMC: HEARTBEAT(#19:12..12 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@12(sync)) -1711462110.192214 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110e21c:d0762c48:a9f0fb28:403: F#4:13/0: -1711462110.192233 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110e21c:d0762c48:a9f0fb28:403) -1711462110.192248 [0] tev: xpack_addmsg 0x770414001390 0x770424002910 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.192297 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x7704240029f8:44 [ udp/10.101.12.71:7413@2 ] -1711462110.192310 [0] tev: traffic-xmit (1) 64 -1711462110.192471 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.192482 [0] recv: INFOTS(1711462110.192364136) -1711462110.192513 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #16 L(:1c1 16957.851984)) -1711462110.192553 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #16: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:803}} -1711462110.192566 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:803 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:803) - deleting -1711462110.192577 [0] dq.builtin: => EVERYONE -1711462110.192601 [0] dq.builtin: delete -1711462110.192755 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 208 from udp/10.101.12.71:44991 -1711462110.192791 [0] recvMC: INFOTS(1711462110.192525975) -1711462110.192810 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #17 L(:1c1 16957.852291) => EVERYONE -1711462110.192854 [0] gc: gc 0x653a1b314040: deleting -1711462110.192865 [0] gc: gc 0x77041c0313c0: deleting -1711462110.192875 [0] gc: gc 0x653a1b392270: deleting -1711462110.192881 [0] gc: gc_delete_writer(0x653a1b392270, 110aba1:7b19badd:ce0adb73:803) -1711462110.192881 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #17: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.192908 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:3c2 #18: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:803}} -1711462110.192918 [0] recvMC: HEARTBEAT(F#25:17..17 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@17(sync)) -1711462110.192920 [0] gc: non-timed queue now has 1 items -1711462110.192951 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:803 @ 0x653a1b2ebe84) user 14 builtin 12 -1711462110.192958 [0] gc: gc 0x77041c031bc0: deleting -1711462110.192966 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c031bc0, 110443d:bb7f10a5:18901533:803) -1711462110.192958 [0] tev: xpack_addmsg 0x770414001390 0x770424002b20 0(data(110aba1:7b19badd:ce0adb73:3c2:#18/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.192974 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.192999 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c031bc0, 110443d:bb7f10a5:18901533:803) -1711462110.193053 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424002c18:48 0x770424002d04:28 [ udp/239.255.0.1:7400@2 ] -1711462110.193075 [0] tev: traffic-xmit (1) 96 -1711462110.193158 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #19: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,20,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,22,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,24,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.193181 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae6110 0(data(110aba1:7b19badd:ce0adb73:403:#19/1)): niov 0 sz 0 => now niov 3 sz 304 -1711462110.193198 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 6 seq 19 maxseq 13) -1711462110.193063 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.193212 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0835409 s (min-ack 13, avail-seq 19, xmit 18) -1711462110.193232 [0] recv: INFOTS(1711462110.192899351) -1711462110.193238 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae61e0 0(control): niov 3 sz 304 => now niov 4 sz 336 -1711462110.193251 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #18 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462110.193300 [0] python3: nn_xpack_send 336: 0x653a1add92cc:20 0x653a1b3a4ae8:36 0x653a1b39ce30:248 0x653a1b3a47f8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.193310 [0] python3: traffic-xmit (1) 336 -1711462110.193318 [0] python3: => EVERYONE -1711462110.193338 [0] python3: ddsi_unblock_throttled_writer(guid 110aba1:7b19badd:ce0adb73:703) ... -1711462110.193344 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:703) state transition 0 -> 1 -1711462110.193353 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:703) ... -1711462110.193359 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:703) - no unack'ed samples -1711462110.193371 [0] python3: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:703) ... -1711462110.193379 [0] python3: => EVERYONE -1711462110.193394 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:703) state transition 1 -> 3 -1711462110.193398 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 336 from udp/10.101.12.71:52025 -1711462110.193434 [0] recvMC: INFOTS(1711462110.193029153) -1711462110.193456 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #19 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.193487 [0] recvMC: HEARTBEAT(F#29:19..19 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.193823 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.193840 [0] recv: INFOTS(1711462110.193730576) -1711462110.193877 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #17 L(:1c1 16957.853340)) -1711462110.193905 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #17: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:703}} -1711462110.193916 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:703 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:703) - deleting -1711462110.193938 [0] dq.builtin: => EVERYONE -1711462110.193955 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.193973 [0] recv: INFOTS(1711462110.193391175) -1711462110.193959 [0] dq.builtin: delete -1711462110.193999 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #9 L(:1c1 16957.853474)) -1711462110.194060 [0] gc: gc 0x77041c014c20: deleting -1711462110.194118 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #9: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:1304}} -1711462110.194122 [0] gc: gc 0x77041c031bc0: deleting -1711462110.194202 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 184 from udp/10.101.12.71:44991 -1711462110.194211 [0] gc: gc_delete_proxy_writer (0x77041c031bc0, 110443d:bb7f10a5:18901533:803) -1711462110.194220 [0] recvMC: INFOTS(1711462110.193879178) -1711462110.194145 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:1304 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:1304) => EVERYONE -1711462110.194227 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=17 -1711462110.194276 [0] dq.builtin: - deleting -1711462110.194296 [0] gc: gc 0x653a1b314040: deleting -1711462110.194246 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #18 L(:1c1 16957.853719) => EVERYONE -1711462110.194309 [0] gc: gc_delete_writer(0x653a1b314040, 110aba1:7b19badd:ce0adb73:703) -1711462110.194373 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:3c2 #19: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:703}} -1711462110.194383 [0] dq.builtin: delete -1711462110.194375 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #18: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.194404 [0] gc: non-timed queue now has 1 items -1711462110.194469 [0] recvMC: HEARTBEAT(F#26:18..18 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@18(sync)) -1711462110.194490 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:703 @ 0x653a1b3ea6c4) user 13 builtin 12 -1711462110.194489 [0] tev: xpack_addmsg 0x770414001390 0x770424002d30 0(data(110aba1:7b19badd:ce0adb73:3c2:#19/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.194509 [0] gc: gc 0x77041c02cf40: deleting -1711462110.194542 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c02cf40, 110443d:bb7f10a5:18901533:703) -1711462110.194557 [0] gc: gc 0x77041c014c20: deleting -1711462110.194574 [0] gc: gc 0x77041c030430: deleting -1711462110.194579 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c02cf40, 110443d:bb7f10a5:18901533:703) -1711462110.194582 [0] gc: gc_delete_proxy_reader (0x77041c030430, 110e21c:d0762c48:a9f0fb28:1304) -1711462110.194616 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.194639 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=29 -1711462110.194657 [0] gc: gc 0x653a1b314040: not yet, shortsleep -1711462110.194620 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424002e28:48 0x770424002f14:28 [ udp/239.255.0.1:7400@2 ] -1711462110.194697 [0] tev: traffic-xmit (1) 96 -1711462110.194704 [0] recv: INFOTS(1711462110.194357465) -1711462110.194776 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #19 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462110.194726 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #20: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,22,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,24,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.194836 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae6110 0(data(110aba1:7b19badd:ce0adb73:403:#20/1)): niov 0 sz 0 => now niov 3 sz 256 -1711462110.194864 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 6 seq 20 maxseq 13) -1711462110.194886 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.081939 s (min-ack 13, avail-seq 20, xmit 19) -1711462110.194900 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae61e0 0(control): niov 3 sz 256 => now niov 4 sz 288 -1711462110.194965 [0] python3: nn_xpack_send 288: 0x653a1add92cc:20 0x653a1b3a4ae8:36 0x653a1b383f20:200 0x653a1b3a47f8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.194999 [0] python3: traffic-xmit (1) 288 -1711462110.195017 [0] python3: => EVERYONE -1711462110.194968 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 288 from udp/10.101.12.71:52025 -1711462110.195042 [0] python3: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:1504) ... -1711462110.195082 [0] recvMC: INFOTS(1711462110.194629401) -1711462110.195105 [0] python3: => EVERYONE -1711462110.195139 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #20 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.195171 [0] recvMC: HEARTBEAT(F#30:20..20 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.195419 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.195441 [0] recv: INFOTS(1711462110.195259141) -1711462110.195466 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #11 L(:1c1 16957.854941)) -1711462110.195506 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #11: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:1203}} -1711462110.195520 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:1203 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:1203) - deleting -1711462110.195540 [0] dq.builtin: => EVERYONE -1711462110.195579 [0] dq.builtin: delete -1711462110.195582 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.195622 [0] recv: INFOTS(1711462110.195373351) -1711462110.195646 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #18 L(:1c1 16957.855120)) -1711462110.195706 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #18: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:1403}} -1711462110.195724 [0] gc: gc 0x653a1b314040: deleting -1711462110.195736 [0] gc: gc 0x77041c02cf40: deleting -1711462110.195754 [0] gc: gc_delete_proxy_writer (0x77041c02cf40, 110443d:bb7f10a5:18901533:703) -1711462110.195763 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=16 -1711462110.195775 [0] gc: gc 0x77041c014c20: deleting -1711462110.195725 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:1403 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:1403) - deleting -1711462110.195782 [0] gc: gc 0x653a1b36a5e0: deleting -1711462110.195794 [0] dq.builtin: => EVERYONE -1711462110.195814 [0] gc: gc_delete_reader(0x653a1b36a5e0, 110aba1:7b19badd:ce0adb73:1504) -1711462110.195825 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 460 from udp/10.101.12.71:58212 -1711462110.195844 [0] recvMC: INFOTS(1711462110.195421660) -1711462110.195858 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:4c2 #17: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1504}} -1711462110.195823 [0] dq.builtin: delete -1711462110.195867 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #13 L(:1c1 16957.855346) => EVERYONE -1711462110.195883 [0] gc: non-timed queue now has 1 items -1711462110.195945 [0] tev: xpack_addmsg 0x770414001390 0x770424002f40 0(data(110aba1:7b19badd:ce0adb73:4c2:#17/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.195949 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1504 @ 0x653a1b459964) user 12 builtin 12 -1711462110.195985 [0] gc: gc 0x77041c02e1f0: deleting -1711462110.195991 [0] python3: ddsi_unblock_throttled_writer(guid 110aba1:7b19badd:ce0adb73:1403) ... -1711462110.196015 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:1403) state transition 0 -> 1 -1711462110.196043 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #13: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.196058 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:1403) ... -1711462110.196068 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.196081 [0] recvMC: HEARTBEAT(F#20:13..13 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@13(sync)) -1711462110.196051 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424003038:48 0x770424003124:28 [ udp/239.255.0.1:7400@2 ] -1711462110.195995 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c02e1f0, 110e21c:d0762c48:a9f0fb28:1203) -1711462110.196142 [0] tev: traffic-xmit (1) 96 -1711462110.196158 [0] gc: gc 0x653a1b314040: deleting -1711462110.196169 [0] gc: gc 0x77041c02d8b0: deleting -1711462110.196109 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 160 from udp/10.101.12.71:44991 -1711462110.196182 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c02d8b0, 110443d:bb7f10a5:18901533:1403) -1711462110.196211 [0] recvMC: INFOTS(1711462110.195554831) -1711462110.196237 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #19 L(:1c1 16957.855713) => EVERYONE -1711462110.196075 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:1403) - no unack'ed samples -1711462110.196281 [0] python3: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:1403) ... -1711462110.196299 [0] python3: => EVERYONE -1711462110.196307 [0] gc: gc 0x77041c014c20: deleting -1711462110.196323 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:1403) state transition 1 -> 3 -1711462110.196169 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c02e1f0, 110e21c:d0762c48:a9f0fb28:1203) -1711462110.196284 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #19: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{},{}}}}) -1711462110.196356 [0] gc: gc 0x653a1b38e4e0: not yet, shortsleep -1711462110.196372 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c02d8b0, 110443d:bb7f10a5:18901533:1403) -1711462110.196088 [0] recv: INFOTS(1711462110.195845630) -1711462110.196392 [0] recvMC: HEARTBEAT(F#27:19..19 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@19(sync)) -1711462110.196450 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #17 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462110.197083 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.197100 [0] recv: INFOTS(1711462110.196935375) -1711462110.197124 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #10 L(:1c1 16957.856601)) -1711462110.197156 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #10: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:1104}} -1711462110.197168 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:1104 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:1104) => EVERYONE -1711462110.197186 [0] dq.builtin: - deleting -1711462110.197197 [0] dq.builtin: delete -1711462110.197230 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.197250 [0] recv: INFOTS(1711462110.197064444) -1711462110.197272 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #19 L(:1c1 16957.856749)) -1711462110.197294 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #19: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:603}} -1711462110.197305 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:603 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:603) - deleting -1711462110.197313 [0] dq.builtin: => EVERYONE -1711462110.197338 [0] dq.builtin: delete -1711462110.197464 [0] gc: gc 0x653a1b38e4e0: deleting -1711462110.197474 [0] gc: gc_delete_writer(0x653a1b38e4e0, 110aba1:7b19badd:ce0adb73:1403) -1711462110.197501 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:3c2 #20: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1403}} -1711462110.197513 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 120 from udp/10.101.12.71:44991 -1711462110.197532 [0] recvMC: INFOTS(1711462110.197216804) -1711462110.197516 [0] gc: non-timed queue now has 1 items -1711462110.197554 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #20 L(:1c1 16957.857034) => EVERYONE -1711462110.197581 [0] tev: xpack_addmsg 0x770414001390 0x770424003150 0(data(110aba1:7b19badd:ce0adb73:3c2:#20/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.197603 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #20: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{}}) -1711462110.197589 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1403 @ 0x653a1b458d64) user 11 builtin 12 -1711462110.197746 [0] gc: gc 0x77041c02e1f0: deleting -1711462110.197757 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.197628 [0] recvMC: HEARTBEAT(F#28:20..20 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@20(sync)) -1711462110.197791 [0] recv: INFOTS(1711462110.197489510) -1711462110.197759 [0] gc: gc_delete_proxy_writer (0x77041c02e1f0, 110e21c:d0762c48:a9f0fb28:1203) -1711462110.197822 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=28 -1711462110.197809 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #20 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462110.197849 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #21: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,24,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.197691 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424003248:48 0x770424003334:28 [ udp/239.255.0.1:7400@2 ] -1711462110.197835 [0] gc: gc 0x77041c02d8b0: deleting -1711462110.197898 [0] tev: traffic-xmit (1) 96 -1711462110.197900 [0] gc: gc_delete_proxy_writer (0x77041c02d8b0, 110443d:bb7f10a5:18901533:1403) -1711462110.197874 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae6110 0(data(110aba1:7b19badd:ce0adb73:403:#21/1)): niov 0 sz 0 => now niov 3 sz 208 -1711462110.197910 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=15 -1711462110.197923 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 6 seq 21 maxseq 13) -1711462110.197938 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0787794 s (min-ack 13, avail-seq 21, xmit 20) -1711462110.197941 [0] gc: gc 0x77041c014c20: deleting -1711462110.197947 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae61e0 0(control): niov 3 sz 208 => now niov 4 sz 240 -1711462110.197950 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110e21c:d0762c48:a9f0fb28:1104) -1711462110.197965 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=27 -1711462110.197972 [0] gc: gc 0x77041c02ab50: deleting -1711462110.197977 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c02ab50, 110443d:bb7f10a5:18901533:603) -1711462110.197984 [0] gc: gc 0x653a1b314040: deleting -1711462110.197989 [0] gc: gc 0x77041c02e1f0: not yet, shortsleep -1711462110.197993 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c02ab50, 110443d:bb7f10a5:18901533:603) -1711462110.198017 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 240 from udp/10.101.12.71:52025 -1711462110.198025 [0] python3: nn_xpack_send 240: 0x653a1add92cc:20 0x653a1b3a4ae8:36 0x653a1b395ad0:152 0x653a1b3a47f8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.198043 [0] python3: traffic-xmit (1) 240 -1711462110.198026 [0] recvMC: INFOTS(1711462110.197789884) -1711462110.198057 [0] python3: => EVERYONE -1711462110.198074 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #21 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.198082 [0] recvMC: HEARTBEAT(F#31:21..21 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.198085 [0] python3: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:1704) ... -1711462110.198094 [0] python3: => EVERYONE -1711462110.198536 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.198552 [0] recv: INFOTS(1711462110.198317479) -1711462110.198574 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #12 L(:1c1 16957.858053)) -1711462110.198625 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #12: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:1003}} -1711462110.198652 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:1003 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:1003) - deleting -1711462110.198666 [0] dq.builtin: => EVERYONE -1711462110.198698 [0] dq.builtin: delete -1711462110.198787 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 412 from udp/10.101.12.71:58212 -1711462110.198797 [0] recvMC: INFOTS(1711462110.198438587) -1711462110.198808 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #14 L(:1c1 16957.858299) => EVERYONE -1711462110.198900 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #14: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.198917 [0] recvMC: HEARTBEAT(F#21:14..14 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@14(sync)) -1711462110.199057 [0] gc: gc 0x77041c02e1f0: deleting -1711462110.199064 [0] gc: gc 0x77041c02d8b0: deleting -1711462110.199071 [0] gc: gc 0x77041c014c20: deleting -1711462110.199076 [0] gc: gc 0x77041c02ab50: deleting -1711462110.199081 [0] gc: gc_delete_proxy_writer (0x77041c02ab50, 110443d:bb7f10a5:18901533:603) -1711462110.199086 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=14 -1711462110.199094 [0] gc: gc 0x653a1b39cbc0: deleting -1711462110.199098 [0] gc: gc_delete_reader(0x653a1b39cbc0, 110aba1:7b19badd:ce0adb73:1704) -1711462110.199112 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:4c2 #18: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1704}} -1711462110.199121 [0] gc: non-timed queue now has 1 items -1711462110.199133 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1704 @ 0x653a1b39c054) user 10 builtin 12 -1711462110.199139 [0] gc: gc 0x77041c0313c0: deleting -1711462110.199144 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c0313c0, 110e21c:d0762c48:a9f0fb28:1003) -1711462110.199148 [0] tev: xpack_addmsg 0x770414001390 0x770424003360 0(data(110aba1:7b19badd:ce0adb73:4c2:#18/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.199150 [0] gc: gc 0x653a1b314040: deleting -1711462110.199174 [0] gc: gc 0x653a1b39cbc0: not yet, shortsleep -1711462110.199160 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c0313c0, 110e21c:d0762c48:a9f0fb28:1003) -1711462110.199157 [0] python3: ddsi_unblock_throttled_writer(guid 110aba1:7b19badd:ce0adb73:1603) ... -1711462110.199201 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:1603) state transition 0 -> 1 -1711462110.199207 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:1603) ... -1711462110.199212 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:1603) - no unack'ed samples -1711462110.199217 [0] python3: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:1603) ... -1711462110.199224 [0] python3: => EVERYONE -1711462110.199237 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:1603) state transition 1 -> 3 -1711462110.199249 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.199257 [0] recv: INFOTS(1711462110.199105790) -1711462110.199282 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #18 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462110.199265 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424003458:48 0x770424003544:28 [ udp/239.255.0.1:7400@2 ] -1711462110.199310 [0] tev: traffic-xmit (1) 96 -1711462110.199982 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.199997 [0] recv: INFOTS(1711462110.199842623) -1711462110.200010 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #11 L(:1c1 16957.859498)) -1711462110.200043 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #11: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:f04}} -1711462110.200072 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:f04 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:f04) => EVERYONE -1711462110.200097 [0] dq.builtin: - deleting -1711462110.200110 [0] dq.builtin: delete -1711462110.200238 [0] gc: gc 0x653a1b39cbc0: deleting -1711462110.200246 [0] gc: gc 0x77041c0313c0: deleting -1711462110.200251 [0] gc: gc_delete_proxy_writer (0x77041c0313c0, 110e21c:d0762c48:a9f0fb28:1003) -1711462110.200256 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=26 -1711462110.200267 [0] gc: gc 0x653a1b38d9d0: deleting -1711462110.200272 [0] gc: gc_delete_writer(0x653a1b38d9d0, 110aba1:7b19badd:ce0adb73:1603) -1711462110.200288 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:3c2 #21: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1603}} -1711462110.200307 [0] gc: non-timed queue now has 1 items -1711462110.200322 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1603 @ 0x653a1b39b554) user 9 builtin 12 -1711462110.200331 [0] tev: xpack_addmsg 0x770414001390 0x770424003570 0(data(110aba1:7b19badd:ce0adb73:3c2:#21/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.200350 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.200333 [0] gc: gc 0x77041c014c20: deleting -1711462110.200371 [0] recv: INFOTS(1711462110.200208970) -1711462110.200399 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424003668:48 0x770424003754:28 [ udp/239.255.0.1:7400@2 ] -1711462110.200424 [0] tev: traffic-xmit (1) 96 -1711462110.200405 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110e21c:d0762c48:a9f0fb28:f04) -1711462110.200452 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #22: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.200471 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=25 -1711462110.200966 [0] gc: gc 0x653a1b314040: deleting -1711462110.200403 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #13 L(:1c1 16957.859870)) -1711462110.201141 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 364 from udp/10.101.12.71:58212 -1711462110.201152 [0] recvMC: INFOTS(1711462110.200343585) -1711462110.201165 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.201174 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #13: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:e03}} -1711462110.201028 [0] gc: gc 0x653a1b38d9d0: deleting -1711462110.201204 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:e03 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:e03) - deleting -1711462110.201224 [0] dq.builtin: => EVERYONE -1711462110.201179 [0] recv: INFOTS(1711462110.200281996) -1711462110.201044 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae6110 0(data(110aba1:7b19badd:ce0adb73:403:#22/1)): niov 0 sz 0 => now niov 3 sz 160 -1711462110.201255 [0] dq.builtin: delete -1711462110.201321 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 6 seq 22 maxseq 13) -1711462110.201177 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #15 L(:1c1 16957.860654) => EVERYONE -1711462110.201341 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0761866 s (min-ack 13, avail-seq 22, xmit 21) -1711462110.201339 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #21 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462110.201364 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae61e0 0(control): niov 3 sz 160 => now niov 4 sz 192 -1711462110.201456 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.201504 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #15: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.201511 [0] python3: nn_xpack_send 192: 0x653a1add92cc:20 0x653a1b3a4ae8:36 0x653a1b399fe0:104 0x653a1b3a47f8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.201547 [0] recvMC: HEARTBEAT(F#22:15..15 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@15(sync)) -1711462110.201564 [0] python3: traffic-xmit (1) 192 -1711462110.201586 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 192 from udp/10.101.12.71:52025 -1711462110.201587 [0] python3: => EVERYONE -1711462110.201597 [0] recvMC: INFOTS(1711462110.200384071) -1711462110.201628 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #22 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.201645 [0] recvMC: HEARTBEAT(F#32:22..22 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.201633 [0] python3: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:1904) ... -1711462110.201681 [0] python3: => EVERYONE -1711462110.201866 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.201941 [0] recv: INFOTS(1711462110.201520038) -1711462110.201969 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #12 L(:1c1 16957.861437)) -1711462110.202045 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #12: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:d04}} -1711462110.202064 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:d04 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:d04) => EVERYONE -1711462110.202082 [0] dq.builtin: - deleting -1711462110.202089 [0] dq.builtin: delete -1711462110.202550 [0] gc: gc 0x77041c014c20: deleting -1711462110.202561 [0] gc: gc 0x77041c031bc0: deleting -1711462110.202567 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c031bc0, 110e21c:d0762c48:a9f0fb28:e03) -1711462110.202575 [0] gc: gc 0x653a1b39cbc0: deleting -1711462110.202582 [0] gc: gc_delete_reader(0x653a1b39cbc0, 110aba1:7b19badd:ce0adb73:1904) -1711462110.202607 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:4c2 #19: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1904}} -1711462110.202604 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c031bc0, 110e21c:d0762c48:a9f0fb28:e03) -1711462110.202622 [0] gc: non-timed queue now has 1 items -1711462110.202657 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1904 @ 0x653a1b3a0714) user 8 builtin 12 -1711462110.202664 [0] tev: xpack_addmsg 0x770414001390 0x770424003780 0(data(110aba1:7b19badd:ce0adb73:4c2:#19/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.202667 [0] gc: gc 0x77041c02a1c0: deleting -1711462110.202694 [0] gc: gc_delete_proxy_reader (0x77041c02a1c0, 110e21c:d0762c48:a9f0fb28:d04) -1711462110.202701 [0] python3: ddsi_unblock_throttled_writer(guid 110aba1:7b19badd:ce0adb73:1803) ... -1711462110.202704 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=24 -1711462110.202716 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:1803) state transition 0 -> 1 -1711462110.202730 [0] gc: gc 0x77041c031bc0: deleting -1711462110.202740 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:1803) ... -1711462110.202753 [0] gc: gc_delete_proxy_writer (0x77041c031bc0, 110e21c:d0762c48:a9f0fb28:e03) -1711462110.202741 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424003878:48 0x770424003964:28 [ udp/239.255.0.1:7400@2 ] -1711462110.202782 [0] tev: traffic-xmit (1) 96 -1711462110.202769 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:1803) - no unack'ed samples -1711462110.202789 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=23 -1711462110.202755 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.202820 [0] recv: INFOTS(1711462110.202594273) -1711462110.202806 [0] gc: gc 0x653a1b314040: deleting -1711462110.202838 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #19 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462110.202863 [0] gc: gc 0x77041c02a1c0: deleting -1711462110.202868 [0] python3: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:1803) ... -1711462110.202884 [0] gc: gc 0x77041c031bc0: not yet, shortsleep -1711462110.202903 [0] python3: => EVERYONE -1711462110.202922 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:1803) state transition 1 -> 3 -1711462110.203048 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.203066 [0] recv: INFOTS(1711462110.202893761) -1711462110.203100 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #14 L(:1c1 16957.862565)) -1711462110.203127 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #14: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:c03}} -1711462110.203144 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:c03 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:c03) - deleting -1711462110.203154 [0] dq.builtin: => EVERYONE -1711462110.203172 [0] dq.builtin: delete -1711462110.203223 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 316 from udp/10.101.12.71:58212 -1711462110.203232 [0] recvMC: INFOTS(1711462110.202997343) -1711462110.203261 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #16 L(:1c1 16957.862734) => EVERYONE -1711462110.203328 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #16: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.203339 [0] recvMC: HEARTBEAT(F#23:16..16 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@16(sync)) -1711462110.203979 [0] gc: gc 0x77041c031bc0: deleting -1711462110.203993 [0] gc: gc 0x653a1b3a1360: deleting -1711462110.203998 [0] gc: gc_delete_writer(0x653a1b3a1360, 110aba1:7b19badd:ce0adb73:1803) -1711462110.204022 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:3c2 #22: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1803}} -1711462110.204040 [0] gc: non-timed queue now has 1 items -1711462110.204058 [0] tev: xpack_addmsg 0x770414001390 0x770424003990 0(data(110aba1:7b19badd:ce0adb73:3c2:#22/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.204059 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:1803 @ 0x653a1b39f924) user 7 builtin 12 -1711462110.204103 [0] gc: gc 0x77041c014c20: deleting -1711462110.204112 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110e21c:d0762c48:a9f0fb28:c03) -1711462110.204128 [0] gc: gc 0x653a1b314040: not yet, shortsleep -1711462110.204141 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #23: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{},{}}}} -1711462110.204131 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424003a88:48 0x770424003b74:28 [ udp/239.255.0.1:7400@2 ] -1711462110.204174 [0] tev: traffic-xmit (1) 96 -1711462110.204163 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae6110 0(data(110aba1:7b19badd:ce0adb73:403:#23/1)): niov 0 sz 0 => now niov 3 sz 136 -1711462110.204152 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110e21c:d0762c48:a9f0fb28:c03) -1711462110.204233 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 6 seq 23 maxseq 13) -1711462110.204278 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.072478 s (min-ack 13, avail-seq 23, xmit 22) -1711462110.204294 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae61e0 0(control): niov 3 sz 136 => now niov 4 sz 168 -1711462110.204136 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.204338 [0] recv: INFOTS(1711462110.204013066) -1711462110.204349 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #22 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462110.204368 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 168 from udp/10.101.12.71:52025 -1711462110.204375 [0] recvMC: INFOTS(1711462110.204092708) -1711462110.204398 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #23 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.204414 [0] python3: nn_xpack_send 168: 0x653a1add92cc:20 0x653a1b3a4ae8:36 0x653a1b44d700:80 0x653a1b3a47f8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.204460 [0] recvMC: HEARTBEAT(F#33:23..23 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.204426 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.204507 [0] recv: INFOTS(1711462110.204117111) -1711462110.204462 [0] python3: traffic-xmit (1) 168 -1711462110.204533 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #13 L(:1c1 16957.863997)) -1711462110.204566 [0] python3: => EVERYONE -1711462110.204582 [0] python3: ddsi_unblock_throttled_writer(guid 110aba1:7b19badd:ce0adb73:603) ... -1711462110.204592 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:603) state transition 0 -> 1 -1711462110.204582 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #13: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:b04}} -1711462110.204600 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:603) ... -1711462110.204630 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:b04 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:b04) => EVERYONE -1711462110.204656 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:603) - no unack'ed samples -1711462110.204663 [0] python3: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:603) ... -1711462110.204671 [0] dq.builtin: - deleting -1711462110.204672 [0] python3: => EVERYONE -1711462110.204687 [0] dq.builtin: delete -1711462110.204709 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:603) state transition 1 -> 3 -1711462110.205221 [0] gc: gc 0x653a1b314040: deleting -1711462110.205239 [0] gc: gc 0x77041c014c20: deleting -1711462110.205246 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110e21c:d0762c48:a9f0fb28:c03) -1711462110.205253 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=22 -1711462110.205262 [0] gc: gc 0x77041c030430: deleting -1711462110.205268 [0] gc: gc_delete_proxy_reader (0x77041c030430, 110e21c:d0762c48:a9f0fb28:b04) -1711462110.205273 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=21 -1711462110.205280 [0] gc: gc 0x653a1b39cbc0: deleting -1711462110.205285 [0] gc: gc_delete_writer(0x653a1b39cbc0, 110aba1:7b19badd:ce0adb73:603) -1711462110.205304 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:3c2 #23: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:603}} -1711462110.205315 [0] gc: non-timed queue now has 1 items -1711462110.205333 [0] tev: xpack_addmsg 0x770414001390 0x770424003ba0 0(data(110aba1:7b19badd:ce0adb73:3c2:#23/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.205341 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:603 @ 0x653a1b2cb464) user 6 builtin 12 -1711462110.205365 [0] gc: gc 0x653a1b314040: deleting -1711462110.205372 [0] gc: gc 0x77041c030430: deleting -1711462110.205384 [0] gc: gc 0x653a1b39cbc0: not yet, shortsleep -1711462110.205406 [0] python3: write_sample 110aba1:7b19badd:ce0adb73:403 #24: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{}} -1711462110.205425 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.205408 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424003c98:48 0x770424003d84:28 [ udp/239.255.0.1:7400@2 ] -1711462110.205429 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae6110 0(data(110aba1:7b19badd:ce0adb73:403:#24/1)): niov 0 sz 0 => now niov 3 sz 88 -1711462110.205448 [0] tev: traffic-xmit (1) 96 -1711462110.205474 [0] recv: INFOTS(1711462110.205296205) -1711462110.205496 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #23 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462110.205502 [0] python3: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 6 seq 24 maxseq 13) -1711462110.205519 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.205547 [0] recv: INFOTS(1711462110.205333502) -1711462110.205537 [0] python3: heartbeat(wr 110aba1:7b19badd:ce0adb73:403 final) piggybacked, resched in 0.0712054 s (min-ack 13, avail-seq 24, xmit 23) -1711462110.205656 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #15 L(:1c1 16957.865049)) -1711462110.205665 [0] python3: xpack_addmsg 0x653a1add92c0 0x653a1aae61e0 0(control): niov 3 sz 88 => now niov 4 sz 120 -1711462110.205705 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #15: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:a03}} -1711462110.205735 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:a03 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:a03) - deleting -1711462110.205747 [0] dq.builtin: => EVERYONE -1711462110.205748 [0] python3: nn_xpack_send 120: 0x653a1add92cc:20 0x653a1b3a4ae8:36 0x653a1b479c30:32 0x653a1b3a47f8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.205790 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 120 from udp/10.101.12.71:52025 -1711462110.205802 [0] python3: traffic-xmit (1) 120 -1711462110.205827 [0] recvMC: INFOTS(1711462110.205378348) -1711462110.205851 [0] python3: => EVERYONE -1711462110.205833 [0] dq.builtin: delete -1711462110.205939 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #24 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.205954 [0] recvMC: HEARTBEAT(F#34:24..24 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.206029 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 268 from udp/10.101.12.71:58212 -1711462110.206040 [0] recvMC: INFOTS(1711462110.205461976) -1711462110.206053 [0] python3: ddsi_unblock_throttled_writer(guid 110aba1:7b19badd:ce0adb73:403) ... -1711462110.206059 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #17 L(:1c1 16957.865542) => EVERYONE -1711462110.206077 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:403) state transition 0 -> 1 -1711462110.206095 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:403) ... -1711462110.206108 [0] python3: writer_set_state(110aba1:7b19badd:ce0adb73:403) state transition 1 -> 2 -1711462110.206127 [0] python3: delete_writer(guid 110aba1:7b19badd:ce0adb73:403) - unack'ed samples, will delete when ack'd or at t = 16948.865625 -1711462110.206153 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #17: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.206172 [0] recvMC: HEARTBEAT(F#24:17..17 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@17(sync)) -1711462110.206454 [0] gc: gc 0x653a1b39cbc0: deleting -1711462110.206464 [0] gc: gc 0x77041c014c20: deleting -1711462110.206470 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110e21c:d0762c48:a9f0fb28:a03) -1711462110.206508 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110e21c:d0762c48:a9f0fb28:a03) -1711462110.206531 [0] gc: gc 0x77041c014c20: deleting -1711462110.206537 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110e21c:d0762c48:a9f0fb28:a03) -1711462110.206544 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=20 -1711462110.206553 [0] gc: gc 0x653a1b314040: deleting -1711462110.206789 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.206801 [0] recv: INFOTS(1711462110.206657137) -1711462110.206819 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #14 L(:1c1 16957.866303)) -1711462110.206862 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #14: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:904}} -1711462110.206891 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:904 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:904) => EVERYONE -1711462110.206935 [0] dq.builtin: - deleting -1711462110.206951 [0] dq.builtin: delete -1711462110.206956 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.208029 [0] gc: gc 0x77041c014c20: deleting -1711462110.208048 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110e21c:d0762c48:a9f0fb28:904) -1711462110.208062 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=19 -1711462110.208208 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.208222 [0] recv: INFOTS(1711462110.208064226) -1711462110.208238 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #16 L(:1c1 16957.867724)) -1711462110.208294 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #16: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:803}} -1711462110.208311 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:803 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:803) - deleting -1711462110.208324 [0] dq.builtin: => EVERYONE -1711462110.208355 [0] dq.builtin: delete -1711462110.208364 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.208442 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 244 from udp/10.101.12.71:58212 -1711462110.208457 [0] recvMC: INFOTS(1711462110.208197991) -1711462110.208477 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #18 L(:1c1 16957.867959) => EVERYONE -1711462110.208541 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #18: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.208555 [0] recvMC: HEARTBEAT(F#25:18..18 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@18(sync)) -1711462110.209413 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.209425 [0] recv: INFOTS(1711462110.209265145) -1711462110.209438 [0] gc: gc 0x77041c014c20: deleting -1711462110.209459 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110e21c:d0762c48:a9f0fb28:803) -1711462110.209449 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #15 L(:1c1 16957.868927)) -1711462110.209487 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110e21c:d0762c48:a9f0fb28:803) -1711462110.209512 [0] gc: gc 0x77041c014c20: deleting -1711462110.209537 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110e21c:d0762c48:a9f0fb28:803) -1711462110.209513 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #15: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:1504}} -1711462110.209557 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=18 -1711462110.209588 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:1504 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:1504) => EVERYONE -1711462110.209606 [0] dq.builtin: - deleting -1711462110.209621 [0] dq.builtin: delete -1711462110.209627 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.209657 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 220 from udp/10.101.12.71:58212 -1711462110.209684 [0] recvMC: INFOTS(1711462110.209425688) -1711462110.209730 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #19 L(:1c1 16957.869184) => EVERYONE -1711462110.209857 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #19: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.209880 [0] recvMC: HEARTBEAT(F#26:19..19 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@19(sync)) -1711462110.210621 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.210639 [0] recv: INFOTS(1711462110.210493781) -1711462110.210657 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #17 L(:1c1 16957.870141)) -1711462110.210707 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #17: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:703}} -1711462110.210708 [0] gc: gc 0x77041c014c20: deleting -1711462110.210755 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110e21c:d0762c48:a9f0fb28:1504) -1711462110.210768 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=17 -1711462110.210736 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:703 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:703) - deleting -1711462110.210812 [0] dq.builtin: => EVERYONE -1711462110.210833 [0] dq.builtin: delete -1711462110.210841 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.210874 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 196 from udp/10.101.12.71:58212 -1711462110.210918 [0] recvMC: INFOTS(1711462110.210679198) -1711462110.210961 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #20 L(:1c1 16957.870418) => EVERYONE -1711462110.210994 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #20: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.211010 [0] recvMC: HEARTBEAT(F#27:20..20 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@20(sync)) -1711462110.211805 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.211825 [0] recv: INFOTS(1711462110.211688403) -1711462110.211841 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #18 L(:1c1 16957.871326)) -1711462110.211895 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #18: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:1403}} -1711462110.211914 [0] gc: gc 0x77041c014c20: deleting -1711462110.211933 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110e21c:d0762c48:a9f0fb28:703) -1711462110.211916 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:1403 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:1403) - deleting -1711462110.211959 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110e21c:d0762c48:a9f0fb28:703) -1711462110.211964 [0] dq.builtin: => EVERYONE -1711462110.211984 [0] gc: gc 0x77041c014c20: deleting -1711462110.212009 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110e21c:d0762c48:a9f0fb28:703) -1711462110.212026 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=16 -1711462110.211995 [0] dq.builtin: delete -1711462110.212043 [0] gc: gc 0x77041c02cf40: not yet, shortsleep -1711462110.211997 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 172 from udp/10.101.12.71:58212 -1711462110.212083 [0] recvMC: INFOTS(1711462110.211821961) -1711462110.212107 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #21 L(:1c1 16957.871582) => EVERYONE -1711462110.212144 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #21: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{},{}}}}) -1711462110.212161 [0] recvMC: HEARTBEAT(F#28:21..21 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@21(sync)) -1711462110.213041 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.213054 [0] recv: INFOTS(1711462110.212917857) -1711462110.213074 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #19 L(:1c1 16957.872556)) -1711462110.213127 [0] gc: gc 0x77041c02cf40: deleting -1711462110.213140 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #19: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:603}} -1711462110.213145 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c02cf40, 110e21c:d0762c48:a9f0fb28:1403) -1711462110.213171 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:603 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:603) - deleting -1711462110.213195 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c02cf40, 110e21c:d0762c48:a9f0fb28:1403) -1711462110.213222 [0] dq.builtin: => EVERYONE -1711462110.213203 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 120 from udp/10.101.12.71:58212 -1711462110.213250 [0] gc: gc 0x77041c02cf40: deleting -1711462110.213270 [0] recvMC: INFOTS(1711462110.213044269) -1711462110.213258 [0] dq.builtin: delete -1711462110.213289 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #22 L(:1c1 16957.872771) => EVERYONE -1711462110.213331 [0] gc: gc_delete_proxy_writer (0x77041c02cf40, 110e21c:d0762c48:a9f0fb28:1403) -1711462110.213343 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=15 -1711462110.213370 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #22: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{}}) -1711462110.213410 [0] gc: gc 0x77041c014c20: deleting -1711462110.213420 [0] recvMC: HEARTBEAT(F#29:22..22 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@22(sync)) -1711462110.213422 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110e21c:d0762c48:a9f0fb28:603) -1711462110.213446 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2096 from udp/10.101.12.71:40473 -1711462110.213456 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110e21c:d0762c48:a9f0fb28:603) -1711462110.213461 [0] recvMC: INFOTS(1711462110.213069639) -1711462110.213488 [0] gc: gc 0x77041c014c20: deleting -1711462110.213505 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #46 L(:1c1 16957.872963) => EVERYONE -1711462110.213511 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110e21c:d0762c48:a9f0fb28:603) -1711462110.213533 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=14 -1711462110.213676 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #46: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462110.213719 [0] recvMC: HEARTBEAT(#55:46..46 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@46(sync)) -1711462110.213789 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#6:47/0: -1711462110.213803 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462110.213814 [0] tev: xpack_addmsg 0x770414001390 0x770424003ba0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.213846 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770424003c88:44 [ udp/10.101.12.71:7415@2 ] -1711462110.213854 [0] tev: traffic-xmit (1) 64 -1711462110.214569 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.214581 [0] recv: INFOTS(1711462110.214373670) -1711462110.214597 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #41 L(:1c1 16957.874082)) -1711462110.214631 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #41: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2704}} -1711462110.214658 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2704 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2704) => EVERYONE -1711462110.214681 [0] dq.builtin: - deleting -1711462110.214698 [0] dq.builtin: delete -1711462110.214710 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.215807 [0] gc: gc 0x77041c014c20: deleting -1711462110.215835 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2704) -1711462110.215844 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=96 -1711462110.215904 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.215916 [0] recv: INFOTS(1711462110.215754782) -1711462110.215942 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #46 L(:1c1 16957.875418)) -1711462110.215987 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #46: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2603}} -1711462110.216014 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2603 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2603) - deleting -1711462110.216031 [0] dq.builtin: => EVERYONE -1711462110.216054 [0] dq.builtin: delete -1711462110.216069 [0] gc: gc 0x77041c014c20: deleting -1711462110.216081 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2603) -1711462110.216098 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2603) -1711462110.216115 [0] gc: gc 0x77041c014c20: deleting -1711462110.216126 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2603) -1711462110.216125 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2048 from udp/10.101.12.71:40473 -1711462110.216144 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=95 -1711462110.216164 [0] recvMC: INFOTS(1711462110.215865725) -1711462110.216195 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #47 L(:1c1 16957.875665) => EVERYONE -1711462110.216349 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #47: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462110.216368 [0] recvMC: HEARTBEAT(F#56:47..47 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@47(sync)) -1711462110.217103 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.217120 [0] recv: INFOTS(1711462110.216976537) -1711462110.217143 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #42 L(:1c1 16957.876622)) -1711462110.217206 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #42: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1304}} -1711462110.217255 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1304 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1304) => EVERYONE -1711462110.217274 [0] dq.builtin: - deleting -1711462110.217290 [0] dq.builtin: delete -1711462110.217300 [0] gc: gc 0x77041c014c20: deleting -1711462110.217327 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1304) -1711462110.217340 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=94 -1711462110.218585 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.218601 [0] recv: INFOTS(1711462110.218401795) -1711462110.218623 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #47 L(:1c1 16957.878102)) -1711462110.218663 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #47: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1203}} -1711462110.218683 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1203 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1203) - deleting -1711462110.218691 [0] dq.builtin: => EVERYONE -1711462110.218710 [0] dq.builtin: delete -1711462110.218723 [0] gc: gc 0x77041c014c20: deleting -1711462110.218736 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1203) -1711462110.218760 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1203) -1711462110.218788 [0] gc: gc 0x77041c014c20: deleting -1711462110.218802 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1203) -1711462110.218815 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=93 -1711462110.218951 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2000 from udp/10.101.12.71:40473 -1711462110.218967 [0] recvMC: INFOTS(1711462110.218561783) -1711462110.218990 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #48 L(:1c1 16957.878468) => EVERYONE -1711462110.219166 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #48: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462110.219182 [0] recvMC: HEARTBEAT(F#57:48..48 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@48(sync)) -1711462110.219813 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.219841 [0] recv: INFOTS(1711462110.219653728) -1711462110.219868 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #43 L(:1c1 16957.879343)) -1711462110.219912 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #43: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1104}} -1711462110.219925 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1104 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1104) => EVERYONE -1711462110.219950 [0] dq.builtin: - deleting -1711462110.219976 [0] dq.builtin: delete -1711462110.219992 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.221066 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.221088 [0] recv: INFOTS(1711462110.220906100) -1711462110.221112 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #48 L(:1c1 16957.880589)) -1711462110.221189 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #48: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1003}} -1711462110.221215 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1003 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1003) - deleting -1711462110.221231 [0] dq.builtin: => EVERYONE -1711462110.221270 [0] dq.builtin: delete -1711462110.221272 [0] gc: gc 0x77041c014c20: deleting -1711462110.221302 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1104) -1711462110.221313 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=92 -1711462110.221327 [0] gc: gc 0x77041c026db0: deleting -1711462110.221335 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c026db0, 110d7b4:17c5b8c5:94bd0ff4:1003) -1711462110.221359 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c026db0, 110d7b4:17c5b8c5:94bd0ff4:1003) -1711462110.221389 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1952 from udp/10.101.12.71:40473 -1711462110.221408 [0] recvMC: INFOTS(1711462110.221033854) -1711462110.221394 [0] gc: gc 0x77041c026db0: deleting -1711462110.221435 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #49 L(:1c1 16957.880909) => EVERYONE -1711462110.221460 [0] gc: gc_delete_proxy_writer (0x77041c026db0, 110d7b4:17c5b8c5:94bd0ff4:1003) -1711462110.221479 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=91 -1711462110.221620 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #49: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,4) -1711462110.221634 [0] recvMC: HEARTBEAT(F#58:49..49 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@49(sync)) -1711462110.222317 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.222341 [0] recv: INFOTS(1711462110.222150811) -1711462110.222365 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #44 L(:1c1 16957.881842)) -1711462110.222410 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #44: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:f04}} -1711462110.222441 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:f04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:f04) => EVERYONE -1711462110.222471 [0] dq.builtin: - deleting -1711462110.222512 [0] dq.builtin: delete -1711462110.222525 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.223608 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.223625 [0] recv: INFOTS(1711462110.223428697) -1711462110.223634 [0] gc: gc 0x77041c014c20: deleting -1711462110.223667 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:f04) -1711462110.223689 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=90 -1711462110.223645 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #49 L(:1c1 16957.883126)) -1711462110.223751 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #49: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:e03}} -1711462110.223775 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:e03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:e03) - deleting -1711462110.223790 [0] dq.builtin: => EVERYONE -1711462110.223815 [0] dq.builtin: delete -1711462110.223830 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.223902 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1904 from udp/10.101.12.71:40473 -1711462110.223947 [0] recvMC: INFOTS(1711462110.223556659) -1711462110.223967 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #50 L(:1c1 16957.883449) => EVERYONE -1711462110.224136 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #50: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,4) -1711462110.224149 [0] recvMC: HEARTBEAT(F#59:50..50 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@50(sync)) -1711462110.224808 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.224840 [0] recv: INFOTS(1711462110.224684003) -1711462110.224864 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #45 L(:1c1 16957.884336)) -1711462110.224923 [0] gc: gc 0x77041c014c20: deleting -1711462110.224945 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:e03) -1711462110.224929 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #45: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:d04}} -1711462110.224979 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:e03) -1711462110.225010 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:d04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:d04) => EVERYONE -1711462110.225060 [0] dq.builtin: - deleting -1711462110.225066 [0] gc: gc 0x77041c014c20: deleting -1711462110.225075 [0] dq.builtin: delete -1711462110.225097 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:e03) -1711462110.225137 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=89 -1711462110.225164 [0] gc: gc 0x77041c02e1f0: deleting -1711462110.225175 [0] gc: gc_delete_proxy_reader (0x77041c02e1f0, 110d7b4:17c5b8c5:94bd0ff4:d04) -1711462110.225187 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=88 -1711462110.226096 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.226119 [0] recv: INFOTS(1711462110.225949014) -1711462110.226142 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #50 L(:1c1 16957.885620)) -1711462110.226194 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #50: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:c03}} -1711462110.226214 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:c03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:c03) - deleting -1711462110.226231 [0] dq.builtin: => EVERYONE -1711462110.226266 [0] dq.builtin: delete -1711462110.226281 [0] gc: gc 0x77041c014c20: deleting -1711462110.226301 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:c03) -1711462110.226329 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:c03) -1711462110.226353 [0] gc: gc 0x77041c014c20: deleting -1711462110.226363 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:c03) -1711462110.226373 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=87 -1711462110.226426 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1856 from udp/10.101.12.71:40473 -1711462110.226462 [0] recvMC: INFOTS(1711462110.226054803) -1711462110.226491 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #51 L(:1c1 16957.885961) => EVERYONE -1711462110.226719 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #51: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,4) -1711462110.226745 [0] recvMC: HEARTBEAT(F#60:51..51 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@51(sync)) -1711462110.227322 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.227359 [0] recv: INFOTS(1711462110.227176717) -1711462110.227382 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #46 L(:1c1 16957.886860)) -1711462110.227442 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #46: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:b04}} -1711462110.227480 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:b04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:b04) => EVERYONE -1711462110.227500 [0] dq.builtin: - deleting -1711462110.227519 [0] dq.builtin: delete -1711462110.227529 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.228599 [0] gc: gc 0x77041c014c20: deleting -1711462110.228617 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:b04) -1711462110.228625 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=86 -1711462110.228814 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.228841 [0] recv: INFOTS(1711462110.228522592) -1711462110.228954 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #51 L(:1c1 16957.888328)) -1711462110.229017 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #51: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:a03}} -1711462110.229037 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:a03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:a03) - deleting -1711462110.229049 [0] dq.builtin: => EVERYONE -1711462110.229077 [0] dq.builtin: delete -1711462110.229089 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.229249 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1808 from udp/10.101.12.71:40473 -1711462110.229275 [0] recvMC: INFOTS(1711462110.228719825) -1711462110.229301 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #52 L(:1c1 16957.888775) => EVERYONE -1711462110.229531 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #52: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.229553 [0] recvMC: HEARTBEAT(F#61:52..52 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@52(sync)) -1711462110.230029 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.230049 [0] recv: INFOTS(1711462110.229849806) -1711462110.230073 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #47 L(:1c1 16957.889550)) -1711462110.230150 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #47: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:904}} -1711462110.230172 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:904 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:904) => EVERYONE -1711462110.230183 [0] dq.builtin: - deleting -1711462110.230191 [0] dq.builtin: delete -1711462110.230209 [0] gc: gc 0x77041c014c20: deleting -1711462110.230218 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:a03) -1711462110.230227 [0] gc: gc 0x77041c02d8b0: deleting -1711462110.230234 [0] gc: gc_delete_proxy_reader (0x77041c02d8b0, 110d7b4:17c5b8c5:94bd0ff4:904) -1711462110.230245 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=85 -1711462110.230237 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:a03) -1711462110.230281 [0] gc: gc 0x77041c014c20: deleting -1711462110.230294 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:a03) -1711462110.230309 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=84 -1711462110.231138 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.231150 [0] recv: INFOTS(1711462110.231018837) -1711462110.231164 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #52 L(:1c1 16957.890652)) -1711462110.231207 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #52: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:803}} -1711462110.231228 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:803 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:803) - deleting -1711462110.231235 [0] dq.builtin: => EVERYONE -1711462110.231247 [0] dq.builtin: delete -1711462110.231253 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.231423 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1784 from udp/10.101.12.71:40473 -1711462110.231444 [0] recvMC: INFOTS(1711462110.231152392) -1711462110.231463 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #53 L(:1c1 16957.890945) => EVERYONE -1711462110.231634 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #53: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.231651 [0] recvMC: HEARTBEAT(F#62:53..53 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@53(sync)) -1711462110.232332 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.232357 [0] recv: INFOTS(1711462110.232191115) -1711462110.232354 [0] gc: gc 0x77041c014c20: deleting -1711462110.232387 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:803) -1711462110.232375 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #53 L(:1c1 16957.891858)) -1711462110.232442 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:803) -1711462110.232445 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #53: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:703}} -1711462110.232486 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:703 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:703) - deleting -1711462110.232520 [0] dq.builtin: => EVERYONE -1711462110.232576 [0] dq.builtin: delete -1711462110.232486 [0] gc: gc 0x77041c014c20: deleting -1711462110.232600 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:803) -1711462110.232614 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=83 -1711462110.232631 [0] gc: gc 0x77041c02ab50: deleting -1711462110.232641 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c02ab50, 110d7b4:17c5b8c5:94bd0ff4:703) -1711462110.232663 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c02ab50, 110d7b4:17c5b8c5:94bd0ff4:703) -1711462110.232685 [0] gc: gc 0x77041c02ab50: deleting -1711462110.232695 [0] gc: gc_delete_proxy_writer (0x77041c02ab50, 110d7b4:17c5b8c5:94bd0ff4:703) -1711462110.232704 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=82 -1711462110.232724 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1736 from udp/10.101.12.71:40473 -1711462110.232734 [0] recvMC: INFOTS(1711462110.232345337) -1711462110.232754 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #54 L(:1c1 16957.892236) => EVERYONE -1711462110.232888 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #54: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.232901 [0] recvMC: HEARTBEAT(F#63:54..54 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@54(sync)) -1711462110.233481 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.233503 [0] recv: INFOTS(1711462110.233337855) -1711462110.233517 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #48 L(:1c1 16957.893004)) -1711462110.233572 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #48: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1504}} -1711462110.233602 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1504 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1504) => EVERYONE -1711462110.233654 [0] dq.builtin: - deleting -1711462110.233677 [0] dq.builtin: delete -1711462110.233693 [0] gc: gc 0x77041c014c20: deleting -1711462110.233708 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1504) -1711462110.233721 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=81 -1711462110.234715 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.234743 [0] recv: INFOTS(1711462110.234533470) -1711462110.234768 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #54 L(:1c1 16957.894244)) -1711462110.234825 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #54: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1403}} -1711462110.234859 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1403 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1403) - deleting -1711462110.234875 [0] dq.builtin: => EVERYONE -1711462110.234918 [0] dq.builtin: delete -1711462110.234935 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.235145 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1688 from udp/10.101.12.71:40473 -1711462110.235156 [0] recvMC: INFOTS(1711462110.234735835) -1711462110.235171 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #55 L(:1c1 16957.894659) => EVERYONE -1711462110.235301 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #55: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.235311 [0] recvMC: HEARTBEAT(F#64:55..55 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@55(sync)) -1711462110.235939 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.235958 [0] recv: INFOTS(1711462110.235766500) -1711462110.235975 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #49 L(:1c1 16957.895460)) -1711462110.236011 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #49: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1704}} -1711462110.236015 [0] gc: gc 0x77041c014c20: deleting -1711462110.236035 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1704 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1704) => EVERYONE -1711462110.236051 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1403) -1711462110.236082 [0] dq.builtin: - deleting -1711462110.236093 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1403) -1711462110.236109 [0] gc: gc 0x77041c0313c0: not yet, shortsleep -1711462110.236101 [0] dq.builtin: delete -1711462110.237146 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.237163 [0] recv: INFOTS(1711462110.236982638) -1711462110.237197 [0] gc: gc 0x77041c0313c0: deleting -1711462110.237213 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #55 L(:1c1 16957.896666)) -1711462110.237263 [0] gc: gc_delete_proxy_reader (0x77041c0313c0, 110d7b4:17c5b8c5:94bd0ff4:1704) -1711462110.237300 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=80 -1711462110.237304 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #55: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1603}} -1711462110.237316 [0] gc: gc 0x77041c014c20: deleting -1711462110.237333 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1603 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1603) - deleting -1711462110.237348 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1403) -1711462110.237373 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=79 -1711462110.237421 [0] dq.builtin: => EVERYONE -1711462110.237452 [0] dq.builtin: delete -1711462110.237477 [0] gc: gc 0x77041c014c20: deleting -1711462110.237488 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1603) -1711462110.237502 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1640 from udp/10.101.12.71:40473 -1711462110.237512 [0] recvMC: INFOTS(1711462110.237105267) -1711462110.237521 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1603) -1711462110.237528 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #56 L(:1c1 16957.897014) => EVERYONE -1711462110.237563 [0] gc: gc 0x77041c014c20: deleting -1711462110.237584 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1603) -1711462110.237596 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=78 -1711462110.237678 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #56: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.237689 [0] recvMC: HEARTBEAT(F#65:56..56 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@56(sync)) -1711462110.238382 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.238401 [0] recv: INFOTS(1711462110.238231579) -1711462110.238415 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #50 L(:1c1 16957.897903)) -1711462110.238451 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #50: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1904}} -1711462110.238482 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1904 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1904) => EVERYONE -1711462110.238512 [0] dq.builtin: - deleting -1711462110.238530 [0] dq.builtin: delete -1711462110.238542 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.239523 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.239534 [0] recv: INFOTS(1711462110.239384619) -1711462110.239552 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #56 L(:1c1 16957.899036)) -1711462110.239581 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #56: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1803}} -1711462110.239600 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1803 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1803) - deleting -1711462110.239609 [0] dq.builtin: => EVERYONE -1711462110.239627 [0] dq.builtin: delete -1711462110.239640 [0] gc: gc 0x77041c014c20: deleting -1711462110.239663 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1904) -1711462110.239675 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=77 -1711462110.239694 [0] gc: gc 0x77041c02a1c0: deleting -1711462110.239701 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c02a1c0, 110d7b4:17c5b8c5:94bd0ff4:1803) -1711462110.239730 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c02a1c0, 110d7b4:17c5b8c5:94bd0ff4:1803) -1711462110.239756 [0] gc: gc 0x77041c02a1c0: deleting -1711462110.239765 [0] gc: gc_delete_proxy_writer (0x77041c02a1c0, 110d7b4:17c5b8c5:94bd0ff4:1803) -1711462110.239773 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=76 -1711462110.239851 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1592 from udp/10.101.12.71:40473 -1711462110.239862 [0] recvMC: INFOTS(1711462110.239529783) -1711462110.239877 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #57 L(:1c1 16957.899365) => EVERYONE -1711462110.239976 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #57: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.239984 [0] recvMC: HEARTBEAT(F#66:57..57 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@57(sync)) -1711462110.240675 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.240694 [0] recv: INFOTS(1711462110.240557023) -1711462110.240709 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #51 L(:1c1 16957.900196)) -1711462110.240745 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #51: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1b04}} -1711462110.240767 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1b04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1b04) => EVERYONE -1711462110.240785 [0] dq.builtin: - deleting -1711462110.240799 [0] dq.builtin: delete -1711462110.240807 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.240921 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.240930 [0] recv: INFOTS(1711462110.240780572) -1711462110.240940 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #57 L(:1c1 16957.900433)) -1711462110.240976 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #57: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1a03}} -1711462110.240991 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1a03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1a03) - deleting -1711462110.240999 [0] dq.builtin: => EVERYONE -1711462110.241014 [0] dq.builtin: delete -1711462110.241156 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1544 from udp/10.101.12.71:40473 -1711462110.241163 [0] recvMC: INFOTS(1711462110.240869006) -1711462110.241172 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #58 L(:1c1 16957.900666) => EVERYONE -1711462110.241284 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #58: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.241292 [0] recvMC: HEARTBEAT(F#67:58..58 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@58(sync)) -1711462110.241893 [0] gc: gc 0x77041c014c20: deleting -1711462110.241919 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1b04) -1711462110.241932 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=75 -1711462110.241946 [0] gc: gc 0x77041c031bc0: deleting -1711462110.241954 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c031bc0, 110d7b4:17c5b8c5:94bd0ff4:1a03) -1711462110.241982 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c031bc0, 110d7b4:17c5b8c5:94bd0ff4:1a03) -1711462110.242008 [0] gc: gc 0x77041c031bc0: deleting -1711462110.242019 [0] gc: gc_delete_proxy_writer (0x77041c031bc0, 110d7b4:17c5b8c5:94bd0ff4:1a03) -1711462110.242029 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=74 -1711462110.242034 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.242045 [0] recv: INFOTS(1711462110.241943611) -1711462110.242058 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #52 L(:1c1 16957.901547)) -1711462110.242095 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #52: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1d04}} -1711462110.242115 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1d04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1d04) => EVERYONE -1711462110.242130 [0] dq.builtin: - deleting -1711462110.242144 [0] dq.builtin: delete -1711462110.242150 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.243203 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.243219 [0] recv: INFOTS(1711462110.243107441) -1711462110.243246 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #58 L(:1c1 16957.902720)) -1711462110.243250 [0] gc: gc 0x77041c014c20: deleting -1711462110.243266 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1d04) -1711462110.243270 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #58: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1c03}} -1711462110.243273 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=73 -1711462110.243287 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1c03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1c03) - deleting -1711462110.243311 [0] dq.builtin: => EVERYONE -1711462110.243332 [0] dq.builtin: delete -1711462110.243353 [0] gc: gc 0x77041c014c20: deleting -1711462110.243374 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1c03) -1711462110.243403 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1c03) -1711462110.243432 [0] gc: gc 0x77041c014c20: deleting -1711462110.243442 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1c03) -1711462110.243452 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=72 -1711462110.243498 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1496 from udp/10.101.12.71:40473 -1711462110.243504 [0] recvMC: INFOTS(1711462110.243228417) -1711462110.243513 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #59 L(:1c1 16957.903007) => EVERYONE -1711462110.243626 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #59: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.243633 [0] recvMC: HEARTBEAT(F#68:59..59 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@59(sync)) -1711462110.244401 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.244413 [0] recv: INFOTS(1711462110.244270576) -1711462110.244424 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #53 L(:1c1 16957.903915)) -1711462110.244482 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #53: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1f04}} -1711462110.244527 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1f04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1f04) => EVERYONE -1711462110.244568 [0] dq.builtin: - deleting -1711462110.244580 [0] dq.builtin: delete -1711462110.244593 [0] gc: gc 0x77041c014c20: deleting -1711462110.244606 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1f04) -1711462110.244615 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=71 -1711462110.245507 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.245518 [0] recv: INFOTS(1711462110.245398636) -1711462110.245532 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #59 L(:1c1 16957.905020)) -1711462110.245582 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #59: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1e03}} -1711462110.245608 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1e03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1e03) - deleting -1711462110.245620 [0] dq.builtin: => EVERYONE -1711462110.245652 [0] dq.builtin: delete -1711462110.245674 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.245805 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1448 from udp/10.101.12.71:40473 -1711462110.245815 [0] recvMC: INFOTS(1711462110.245476405) -1711462110.245827 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #60 L(:1c1 16957.905317) => EVERYONE -1711462110.245931 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #60: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.245942 [0] recvMC: HEARTBEAT(F#69:60..60 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@60(sync)) -1711462110.246616 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.246625 [0] recv: INFOTS(1711462110.246534188) -1711462110.246641 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #54 L(:1c1 16957.906127)) -1711462110.246694 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #54: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2104}} -1711462110.246726 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2104 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2104) => EVERYONE -1711462110.246749 [0] dq.builtin: - deleting -1711462110.246762 [0] dq.builtin: delete -1711462110.246784 [0] gc: gc 0x77041c014c20: deleting -1711462110.246796 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1e03) -1711462110.246805 [0] gc: gc 0x77041c030430: deleting -1711462110.246810 [0] gc: gc_delete_proxy_reader (0x77041c030430, 110d7b4:17c5b8c5:94bd0ff4:2104) -1711462110.246816 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=70 -1711462110.246818 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1e03) -1711462110.246829 [0] gc: gc 0x77041c014c20: deleting -1711462110.246835 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:1e03) -1711462110.246840 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=69 -1711462110.246899 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.246920 [0] recv: INFOTS(1711462110.246821907) -1711462110.246939 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #60 L(:1c1 16957.906422)) -1711462110.246975 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #60: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2003}} -1711462110.247001 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2003 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2003) - deleting -1711462110.247013 [0] dq.builtin: => EVERYONE -1711462110.247038 [0] dq.builtin: delete -1711462110.247042 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.247207 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1400 from udp/10.101.12.71:40473 -1711462110.247217 [0] recvMC: INFOTS(1711462110.246924796) -1711462110.247231 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #61 L(:1c1 16957.906720) => EVERYONE -1711462110.247338 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #61: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.247347 [0] recvMC: HEARTBEAT(F#70:61..61 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@61(sync)) -1711462110.248078 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.248093 [0] recv: INFOTS(1711462110.248003659) -1711462110.248113 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #55 L(:1c1 16957.907596)) -1711462110.248124 [0] gc: gc 0x77041c014c20: deleting -1711462110.248141 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #55: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2304}} -1711462110.248143 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2003) -1711462110.248162 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2304 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2304) => EVERYONE -1711462110.248196 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2003) -1711462110.248201 [0] dq.builtin: - deleting -1711462110.248234 [0] gc: gc 0x77041c014c20: deleting -1711462110.248241 [0] dq.builtin: delete -1711462110.248244 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2003) -1711462110.248263 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=68 -1711462110.248274 [0] gc: gc 0x77041c02cf40: deleting -1711462110.248281 [0] gc: gc_delete_proxy_reader (0x77041c02cf40, 110d7b4:17c5b8c5:94bd0ff4:2304) -1711462110.248287 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=67 -1711462110.249242 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.249250 [0] recv: INFOTS(1711462110.249152398) -1711462110.249260 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #61 L(:1c1 16957.908752)) -1711462110.249290 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #61: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2203}} -1711462110.249327 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2203 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2203) - deleting -1711462110.249346 [0] dq.builtin: => EVERYONE -1711462110.249370 [0] dq.builtin: delete -1711462110.249387 [0] gc: gc 0x77041c014c20: deleting -1711462110.249405 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2203) -1711462110.249439 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2203) -1711462110.249459 [0] gc: gc 0x77041c014c20: deleting -1711462110.249464 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2203) -1711462110.249470 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=66 -1711462110.249566 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1352 from udp/10.101.12.71:40473 -1711462110.249575 [0] recvMC: INFOTS(1711462110.249287705) -1711462110.249591 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #62 L(:1c1 16957.909078) => EVERYONE -1711462110.249703 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #62: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.249713 [0] recvMC: HEARTBEAT(F#71:62..62 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@62(sync)) -1711462110.250402 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.250418 [0] recv: INFOTS(1711462110.250315538) -1711462110.250432 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #56 L(:1c1 16957.909921)) -1711462110.250464 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #56: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2504}} -1711462110.250482 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2504 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2504) => EVERYONE -1711462110.250500 [0] dq.builtin: - deleting -1711462110.250518 [0] dq.builtin: delete -1711462110.250537 [0] gc: gc 0x77041c014c20: deleting -1711462110.250555 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2504) -1711462110.250569 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=65 -1711462110.250655 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.250663 [0] recv: INFOTS(1711462110.250535418) -1711462110.250673 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #62 L(:1c1 16957.910166)) -1711462110.250726 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #62: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2403}} -1711462110.250757 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2403 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2403) - deleting -1711462110.250764 [0] dq.builtin: => EVERYONE -1711462110.250778 [0] dq.builtin: delete -1711462110.250787 [0] gc: gc 0x77041c014c20: deleting -1711462110.250798 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2403) -1711462110.250844 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2403) -1711462110.250865 [0] gc: gc 0x77041c014c20: deleting -1711462110.250872 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2403) -1711462110.250878 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=64 -1711462110.250922 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1304 from udp/10.101.12.71:40473 -1711462110.250931 [0] recvMC: INFOTS(1711462110.250646289) -1711462110.250946 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #63 L(:1c1 16957.910434) => EVERYONE -1711462110.251044 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #63: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.251052 [0] recvMC: HEARTBEAT(F#72:63..63 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@63(sync)) -1711462110.251642 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 52 from udp/10.101.12.71:50807 -1711462110.251671 [0] recv: HEARTBEAT(#9:1..10 L(:1c1 16957.911162)110cd0d:56a27910:57318171:3c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:3c7@10(sync)) -1711462110.251704 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:56a27910:57318171:3c2: F#3:11/0: -1711462110.251720 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110cd0d:56a27910:57318171:3c2) -1711462110.251742 [0] tev: xpack_addmsg 0x770414001390 0x770424003ba0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.251783 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770424003c88:44 [ udp/10.101.12.71:7410@2 ] -1711462110.251798 [0] tev: traffic-xmit (1) 64 -1711462110.251903 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.251911 [0] recv: INFOTS(1711462110.251787909) -1711462110.251919 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #57 L(:1c1 16957.911414)) -1711462110.251946 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #57: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5104}} -1711462110.251956 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5104 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:5104) => EVERYONE -1711462110.251971 [0] dq.builtin: - deleting -1711462110.251982 [0] dq.builtin: delete -1711462110.252001 [0] gc: gc 0x77041c014c20: deleting -1711462110.252019 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5104) -1711462110.252029 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=63 -1711462110.253294 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.253315 [0] recv: INFOTS(1711462110.253143913) -1711462110.253329 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #63 L(:1c1 16957.912817)) -1711462110.253356 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #63: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5003}} -1711462110.253366 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5003 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:5003) - deleting -1711462110.253371 [0] dq.builtin: => EVERYONE -1711462110.253386 [0] dq.builtin: delete -1711462110.253395 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.253560 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1256 from udp/10.101.12.71:40473 -1711462110.253578 [0] recvMC: INFOTS(1711462110.253252814) -1711462110.253601 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #64 L(:1c1 16957.913078) => EVERYONE -1711462110.253762 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #64: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.253780 [0] recvMC: HEARTBEAT(F#73:64..64 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@64(sync)) -1711462110.254417 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.254435 [0] recv: INFOTS(1711462110.254311896) -1711462110.254453 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #58 L(:1c1 16957.913938)) -1711462110.254462 [0] gc: gc 0x77041c014c20: deleting -1711462110.254483 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5003) -1711462110.254485 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #58: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2904}} -1711462110.254505 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2904 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2904) => EVERYONE -1711462110.254510 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5003) -1711462110.254517 [0] dq.builtin: - deleting -1711462110.254534 [0] gc: gc 0x77041c014c20: deleting -1711462110.254537 [0] dq.builtin: delete -1711462110.254547 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5003) -1711462110.254558 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=62 -1711462110.254568 [0] gc: gc 0x77041c026db0: deleting -1711462110.254572 [0] gc: gc_delete_proxy_reader (0x77041c026db0, 110d7b4:17c5b8c5:94bd0ff4:2904) -1711462110.254577 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=61 -1711462110.255561 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.255833 [0] recv: INFOTS(1711462110.255450496) -1711462110.255849 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #64 L(:1c1 16957.915335)) -1711462110.255867 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #64: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2803}} -1711462110.255881 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2803 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2803) - deleting -1711462110.255887 [0] dq.builtin: => EVERYONE -1711462110.255914 [0] dq.builtin: delete -1711462110.255921 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.255997 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1208 from udp/10.101.12.71:40473 -1711462110.256014 [0] recvMC: INFOTS(1711462110.255527534) -1711462110.256032 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #65 L(:1c1 16957.915514) => EVERYONE -1711462110.256328 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #65: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.256347 [0] recvMC: HEARTBEAT(F#74:65..65 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@65(sync)) -1711462110.256647 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.256653 [0] recv: INFOTS(1711462110.256559919) -1711462110.256670 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #59 L(:1c1 16957.916156)) -1711462110.256709 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #59: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2b04}} -1711462110.256719 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2b04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2b04) => EVERYONE -1711462110.256729 [0] dq.builtin: - deleting -1711462110.256738 [0] dq.builtin: delete -1711462110.256988 [0] gc: gc 0x77041c014c20: deleting -1711462110.256996 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2803) -1711462110.257001 [0] gc: gc 0x77041c02e1f0: deleting -1711462110.257005 [0] gc: gc_delete_proxy_reader (0x77041c02e1f0, 110d7b4:17c5b8c5:94bd0ff4:2b04) -1711462110.257011 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=60 -1711462110.257016 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2803) -1711462110.257057 [0] gc: gc 0x77041c014c20: deleting -1711462110.257063 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2803) -1711462110.257080 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=59 -1711462110.257793 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.257810 [0] recv: INFOTS(1711462110.257696628) -1711462110.257822 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #65 L(:1c1 16957.917309)) -1711462110.257841 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #65: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2a03}} -1711462110.257848 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2a03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2a03) - deleting -1711462110.257858 [0] dq.builtin: => EVERYONE -1711462110.257869 [0] dq.builtin: delete -1711462110.257877 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.258082 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1160 from udp/10.101.12.71:40473 -1711462110.258107 [0] recvMC: INFOTS(1711462110.257775243) -1711462110.258128 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #66 L(:1c1 16957.917606) => EVERYONE -1711462110.258273 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #66: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.258290 [0] recvMC: HEARTBEAT(F#75:66..66 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@66(sync)) -1711462110.258940 [0] gc: gc 0x77041c014c20: deleting -1711462110.258947 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2a03) -1711462110.258968 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2a03) -1711462110.258977 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.258995 [0] recv: INFOTS(1711462110.258846924) -1711462110.258989 [0] gc: gc 0x77041c014c20: deleting -1711462110.259030 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2a03) -1711462110.259042 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=58 -1711462110.259018 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #60 L(:1c1 16957.918498)) -1711462110.259066 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #60: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2d04}} -1711462110.259076 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2d04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2d04) => EVERYONE -1711462110.259096 [0] dq.builtin: - deleting -1711462110.259104 [0] dq.builtin: delete -1711462110.259109 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.260198 [0] gc: gc 0x77041c014c20: deleting -1711462110.260219 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2d04) -1711462110.260238 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=57 -1711462110.260404 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.260430 [0] recv: INFOTS(1711462110.260256234) -1711462110.260457 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #66 L(:1c1 16957.919930)) -1711462110.260479 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #66: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2c03}} -1711462110.260516 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2c03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2c03) - deleting -1711462110.260529 [0] dq.builtin: => EVERYONE -1711462110.260543 [0] dq.builtin: delete -1711462110.260552 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.260737 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1112 from udp/10.101.12.71:40473 -1711462110.260758 [0] recvMC: INFOTS(1711462110.260382757) -1711462110.260786 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #67 L(:1c1 16957.920258) => EVERYONE -1711462110.260978 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #67: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.261000 [0] recvMC: HEARTBEAT(F#76:67..67 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@67(sync)) -1711462110.261628 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.261649 [0] recv: INFOTS(1711462110.261474906) -1711462110.261631 [0] gc: gc 0x77041c014c20: deleting -1711462110.261697 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2c03) -1711462110.261681 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #61 L(:1c1 16957.921152)) -1711462110.261753 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2c03) -1711462110.261767 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #61: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2f04}} -1711462110.261792 [0] gc: gc 0x77041c014c20: deleting -1711462110.261809 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2f04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2f04) => EVERYONE -1711462110.261821 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2c03) -1711462110.261839 [0] dq.builtin: - deleting -1711462110.261869 [0] dq.builtin: delete -1711462110.261853 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=56 -1711462110.261892 [0] gc: gc 0x77041c014c20: deleting -1711462110.261900 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2f04) -1711462110.261906 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=55 -1711462110.262873 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.262889 [0] recv: INFOTS(1711462110.262693665) -1711462110.262921 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #67 L(:1c1 16957.922391)) -1711462110.262962 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #67: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2e03}} -1711462110.262987 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2e03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2e03) - deleting -1711462110.262996 [0] dq.builtin: => EVERYONE -1711462110.263013 [0] dq.builtin: delete -1711462110.263021 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.263197 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1064 from udp/10.101.12.71:40473 -1711462110.263224 [0] recvMC: INFOTS(1711462110.262818245) -1711462110.263258 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #68 L(:1c1 16957.922723) => EVERYONE -1711462110.263468 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #68: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.263491 [0] recvMC: HEARTBEAT(F#77:68..68 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@68(sync)) -1711462110.264121 [0] gc: gc 0x77041c014c20: deleting -1711462110.264136 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2e03) -1711462110.264163 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.264175 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2e03) -1711462110.264178 [0] recv: INFOTS(1711462110.263960068) -1711462110.264226 [0] gc: gc 0x77041c014c20: deleting -1711462110.264240 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #62 L(:1c1 16957.923681)) -1711462110.264244 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:2e03) -1711462110.264293 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=54 -1711462110.264305 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #62: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3104}} -1711462110.264351 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3104 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3104) => EVERYONE -1711462110.264374 [0] dq.builtin: - deleting -1711462110.264392 [0] dq.builtin: delete -1711462110.264399 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.265416 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.265433 [0] recv: INFOTS(1711462110.265251831) -1711462110.265468 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #68 L(:1c1 16957.924935)) -1711462110.265492 [0] gc: gc 0x77041c014c20: deleting -1711462110.265513 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3104) -1711462110.265520 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #68: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3003}} -1711462110.265525 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=53 -1711462110.265539 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3003 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3003) - deleting -1711462110.265575 [0] dq.builtin: => EVERYONE -1711462110.265587 [0] dq.builtin: delete -1711462110.265594 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.265786 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1016 from udp/10.101.12.71:40473 -1711462110.265815 [0] recvMC: INFOTS(1711462110.265383925) -1711462110.265858 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #69 L(:1c1 16957.925313) => EVERYONE -1711462110.266068 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #69: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.266093 [0] recvMC: HEARTBEAT(F#78:69..69 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@69(sync)) -1711462110.266656 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.266669 [0] recv: INFOTS(1711462110.266492303) -1711462110.266697 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #63 L(:1c1 16957.926172)) -1711462110.266712 [0] gc: gc 0x77041c014c20: deleting -1711462110.266743 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3003) -1711462110.266749 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #63: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3304}} -1711462110.266782 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3304 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3304) => EVERYONE -1711462110.266796 [0] dq.builtin: - deleting -1711462110.266782 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3003) -1711462110.266830 [0] dq.builtin: delete -1711462110.266892 [0] gc: gc 0x77041c02d8b0: deleting -1711462110.266910 [0] gc: gc_delete_proxy_reader (0x77041c02d8b0, 110d7b4:17c5b8c5:94bd0ff4:3304) -1711462110.266921 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=52 -1711462110.266935 [0] gc: gc 0x77041c014c20: deleting -1711462110.266941 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3003) -1711462110.266949 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=51 -1711462110.268354 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.268374 [0] recv: INFOTS(1711462110.268216434) -1711462110.268395 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #69 L(:1c1 16957.927877)) -1711462110.268433 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #69: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3203}} -1711462110.268456 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3203 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3203) - deleting -1711462110.268463 [0] dq.builtin: => EVERYONE -1711462110.268478 [0] dq.builtin: delete -1711462110.268486 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.268649 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 968 from udp/10.101.12.71:40473 -1711462110.268677 [0] recvMC: INFOTS(1711462110.268318557) -1711462110.268698 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #70 L(:1c1 16957.928176) => EVERYONE -1711462110.268868 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #70: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.268889 [0] recvMC: HEARTBEAT(F#79:70..70 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@70(sync)) -1711462110.269548 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.269558 [0] recv: INFOTS(1711462110.269427108) -1711462110.269575 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #64 L(:1c1 16957.929060)) -1711462110.269576 [0] gc: gc 0x77041c014c20: deleting -1711462110.269609 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #64: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3504}} -1711462110.269613 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3203) -1711462110.269634 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3504 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3504) => EVERYONE -1711462110.269664 [0] dq.builtin: - deleting -1711462110.269674 [0] dq.builtin: delete -1711462110.269680 [0] gc: gc 0x77041c056250: not yet, shortsleep -1711462110.269679 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3203) -1711462110.270725 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.270744 [0] recv: INFOTS(1711462110.270594373) -1711462110.270763 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #70 L(:1c1 16957.930247)) -1711462110.270763 [0] gc: gc 0x77041c056250: deleting -1711462110.270781 [0] gc: gc_delete_proxy_reader (0x77041c056250, 110d7b4:17c5b8c5:94bd0ff4:3504) -1711462110.270790 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #70: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3403}} -1711462110.270794 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=50 -1711462110.270817 [0] gc: gc 0x77041c014c20: deleting -1711462110.270807 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3403 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3403) - deleting -1711462110.270843 [0] dq.builtin: => EVERYONE -1711462110.270832 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3203) -1711462110.270857 [0] dq.builtin: delete -1711462110.270871 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=49 -1711462110.270902 [0] gc: gc 0x77041c056250: deleting -1711462110.270940 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c056250, 110d7b4:17c5b8c5:94bd0ff4:3403) -1711462110.270970 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c056250, 110d7b4:17c5b8c5:94bd0ff4:3403) -1711462110.270987 [0] gc: gc 0x77041c056250: deleting -1711462110.270993 [0] gc: gc_delete_proxy_writer (0x77041c056250, 110d7b4:17c5b8c5:94bd0ff4:3403) -1711462110.270999 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=48 -1711462110.271033 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 920 from udp/10.101.12.71:40473 -1711462110.271064 [0] recvMC: INFOTS(1711462110.270694611) -1711462110.271084 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #71 L(:1c1 16957.930564) => EVERYONE -1711462110.271255 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #71: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.271273 [0] recvMC: HEARTBEAT(F#80:71..71 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@71(sync)) -1711462110.271921 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.271948 [0] recv: INFOTS(1711462110.271774725) -1711462110.271961 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #65 L(:1c1 16957.931448)) -1711462110.271984 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #65: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3704}} -1711462110.271993 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3704 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3704) => EVERYONE -1711462110.272009 [0] dq.builtin: - deleting -1711462110.272018 [0] dq.builtin: delete -1711462110.272025 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.273111 [0] gc: gc 0x77041c014c20: deleting -1711462110.273149 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3704) -1711462110.273156 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=47 -1711462110.273343 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.273362 [0] recv: INFOTS(1711462110.273181976) -1711462110.273382 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #71 L(:1c1 16957.932863)) -1711462110.273402 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #71: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3603}} -1711462110.273414 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3603 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3603) - deleting -1711462110.273426 [0] dq.builtin: => EVERYONE -1711462110.273458 [0] dq.builtin: delete -1711462110.273464 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.273584 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 872 from udp/10.101.12.71:40473 -1711462110.273604 [0] recvMC: INFOTS(1711462110.273304522) -1711462110.273628 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #72 L(:1c1 16957.933104) => EVERYONE -1711462110.273808 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #72: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.273829 [0] recvMC: HEARTBEAT(F#81:72..72 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@72(sync)) -1711462110.274544 [0] gc: gc 0x77041c014c20: deleting -1711462110.274569 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3603) -1711462110.274612 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3603) -1711462110.274635 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.274650 [0] recv: INFOTS(1711462110.274472079) -1711462110.274640 [0] gc: gc 0x77041c014c20: deleting -1711462110.274684 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3603) -1711462110.274694 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=46 -1711462110.274663 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #66 L(:1c1 16957.934152)) -1711462110.274737 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #66: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3904}} -1711462110.274747 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3904 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3904) => EVERYONE -1711462110.274757 [0] dq.builtin: - deleting -1711462110.274765 [0] dq.builtin: delete -1711462110.274772 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.275867 [0] gc: gc 0x77041c014c20: deleting -1711462110.275885 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3904) -1711462110.275901 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=45 -1711462110.275986 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.276015 [0] recv: INFOTS(1711462110.275834015) -1711462110.276045 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #72 L(:1c1 16957.935518)) -1711462110.276074 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #72: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3803}} -1711462110.276085 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3803 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3803) - deleting -1711462110.276103 [0] dq.builtin: => EVERYONE -1711462110.276120 [0] dq.builtin: delete -1711462110.276127 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.276301 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 824 from udp/10.101.12.71:40473 -1711462110.276328 [0] recvMC: INFOTS(1711462110.275936014) -1711462110.276361 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #73 L(:1c1 16957.935828) => EVERYONE -1711462110.276595 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #73: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0) -1711462110.276618 [0] recvMC: HEARTBEAT(F#82:73..73 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@73(sync)) -1711462110.276695 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:403) suppressed, resched in 0.1 s (min-ack 13, avail-seq 24, xmit 24) -1711462110.277041 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462110.277081 [0] recv: HEARTBEAT(#8:1..13 L(:1c1 16957.936563)110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:4c7@13(sync)) -1711462110.277110 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110443d:bb7f10a5:18901533:4c2: F#4:14/0: -1711462110.277143 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110443d:bb7f10a5:18901533:4c2) -1711462110.277159 [0] tev: xpack_addmsg 0x770414001390 0x770424003ba0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.277223 [0] gc: gc 0x77041c014c20: deleting -1711462110.277234 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3803) -1711462110.277235 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770424003c88:44 [ udp/10.101.12.71:7416@2 ] -1711462110.277285 [0] tev: traffic-xmit (1) 64 -1711462110.277262 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3803) -1711462110.277335 [0] gc: gc 0x77041c014c20: deleting -1711462110.277350 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3803) -1711462110.277360 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=44 -1711462110.277481 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.277490 [0] recv: INFOTS(1711462110.277107873) -1711462110.277539 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #67 L(:1c1 16957.936991)) -1711462110.277574 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #67: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3b04}} -1711462110.277586 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3b04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3b04) => EVERYONE -1711462110.277600 [0] dq.builtin: - deleting -1711462110.277621 [0] dq.builtin: delete -1711462110.277630 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.278496 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:4c2 multicasting (rel-prd 6 seq-eq-max 6 seq 19 maxseq 10) -1711462110.278521 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:4c2) sent, resched in 0.1 s (min-ack 10, avail-seq 19, xmit 19) -1711462110.278535 [0] tev: xpack_addmsg 0x770414001390 0x770424003ba0 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462110.278625 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 52 from udp/10.101.12.71:52025 -1711462110.278650 [0] recv: HEARTBEAT(#7:1..19 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462110.278631 [0] tev: nn_xpack_send 52: 0x77041400139c:20 0x770424003c98:32 [ udp/239.255.0.1:7400@2 ] -1711462110.278684 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.278702 [0] recv: INFOTS(1711462110.278533644) -1711462110.278735 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #73 L(:1c1 16957.938204)) -1711462110.278688 [0] tev: traffic-xmit (1) 52 -1711462110.278752 [0] gc: gc 0x77041c014c20: deleting -1711462110.278779 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462110.278801 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.278762 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #73: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3a03}} -1711462110.278847 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3a03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3a03) - deleting -1711462110.278869 [0] dq.builtin: => EVERYONE -1711462110.278835 [0] recv: ACKNACK(F#4:20/0: L(:1c1 16957.938301) 110e21c:d0762c48:a9f0fb28:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 ACK9 RM0) -1711462110.278890 [0] dq.builtin: delete -1711462110.278853 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3b04) -1711462110.278913 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462110.278965 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.278944 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=43 -1711462110.278989 [0] recv: ACKNACK(F#4:20/0: L(:1c1 16957.938467) 110443d:bb7f10a5:18901533:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 ACK9 RM0) -1711462110.279015 [0] gc: gc 0x77041c05a250: deleting -1711462110.279036 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c05a250, 110d7b4:17c5b8c5:94bd0ff4:3a03) -1711462110.279071 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c05a250, 110d7b4:17c5b8c5:94bd0ff4:3a03) -1711462110.279075 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462110.279099 [0] gc: gc 0x77041c05a250: deleting -1711462110.279116 [0] gc: gc_delete_proxy_writer (0x77041c05a250, 110d7b4:17c5b8c5:94bd0ff4:3a03) -1711462110.279147 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=42 -1711462110.279121 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 776 from udp/10.101.12.71:40473 -1711462110.279102 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.279179 [0] recvMC: INFOTS(1711462110.278642503) -1711462110.279213 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #74 L(:1c1 16957.938681) => EVERYONE -1711462110.279224 [0] recv: ACKNACK(F#4:20/0: 110d7b4:17c5b8c5:94bd0ff4:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 ACK9 RM0) -1711462110.279253 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462110.279268 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.279293 [0] recv: ACKNACK(F#4:20/0: L(:1c1 16957.938769) 110cd0d:56a27910:57318171:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 ACK9 RM0) -1711462110.279307 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462110.279326 [0] recv: ACKNACK(F#12:20/0: L(:1c1 16957.938769) 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 ACK9 RM0) -1711462110.279337 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462110.279351 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #74: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462110.279373 [0] recvMC: HEARTBEAT(F#83:74..74 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@74(sync)) -1711462110.279374 [0] recv: ACKNACK(F#7:20/0: L(:1c1 16957.938769) 110cd0d:79d6eeac:ea4a8907:4c7 -> 110aba1:7b19badd:ce0adb73:4c2 ACK9 RM9) -1711462110.279487 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462110.279503 [0] recv: HEARTBEAT(#8:1..19 L(:1c1 16957.938996)110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:3c7@19(sync)) -1711462110.279531 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#4:20/0: -1711462110.279556 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462110.279579 [0] tev: xpack_addmsg 0x770414001390 0x770424003ba0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.279622 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770424003c88:44 [ udp/10.101.12.71:7416@2 ] -1711462110.279634 [0] tev: traffic-xmit (1) 64 -1711462110.279796 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:3c2 multicasting (rel-prd 6 seq-eq-max 6 seq 23 maxseq 12) -1711462110.279813 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:3c2) sent, resched in 0.1 s (min-ack 12, avail-seq 23, xmit 23) -1711462110.279825 [0] tev: xpack_addmsg 0x770414001390 0x770424003ba0 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462110.279885 [0] tev: nn_xpack_send 52: 0x77041400139c:20 0x770424003c98:32 [ udp/239.255.0.1:7400@2 ] -1711462110.279894 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 52 from udp/10.101.12.71:52025 -1711462110.279914 [0] recv: HEARTBEAT(#7:1..23 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462110.279898 [0] tev: traffic-xmit (1) 52 -1711462110.279980 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462110.279988 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.280010 [0] recv: ACKNACK(F#4:24/0: L(:1c1 16957.939491) 110443d:bb7f10a5:18901533:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK11 RM0) -1711462110.280027 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462110.280033 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.280042 [0] recv: ACKNACK(F#4:24/0: L(:1c1 16957.939536) 110e21c:d0762c48:a9f0fb28:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK11 RM0) -1711462110.280075 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.280090 [0] recv: INFOTS(1711462110.279820853) -1711462110.280111 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #68 L(:1c1 16957.939593)) -1711462110.280151 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #68: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3d04}} -1711462110.280168 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3d04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3d04) => EVERYONE -1711462110.280176 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462110.280205 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.280187 [0] dq.builtin: - deleting -1711462110.280246 [0] recv: ACKNACK(F#4:24/0: L(:1c1 16957.939707) 110cd0d:56a27910:57318171:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK11 RM0) -1711462110.280267 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.280257 [0] dq.builtin: delete -1711462110.280271 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462110.280318 [0] recv: ACKNACK(F#14:24/0: L(:1c1 16957.939707) 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK11 RM0) -1711462110.280328 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462110.280338 [0] recv: ACKNACK(F#8:24/0: L(:1c1 16957.939707) 110cd0d:79d6eeac:ea4a8907:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK11 RM0) -1711462110.280350 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462110.280357 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.280372 [0] recv: ACKNACK(F#4:24/0: L(:1c1 16957.939860) 110d7b4:17c5b8c5:94bd0ff4:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK11 RM11) -1711462110.281289 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.281312 [0] recv: INFOTS(1711462110.281176913) -1711462110.281325 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #74 L(:1c1 16957.940811)) -1711462110.281354 [0] gc: gc 0x77041c014c20: deleting -1711462110.281381 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3d04) -1711462110.281391 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=41 -1711462110.281392 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #74: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3c03}} -1711462110.281460 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3c03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3c03) - deleting -1711462110.281478 [0] dq.builtin: => EVERYONE -1711462110.281515 [0] dq.builtin: delete -1711462110.281523 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.281607 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 728 from udp/10.101.12.71:40473 -1711462110.281621 [0] recvMC: INFOTS(1711462110.281294357) -1711462110.281645 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #75 L(:1c1 16957.941123) => EVERYONE -1711462110.281804 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #75: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,64,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462110.281818 [0] recvMC: HEARTBEAT(F#84:75..75 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@75(sync)) -1711462110.282617 [0] gc: gc 0x77041c014c20: deleting -1711462110.282643 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3c03) -1711462110.282622 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.282684 [0] recv: INFOTS(1711462110.282396477) -1711462110.282683 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3c03) -1711462110.282711 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #69 L(:1c1 16957.942185)) -1711462110.282749 [0] gc: gc 0x77041c014c20: deleting -1711462110.282781 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3c03) -1711462110.282787 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #69: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3f04}} -1711462110.282789 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=40 -1711462110.282825 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3f04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3f04) => EVERYONE -1711462110.282853 [0] dq.builtin: - deleting -1711462110.282872 [0] dq.builtin: delete -1711462110.282878 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.283771 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.283788 [0] recv: INFOTS(1711462110.283671990) -1711462110.283803 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #75 L(:1c1 16957.943291)) -1711462110.283870 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #75: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3e03}} -1711462110.283905 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3e03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3e03) - deleting -1711462110.283931 [0] dq.builtin: => EVERYONE -1711462110.283963 [0] dq.builtin: delete -1711462110.283984 [0] gc: gc 0x77041c014c20: deleting -1711462110.284021 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:3f04) -1711462110.284040 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=39 -1711462110.284061 [0] gc: gc 0x77041c05a250: deleting -1711462110.284085 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c05a250, 110d7b4:17c5b8c5:94bd0ff4:3e03) -1711462110.284112 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c05a250, 110d7b4:17c5b8c5:94bd0ff4:3e03) -1711462110.284139 [0] gc: gc 0x77041c05a250: deleting -1711462110.284150 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 680 from udp/10.101.12.71:40473 -1711462110.284163 [0] gc: gc_delete_proxy_writer (0x77041c05a250, 110d7b4:17c5b8c5:94bd0ff4:3e03) -1711462110.284183 [0] recvMC: INFOTS(1711462110.283774544) -1711462110.284207 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #76 L(:1c1 16957.943684) => EVERYONE -1711462110.284215 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=38 -1711462110.284334 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #76: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,66,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,68,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462110.284350 [0] recvMC: HEARTBEAT(F#85:76..76 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@76(sync)) -1711462110.285001 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.285016 [0] recv: INFOTS(1711462110.284892655) -1711462110.285052 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #70 L(:1c1 16957.944519)) -1711462110.285096 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #70: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4104}} -1711462110.285121 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4104 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4104) => EVERYONE -1711462110.285154 [0] dq.builtin: - deleting -1711462110.285178 [0] dq.builtin: delete -1711462110.285196 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.286187 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.286197 [0] recv: INFOTS(1711462110.286072873) -1711462110.286224 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #76 L(:1c1 16957.945699)) -1711462110.286260 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #76: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4003}} -1711462110.286283 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4003 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4003) - deleting -1711462110.286289 [0] gc: gc 0x77041c014c20: deleting -1711462110.286317 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4104) -1711462110.286298 [0] dq.builtin: => EVERYONE -1711462110.286334 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=37 -1711462110.286379 [0] dq.builtin: delete -1711462110.286392 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.286559 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 632 from udp/10.101.12.71:40473 -1711462110.286572 [0] recvMC: INFOTS(1711462110.286193571) -1711462110.286589 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #77 L(:1c1 16957.946074) => EVERYONE -1711462110.286736 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #77: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,68,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,70,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,72,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462110.286747 [0] recvMC: HEARTBEAT(F#86:77..77 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@77(sync)) -1711462110.287348 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.287359 [0] recv: INFOTS(1711462110.287238788) -1711462110.287373 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #71 L(:1c1 16957.946861)) -1711462110.287414 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #71: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4304}} -1711462110.287437 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4304 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4304) => EVERYONE -1711462110.287461 [0] dq.builtin: - deleting -1711462110.287476 [0] dq.builtin: delete -1711462110.287486 [0] gc: gc 0x77041c014c20: deleting -1711462110.287528 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4003) -1711462110.287549 [0] gc: gc 0x77041c05a250: deleting -1711462110.287566 [0] gc: gc_delete_proxy_reader (0x77041c05a250, 110d7b4:17c5b8c5:94bd0ff4:4304) -1711462110.287577 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=36 -1711462110.287577 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4003) -1711462110.287627 [0] gc: gc 0x77041c014c20: deleting -1711462110.287642 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4003) -1711462110.287650 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=35 -1711462110.288527 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.288542 [0] recv: INFOTS(1711462110.288409621) -1711462110.288562 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #77 L(:1c1 16957.948045)) -1711462110.288597 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #77: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4203}} -1711462110.288672 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4203 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4203) - deleting -1711462110.288689 [0] dq.builtin: => EVERYONE -1711462110.288734 [0] dq.builtin: delete -1711462110.288756 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.288970 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 584 from udp/10.101.12.71:40473 -1711462110.288986 [0] recvMC: INFOTS(1711462110.288540698) -1711462110.289007 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #78 L(:1c1 16957.948488) => EVERYONE -1711462110.289142 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #78: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,70,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,72,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,74,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,76,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462110.289154 [0] recvMC: HEARTBEAT(F#87:78..78 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@78(sync)) -1711462110.289703 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.289717 [0] recv: INFOTS(1711462110.289583439) -1711462110.289730 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #72 L(:1c1 16957.949219)) -1711462110.289787 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #72: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4504}} -1711462110.289814 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4504 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4504) => EVERYONE -1711462110.289836 [0] dq.builtin: - deleting -1711462110.289865 [0] dq.builtin: delete -1711462110.289848 [0] gc: gc 0x77041c014c20: deleting -1711462110.289935 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4203) -1711462110.289956 [0] gc: gc 0x77041c05a250: deleting -1711462110.289969 [0] gc: gc_delete_proxy_reader (0x77041c05a250, 110d7b4:17c5b8c5:94bd0ff4:4504) -1711462110.289974 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4203) -1711462110.289983 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=34 -1711462110.290033 [0] gc: gc 0x77041c014c20: deleting -1711462110.290046 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4203) -1711462110.290058 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=33 -1711462110.290870 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.290883 [0] recv: INFOTS(1711462110.290746464) -1711462110.290902 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #78 L(:1c1 16957.950385)) -1711462110.290991 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #78: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4403}} -1711462110.291011 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4403 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4403) - deleting -1711462110.291020 [0] dq.builtin: => EVERYONE -1711462110.291049 [0] dq.builtin: delete -1711462110.291063 [0] gc: gc 0x77041c014c20: deleting -1711462110.291126 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4403) -1711462110.291134 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 536 from udp/10.101.12.71:40473 -1711462110.291143 [0] recvMC: INFOTS(1711462110.290874452) -1711462110.291155 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #79 L(:1c1 16957.950646) => EVERYONE -1711462110.291161 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4403) -1711462110.291229 [0] gc: gc 0x77041c014c20: deleting -1711462110.291239 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4403) -1711462110.291249 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=32 -1711462110.291302 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #79: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,72,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,74,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,76,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,78,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462110.291314 [0] recvMC: HEARTBEAT(F#88:79..79 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@79(sync)) -1711462110.292040 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.292049 [0] recv: INFOTS(1711462110.291919173) -1711462110.292070 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #73 L(:1c1 16957.951552)) -1711462110.292113 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #73: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4704}} -1711462110.292127 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4704 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4704) => EVERYONE -1711462110.292147 [0] dq.builtin: - deleting -1711462110.292169 [0] dq.builtin: delete -1711462110.292181 [0] gc: gc 0x77041c014c20: deleting -1711462110.292198 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4704) -1711462110.292210 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=31 -1711462110.292378 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.292395 [0] recv: INFOTS(1711462110.292287600) -1711462110.292421 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #79 L(:1c1 16957.951898)) -1711462110.292455 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #79: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4603}} -1711462110.292470 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4603 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4603) - deleting -1711462110.292484 [0] dq.builtin: => EVERYONE -1711462110.292572 [0] dq.builtin: delete -1711462110.292601 [0] gc: gc 0x77041c014c20: deleting -1711462110.292625 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4603) -1711462110.292671 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4603) -1711462110.292705 [0] gc: gc 0x77041c014c20: deleting -1711462110.292727 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4603) -1711462110.292748 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=30 -1711462110.292818 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 488 from udp/10.101.12.71:40473 -1711462110.292833 [0] recvMC: INFOTS(1711462110.292409838) -1711462110.292854 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #80 L(:1c1 16957.952336) => EVERYONE -1711462110.292983 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #80: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,74,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,76,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,78,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462110.292993 [0] recvMC: HEARTBEAT(F#89:80..80 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@80(sync)) -1711462110.293595 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.293619 [0] recv: INFOTS(1711462110.293464039) -1711462110.293642 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #74 L(:1c1 16957.953121)) -1711462110.293667 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.293674 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #74: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4904}} -1711462110.293699 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4904 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4904) => EVERYONE -1711462110.293702 [0] recv: HEARTBEAT(#10:1..15 L(:1c1 16957.953183)110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:4c7@15(sync)) -1711462110.293743 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#4:16/0: -1711462110.293769 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.293790 [0] tev: xpack_addmsg 0x770414001390 0x770424003ba0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.293718 [0] dq.builtin: - deleting -1711462110.293845 [0] dq.builtin: delete -1711462110.293863 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770424003c88:44 [ udp/10.101.12.71:7412@2 ] -1711462110.293876 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.293879 [0] tev: traffic-xmit (1) 64 -1711462110.294770 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.294782 [0] recv: INFOTS(1711462110.294634250) -1711462110.294794 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #80 L(:1c1 16957.954284)) -1711462110.294868 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #80: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4803}} -1711462110.294879 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4803 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4803) - deleting -1711462110.294884 [0] dq.builtin: => EVERYONE -1711462110.294896 [0] dq.builtin: delete -1711462110.294999 [0] gc: gc 0x77041c014c20: deleting -1711462110.295007 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4904) -1711462110.295016 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=29 -1711462110.295029 [0] gc: gc 0x77041c05a250: deleting -1711462110.295036 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c05a250, 110d7b4:17c5b8c5:94bd0ff4:4803) -1711462110.295078 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c05a250, 110d7b4:17c5b8c5:94bd0ff4:4803) -1711462110.295112 [0] gc: gc 0x77041c05a250: deleting -1711462110.295126 [0] gc: gc_delete_proxy_writer (0x77041c05a250, 110d7b4:17c5b8c5:94bd0ff4:4803) -1711462110.295141 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=28 -1711462110.295161 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 440 from udp/10.101.12.71:40473 -1711462110.295175 [0] recvMC: INFOTS(1711462110.294787650) -1711462110.295204 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #81 L(:1c1 16957.954677) => EVERYONE -1711462110.295354 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #81: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,76,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,78,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.295368 [0] recvMC: HEARTBEAT(F#90:81..81 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@81(sync)) -1711462110.295502 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.295529 [0] recv: HEARTBEAT(#10:1..19 L(:1c1 16957.955017)110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:3c7@19(sync)) -1711462110.295565 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#4:20/0: -1711462110.295590 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.295616 [0] tev: xpack_addmsg 0x770414001390 0x770424003ba0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.295659 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770424003c88:44 [ udp/10.101.12.71:7412@2 ] -1711462110.295694 [0] tev: traffic-xmit (1) 64 -1711462110.295915 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.295922 [0] recv: INFOTS(1711462110.295791082) -1711462110.295943 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #75 L(:1c1 16957.955425)) -1711462110.295975 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #75: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4b04}} -1711462110.295985 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4b04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4b04) => EVERYONE -1711462110.296003 [0] dq.builtin: - deleting -1711462110.296012 [0] dq.builtin: delete -1711462110.296036 [0] gc: gc 0x77041c014c20: deleting -1711462110.296059 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4b04) -1711462110.296073 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=27 -1711462110.297069 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.297089 [0] recv: INFOTS(1711462110.296972092) -1711462110.297110 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #81 L(:1c1 16957.956580)) -1711462110.297142 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #81: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4a03}} -1711462110.297236 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4a03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4a03) - deleting -1711462110.297255 [0] dq.builtin: => EVERYONE -1711462110.297269 [0] dq.builtin: delete -1711462110.297292 [0] gc: gc 0x77041c014c20: deleting -1711462110.297323 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4a03) -1711462110.297362 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4a03) -1711462110.297392 [0] gc: gc 0x77041c014c20: deleting -1711462110.297406 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4a03) -1711462110.297424 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 392 from udp/10.101.12.71:40473 -1711462110.297427 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=26 -1711462110.297456 [0] recvMC: INFOTS(1711462110.297082585) -1711462110.297469 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #82 L(:1c1 16957.956958) => EVERYONE -1711462110.297559 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #82: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,78,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.297569 [0] recvMC: HEARTBEAT(F#91:82..82 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@82(sync)) -1711462110.298237 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.298244 [0] recv: INFOTS(1711462110.298143983) -1711462110.298254 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #76 L(:1c1 16957.957746)) -1711462110.298287 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #76: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4d04}} -1711462110.298300 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4d04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4d04) => EVERYONE -1711462110.298311 [0] dq.builtin: - deleting -1711462110.298318 [0] dq.builtin: delete -1711462110.298327 [0] gc: gc 0x77041c014c20: deleting -1711462110.298340 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4d04) -1711462110.298354 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=25 -1711462110.298573 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.298587 [0] recv: INFOTS(1711462110.298471822) -1711462110.298601 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #82 L(:1c1 16957.958090)) -1711462110.298638 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #82: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4c03}} -1711462110.298653 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4c03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4c03) - deleting -1711462110.298661 [0] dq.builtin: => EVERYONE -1711462110.298678 [0] dq.builtin: delete -1711462110.298699 [0] gc: gc 0x77041c014c20: deleting -1711462110.298721 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4c03) -1711462110.298749 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4c03) -1711462110.298774 [0] gc: gc 0x77041c014c20: deleting -1711462110.298785 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4c03) -1711462110.298795 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=24 -1711462110.298834 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462110.298841 [0] recvMC: INFOTS(1711462110.298593713) -1711462110.298851 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #83 L(:1c1 16957.958344) => EVERYONE -1711462110.298928 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #83: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.298937 [0] recvMC: HEARTBEAT(F#92:83..83 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@83(sync)) -1711462110.299877 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.299888 [0] recv: INFOTS(1711462110.299733268) -1711462110.299899 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #77 L(:1c1 16957.959390)) -1711462110.299936 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #77: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4f04}} -1711462110.299959 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4f04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4f04) => EVERYONE -1711462110.299981 [0] dq.builtin: - deleting -1711462110.299993 [0] dq.builtin: delete -1711462110.300000 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.301093 [0] gc: gc 0x77041c014c20: deleting -1711462110.301123 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4f04) -1711462110.301136 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=23 -1711462110.301135 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.301208 [0] recv: INFOTS(1711462110.301005028) -1711462110.301223 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #83 L(:1c1 16957.960710)) -1711462110.301249 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #83: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4e03}} -1711462110.301268 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4e03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4e03) - deleting -1711462110.301281 [0] dq.builtin: => EVERYONE -1711462110.301302 [0] dq.builtin: delete -1711462110.301309 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.301361 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 296 from udp/10.101.12.71:40473 -1711462110.301370 [0] recvMC: INFOTS(1711462110.301158893) -1711462110.301382 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #84 L(:1c1 16957.960872) => EVERYONE -1711462110.301459 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #84: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.301469 [0] recvMC: HEARTBEAT(F#93:84..84 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@84(sync)) -1711462110.302373 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.302395 [0] recv: INFOTS(1711462110.302235006) -1711462110.302380 [0] gc: gc 0x77041c014c20: deleting -1711462110.302478 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4e03) -1711462110.302495 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #78 L(:1c1 16957.961896)) -1711462110.302525 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4e03) -1711462110.302574 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #78: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5304}} -1711462110.302617 [0] gc: gc 0x77041c014c20: deleting -1711462110.302629 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:4e03) -1711462110.302640 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=22 -1711462110.302621 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5304 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:5304) => EVERYONE -1711462110.302672 [0] dq.builtin: - deleting -1711462110.302681 [0] dq.builtin: delete -1711462110.302687 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.303585 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.303603 [0] recv: INFOTS(1711462110.303466791) -1711462110.303622 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #84 L(:1c1 16957.963106)) -1711462110.303666 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #84: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5203}} -1711462110.303689 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5203 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:5203) - deleting -1711462110.303716 [0] dq.builtin: => EVERYONE -1711462110.303743 [0] dq.builtin: delete -1711462110.303761 [0] gc: gc 0x77041c014c20: deleting -1711462110.303778 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5304) -1711462110.303788 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=21 -1711462110.303799 [0] gc: gc 0x77041c05a250: deleting -1711462110.303806 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c05a250, 110d7b4:17c5b8c5:94bd0ff4:5203) -1711462110.303838 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c05a250, 110d7b4:17c5b8c5:94bd0ff4:5203) -1711462110.303846 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 248 from udp/10.101.12.71:40473 -1711462110.303875 [0] recvMC: INFOTS(1711462110.303608296) -1711462110.303886 [0] gc: gc 0x77041c05a250: deleting -1711462110.303894 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #85 L(:1c1 16957.963377) => EVERYONE -1711462110.303908 [0] gc: gc_delete_proxy_writer (0x77041c05a250, 110d7b4:17c5b8c5:94bd0ff4:5203) -1711462110.303953 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=20 -1711462110.303974 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #85: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.303987 [0] recvMC: HEARTBEAT(F#94:85..85 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@85(sync)) -1711462110.304771 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.304780 [0] recv: INFOTS(1711462110.304665223) -1711462110.304798 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #79 L(:1c1 16957.964283)) -1711462110.304861 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #79: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5504}} -1711462110.304889 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5504 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:5504) => EVERYONE -1711462110.304917 [0] dq.builtin: - deleting -1711462110.304940 [0] dq.builtin: delete -1711462110.304954 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.306037 [0] gc: gc 0x77041c014c20: deleting -1711462110.306062 [0] gc: gc_delete_proxy_reader (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5504) -1711462110.306075 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=19 -1711462110.306087 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.306128 [0] recv: INFOTS(1711462110.305944071) -1711462110.306153 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #85 L(:1c1 16957.965628)) -1711462110.306269 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #85: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5403}} -1711462110.306290 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5403 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:5403) - deleting -1711462110.306302 [0] dq.builtin: => EVERYONE -1711462110.306327 [0] dq.builtin: delete -1711462110.306339 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.307419 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 224 from udp/10.101.12.71:40473 -1711462110.307436 [0] recvMC: INFOTS(1711462110.307152640) -1711462110.307440 [0] gc: gc 0x77041c014c20: deleting -1711462110.307498 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5403) -1711462110.307551 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5403) -1711462110.307617 [0] gc: gc 0x77041c014c20: deleting -1711462110.307637 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5403) -1711462110.307470 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #86 L(:1c1 16957.966937) => EVERYONE -1711462110.307652 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=18 -1711462110.307710 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #86: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.307725 [0] recvMC: HEARTBEAT(F#95:86..86 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@86(sync)) -1711462110.307893 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.307917 [0] recv: INFOTS(1711462110.307705837) -1711462110.307945 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #86 L(:1c1 16957.967418)) -1711462110.307984 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #86: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5603}} -1711462110.307996 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5603 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:5603) - deleting -1711462110.308016 [0] dq.builtin: => EVERYONE -1711462110.308042 [0] dq.builtin: delete -1711462110.308057 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.308371 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 200 from udp/10.101.12.71:40473 -1711462110.308403 [0] recvMC: INFOTS(1711462110.308113998) -1711462110.308432 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #87 L(:1c1 16957.967901) => EVERYONE -1711462110.308569 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #87: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.308591 [0] recvMC: HEARTBEAT(F#96:87..87 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@87(sync)) -1711462110.308871 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.308889 [0] recv: INFOTS(1711462110.308696854) -1711462110.308926 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #87 L(:1c1 16957.968390)) -1711462110.308987 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #87: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5703}} -1711462110.309019 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5703 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:5703) - deleting -1711462110.309034 [0] dq.builtin: => EVERYONE -1711462110.309066 [0] dq.builtin: delete -1711462110.309120 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 176 from udp/10.101.12.71:40473 -1711462110.309145 [0] gc: gc 0x77041c014c20: deleting -1711462110.309195 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462110.309162 [0] recvMC: INFOTS(1711462110.308810509) -1711462110.309257 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462110.309273 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #88 L(:1c1 16957.968661) => EVERYONE -1711462110.309224 [0] gc: gc 0x77041c04e320: deleting -1711462110.309361 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c04e320, 110d7b4:17c5b8c5:94bd0ff4:5703) -1711462110.309389 [0] gc: gc 0x77041c014c20: deleting -1711462110.309404 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462110.309405 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c04e320, 110d7b4:17c5b8c5:94bd0ff4:5703) -1711462110.309424 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=17 -1711462110.309367 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #88: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.309463 [0] gc: gc 0x77041c04e320: deleting -1711462110.309486 [0] recvMC: HEARTBEAT(F#97:88..88 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@88(sync)) -1711462110.309488 [0] gc: gc_delete_proxy_writer (0x77041c04e320, 110d7b4:17c5b8c5:94bd0ff4:5703) -1711462110.309516 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=16 -1711462110.310003 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.310016 [0] recv: INFOTS(1711462110.309878806) -1711462110.310038 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #88 L(:1c1 16957.969517)) -1711462110.310106 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #88: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5803}} -1711462110.310126 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5803 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:5803) - deleting -1711462110.310175 [0] dq.builtin: => EVERYONE -1711462110.310208 [0] dq.builtin: delete -1711462110.310229 [0] gc: gc 0x77041c014c20: deleting -1711462110.310245 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5803) -1711462110.310277 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5803) -1711462110.310299 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 152 from udp/10.101.12.71:40473 -1711462110.310304 [0] gc: gc 0x77041c014c20: deleting -1711462110.310356 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:5803) -1711462110.310338 [0] recvMC: INFOTS(1711462110.310031935) -1711462110.310376 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=15 -1711462110.310410 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #89 L(:1c1 16957.969836) => EVERYONE -1711462110.310466 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #89: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{}}}}) -1711462110.310486 [0] recvMC: HEARTBEAT(F#98:89..89 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@89(sync)) -1711462110.311188 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.311198 [0] recv: INFOTS(1711462110.311071865) -1711462110.311218 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #89 L(:1c1 16957.970700)) -1711462110.311281 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #89: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:603}} -1711462110.311316 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:603 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:603) - deleting -1711462110.311332 [0] dq.builtin: => EVERYONE -1711462110.311369 [0] dq.builtin: delete -1711462110.311333 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 120 from udp/10.101.12.71:40473 -1711462110.311387 [0] gc: gc 0x77041c014c20: not yet, shortsleep -1711462110.311454 [0] recvMC: INFOTS(1711462110.311185386) -1711462110.311480 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #90 L(:1c1 16957.970902) => EVERYONE -1711462110.311514 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #90: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{}}) -1711462110.311529 [0] recvMC: HEARTBEAT(F#99:90..90 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@90(sync)) -1711462110.312481 [0] gc: gc 0x77041c014c20: deleting -1711462110.312489 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:603) -1711462110.312514 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:603) -1711462110.312541 [0] gc: gc 0x77041c014c20: deleting -1711462110.312550 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110d7b4:17c5b8c5:94bd0ff4:603) -1711462110.312559 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=14 -1711462110.314590 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462110.314630 [0] recv: HEARTBEAT(#9:1..79 L(:1c1 16957.974112)110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:4c7@79(sync)) -1711462110.314664 [0] tev: acknack 110aba1:7b19badd:ce0adb73:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2: F#4:80/0: -1711462110.314688 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:4c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462110.314709 [0] tev: xpack_addmsg 0x770414001390 0x770424003ba0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.314772 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770424003c88:44 [ udp/10.101.12.71:7414@2 ] -1711462110.314785 [0] tev: traffic-xmit (1) 64 -1711462110.315979 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462110.316006 [0] recv: HEARTBEAT(#10:1..89 L(:1c1 16957.975493)110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:3c7@89(sync)) -1711462110.316044 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#5:90/0: -1711462110.316099 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462110.316119 [0] tev: xpack_addmsg 0x770414001390 0x770424003ba0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.316175 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770424003c88:44 [ udp/10.101.12.71:7414@2 ] -1711462110.316185 [0] tev: traffic-xmit (1) 64 -1711462110.376709 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462110.376778 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:403 multicasting (rel-prd 6 seq-eq-max 6 seq 24 maxseq 13) -1711462110.376795 [0] recvMC: HEARTBEAT(#29:20..20 L(:1c1 16958.036265)110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:504@20(sync)) -1711462110.376833 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:403) sent, resched in 0.1 s (min-ack 13, avail-seq 24, xmit 24) -1711462110.376885 [0] tev: xpack_addmsg 0x770414001390 0x770424003ba0 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462110.376916 [0] tev: acknack 110aba1:7b19badd:ce0adb73:504 -> 110443d:bb7f10a5:18901533:403: F#5:21/0: -1711462110.376937 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462110.377054 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 52 from udp/10.101.12.71:52025 -1711462110.377081 [0] recvMC: HEARTBEAT(#35:24..24 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462110.377214 [0] tev: nn_xpack_send 52: 0x77041400139c:20 0x770424003c98:32 [ udp/239.255.0.1:7401@2 ] -1711462110.377252 [0] tev: traffic-xmit (1) 52 -1711462110.377274 [0] tev: xpack_addmsg 0x770414001390 0x770424003990 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.377351 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770424003a78:44 [ udp/10.101.12.71:7417@2 ] -1711462110.377382 [0] tev: traffic-xmit (1) 64 -1711462110.377528 [0] recvUC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462110.377566 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.377605 [0] recvUC: ACKNACK(F#5:25/0: L(:1c1 16958.037060) 110e21c:d0762c48:a9f0fb28:504 -> 110aba1:7b19badd:ce0adb73:403 ACK11 RM0) -1711462110.377639 [0] recvUC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462110.377646 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.377663 [0] recvUC: ACKNACK(F#5:25/0: L(:1c1 16958.037148) 110d7b4:17c5b8c5:94bd0ff4:504 -> 110aba1:7b19badd:ce0adb73:403 ACK11 RM0) -1711462110.377678 [0] recvUC: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462110.377690 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.377705 [0] recvUC: ACKNACK(F#5:25/0: L(:1c1 16958.037189) 110cd0d:56a27910:57318171:504 -> 110aba1:7b19badd:ce0adb73:403 ACK11 RM0) -1711462110.377713 [0] recvUC: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462110.377725 [0] recvUC: ACKNACK(F#21:25/0: L(:1c1 16958.037189) 110cd0d:e3b81b8d:1ccb65b1:504 -> 110aba1:7b19badd:ce0adb73:403 ACK11 RM0) -1711462110.377732 [0] recvUC: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462110.377744 [0] recvUC: ACKNACK(F#12:25/0: L(:1c1 16958.037189) 110cd0d:79d6eeac:ea4a8907:504 -> 110aba1:7b19badd:ce0adb73:403 ACK11 RM0) -1711462110.378044 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462110.378100 [0] recvUC: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.378143 [0] recvUC: ACKNACK(F#5:25/0: L(:1c1 16958.037594) 110443d:bb7f10a5:18901533:504 -> 110aba1:7b19badd:ce0adb73:403remove_acked_messages: deleting lingering writer 110aba1:7b19badd:ce0adb73:403 -1711462110.378156 [0] recvUC: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:403) ... -1711462110.378180 [0] recvUC: => EVERYONE -1711462110.378227 [0] recvUC: writer_set_state(110aba1:7b19badd:ce0adb73:403) state transition 2 -> 3 -1711462110.378252 [0] recvUC: ACK11 RM0) -1711462110.378307 [0] gc: gc 0x770404002690: deleting -1711462110.378335 [0] gc: gc_delete_writer(0x770404002690, 110aba1:7b19badd:ce0adb73:403) -1711462110.378401 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:3c2 #24: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:403}} -1711462110.378422 [0] gc: non-timed queue now has 1 items -1711462110.378458 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:403 @ 0x653a1b487c64) user 5 builtin 12 -1711462110.378534 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:4c2) suppressed, resched in inf s (min-ack 19, avail-seq 1, xmit 19) -1711462110.378537 [0] python3: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:504) ... -1711462110.378638 [0] python3: => EVERYONE -1711462110.378601 [0] tev: xpack_addmsg 0x770414001390 0x77041c049320 0(data(110aba1:7b19badd:ce0adb73:3c2:#24/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.378802 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x770424003d48:48 0x770424003544:28 [ udp/239.255.0.1:7400@2 ] -1711462110.378825 [0] tev: traffic-xmit (1) 96 -1711462110.378800 [0] gc: gc 0x653a1b29e680: not yet, shortsleep -1711462110.378848 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.379048 [0] recv: INFOTS(1711462110.378453601) -1711462110.379082 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #20 L(:1c1 16958.038540)) -1711462110.379135 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.379158 [0] recv: INFOTS(1711462110.378380676) -1711462110.379175 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #24 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462110.379231 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #20: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:403}} -1711462110.379286 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:403 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:403) - deleting -1711462110.379311 [0] dq.builtin: => EVERYONE -1711462110.379362 [0] dq.builtin: delete -1711462110.379684 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462110.379732 [0] recv: HEARTBEAT(#9:20..20 L(:1c1 16958.039212)110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0: 110aba1:7b19badd:ce0adb73:3c7@20(sync)) -1711462110.379761 [0] tev: acknack 110aba1:7b19badd:ce0adb73:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#5:21/0: -1711462110.379779 [0] tev: send acknack(rd 110aba1:7b19badd:ce0adb73:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462110.379794 [0] tev: xpack_addmsg 0x770414001390 0x77041c049320 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.379810 [0] tev: writer_hbcontrol: wr 110aba1:7b19badd:ce0adb73:3c2 multicasting (rel-prd 6 seq-eq-max 6 seq 24 maxseq 23) -1711462110.379831 [0] tev: heartbeat(wr 110aba1:7b19badd:ce0adb73:3c2) sent, resched in 0.1 s (min-ack 23, avail-seq 24, xmit 24) -1711462110.379882 [0] tev: nn_xpack_send 64: 0x77041400139c:20 0x770424003d38:44 [ udp/10.101.12.71:7416@2 ] -1711462110.379897 [0] tev: traffic-xmit (1) 64 -1711462110.379918 [0] tev: xpack_addmsg 0x770414001390 0x770424003990 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462110.379918 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.379978 [0] gc: gc 0x653a1b29e680: deleting -1711462110.379982 [0] recv: INFOTS(1711462110.379581375) -1711462110.380019 [0] tev: nn_xpack_send 52: 0x77041400139c:20 0x770424003a88:32 [ udp/239.255.0.1:7400@2 ] -1711462110.380042 [0] tev: traffic-xmit (1) 52 -1711462110.380026 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #14 L(:1c1 16958.039482)) -1711462110.380064 [0] gc: gc_delete_reader(0x653a1b29e680, 110aba1:7b19badd:ce0adb73:504) -1711462110.380122 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 52 from udp/10.101.12.71:52025 -1711462110.380146 [0] recv: HEARTBEAT(#8:24..24 110aba1:7b19badd:ce0adb73:3c2? -> 0:0:0:0) -1711462110.380159 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #14: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:504}} -1711462110.380148 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:504, 5): reader no longer exists -1711462110.380193 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:504 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:504) => EVERYONE -1711462110.380232 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:504, 3): reader no longer exists -1711462110.380269 [0] dq.builtin: - deleting -1711462110.380313 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462110.380329 [0] dq.builtin: delete -1711462110.380355 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.380335 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:504, 3): reader no longer exists -1711462110.380382 [0] recv: ACKNACK(F#5:25/0: L(:1c1 16958.039854) 110d7b4:17c5b8c5:94bd0ff4:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK1 RM0) -1711462110.380396 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:504, 4): reader no longer exists -1711462110.380415 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:504, 7): reader no longer exists -1711462110.380426 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462110.380434 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.380447 [0] recv: ACKNACK(F#5:25/0: L(:1c1 16958.039937) 110e21c:d0762c48:a9f0fb28:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK1 RM0) -1711462110.380449 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:4c2 #20: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:504}} -1711462110.380491 [0] gc: non-timed queue now has 1 items -1711462110.380556 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:504 @ 0x653a1b2c9994) user 4 builtin 12 -1711462110.380593 [0] gc: gc 0x77041c014c20: deleting -1711462110.380622 [0] gc: gc_delete_proxy_writer_dqueue(0x77041c014c20, 110443d:bb7f10a5:18901533:403) -1711462110.380646 [0] gc: gc 0x77041c052a60: deleting -1711462110.380574 [0] tev: xpack_addmsg 0x770414001390 0x77041c066c20 0(data(110aba1:7b19badd:ce0adb73:4c2:#20/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.380661 [0] gc: gc_delete_proxy_reader (0x77041c052a60, 110443d:bb7f10a5:18901533:504) -1711462110.380703 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462110.380735 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.380673 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x77041c014c20, 110443d:bb7f10a5:18901533:403) -1711462110.380737 [0] python3: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:207) ... -1711462110.380792 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x77041c033088:48 0x770424002d04:28 [ udp/239.255.0.1:7400@2 ] -1711462110.380797 [0] recv: ACKNACK(F#5:25/0: L(:1c1 16958.040234) 110443d:bb7f10a5:18901533:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK1 RM0) -1711462110.380838 [0] python3: => EVERYONE -1711462110.380916 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.380873 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=13 -1711462110.380967 [0] recv: INFOTS(1711462110.380434543) -1711462110.381008 [0] gc: gc 0x77041c014c20: deleting -1711462110.381032 [0] gc: gc_delete_proxy_writer (0x77041c014c20, 110443d:bb7f10a5:18901533:403) -1711462110.381019 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #20 110aba1:7b19badd:ce0adb73:4c2? -> 0:0:0:0) -1711462110.381050 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:504, 6): reader no longer exists -1711462110.380927 [0] tev: traffic-xmit (1) 96 -1711462110.381091 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=12 -1711462110.381109 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462110.381115 [0] gc: gc 0x77041000d490: not yet, shortsleep -1711462110.381122 [0] recv: INFODST(110aba1:7b19badd:ce0adb73) -1711462110.381173 [0] recv: ACKNACK(F#9:25/0: L(:1c1 16958.040623) 110cd0d:79d6eeac:ea4a8907:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK1 RM0) -1711462110.381188 [0] recv: INFOSRC(110cd0d:56a27910:57318171 vendor 1.16) -1711462110.381200 [0] recv: ACKNACK(F#5:25/0: L(:1c1 16958.040623) 110cd0d:56a27910:57318171:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK1 RM0) -1711462110.381211 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462110.381231 [0] recv: ACKNACK(F#15:25/0: L(:1c1 16958.040623) 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110aba1:7b19badd:ce0adb73:3c2 ACK1 RM1) -1711462110.382211 [0] gc: gc 0x77041000d490: deleting -1711462110.382228 [0] gc: gc_delete_reader(0x77041000d490, 110aba1:7b19badd:ce0adb73:207) -1711462110.382253 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:207 @ 0x653a1b3fe704) user 3 builtin 12 -1711462110.382281 [0] gc: gc 0x653a1ae98420: not yet, shortsleep -1711462110.382379 [0] python3: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:307) ... -1711462110.382396 [0] python3: => EVERYONE -1711462110.383352 [0] gc: gc 0x653a1ae98420: deleting -1711462110.383364 [0] gc: gc 0x653a1b2d9610: deleting -1711462110.383372 [0] gc: gc 0x653a1b3a1360: deleting -1711462110.383378 [0] gc: gc 0x653a1b314040: deleting -1711462110.383385 [0] gc: gc 0x653a1b39cbc0: deleting -1711462110.383392 [0] gc: gc 0x653a1b339890: deleting -1711462110.383398 [0] gc: gc 0x653a1b387570: deleting -1711462110.383404 [0] gc: gc 0x653a1b392270: deleting -1711462110.383410 [0] gc: gc 0x653a1b386a30: deleting -1711462110.383417 [0] gc: gc 0x653a1b3de770: deleting -1711462110.383423 [0] gc: gc 0x653a1b38e4e0: deleting -1711462110.383429 [0] gc: gc 0x653a1b4586d0: deleting -1711462110.383435 [0] gc: gc 0x653a1b38d9d0: deleting -1711462110.383441 [0] gc: gc 0x653a1b39ea10: deleting -1711462110.383447 [0] gc: gc 0x653a1b2a04e0: deleting -1711462110.383453 [0] gc: gc 0x653a1b466af0: deleting -1711462110.383459 [0] gc: gc 0x653a1b3f7c50: deleting -1711462110.383465 [0] gc: gc 0x653a1b39e730: deleting -1711462110.383474 [0] gc: gc 0x653a1b48b850: deleting -1711462110.383480 [0] gc: gc 0x653a1b316180: deleting -1711462110.383487 [0] gc: gc 0x653a1b39bcc0: deleting -1711462110.383493 [0] gc: gc 0x653a1b2cf300: deleting -1711462110.383500 [0] gc: gc 0x653a1b380160: deleting -1711462110.383508 [0] gc: gc 0x653a1b45a150: deleting -1711462110.383515 [0] gc: gc 0x653a1b39c050: deleting -1711462110.383523 [0] gc: gc 0x653a1b459ab0: deleting -1711462110.383531 [0] gc: gc 0x653a1b3898f0: deleting -1711462110.383539 [0] gc: gc 0x653a1b389b20: deleting -1711462110.383546 [0] gc: gc 0x653a1b3831a0: deleting -1711462110.383553 [0] gc: gc 0x653a1b3833d0: deleting -1711462110.383561 [0] gc: gc 0x653a1b454930: deleting -1711462110.383569 [0] gc: gc 0x653a1b454b60: deleting -1711462110.383576 [0] gc: gc 0x653a1b45a730: deleting -1711462110.383583 [0] gc: gc 0x653a1b45a960: deleting -1711462110.383590 [0] gc: gc 0x653a1b39d5c0: deleting -1711462110.383598 [0] gc: gc 0x653a1b39d7f0: deleting -1711462110.383606 [0] gc: gc 0x653a1b390ea0: deleting -1711462110.383613 [0] gc: gc 0x653a1b3910d0: deleting -1711462110.383620 [0] gc: gc 0x653a1b2cb460: deleting -1711462110.383628 [0] gc: gc 0x653a1b2cb690: deleting -1711462110.383635 [0] gc: gc 0x653a1b3a0200: deleting -1711462110.383642 [0] gc: gc 0x653a1b3a0430: deleting -1711462110.383650 [0] gc: gc 0x653a1b3a0710: deleting -1711462110.383657 [0] gc: gc 0x653a1b3a0940: deleting -1711462110.383664 [0] gc: gc 0x653a1b495ff0: deleting -1711462110.383671 [0] gc: gc_delete_reader(0x653a1b495ff0, 110aba1:7b19badd:ce0adb73:307) -1711462110.383688 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:307 @ 0x653a1b3ea574) user 2 builtin 12 -1711462110.383701 [0] gc: gc 0x653a1b314040: not yet, shortsleep -1711462110.383770 [0] python3: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:107) ... -1711462110.383784 [0] python3: => EVERYONE -1711462110.384772 [0] gc: gc 0x653a1b314040: deleting -1711462110.384788 [0] gc: gc 0x653a1b3a1360: deleting -1711462110.384796 [0] gc: gc 0x653a1b39cbc0: deleting -1711462110.384803 [0] gc: gc 0x653a1b339890: deleting -1711462110.384811 [0] gc: gc 0x653a1b387570: deleting -1711462110.384821 [0] gc: gc 0x653a1b392270: deleting -1711462110.384829 [0] gc: gc 0x653a1b386a30: deleting -1711462110.384835 [0] gc: gc 0x653a1b3de770: deleting -1711462110.384842 [0] gc: gc 0x653a1b38e4e0: deleting -1711462110.384849 [0] gc: gc 0x653a1b4586d0: deleting -1711462110.384855 [0] gc: gc 0x653a1b38d9d0: deleting -1711462110.384864 [0] gc: gc 0x653a1b39ea10: deleting -1711462110.384872 [0] gc: gc 0x653a1b2a04e0: deleting -1711462110.384879 [0] gc: gc 0x653a1b466af0: deleting -1711462110.384885 [0] gc: gc 0x653a1b3f7c50: deleting -1711462110.384892 [0] gc: gc 0x653a1b495ff0: deleting -1711462110.384898 [0] gc: gc 0x653a1b39e730: deleting -1711462110.384905 [0] gc: gc 0x653a1b48b850: deleting -1711462110.384912 [0] gc: gc 0x653a1b316180: deleting -1711462110.384919 [0] gc: gc 0x653a1b46acd0: deleting -1711462110.384926 [0] gc: gc 0x653a1b39bcc0: deleting -1711462110.384933 [0] gc: gc 0x653a1b2cf300: deleting -1711462110.384939 [0] gc: gc 0x653a1b380160: deleting -1711462110.384947 [0] gc: gc 0x653a1b45a150: deleting -1711462110.384953 [0] gc: gc 0x653a1b39c050: deleting -1711462110.384960 [0] gc: gc 0x653a1b459ab0: deleting -1711462110.384966 [0] gc: gc 0x653a1b3831a0: deleting -1711462110.384972 [0] gc: gc 0x653a1b3833d0: deleting -1711462110.384979 [0] gc: gc 0x653a1b454930: deleting -1711462110.384986 [0] gc: gc 0x653a1b454b60: deleting -1711462110.384992 [0] gc: gc 0x653a1b45a730: deleting -1711462110.384998 [0] gc: gc 0x653a1b45a960: deleting -1711462110.385006 [0] gc: gc 0x653a1b39d5c0: deleting -1711462110.385012 [0] gc: gc 0x653a1b39d7f0: deleting -1711462110.385018 [0] gc: gc 0x653a1b390ea0: deleting -1711462110.385025 [0] gc: gc 0x653a1b3910d0: deleting -1711462110.385031 [0] gc: gc 0x653a1b3898f0: deleting -1711462110.385037 [0] gc: gc 0x653a1b389b20: deleting -1711462110.385044 [0] gc: gc 0x653a1b2cb460: deleting -1711462110.385050 [0] gc: gc 0x653a1b2cb690: deleting -1711462110.385058 [0] gc: gc 0x653a1b3a0200: deleting -1711462110.385064 [0] gc: gc 0x653a1b3a0430: deleting -1711462110.385071 [0] gc: gc 0x653a1b3a0710: deleting -1711462110.385078 [0] gc: gc 0x653a1b3a0940: deleting -1711462110.385085 [0] gc: gc 0x653a1b45b310: deleting -1711462110.385092 [0] gc: gc 0x653a1b45b540: deleting -1711462110.385099 [0] gc: gc 0x653a1b39ee50: deleting -1711462110.385107 [0] gc: gc 0x653a1b39f080: deleting -1711462110.385113 [0] gc: gc 0x653a1b2c97f0: deleting -1711462110.385119 [0] gc: gc 0x653a1b2c9a20: deleting -1711462110.385125 [0] gc: gc 0x653a1b2c9c50: deleting -1711462110.385132 [0] gc: gc 0x653a1b443ed0: deleting -1711462110.385138 [0] gc: gc_delete_reader(0x653a1b443ed0, 110aba1:7b19badd:ce0adb73:107) -1711462110.385156 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:107 @ 0x653a1b295fa4) user 1 builtin 12 -1711462110.385168 [0] gc: gc 0x653a1b314040: deleting -1711462110.385183 [0] python3: ddsi_delete_participant (110aba1:7b19badd:ce0adb73:1c1) -1711462110.385193 [0] python3: => EVERYONE -1711462110.385215 [0] gc: gc 0x653a1b485a00: deleting -1711462110.385227 [0] gc: gc_delete_participant (0x653a1b485a00, 110aba1:7b19badd:ce0adb73:1c1) -1711462110.385219 [0] python3: trigger_recv_threads: 0 many 0x653a1b314bf0 -1711462110.385238 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 0:0:0:0 @ (nil)) user 0 builtin 12 -1711462110.385264 [0] python3: trigger_recv_threads: 1 single udp/239.255.0.1:7401 -1711462110.385285 [0] gc: write_sample 110aba1:7b19badd:ce0adb73:100c2 #2: ST3 DCPSParticipant/ParticipantBuiltinTopicData:{participant_guid={110aba1:7b19badd:ce0adb73:1c1}} -1711462110.385301 [0] recv: done -1711462110.385315 [0] recvMC: done -1711462110.385323 [0] gc: non-timed queue now has 1 items -1711462110.385332 [0] python3: trigger_recv_threads: 2 single udp/10.101.12.71:7419 -1711462110.385336 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:100c2) ... -1711462110.385351 [0] tev: xpack_addmsg 0x770414001390 0x77041c030030 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.385355 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:100c2) ... -1711462110.385382 [0] gc: writer_set_state(110aba1:7b19badd:ce0adb73:100c2) state transition 0 -> 3 -1711462110.385385 [0] recvUC: done -1711462110.385390 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:3c2) ... -1711462110.385412 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:3c2) ... -1711462110.385421 [0] gc: writer_set_state(110aba1:7b19badd:ce0adb73:3c2) state transition 0 -> 3 -1711462110.385429 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:4c2) ... -1711462110.385436 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:4c2) ... -1711462110.385446 [0] gc: writer_set_state(110aba1:7b19badd:ce0adb73:4c2) state transition 0 -> 3 -1711462110.385629 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:200c2) ... -1711462110.385638 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:200c2) ... -1711462110.385652 [0] gc: writer_set_state(110aba1:7b19badd:ce0adb73:200c2) state transition 0 -> 3 -1711462110.385660 [0] gc: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:100c7) ... -1711462110.385671 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:2c2) - unknown guid -1711462110.385681 [0] gc: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:2c7) - unknown guid -1711462110.385691 [0] gc: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:3c7) ... -1711462110.385704 [0] gc: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:4c7) ... -1711462110.385725 [0] gc: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:200c7) ... -1711462110.385735 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:300c3) ... -1711462110.385743 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:300c3) ... -1711462110.385751 [0] gc: writer_set_state(110aba1:7b19badd:ce0adb73:300c3) state transition 0 -> 3 -1711462110.385770 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:301c3) ... -1711462110.385780 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:301c3) ... -1711462110.385788 [0] gc: writer_set_state(110aba1:7b19badd:ce0adb73:301c3) state transition 0 -> 3 -1711462110.385796 [0] gc: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:300c4) ... -1711462110.385813 [0] gc: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:301c4) ... -1711462110.385823 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:ff0003c2) - unknown guid -1711462110.385829 [0] gc: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:ff0003c7) - unknown guid -1711462110.385835 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:ff0004c2) - unknown guid -1711462110.385850 [0] gc: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:ff0004c7) - unknown guid -1711462110.385858 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:ff0200c2) - unknown guid -1711462110.385865 [0] gc: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:ff0200c7) - unknown guid -1711462110.385871 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:201c3) - unknown guid -1711462110.385878 [0] gc: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:201c4) - unknown guid -1711462110.385886 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:ff0101c2) - unknown guid -1711462110.385893 [0] gc: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:ff0101c7) - unknown guid -1711462110.385899 [0] gc: ddsi_delete_writer_nolinger(guid 110aba1:7b19badd:ce0adb73:ff0202c3) - unknown guid -1711462110.385909 [0] gc: delete_reader_guid(guid 110aba1:7b19badd:ce0adb73:ff0202c4) - unknown guid -1711462110.385915 [0] gc: gc 0x653a1b314040: not yet, shortsleep -1711462110.386668 [0] tev: nn_xpack_send 96: 0x77041400139c:20 0x77041c01d2b8:48 0x7704240028e4:28 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.0.(trunc) -1711462110.386683 [0] tev: traffic-xmit (101) 96 -1711462110.386793 [0] python3: ddsi_delete_proxy_participant_by_guid(110cd0d:56a27910:57318171:1c1) - deleting -1711462110.386806 [0] python3: => EVERYONE -1711462110.386816 [0] python3: delete_ppt(110cd0d:56a27910:57318171:1c1) - deleting dependent proxy participants -1711462110.386830 [0] python3: delete_ppt(110cd0d:56a27910:57318171:1c1) - deleting endpoints -1711462110.386839 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1604) => EVERYONE -1711462110.386848 [0] python3: - deleting -1711462110.386858 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1504) => EVERYONE -1711462110.386867 [0] python3: - deleting -1711462110.386875 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1404) => EVERYONE -1711462110.386890 [0] python3: - deleting -1711462110.386906 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1304) => EVERYONE -1711462110.386913 [0] python3: - deleting -1711462110.386922 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1104) => EVERYONE -1711462110.386933 [0] python3: - deleting -1711462110.386951 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:f04) => EVERYONE -1711462110.386965 [0] python3: - deleting -1711462110.386974 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:d04) => EVERYONE -1711462110.386983 [0] gc: gc 0x653a1b314040: deleting -1711462110.386999 [0] gc: gc_delete_writer(0x653a1b314040, 110aba1:7b19badd:ce0adb73:100c2) -1711462110.386986 [0] python3: - deleting -1711462110.387017 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:100c2 @ 0x653a1b3e3734) user 0 builtin 11 -1711462110.387030 [0] gc: gc 0x77041c0123e0: deleting -1711462110.387038 [0] gc: gc_delete_writer(0x77041c0123e0, 110aba1:7b19badd:ce0adb73:3c2) -1711462110.387021 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:b04) => EVERYONE -1711462110.387062 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:3c2 @ 0x653a1b3e4134) user 0 builtin 10 -1711462110.387076 [0] gc: gc 0x77041c00fb20: deleting -1711462110.387089 [0] gc: gc_delete_writer(0x77041c00fb20, 110aba1:7b19badd:ce0adb73:4c2) -1711462110.387065 [0] python3: - deleting -1711462110.387114 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:4c2 @ 0x653a1b3e3c14) user 0 builtin 9 -1711462110.387120 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:904) => EVERYONE -1711462110.387129 [0] gc: gc 0x77041c00b2e0: deleting -1711462110.387142 [0] python3: - deleting -1711462110.387146 [0] gc: gc_delete_writer(0x77041c00b2e0, 110aba1:7b19badd:ce0adb73:200c2) -1711462110.387155 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:504) => EVERYONE -1711462110.387183 [0] python3: - deleting -1711462110.387184 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:200c2 @ 0x653a1b3e4714) user 0 builtin 8 -1711462110.387204 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:1203) - deleting -1711462110.387220 [0] gc: gc 0x77041c006ae0: deleting -1711462110.387231 [0] gc: gc_delete_reader(0x77041c006ae0, 110aba1:7b19badd:ce0adb73:100c7) -1711462110.387225 [0] python3: => EVERYONE -1711462110.387252 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:100c7 @ 0x653a1af2dee4) user 0 builtin 7 -1711462110.387259 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:1003) - deleting -1711462110.387275 [0] python3: => EVERYONE -1711462110.387264 [0] gc: gc 0x77041c005430: deleting -1711462110.387309 [0] gc: gc_delete_reader(0x77041c005430, 110aba1:7b19badd:ce0adb73:3c7) -1711462110.387301 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:e03) - deleting -1711462110.387332 [0] python3: => EVERYONE -1711462110.387323 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:3c7, 5): reader no longer exists -1711462110.387345 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:c03) - deleting -1711462110.387355 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:3c7, 3): reader no longer exists -1711462110.387366 [0] python3: => EVERYONE -1711462110.387380 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:a03) - deleting -1711462110.387384 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:3c7, 3): reader no longer exists -1711462110.387393 [0] python3: => EVERYONE -1711462110.387408 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:3c7, 6): reader no longer exists -1711462110.387413 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:803) - deleting -1711462110.387428 [0] python3: => EVERYONE -1711462110.387419 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:3c7, 4): reader no longer exists -1711462110.387444 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:703) - deleting -1711462110.387457 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:3c7, 6): reader no longer exists -1711462110.387469 [0] python3: => EVERYONE -1711462110.387485 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:403) - deleting -1711462110.387489 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:3c7 @ 0x653a1af94554) user 0 builtin 6 -1711462110.387496 [0] python3: => EVERYONE -1711462110.387510 [0] gc: gc 0x653a1b47e890: deleting -1711462110.387519 [0] gc: gc_delete_reader(0x653a1b47e890, 110aba1:7b19badd:ce0adb73:4c7) -1711462110.387521 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:301c4) - deleting -1711462110.387545 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:301c3) - deleting -1711462110.387535 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:4c7, 5): reader no longer exists -1711462110.387565 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:300c4) - deleting -1711462110.387566 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:4c7, 3): reader no longer exists -1711462110.387580 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:300c3) - deleting -1711462110.387597 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:4c7, 3): reader no longer exists -1711462110.387615 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:200c7) - deleting -1711462110.387624 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:4c7, 5): reader no longer exists -1711462110.387637 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:200c2) - deleting -1711462110.387650 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:4c7, 3): reader no longer exists -1711462110.387667 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:4c7) - deleting -1711462110.387677 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:4c7, 5): reader no longer exists -1711462110.387688 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:4c2) - deleting -1711462110.387702 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:4c7 @ 0x653a1af72b04) user 0 builtin 5 -1711462110.387716 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:3c7) - deleting -1711462110.387728 [0] gc: gc 0x770424003dd0: deleting -1711462110.387753 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:3c2) - deleting -1711462110.387755 [0] gc: gc_delete_reader(0x770424003dd0, 110aba1:7b19badd:ce0adb73:200c7) -1711462110.387766 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:100c7) - deleting -1711462110.387782 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:200c7, 5): reader no longer exists -1711462110.387795 [0] python3: ddsi_delete_proxy_participant_by_guid(110cd0d:e3b81b8d:1ccb65b1:1c1) - deleting -1711462110.387807 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:200c7, 6): reader no longer exists -1711462110.387816 [0] python3: => EVERYONE -1711462110.387830 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:200c7, 6): reader no longer exists -1711462110.387834 [0] python3: delete_ppt(110cd0d:e3b81b8d:1ccb65b1:1c1) - deleting dependent proxy participants -1711462110.387847 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:200c7, 6): reader no longer exists -1711462110.387859 [0] python3: delete_ppt(110cd0d:e3b81b8d:1ccb65b1:1c1) - deleting endpoints -1711462110.387874 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:200c7, 5): reader no longer exists -1711462110.387886 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1604) => EVERYONE -1711462110.387898 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:200c7 @ 0x653a1af86bb4) user 0 builtin 4 -1711462110.387912 [0] python3: - deleting -1711462110.387926 [0] gc: gc 0x770424004000: deleting -1711462110.387945 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1504) => EVERYONE -1711462110.387947 [0] gc: gc_delete_writer(0x770424004000, 110aba1:7b19badd:ce0adb73:300c3) -1711462110.387959 [0] python3: - deleting -1711462110.387977 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1404) => EVERYONE -1711462110.387981 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:300c3 @ 0x653a1b3e4ea4) user 0 builtin 3 -1711462110.387989 [0] python3: - deleting -1711462110.388003 [0] gc: gc 0x770424004230: deleting -1711462110.388016 [0] gc: gc_delete_writer(0x770424004230, 110aba1:7b19badd:ce0adb73:301c3) -1711462110.388011 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1304) => EVERYONE -1711462110.388037 [0] python3: - deleting -1711462110.388045 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:301c3 @ 0x653a1b484114) user 0 builtin 2 -1711462110.388059 [0] gc: gc 0x770424004460: deleting -1711462110.388072 [0] gc: gc_delete_reader(0x770424004460, 110aba1:7b19badd:ce0adb73:300c4) -1711462110.388053 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1104) => EVERYONE -1711462110.388089 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:300c4, 3): reader no longer exists -1711462110.388134 [0] python3: - deleting -1711462110.388147 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:300c4, 2): reader no longer exists -1711462110.388164 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:f04) => EVERYONE -1711462110.388198 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:300c4, 2): reader no longer exists -1711462110.388200 [0] python3: - deleting -1711462110.388208 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:300c4, 3): reader no longer exists -1711462110.388224 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:d04) => EVERYONE -1711462110.388226 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:300c4, 2): reader no longer exists -1711462110.388235 [0] python3: - deleting -1711462110.388246 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:300c4 @ 0x653a1af22f84) user 0 builtin 1 -1711462110.388258 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:b04) => EVERYONE -1711462110.388264 [0] gc: gc 0x770424004690: deleting -1711462110.388271 [0] python3: - deleting -1711462110.388281 [0] gc: gc_delete_reader(0x770424004690, 110aba1:7b19badd:ce0adb73:301c4) -1711462110.388290 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:301c4, 3): reader no longer exists -1711462110.388296 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:904) => EVERYONE -1711462110.388298 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:301c4, 2): reader no longer exists -1711462110.388307 [0] python3: - deleting -1711462110.388317 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:301c4, 2): reader no longer exists -1711462110.388327 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:301c4, 3): reader no longer exists -1711462110.388334 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:504) => EVERYONE -1711462110.388338 [0] gc: ddsi_update_reader_init_acknack_count (110aba1:7b19badd:ce0adb73:301c4, 2): reader no longer exists -1711462110.388364 [0] python3: - deleting -1711462110.388434 [0] gc: ddsi_unref_participant(110aba1:7b19badd:ce0adb73:1c1 @ 0x653a1aecced0 <- 110aba1:7b19badd:ce0adb73:301c4 @ 0x653a1aeda794) user 0 builtin 0 -1711462110.388448 [0] gc: ddsi_remove_deleted_participant_guid(110aba1:7b19badd:ce0adb73:1c1 for_what=1) -1711462110.388454 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:1203) - deleting -1711462110.388456 [0] gc: gc 0x653a1b4855a0: not yet, shortsleep -1711462110.388469 [0] python3: => EVERYONE -1711462110.388488 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:1003) - deleting -1711462110.388518 [0] python3: => EVERYONE -1711462110.388528 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:e03) - deleting -1711462110.388534 [0] python3: => EVERYONE -1711462110.388547 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:c03) - deleting -1711462110.388554 [0] python3: => EVERYONE -1711462110.388561 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:a03) - deleting -1711462110.388568 [0] python3: => EVERYONE -1711462110.388577 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:803) - deleting -1711462110.388596 [0] python3: => EVERYONE -1711462110.388605 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:703) - deleting -1711462110.388615 [0] python3: => EVERYONE -1711462110.388625 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:403) - deleting -1711462110.388634 [0] python3: => EVERYONE -1711462110.388645 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:301c4) - deleting -1711462110.388652 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:301c3) - deleting -1711462110.388659 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:300c4) - deleting -1711462110.388664 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:300c3) - deleting -1711462110.388675 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:200c7) - deleting -1711462110.388684 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:200c2) - deleting -1711462110.388695 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:4c7) - deleting -1711462110.388704 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:4c2) - deleting -1711462110.388711 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:3c7) - deleting -1711462110.388716 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:3c2) - deleting -1711462110.388723 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:100c7) - deleting -1711462110.388731 [0] python3: ddsi_delete_proxy_participant_by_guid(110cd0d:79d6eeac:ea4a8907:1c1) - deleting -1711462110.388736 [0] python3: => EVERYONE -1711462110.388746 [0] python3: delete_ppt(110cd0d:79d6eeac:ea4a8907:1c1) - deleting dependent proxy participants -1711462110.388754 [0] python3: delete_ppt(110cd0d:79d6eeac:ea4a8907:1c1) - deleting endpoints -1711462110.388761 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1604) => EVERYONE -1711462110.388768 [0] python3: - deleting -1711462110.388776 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1504) => EVERYONE -1711462110.388781 [0] python3: - deleting -1711462110.388786 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1404) => EVERYONE -1711462110.388794 [0] python3: - deleting -1711462110.388798 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1304) => EVERYONE -1711462110.388803 [0] python3: - deleting -1711462110.388807 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1104) => EVERYONE -1711462110.388812 [0] python3: - deleting -1711462110.388817 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:f04) => EVERYONE -1711462110.388822 [0] python3: - deleting -1711462110.388829 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:d04) => EVERYONE -1711462110.388833 [0] python3: - deleting -1711462110.388839 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:b04) => EVERYONE -1711462110.388843 [0] python3: - deleting -1711462110.388851 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:904) => EVERYONE -1711462110.388855 [0] python3: - deleting -1711462110.388862 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:504) => EVERYONE -1711462110.388866 [0] python3: - deleting -1711462110.388877 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:1203) - deleting -1711462110.388882 [0] python3: => EVERYONE -1711462110.388889 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:1003) - deleting -1711462110.388894 [0] python3: => EVERYONE -1711462110.388901 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:e03) - deleting -1711462110.388906 [0] python3: => EVERYONE -1711462110.388912 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:c03) - deleting -1711462110.388917 [0] python3: => EVERYONE -1711462110.388924 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:a03) - deleting -1711462110.388928 [0] python3: => EVERYONE -1711462110.388934 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:803) - deleting -1711462110.388939 [0] python3: => EVERYONE -1711462110.388945 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:703) - deleting -1711462110.388949 [0] python3: => EVERYONE -1711462110.388955 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:403) - deleting -1711462110.388960 [0] python3: => EVERYONE -1711462110.388967 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:301c4) - deleting -1711462110.388976 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:301c3) - deleting -1711462110.388982 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:300c4) - deleting -1711462110.388986 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:300c3) - deleting -1711462110.388994 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:200c7) - deleting -1711462110.388999 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:200c2) - deleting -1711462110.389005 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:4c7) - deleting -1711462110.389011 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:4c2) - deleting -1711462110.389017 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:3c7) - deleting -1711462110.389021 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:3c2) - deleting -1711462110.389028 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:100c7) - deleting -1711462110.389035 [0] python3: ddsi_delete_proxy_participant_by_guid(110e21c:d0762c48:a9f0fb28:1c1) - deleting -1711462110.389038 [0] python3: => EVERYONE -1711462110.389044 [0] python3: delete_ppt(110e21c:d0762c48:a9f0fb28:1c1) - deleting dependent proxy participants -1711462110.389049 [0] python3: delete_ppt(110e21c:d0762c48:a9f0fb28:1c1) - deleting endpoints -1711462110.389054 [0] python3: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:504) => EVERYONE -1711462110.389060 [0] python3: - deleting -1711462110.389064 [0] python3: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:403) - deleting -1711462110.389071 [0] python3: => EVERYONE -1711462110.389079 [0] python3: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:301c4) - deleting -1711462110.389084 [0] python3: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:301c3) - deleting -1711462110.389090 [0] python3: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:300c4) - deleting -1711462110.389095 [0] python3: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:300c3) - deleting -1711462110.389101 [0] python3: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:200c7) - deleting -1711462110.389106 [0] python3: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:200c2) - deleting -1711462110.389113 [0] python3: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:4c7) - deleting -1711462110.389118 [0] python3: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:4c2) - deleting -1711462110.389124 [0] python3: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:3c7) - deleting -1711462110.389128 [0] python3: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:3c2) - deleting -1711462110.389134 [0] python3: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:100c7) - deleting -1711462110.389142 [0] python3: ddsi_delete_proxy_participant_by_guid(110443d:bb7f10a5:18901533:1c1) - deleting -1711462110.389148 [0] python3: => EVERYONE -1711462110.389156 [0] python3: delete_ppt(110443d:bb7f10a5:18901533:1c1) - deleting dependent proxy participants -1711462110.389165 [0] python3: delete_ppt(110443d:bb7f10a5:18901533:1c1) - deleting endpoints -1711462110.389171 [0] python3: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:301c4) - deleting -1711462110.389175 [0] python3: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:301c3) - deleting -1711462110.389183 [0] python3: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:300c4) - deleting -1711462110.389188 [0] python3: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:300c3) - deleting -1711462110.389195 [0] python3: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:200c7) - deleting -1711462110.389199 [0] python3: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:200c2) - deleting -1711462110.389206 [0] python3: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:4c7) - deleting -1711462110.389210 [0] python3: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:4c2) - deleting -1711462110.389221 [0] python3: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:3c7) - deleting -1711462110.389225 [0] python3: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:3c2) - deleting -1711462110.389232 [0] python3: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:100c7) - deleting -1711462110.389238 [0] python3: ddsi_delete_proxy_participant_by_guid(110d7b4:17c5b8c5:94bd0ff4:1c1) - deleting -1711462110.389242 [0] python3: => EVERYONE -1711462110.389247 [0] python3: delete_ppt(110d7b4:17c5b8c5:94bd0ff4:1c1) - deleting dependent proxy participants -1711462110.389253 [0] python3: delete_ppt(110d7b4:17c5b8c5:94bd0ff4:1c1) - deleting endpoints -1711462110.389259 [0] python3: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:504) => EVERYONE -1711462110.389264 [0] python3: - deleting -1711462110.389271 [0] python3: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:403) - deleting -1711462110.389276 [0] python3: => EVERYONE -1711462110.389283 [0] python3: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:301c4) - deleting -1711462110.389288 [0] python3: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:301c3) - deleting -1711462110.389293 [0] python3: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:300c4) - deleting -1711462110.389299 [0] python3: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:300c3) - deleting -1711462110.389304 [0] python3: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:200c7) - deleting -1711462110.389309 [0] python3: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:200c2) - deleting -1711462110.389315 [0] python3: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4c7) - deleting -1711462110.389320 [0] python3: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4c2) - deleting -1711462110.389327 [0] python3: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3c7) - deleting -1711462110.389333 [0] python3: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3c2) - deleting -1711462110.389339 [0] python3: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:100c7) - deleting -1711462110.389553 [0] gc: gc 0x653a1b4855a0: deleting -1711462110.389573 [0] gc: gc_delete_proxy_reader (0x653a1b4855a0, 110cd0d:56a27910:57318171:1604) -1711462110.389582 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=29 -1711462110.389588 [0] gc: gc 0x653a1b4857d0: deleting -1711462110.389595 [0] gc: gc_delete_proxy_reader (0x653a1b4857d0, 110cd0d:56a27910:57318171:1504) -1711462110.389599 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=28 -1711462110.389605 [0] gc: gc 0x653a1b485a00: deleting -1711462110.389610 [0] gc: gc_delete_proxy_reader (0x653a1b485a00, 110cd0d:56a27910:57318171:1404) -1711462110.389615 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=27 -1711462110.389621 [0] gc: gc 0x653a1b3a1360: deleting -1711462110.389625 [0] gc: gc_delete_proxy_reader (0x653a1b3a1360, 110cd0d:56a27910:57318171:1304) -1711462110.389631 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=26 -1711462110.389638 [0] gc: gc 0x653a1b39cbc0: deleting -1711462110.389644 [0] gc: gc_delete_proxy_reader (0x653a1b39cbc0, 110cd0d:56a27910:57318171:1104) -1711462110.389651 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=25 -1711462110.389658 [0] gc: gc 0x653a1b339890: deleting -1711462110.389661 [0] gc: gc_delete_proxy_reader (0x653a1b339890, 110cd0d:56a27910:57318171:f04) -1711462110.389669 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=24 -1711462110.389676 [0] gc: gc 0x653a1b387570: deleting -1711462110.389683 [0] gc: gc_delete_proxy_reader (0x653a1b387570, 110cd0d:56a27910:57318171:d04) -1711462110.389689 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=23 -1711462110.389695 [0] gc: gc 0x653a1b392270: deleting -1711462110.389700 [0] gc: gc_delete_proxy_reader (0x653a1b392270, 110cd0d:56a27910:57318171:b04) -1711462110.389705 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=22 -1711462110.389711 [0] gc: gc 0x653a1b386a30: deleting -1711462110.389717 [0] gc: gc_delete_proxy_reader (0x653a1b386a30, 110cd0d:56a27910:57318171:904) -1711462110.389721 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=21 -1711462110.389728 [0] gc: gc 0x653a1b3de770: deleting -1711462110.389732 [0] gc: gc_delete_proxy_reader (0x653a1b3de770, 110cd0d:56a27910:57318171:504) -1711462110.389737 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=20 -1711462110.389745 [0] gc: gc 0x653a1b38e4e0: deleting -1711462110.389750 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b38e4e0, 110cd0d:56a27910:57318171:1203) -1711462110.389758 [0] gc: gc 0x653a1b4586d0: deleting -1711462110.389763 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b4586d0, 110cd0d:56a27910:57318171:1003) -1711462110.389770 [0] gc: gc 0x653a1b38d9d0: deleting -1711462110.389774 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b38d9d0, 110cd0d:56a27910:57318171:e03) -1711462110.389791 [0] gc: gc 0x653a1b39ea10: deleting -1711462110.389795 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b39ea10, 110cd0d:56a27910:57318171:c03) -1711462110.389800 [0] gc: gc 0x653a1b2a04e0: deleting -1711462110.389805 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b2a04e0, 110cd0d:56a27910:57318171:a03) -1711462110.389813 [0] gc: gc 0x653a1b466af0: deleting -1711462110.389819 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b466af0, 110cd0d:56a27910:57318171:803) -1711462110.389806 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b38e4e0, 110cd0d:56a27910:57318171:1203) -1711462110.389825 [0] gc: gc 0x653a1b3f7c50: deleting -1711462110.389844 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b3f7c50, 110cd0d:56a27910:57318171:703) -1711462110.389850 [0] gc: gc 0x653a1b495ff0: deleting -1711462110.389854 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b495ff0, 110cd0d:56a27910:57318171:403) -1711462110.389863 [0] gc: gc 0x653a1b443ed0: deleting -1711462110.389869 [0] gc: gc_delete_proxy_reader (0x653a1b443ed0, 110cd0d:56a27910:57318171:301c4) -1711462110.389876 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=19 -1711462110.389883 [0] gc: gc 0x653a1b31b350: deleting -1711462110.389888 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b31b350, 110cd0d:56a27910:57318171:301c3) -1711462110.389838 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b4586d0, 110cd0d:56a27910:57318171:1003) -1711462110.389895 [0] gc: gc 0x653a1b39e730: deleting -1711462110.389908 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x653a1b31b350, 110cd0d:56a27910:57318171:301c3) -1711462110.389914 [0] gc: gc_delete_proxy_reader (0x653a1b39e730, 110cd0d:56a27910:57318171:300c4) -1711462110.389907 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b38d9d0, 110cd0d:56a27910:57318171:e03) -1711462110.389938 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=18 -1711462110.389955 [0] gc: gc 0x653a1b3e3730: deleting -1711462110.389966 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b3e3730, 110cd0d:56a27910:57318171:300c3) -1711462110.389948 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b39ea10, 110cd0d:56a27910:57318171:c03) -1711462110.389974 [0] gc: gc 0x653a1b3e4130: deleting -1711462110.389981 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x653a1b3e3730, 110cd0d:56a27910:57318171:300c3) -1711462110.389999 [0] gc: gc_delete_proxy_reader (0x653a1b3e4130, 110cd0d:56a27910:57318171:200c7) -1711462110.390006 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=17 -1711462110.389988 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b2a04e0, 110cd0d:56a27910:57318171:a03) -1711462110.390010 [0] gc: gc 0x653a1b3e3c10: deleting -1711462110.390029 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b3e3c10, 110cd0d:56a27910:57318171:200c2) -1711462110.390021 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b466af0, 110cd0d:56a27910:57318171:803) -1711462110.390036 [0] gc: gc 0x653a1b3e4710: deleting -1711462110.390050 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b3f7c50, 110cd0d:56a27910:57318171:703) -1711462110.390053 [0] gc: gc_delete_proxy_reader (0x653a1b3e4710, 110cd0d:56a27910:57318171:4c7) -1711462110.390061 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b495ff0, 110cd0d:56a27910:57318171:403) -1711462110.390076 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=16 -1711462110.390085 [0] gc: gc 0x653a1b48b850: deleting -1711462110.390093 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b48b850, 110cd0d:56a27910:57318171:4c2) -1711462110.390043 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x653a1b3e3c10, 110cd0d:56a27910:57318171:200c2) -1711462110.390098 [0] gc: gc 0x653a1b458330: deleting -1711462110.390113 [0] gc: gc_delete_proxy_reader (0x653a1b458330, 110cd0d:56a27910:57318171:3c7) -1711462110.390108 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x653a1b48b850, 110cd0d:56a27910:57318171:4c2) -1711462110.390119 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=15 -1711462110.390132 [0] gc: gc 0x653a1b47ab40: deleting -1711462110.390137 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b47ab40, 110cd0d:56a27910:57318171:3c2) -1711462110.390143 [0] gc: gc 0x653a1b46acd0: deleting -1711462110.390146 [0] gc: gc_delete_proxy_reader (0x653a1b46acd0, 110cd0d:56a27910:57318171:100c7) -1711462110.390149 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x653a1b47ab40, 110cd0d:56a27910:57318171:3c2) -1711462110.390151 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=14 -1711462110.390165 [0] gc: gc 0x653a1b39bcc0: deleting -1711462110.390171 [0] gc: gc_delete_proxy_participant(0x653a1b39bcc0, 110cd0d:56a27910:57318171:1c1) -1711462110.390176 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=13 -1711462110.390180 [0] gc: gc 0x653a1b2cf300: deleting -1711462110.390184 [0] gc: gc_delete_proxy_reader (0x653a1b2cf300, 110cd0d:e3b81b8d:1ccb65b1:1604) -1711462110.390188 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=29 -1711462110.390194 [0] gc: gc 0x653a1b3e6c30: deleting -1711462110.390198 [0] gc: gc_delete_proxy_reader (0x653a1b3e6c30, 110cd0d:e3b81b8d:1ccb65b1:1504) -1711462110.390202 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=28 -1711462110.390207 [0] gc: gc 0x653a1b3e4ea0: deleting -1711462110.390212 [0] gc: gc_delete_proxy_reader (0x653a1b3e4ea0, 110cd0d:e3b81b8d:1ccb65b1:1404) -1711462110.390216 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=27 -1711462110.390222 [0] gc: gc 0x653a1b380160: deleting -1711462110.390226 [0] gc: gc_delete_proxy_reader (0x653a1b380160, 110cd0d:e3b81b8d:1ccb65b1:1304) -1711462110.390230 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=26 -1711462110.390235 [0] gc: gc 0x653a1b484110: deleting -1711462110.390240 [0] gc: gc_delete_proxy_reader (0x653a1b484110, 110cd0d:e3b81b8d:1ccb65b1:1104) -1711462110.390243 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=25 -1711462110.390249 [0] gc: gc 0x653a1b39c050: deleting -1711462110.390254 [0] gc: gc_delete_proxy_reader (0x653a1b39c050, 110cd0d:e3b81b8d:1ccb65b1:f04) -1711462110.390260 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=24 -1711462110.390265 [0] gc: gc 0x653a1b459ab0: deleting -1711462110.390269 [0] gc: gc_delete_proxy_reader (0x653a1b459ab0, 110cd0d:e3b81b8d:1ccb65b1:d04) -1711462110.390272 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=23 -1711462110.390277 [0] gc: gc 0x653a1b455f00: deleting -1711462110.390281 [0] gc: gc_delete_proxy_reader (0x653a1b455f00, 110cd0d:e3b81b8d:1ccb65b1:b04) -1711462110.390285 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=22 -1711462110.390289 [0] gc: gc 0x653a1b45a150: deleting -1711462110.390293 [0] gc: gc_delete_proxy_reader (0x653a1b45a150, 110cd0d:e3b81b8d:1ccb65b1:904) -1711462110.390297 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=21 -1711462110.390302 [0] gc: gc 0x653a1b47e890: deleting -1711462110.390307 [0] gc: gc 0x653a1b316060: deleting -1711462110.390311 [0] gc: gc_delete_proxy_reader (0x653a1b316060, 110cd0d:e3b81b8d:1ccb65b1:504) -1711462110.390315 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=20 -1711462110.390320 [0] gc: gc 0x653a1b454930: deleting -1711462110.390324 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b454930, 110cd0d:e3b81b8d:1ccb65b1:1203) -1711462110.390329 [0] gc: gc 0x653a1b454b60: deleting -1711462110.390333 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b454b60, 110cd0d:e3b81b8d:1ccb65b1:1003) -1711462110.390336 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b454930, 110cd0d:e3b81b8d:1ccb65b1:1203) -1711462110.390337 [0] gc: gc 0x653a1b45a730: deleting -1711462110.390353 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b45a730, 110cd0d:e3b81b8d:1ccb65b1:e03) -1711462110.390360 [0] gc: gc 0x653a1b45a960: deleting -1711462110.390366 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b45a960, 110cd0d:e3b81b8d:1ccb65b1:c03) -1711462110.390372 [0] gc: gc 0x653a1b39d5c0: deleting -1711462110.390347 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b454b60, 110cd0d:e3b81b8d:1ccb65b1:1003) -1711462110.390376 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b39d5c0, 110cd0d:e3b81b8d:1ccb65b1:a03) -1711462110.390392 [0] gc: gc 0x653a1b39d7f0: deleting -1711462110.390398 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b39d7f0, 110cd0d:e3b81b8d:1ccb65b1:803) -1711462110.390386 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b45a730, 110cd0d:e3b81b8d:1ccb65b1:e03) -1711462110.390403 [0] gc: gc 0x653a1b390ea0: deleting -1711462110.390418 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b390ea0, 110cd0d:e3b81b8d:1ccb65b1:703) -1711462110.390424 [0] gc: gc 0x653a1b3910d0: deleting -1711462110.390430 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b3910d0, 110cd0d:e3b81b8d:1ccb65b1:403) -1711462110.390435 [0] gc: gc 0x653a1b3898f0: deleting -1711462110.390442 [0] gc: gc_delete_proxy_reader (0x653a1b3898f0, 110cd0d:e3b81b8d:1ccb65b1:301c4) -1711462110.390412 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b45a960, 110cd0d:e3b81b8d:1ccb65b1:c03) -1711462110.390447 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=19 -1711462110.390456 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b39d5c0, 110cd0d:e3b81b8d:1ccb65b1:a03) -1711462110.390463 [0] gc: gc 0x653a1b389b20: deleting -1711462110.390476 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b39d7f0, 110cd0d:e3b81b8d:1ccb65b1:803) -1711462110.390478 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b389b20, 110cd0d:e3b81b8d:1ccb65b1:301c3) -1711462110.390485 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b390ea0, 110cd0d:e3b81b8d:1ccb65b1:703) -1711462110.390495 [0] gc: gc 0x653a1b3831a0: deleting -1711462110.390501 [0] gc: gc_delete_proxy_reader (0x653a1b3831a0, 110cd0d:e3b81b8d:1ccb65b1:300c4) -1711462110.390508 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=18 -1711462110.390514 [0] gc: gc 0x653a1b3833d0: deleting -1711462110.390520 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b3833d0, 110cd0d:e3b81b8d:1ccb65b1:300c3) -1711462110.390524 [0] gc: gc 0x653a1b2cb460: deleting -1711462110.390502 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x653a1b389b20, 110cd0d:e3b81b8d:1ccb65b1:301c3) -1711462110.390528 [0] gc: gc_delete_proxy_reader (0x653a1b2cb460, 110cd0d:e3b81b8d:1ccb65b1:200c7) -1711462110.390537 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=17 -1711462110.390543 [0] gc: gc 0x653a1b2cb690: deleting -1711462110.390546 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x653a1b3833d0, 110cd0d:e3b81b8d:1ccb65b1:300c3) -1711462110.390527 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x653a1b3910d0, 110cd0d:e3b81b8d:1ccb65b1:403) -1711462110.390549 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b2cb690, 110cd0d:e3b81b8d:1ccb65b1:200c2) -1711462110.390569 [0] gc: gc 0x653a1b3a0200: deleting -1711462110.390574 [0] gc: gc_delete_proxy_reader (0x653a1b3a0200, 110cd0d:e3b81b8d:1ccb65b1:4c7) -1711462110.390576 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x653a1b2cb690, 110cd0d:e3b81b8d:1ccb65b1:200c2) -1711462110.390578 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=16 -1711462110.390592 [0] gc: gc 0x653a1b3a0430: deleting -1711462110.390597 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b3a0430, 110cd0d:e3b81b8d:1ccb65b1:4c2) -1711462110.390603 [0] gc: gc 0x653a1b45b310: deleting -1711462110.390607 [0] gc: gc_delete_proxy_reader (0x653a1b45b310, 110cd0d:e3b81b8d:1ccb65b1:3c7) -1711462110.390609 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x653a1b3a0430, 110cd0d:e3b81b8d:1ccb65b1:4c2) -1711462110.390611 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=15 -1711462110.390625 [0] gc: gc 0x653a1b45b540: deleting -1711462110.390629 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b45b540, 110cd0d:e3b81b8d:1ccb65b1:3c2) -1711462110.390635 [0] gc: gc 0x653a1b3a0710: deleting -1711462110.390639 [0] gc: gc_delete_proxy_reader (0x653a1b3a0710, 110cd0d:e3b81b8d:1ccb65b1:100c7) -1711462110.390642 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x653a1b45b540, 110cd0d:e3b81b8d:1ccb65b1:3c2) -1711462110.390644 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=14 -1711462110.390658 [0] gc: gc 0x653a1b3a0940: deleting -1711462110.390663 [0] gc: gc_delete_proxy_participant(0x653a1b3a0940, 110cd0d:e3b81b8d:1ccb65b1:1c1) -1711462110.390667 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=13 -1711462110.390670 [0] gc: gc 0x653a1b39ee50: deleting -1711462110.390674 [0] gc: gc_delete_proxy_reader (0x653a1b39ee50, 110cd0d:79d6eeac:ea4a8907:1604) -1711462110.390679 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=29 -1711462110.390686 [0] gc: gc 0x653a1b39f080: deleting -1711462110.390690 [0] gc: gc_delete_proxy_reader (0x653a1b39f080, 110cd0d:79d6eeac:ea4a8907:1504) -1711462110.390694 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=28 -1711462110.390700 [0] gc: gc 0x653a1b2c97f0: deleting -1711462110.390703 [0] gc: gc_delete_proxy_reader (0x653a1b2c97f0, 110cd0d:79d6eeac:ea4a8907:1404) -1711462110.390707 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=27 -1711462110.390712 [0] gc: gc 0x653a1b2c9a20: deleting -1711462110.390716 [0] gc: gc_delete_proxy_reader (0x653a1b2c9a20, 110cd0d:79d6eeac:ea4a8907:1304) -1711462110.390720 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=26 -1711462110.390726 [0] gc: gc 0x653a1b2c9c50: deleting -1711462110.390731 [0] gc: gc_delete_proxy_reader (0x653a1b2c9c50, 110cd0d:79d6eeac:ea4a8907:1104) -1711462110.390735 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=25 -1711462110.390740 [0] gc: gc 0x653a1b39f6c0: deleting -1711462110.390745 [0] gc: gc_delete_proxy_reader (0x653a1b39f6c0, 110cd0d:79d6eeac:ea4a8907:f04) -1711462110.390749 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=24 -1711462110.390754 [0] gc: gc 0x653a1b39f8f0: deleting -1711462110.390759 [0] gc: gc_delete_proxy_reader (0x653a1b39f8f0, 110cd0d:79d6eeac:ea4a8907:d04) -1711462110.390764 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=23 -1711462110.390768 [0] gc: gc 0x653a1b39fb20: deleting -1711462110.390773 [0] gc: gc_delete_proxy_reader (0x653a1b39fb20, 110cd0d:79d6eeac:ea4a8907:b04) -1711462110.390777 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=22 -1711462110.390782 [0] gc: gc 0x653a1b45b840: deleting -1711462110.390786 [0] gc: gc_delete_proxy_reader (0x653a1b45b840, 110cd0d:79d6eeac:ea4a8907:904) -1711462110.390790 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=21 -1711462110.390795 [0] gc: gc 0x653a1b45ba70: deleting -1711462110.390798 [0] gc: gc_delete_proxy_reader (0x653a1b45ba70, 110cd0d:79d6eeac:ea4a8907:504) -1711462110.390803 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=20 -1711462110.390808 [0] gc: gc 0x653a1b45bca0: deleting -1711462110.390815 [0] gc: gc_delete_proxy_writer_dqueue(0x653a1b45bca0, 110cd0d:79d6eeac:ea4a8907:1203) -1711462110.390822 [0] gc: gc 0x653a1b4576d0: deleting -1711462110.390828 [0] gc: gc_delete_proxy_writer_dq1711462110.391551 [0] tev: writer_hbcontrol: wr 110e21c:d0762c48:a9f0fb28:403 multicasting (rel-prd 4 seq-eq-max 4 seq 22 maxseq 12) -1711462110.391576 [0] tev: heartbeat(wr 110e21c:d0762c48:a9f0fb28:403) sent, resched in 0.1 s (min-ack 12, avail-seq 22, xmit 22) -1711462110.391588 [0] tev: xpack_addmsg 0x7a832c001390 0x7a8340003220 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462110.391647 [0] tev: nn_xpack_send 52: 0x7a832c00139c:20 0x7a8340003318:32 [ udp/239.255.0.1:7401@2 ] -1711462110.391660 [0] tev: traffic-xmit (1) 52 -1711462110.391648 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.391687 [0] recvMC: HEARTBEAT(#30:22..22 110e21c:d0762c48:a9f0fb28:403? -> 0:0:0:0) -1711462110.391848 [0] recvUC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462110.391861 [0] recvUC: INFODST(110e21c:d0762c48:a9f0fb28) -1711462110.391876 [0] recvUC: ACKNACK(F#5:23/0: L(:1c1 16958.051362) 110d7b4:17c5b8c5:94bd0ff4:504 -> 110e21c:d0762c48:a9f0fb28:403 ACK10 RM0) -1711462110.391924 [0] recvUC: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462110.391931 [0] recvUC: INFODST(110e21c:d0762c48:a9f0fb28) -1711462110.391943 [0] recvUC: ACKNACK(F#6:23/0: L(:1c1 16958.051434) 110cd0d:56a27910:57318171:504 -> 110e21c:d0762c48:a9f0fb28:403 ACK10 RM0) -1711462110.391948 [0] recvUC: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462110.391956 [0] recvUC: ACKNACK(F#20:23/0: L(:1c1 16958.051434) 110cd0d:e3b81b8d:1ccb65b1:504 -> 110e21c:d0762c48:a9f0fb28:403 ACK10 RM0) -1711462110.391962 [0] recvUC: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462110.391970 [0] recvUC: ACKNACK(F#11:23/0: L(:1c1 16958.051434) 110cd0d:79d6eeac:ea4a8907:504 -> 110e21c:d0762c48:a9f0fb28:403remove_acked_messages: deleting lingering writer 110e21c:d0762c48:a9f0fb28:403 -1711462110.391974 [0] recvUC: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:403) ... -1711462110.391981 [0] recvUC: => EVERYONE -1711462110.391997 [0] recvUC: writer_set_state(110e21c:d0762c48:a9f0fb28:403) state transition 2 -> 3 -1711462110.392004 [0] recvUC: ACK10 RM0) -1711462110.392010 [0] gc: gc 0x7a83200031b0: deleting -1711462110.392016 [0] gc: gc_delete_writer(0x7a83200031b0, 110e21c:d0762c48:a9f0fb28:403) -1711462110.392042 [0] gc: write_sample 110e21c:d0762c48:a9f0fb28:3c2 #20: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:403}} -1711462110.392052 [0] gc: non-timed queue now has 1 items -1711462110.392071 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:403 @ 0x57079b0bf814) user 5 builtin 12 -1711462110.392081 [0] tev: xpack_addmsg 0x7a832c001390 0x7a833804c1f0 0(data(110e21c:d0762c48:a9f0fb28:3c2:#20/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.392105 [0] python3: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:504) ... -1711462110.392121 [0] python3: => EVERYONE -1711462110.392146 [0] tev: nn_xpack_send 96: 0x7a832c00139c:20 0x7a833804bd58:48 0x7a8340002fe4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.392157 [0] tev: traffic-xmit (1) 96 -1711462110.392159 [0] gc: gc 0x57079b1c1ea0: not yet, shortsleep -1711462110.392169 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.392184 [0] recv: INFOTS(1711462110.392032273) -1711462110.392204 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #20 110e21c:d0762c48:a9f0fb28:3c2? -> 0:0:0:0) -1711462110.392416 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.392422 [0] recv: INFOTS(1711462110.384844509) -1711462110.392429 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #2) -1711462110.392452 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.392454 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110443d:bb7f10a5:18901533:1c1}} -1711462110.392479 [0] recv: INFOTS(1711462110.384844509) -1711462110.392491 [0] dq.builtin: SPDP ST3 110443d:bb7f10a5:18901533:1c1ddsi_delete_proxy_participant_by_guid(110443d:bb7f10a5:18901533:1c1) - deleting -1711462110.392493 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #2) -1711462110.392519 [0] dq.builtin: => EVERYONE -1711462110.392535 [0] dq.builtin: delete_ppt(110443d:bb7f10a5:18901533:1c1) - deleting dependent proxy participants -1711462110.392546 [0] dq.builtin: delete_ppt(110443d:bb7f10a5:18901533:1c1) - deleting endpoints -1711462110.392560 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:301c4) - deleting -1711462110.392576 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:301c3) - deleting -1711462110.392588 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:300c4) - deleting -1711462110.392598 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:300c3) - deleting -1711462110.392611 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:200c7) - deleting -1711462110.392623 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:200c2) - deleting -1711462110.392633 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:4c7) - deleting -1711462110.392644 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:4c2) - deleting -1711462110.392656 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:3c7) - deleting -1711462110.392666 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:3c2) - deleting -1711462110.392679 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:100c7) - deleting -1711462110.392687 [0] dq.builtin: delete -1711462110.392703 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110443d:bb7f10a5:18901533:1c1}} -1711462110.392712 [0] dq.builtin: SPDP ST3 110443d:bb7f10a5:18901533:1c1 unknown not allowed -1711462110.393236 [0] gc: gc 0x57079b1c1ea0: deleting -1711462110.393242 [0] gc: gc_delete_reader(0x57079b1c1ea0, 110e21c:d0762c48:a9f0fb28:504) -1711462110.393250 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:504, 3): reader no longer exists -1711462110.393257 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:504, 3): reader no longer exists -1711462110.393263 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:504, 4): reader no longer exists -1711462110.393268 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:504, 8): reader no longer exists -1711462110.393279 [0] gc: write_sample 110e21c:d0762c48:a9f0fb28:4c2 #16: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:504}} -1711462110.393287 [0] gc: non-timed queue now has 1 items -1711462110.393305 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:504 @ 0x57079b0b5964) user 4 builtin 12 -1711462110.393309 [0] gc: gc 0x7a8338019a10: deleting -1711462110.393314 [0] gc: gc_delete_proxy_reader (0x7a8338019a10, 110443d:bb7f10a5:18901533:301c4) -1711462110.393315 [0] tev: xpack_addmsg 0x7a832c001390 0x7a833804cdc0 0(data(110e21c:d0762c48:a9f0fb28:4c2:#16/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.393330 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7414@2 -1711462110.393335 [0] gc: reduced nlocs=3 -1711462110.393341 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393348 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.393356 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393367 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393380 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.393358 [0] tev: nn_xpack_send 96: 0x7a832c00139c:20 0x7a83380250e8:48 0x7a8338024b44:28 [ udp/239.255.0.1:7400@2 ] -1711462110.393389 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.393376 [0] python3: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:107) ... -1711462110.393409 [0] python3: => EVERYONE -1711462110.393400 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393411 [0] recv: INFOTS(1711462110.393273698) -1711462110.393433 [0] tev: traffic-xmit (1) 96 -1711462110.393426 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393434 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #16 110e21c:d0762c48:a9f0fb28:4c2? -> 0:0:0:0) -1711462110.393457 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.393471 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393475 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393480 [0] gc: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.393484 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393491 [0] gc: a b c d -1711462110.393523 [0] tev: writer_hbcontrol: wr 110e21c:d0762c48:a9f0fb28:4c2 multicasting (rel-prd 5 seq-eq-max 4 seq 16 maxseq 15) -1711462110.393567 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. } -1711462110.393606 [0] tev: heartbeat(wr 110e21c:d0762c48:a9f0fb28:4c2) sent, resched in 0.1 s (min-ack 15, avail-seq 16, xmit 16) -1711462110.393609 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462110.393617 [0] tev: xpack_addmsg 0x7a832c001390 0x7a833804cdc0 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462110.393626 [0] gc: loc 2 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462110.393641 [0] gc: best = 2 -1711462110.393646 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.393660 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.393695 [0] gc: ddsi_rebuild_writer_addrset(110e21c:d0762c48:a9f0fb28:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.393663 [0] tev: nn_xpack_send 52: 0x7a832c00139c:20 0x7a83380250e8:32 [ udp/239.255.0.1:7400@2 ] -1711462110.393730 [0] tev: traffic-xmit (1) 52 -1711462110.393721 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=11 -1711462110.393719 [0] recv: HEARTBEAT(#11:16..16 110e21c:d0762c48:a9f0fb28:4c2? -> 0:0:0:0) -1711462110.393756 [0] gc: gc 0x7a833803ba00: deleting -1711462110.393771 [0] gc: gc_delete_proxy_writer_dqueue(0x7a833803ba00, 110443d:bb7f10a5:18901533:301c3) -1711462110.393777 [0] gc: gc 0x7a833804e9d0: deleting -1711462110.393781 [0] gc: gc_delete_proxy_reader (0x7a833804e9d0, 110443d:bb7f10a5:18901533:300c4) -1711462110.393786 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7a833803ba00, 110443d:bb7f10a5:18901533:301c3) -1711462110.393792 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7414@2 -1711462110.393805 [0] gc: reduced nlocs=3 -1711462110.393811 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393818 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.393832 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393836 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393841 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.393846 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393852 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393860 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.393846 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462110.393866 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393883 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393891 [0] gc: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.393900 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393877 [0] recv: INFODST(110e21c:d0762c48:a9f0fb28) -1711462110.393913 [0] gc: a b c d -1711462110.393937 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. } -1711462110.393938 [0] recv: ACKNACK(F#5:17/0: L(:1c1 16958.053378) 110d7b4:17c5b8c5:94bd0ff4:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2 ACK1 RM0) -1711462110.393946 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462110.393964 [0] gc: loc 2 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462110.393974 [0] gc: best = 2 -1711462110.393980 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.393989 [0] gc: ddsi_rebuild_writer_addrset(110e21c:d0762c48:a9f0fb28:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.393993 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=10 -1711462110.393999 [0] gc: gc 0x7a833804df70: deleting -1711462110.394004 [0] gc: gc_delete_proxy_writer_dqueue(0x7a833804df70, 110443d:bb7f10a5:18901533:300c3) -1711462110.394011 [0] gc: gc 0x7a833804d510: deleting -1711462110.394018 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7a833804df70, 110443d:bb7f10a5:18901533:300c3) -1711462110.394021 [0] gc: gc_delete_proxy_reader (0x7a833804d510, 110443d:bb7f10a5:18901533:200c7) -1711462110.394044 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7414@2 -1711462110.394050 [0] gc: reduced nlocs=3 -1711462110.394059 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394065 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394072 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394079 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394088 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394100 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394088 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462110.394104 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394124 [0] recv: INFODST(110e21c:d0762c48:a9f0fb28) -1711462110.394128 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394144 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394149 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394157 [0] gc: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.394165 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394149 [0] recv: ACKNACK(F#5:17/0: L(:1c1 16958.053624) 110cd0d:56a27910:57318171:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2 ACK1 RM0) -1711462110.394172 [0] gc: a b c d -1711462110.394182 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462110.394190 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. } -1711462110.394208 [0] recv: ACKNACK(F#13:17/0: L(:1c1 16958.053624) 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2 ACK1 RM0) -1711462110.394209 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462110.394226 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462110.394239 [0] gc: loc 2 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462110.394250 [0] recv: ACKNACK(F#8:17/0: L(:1c1 16958.053624) 110cd0d:79d6eeac:ea4a8907:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2 ACK1 RM1) -1711462110.394251 [0] gc: best = 2 -1711462110.394270 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394278 [0] gc: ddsi_rebuild_writer_addrset(110e21c:d0762c48:a9f0fb28:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394288 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=9 -1711462110.394292 [0] gc: gc 0x7a833804cab0: deleting -1711462110.394298 [0] gc: gc_delete_proxy_writer_dqueue(0x7a833804cab0, 110443d:bb7f10a5:18901533:200c2) -1711462110.394303 [0] gc: gc 0x7a833804bea0: deleting -1711462110.394308 [0] gc: gc_delete_proxy_reader (0x7a833804bea0, 110443d:bb7f10a5:18901533:4c7) -1711462110.394314 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7a833804cab0, 110443d:bb7f10a5:18901533:200c2) -1711462110.394321 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7414@2 -1711462110.394334 [0] gc: reduced nlocs=3 -1711462110.394339 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394346 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394352 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394356 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394365 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394370 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394374 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394382 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394389 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394393 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394399 [0] gc: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.394405 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394412 [0] gc: a b c d -1711462110.394421 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. } -1711462110.394428 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462110.394436 [0] gc: loc 2 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462110.394441 [0] gc: best = 2 -1711462110.394448 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394458 [0] gc: ddsi_rebuild_writer_addrset(110e21c:d0762c48:a9f0fb28:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394464 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=8 -1711462110.394468 [0] gc: gc 0x7a833804b5c0: deleting -1711462110.394473 [0] gc: gc_delete_proxy_writer_dqueue(0x7a833804b5c0, 110443d:bb7f10a5:18901533:4c2) -1711462110.394482 [0] gc: gc 0x7a83380718f0: deleting -1711462110.394486 [0] gc: gc_delete_proxy_reader (0x7a83380718f0, 110443d:bb7f10a5:18901533:3c7) -1711462110.394495 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7a833804b5c0, 110443d:bb7f10a5:18901533:4c2) -1711462110.394498 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7414@2 -1711462110.394514 [0] gc: reduced nlocs=3 -1711462110.394519 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394530 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394537 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394542 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394550 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394555 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394559 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394564 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394570 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394577 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394583 [0] gc: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.394588 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394599 [0] gc: a b c d -1711462110.394610 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. } -1711462110.394619 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462110.394628 [0] gc: loc 2 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462110.394633 [0] gc: best = 2 -1711462110.394640 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394652 [0] gc: ddsi_rebuild_writer_addrset(110e21c:d0762c48:a9f0fb28:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394657 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=7 -1711462110.394665 [0] gc: gc 0x7a8338066650: deleting -1711462110.394669 [0] gc: gc_delete_proxy_writer_dqueue(0x7a8338066650, 110443d:bb7f10a5:18901533:3c2) -1711462110.394674 [0] gc: gc 0x7a8338055590: deleting -1711462110.394684 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7a8338066650, 110443d:bb7f10a5:18901533:3c2) -1711462110.394685 [0] gc: gc_delete_proxy_reader (0x7a8338055590, 110443d:bb7f10a5:18901533:100c7) -1711462110.394702 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=6 -1711462110.394707 [0] gc: gc 0x7a8338073cf0: deleting -1711462110.394711 [0] gc: gc_delete_proxy_participant(0x7a8338073cf0, 110443d:bb7f10a5:18901533:1c1) -1711462110.394718 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=5 -1711462110.394723 [0] gc: gc 0x7a833000d280: deleting -1711462110.394728 [0] gc: gc_delete_reader(0x7a833000d280, 110e21c:d0762c48:a9f0fb28:107) -1711462110.394738 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:107 @ 0x57079b070714) user 3 builtin 12 -1711462110.394745 [0] gc: gc 0x7a833803ba00: deleting -1711462110.394749 [0] gc: gc_delete_proxy_writer (0x7a833803ba00, 110443d:bb7f10a5:18901533:301c3) -1711462110.394757 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:301c4, 3): 3 -> 3 -1711462110.394765 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=4 -1711462110.394770 [0] gc: gc 0x7a833804df70: deleting -1711462110.394777 [0] gc: gc_delete_proxy_writer (0x7a833804df70, 110443d:bb7f10a5:18901533:300c3) -1711462110.394771 [0] python3: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:307) ... -1711462110.394787 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:300c4, 3): 3 -> 3 -1711462110.394804 [0] python3: => EVERYONE -1711462110.394807 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=3 -1711462110.394825 [0] gc: gc 0x7a833804cab0: deleting -1711462110.394829 [0] gc: gc_delete_proxy_writer (0x7a833804cab0, 110443d:bb7f10a5:18901533:200c2) -1711462110.394836 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:200c7, 6): 6 -> 6 -1711462110.394846 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=2 -1711462110.394852 [0] gc: gc 0x7a833804b5c0: deleting -1711462110.394856 [0] gc: gc_delete_proxy_writer (0x7a833804b5c0, 110443d:bb7f10a5:18901533:4c2) -1711462110.394862 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:4c7, 5): 5 -> 5 -1711462110.394870 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=1 -1711462110.394876 [0] gc: gc 0x7a8338066650: deleting -1711462110.394881 [0] gc: gc_delete_proxy_writer (0x7a8338066650, 110443d:bb7f10a5:18901533:3c2) -1711462110.394888 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:3c7, 6): 6 -> 6 -1711462110.394894 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=0, freeing -1711462110.394903 [0] gc: lease_unregister(l 0x7a8338036100 guid 110443d:bb7f10a5:18901533:1c1) -1711462110.394910 [0] gc: lease_free(l 0x7a8338036100 guid 110443d:bb7f10a5:18901533:1c1) -1711462110.394919 [0] gc: lease_free(l 0x7a8338036080 guid 110443d:bb7f10a5:18901533:1c1) -1711462110.394927 [0] gc: ddsi_remove_deleted_participant_guid(110443d:bb7f10a5:18901533:1c1 for_what=3) -1711462110.394932 [0] gc: gc 0x57079aaf1c00: deleting -1711462110.394937 [0] gc: gc 0x57079b1c1ea0: deleting -1711462110.394942 [0] gc: gc_delete_reader(0x57079b1c1ea0, 110e21c:d0762c48:a9f0fb28:307) -1711462110.394951 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:307 @ 0x57079b114fb4) user 2 builtin 12 -1711462110.394955 [0] gc: gc 0x7a833807dcb0: deleting -1711462110.394960 [0] gc: gc 0x7a8338013760: deleting -1711462110.394967 [0] gc: gc 0x57079b1b0b40: not yet, shortsleep -1711462110.395045 [0] python3: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:207) ... -1711462110.395058 [0] python3: => EVERYONE -1711462110.395423 [0] tev: writer_hbcontrol: wr 110e21c:d0762c48:a9f0fb28:3c2 multicasting (rel-prd 4 seq-eq-max 4 seq 20 maxseq 19) -1711462110.395556 [0] tev: heartbeat(wr 110e21c:d0762c48:a9f0fb28:3c2) sent, resched in 0.1 s (min-ack 19, avail-seq 20, xmit 20) -1711462110.395565 [0] tev: xpack_addmsg 0x7a832c001390 0x7a833804cdc0 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462110.395597 [0] tev: nn_xpack_send 52: 0x7a832c00139c:20 0x7a83380250e8:32 [ udp/239.255.0.1:7400@2 ] -1711462110.395609 [0] tev: traffic-xmit (1) 52 -1711462110.395601 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.395630 [0] recv: HEARTBEAT(#11:20..20 110e21c:d0762c48:a9f0fb28:3c2? -> 0:0:0:0) -1711462110.395731 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462110.395739 [0] recv: INFODST(110e21c:d0762c48:a9f0fb28) -1711462110.395753 [0] recv: ACKNACK(F#5:21/0: L(:1c1 16958.055241) 110d7b4:17c5b8c5:94bd0ff4:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2 ACK1 RM0) -1711462110.395915 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462110.395923 [0] recv: INFODST(110e21c:d0762c48:a9f0fb28) -1711462110.395935 [0] recv: ACKNACK(F#5:21/0: L(:1c1 16958.055426) 110cd0d:56a27910:57318171:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2 ACK1 RM0) -1711462110.395941 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462110.395951 [0] recv: ACKNACK(F#15:21/0: L(:1c1 16958.055426) 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2 ACK1 RM0) -1711462110.395958 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462110.395971 [0] recv: ACKNACK(F#9:21/0: L(:1c1 16958.055426) 110cd0d:79d6eeac:ea4a8907:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2 ACK1 RM1) -1711462110.396044 [0] gc: gc 0x57079b1b0b40: deleting -1711462110.396062 [0] gc: gc 0x57079b036af0: deleting -1711462110.396078 [0] gc: gc 0x57079b196c50: deleting -1711462110.396085 [0] gc: gc 0x57079abe50e0: deleting -1711462110.396090 [0] gc: gc 0x57079b18d360: deleting -1711462110.396094 [0] gc: gc 0x57079b1928e0: deleting -1711462110.396100 [0] gc: gc 0x57079b12cae0: deleting -1711462110.396104 [0] gc: gc 0x57079b13e610: deleting -1711462110.396112 [0] gc: gc 0x57079b17b8f0: deleting -1711462110.396117 [0] gc: gc 0x57079b136cd0: deleting -1711462110.396122 [0] gc: gc 0x57079b19e880: deleting -1711462110.396128 [0] gc: gc 0x57079ac6b4c0: deleting -1711462110.396132 [0] gc: gc 0x57079aac0ae0: deleting -1711462110.396137 [0] gc: gc 0x57079ab12e10: deleting -1711462110.396141 [0] gc: gc 0x57079ab4f2e0: deleting -1711462110.396145 [0] gc: gc 0x57079ab4b370: deleting -1711462110.396152 [0] gc: gc 0x57079aac1e10: deleting -1711462110.396157 [0] gc: gc 0x57079aabd660: deleting -1711462110.396161 [0] gc: gc 0x57079ab544e0: deleting -1711462110.396166 [0] gc: gc 0x57079ac22c30: deleting -1711462110.396170 [0] gc: gc 0x57079abec600: deleting -1711462110.396175 [0] gc: gc 0x57079ac3b6e0: deleting -1711462110.396181 [0] gc: gc 0x57079abf1850: deleting -1711462110.396185 [0] gc: gc 0x57079abfb210: deleting -1711462110.396189 [0] gc: gc 0x57079ac009d0: deleting -1711462110.396193 [0] gc: gc 0x57079ad216e0: deleting -1711462110.396198 [0] gc: gc 0x57079b0bcd80: deleting -1711462110.396203 [0] gc: gc 0x57079aee5fa0: deleting -1711462110.396206 [0] gc: gc 0x57079af8db80: deleting -1711462110.396211 [0] gc: gc 0x57079b0b7d90: deleting -1711462110.396217 [0] gc: gc 0x57079b0b5d00: deleting -1711462110.396222 [0] gc: gc 0x57079b099170: deleting -1711462110.396226 [0] gc: gc 0x57079b0b7030: deleting -1711462110.396230 [0] gc: gc 0x57079b0b6d10: deleting -1711462110.396233 [0] gc: gc 0x57079b0b0070: deleting -1711462110.396237 [0] gc: gc 0x57079b0c74c0: deleting -1711462110.396241 [0] gc: gc 0x57079b0a9240: deleting -1711462110.396244 [0] gc: gc 0x57079b0638a0: deleting -1711462110.396248 [0] gc: gc 0x57079b0c5960: deleting -1711462110.396252 [0] gc: gc 0x57079b082a00: deleting -1711462110.396255 [0] gc: gc 0x57079b0c3380: deleting -1711462110.396259 [0] gc: gc 0x57079b069900: deleting -1711462110.396263 [0] gc: gc 0x57079b069d30: deleting -1711462110.396269 [0] gc: gc 0x57079b0cf4a0: deleting -1711462110.396272 [0] gc: gc 0x57079b0c5570: deleting -1711462110.396276 [0] gc: gc 0x57079b08ed60: deleting -1711462110.396280 [0] gc: gc 0x57079b07b4e0: deleting -1711462110.396284 [0] gc: gc 0x57079b0cf020: deleting -1711462110.396288 [0] gc: gc_delete_reader(0x57079b0cf020, 110e21c:d0762c48:a9f0fb28:207) -1711462110.396297 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:207 @ 0x57079b0c1aa4) user 1 builtin 12 -1711462110.396348 [0] gc: gc 0x57079b0d1fb0: not yet, shortsleep -1711462110.396415 [0] python3: ddsi_delete_participant (110e21c:d0762c48:a9f0fb28:1c1) -1711462110.396425 [0] python3: => EVERYONE -1711462110.396442 [0] python3: trigger_recv_threads: 0 many 0x57079b0c23b0 -1711462110.396461 [0] python3: trigger_recv_threads: 1 single udp/239.255.0.1:7401 -1711462110.396486 [0] recv: done -1711462110.396518 [0] python3: trigger_recv_threads: 2 single udp/10.101.12.71:7413 -1711462110.396507 [0] recvMC: done -1711462110.396577 [0] recvUC: done -1711462110.396714 [0] python3: ddsi_delete_proxy_participant_by_guid(110cd0d:56a27910:57318171:1c1) - deleting -1711462110.396729 [0] python3: => EVERYONE -1711462110.396739 [0] python3: delete_ppt(110cd0d:56a27910:57318171:1c1) - deleting dependent proxy participants -1711462110.396749 [0] python3: delete_ppt(110cd0d:56a27910:57318171:1c1) - deleting endpoints -1711462110.396757 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1604) => EVERYONE -1711462110.396765 [0] python3: - deleting -1711462110.396773 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1504) => EVERYONE -1711462110.396780 [0] python3: - deleting -1711462110.396787 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1404) => EVERYONE -1711462110.396794 [0] python3: - deleting -1711462110.396803 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1304) => EVERYONE -1711462110.396810 [0] python3: - deleting -1711462110.396817 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1104) => EVERYONE -1711462110.396823 [0] python3: - deleting -1711462110.396831 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:f04) => EVERYONE -1711462110.396838 [0] python3: - deleting -1711462110.396845 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:d04) => EVERYONE -1711462110.396853 [0] python3: - deleting -1711462110.396861 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:b04) => EVERYONE -1711462110.396867 [0] python3: - deleting -1711462110.396875 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:904) => EVERYONE -1711462110.396882 [0] python3: - deleting -1711462110.396889 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:504) => EVERYONE -1711462110.396896 [0] python3: - deleting -1711462110.396902 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:1203) - deleting -1711462110.396909 [0] python3: => EVERYONE -1711462110.396918 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:1003) - deleting -1711462110.396924 [0] python3: => EVERYONE -1711462110.396933 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:e03) - deleting -1711462110.396939 [0] python3: => EVERYONE -1711462110.396947 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:c03) - deleting -1711462110.396953 [0] python3: => EVERYONE -1711462110.396961 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:a03) - deleting -1711462110.396968 [0] python3: => EVERYONE -1711462110.396977 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:803) - deleting -1711462110.396983 [0] python3: => EVERYONE -1711462110.396994 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:703) - deleting -1711462110.397000 [0] python3: => EVERYONE -1711462110.397010 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:403) - deleting -1711462110.397019 [0] python3: => EVERYONE -1711462110.397030 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:301c4) - deleting -1711462110.397043 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:301c3) - deleting -1711462110.397053 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:300c4) - deleting -1711462110.397063 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:300c3) - deleting -1711462110.397074 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:200c7) - deleting -1711462110.397085 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:200c2) - deleting -1711462110.397097 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:4c7) - deleting -1711462110.397108 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:4c2) - deleting -1711462110.397117 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:3c7) - deleting -1711462110.397127 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:3c2) - deleting -1711462110.397136 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:100c7) - deleting -1711462110.397145 [0] python3: ddsi_delete_proxy_participant_by_guid(110cd0d:e3b81b8d:1ccb65b1:1c1) - deleting -1711462110.397151 [0] python3: => EVERYONE -1711462110.397159 [0] python3: delete_ppt(110cd0d:e3b81b8d:1ccb65b1:1c1) - deleting dependent proxy participants -1711462110.397167 [0] python3: delete_ppt(110cd0d:e3b81b8d:1ccb65b1:1c1) - deleting endpoints -1711462110.397174 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1604) => EVERYONE -1711462110.397182 [0] python3: - deleting -1711462110.397190 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1504) => EVERYONE -1711462110.397197 [0] python3: - deleting -1711462110.397205 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1404) => EVERYONE -1711462110.397212 [0] python3: - deleting -1711462110.397220 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1304) => EVERYONE -1711462110.397226 [0] python3: - deleting -1711462110.397234 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1104) => EVERYONE -1711462110.397241 [0] python3: - deleting -1711462110.397249 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:f04) => EVERYONE -1711462110.397256 [0] python3: - deleting -1711462110.397264 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:d04) => EVERYONE -1711462110.397272 [0] python3: - deleting -1711462110.397280 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:b04) => EVERYONE -1711462110.397286 [0] python3: - deleting -1711462110.397294 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:904) => EVERYONE -1711462110.397301 [0] python3: - deleting -1711462110.397309 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:504) => EVERYONE -1711462110.397316 [0] python3: - deleting -1711462110.397323 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:1203) - deleting -1711462110.397329 [0] python3: => EVERYONE -1711462110.397338 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:1003) - deleting -1711462110.397345 [0] python3: => EVERYONE -1711462110.397354 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:e03) - deleting -1711462110.397360 [0] python3: => EVERYONE -1711462110.397369 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:c03) - deleting -1711462110.397375 [0] python3: => EVERYONE -1711462110.397383 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:a03) - deleting -1711462110.397389 [0] python3: => EVERYONE -1711462110.397398 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:803) - deleting -1711462110.397404 [0] python3: => EVERYONE -1711462110.397413 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:703) - deleting -1711462110.397420 [0] python3: => EVERYONE -1711462110.397426 [0] gc: gc 0x57079b0d1fb0: deleting -1711462110.397429 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:403) - deleting -1711462110.397448 [0] gc: gc 0x57079b0d83e0: deleting -1711462110.397454 [0] gc: gc 0x57079b0d1c90: deleting -1711462110.397460 [0] gc: gc 0x57079b0d8140: deleting -1711462110.397466 [0] gc: gc 0x57079b0df1a0: deleting -1711462110.397470 [0] gc: gc 0x57079b0ef820: deleting -1711462110.397475 [0] gc: gc 0x57079b0b4fe0: deleting -1711462110.397480 [0] gc: gc 0x57079b023580: deleting -1711462110.397484 [0] gc: gc 0x57079b09b390: deleting -1711462110.397490 [0] gc: gc 0x57079b09cff0: deleting -1711462110.397474 [0] python3: => EVERYONE -1711462110.397495 [0] gc: gc 0x57079b07fe90: deleting -1711462110.397511 [0] gc: gc 0x57079b1018e0: deleting -1711462110.397513 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:301c4) - deleting -1711462110.397515 [0] gc: gc 0x57079b122900: deleting -1711462110.397527 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:301c3) - deleting -1711462110.397529 [0] gc: gc 0x57079b070ec0: deleting -1711462110.397542 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:300c4) - deleting -1711462110.397544 [0] gc: gc 0x57079b1225e0: deleting -1711462110.397562 [0] gc: gc 0x57079b094f50: deleting -1711462110.397554 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:300c3) - deleting -1711462110.397567 [0] gc: gc 0x57079b17c500: deleting -1711462110.397581 [0] gc: gc 0x57079b0b36e0: deleting -1711462110.397588 [0] gc: gc 0x57079b0fb550: deleting -1711462110.397580 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:200c7) - deleting -1711462110.397592 [0] gc: gc 0x57079b128510: deleting -1711462110.397605 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:200c2) - deleting -1711462110.397607 [0] gc: gc 0x57079b0e8810: deleting -1711462110.397620 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:4c7) - deleting -1711462110.397622 [0] gc: gc 0x57079b0e47b0: deleting -1711462110.397633 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:4c2) - deleting -1711462110.397636 [0] gc: gc 0x57079b06dfc0: deleting -1711462110.397647 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:3c7) - deleting -1711462110.397649 [0] gc: gc 0x57079b110d00: deleting -1711462110.397660 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:3c2) - deleting -1711462110.397663 [0] gc: gc 0x57079b169860: deleting -1711462110.397675 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:100c7) - deleting -1711462110.397676 [0] gc: gc 0x57079b10d910: deleting -1711462110.397687 [0] python3: ddsi_delete_proxy_participant_by_guid(110cd0d:79d6eeac:ea4a8907:1c1) - deleting -1711462110.397691 [0] gc: gc 0x57079b0f2b00: deleting -1711462110.397705 [0] gc: gc 0x57079b0eed30: deleting -1711462110.397698 [0] python3: => EVERYONE -1711462110.397709 [0] gc: gc 0x57079b17a790: deleting -1711462110.397721 [0] python3: delete_ppt(110cd0d:79d6eeac:ea4a8907:1c1) - deleting dependent proxy participants -1711462110.397724 [0] gc: gc 0x57079b0ede60: deleting -1711462110.397738 [0] gc: gc 0x57079b168e30: deleting -1711462110.397732 [0] python3: delete_ppt(110cd0d:79d6eeac:ea4a8907:1c1) - deleting endpoints -1711462110.397742 [0] gc: gc 0x57079b103270: deleting -1711462110.397759 [0] gc: gc 0x57079b188db0: deleting -1711462110.397753 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1604) => EVERYONE -1711462110.397764 [0] gc: gc 0x57079b1817c0: deleting -1711462110.397779 [0] gc: gc 0x57079b203ae0: deleting -1711462110.397773 [0] python3: - deleting -1711462110.397783 [0] gc: gc 0x57079b1fe9f0: deleting -1711462110.397796 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1504) => EVERYONE -1711462110.397799 [0] gc: gc 0x57079b100f50: deleting -1711462110.397814 [0] gc: gc 0x57079b15ca40: deleting -1711462110.397818 [0] gc: gc 0x57079b1b2a90: deleting -1711462110.397824 [0] gc: gc 0x57079b0c01c0: deleting -1711462110.397807 [0] python3: - deleting -1711462110.397828 [0] gc: gc 0x57079abe50e0: deleting -1711462110.397841 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1404) => EVERYONE -1711462110.397842 [0] gc: gc 0x57079b18d360: deleting -1711462110.397858 [0] gc: gc 0x57079b1928e0: deleting -1711462110.397864 [0] gc: gc 0x57079b12cae0: deleting -1711462110.397870 [0] gc: gc 0x57079b13e610: deleting -1711462110.397851 [0] python3: - deleting -1711462110.397875 [0] gc: gc 0x57079b0bd430: deleting -1711462110.397888 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1304) => EVERYONE -1711462110.397889 [0] gc: gc_delete_participant (0x57079b0bd430, 110e21c:d0762c48:a9f0fb28:1c1) -1711462110.397898 [0] python3: - deleting -1711462110.397908 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 0:0:0:0 @ (nil)) user 0 builtin 12 -1711462110.397915 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1104) => EVERYONE -1711462110.397924 [0] python3: - deleting -1711462110.397927 [0] gc: write_sample 110e21c:d0762c48:a9f0fb28:100c2 #2: ST3 DCPSParticipant/ParticipantBuiltinTopicData:{participant_guid={110e21c:d0762c48:a9f0fb28:1c1}} -1711462110.397933 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:f04) => EVERYONE -1711462110.397938 [0] gc: non-timed queue now has 1 items -1711462110.397941 [0] python3: - deleting -1711462110.397943 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:100c2) ... -1711462110.397961 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:100c2) ... -1711462110.397952 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:d04) => EVERYONE -1711462110.397971 [0] gc: writer_set_state(110e21c:d0762c48:a9f0fb28:100c2) state transition 0 -> 3 -1711462110.397988 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:3c2) ... -1711462110.397993 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:3c2) ... -1711462110.397981 [0] python3: - deleting -1711462110.397999 [0] gc: writer_set_state(110e21c:d0762c48:a9f0fb28:3c2) state transition 0 -> 3 -1711462110.398010 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:b04) => EVERYONE -1711462110.398012 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:4c2) ... -1711462110.398027 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:4c2) ... -1711462110.398034 [0] gc: writer_set_state(110e21c:d0762c48:a9f0fb28:4c2) state transition 0 -> 3 -1711462110.398039 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:200c2) ... -1711462110.398045 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:200c2) ... -1711462110.398020 [0] python3: - deleting -1711462110.398050 [0] gc: writer_set_state(110e21c:d0762c48:a9f0fb28:200c2) state transition 0 -> 3 -1711462110.398061 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:904) => EVERYONE -1711462110.398063 [0] gc: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:100c7) ... -1711462110.398072 [0] python3: - deleting -1711462110.398081 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:2c2) - unknown guid -1711462110.398095 [0] gc: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:2c7) - unknown guid -1711462110.398101 [0] gc: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:3c7) ... -1711462110.398095 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:504) => EVERYONE -1711462110.398107 [0] gc: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:4c7) ... -1711462110.398125 [0] gc: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:200c7) ... -1711462110.398133 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:300c3) ... -1711462110.398117 [0] python3: - deleting -1711462110.398136 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:300c3) ... -1711462110.398148 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:1203) - deleting -1711462110.398153 [0] gc: writer_set_state(110e21c:d0762c48:a9f0fb28:300c3) state transition 0 -> 3 -1711462110.398167 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:301c3) ... -1711462110.398172 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:301c3) ... -1711462110.398159 [0] python3: => EVERYONE -1711462110.398177 [0] gc: writer_set_state(110e21c:d0762c48:a9f0fb28:301c3) state transition 0 -> 3 -1711462110.398190 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:1003) - deleting -1711462110.398191 [0] gc: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:300c4) ... -1711462110.398200 [0] python3: => EVERYONE -1711462110.398209 [0] gc: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:301c4) ... -1711462110.398213 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:ff0003c2) - unknown guid -1711462110.398218 [0] gc: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:ff0003c7) - unknown guid -1711462110.398226 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:ff0004c2) - unknown guid -1711462110.398229 [0] gc: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:ff0004c7) - unknown guid -1711462110.398235 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:ff0200c2) - unknown guid -1711462110.398219 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:e03) - deleting -1711462110.398239 [0] gc: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:ff0200c7) - unknown guid -1711462110.398254 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:201c3) - unknown guid -1711462110.398248 [0] python3: => EVERYONE -1711462110.398259 [0] gc: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:201c4) - unknown guid -1711462110.398271 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:c03) - deleting -1711462110.398273 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:ff0101c2) - unknown guid -1711462110.398288 [0] gc: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:ff0101c7) - unknown guid -1711462110.398293 [0] gc: ddsi_delete_writer_nolinger(guid 110e21c:d0762c48:a9f0fb28:ff0202c3) - unknown guid -1711462110.398281 [0] python3: => EVERYONE -1711462110.398297 [0] gc: delete_reader_guid(guid 110e21c:d0762c48:a9f0fb28:ff0202c4) - unknown guid -1711462110.398309 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:a03) - deleting -1711462110.398312 [0] gc: gc 0x57079b0bcfd0: not yet, shortsleep -1711462110.398319 [0] python3: => EVERYONE -1711462110.398336 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:803) - deleting -1711462110.398344 [0] python3: => EVERYONE -1711462110.398353 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:703) - deleting -1711462110.398359 [0] python3: => EVERYONE -1711462110.398367 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:403) - deleting -1711462110.398373 [0] python3: => EVERYONE -1711462110.398382 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:301c4) - deleting -1711462110.398392 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:301c3) - deleting -1711462110.398401 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:300c4) - deleting -1711462110.398409 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:300c3) - deleting -1711462110.398420 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:200c7) - deleting -1711462110.398428 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:200c2) - deleting -1711462110.398437 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:4c7) - deleting -1711462110.398445 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:4c2) - deleting -1711462110.398453 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:3c7) - deleting -1711462110.398461 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:3c2) - deleting -1711462110.398469 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:100c7) - deleting -1711462110.398477 [0] python3: ddsi_delete_proxy_participant_by_guid(110d7b4:17c5b8c5:94bd0ff4:1c1) - deleting -1711462110.398483 [0] python3: => EVERYONE -1711462110.398491 [0] python3: delete_ppt(110d7b4:17c5b8c5:94bd0ff4:1c1) - deleting dependent proxy participants -1711462110.398498 [0] python3: delete_ppt(110d7b4:17c5b8c5:94bd0ff4:1c1) - deleting endpoints -1711462110.398505 [0] python3: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:504) => EVERYONE -1711462110.398511 [0] python3: - deleting -1711462110.398519 [0] python3: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:403) - deleting -1711462110.398525 [0] python3: => EVERYONE -1711462110.398533 [0] python3: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:301c4) - deleting -1711462110.398541 [0] python3: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:301c3) - deleting -1711462110.398549 [0] python3: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:300c4) - deleting -1711462110.398557 [0] python3: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:300c3) - deleting -1711462110.398565 [0] python3: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:200c7) - deleting -1711462110.398572 [0] python3: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:200c2) - deleting -1711462110.398581 [0] python3: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4c7) - deleting -1711462110.398588 [0] python3: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4c2) - deleting -1711462110.398596 [0] python3: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3c7) - deleting -1711462110.398603 [0] python3: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3c2) - deleting -1711462110.398611 [0] python3: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:100c7) - deleting -1711462110.399397 [0] gc: gc 0x57079b0bcfd0: deleting -1711462110.399414 [0] gc: gc_delete_proxy_reader (0x57079b0bcfd0, 110cd0d:56a27910:57318171:1604) -1711462110.399419 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=29 -1711462110.399426 [0] gc: gc 0x57079b0bd200: deleting -1711462110.399429 [0] gc: gc_delete_proxy_reader (0x57079b0bd200, 110cd0d:56a27910:57318171:1504) -1711462110.399433 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=28 -1711462110.399439 [0] gc: gc 0x57079b17b8f0: deleting -1711462110.399443 [0] gc: gc_delete_proxy_reader (0x57079b17b8f0, 110cd0d:56a27910:57318171:1404) -1711462110.399446 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=27 -1711462110.399452 [0] gc: gc 0x57079b136cd0: deleting -1711462110.399455 [0] gc: gc_delete_proxy_reader (0x57079b136cd0, 110cd0d:56a27910:57318171:1304) -1711462110.399459 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=26 -1711462110.399464 [0] gc: gc 0x57079b19e880: deleting -1711462110.399468 [0] gc: gc_delete_proxy_reader (0x57079b19e880, 110cd0d:56a27910:57318171:1104) -1711462110.399472 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=25 -1711462110.399477 [0] gc: gc 0x57079ac6b4c0: deleting -1711462110.399481 [0] gc: gc_delete_proxy_reader (0x57079ac6b4c0, 110cd0d:56a27910:57318171:f04) -1711462110.399484 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=24 -1711462110.399491 [0] gc: gc 0x57079aac0ae0: deleting -1711462110.399495 [0] gc: gc_delete_proxy_reader (0x57079aac0ae0, 110cd0d:56a27910:57318171:d04) -1711462110.399499 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=23 -1711462110.399505 [0] gc: gc 0x57079ab12e10: deleting -1711462110.399508 [0] gc: gc_delete_proxy_reader (0x57079ab12e10, 110cd0d:56a27910:57318171:b04) -1711462110.399512 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=22 -1711462110.399517 [0] gc: gc 0x57079ab4f2e0: deleting -1711462110.399521 [0] gc: gc_delete_proxy_reader (0x57079ab4f2e0, 110cd0d:56a27910:57318171:904) -1711462110.399525 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=21 -1711462110.399530 [0] gc: gc 0x57079ab4b370: deleting -1711462110.399534 [0] gc: gc_delete_proxy_reader (0x57079ab4b370, 110cd0d:56a27910:57318171:504) -1711462110.399538 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=20 -1711462110.399543 [0] gc: gc 0x57079aac1e10: deleting -1711462110.399547 [0] gc: gc_delete_proxy_writer_dqueue(0x57079aac1e10, 110cd0d:56a27910:57318171:1203) -1711462110.399554 [0] gc: gc 0x57079aabd660: deleting -1711462110.399558 [0] gc: gc_delete_proxy_writer_dqueue(0x57079aabd660, 110cd0d:56a27910:57318171:1003) -1711462110.399562 [0] gc: gc 0x57079ab544e0: deleting -1711462110.399566 [0] gc: gc_delete_proxy_writer_dqueue(0x57079ab544e0, 110cd0d:56a27910:57318171:e03) -1711462110.399569 [0] gc: gc 0x57079ac22c30: deleting -1711462110.399573 [0] gc: gc_delete_proxy_writer_dqueue(0x57079ac22c30, 110cd0d:56a27910:57318171:c03) -1711462110.399579 [0] gc: gc 0x57079abec600: deleting -1711462110.399584 [0] gc: gc_delete_proxy_writer_dqueue(0x57079abec600, 110cd0d:56a27910:57318171:a03) -1711462110.399587 [0] gc: gc 0x57079ac3b6e0: deleting -1711462110.399591 [0] gc: gc_delete_proxy_writer_dqueue(0x57079ac3b6e0, 110cd0d:56a27910:57318171:803) -1711462110.399595 [0] gc: gc 0x57079abf1850: deleting -1711462110.399599 [0] gc: gc_delete_proxy_writer_dqueue(0x57079abf1850, 110cd0d:56a27910:57318171:703) -1711462110.399598 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079aac1e10, 110cd0d:56a27910:57318171:1203) -1711462110.399603 [0] gc: gc 0x57079abfb210: deleting -1711462110.399615 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079aabd660, 110cd0d:56a27910:57318171:1003) -1711462110.399623 [0] gc: gc_delete_proxy_writer_dqueue(0x57079abfb210, 110cd0d:56a27910:57318171:403) -1711462110.399629 [0] gc: gc 0x57079ac009d0: deleting -1711462110.399633 [0] gc: gc_delete_proxy_reader (0x57079ac009d0, 110cd0d:56a27910:57318171:301c4) -1711462110.399636 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079ab544e0, 110cd0d:56a27910:57318171:e03) -1711462110.399638 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=19 -1711462110.399643 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079ac22c30, 110cd0d:56a27910:57318171:c03) -1711462110.399651 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079abec600, 110cd0d:56a27910:57318171:a03) -1711462110.399657 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079ac3b6e0, 110cd0d:56a27910:57318171:803) -1711462110.399661 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079abf1850, 110cd0d:56a27910:57318171:703) -1711462110.399664 [0] gc: gc 0x57079ad216e0: deleting -1711462110.399670 [0] gc: gc_delete_proxy_writer_dqueue(0x57079ad216e0, 110cd0d:56a27910:57318171:301c3) -1711462110.399666 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079abfb210, 110cd0d:56a27910:57318171:403) -1711462110.399677 [0] gc: gc 0x57079b0bcd80: deleting -1711462110.399689 [0] gc: gc_delete_proxy_reader (0x57079b0bcd80, 110cd0d:56a27910:57318171:300c4) -1711462110.399694 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=18 -1711462110.399700 [0] gc: gc 0x57079aee5fa0: deleting -1711462110.399703 [0] gc: gc_delete_proxy_writer_dqueue(0x57079aee5fa0, 110cd0d:56a27910:57318171:300c3) -1711462110.399708 [0] gc: gc 0x57079af8db80: deleting -1711462110.399711 [0] gc: gc_delete_proxy_reader (0x57079af8db80, 110cd0d:56a27910:57318171:200c7) -1711462110.399715 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=17 -1711462110.399715 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079ad216e0, 110cd0d:56a27910:57318171:301c3) -1711462110.399720 [0] gc: gc 0x57079b0b7d90: deleting -1711462110.399756 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079aee5fa0, 110cd0d:56a27910:57318171:300c3) -1711462110.399757 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b0b7d90, 110cd0d:56a27910:57318171:200c2) -1711462110.399776 [0] gc: gc 0x57079b0b5d00: deleting -1711462110.399780 [0] gc: gc_delete_proxy_reader (0x57079b0b5d00, 110cd0d:56a27910:57318171:4c7) -1711462110.399784 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=16 -1711462110.399789 [0] gc: gc 0x57079b099170: deleting -1711462110.399791 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b0b7d90, 110cd0d:56a27910:57318171:200c2) -1711462110.399793 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b099170, 110cd0d:56a27910:57318171:4c2) -1711462110.399810 [0] gc: gc 0x57079b0b7030: deleting -1711462110.399813 [0] gc: gc_delete_proxy_reader (0x57079b0b7030, 110cd0d:56a27910:57318171:3c7) -1711462110.399818 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=15 -1711462110.399824 [0] gc: gc 0x57079b0b6d10: deleting -1711462110.399817 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b099170, 110cd0d:56a27910:57318171:4c2) -1711462110.399828 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b0b6d10, 110cd0d:56a27910:57318171:3c2) -1711462110.399844 [0] gc: gc 0x57079b0b0070: deleting -1711462110.399848 [0] gc: gc_delete_proxy_reader (0x57079b0b0070, 110cd0d:56a27910:57318171:100c7) -1711462110.399851 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b0b6d10, 110cd0d:56a27910:57318171:3c2) -1711462110.399852 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=14 -1711462110.399867 [0] gc: gc 0x57079b0c74c0: deleting -1711462110.399871 [0] gc: gc_delete_proxy_participant(0x57079b0c74c0, 110cd0d:56a27910:57318171:1c1) -1711462110.399875 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=13 -1711462110.399879 [0] gc: gc 0x57079b0a9240: deleting -1711462110.399883 [0] gc: gc_delete_proxy_reader (0x57079b0a9240, 110cd0d:e3b81b8d:1ccb65b1:1604) -1711462110.399888 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=29 -1711462110.399893 [0] gc: gc 0x57079b0638a0: deleting -1711462110.399897 [0] gc: gc_delete_proxy_reader (0x57079b0638a0, 110cd0d:e3b81b8d:1ccb65b1:1504) -1711462110.399901 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=28 -1711462110.399906 [0] gc: gc 0x57079b0c5960: deleting -1711462110.399910 [0] gc: gc_delete_proxy_reader (0x57079b0c5960, 110cd0d:e3b81b8d:1ccb65b1:1404) -1711462110.399913 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=27 -1711462110.399918 [0] gc: gc 0x57079b082a00: deleting -1711462110.399922 [0] gc: gc_delete_proxy_reader (0x57079b082a00, 110cd0d:e3b81b8d:1ccb65b1:1304) -1711462110.399926 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=26 -1711462110.399931 [0] gc: gc 0x57079b0c3380: deleting -1711462110.399935 [0] gc: gc_delete_proxy_reader (0x57079b0c3380, 110cd0d:e3b81b8d:1ccb65b1:1104) -1711462110.399939 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=25 -1711462110.399945 [0] gc: gc 0x57079b069900: deleting -1711462110.399949 [0] gc: gc_delete_proxy_reader (0x57079b069900, 110cd0d:e3b81b8d:1ccb65b1:f04) -1711462110.399952 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=24 -1711462110.399957 [0] gc: gc 0x57079b0cf4a0: deleting -1711462110.399961 [0] gc: gc_delete_proxy_reader (0x57079b0cf4a0, 110cd0d:e3b81b8d:1ccb65b1:d04) -1711462110.399965 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=23 -1711462110.399970 [0] gc: gc 0x57079b0c5570: deleting -1711462110.399974 [0] gc: gc_delete_proxy_reader (0x57079b0c5570, 110cd0d:e3b81b8d:1ccb65b1:b04) -1711462110.399977 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=22 -1711462110.399983 [0] gc: gc 0x57079b08ed60: deleting -1711462110.399987 [0] gc: gc_delete_proxy_reader (0x57079b08ed60, 110cd0d:e3b81b8d:1ccb65b1:904) -1711462110.399991 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=21 -1711462110.399996 [0] gc: gc 0x57079b07b4e0: deleting -1711462110.400000 [0] gc: gc_delete_proxy_reader (0x57079b07b4e0, 110cd0d:e3b81b8d:1ccb65b1:504) -1711462110.400003 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=20 -1711462110.400008 [0] gc: gc 0x57079b0cf020: deleting -1711462110.400012 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b0cf020, 110cd0d:e3b81b8d:1ccb65b1:1203) -1711462110.400018 [0] gc: gc 0x57079b183b70: deleting -1711462110.400022 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b183b70, 110cd0d:e3b81b8d:1ccb65b1:1003) -1711462110.400026 [0] gc: gc 0x57079b2089b0: deleting -1711462110.400029 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b2089b0, 110cd0d:e3b81b8d:1ccb65b1:e03) -1711462110.400033 [0] gc: gc 0x57079b205de0: deleting -1711462110.400035 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b0cf020, 110cd0d:e3b81b8d:1ccb65b1:1203) -1711462110.400037 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b205de0, 110cd0d:e3b81b8d:1ccb65b1:c03) -1711462110.400056 [0] gc: gc 0x57079b201610: deleting -1711462110.400062 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b201610, 110cd0d:e3b81b8d:1ccb65b1:a03) -1711462110.400067 [0] gc: gc 0x57079b200930: deleting -1711462110.400055 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b183b70, 110cd0d:e3b81b8d:1ccb65b1:1003) -1711462110.400072 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b200930, 110cd0d:e3b81b8d:1ccb65b1:803) -1711462110.400077 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b2089b0, 110cd0d:e3b81b8d:1ccb65b1:e03) -1711462110.400085 [0] gc: gc 0x57079b1fc2c0: deleting -1711462110.400090 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b1fc2c0, 110cd0d:e3b81b8d:1ccb65b1:703) -1711462110.400096 [0] gc: gc 0x57079b0d1fb0: deleting -1711462110.400101 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b0d1fb0, 110cd0d:e3b81b8d:1ccb65b1:403) -1711462110.400106 [0] gc: gc 0x57079b0d83e0: deleting -1711462110.400111 [0] gc: gc_delete_proxy_reader (0x57079b0d83e0, 110cd0d:e3b81b8d:1ccb65b1:301c4) -1711462110.400117 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=19 -1711462110.400123 [0] gc: gc 0x57079b0d1c90: deleting -1711462110.400128 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b0d1c90, 110cd0d:e3b81b8d:1ccb65b1:301c3) -1711462110.400134 [0] gc: gc 0x57079b0d8140: deleting -1711462110.400137 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b205de0, 110cd0d:e3b81b8d:1ccb65b1:c03) -1711462110.400142 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b0d1c90, 110cd0d:e3b81b8d:1ccb65b1:301c3) -1711462110.400144 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b201610, 110cd0d:e3b81b8d:1ccb65b1:a03) -1711462110.400138 [0] gc: gc_delete_proxy_reader (0x57079b0d8140, 110cd0d:e3b81b8d:1ccb65b1:300c4) -1711462110.400160 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b200930, 110cd0d:e3b81b8d:1ccb65b1:803) -1711462110.400165 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=18 -1711462110.400175 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b1fc2c0, 110cd0d:e3b81b8d:1ccb65b1:703) -1711462110.400181 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b0d1fb0, 110cd0d:e3b81b8d:1ccb65b1:403) -1711462110.400192 [0] gc: gc 0x57079b0df1a0: deleting -1711462110.400197 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b0df1a0, 110cd0d:e3b81b8d:1ccb65b1:300c3) -1711462110.400202 [0] gc: gc 0x57079b0ef820: deleting -1711462110.400206 [0] gc: gc_delete_proxy_reader (0x57079b0ef820, 110cd0d:e3b81b8d:1ccb65b1:200c7) -1711462110.400210 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=17 -1711462110.400216 [0] gc: gc 0x57079b0b4fe0: deleting -1711462110.400220 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b0b4fe0, 110cd0d:e3b81b8d:1ccb65b1:200c2) -1711462110.400210 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b0df1a0, 110cd0d:e3b81b8d:1ccb65b1:300c3) -1711462110.400225 [0] gc: gc 0x57079b023580: deleting -1711462110.400241 [0] gc: gc_delete_proxy_reader (0x57079b023580, 110cd0d:e3b81b8d:1ccb65b1:4c7) -1711462110.400235 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b0b4fe0, 110cd0d:e3b81b8d:1ccb65b1:200c2) -1711462110.400246 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=16 -1711462110.400261 [0] gc: gc 0x57079b09b390: deleting -1711462110.400265 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b09b390, 110cd0d:e3b81b8d:1ccb65b1:4c2) -1711462110.400270 [0] gc: gc 0x57079b09cff0: deleting -1711462110.400274 [0] gc: gc_delete_proxy_reader (0x57079b09cff0, 110cd0d:e3b81b8d:1ccb65b1:3c7) -1711462110.400277 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b09b390, 110cd0d:e3b81b8d:1ccb65b1:4c2) -1711462110.400278 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=15 -1711462110.400292 [0] gc: gc 0x57079b1018e0: deleting -1711462110.400296 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b1018e0, 110cd0d:e3b81b8d:1ccb65b1:3c2) -1711462110.400301 [0] gc: gc 0x57079b122900: deleting -1711462110.400305 [0] gc: gc_delete_proxy_reader (0x57079b122900, 110cd0d:e3b81b8d:1ccb65b1:100c7) -1711462110.400308 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b1018e0, 110cd0d:e3b81b8d:1ccb65b1:3c2) -1711462110.400309 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=14 -1711462110.400325 [0] gc: gc 0x57079b070ec0: deleting -1711462110.400329 [0] gc: gc_delete_proxy_participant(0x57079b070ec0, 110cd0d:e3b81b8d:1ccb65b1:1c1) -1711462110.400333 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=13 -1711462110.400337 [0] gc: gc 0x57079b1225e0: deleting -1711462110.400340 [0] gc: gc_delete_proxy_reader (0x57079b1225e0, 110cd0d:79d6eeac:ea4a8907:1604) -1711462110.400345 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=29 -1711462110.400350 [0] gc: gc 0x57079b094f50: deleting -1711462110.400354 [0] gc: gc_delete_proxy_reader (0x57079b094f50, 110cd0d:79d6eeac:ea4a8907:1504) -1711462110.400358 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=28 -1711462110.400363 [0] gc: gc 0x57079b17c500: deleting -1711462110.400367 [0] gc: gc_delete_proxy_reader (0x57079b17c500, 110cd0d:79d6eeac:ea4a8907:1404) -1711462110.400370 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=27 -1711462110.400375 [0] gc: gc 0x57079b0bd430: deleting -1711462110.400379 [0] gc: gc_delete_proxy_reader (0x57079b0bd430, 110cd0d:79d6eeac:ea4a8907:1304) -1711462110.400383 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=26 -1711462110.400388 [0] gc: gc 0x57079b0b36e0: deleting -1711462110.400393 [0] gc: gc_delete_proxy_reader (0x57079b0b36e0, 110cd0d:79d6eeac:ea4a8907:1104) -1711462110.400397 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=25 -1711462110.400402 [0] gc: gc 0x57079b0fb550: deleting -1711462110.400406 [0] gc: gc_delete_proxy_reader (0x57079b0fb550, 110cd0d:79d6eeac:ea4a8907:f04) -1711462110.400410 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=24 -1711462110.400414 [0] gc: gc 0x57079b1c1ea0: deleting -1711462110.400418 [0] gc: gc_delete_writer(0x57079b1c1ea0, 110e21c:d0762c48:a9f0fb28:100c2) -1711462110.400427 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:100c2 @ 0x57079b1147c4) user 0 builtin 11 -1711462110.400431 [0] gc: gc 0x57079b128510: deleting -1711462110.400435 [0] gc: gc_delete_proxy_reader (0x57079b128510, 110cd0d:79d6eeac:ea4a8907:d04) -1711462110.400439 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=23 -1711462110.400445 [0] gc: gc 0x57079aaf1c00: deleting -1711462110.400449 [0] gc: gc_delete_writer(0x57079aaf1c00, 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.400459 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:3c2 @ 0x57079b126a44) user 0 builtin 10 -1711462110.400463 [0] gc: gc 0x7a833800f9b0: deleting -1711462110.400466 [0] gc: gc_delete_writer(0x7a833800f9b0, 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.400475 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:4c2 @ 0x57079b1264f4) user 0 builtin 9 -1711462110.400479 [0] gc: gc 0x57079b0e8810: deleting -1711462110.400482 [0] gc: gc_delete_proxy_reader (0x57079b0e8810, 110cd0d:79d6eeac:ea4a8907:b04) -1711462110.400487 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=22 -1711462110.400492 [0] gc: gc 0x7a833800b200: deleting -1711462110.400507 [0] gc: gc_delete_writer(0x7a833800b200, 110e21c:d0762c48:a9f0fb28:200c2) -1711462110.400526 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:200c2 @ 0x57079b127024) user 0 builtin 8 -1711462110.400530 [0] gc: gc 0x7a8338006ae0: deleting -1711462110.400534 [0] gc: gc_delete_reader(0x7a8338006ae0, 110e21c:d0762c48:a9f0fb28:100c7) -1711462110.400540 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:100c7 @ 0x57079b026f94) user 0 builtin 7 -1711462110.400544 [0] gc: gc 0x57079b0e47b0: deleting -1711462110.400548 [0] gc: gc_delete_proxy_reader (0x57079b0e47b0, 110cd0d:79d6eeac:ea4a8907:904) -1711462110.400552 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=21 -1711462110.400557 [0] gc: gc 0x7a8338005430: deleting -1711462110.400560 [0] gc: gc_delete_reader(0x7a8338005430, 110e21c:d0762c48:a9f0fb28:3c7) -1711462110.400567 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:3c7 @ 0x57079ae13da4) user 0 builtin 6 -1711462110.400571 [0] gc: gc 0x57079b1143b0: deleting -1711462110.400575 [0] gc: gc_delete_reader(0x57079b1143b0, 110e21c:d0762c48:a9f0fb28:4c7) -1711462110.400582 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:4c7 @ 0x57079ac95bd4) user 0 builtin 5 -1711462110.400586 [0] gc: gc 0x7a83400033a0: deleting -1711462110.400589 [0] gc: gc_delete_reader(0x7a83400033a0, 110e21c:d0762c48:a9f0fb28:200c7) -1711462110.400595 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:200c7 @ 0x57079acfde94) user 0 builtin 4 -1711462110.400599 [0] gc: gc 0x57079b06dfc0: deleting -1711462110.400603 [0] gc: gc_delete_proxy_reader (0x57079b06dfc0, 110cd0d:79d6eeac:ea4a8907:504) -1711462110.400608 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=20 -1711462110.400613 [0] gc: gc 0x7a83400035d0: deleting -1711462110.400616 [0] gc: gc_delete_writer(0x7a83400035d0, 110e21c:d0762c48:a9f0fb28:300c3) -1711462110.400624 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:300c3 @ 0x57079b127614) user 0 builtin 3 -1711462110.400628 [0] gc: gc 0x57079b110d00: deleting -1711462110.400632 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b110d00, 110cd0d:79d6eeac:ea4a8907:1203) -1711462110.400638 [0] gc: gc 0x7a8340003800: deleting -1711462110.400642 [0] gc: gc_delete_writer(0x7a8340003800, 110e21c:d0762c48:a9f0fb28:301c3) -1711462110.400653 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:301c3 @ 0x57079b127bf4) user 0 builtin 2 -1711462110.400656 [0] gc: gc 0x7a8340003a30: deleting -1711462110.400660 [0] gc: gc_delete_reader(0x7a8340003a30, 110e21c:d0762c48:a9f0fb28:300c4) -1711462110.400658 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b110d00, 110cd0d:79d6eeac:ea4a8907:1203) -1711462110.400668 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:300c4 @ 0x57079ae262f4) user 0 builtin 1 -1711462110.400691 [0] gc: gc 0x7a8340003c60: deleting -1711462110.400695 [0] gc: gc_delete_reader(0x7a8340003c60, 110e21c:d0762c48:a9f0fb28:301c4) -1711462110.400701 [0] gc: ddsi_unref_participant(110e21c:d0762c48:a9f0fb28:1c1 @ 0x57079ac6b340 <- 110e21c:d0762c48:a9f0fb28:301c4 @ 0x57079ad7d3a4) user 0 builtin 0 -1711462110.400710 [0] gc: ddsi_remove_deleted_participant_guid(110e21c:d0762c48:a9f0fb28:1c1 for_what=1) -1711462110.400715 [0] gc: gc 0x57079b169860: deleting -1711462110.400718 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b169860, 110cd0d:79d6eeac:ea4a8907:1003) -1711462110.400723 [0] gc: gc 0x57079b10d910: deleting -1711462110.400727 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b10d910, 110cd0d:79d6eeac:ea4a8907:e03) -1711462110.400729 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b169860, 110cd0d:79d6eeac:ea4a8907:1003) -1711462110.400738 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b10d910, 110cd0d:79d6eeac:ea4a8907:e03) -1711462110.400731 [0] gc: gc 0x57079b0f2b00: deleting -1711462110.400750 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b0f2b00, 110cd0d:79d6eeac:ea4a8907:c03) -1711462110.400755 [0] gc: gc 0x57079b0eed30: deleting -1711462110.400759 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b0eed30, 110cd0d:79d6eeac:ea4a8907:a03) -1711462110.400764 [0] gc: gc 0x57079b17a790: deleting -1711462110.400769 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b17a790, 110cd0d:79d6eeac:ea4a8907:803) -1711462110.400774 [0] gc: gc 0x57079b0ede60: deleting -1711462110.400780 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b0ede60, 110cd0d:79d6eeac:ea4a8907:703) -1711462110.400760 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b0f2b00, 110cd0d:79d6eeac:ea4a8907:c03) -1711462110.400783 [0] gc: gc 0x57079b168e30: deleting -1711462110.400797 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b168e30, 110cd0d:79d6eeac:ea4a8907:403) -1711462110.400802 [0] gc: gc 0x57079b103270: deleting -1711462110.400808 [0] gc: gc_delete_proxy_reader (0x57079b103270, 110cd0d:79d6eeac:ea4a8907:301c4) -1711462110.400814 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=19 -1711462110.400820 [0] gc: gc 0x57079b188db0: deleting -1711462110.400825 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b188db0, 110cd0d:79d6eeac:ea4a8907:301c3) -1711462110.400791 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b0eed30, 110cd0d:79d6eeac:ea4a8907:a03) -1711462110.400833 [0] gc: gc 0x57079b1817c0: deleting -1711462110.400841 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b17a790, 110cd0d:79d6eeac:ea4a8907:803) -1711462110.400849 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b0ede60, 110cd0d:79d6eeac:ea4a8907:703) -1711462110.400856 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b168e30, 110cd0d:79d6eeac:ea4a8907:403) -1711462110.400842 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b188db0, 110cd0d:79d6eeac:ea4a8907:301c3) -1711462110.400891 [0] gc: gc_delete_proxy_reader (0x57079b1817c0, 110cd0d:79d6eeac:ea4a8907:300c4) -1711462110.400896 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=18 -1711462110.400901 [0] gc: gc 0x57079b203ae0: deleting -1711462110.400904 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b203ae0, 110cd0d:79d6eeac:ea4a8907:300c3) -1711462110.400910 [0] gc: gc 0x57079b1fe9f0: deleting -1711462110.400913 [0] gc: gc_delete_proxy_reader (0x57079b1fe9f0, 110cd0d:79d6eeac:ea4a8907:200c7) -1711462110.400917 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=17 -1711462110.400917 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b203ae0, 110cd0d:79d6eeac:ea4a8907:300c3) -1711462110.400924 [0] gc: gc 0x57079b100f50: deleting -1711462110.400930 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b100f50, 110cd0d:79d6eeac:ea4a8907:200c2) -1711462110.400933 [0] gc: gc 0x57079b15ca40: deleting -1711462110.400937 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b100f50, 110cd0d:79d6eeac:ea4a8907:200c2) -1711462110.400938 [0] gc: gc_delete_proxy_reader (0x57079b15ca40, 110cd0d:79d6eeac:ea4a8907:4c7) -1711462110.400952 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=16 -1711462110.400958 [0] gc: gc 0x57079b1b2a90: deleting -1711462110.400961 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b1b2a90, 110cd0d:79d6eeac:ea4a8907:4c2) -1711462110.400966 [0] gc: gc 0x57079b0c01c0: deleting -1711462110.400970 [0] gc: gc_delete_proxy_reader (0x57079b0c01c0, 110cd0d:79d6eeac:ea4a8907:3c7) -1711462110.400973 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b1b2a90, 110cd0d:79d6eeac:ea4a8907:4c2) -1711462110.400974 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=15 -1711462110.400990 [0] gc: gc 0x57079abe50e0: deleting -1711462110.400993 [0] gc: gc_delete_proxy_writer_dqueue(0x57079abe50e0, 110cd0d:79d6eeac:ea4a8907:3c2) -1711462110.400998 [0] gc: gc 0x57079b18d360: deleting -1711462110.401002 [0] gc: gc_delete_proxy_reader (0x57079b18d360, 110cd0d:79d6eeac:ea4a8907:100c7) -1711462110.401005 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079abe50e0, 110cd0d:79d6eeac:ea4a8907:3c2) -1711462110.401006 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=14 -1711462110.401022 [0] gc: gc 0x57079b1928e0: deleting -1711462110.401025 [0] gc: gc_delete_proxy_participant(0x57079b1928e0, 110cd0d:79d6eeac:ea4a8907:1c1) -1711462110.401029 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=13 -1711462110.401033 [0] gc: gc 0x57079b12cae0: deleting -1711462110.401037 [0] gc: gc_delete_proxy_reader (0x57079b12cae0, 110d7b4:17c5b8c5:94bd0ff4:504) -1711462110.401041 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=13 -1711462110.401046 [0] gc: gc 0x57079b13e610: deleting -1711462110.401050 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b13e610, 110d7b4:17c5b8c5:94bd0ff4:403) -1711462110.401055 [0] gc: gc 0x57079b1fb6c0: deleting -1711462110.401059 [0] gc: gc_delete_proxy_reader (0x57079b1fb6c0, 110d7b4:17c5b8c5:94bd0ff4:301c4) -1711462110.401065 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=12 -1711462110.401071 [0] gc: gc 0x57079b1aeb00: deleting -1711462110.401060 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x57079b13e610, 110d7b4:17c5b8c5:94bd0ff4:403) -1711462110.401075 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b1aeb00, 110d7b4:17c5b8c5:94bd0ff4:301c3) -1711462110.401090 [0] gc: gc 0x57079b1adfa0: deleting -1711462110.401094 [0] gc: gc_delete_proxy_reader (0x57079b1adfa0, 110d7b4:17c5b8c5:94bd0ff4:300c4) -1711462110.401097 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b1aeb00, 110d7b4:17c5b8c5:94bd0ff4:301c3) -1711462110.401098 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=11 -1711462110.401114 [0] gc: gc 0x57079b1a84f0: deleting -1711462110.401118 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b1a84f0, 110d7b4:17c5b8c5:94bd0ff4:300c3) -1711462110.401123 [0] gc: gc 0x57079b1a7a90: deleting -1711462110.401126 [0] gc: gc_delete_proxy_reader (0x57079b1a7a90, 110d7b4:17c5b8c5:94bd0ff4:200c7) -1711462110.401130 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b1a84f0, 110d7b4:17c5b8c5:94bd0ff4:300c3) -1711462110.401131 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=10 -1711462110.401146 [0] gc: gc 0x57079b1b18f0: deleting -1711462110.401149 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b1b18f0, 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462110.401154 [0] gc: gc 0x57079b19a3e0: deleting -1711462110.401158 [0] gc: gc_delete_proxy_reader (0x57079b19a3e0, 110d7b4:17c5b8c5:94bd0ff4:4c7) -1711462110.401161 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b1b18f0, 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462110.401162 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=9 -1711462110.401178 [0] gc: gc 0x57079b08aff0: deleting -1711462110.401182 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b08aff0, 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462110.401187 [0] gc: gc 0x57079b0aaaa0: deleting -1711462110.401191 [0] gc: gc_delete_proxy_reader (0x57079b0aaaa0, 110d7b4:17c5b8c5:94bd0ff4:3c7) -1711462110.401194 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b08aff0, 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462110.401196 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=8 -1711462110.401211 [0] gc: gc 0x57079b07cd60: deleting -1711462110.401214 [0] gc: gc_delete_proxy_writer_dqueue(0x57079b07cd60, 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462110.401219 [0] gc: gc 0x57079b09a780: deleting -1711462110.401223 [0] gc: gc_delete_proxy_reader (0x57079b09a780, 110d7b4:17c5b8c5:94bd0ff4:100c7) -1711462110.401226 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x57079b07cd60, 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462110.401227 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=7 -1711462110.401242 [0] gc: gc 0x57079b1af970: deleting -1711462110.401246 [0] gc: gc_delete_proxy_participant(0x57079b1af970, 110d7b4:17c5b8c5:94bd0ff4:1c1) -1711462110.401250 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=6 -1711462110.401253 [0] gc: gc 0x57079b0bcfd0: deleting -1711462110.401257 [0] gc: gc 0x57079b0bd200: deleting -1711462110.401261 [0] gc: gc 0x57079b17b8f0: deleting -1711462110.401265 [0] gc: gc 0x57079b136cd0: deleting -1711462110.401269 [0] gc: gc 0x57079b19e880: deleting -1711462110.401272 [0] gc: gc 0x57079ac6b4c0: deleting -1711462110.401277 [0] gc: gc 0x57079aac0ae0: deleting -1711462110.401281 [0] gc: gc 0x57079ab12e10: deleting -1711462110.401284 [0] gc: gc 0x57079ab4f2e0: deleting -1711462110.401288 [0] gc: gc 0x57079ab4b370: deleting -1711462110.401292 [0] gc: gc 0x57079aac1e10: deleting -1711462110.401296 [0] gc: gc_delete_proxy_writer (0x57079aac1e10, 110cd0d:56a27910:57318171:1203) -1711462110.401300 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=12 -1711462110.401306 [0] gc: gc 0x57079aabd660: deleting -1711462110.401310 [0] gc: gc_delete_proxy_writer (0x57079aabd660, 110cd0d:56a27910:57318171:1003) -1711462110.401314 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=11 -1711462110.401320 [0] gc: gc 0x57079ab544e0: deleting -1711462110.401324 [0] gc: gc_delete_proxy_writer (0x57079ab544e0, 110cd0d:56a27910:57318171:e03) -1711462110.401328 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=10 -1711462110.401333 [0] gc: gc 0x57079ac22c30: deleting -1711462110.401337 [0] gc: gc_delete_proxy_writer (0x57079ac22c30, 110cd0d:56a27910:57318171:c03) -1711462110.401341 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=9 -1711462110.401346 [0] gc: gc 0x57079abec600: deleting -1711462110.401350 [0] gc: gc_delete_proxy_writer (0x57079abec600, 110cd0d:56a27910:57318171:a03) -1711462110.401354 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=8 -1711462110.401359 [0] gc: gc 0x57079ac3b6e0: deleting -1711462110.401362 [0] gc: gc_delete_proxy_writer (0x57079ac3b6e0, 110cd0d:56a27910:57318171:803) -1711462110.401367 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=7 -1711462110.401372 [0] gc: gc 0x57079abf1850: deleting -1711462110.401375 [0] gc: gc_delete_proxy_writer (0x57079abf1850, 110cd0d:56a27910:57318171:703) -1711462110.401379 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=6 -1711462110.401384 [0] gc: gc 0x57079abfb210: deleting -1711462110.401388 [0] gc: gc_delete_proxy_writer (0x57079abfb210, 110cd0d:56a27910:57318171:403) -1711462110.401392 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=5 -1711462110.401397 [0] gc: gc 0x57079ad216e0: deleting -1711462110.401401 [0] gc: gc_delete_proxy_writer (0x57079ad216e0, 110cd0d:56a27910:57318171:301c3) -1711462110.401406 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:301c4, 2): reader no longer exists -1711462110.401410 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=4 -1711462110.401414 [0] gc: gc 0x57079aee5fa0: deleting -1711462110.401418 [0] gc: gc_delete_proxy_writer (0x57079aee5fa0, 110cd0d:56a27910:57318171:300c3) -1711462110.401422 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:300c4, 2): reader no longer exists -1711462110.401426 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=3 -1711462110.401431 [0] gc: gc 0x57079b0b7d90: deleting -1711462110.401435 [0] gc: gc_delete_proxy_writer (0x57079b0b7d90, 110cd0d:56a27910:57318171:200c2) -1711462110.401439 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:200c7, 5): reader no longer exists -1711462110.401443 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=2 -1711462110.401447 [0] gc: gc 0x57079b099170: deleting -1711462110.401450 [0] gc: gc_delete_proxy_writer (0x57079b099170, 110cd0d:56a27910:57318171:4c2) -1711462110.401455 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:4c7, 3): reader no longer exists -1711462110.401459 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=1 -1711462110.401463 [0] gc: gc 0x57079b0b6d10: deleting -1711462110.401466 [0] gc: gc_delete_proxy_writer (0x57079b0b6d10, 110cd0d:56a27910:57318171:3c2) -1711462110.401471 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:3c7, 4): reader no longer exists -1711462110.401475 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=0, freeing -1711462110.401479 [0] gc: lease_unregister(l 0x7a8338001c90 guid 110cd0d:56a27910:57318171:1c1) -1711462110.401484 [0] gc: lease_free(l 0x7a8338001c90 guid 110cd0d:56a27910:57318171:1c1) -1711462110.401487 [0] gc: lease_free(l 0x7a8338001c10 guid 110cd0d:56a27910:57318171:1c1) -1711462110.401494 [0] gc: ddsi_remove_deleted_participant_guid(110cd0d:56a27910:57318171:1c1 for_what=3) -1711462110.401500 [0] gc: gc 0x57079b0c74c0: deleting -1711462110.401504 [0] gc: gc 0x57079b0638a0: deleting -1711462110.401508 [0] gc: gc 0x57079b0c5960: deleting -1711462110.401512 [0] gc: gc 0x57079b082a00: deleting -1711462110.401516 [0] gc: gc 0x57079b0c3380: deleting -1711462110.401520 [0] gc: gc 0x57079b069900: deleting -1711462110.401523 [0] gc: gc 0x57079b0cf4a0: deleting -1711462110.401527 [0] gc: gc 0x57079b0c5570: deleting -1711462110.401531 [0] gc: gc 0x57079b08ed60: deleting -1711462110.401534 [0] gc: gc 0x57079b07b4e0: deleting -1711462110.401538 [0] gc: gc 0x57079b0cf020: deleting -1711462110.401542 [0] gc: gc_delete_proxy_writer (0x57079b0cf020, 110cd0d:e3b81b8d:1ccb65b1:1203) -1711462110.401546 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=12 -1711462110.401551 [0] gc: gc 0x57079b183b70: deleting -1711462110.401555 [0] gc: gc_delete_proxy_writer (0x57079b183b70, 110cd0d:e3b81b8d:1ccb65b1:1003) -1711462110.401559 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=11 -1711462110.401564 [0] gc: gc 0x57079b2089b0: deleting -1711462110.401568 [0] gc: gc_delete_proxy_writer (0x57079b2089b0, 110cd0d:e3b81b8d:1ccb65b1:e03) -1711462110.401572 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=10 -1711462110.401577 [0] gc: gc 0x57079b205de0: deleting -1711462110.401581 [0] gc: gc_delete_proxy_writer (0x57079b205de0, 110cd0d:e3b81b8d:1ccb65b1:c03) -1711462110.401585 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=9 -1711462110.401589 [0] gc: gc 0x57079b0d1c90: deleting -1711462110.401593 [0] gc: gc_delete_proxy_writer (0x57079b0d1c90, 110cd0d:e3b81b8d:1ccb65b1:301c3) -1711462110.401597 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:301c4, 2): reader no longer exists -1711462110.401601 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=8 -1711462110.401605 [0] gc: gc 0x57079b201610: deleting -1711462110.401609 [0] gc: gc_delete_proxy_writer (0x57079b201610, 110cd0d:e3b81b8d:1ccb65b1:a03) -1711462110.401613 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=7 -1711462110.401618 [0] gc: gc 0x57079b200930: deleting -1711462110.401622 [0] gc: gc_delete_proxy_writer (0x57079b200930, 110cd0d:e3b81b8d:1ccb65b1:803) -1711462110.401626 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=6 -1711462110.401631 [0] gc: gc 0x57079b1fc2c0: deleting -1711462110.401635 [0] gc: gc_delete_proxy_writer (0x57079b1fc2c0, 110cd0d:e3b81b8d:1ccb65b1:703) -1711462110.401639 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=5 -1711462110.401644 [0] gc: gc 0x57079b0d1fb0: deleting -1711462110.401648 [0] gc: gc_delete_proxy_writer (0x57079b0d1fb0, 110cd0d:e3b81b8d:1ccb65b1:403) -1711462110.401652 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=4 -1711462110.401657 [0] gc: gc 0x57079b0df1a0: deleting -1711462110.401660 [0] gc: gc_delete_proxy_writer (0x57079b0df1a0, 110cd0d:e3b81b8d:1ccb65b1:300c3) -1711462110.401664 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:300c4, 2): reader no longer exists -1711462110.401668 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=3 -1711462110.401673 [0] gc: gc 0x57079b0b4fe0: deleting -1711462110.401676 [0] gc: gc_delete_proxy_writer (0x57079b0b4fe0, 110cd0d:e3b81b8d:1ccb65b1:200c2) -1711462110.401680 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:200c7, 6): reader no longer exists -1711462110.401684 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=2 -1711462110.401688 [0] gc: gc 0x57079b09b390: deleting -1711462110.401693 [0] gc: gc_delete_proxy_writer (0x57079b09b390, 110cd0d:e3b81b8d:1ccb65b1:4c2) -1711462110.401697 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:4c7, 3): reader no longer exists -1711462110.401701 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=1 -1711462110.401705 [0] gc: gc 0x57079b1018e0: deleting -1711462110.401709 [0] gc: gc_delete_proxy_writer (0x57079b1018e0, 110cd0d:e3b81b8d:1ccb65b1:3c2) -1711462110.401713 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:3c7, 3): reader no longer exists -1711462110.401717 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=0, freeing -1711462110.401721 [0] gc: lease_unregister(l 0x7a83380065d0 guid 110cd0d:e3b81b8d:1ccb65b1:1c1) -1711462110.401725 [0] gc: lease_free(l 0x7a83380065d0 guid 110cd0d:e3b81b8d:1ccb65b1:1c1) -1711462110.401729 [0] gc: lease_free(l 0x7a8338006550 guid 110cd0d:e3b81b8d:1ccb65b1:1c1) -1711462110.401734 [0] gc: ddsi_remove_deleted_participant_guid(110cd0d:e3b81b8d:1ccb65b1:1c1 for_what=3) -1711462110.401739 [0] gc: gc 0x57079b0d83e0: deleting -1711462110.401742 [0] gc: gc 0x57079b094f50: deleting -1711462110.401746 [0] gc: gc 0x57079b17c500: deleting -1711462110.401750 [0] gc: gc 0x57079b0bd430: deleting -1711462110.401754 [0] gc: gc 0x57079b0b36e0: deleting -1711462110.401758 [0] gc: gc 0x57079b0fb550: deleting -1711462110.401761 [0] gc: gc 0x57079b1c1ea0: deleting -1711462110.401765 [0] gc: gc 0x57079aaf1c00: deleting -1711462110.401769 [0] gc: gc 0x7a833800b200: deleting -1711462110.401773 [0] gc: gc 0x7a8338005430: deleting -1711462110.401777 [0] gc: gc 0x57079b110d00: deleting -1711462110.401780 [0] gc: gc_delete_proxy_writer (0x57079b110d00, 110cd0d:79d6eeac:ea4a8907:1203) -1711462110.401785 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=12 -1711462110.401790 [0] gc: gc 0x7a83400035d0: deleting -1711462110.401794 [0] gc: gc 0x57079b169860: deleting -1711462110.401798 [0] gc: gc_delete_proxy_writer (0x57079b169860, 110cd0d:79d6eeac:ea4a8907:1003) -1711462110.401802 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=11 -1711462110.401807 [0] gc: gc 0x57079b10d910: deleting -1711462110.401811 [0] gc: gc_delete_proxy_writer (0x57079b10d910, 110cd0d:79d6eeac:ea4a8907:e03) -1711462110.401815 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=10 -1711462110.401820 [0] gc: gc 0x57079b0f2b00: deleting -1711462110.401824 [0] gc: gc_delete_proxy_writer (0x57079b0f2b00, 110cd0d:79d6eeac:ea4a8907:c03) -1711462110.401828 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=9 -1711462110.401833 [0] gc: gc 0x57079b0eed30: deleting -1711462110.401836 [0] gc: gc_delete_proxy_writer (0x57079b0eed30, 110cd0d:79d6eeac:ea4a8907:a03) -1711462110.401840 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=8 -1711462110.401846 [0] gc: gc 0x57079b17a790: deleting -1711462110.401849 [0] gc: gc_delete_proxy_writer (0x57079b17a790, 110cd0d:79d6eeac:ea4a8907:803) -1711462110.401853 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=7 -1711462110.401858 [0] gc: gc 0x57079b0ede60: deleting -1711462110.401862 [0] gc: gc_delete_proxy_writer (0x57079b0ede60, 110cd0d:79d6eeac:ea4a8907:703) -1711462110.401866 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=6 -1711462110.401871 [0] gc: gc 0x57079b168e30: deleting -1711462110.401874 [0] gc: gc_delete_proxy_writer (0x57079b168e30, 110cd0d:79d6eeac:ea4a8907:403) -1711462110.401879 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=5 -1711462110.401884 [0] gc: gc 0x57079b188db0: deleting -1711462110.401887 [0] gc: gc_delete_proxy_writer (0x57079b188db0, 110cd0d:79d6eeac:ea4a8907:301c3) -1711462110.401893 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:301c4, 2): reader no longer exists -1711462110.401897 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=4 -1711462110.401901 [0] gc: gc 0x57079b203ae0: deleting -1711462110.401904 [0] gc: gc_delete_proxy_writer (0x57079b203ae0, 110cd0d:79d6eeac:ea4a8907:300c3) -1711462110.401908 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:300c4, 2): reader no longer exists -1711462110.401912 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=3 -1711462110.401916 [0] gc: gc 0x57079b100f50: deleting -1711462110.401920 [0] gc: gc_delete_proxy_writer (0x57079b100f50, 110cd0d:79d6eeac:ea4a8907:200c2) -1711462110.401924 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:200c7, 6): reader no longer exists -1711462110.401928 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=2 -1711462110.401932 [0] gc: gc 0x57079b1b2a90: deleting -1711462110.401936 [0] gc: gc_delete_proxy_writer (0x57079b1b2a90, 110cd0d:79d6eeac:ea4a8907:4c2) -1711462110.401940 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:4c7, 3): reader no longer exists -1711462110.401944 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=1 -1711462110.401948 [0] gc: gc 0x57079abe50e0: deleting -1711462110.401952 [0] gc: gc_delete_proxy_writer (0x57079abe50e0, 110cd0d:79d6eeac:ea4a8907:3c2) -1711462110.401956 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:3c7, 3): reader no longer exists -1711462110.401960 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=0, freeing -1711462110.401963 [0] gc: lease_unregister(l 0x7a833800b8d0 guid 110cd0d:79d6eeac:ea4a8907:1c1) -1711462110.401967 [0] gc: lease_free(l 0x7a833800b8d0 guid 110cd0d:79d6eeac:ea4a8907:1c1) -1711462110.401971 [0] gc: lease_free(l 0x7a833800b850 guid 110cd0d:79d6eeac:ea4a8907:1c1) -1711462110.401976 [0] gc: ddsi_remove_deleted_participant_guid(110cd0d:79d6eeac:ea4a8907:1c1 for_what=3) -1711462110.401981 [0] gc: gc 0x57079b103270: deleting -1711462110.401985 [0] gc: gc 0x57079b13e610: deleting -1711462110.401989 [0] gc: gc_delete_proxy_writer (0x57079b13e610, 110d7b4:17c5b8c5:94bd0ff4:403) -1711462110.401993 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=5 -1711462110.401998 [0] gc: gc 0x57079b1aeb00: deleting -1711462110.402003 [0] gc: gc_delete_proxy_writer (0x57079b1aeb00, 110d7b4:17c5b8c5:94bd0ff4:301c3) -1711462110.402007 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:301c4, 2): reader no longer exists -1711462110.402011 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=4 -1711462110.402015 [0] gc: gc 0x57079b1a84f0: deleting -1711462110.402019 [0] gc: gc_delete_proxy_writer (0x57079b1a84f0, 110d7b4:17c5b8c5:94bd0ff4:300c3) -1711462110.402023 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:300c4, 2): reader no longer exists -1711462110.402027 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=3 -1711462110.402031 [0] gc: gc 0x57079b1b18f0: deleting -1711462110.402035 [0] gc: gc_delete_proxy_writer (0x57079b1b18f0, 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462110.402039 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:200c7, 5): reader no longer exists -1711462110.402043 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=2 -1711462110.402047 [0] gc: gc 0x57079b08aff0: deleting -1711462110.402050 [0] gc: gc_delete_proxy_writer (0x57079b08aff0, 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462110.402054 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:4c7, 5): reader no longer exists -1711462110.402059 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=1 -1711462110.402063 [0] gc: gc 0x57079b07cd60: deleting -1711462110.402067 [0] gc: gc_delete_proxy_writer (0x57079b07cd60, 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462110.402071 [0] gc: ddsi_update_reader_init_acknack_count (110e21c:d0762c48:a9f0fb28:3c7, 6): reader no longer exists -1711462110.402075 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=0, freeing -1711462110.402079 [0] gc: lease_unregister(l 0x7a833802f8b0 guid 110d7b4:17c5b8c5:94bd0ff4:1c1) -1711462110.402082 [0] gc: lease_free(l 0x7a833802f8b0 guid 110d7b4:17c5b8c5:94bd0ff4:1c1) -1711462110.402086 [0] gc: lease_free(l 0x7a833802f830 guid 110d7b4:17c5b8c5:94bd0ff4:1c1) -1711462110.402091 [0] gc: ddsi_remove_deleted_participant_guid(110d7b4:17c5b8c5:94bd0ff4:1c1 for_what=3) -1711462110.402096 [0] gc: gc 0x57079b1fb6c0: deleting -1711462110.402100 [0] gc: gc 0x57079aabd660: deleting -1711462110.402104 [0] gc: gc 0x57079ab544e0: deleting -1711462110.402108 [0] gc: gc 0x57079ac22c30: deleting -1711462110.402114 [0] gc: gc 0x57079abec600: deleting -1711462110.402118 [0] gc: gc 0x57079ac3b6e0: deleting -1711462110.402122 [0] gc: gc 0x57079abf1850: deleting -1711462110.402126 [0] gc: gc 0x57079abfb210: deleting -1711462110.402130 [0] gc: gc 0x57079ad216e0: deleting -1711462110.402134 [0] gc: gc 0x57079b0b0070: deleting -1711462110.402138 [0] gc: gc 0x57079b0638a0: deleting -1711462110.402142 [0] gc: gc 0x57079b183b70: deleting -1711462110.402146 [0] gc: gc 0x57079b2089b0: deleting -1711462110.402150 [0] gc: gc 0x57079b205de0: deleting -1711462110.402153 [0] gc: gc 0x57079b0d1c90: deleting -1711462110.402157 [0] gc: gc 0x57079b200930: deleting -1711462110.402161 [0] gc: gc 0x57079b1fc2c0: deleting -1711462110.402165 [0] gc: gc 0x57079b0d1fb0: deleting -1711462110.402169 [0] gc: gc 0x57079b0df1a0: deleting -1711462110.402172 [0] gc: gc 0x57079b0c74c0: deleting -1711462110.402176 [0] gc: gc 0x57079b094f50: deleting -1711462110.402180 [0] gc: gc 0x7a83400035d0: deleting -1711462110.402185 [0] gc: gc 0x57079b10d910: deleting -1711462110.402188 [0] gc: gc 0x57079b0f2b00: deleting -1711462110.402192 [0] gc: gc 0x57079b0eed30: deleting -1711462110.402196 [0] gc: gc 0x57079b17a790: deleting -1711462110.402200 [0] gc: gc 0x57079b0ede60: deleting -1711462110.402204 [0] gc: gc 0x57079b168e30: deleting -1711462110.402208 [0] gc: gc 0x57079b188db0: deleting -1711462110.402212 [0] gc: gc 0x57079b0d83e0: deleting -1711462110.402215 [0] gc: gc 0x57079b13e610: deleting -1711462110.402219 [0] gc: gc 0x57079b1aeb00: deleting -1711462110.402225 [0] gc: gc 0x57079b103270: deleting -1711462110.402276 [0] python3: ddsi_delete_writer_nolinger(guid 0:0:0:100c2) ... -1711462110.402307 [0] python3: writer_set_state(0:0:0:100c2) state transition 0 -> 3 -1711462110.402349 [0] python3: ddsi_delete_writer_nolinger(guid 0:0:0:2c2) ... -1711462110.402352 [0] gc: gc 0x57079aaf1c00: not yet, shortsleep -1711462110.402363 [0] python3: writer_set_state(0:0:0:2c2) state transition 0 -> 3 -1711462110.402374 [0] python3: ddsi_delete_writer_nolinger(guid 0:0:0:3c2) ... -1711462110.402383 [0] python3: writer_set_state(0:0:0:3c2) state transition 0 -> 3 -1711462110.402390 [0] python3: ddsi_delete_writer_nolinger(guid 0:0:0:4c2) ... -1711462110.402397 [0] python3: writer_set_state(0:0:0:4c2) state transition 0 -> 3 -1711462110.403437 [0] gc: gc 0x57079aaf1c00: deleting -1711462110.403456 [0] gc: gc_delete_writer(0x57079aaf1c00, 0:0:0:100c2) -1711462110.403474 [0] gc: gc 0x57079b1c1ea0: deleting -1711462110.403478 [0] gc: gc_delete_writer(0x57079b1c1ea0, 0:0:0:2c2) -1711462110.403486 [0] gc: gc 0x57079b0a1580: deleting -1711462110.403490 [0] gc: gc_delete_writer(0x57079b0a1580, 0:0:0:3c2) -1711462110.403497 [0] gc: gc 0x57079b1143b0: deleting -1711462110.403501 [0] gc: gc_delete_writer(0x57079b1143b0, 0:0:0:4c2) -1711462110.403520 [0] gc: gc 0x57079b09e2f0: deleting -1711462110.404169 [0] python3: xpack_addmsg 0x7a8328002370 0x7a8338039360 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.405633 [0] python3: nn_xpack_send 96: 0x7a832800237c:20 0x7a8338039978:48 0x7a8338038af4:28 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.0.(trunc) -1711462110.405649 [0] python3: traffic-xmit (101) 96 -1711462110.405672 [0] python3: leave conn 0x57079b0e1c00 for (udp/239.255.0.1, *) interface (default): not leaving yet -1711462110.405690 [0] python3: leave conn 0x57079b0a7650 for (udp/239.255.0.1, *) interface (default): not leaving yet -1711462110.405702 [0] python3: leave conn 0x57079b0e1c00 for (udp/239.255.0.1, *) interface udp/10.101.12.71 -1711462110.405721 [0] python3: leave conn 0x57079b0a7650 for (udp/239.255.0.1, *) interface udp/10.101.12.71 -1711462110.405735 [0] python3: ddsi_udp_release_conn multicast socket 7 port 7400 -1711462110.405764 [0] python3: ddsi_udp_release_conn multicast socket 8 port 7401 -1711462110.405788 [0] python3: ddsi_udp_release_conn unicast socket 5 port 7412 -1711462110.405804 [0] python3: ddsi_udp_release_conn unicast socket 6 port 7413 -1711462110.405817 [0] python3: ddsi_udp_release_conn unicast socket 9 port 58212 -1711462110.405834 [0] python3: udp finalized -1711462110.406163 [0] python3: Finis. -hon3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4003) - no unack'ed samples -1711462110.285152 [0] python3: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:4003) ... -1711462110.285171 [0] python3: => EVERYONE -1711462110.285201 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4003) state transition 1 -> 3 -1711462110.286018 [0] gc: gc 0x7590d8014d00: deleting -1711462110.286037 [0] gc: gc 0x556f789bf480: deleting -1711462110.286044 [0] gc: gc_delete_writer(0x556f789bf480, 110d7b4:17c5b8c5:94bd0ff4:4003) -1711462110.286081 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #76: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4003}} -1711462110.286094 [0] gc: non-timed queue now has 1 items -1711462110.286110 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4003 @ 0x556f789ea2e4) user 28 builtin 12 -1711462110.286122 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.286112 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#76/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.286173 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f00035f4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.286178 [0] tev: traffic-xmit (1) 96 -1711462110.286194 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.286220 [0] recv: INFOTS(1711462110.286072873) -1711462110.286239 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #76 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.286401 [0] python3: write_sample 110d7b4:17c5b8c5:94bd0ff4:403 #77: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,68,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,70,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,72,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0, -1711462110.286432 [0] python3: xpack_addmsg 0x556f78333520 0x556f78a2c880 0(data(110d7b4:17c5b8c5:94bd0ff4:403:#77/1)): niov 0 sz 0 => now niov 3 sz 600 -1711462110.286456 [0] python3: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 6 seq-eq-max 6 seq 77 maxseq 46) -1711462110.286474 [0] python3: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403 final) piggybacked, resched in 0.0268972 s (min-ack 46, avail-seq 77, xmit 76) -1711462110.286488 [0] python3: xpack_addmsg 0x556f78333520 0x556f78b3cc00 0(control): niov 3 sz 600 => now niov 4 sz 632 -1711462110.286553 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 632 from udp/10.101.12.71:40473 -1711462110.286562 [0] recvMC: INFOTS(1711462110.286193571) -1711462110.286585 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #77 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.286609 [0] recvMC: HEARTBEAT(F#86:77..77 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.286566 [0] python3: nn_xpack_send 632: 0x556f7833352c:20 0x556f78a27198:36 0x556f789bf480:544 0x556f78b3ccf8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.286647 [0] python3: traffic-xmit (1) 632 -1711462110.286658 [0] python3: => EVERYONE -1711462110.286679 [0] python3: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:4304) ... -1711462110.286691 [0] python3: => EVERYONE -1711462110.287204 [0] gc: gc 0x7590d8014d00: deleting -1711462110.287222 [0] gc: gc 0x556f78b57230: deleting -1711462110.287229 [0] gc: gc_delete_reader(0x556f78b57230, 110d7b4:17c5b8c5:94bd0ff4:4304) -1711462110.287247 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:4c2 #71: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4304}} -1711462110.287266 [0] gc: non-timed queue now has 1 items -1711462110.287281 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4304 @ 0x556f789f57a4) user 27 builtin 12 -1711462110.287289 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.287291 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:4c2:#71/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.287336 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0003684:28 [ udp/239.255.0.1:7400@2 ] -1711462110.287340 [0] python3: ddsi_unblock_throttled_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4203) ... -1711462110.287357 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.287387 [0] recv: INFOTS(1711462110.287238788) -1711462110.287342 [0] tev: traffic-xmit (1) 96 -1711462110.287418 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #71 110d7b4:17c5b8c5:94bd0ff4:4c2? -> 0:0:0:0) -1711462110.287362 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4203) state transition 0 -> 1 -1711462110.287492 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4203) ... -1711462110.287514 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4203) - no unack'ed samples -1711462110.287525 [0] python3: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:4203) ... -1711462110.287547 [0] python3: => EVERYONE -1711462110.287572 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4203) state transition 1 -> 3 -1711462110.288369 [0] gc: gc 0x7590d8014d00: deleting -1711462110.288388 [0] gc: gc 0x556f78a2f640: deleting -1711462110.288394 [0] gc: gc_delete_writer(0x556f78a2f640, 110d7b4:17c5b8c5:94bd0ff4:4203) -1711462110.288417 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #77: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4203}} -1711462110.288431 [0] gc: non-timed queue now has 1 items -1711462110.288446 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4203 @ 0x556f789f28f4) user 26 builtin 12 -1711462110.288448 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#77/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.288455 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.288493 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0003714:28 [ udp/239.255.0.1:7400@2 ] -1711462110.288529 [0] tev: traffic-xmit (1) 96 -1711462110.288537 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.288647 [0] recv: INFOTS(1711462110.288409621) -1711462110.288664 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #77 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.288762 [0] python3: write_sample 110d7b4:17c5b8c5:94bd0ff4:403 #78: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,70,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,72,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,74,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,76,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0, -1711462110.288813 [0] python3: xpack_addmsg 0x556f78333520 0x556f78a2c880 0(data(110d7b4:17c5b8c5:94bd0ff4:403:#78/1)): niov 0 sz 0 => now niov 3 sz 552 -1711462110.288829 [0] python3: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 6 seq-eq-max 6 seq 78 maxseq 46) -1711462110.288849 [0] python3: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403 final) piggybacked, resched in 0.0245592 s (min-ack 46, avail-seq 78, xmit 77) -1711462110.288869 [0] python3: xpack_addmsg 0x556f78333520 0x556f78b3cc00 0(control): niov 3 sz 552 => now niov 4 sz 584 -1711462110.288965 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 584 from udp/10.101.12.71:40473 -1711462110.288986 [0] recvMC: INFOTS(1711462110.288540698) -1711462110.288991 [0] python3: nn_xpack_send 584: 0x556f7833352c:20 0x556f78a27198:36 0x556f78b56b20:496 0x556f78b3ccf8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.289037 [0] python3: traffic-xmit (1) 584 -1711462110.289016 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #78 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.289053 [0] python3: => EVERYONE -1711462110.289072 [0] recvMC: HEARTBEAT(F#87:78..78 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.289095 [0] python3: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:4504) ... -1711462110.289117 [0] python3: => EVERYONE -1711462110.289551 [0] gc: gc 0x7590d8014d00: deleting -1711462110.289567 [0] gc: gc 0x556f789bf480: deleting -1711462110.289574 [0] gc: gc_delete_reader(0x556f789bf480, 110d7b4:17c5b8c5:94bd0ff4:4504) -1711462110.289591 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:4c2 #72: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4504}} -1711462110.289605 [0] gc: non-timed queue now has 1 items -1711462110.289619 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4504 @ 0x556f789fad74) user 25 builtin 12 -1711462110.289627 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.289639 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:4c2:#72/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.289679 [0] python3: ddsi_unblock_throttled_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4403) ... -1711462110.289690 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4403) state transition 0 -> 1 -1711462110.289702 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4403) ... -1711462110.289712 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4403) - no unack'ed samples -1711462110.289722 [0] python3: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:4403) ... -1711462110.289691 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f00037a4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.289745 [0] tev: traffic-xmit (1) 96 -1711462110.289732 [0] python3: => EVERYONE -1711462110.289726 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.289792 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4403) state transition 1 -> 3 -1711462110.289808 [0] recv: INFOTS(1711462110.289583439) -1711462110.289862 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #72 110d7b4:17c5b8c5:94bd0ff4:4c2? -> 0:0:0:0) -1711462110.290707 [0] gc: gc 0x7590d8014d00: deleting -1711462110.290725 [0] gc: gc 0x556f781e6be0: deleting -1711462110.290732 [0] gc: gc_delete_writer(0x556f781e6be0, 110d7b4:17c5b8c5:94bd0ff4:4403) -1711462110.290754 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #78: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4403}} -1711462110.290764 [0] gc: non-timed queue now has 1 items -1711462110.290784 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4403 @ 0x556f789f9e94) user 24 builtin 12 -1711462110.290803 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.290792 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#78/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.290857 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0003834:28 [ udp/239.255.0.1:7400@2 ] -1711462110.290862 [0] tev: traffic-xmit (1) 96 -1711462110.290877 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.290900 [0] recv: INFOTS(1711462110.290746464) -1711462110.290921 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #78 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.291015 [0] python3: write_sample 110d7b4:17c5b8c5:94bd0ff4:403 #79: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,72,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,74,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,76,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,78,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0, -1711462110.291035 [0] python3: xpack_addmsg 0x556f78333520 0x556f78a2c880 0(data(110d7b4:17c5b8c5:94bd0ff4:403:#79/1)): niov 0 sz 0 => now niov 3 sz 504 -1711462110.291044 [0] python3: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 6 seq-eq-max 6 seq 79 maxseq 46) -1711462110.291057 [0] python3: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403 final) piggybacked, resched in 0.0222207 s (min-ack 46, avail-seq 79, xmit 78) -1711462110.291071 [0] python3: xpack_addmsg 0x556f78333520 0x556f78b3cc00 0(control): niov 3 sz 504 => now niov 4 sz 536 -1711462110.291130 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 536 from udp/10.101.12.71:40473 -1711462110.291138 [0] python3: nn_xpack_send 536: 0x556f7833352c:20 0x556f78a27198:36 0x556f789382a0:448 0x556f78b3ccf8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.291152 [0] python3: traffic-xmit (1) 536 -1711462110.291185 [0] python3: => EVERYONE -1711462110.291208 [0] python3: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:4704) ... -1711462110.291221 [0] python3: => EVERYONE -1711462110.291142 [0] recvMC: INFOTS(1711462110.290874452) -1711462110.291270 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #79 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.291282 [0] recvMC: HEARTBEAT(F#88:79..79 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.291887 [0] gc: gc 0x7590d8014d00: deleting -1711462110.291904 [0] gc: gc 0x556f781e6be0: deleting -1711462110.291910 [0] gc: gc_delete_reader(0x556f781e6be0, 110d7b4:17c5b8c5:94bd0ff4:4704) -1711462110.291927 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:4c2 #73: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4704}} -1711462110.291938 [0] gc: non-timed queue now has 1 items -1711462110.291951 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4704 @ 0x556f78a02a54) user 23 builtin 12 -1711462110.291959 [0] gc: gc 0x7590d8014d00: deleting -1711462110.291971 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:4c2:#73/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.292031 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f00038c4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.292037 [0] tev: traffic-xmit (1) 96 -1711462110.292036 [0] python3: ddsi_unblock_throttled_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4603) ... -1711462110.292049 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.292072 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4603) state transition 0 -> 1 -1711462110.292099 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4603) ... -1711462110.292120 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4603) - no unack'ed samples -1711462110.292134 [0] python3: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:4603) ... -1711462110.292150 [0] python3: => EVERYONE -1711462110.292176 [0] recv: INFOTS(1711462110.291919173) -1711462110.292185 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4603) state transition 1 -> 3 -1711462110.292214 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #73 110d7b4:17c5b8c5:94bd0ff4:4c2? -> 0:0:0:0) -1711462110.292264 [0] gc: gc 0x556f789bf480: deleting -1711462110.292274 [0] gc: gc_delete_writer(0x556f789bf480, 110d7b4:17c5b8c5:94bd0ff4:4603) -1711462110.292294 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #79: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4603}} -1711462110.292306 [0] gc: non-timed queue now has 1 items -1711462110.292323 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4603 @ 0x556f789ff6a4) user 22 builtin 12 -1711462110.292329 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#79/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.292331 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.292367 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0003954:28 [ udp/239.255.0.1:7400@2 ] -1711462110.292374 [0] tev: traffic-xmit (1) 96 -1711462110.292380 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.292408 [0] recv: INFOTS(1711462110.292287600) -1711462110.292431 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #79 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.292604 [0] python3: write_sample 110d7b4:17c5b8c5:94bd0ff4:403 #80: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,74,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,76,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,78,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0, -1711462110.292641 [0] python3: xpack_addmsg 0x556f78333520 0x556f78a2c880 0(data(110d7b4:17c5b8c5:94bd0ff4:403:#80/1)): niov 0 sz 0 => now niov 3 sz 456 -1711462110.292652 [0] python3: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 6 seq-eq-max 6 seq 80 maxseq 46) -1711462110.292677 [0] python3: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403 final) piggybacked, resched in 0.0206795 s (min-ack 46, avail-seq 80, xmit 79) -1711462110.292724 [0] python3: xpack_addmsg 0x556f78333520 0x556f78b3cc00 0(control): niov 3 sz 456 => now niov 4 sz 488 -1711462110.292816 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 488 from udp/10.101.12.71:40473 -1711462110.292826 [0] recvMC: INFOTS(1711462110.292409838) -1711462110.292836 [0] python3: nn_xpack_send 488: 0x556f7833352c:20 0x556f78a27198:36 0x556f78b70f30:400 0x556f78b3ccf8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.292861 [0] python3: traffic-xmit (1) 488 -1711462110.292876 [0] python3: => EVERYONE -1711462110.292842 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #80 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.292900 [0] python3: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:4904) ... -1711462110.292908 [0] recvMC: HEARTBEAT(F#89:80..80 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.292916 [0] python3: => EVERYONE -1711462110.293426 [0] gc: gc 0x7590d8014d00: deleting -1711462110.293444 [0] gc: gc 0x556f789ecab0: deleting -1711462110.293453 [0] gc: gc_delete_reader(0x556f789ecab0, 110d7b4:17c5b8c5:94bd0ff4:4904) -1711462110.293471 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:4c2 #74: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4904}} -1711462110.293485 [0] gc: non-timed queue now has 1 items -1711462110.293503 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4904 @ 0x556f78a07a14) user 21 builtin 12 -1711462110.293513 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.293512 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:4c2:#74/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.293552 [0] python3: ddsi_unblock_throttled_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4803) ... -1711462110.293567 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4803) state transition 0 -> 1 -1711462110.293580 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4803) ... -1711462110.293587 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f00039e4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.293591 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4803) - no unack'ed samples -1711462110.293619 [0] python3: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:4803) ... -1711462110.293647 [0] python3: => EVERYONE -1711462110.293597 [0] tev: traffic-xmit (1) 96 -1711462110.293600 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.293836 [0] recv: INFOTS(1711462110.293464039) -1711462110.293865 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #74 110d7b4:17c5b8c5:94bd0ff4:4c2? -> 0:0:0:0) -1711462110.293875 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4803) state transition 1 -> 3 -1711462110.293962 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.294011 [0] recv: HEARTBEAT(#10:1..15 L(:1c1 16957.953485)110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0: 110d7b4:17c5b8c5:94bd0ff4:4c7@15(sync)) -1711462110.294072 [0] tev: acknack 110d7b4:17c5b8c5:94bd0ff4:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#4:16/0: -1711462110.294132 [0] tev: send acknack(rd 110d7b4:17c5b8c5:94bd0ff4:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.294151 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.294202 [0] tev: nn_xpack_send 64: 0x7590e000139c:20 0x7590e400d398:44 [ udp/10.101.12.71:7412@2 ] -1711462110.294211 [0] tev: traffic-xmit (1) 64 -1711462110.294597 [0] gc: gc 0x7590d8014d00: deleting -1711462110.294615 [0] gc: gc 0x556f78a2f640: deleting -1711462110.294621 [0] gc: gc_delete_writer(0x556f78a2f640, 110d7b4:17c5b8c5:94bd0ff4:4803) -1711462110.294641 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #80: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4803}} -1711462110.294670 [0] gc: non-timed queue now has 1 items -1711462110.294684 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4803 @ 0x556f78a06964) user 20 builtin 12 -1711462110.294697 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.294686 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#80/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.294771 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.294778 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0003a74:28 [ udp/239.255.0.1:7400@2 ] -1711462110.294819 [0] tev: traffic-xmit (1) 96 -1711462110.294794 [0] recv: INFOTS(1711462110.294634250) -1711462110.294862 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #80 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.294976 [0] python3: write_sample 110d7b4:17c5b8c5:94bd0ff4:403 #81: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,76,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,78,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.295018 [0] python3: xpack_addmsg 0x556f78333520 0x556f78a2c880 0(data(110d7b4:17c5b8c5:94bd0ff4:403:#81/1)): niov 0 sz 0 => now niov 3 sz 408 -1711462110.295035 [0] python3: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 6 seq-eq-max 6 seq 81 maxseq 46) -1711462110.295058 [0] python3: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403 final) piggybacked, resched in 0.018305 s (min-ack 46, avail-seq 81, xmit 80) -1711462110.295073 [0] python3: xpack_addmsg 0x556f78333520 0x556f78b3cc00 0(control): niov 3 sz 408 => now niov 4 sz 440 -1711462110.295150 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 440 from udp/10.101.12.71:40473 -1711462110.295161 [0] recvMC: INFOTS(1711462110.294787650) -1711462110.295177 [0] python3: nn_xpack_send 440: 0x556f7833352c:20 0x556f78a27198:36 0x556f78b56d20:352 0x556f78b3ccf8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.295216 [0] python3: traffic-xmit (1) 440 -1711462110.295188 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #81 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.295240 [0] python3: => EVERYONE -1711462110.295263 [0] recvMC: HEARTBEAT(F#90:81..81 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.295268 [0] python3: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:4b04) ... -1711462110.295303 [0] python3: => EVERYONE -1711462110.295509 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.295543 [0] recv: HEARTBEAT(#10:1..19 L(:1c1 16957.955027)110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0: 110d7b4:17c5b8c5:94bd0ff4:3c7@19(sync)) -1711462110.295581 [0] tev: acknack 110d7b4:17c5b8c5:94bd0ff4:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#4:20/0: -1711462110.295613 [0] tev: send acknack(rd 110d7b4:17c5b8c5:94bd0ff4:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.295627 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.295694 [0] tev: nn_xpack_send 64: 0x7590e000139c:20 0x7590e400d398:44 [ udp/10.101.12.71:7412@2 ] -1711462110.295715 [0] tev: traffic-xmit (1) 64 -1711462110.295765 [0] gc: gc 0x7590d8014d00: deleting -1711462110.295774 [0] gc: gc 0x556f78b57230: deleting -1711462110.295780 [0] gc: gc_delete_reader(0x556f78b57230, 110d7b4:17c5b8c5:94bd0ff4:4b04) -1711462110.295797 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:4c2 #75: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4b04}} -1711462110.295815 [0] gc: non-timed queue now has 1 items -1711462110.295828 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4b04 @ 0x556f78a0e114) user 19 builtin 12 -1711462110.295835 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.295835 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:4c2:#75/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.295880 [0] python3: ddsi_unblock_throttled_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4a03) ... -1711462110.295897 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4a03) state transition 0 -> 1 -1711462110.295908 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4a03) ... -1711462110.295918 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4a03) - no unack'ed samples -1711462110.295923 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.295944 [0] recv: INFOTS(1711462110.295791082) -1711462110.295969 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #75 110d7b4:17c5b8c5:94bd0ff4:4c2? -> 0:0:0:0) -1711462110.295930 [0] python3: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:4a03) ... -1711462110.295918 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0003b04:28 [ udp/239.255.0.1:7400@2 ] -1711462110.296026 [0] tev: traffic-xmit (1) 96 -1711462110.296013 [0] python3: => EVERYONE -1711462110.296070 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4a03) state transition 1 -> 3 -1711462110.296918 [0] gc: gc 0x7590d8014d00: deleting -1711462110.296948 [0] gc: gc 0x556f78b57230: deleting -1711462110.296960 [0] gc: gc_delete_writer(0x556f78b57230, 110d7b4:17c5b8c5:94bd0ff4:4a03) -1711462110.296977 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #81: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4a03}} -1711462110.296999 [0] gc: non-timed queue now has 1 items -1711462110.297013 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4a03 @ 0x556f78a0ce54) user 18 builtin 12 -1711462110.297016 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#81/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.297020 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.297066 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0003b94:28 [ udp/239.255.0.1:7400@2 ] -1711462110.297072 [0] tev: traffic-xmit (1) 96 -1711462110.297078 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.297095 [0] recv: INFOTS(1711462110.296972092) -1711462110.297118 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #81 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.297222 [0] python3: write_sample 110d7b4:17c5b8c5:94bd0ff4:403 #82: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,78,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.297269 [0] python3: xpack_addmsg 0x556f78333520 0x556f78a2c880 0(data(110d7b4:17c5b8c5:94bd0ff4:403:#82/1)): niov 0 sz 0 => now niov 3 sz 360 -1711462110.297294 [0] python3: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 6 seq-eq-max 6 seq 82 maxseq 46) -1711462110.297313 [0] python3: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403 final) piggybacked, resched in 0.0160145 s (min-ack 46, avail-seq 82, xmit 81) -1711462110.297330 [0] python3: xpack_addmsg 0x556f78333520 0x556f78b3cc00 0(control): niov 3 sz 360 => now niov 4 sz 392 -1711462110.297397 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 392 from udp/10.101.12.71:40473 -1711462110.297412 [0] recvMC: INFOTS(1711462110.297082585) -1711462110.297428 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #82 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.297412 [0] python3: nn_xpack_send 392: 0x556f7833352c:20 0x556f78a27198:36 0x556f789a7af0:304 0x556f78b3ccf8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.297463 [0] python3: traffic-xmit (1) 392 -1711462110.297443 [0] recvMC: HEARTBEAT(F#91:82..82 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.297516 [0] python3: => EVERYONE -1711462110.297546 [0] python3: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:4d04) ... -1711462110.297555 [0] python3: => EVERYONE -1711462110.298110 [0] gc: gc 0x7590d8014d00: deleting -1711462110.298128 [0] gc: gc 0x556f78a2f640: deleting -1711462110.298137 [0] gc: gc_delete_reader(0x556f78a2f640, 110d7b4:17c5b8c5:94bd0ff4:4d04) -1711462110.298149 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:4c2 #76: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4d04}} -1711462110.298159 [0] gc: non-timed queue now has 1 items -1711462110.298170 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4d04 @ 0x556f78a13404) user 17 builtin 12 -1711462110.298176 [0] gc: gc 0x7590d8014d00: deleting -1711462110.298190 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:4c2:#76/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.298229 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0003c24:28 [ udp/239.255.0.1:7400@2 ] -1711462110.298233 [0] tev: traffic-xmit (1) 96 -1711462110.298240 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.298246 [0] python3: ddsi_unblock_throttled_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4c03) ... -1711462110.298279 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4c03) state transition 0 -> 1 -1711462110.298252 [0] recv: INFOTS(1711462110.298143983) -1711462110.298297 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4c03) ... -1711462110.298311 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4c03) - no unack'ed samples -1711462110.298322 [0] python3: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:4c03) ... -1711462110.298338 [0] python3: => EVERYONE -1711462110.298367 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4c03) state transition 1 -> 3 -1711462110.298368 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #76 110d7b4:17c5b8c5:94bd0ff4:4c2? -> 0:0:0:0) -1711462110.298414 [0] gc: gc 0x556f789ecab0: deleting -1711462110.298432 [0] gc: gc_delete_writer(0x556f789ecab0, 110d7b4:17c5b8c5:94bd0ff4:4c03) -1711462110.298490 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #82: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4c03}} -1711462110.298514 [0] gc: non-timed queue now has 1 items -1711462110.298533 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#82/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.298546 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4c03 @ 0x556f78a120f4) user 16 builtin 12 -1711462110.298563 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0003cb4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.298575 [0] tev: traffic-xmit (1) 96 -1711462110.298576 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.298565 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.298610 [0] recv: INFOTS(1711462110.298471822) -1711462110.298628 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #82 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.298705 [0] python3: write_sample 110d7b4:17c5b8c5:94bd0ff4:403 #83: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.298736 [0] python3: xpack_addmsg 0x556f78333520 0x556f78a2c880 0(data(110d7b4:17c5b8c5:94bd0ff4:403:#83/1)): niov 0 sz 0 => now niov 3 sz 312 -1711462110.298749 [0] python3: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 6 seq-eq-max 6 seq 83 maxseq 46) -1711462110.298763 [0] python3: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403 final) piggybacked, resched in 0.0145064 s (min-ack 46, avail-seq 83, xmit 82) -1711462110.298774 [0] python3: xpack_addmsg 0x556f78333520 0x556f78b3cc00 0(control): niov 3 sz 312 => now niov 4 sz 344 -1711462110.298829 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462110.298836 [0] recvMC: INFOTS(1711462110.298593713) -1711462110.298846 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #83 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.298860 [0] recvMC: HEARTBEAT(F#92:83..83 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.298844 [0] python3: nn_xpack_send 344: 0x556f7833352c:20 0x556f78a27198:36 0x556f78b55d60:256 0x556f78b3ccf8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.298895 [0] python3: traffic-xmit (1) 344 -1711462110.298907 [0] python3: => EVERYONE -1711462110.298924 [0] python3: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:4f04) ... -1711462110.298934 [0] python3: => EVERYONE -1711462110.299693 [0] gc: gc 0x7590d8014d00: deleting -1711462110.299710 [0] gc: gc 0x556f789bf480: deleting -1711462110.299718 [0] gc: gc_delete_reader(0x556f789bf480, 110d7b4:17c5b8c5:94bd0ff4:4f04) -1711462110.299744 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:4c2 #77: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4f04}} -1711462110.299764 [0] gc: non-timed queue now has 1 items -1711462110.299785 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4f04 @ 0x556f78a19de4) user 15 builtin 12 -1711462110.299792 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:4c2:#77/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.299795 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.299840 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0003d44:28 [ udp/239.255.0.1:7400@2 ] -1711462110.299845 [0] tev: traffic-xmit (1) 96 -1711462110.299849 [0] python3: ddsi_unblock_throttled_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4e03) ... -1711462110.299860 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4e03) state transition 0 -> 1 -1711462110.299871 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4e03) ... -1711462110.299889 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:4e03) - no unack'ed samples -1711462110.299904 [0] python3: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:4e03) ... -1711462110.299915 [0] python3: => EVERYONE -1711462110.299880 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.299932 [0] recv: INFOTS(1711462110.299733268) -1711462110.299940 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #77 110d7b4:17c5b8c5:94bd0ff4:4c2? -> 0:0:0:0) -1711462110.299952 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4e03) state transition 1 -> 3 -1711462110.300938 [0] gc: gc 0x7590d8014d00: deleting -1711462110.300973 [0] gc: gc 0x556f781e6be0: deleting -1711462110.300986 [0] gc: gc_delete_writer(0x556f781e6be0, 110d7b4:17c5b8c5:94bd0ff4:4e03) -1711462110.301017 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #83: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4e03}} -1711462110.301039 [0] gc: non-timed queue now has 1 items -1711462110.301060 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#83/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.301071 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4e03 @ 0x556f78a18e44) user 14 builtin 12 -1711462110.301087 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.301092 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0003dd4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.301121 [0] tev: traffic-xmit (1) 96 -1711462110.301135 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.301176 [0] recv: INFOTS(1711462110.301005028) -1711462110.301191 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #83 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.301246 [0] python3: write_sample 110d7b4:17c5b8c5:94bd0ff4:403 #84: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.301271 [0] python3: xpack_addmsg 0x556f78333520 0x556f78a2c880 0(data(110d7b4:17c5b8c5:94bd0ff4:403:#84/1)): niov 0 sz 0 => now niov 3 sz 264 -1711462110.301283 [0] python3: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 6 seq-eq-max 6 seq 84 maxseq 46) -1711462110.301297 [0] python3: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403 final) piggybacked, resched in 0.0119437 s (min-ack 46, avail-seq 84, xmit 83) -1711462110.301308 [0] python3: xpack_addmsg 0x556f78333520 0x556f78b3cc00 0(control): niov 3 sz 264 => now niov 4 sz 296 -1711462110.301363 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 296 from udp/10.101.12.71:40473 -1711462110.301371 [0] python3: nn_xpack_send 296: 0x556f7833352c:20 0x556f78a27198:36 0x556f78304bc0:208 0x556f78b3ccf8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.301407 [0] python3: traffic-xmit (1) 296 -1711462110.301373 [0] recvMC: INFOTS(1711462110.301158893) -1711462110.301420 [0] python3: => EVERYONE -1711462110.301440 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #84 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.301455 [0] recvMC: HEARTBEAT(F#93:84..84 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.301440 [0] python3: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:5304) ... -1711462110.301472 [0] python3: => EVERYONE -1711462110.302199 [0] gc: gc 0x7590d8014d00: deleting -1711462110.302216 [0] gc: gc 0x556f781e6be0: deleting -1711462110.302223 [0] gc: gc_delete_reader(0x556f781e6be0, 110d7b4:17c5b8c5:94bd0ff4:5304) -1711462110.302245 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:4c2 #78: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5304}} -1711462110.302264 [0] gc: non-timed queue now has 1 items -1711462110.302283 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:5304 @ 0x556f78a26104) user 13 builtin 12 -1711462110.302292 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:4c2:#78/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.302295 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.302336 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0003e64:28 [ udp/239.255.0.1:7400@2 ] -1711462110.302341 [0] tev: traffic-xmit (1) 96 -1711462110.302352 [0] python3: ddsi_unblock_throttled_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5203) ... -1711462110.302371 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.302391 [0] recv: INFOTS(1711462110.302235006) -1711462110.302373 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:5203) state transition 0 -> 1 -1711462110.302430 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #78 110d7b4:17c5b8c5:94bd0ff4:4c2? -> 0:0:0:0) -1711462110.302495 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5203) ... -1711462110.302588 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5203) - no unack'ed samples -1711462110.302600 [0] python3: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:5203) ... -1711462110.302613 [0] python3: => EVERYONE -1711462110.302632 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:5203) state transition 1 -> 3 -1711462110.303418 [0] gc: gc 0x7590d8014d00: deleting -1711462110.303439 [0] gc: gc 0x556f789bf480: deleting -1711462110.303448 [0] gc: gc_delete_writer(0x556f789bf480, 110d7b4:17c5b8c5:94bd0ff4:5203) -1711462110.303479 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #84: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5203}} -1711462110.303499 [0] gc: non-timed queue now has 1 items -1711462110.303520 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#84/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.303528 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:5203 @ 0x556f78a24f84) user 12 builtin 12 -1711462110.303543 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.303554 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0003ef4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.303560 [0] tev: traffic-xmit (1) 96 -1711462110.303598 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.303614 [0] recv: INFOTS(1711462110.303466791) -1711462110.303631 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #84 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.303686 [0] python3: write_sample 110d7b4:17c5b8c5:94bd0ff4:403 #85: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.303724 [0] python3: xpack_addmsg 0x556f78333520 0x556f78a2c880 0(data(110d7b4:17c5b8c5:94bd0ff4:403:#85/1)): niov 0 sz 0 => now niov 3 sz 216 -1711462110.303738 [0] python3: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 6 seq-eq-max 6 seq 85 maxseq 46) -1711462110.303754 [0] python3: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403 final) piggybacked, resched in 0.00949309 s (min-ack 46, avail-seq 85, xmit 84) -1711462110.303771 [0] python3: xpack_addmsg 0x556f78333520 0x556f78b3cc00 0(control): niov 3 sz 216 => now niov 4 sz 248 -1711462110.303839 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 248 from udp/10.101.12.71:40473 -1711462110.303848 [0] recvMC: INFOTS(1711462110.303608296) -1711462110.303867 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #85 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.303884 [0] recvMC: HEARTBEAT(F#94:85..85 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.303851 [0] python3: nn_xpack_send 248: 0x556f7833352c:20 0x556f78a27198:36 0x556f7889eee0:160 0x556f78b3ccf8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.303913 [0] python3: traffic-xmit (1) 248 -1711462110.303927 [0] python3: => EVERYONE -1711462110.303947 [0] python3: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:5504) ... -1711462110.303960 [0] python3: => EVERYONE -1711462110.304616 [0] gc: gc 0x7590d8014d00: deleting -1711462110.304641 [0] gc: gc 0x556f789ecab0: deleting -1711462110.304651 [0] gc: gc_delete_reader(0x556f789ecab0, 110d7b4:17c5b8c5:94bd0ff4:5504) -1711462110.304677 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:4c2 #79: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5504}} -1711462110.304697 [0] gc: non-timed queue now has 1 items -1711462110.304719 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:4c2:#79/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.304723 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:5504 @ 0x556f78a2c224) user 11 builtin 12 -1711462110.304761 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0003f84:28 [ udp/239.255.0.1:7400@2 ] -1711462110.304761 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.304767 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.304788 [0] recv: INFOTS(1711462110.304665223) -1711462110.304813 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #79 110d7b4:17c5b8c5:94bd0ff4:4c2? -> 0:0:0:0) -1711462110.304761 [0] python3: ddsi_unblock_throttled_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5403) ... -1711462110.304846 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:5403) state transition 0 -> 1 -1711462110.304861 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5403) ... -1711462110.304876 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5403) - no unack'ed samples -1711462110.304897 [0] python3: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:5403) ... -1711462110.304926 [0] python3: => EVERYONE -1711462110.304819 [0] tev: traffic-xmit (1) 96 -1711462110.304970 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:5403) state transition 1 -> 3 -1711462110.305858 [0] gc: gc 0x7590d8014d00: deleting -1711462110.305882 [0] gc: gc 0x556f78a2f640: deleting -1711462110.305892 [0] gc: gc_delete_writer(0x556f78a2f640, 110d7b4:17c5b8c5:94bd0ff4:5403) -1711462110.305958 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #85: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5403}} -1711462110.305981 [0] gc: non-timed queue now has 1 items -1711462110.306008 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#85/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.306017 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:5403 @ 0x556f78a2b164) user 10 builtin 12 -1711462110.306036 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.306054 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.306066 [0] recv: INFOTS(1711462110.305944071) -1711462110.306055 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0004014:28 [ udp/239.255.0.1:7400@2 ] -1711462110.306092 [0] tev: traffic-xmit (1) 96 -1711462110.306077 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #85 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.307111 [0] gc: gc 0x7590d8014d00: deleting -1711462110.307238 [0] python3: write_sample 110d7b4:17c5b8c5:94bd0ff4:403 #86: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.307273 [0] python3: xpack_addmsg 0x556f78333520 0x556f78a2c880 0(data(110d7b4:17c5b8c5:94bd0ff4:403:#86/1)): niov 0 sz 0 => now niov 3 sz 192 -1711462110.307284 [0] python3: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 6 seq-eq-max 6 seq 86 maxseq 46) -1711462110.307302 [0] python3: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403 final) piggybacked, resched in 0.00593483 s (min-ack 46, avail-seq 86, xmit 85) -1711462110.307313 [0] python3: xpack_addmsg 0x556f78333520 0x556f78b3cc00 0(control): niov 3 sz 192 => now niov 4 sz 224 -1711462110.307413 [0] python3: nn_xpack_send 224: 0x556f7833352c:20 0x556f78a27198:36 0x556f78b5fb20:136 0x556f78b3ccf8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.307419 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 224 from udp/10.101.12.71:40473 -1711462110.307446 [0] recvMC: INFOTS(1711462110.307152640) -1711462110.307426 [0] python3: traffic-xmit (1) 224 -1711462110.307486 [0] python3: => EVERYONE -1711462110.307500 [0] python3: ddsi_unblock_throttled_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5603) ... -1711462110.307510 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #86 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.307529 [0] recvMC: HEARTBEAT(F#95:86..86 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.307511 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:5603) state transition 0 -> 1 -1711462110.307554 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5603) ... -1711462110.307562 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5603) - no unack'ed samples -1711462110.307569 [0] python3: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:5603) ... -1711462110.307582 [0] python3: => EVERYONE -1711462110.307609 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:5603) state transition 1 -> 3 -1711462110.307665 [0] gc: gc 0x556f78b57230: deleting -1711462110.307677 [0] gc: gc_delete_writer(0x556f78b57230, 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462110.307721 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #86: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5603}} -1711462110.307738 [0] gc: non-timed queue now has 1 items -1711462110.307767 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#86/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.307888 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.307905 [0] recv: INFOTS(1711462110.307705837) -1711462110.307904 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f00040a4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.307936 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #86 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.307940 [0] tev: traffic-xmit (1) 96 -1711462110.308002 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:5603 @ 0x556f78a890a4) user 9 builtin 12 -1711462110.308025 [0] gc: gc 0x7590d8014d00: deleting -1711462110.308189 [0] python3: write_sample 110d7b4:17c5b8c5:94bd0ff4:403 #87: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.308223 [0] python3: xpack_addmsg 0x556f78333520 0x556f78a2c880 0(data(110d7b4:17c5b8c5:94bd0ff4:403:#87/1)): niov 0 sz 0 => now niov 3 sz 168 -1711462110.308234 [0] python3: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 6 seq-eq-max 6 seq 87 maxseq 46) -1711462110.308252 [0] python3: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403 final) piggybacked, resched in 0.00497945 s (min-ack 46, avail-seq 87, xmit 86) -1711462110.308262 [0] python3: xpack_addmsg 0x556f78333520 0x556f78b3cc00 0(control): niov 3 sz 168 => now niov 4 sz 200 -1711462110.308344 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 200 from udp/10.101.12.71:40473 -1711462110.308371 [0] recvMC: INFOTS(1711462110.308113998) -1711462110.308360 [0] python3: nn_xpack_send 200: 0x556f7833352c:20 0x556f78a27198:36 0x556f78b5a570:112 0x556f78b3ccf8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.308402 [0] python3: traffic-xmit (1) 200 -1711462110.308412 [0] python3: => EVERYONE -1711462110.308425 [0] python3: ddsi_unblock_throttled_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5703) ... -1711462110.308436 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:5703) state transition 0 -> 1 -1711462110.308472 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5703) ... -1711462110.308393 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #87 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.308518 [0] recvMC: HEARTBEAT(F#96:87..87 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.308480 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5703) - no unack'ed samples -1711462110.308557 [0] python3: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:5703) ... -1711462110.308565 [0] python3: => EVERYONE -1711462110.308585 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:5703) state transition 1 -> 3 -1711462110.308674 [0] gc: gc 0x556f789d3cf0: deleting -1711462110.308683 [0] gc: gc_delete_writer(0x556f789d3cf0, 110d7b4:17c5b8c5:94bd0ff4:5703) -1711462110.308707 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #87: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5703}} -1711462110.308721 [0] gc: non-timed queue now has 1 items -1711462110.308739 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:5703 @ 0x556f78b3c1d4) user 8 builtin 12 -1711462110.308752 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.308740 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#87/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.308843 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.308862 [0] recv: INFOTS(1711462110.308696854) -1711462110.308882 [0] python3: write_sample 110d7b4:17c5b8c5:94bd0ff4:403 #88: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.308846 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x556f78a8ab84:28 [ udp/239.255.0.1:7400@2 ] -1711462110.308955 [0] tev: traffic-xmit (1) 96 -1711462110.308888 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #87 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.308930 [0] python3: xpack_addmsg 0x556f78333520 0x556f78a2c880 0(data(110d7b4:17c5b8c5:94bd0ff4:403:#88/1)): niov 0 sz 0 => now niov 3 sz 144 -1711462110.309002 [0] python3: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 6 seq-eq-max 6 seq 88 maxseq 46) -1711462110.309026 [0] python3: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403 final) piggybacked, resched in 0.00429296 s (min-ack 46, avail-seq 88, xmit 87) -1711462110.309040 [0] python3: xpack_addmsg 0x556f78333520 0x556f78b3cc00 0(control): niov 3 sz 144 => now niov 4 sz 176 -1711462110.309095 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 176 from udp/10.101.12.71:40473 -1711462110.309105 [0] recvMC: INFOTS(1711462110.308810509) -1711462110.309107 [0] python3: nn_xpack_send 176: 0x556f7833352c:20 0x556f78a27198:36 0x556f7889fd10:88 0x556f78b3ccf8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.309120 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #88 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.309139 [0] python3: traffic-xmit (1) 176 -1711462110.309160 [0] python3: => EVERYONE -1711462110.309184 [0] python3: ddsi_unblock_throttled_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5803) ... -1711462110.309206 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:5803) state transition 0 -> 1 -1711462110.309218 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5803) ... -1711462110.309228 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:5803) - no unack'ed samples -1711462110.309256 [0] python3: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:5803) ... -1711462110.309273 [0] python3: => EVERYONE -1711462110.309234 [0] recvMC: HEARTBEAT(F#97:88..88 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.309308 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:5803) state transition 1 -> 3 -1711462110.309825 [0] gc: gc 0x7590d8014d00: deleting -1711462110.309839 [0] gc: gc 0x556f78b57230: deleting -1711462110.309854 [0] gc: gc_delete_writer(0x556f78b57230, 110d7b4:17c5b8c5:94bd0ff4:5803) -1711462110.309886 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #88: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5803}} -1711462110.309899 [0] gc: non-timed queue now has 1 items -1711462110.309919 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#88/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.309952 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:5803 @ 0x556f78b44434) user 7 builtin 12 -1711462110.309961 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.310002 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590f0004134:28 [ udp/239.255.0.1:7400@2 ] -1711462110.310021 [0] tev: traffic-xmit (1) 96 -1711462110.310020 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.310076 [0] python3: write_sample 110d7b4:17c5b8c5:94bd0ff4:403 #89: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{}}}} -1711462110.310091 [0] recv: INFOTS(1711462110.309878806) -1711462110.310115 [0] python3: xpack_addmsg 0x556f78333520 0x556f78a2c880 0(data(110d7b4:17c5b8c5:94bd0ff4:403:#89/1)): niov 0 sz 0 => now niov 3 sz 120 -1711462110.310143 [0] python3: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 6 seq-eq-max 6 seq 89 maxseq 46) -1711462110.310122 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #88 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.310184 [0] python3: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403 final) piggybacked, resched in 0.00307106 s (min-ack 46, avail-seq 89, xmit 88) -1711462110.310218 [0] python3: xpack_addmsg 0x556f78333520 0x556f78b3cc00 0(control): niov 3 sz 120 => now niov 4 sz 152 -1711462110.310265 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 152 from udp/10.101.12.71:40473 -1711462110.310273 [0] recvMC: INFOTS(1711462110.310031935) -1711462110.310291 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #89 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.310305 [0] recvMC: HEARTBEAT(F#98:89..89 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.310274 [0] python3: nn_xpack_send 152: 0x556f7833352c:20 0x556f78a27198:36 0x556f78b576e0:64 0x556f78b3ccf8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.310336 [0] python3: traffic-xmit (1) 152 -1711462110.310346 [0] python3: => EVERYONE -1711462110.310356 [0] python3: ddsi_unblock_throttled_writer(guid 110d7b4:17c5b8c5:94bd0ff4:603) ... -1711462110.310368 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:603) state transition 0 -> 1 -1711462110.310374 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:603) ... -1711462110.310381 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:603) - no unack'ed samples -1711462110.310391 [0] python3: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:603) ... -1711462110.310400 [0] python3: => EVERYONE -1711462110.310413 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:603) state transition 1 -> 3 -1711462110.311040 [0] gc: gc 0x7590d8014d00: deleting -1711462110.311055 [0] gc: gc 0x556f78a2f640: deleting -1711462110.311061 [0] gc: gc_delete_writer(0x556f78a2f640, 110d7b4:17c5b8c5:94bd0ff4:603) -1711462110.311078 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #89: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:603}} -1711462110.311087 [0] gc: non-timed queue now has 1 items -1711462110.311114 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:603 @ 0x556f789a2324) user 6 builtin 12 -1711462110.311115 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#89/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.311123 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.311184 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.311188 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x556f78b79b14:28 [ udp/239.255.0.1:7400@2 ] -1711462110.311190 [0] recv: INFOTS(1711462110.311071865) -1711462110.311206 [0] tev: traffic-xmit (1) 96 -1711462110.311235 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #89 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.311213 [0] python3: write_sample 110d7b4:17c5b8c5:94bd0ff4:403 #90: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{}} -1711462110.311258 [0] python3: xpack_addmsg 0x556f78333520 0x556f78a2c880 0(data(110d7b4:17c5b8c5:94bd0ff4:403:#90/1)): niov 0 sz 0 => now niov 3 sz 88 -1711462110.311264 [0] python3: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 6 seq-eq-max 6 seq 90 maxseq 46) -1711462110.311271 [0] python3: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403 final) piggybacked, resched in 0.00192613 s (min-ack 46, avail-seq 90, xmit 89) -1711462110.311277 [0] python3: xpack_addmsg 0x556f78333520 0x556f78b3cc00 0(control): niov 3 sz 88 => now niov 4 sz 120 -1711462110.311317 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 120 from udp/10.101.12.71:40473 -1711462110.311336 [0] recvMC: INFOTS(1711462110.311185386) -1711462110.311317 [0] python3: nn_xpack_send 120: 0x556f7833352c:20 0x556f78a27198:36 0x556f78b58440:32 0x556f78b3ccf8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.311357 [0] python3: traffic-xmit (1) 120 -1711462110.311369 [0] python3: => EVERYONE -1711462110.311357 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #90 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.311480 [0] recvMC: HEARTBEAT(F#99:90..90 110d7b4:17c5b8c5:94bd0ff4:403? -> 0:0:0:0) -1711462110.311604 [0] python3: ddsi_unblock_throttled_writer(guid 110d7b4:17c5b8c5:94bd0ff4:403) ... -1711462110.311611 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:403) state transition 0 -> 1 -1711462110.311617 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:403) ... -1711462110.311622 [0] python3: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:403) state transition 1 -> 2 -1711462110.311631 [0] python3: delete_writer(guid 110d7b4:17c5b8c5:94bd0ff4:403) - unack'ed samples, will delete when ack'd or at t = 16948.971130 -1711462110.312219 [0] gc: gc 0x7590d8014d00: deleting -1711462110.313201 [0] tev: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403) suppressed, resched in 0.1 s (min-ack 46, avail-seq 90, xmit 90) -1711462110.314477 [0] tev: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:4c2 multicasting (rel-prd 6 seq-eq-max 6 seq 79 maxseq 40) -1711462110.314500 [0] tev: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:4c2) sent, resched in 0.1 s (min-ack 40, avail-seq 79, xmit 79) -1711462110.314516 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462110.314589 [0] tev: nn_xpack_send 52: 0x7590e000139c:20 0x7590e400d3a8:32 [ udp/239.255.0.1:7400@2 ] -1711462110.314601 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462110.314624 [0] recv: HEARTBEAT(#9:1..79 110d7b4:17c5b8c5:94bd0ff4:4c2? -> 0:0:0:0) -1711462110.314603 [0] tev: traffic-xmit (1) 52 -1711462110.314784 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462110.314800 [0] recv: INFODST(110d7b4:17c5b8c5:94bd0ff4) -1711462110.314827 [0] recv: ACKNACK(F#4:80/0: L(:1c1 16957.974302) 110aba1:7b19badd:ce0adb73:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2 ACK39 RM0) -1711462110.314842 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462110.314850 [0] recv: INFODST(110d7b4:17c5b8c5:94bd0ff4) -1711462110.314864 [0] recv: ACKNACK(F#4:80/0: L(:1c1 16957.974353) 110e21c:d0762c48:a9f0fb28:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2 ACK39 RM0) -1711462110.314878 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462110.314883 [0] recv: INFODST(110d7b4:17c5b8c5:94bd0ff4) -1711462110.314894 [0] recv: ACKNACK(F#4:80/0: L(:1c1 16957.974386) 110443d:bb7f10a5:18901533:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2 ACK39 RM0) -1711462110.314906 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462110.314913 [0] recv: INFODST(110d7b4:17c5b8c5:94bd0ff4) -1711462110.314925 [0] recv: ACKNACK(F#4:80/0: L(:1c1 16957.974415) 110cd0d:56a27910:57318171:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2 ACK39 RM0) -1711462110.314931 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462110.314942 [0] recv: ACKNACK(F#12:80/0: L(:1c1 16957.974415) 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2 ACK39 RM0) -1711462110.314948 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462110.314980 [0] recv: ACKNACK(F#7:80/0: L(:1c1 16957.974415) 110cd0d:79d6eeac:ea4a8907:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2 ACK39 RM39) -1711462110.315855 [0] tev: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:3c2 multicasting (rel-prd 6 seq-eq-max 6 seq 89 maxseq 45) -1711462110.315893 [0] tev: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:3c2) sent, resched in 0.1 s (min-ack 45, avail-seq 89, xmit 89) -1711462110.315909 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462110.315974 [0] tev: nn_xpack_send 52: 0x7590e000139c:20 0x7590e400d3a8:32 [ udp/239.255.0.1:7400@2 ] -1711462110.315983 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462110.315986 [0] tev: traffic-xmit (1) 52 -1711462110.316023 [0] recv: HEARTBEAT(#10:1..89 110d7b4:17c5b8c5:94bd0ff4:3c2? -> 0:0:0:0) -1711462110.316171 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462110.316184 [0] recv: INFODST(110d7b4:17c5b8c5:94bd0ff4) -1711462110.316216 [0] recv: ACKNACK(F#5:90/0: L(:1c1 16957.975685) 110443d:bb7f10a5:18901533:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2 ACK44 RM0) -1711462110.316233 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462110.316239 [0] recv: INFODST(110d7b4:17c5b8c5:94bd0ff4) -1711462110.316251 [0] recv: ACKNACK(F#5:90/0: L(:1c1 16957.975741) 110aba1:7b19badd:ce0adb73:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2 ACK44 RM0) -1711462110.316264 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462110.316269 [0] recv: INFODST(110d7b4:17c5b8c5:94bd0ff4) -1711462110.316280 [0] recv: ACKNACK(F#5:90/0: L(:1c1 16957.975772) 110e21c:d0762c48:a9f0fb28:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2 ACK44 RM0) -1711462110.316292 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462110.316298 [0] recv: INFODST(110d7b4:17c5b8c5:94bd0ff4) -1711462110.316310 [0] recv: ACKNACK(F#5:90/0: L(:1c1 16957.975801) 110cd0d:56a27910:57318171:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2 ACK44 RM0) -1711462110.316316 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462110.316328 [0] recv: ACKNACK(F#15:90/0: L(:1c1 16957.975801) 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2 ACK44 RM0) -1711462110.316334 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462110.316411 [0] recv: ACKNACK(F#9:90/0: L(:1c1 16957.975801) 110cd0d:79d6eeac:ea4a8907:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2 ACK44 RM44) -1711462110.376800 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462110.376901 [0] recvMC: HEARTBEAT(#29:20..20 L(:1c1 16958.036362)110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110d7b4:17c5b8c5:94bd0ff4:504@20(sync)) -1711462110.377090 [0] tev: acknack 110d7b4:17c5b8c5:94bd0ff4:504 -> 110443d:bb7f10a5:18901533:403: F#6:21/0: -1711462110.377127 [0] tev: send acknack(rd 110d7b4:17c5b8c5:94bd0ff4:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462110.377173 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.377134 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 52 from udp/10.101.12.71:52025 -1711462110.377252 [0] recvMC: HEARTBEAT(#35:24..24 L(:1c1 16958.036730)110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110d7b4:17c5b8c5:94bd0ff4:504@24(sync)) -1711462110.377269 [0] tev: nn_xpack_send 64: 0x7590e000139c:20 0x7590e400d398:44 [ udp/10.101.12.71:7417@2 ] -1711462110.377286 [0] tev: traffic-xmit (1) 64 -1711462110.377324 [0] tev: acknack 110d7b4:17c5b8c5:94bd0ff4:504 -> 110aba1:7b19badd:ce0adb73:403: F#5:25/0: -1711462110.377337 [0] tev: send acknack(rd 110d7b4:17c5b8c5:94bd0ff4:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462110.377372 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.377408 [0] tev: nn_xpack_send 64: 0x7590e000139c:20 0x7590e400d398:44 [ udp/10.101.12.71:7419@2 ] -1711462110.377502 [0] tev: traffic-xmit (1) 64 -1711462110.378905 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.379008 [0] recv: INFOTS(1711462110.378453601) -1711462110.379054 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #20 L(:1c1 16958.038508)) -1711462110.379095 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.379108 [0] recv: INFOTS(1711462110.378380676) -1711462110.379128 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #24 L(:1c1 16958.038608)) -1711462110.379178 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #20: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:403}} -1711462110.379228 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:403 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:403) - deleting -1711462110.379265 [0] dq.builtin: => EVERYONE -1711462110.379320 [0] dq.builtin: delete -1711462110.379352 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #24: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:403}} -1711462110.379348 [0] gc: gc 0x7590d8046810: not yet, shortsleep -1711462110.379381 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:403 ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:403) - deleting -1711462110.379441 [0] dq.builtin: => EVERYONE -1711462110.379460 [0] dq.builtin: delete -1711462110.379700 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462110.379773 [0] recv: HEARTBEAT(#9:20..20 L(:1c1 16958.039237)110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0: 110d7b4:17c5b8c5:94bd0ff4:3c7@20(sync)) -1711462110.379807 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.379820 [0] recv: INFOTS(1711462110.379581375) -1711462110.379846 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #14 L(:1c1 16958.039320)) -1711462110.379868 [0] tev: acknack 110d7b4:17c5b8c5:94bd0ff4:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#5:21/0: -1711462110.379897 [0] tev: send acknack(rd 110d7b4:17c5b8c5:94bd0ff4:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462110.379924 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.380025 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #14: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:504}} -1711462110.380043 [0] tev: nn_xpack_send 64: 0x7590e000139c:20 0x7590e400d398:44 [ udp/10.101.12.71:7416@2 ] -1711462110.380060 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:504 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:504) => EVERYONE -1711462110.380031 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 52 from udp/10.101.12.71:52025 -1711462110.380060 [0] tev: traffic-xmit (1) 64 -1711462110.380114 [0] dq.builtin: - deleting -1711462110.380150 [0] tev: acknack 110d7b4:17c5b8c5:94bd0ff4:3c7 -> 110aba1:7b19badd:ce0adb73:3c2: F#5:25/0: -1711462110.380114 [0] recv: HEARTBEAT(#8:24..24 L(:1c1 16958.039597)110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0: 110d7b4:17c5b8c5:94bd0ff4:3c7@24(sync)) -1711462110.380169 [0] tev: send acknack(rd 110d7b4:17c5b8c5:94bd0ff4:3c7 -> pwr 110aba1:7b19badd:ce0adb73:3c2) -1711462110.380217 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.380199 [0] dq.builtin: delete -1711462110.380277 [0] tev: nn_xpack_send 64: 0x7590e000139c:20 0x7590e400d398:44 [ udp/10.101.12.71:7418@2 ] -1711462110.380285 [0] tev: traffic-xmit (1) 64 -1711462110.380475 [0] gc: gc 0x7590d8046810: deleting -1711462110.380490 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d8046810, 110443d:bb7f10a5:18901533:403) -1711462110.380533 [0] gc: gc 0x7590d8021440: deleting -1711462110.380545 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d8021440, 110aba1:7b19badd:ce0adb73:403) -1711462110.380556 [0] gc: gc 0x7590d8049e20: deleting -1711462110.380585 [0] gc: gc_delete_proxy_reader (0x7590d8049e20, 110443d:bb7f10a5:18901533:504) -1711462110.380556 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7590d8046810, 110443d:bb7f10a5:18901533:403) -1711462110.380624 [0] gc: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7419@2 -1711462110.380630 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7590d8021440, 110aba1:7b19badd:ce0adb73:403) -1711462110.380649 [0] gc: reduced nlocs=4 -1711462110.380680 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.380696 [0] gc: rdidx 0 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462110.380715 [0] gc: rdidx 0 lidx udp/239.255.0.1:7401@2 3 -> 8 -1711462110.380734 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.380742 [0] gc: rdidx 1 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462110.380753 [0] gc: rdidx 1 lidx udp/239.255.0.1:7401@2 3 -> 8 -1711462110.380764 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.380771 [0] gc: rdidx 2 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462110.380783 [0] gc: rdidx 2 lidx udp/239.255.0.1:7401@2 3 -> 8 -1711462110.380797 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.380812 [0] gc: rdidx 3 lidx udp/10.101.12.71:7413@2 1 -> 0 -1711462110.380831 [0] gc: rdidx 3 lidx udp/239.255.0.1:7401@2 3 -> 8 -1711462110.380848 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.380895 [0] gc: rdidx 4 lidx udp/10.101.12.71:7419@2 2 -> 0 -1711462110.380846 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.380903 [0] gc: rdidx 4 lidx udp/239.255.0.1:7401@2 3 -> 8 -1711462110.380972 [0] recv: INFOTS(1711462110.380434543) -1711462110.381036 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #20 L(:1c1 16958.040471)) -1711462110.381010 [0] gc: a b c d e -1711462110.381063 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #20: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:504}} -1711462110.381084 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:504 ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:504) => EVERYONE -1711462110.381082 [0] gc: loc 0 = udp/10.101.12.71:7411@2 -1 { +u +u +u .. .. } -1711462110.381097 [0] dq.builtin: - deleting -1711462110.381118 [0] gc: loc 1 = udp/10.101.12.71:7413@2 1 { .. .. .. +u .. } -1711462110.381203 [0] gc: loc 2 = udp/10.101.12.71:7419@2 1 { .. .. .. .. +u } -1711462110.381224 [0] gc: loc 3 = udp/239.255.0.1:7401@2 -2 { +1 +1 +1 +1 +1 } -1711462110.381235 [0] gc: best = 3 -1711462110.381251 [0] gc: simple udp/239.255.0.1:7401@2 -1711462110.381287 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462110.381307 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=13 -1711462110.381317 [0] dq.builtin: delete -1711462110.381324 [0] gc: gc 0x7590d8046810: deleting -1711462110.381337 [0] gc: gc_delete_proxy_writer (0x7590d8046810, 110443d:bb7f10a5:18901533:403) -1711462110.381363 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:504, 7): 1 -> 7 -1711462110.381376 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=12 -1711462110.381386 [0] gc: gc 0x7590d8021440: deleting -1711462110.381396 [0] gc: gc_delete_proxy_writer (0x7590d8021440, 110aba1:7b19badd:ce0adb73:403) -1711462110.381417 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:504, 6): 7 -> 6 -1711462110.381430 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=13 -1711462110.381453 [0] gc: gc 0x7590d8055680: deleting -1711462110.381461 [0] gc: gc_delete_proxy_reader (0x7590d8055680, 110aba1:7b19badd:ce0adb73:504) -1711462110.381481 [0] gc: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 udp/10.101.12.71:7413@2 -1711462110.381496 [0] gc: reduced nlocs=3 -1711462110.381505 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.381521 [0] gc: rdidx 0 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462110.381531 [0] gc: rdidx 0 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462110.381543 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.381550 [0] gc: rdidx 1 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462110.381568 [0] gc: rdidx 1 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462110.381578 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.381591 [0] gc: rdidx 2 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462110.381603 [0] gc: rdidx 2 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462110.381618 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.381630 [0] gc: rdidx 3 lidx udp/10.101.12.71:7413@2 1 -> 0 -1711462110.381644 [0] gc: rdidx 3 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462110.381659 [0] gc: a b c d -1711462110.381679 [0] gc: loc 0 = udp/10.101.12.71:7411@2 -1 { +u +u +u .. } -1711462110.381694 [0] gc: loc 1 = udp/10.101.12.71:7413@2 1 { .. .. .. +u } -1711462110.381712 [0] gc: loc 2 = udp/239.255.0.1:7401@2 -1 { +1 +1 +1 +1 } -1711462110.381723 [0] gc: best = 2 -1711462110.381752 [0] gc: simple udp/239.255.0.1:7401@2 -1711462110.381768 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462110.381778 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=12 -1711462110.385415 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.385421 [0] recv: INFOTS(1711462110.385271352) -1711462110.385433 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #2) -1711462110.385456 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110aba1:7b19badd:ce0adb73:1c1}} -1711462110.385472 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.385653 [0] recv: INFOTS(1711462110.385271352) -1711462110.385645 [0] dq.builtin: SPDP ST3 110aba1:7b19badd:ce0adb73:1c1ddsi_delete_proxy_participant_by_guid(110aba1:7b19badd:ce0adb73:1c1) - deleting -1711462110.385662 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #2) -1711462110.385679 [0] dq.builtin: => EVERYONE -1711462110.385695 [0] dq.builtin: delete_ppt(110aba1:7b19badd:ce0adb73:1c1) - deleting dependent proxy participants -1711462110.385710 [0] dq.builtin: delete_ppt(110aba1:7b19badd:ce0adb73:1c1) - deleting endpoints -1711462110.385738 [0] dq.builtin: ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:301c4) - deleting -1711462110.385754 [0] dq.builtin: ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:301c3) - deleting -1711462110.385766 [0] gc: gc 0x7590d8050e30: not yet, shortsleep -1711462110.385768 [0] dq.builtin: ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:300c4) - deleting -1711462110.385788 [0] dq.builtin: ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:300c3) - deleting -1711462110.385802 [0] dq.builtin: ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:200c7) - deleting -1711462110.385816 [0] dq.builtin: ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:200c2) - deleting -1711462110.385830 [0] dq.builtin: ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:4c7) - deleting -1711462110.385846 [0] dq.builtin: ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:4c2) - deleting -1711462110.385857 [0] dq.builtin: ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:3c7) - deleting -1711462110.385867 [0] dq.builtin: ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:3c2) - deleting -1711462110.385877 [0] dq.builtin: ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:100c7) - deleting -1711462110.385886 [0] dq.builtin: delete -1711462110.385903 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110aba1:7b19badd:ce0adb73:1c1}} -1711462110.385913 [0] dq.builtin: SPDP ST3 110aba1:7b19badd:ce0adb73:1c1 unknown not allowed -1711462110.386866 [0] gc: gc 0x7590d8050e30: deleting -1711462110.386889 [0] gc: gc_delete_proxy_reader (0x7590d8050e30, 110aba1:7b19badd:ce0adb73:301c4) -1711462110.386916 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7416@2 -1711462110.386924 [0] gc: reduced nlocs=4 -1711462110.386934 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.386952 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.386960 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.386968 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.386974 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.386982 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.386990 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387001 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.387012 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387024 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387034 [0] gc: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462110.387045 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387056 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387061 [0] gc: rdidx 4 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.387071 [0] gc: rdidx 4 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387084 [0] gc: a b c d e -1711462110.387097 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. .. } -1711462110.387108 [0] gc: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u .. } -1711462110.387114 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. .. .. .. +u } -1711462110.387123 [0] gc: loc 3 = udp/239.255.0.1:7400@2 -2 { +1 +1 +1 +1 +1 } -1711462110.387129 [0] gc: best = 3 -1711462110.387135 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.387149 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.387156 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=11 -1711462110.387168 [0] gc: gc 0x7590d8046810: deleting -1711462110.387176 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d8046810, 110aba1:7b19badd:ce0adb73:301c3) -1711462110.387201 [0] gc: gc 0x7590d8021440: deleting -1711462110.387208 [0] gc: gc_delete_proxy_reader (0x7590d8021440, 110aba1:7b19badd:ce0adb73:300c4) -1711462110.387221 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d8046810, 110aba1:7b19badd:ce0adb73:301c3) -1711462110.387227 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7416@2 -1711462110.387256 [0] gc: reduced nlocs=4 -1711462110.387267 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387275 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.387294 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387303 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387313 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.387324 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387333 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387340 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.387347 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387352 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387361 [0] gc: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462110.387368 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387379 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387384 [0] gc: rdidx 4 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.387398 [0] gc: rdidx 4 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387410 [0] gc: a b c d e -1711462110.387426 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. .. } -1711462110.387437 [0] gc: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u .. } -1711462110.387446 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. .. .. .. +u } -1711462110.387459 [0] gc: loc 3 = udp/239.255.0.1:7400@2 -2 { +1 +1 +1 +1 +1 } -1711462110.387467 [0] gc: best = 3 -1711462110.387476 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.387488 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.387501 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=10 -1711462110.387511 [0] gc: gc 0x7590d80494f0: deleting -1711462110.387515 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d80494f0, 110aba1:7b19badd:ce0adb73:300c3) -1711462110.387528 [0] gc: gc 0x7590d80544c0: deleting -1711462110.387537 [0] gc: gc_delete_proxy_reader (0x7590d80544c0, 110aba1:7b19badd:ce0adb73:200c7) -1711462110.387536 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d80494f0, 110aba1:7b19badd:ce0adb73:300c3) -1711462110.387556 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7416@2 -1711462110.387578 [0] gc: reduced nlocs=4 -1711462110.387586 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387595 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.387603 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387611 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387620 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.387630 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387634 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387643 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.387651 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387662 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387666 [0] gc: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462110.387679 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387685 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387693 [0] gc: rdidx 4 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.387704 [0] gc: rdidx 4 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387715 [0] gc: a b c d e -1711462110.387728 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. .. } -1711462110.387747 [0] gc: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u .. } -1711462110.387758 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. .. .. .. +u } -1711462110.387769 [0] gc: loc 3 = udp/239.255.0.1:7400@2 -2 { +1 +1 +1 +1 +1 } -1711462110.387777 [0] gc: best = 3 -1711462110.387785 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.387797 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.387807 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=9 -1711462110.387813 [0] gc: gc 0x7590d8052960: deleting -1711462110.387818 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d8052960, 110aba1:7b19badd:ce0adb73:200c2) -1711462110.387827 [0] gc: gc 0x7590d8048bd0: deleting -1711462110.387834 [0] gc: gc_delete_proxy_reader (0x7590d8048bd0, 110aba1:7b19badd:ce0adb73:4c7) -1711462110.387835 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d8052960, 110aba1:7b19badd:ce0adb73:200c2) -1711462110.387854 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7416@2 -1711462110.387870 [0] gc: reduced nlocs=4 -1711462110.387877 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387884 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.387890 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387895 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387900 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.387912 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387918 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387927 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.387935 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387945 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387954 [0] gc: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462110.387963 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387973 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387980 [0] gc: rdidx 4 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.387990 [0] gc: rdidx 4 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387999 [0] gc: a b c d e -1711462110.388010 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. .. } -1711462110.388021 [0] gc: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u .. } -1711462110.388030 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. .. .. .. +u } -1711462110.388042 [0] gc: loc 3 = udp/239.255.0.1:7400@2 -2 { +1 +1 +1 +1 +1 } -1711462110.388051 [0] gc: best = 3 -1711462110.388059 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.388070 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.388079 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=8 -1711462110.388086 [0] gc: gc 0x7590d804a6e0: deleting -1711462110.388121 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d804a6e0, 110aba1:7b19badd:ce0adb73:4c2) -1711462110.388129 [0] gc: gc 0x7590d8054d80: deleting -1711462110.388134 [0] gc: gc_delete_proxy_reader (0x7590d8054d80, 110aba1:7b19badd:ce0adb73:3c7) -1711462110.388137 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d804a6e0, 110aba1:7b19badd:ce0adb73:4c2) -1711462110.388147 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7416@2 -1711462110.388155 [0] gc: reduced nlocs=4 -1711462110.388162 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388168 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.388174 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388179 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388184 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.388189 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388193 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388201 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.388209 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388213 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388222 [0] gc: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462110.388228 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388232 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388237 [0] gc: rdidx 4 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.388242 [0] gc: rdidx 4 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388248 [0] gc: a b c d e -1711462110.388256 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. .. } -1711462110.388264 [0] gc: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u .. } -1711462110.388270 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. .. .. .. +u } -1711462110.388277 [0] gc: loc 3 = udp/239.255.0.1:7400@2 -2 { +1 +1 +1 +1 +1 } -1711462110.388281 [0] gc: best = 3 -1711462110.388285 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.388293 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.388298 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=7 -1711462110.388305 [0] gc: gc 0x7590d8049e20: deleting -1711462110.388309 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d8049e20, 110aba1:7b19badd:ce0adb73:3c2) -1711462110.388319 [0] gc: gc 0x7590d8055680: deleting -1711462110.388324 [0] gc: gc_delete_proxy_reader (0x7590d8055680, 110aba1:7b19badd:ce0adb73:100c7) -1711462110.388328 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=6 -1711462110.388336 [0] gc: gc 0x7590d803a600: deleting -1711462110.388343 [0] gc: gc_delete_proxy_participant(0x7590d803a600, 110aba1:7b19badd:ce0adb73:1c1) -1711462110.388389 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d8049e20, 110aba1:7b19badd:ce0adb73:3c2) -1711462110.388413 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=5 -1711462110.388439 [0] gc: gc 0x7590d8046810: deleting -1711462110.388451 [0] gc: gc_delete_proxy_writer (0x7590d8046810, 110aba1:7b19badd:ce0adb73:301c3) -1711462110.388471 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:301c4, 3): 1 -> 3 -1711462110.388483 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=4 -1711462110.388522 [0] gc: gc 0x7590d80494f0: deleting -1711462110.388529 [0] gc: gc_delete_proxy_writer (0x7590d80494f0, 110aba1:7b19badd:ce0adb73:300c3) -1711462110.388543 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:300c4, 3): 1 -> 3 -1711462110.388555 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=3 -1711462110.388565 [0] gc: gc 0x7590d8052960: deleting -1711462110.388575 [0] gc: gc_delete_proxy_writer (0x7590d8052960, 110aba1:7b19badd:ce0adb73:200c2) -1711462110.388600 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:200c7, 6): 1 -> 6 -1711462110.388615 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=2 -1711462110.388628 [0] gc: gc 0x7590d804a6e0: deleting -1711462110.388639 [0] gc: gc_delete_proxy_writer (0x7590d804a6e0, 110aba1:7b19badd:ce0adb73:4c2) -1711462110.388653 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:4c7, 5): 1 -> 5 -1711462110.388662 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=1 -1711462110.388673 [0] gc: gc 0x7590d8049e20: deleting -1711462110.388680 [0] gc: gc_delete_proxy_writer (0x7590d8049e20, 110aba1:7b19badd:ce0adb73:3c2) -1711462110.388692 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:3c7, 6): 1 -> 6 -1711462110.388704 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=0, freeing -1711462110.388717 [0] gc: lease_unregister(l 0x7590d804c550 guid 110aba1:7b19badd:ce0adb73:1c1) -1711462110.388731 [0] gc: lease_free(l 0x7590d804c550 guid 110aba1:7b19badd:ce0adb73:1c1) -1711462110.388741 [0] gc: lease_free(l 0x7590d804c4d0 guid 110aba1:7b19badd:ce0adb73:1c1) -1711462110.388753 [0] gc: ddsi_remove_deleted_participant_guid(110aba1:7b19badd:ce0adb73:1c1 for_what=3) -1711462110.388765 [0] gc: gc 0x7590d8014d00: deleting -1711462110.391681 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.391709 [0] recvMC: HEARTBEAT(#30:22..22 L(:1c1 16958.051198)110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110d7b4:17c5b8c5:94bd0ff4:504@22(sync)) -1711462110.391744 [0] tev: acknack 110d7b4:17c5b8c5:94bd0ff4:504 -> 110e21c:d0762c48:a9f0fb28:403: F#5:23/0: -1711462110.391764 [0] tev: send acknack(rd 110d7b4:17c5b8c5:94bd0ff4:504 -> pwr 110e21c:d0762c48:a9f0fb28:403) -1711462110.391771 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.391800 [0] tev: nn_xpack_send 64: 0x7590e000139c:20 0x7590e400d398:44 [ udp/10.101.12.71:7413@2 ] -1711462110.391804 [0] tev: traffic-xmit (1) 64 -1711462110.392134 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.392139 [0] recv: INFOTS(1711462110.392032273) -1711462110.392147 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #20 L(:1c1 16958.051642)) -1711462110.392174 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #20: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:403}} -1711462110.392188 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:403 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:403) - deleting -1711462110.392206 [0] dq.builtin: => EVERYONE -1711462110.392225 [0] dq.builtin: delete -1711462110.392238 [0] gc: gc 0x7590d8050e30: deleting -1711462110.392250 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d8050e30, 110e21c:d0762c48:a9f0fb28:403) -1711462110.392269 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7590d8050e30, 110e21c:d0762c48:a9f0fb28:403) -1711462110.392285 [0] gc: gc 0x7590d8050e30: deleting -1711462110.392295 [0] gc: gc_delete_proxy_writer (0x7590d8050e30, 110e21c:d0762c48:a9f0fb28:403) -1711462110.392312 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:504, 6): 7 -> 6 -1711462110.392324 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=13 -1711462110.392414 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.392419 [0] recv: INFOTS(1711462110.384844509) -1711462110.392426 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #2) -1711462110.392438 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110443d:bb7f10a5:18901533:1c1}} -1711462110.392450 [0] dq.builtin: SPDP ST3 110443d:bb7f10a5:18901533:1c1ddsi_delete_proxy_participant_by_guid(110443d:bb7f10a5:18901533:1c1) - deleting -1711462110.392457 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.392470 [0] dq.builtin: => EVERYONE -1711462110.392483 [0] recv: INFOTS(1711462110.384844509) -1711462110.392491 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #2) -1711462110.392483 [0] dq.builtin: delete_ppt(110443d:bb7f10a5:18901533:1c1) - deleting dependent proxy participants -1711462110.392525 [0] dq.builtin: delete_ppt(110443d:bb7f10a5:18901533:1c1) - deleting endpoints -1711462110.392537 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:301c4) - deleting -1711462110.392578 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:301c3) - deleting -1711462110.392580 [0] gc: gc 0x7590d801b140: not yet, shortsleep -1711462110.392605 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:300c4) - deleting -1711462110.392617 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:300c3) - deleting -1711462110.392628 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:200c7) - deleting -1711462110.392639 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:200c2) - deleting -1711462110.392652 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:4c7) - deleting -1711462110.392663 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:4c2) - deleting -1711462110.392674 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:3c7) - deleting -1711462110.392686 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:3c2) - deleting -1711462110.392697 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:100c7) - deleting -1711462110.392707 [0] dq.builtin: delete -1711462110.392724 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110443d:bb7f10a5:18901533:1c1}} -1711462110.392734 [0] dq.builtin: SPDP ST3 110443d:bb7f10a5:18901533:1c1 unknown not allowed -1711462110.393358 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.393365 [0] recv: INFOTS(1711462110.393273698) -1711462110.393401 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #16 L(:1c1 16958.052868)) -1711462110.393461 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #16: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:504}} -1711462110.393475 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:504 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:504) => EVERYONE -1711462110.393487 [0] dq.builtin: - deleting -1711462110.393497 [0] dq.builtin: delete -1711462110.393659 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.393662 [0] gc: gc 0x7590d801b140: deleting -1711462110.393704 [0] gc: gc_delete_proxy_reader (0x7590d801b140, 110443d:bb7f10a5:18901533:301c4) -1711462110.393704 [0] recv: HEARTBEAT(#11:16..16 L(:1c1 16958.053195)110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0: 110d7b4:17c5b8c5:94bd0ff4:4c7@16(sync)) -1711462110.393729 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 -1711462110.393730 [0] tev: acknack 110d7b4:17c5b8c5:94bd0ff4:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#5:17/0: -1711462110.393748 [0] gc: reduced nlocs=3 -1711462110.393763 [0] tev: send acknack(rd 110d7b4:17c5b8c5:94bd0ff4:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.393770 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393774 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.393784 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.393803 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393812 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393831 [0] tev: nn_xpack_send 64: 0x7590e000139c:20 0x7590e400d398:44 [ udp/10.101.12.71:7412@2 ] -1711462110.393841 [0] tev: traffic-xmit (1) 64 -1711462110.393833 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.393864 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393875 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393883 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.393891 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393899 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393907 [0] gc: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462110.393914 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393926 [0] gc: a b c d -1711462110.393937 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. } -1711462110.393949 [0] gc: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u } -1711462110.393961 [0] gc: loc 2 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462110.393966 [0] gc: best = 2 -1711462110.393979 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.393991 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394000 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=11 -1711462110.394009 [0] gc: gc 0x7590d8050e30: deleting -1711462110.394020 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d8050e30, 110443d:bb7f10a5:18901533:301c3) -1711462110.394028 [0] gc: gc 0x7590d8046810: deleting -1711462110.394033 [0] gc: gc_delete_proxy_reader (0x7590d8046810, 110443d:bb7f10a5:18901533:300c4) -1711462110.394038 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d8050e30, 110443d:bb7f10a5:18901533:301c3) -1711462110.394054 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 -1711462110.394063 [0] gc: reduced nlocs=3 -1711462110.394070 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394078 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394085 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394093 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394100 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394108 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394117 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394124 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394132 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394140 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394148 [0] gc: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462110.394155 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394164 [0] gc: a b c d -1711462110.394174 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. } -1711462110.394185 [0] gc: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u } -1711462110.394196 [0] gc: loc 2 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462110.394201 [0] gc: best = 2 -1711462110.394206 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394224 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394232 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=10 -1711462110.394250 [0] gc: gc 0x7590d804ffa0: deleting -1711462110.394259 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d804ffa0, 110443d:bb7f10a5:18901533:300c3) -1711462110.394269 [0] gc: gc 0x7590d804f540: deleting -1711462110.394275 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d804ffa0, 110443d:bb7f10a5:18901533:300c3) -1711462110.394278 [0] gc: gc_delete_proxy_reader (0x7590d804f540, 110443d:bb7f10a5:18901533:200c7) -1711462110.394309 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 -1711462110.394319 [0] gc: reduced nlocs=3 -1711462110.394327 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394335 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394345 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394355 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394362 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394373 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394381 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394389 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394397 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394404 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394412 [0] gc: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462110.394419 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394426 [0] gc: a b c d -1711462110.394436 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. } -1711462110.394447 [0] gc: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u } -1711462110.394458 [0] gc: loc 2 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462110.394464 [0] gc: best = 2 -1711462110.394471 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394482 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394491 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=9 -1711462110.394501 [0] gc: gc 0x7590d804eae0: deleting -1711462110.394508 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d804eae0, 110443d:bb7f10a5:18901533:200c2) -1711462110.394518 [0] gc: gc 0x7590d804e080: deleting -1711462110.394527 [0] gc: gc_delete_proxy_reader (0x7590d804e080, 110443d:bb7f10a5:18901533:4c7) -1711462110.394527 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d804eae0, 110443d:bb7f10a5:18901533:200c2) -1711462110.394544 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 -1711462110.394555 [0] gc: reduced nlocs=3 -1711462110.394563 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394577 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394587 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394595 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394608 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394615 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394623 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394630 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394638 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394644 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394655 [0] gc: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462110.394666 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394673 [0] gc: a b c d -1711462110.394689 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. } -1711462110.394700 [0] gc: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u } -1711462110.394710 [0] gc: loc 2 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462110.394716 [0] gc: best = 2 -1711462110.394723 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394735 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394744 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=8 -1711462110.394753 [0] gc: gc 0x7590d804d470: deleting -1711462110.394759 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d804d470, 110443d:bb7f10a5:18901533:4c2) -1711462110.394767 [0] gc: gc 0x7590d804cb90: deleting -1711462110.394775 [0] gc: gc_delete_proxy_reader (0x7590d804cb90, 110443d:bb7f10a5:18901533:3c7) -1711462110.394776 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d804d470, 110443d:bb7f10a5:18901533:4c2) -1711462110.394792 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 udp/10.101.12.71:7412@2 -1711462110.394803 [0] gc: reduced nlocs=3 -1711462110.394811 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394820 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394827 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394835 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394843 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394852 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394859 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394867 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.394876 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394885 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394892 [0] gc: rdidx 3 lidx udp/10.101.12.71:7412@2 1 -> 0 -1711462110.394904 [0] gc: rdidx 3 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394914 [0] gc: a b c d -1711462110.394924 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u .. } -1711462110.394933 [0] gc: loc 1 = udp/10.101.12.71:7412@2 1 { .. .. .. +u } -1711462110.394943 [0] gc: loc 2 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462110.394949 [0] gc: best = 2 -1711462110.394955 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394967 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394976 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=7 -1711462110.394984 [0] gc: gc 0x7590d8021440: deleting -1711462110.394989 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d8021440, 110443d:bb7f10a5:18901533:3c2) -1711462110.394997 [0] gc: gc 0x7590d804fb10: deleting -1711462110.395003 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d8021440, 110443d:bb7f10a5:18901533:3c2) -1711462110.395004 [0] gc: gc_delete_proxy_reader (0x7590d804fb10, 110443d:bb7f10a5:18901533:100c7) -1711462110.395023 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=6 -1711462110.395031 [0] gc: gc 0x7590d804f0b0: deleting -1711462110.395038 [0] gc: gc_delete_proxy_participant(0x7590d804f0b0, 110443d:bb7f10a5:18901533:1c1) -1711462110.395044 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=5 -1711462110.395050 [0] gc: gc 0x7590d804e650: deleting -1711462110.395063 [0] gc: gc_delete_proxy_reader (0x7590d804e650, 110e21c:d0762c48:a9f0fb28:504) -1711462110.395078 [0] gc: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7411@2 -1711462110.395085 [0] gc: reduced nlocs=2 -1711462110.395092 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395100 [0] gc: rdidx 0 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462110.395109 [0] gc: rdidx 0 lidx udp/239.255.0.1:7401@2 1 -> 8 -1711462110.395115 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395123 [0] gc: rdidx 1 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462110.395130 [0] gc: rdidx 1 lidx udp/239.255.0.1:7401@2 1 -> 8 -1711462110.395138 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395145 [0] gc: rdidx 2 lidx udp/10.101.12.71:7411@2 0 -> 0 -1711462110.395152 [0] gc: rdidx 2 lidx udp/239.255.0.1:7401@2 1 -> 8 -1711462110.395160 [0] gc: a b c -1711462110.395170 [0] gc: loc 0 = udp/10.101.12.71:7411@2 -1 { +u +u +u } -1711462110.395179 [0] gc: loc 1 = udp/239.255.0.1:7401@2 0 { +1 +1 +1 } -1711462110.395190 [0] gc: best = 0 -1711462110.395197 [0] gc: simple udp/10.101.12.71:7411@2 -1711462110.395209 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:403): udp/10.101.12.71:7411@2 (burst size 4294901760 rexmit 1048576) -1711462110.395218 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=12 -1711462110.395227 [0] gc: gc 0x7590d8050e30: deleting -1711462110.395233 [0] gc: gc_delete_proxy_writer (0x7590d8050e30, 110443d:bb7f10a5:18901533:301c3) -1711462110.395242 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:301c4, 3): 3 -> 3 -1711462110.395251 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=4 -1711462110.395258 [0] gc: gc 0x7590d804ffa0: deleting -1711462110.395266 [0] gc: gc_delete_proxy_writer (0x7590d804ffa0, 110443d:bb7f10a5:18901533:300c3) -1711462110.395274 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:300c4, 3): 3 -> 3 -1711462110.395283 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=3 -1711462110.395291 [0] gc: gc 0x7590d804eae0: deleting -1711462110.395298 [0] gc: gc_delete_proxy_writer (0x7590d804eae0, 110443d:bb7f10a5:18901533:200c2) -1711462110.395307 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:200c7, 6): 6 -> 6 -1711462110.395317 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=2 -1711462110.395324 [0] gc: gc 0x7590d804d470: deleting -1711462110.395332 [0] gc: gc_delete_proxy_writer (0x7590d804d470, 110443d:bb7f10a5:18901533:4c2) -1711462110.395339 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:4c7, 5): 5 -> 5 -1711462110.395349 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=1 -1711462110.395357 [0] gc: gc 0x7590d8021440: deleting -1711462110.395363 [0] gc: gc_delete_proxy_writer (0x7590d8021440, 110443d:bb7f10a5:18901533:3c2) -1711462110.395371 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:3c7, 6): 6 -> 6 -1711462110.395381 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=0, freeing -1711462110.395387 [0] gc: lease_unregister(l 0x7590d80151b0 guid 110443d:bb7f10a5:18901533:1c1) -1711462110.395395 [0] gc: lease_free(l 0x7590d80151b0 guid 110443d:bb7f10a5:18901533:1c1) -1711462110.395402 [0] gc: lease_free(l 0x7590d8015130 guid 110443d:bb7f10a5:18901533:1c1) -1711462110.395412 [0] gc: ddsi_remove_deleted_participant_guid(110443d:bb7f10a5:18901533:1c1 for_what=3) -1711462110.395423 [0] gc: gc 0x7590d8014d00: deleting -1711462110.395619 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.395644 [0] recv: HEARTBEAT(#11:20..20 L(:1c1 16958.055136)110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0: 110d7b4:17c5b8c5:94bd0ff4:3c7@20(sync)) -1711462110.395658 [0] tev: acknack 110d7b4:17c5b8c5:94bd0ff4:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#5:21/0: -1711462110.395673 [0] tev: send acknack(rd 110d7b4:17c5b8c5:94bd0ff4:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.395684 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.395720 [0] tev: nn_xpack_send 64: 0x7590e000139c:20 0x7590e400d398:44 [ udp/10.101.12.71:7412@2 ] -1711462110.395727 [0] tev: traffic-xmit (1) 64 -1711462110.404301 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.404312 [0] recv: INFOTS(1711462110.397918357) -1711462110.404336 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #2) -1711462110.404352 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.404356 [0] recv: INFOTS(1711462110.397918357) -1711462110.404377 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #2) -1711462110.404408 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110e21c:d0762c48:a9f0fb28:1c1}} -1711462110.404434 [0] dq.builtin: SPDP ST3 110e21c:d0762c48:a9f0fb28:1c1ddsi_delete_proxy_participant_by_guid(110e21c:d0762c48:a9f0fb28:1c1) - deleting -1711462110.404452 [0] dq.builtin: => EVERYONE -1711462110.404481 [0] dq.builtin: delete_ppt(110e21c:d0762c48:a9f0fb28:1c1) - deleting dependent proxy participants -1711462110.404493 [0] dq.builtin: delete_ppt(110e21c:d0762c48:a9f0fb28:1c1) - deleting endpoints -1711462110.404531 [0] dq.builtin: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:301c4) - deleting -1711462110.404557 [0] dq.builtin: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:301c3) - deleting -1711462110.404571 [0] dq.builtin: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:300c4) - deleting -1711462110.404573 [0] gc: gc 0x7590d801b140: not yet, shortsleep -1711462110.404585 [0] dq.builtin: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:300c3) - deleting -1711462110.404616 [0] dq.builtin: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:200c7) - deleting -1711462110.404633 [0] dq.builtin: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:200c2) - deleting -1711462110.404646 [0] dq.builtin: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:4c7) - deleting -1711462110.404659 [0] dq.builtin: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:4c2) - deleting -1711462110.404683 [0] dq.builtin: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:3c7) - deleting -1711462110.404696 [0] dq.builtin: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:3c2) - deleting -1711462110.404707 [0] dq.builtin: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:100c7) - deleting -1711462110.404714 [0] dq.builtin: delete -1711462110.404730 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110e21c:d0762c48:a9f0fb28:1c1}} -1711462110.404739 [0] dq.builtin: SPDP ST3 110e21c:d0762c48:a9f0fb28:1c1 unknown not allowed -1711462110.405657 [0] gc: gc 0x7590d801b140: deleting -1711462110.405666 [0] gc: gc_delete_proxy_reader (0x7590d801b140, 110e21c:d0762c48:a9f0fb28:301c4) -1711462110.405690 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 -1711462110.405703 [0] gc: reduced nlocs=2 -1711462110.405715 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.405726 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.405735 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.405746 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.405754 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.405779 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.405788 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.405798 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.405806 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.405818 [0] gc: a b c -1711462110.405832 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u } -1711462110.405842 [0] gc: loc 1 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.405850 [0] gc: best = 0 -1711462110.405858 [0] gc: simple udp/10.101.12.71:7410@2 -1711462110.405870 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:301c3): udp/10.101.12.71:7410@2 (burst size 4294901760 rexmit 1048576) -1711462110.405881 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=11 -1711462110.405891 [0] gc: gc 0x7590d8020ea0: deleting -1711462110.405900 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d8020ea0, 110e21c:d0762c48:a9f0fb28:301c3) -1711462110.405909 [0] gc: gc 0x7590d8050e30: deleting -1711462110.405916 [0] gc: gc_delete_proxy_reader (0x7590d8050e30, 110e21c:d0762c48:a9f0fb28:300c4) -1711462110.405917 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d8020ea0, 110e21c:d0762c48:a9f0fb28:301c3) -1711462110.405933 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 -1711462110.405955 [0] gc: reduced nlocs=2 -1711462110.405964 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.405973 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.405982 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.405991 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.405999 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.406023 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406031 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406039 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.406049 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406058 [0] gc: a b c -1711462110.406070 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u } -1711462110.406081 [0] gc: loc 1 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.406087 [0] gc: best = 0 -1711462110.406094 [0] gc: simple udp/10.101.12.71:7410@2 -1711462110.406106 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:300c3): udp/10.101.12.71:7410@2 (burst size 4294901760 rexmit 1048576) -1711462110.406116 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=10 -1711462110.406126 [0] gc: gc 0x7590d8046810: deleting -1711462110.406134 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d8046810, 110e21c:d0762c48:a9f0fb28:300c3) -1711462110.406143 [0] gc: gc 0x7590d8018b90: deleting -1711462110.406150 [0] gc: gc_delete_proxy_reader (0x7590d8018b90, 110e21c:d0762c48:a9f0fb28:200c7) -1711462110.406150 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d8046810, 110e21c:d0762c48:a9f0fb28:300c3) -1711462110.406167 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 -1711462110.406181 [0] gc: reduced nlocs=2 -1711462110.406190 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406201 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.406210 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406218 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406227 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.406244 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406252 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406261 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.406269 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406280 [0] gc: a b c -1711462110.406293 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u } -1711462110.406303 [0] gc: loc 1 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.406309 [0] gc: best = 0 -1711462110.406316 [0] gc: simple udp/10.101.12.71:7410@2 -1711462110.406328 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:200c2): udp/10.101.12.71:7410@2 (burst size 4294901760 rexmit 1048576) -1711462110.406338 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=9 -1711462110.406353 [0] gc: gc 0x7590d8018130: deleting -1711462110.406360 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d8018130, 110e21c:d0762c48:a9f0fb28:200c2) -1711462110.406368 [0] gc: gc 0x7590d804f540: deleting -1711462110.406374 [0] gc: gc_delete_proxy_reader (0x7590d804f540, 110e21c:d0762c48:a9f0fb28:4c7) -1711462110.406373 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d8018130, 110e21c:d0762c48:a9f0fb28:200c2) -1711462110.406402 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 -1711462110.406412 [0] gc: reduced nlocs=2 -1711462110.406422 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406431 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.406439 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406445 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406455 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.406463 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406472 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406480 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.406488 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406496 [0] gc: a b c -1711462110.406507 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u } -1711462110.406517 [0] gc: loc 1 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.406524 [0] gc: best = 0 -1711462110.406530 [0] gc: simple udp/10.101.12.71:7410@2 -1711462110.406541 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:4c2): udp/10.101.12.71:7410@2 (burst size 4294901760 rexmit 1048576) -1711462110.406550 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=8 -1711462110.406558 [0] gc: gc 0x7590d80176d0: deleting -1711462110.406565 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d80176d0, 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.406573 [0] gc: gc 0x7590d804e080: deleting -1711462110.406579 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d80176d0, 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.406582 [0] gc: gc_delete_proxy_reader (0x7590d804e080, 110e21c:d0762c48:a9f0fb28:3c7) -1711462110.406611 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7410@2 -1711462110.406618 [0] gc: reduced nlocs=2 -1711462110.406627 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406640 [0] gc: rdidx 0 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.406649 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406656 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406665 [0] gc: rdidx 1 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.406679 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406688 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406697 [0] gc: rdidx 2 lidx udp/10.101.12.71:7410@2 0 -> 0 -1711462110.406705 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406716 [0] gc: a b c -1711462110.406725 [0] gc: loc 0 = udp/10.101.12.71:7410@2 -1 { +u +u +u } -1711462110.406735 [0] gc: loc 1 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.406740 [0] gc: best = 0 -1711462110.406748 [0] gc: simple udp/10.101.12.71:7410@2 -1711462110.406759 [0] gc: ddsi_rebuild_writer_addrset(110d7b4:17c5b8c5:94bd0ff4:3c2): udp/10.101.12.71:7410@2 (burst size 4294901760 rexmit 1048576) -1711462110.406768 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=7 -1711462110.406777 [0] gc: gc 0x7590d804cb90: deleting -1711462110.406783 [0] gc: gc_delete_proxy_writer_dqueue(0x7590d804cb90, 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.406790 [0] gc: gc 0x7590d8016090: deleting -1711462110.406796 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7590d804cb90, 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.406798 [0] gc: gc_delete_proxy_reader (0x7590d8016090, 110e21c:d0762c48:a9f0fb28:100c7) -1711462110.406822 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=6 -1711462110.406830 [0] gc: gc 0x7590d80157d0: deleting -1711462110.406837 [0] gc: gc_delete_proxy_participant(0x7590d80157d0, 110e21c:d0762c48:a9f0fb28:1c1) -1711462110.406843 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=5 -1711462110.406850 [0] gc: gc 0x7590d8020ea0: deleting -1711462110.406857 [0] gc: gc_delete_proxy_writer (0x7590d8020ea0, 110e21c:d0762c48:a9f0fb28:301c3) -1711462110.406867 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:301c4, 3): 3 -> 3 -1711462110.406878 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=4 -1711462110.406886 [0] gc: gc 0x7590d8046810: deleting -1711462110.406893 [0] gc: gc_delete_proxy_writer (0x7590d8046810, 110e21c:d0762c48:a9f0fb28:300c3) -1711462110.406903 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:300c4, 3): 3 -> 3 -1711462110.406915 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=3 -1711462110.406924 [0] gc: gc 0x7590d8018130: deleting -1711462110.406930 [0] gc: gc_delete_proxy_writer (0x7590d8018130, 110e21c:d0762c48:a9f0fb28:200c2) -1711462110.406939 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:200c7, 5): 6 -> 5 -1711462110.406949 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=2 -1711462110.406957 [0] gc: gc 0x7590d80176d0: deleting -1711462110.406964 [0] gc: gc_delete_proxy_writer (0x7590d80176d0, 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.406973 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:4c7, 6): 5 -> 6 -1711462110.406984 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=1 -1711462110.406993 [0] gc: gc 0x7590d804cb90: deleting -1711462110.406999 [0] gc: gc_delete_proxy_writer (0x7590d804cb90, 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.407008 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:3c7, 6): 6 -> 6 -1711462110.407019 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=0, freeing -1711462110.407027 [0] gc: lease_unregister(l 0x7590d8001c90 guid 110e21c:d0762c48:a9f0fb28:1c1) -1711462110.407035 [0] gc: lease_free(l 0x7590d8001c90 guid 110e21c:d0762c48:a9f0fb28:1c1) -1711462110.407042 [0] gc: lease_free(l 0x7590d8001c10 guid 110e21c:d0762c48:a9f0fb28:1c1) -1711462110.407059 [0] gc: ddsi_remove_deleted_participant_guid(110e21c:d0762c48:a9f0fb28:1c1 for_what=3) -1711462110.407069 [0] gc: gc 0x7590d8014d00: deleting -1711462110.413296 [0] tev: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:403 multicasting (rel-prd 3 seq-eq-max 3 seq 90 maxseq 46) -1711462110.413378 [0] tev: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:403) sent, resched in 0.1 s (min-ack 46, avail-seq 90, xmit 90) -1711462110.413396 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462110.413497 [0] tev: nn_xpack_send 52: 0x7590e000139c:20 0x7590e400d3a8:32 [ udp/10.101.12.71:7411@2 ] -1711462110.413505 [0] tev: traffic-xmit (1) 52 -1711462110.413823 [0] recvUC: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462110.413838 [0] recvUC: INFODST(110d7b4:17c5b8c5:94bd0ff4) -1711462110.413861 [0] recvUC: ACKNACK(F#7:91/0: L(:1c1 16958.073337) 110cd0d:56a27910:57318171:504 -> 110d7b4:17c5b8c5:94bd0ff4:403 ACK44 RM0) -1711462110.413868 [0] recvUC: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462110.413880 [0] recvUC: ACKNACK(F#23:91/0: L(:1c1 16958.073337) 110cd0d:e3b81b8d:1ccb65b1:504 -> 110d7b4:17c5b8c5:94bd0ff4:403 ACK44 RM0) -1711462110.413887 [0] recvUC: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462110.413900 [0] recvUC: ACKNACK(F#14:91/0: L(:1c1 16958.073337) 110cd0d:79d6eeac:ea4a8907:504 -> 110d7b4:17c5b8c5:94bd0ff4:403remove_acked_messages: deleting lingering writer 110d7b4:17c5b8c5:94bd0ff4:403 -1711462110.413907 [0] recvUC: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:403) ... -1711462110.413921 [0] recvUC: => EVERYONE -1711462110.413943 [0] recvUC: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:403) state transition 2 -> 3 -1711462110.413954 [0] recvUC: ACK44 RM0) -1711462110.413975 [0] gc: gc 0x7590d4002ab0: deleting -1711462110.413995 [0] gc: gc_delete_writer(0x7590d4002ab0, 110d7b4:17c5b8c5:94bd0ff4:403) -1711462110.414041 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:3c2 #90: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:403}} -1711462110.414058 [0] gc: non-timed queue now has 1 items -1711462110.414084 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:3c2:#90/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.414109 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:403 @ 0x556f7899f434) user 5 builtin 12 -1711462110.414146 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590d8018674:28 [ udp/10.101.12.71:7410@2 ] -1711462110.414150 [0] python3: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:504) ... -1711462110.414170 [0] python3: => EVERYONE -1711462110.414155 [0] tev: traffic-xmit (1) 96 -1711462110.414213 [0] gc: gc 0x556f781e6be0: deleting -1711462110.414237 [0] gc: gc_delete_reader(0x556f781e6be0, 110d7b4:17c5b8c5:94bd0ff4:504) -1711462110.414257 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:504, 3): reader no longer exists -1711462110.414272 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:504, 4): reader no longer exists -1711462110.414286 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:504, 3): reader no longer exists -1711462110.414321 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:4c2 #80: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:504}} -1711462110.414343 [0] gc: non-timed queue now has 1 items -1711462110.414370 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(data(110d7b4:17c5b8c5:94bd0ff4:4c2:#80/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.414371 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:504 @ 0x556f78809dd4) user 4 builtin 12 -1711462110.414409 [0] tev: nn_xpack_send 96: 0x7590e000139c:20 0x7590e400d3a8:48 0x7590d8028224:28 [ udp/10.101.12.71:7410@2 ] -1711462110.414438 [0] tev: traffic-xmit (1) 96 -1711462110.414474 [0] tev: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:4c2 multicasting (rel-prd 3 seq-eq-max 3 seq 80 maxseq 79) -1711462110.414475 [0] python3: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:107) ... -1711462110.414498 [0] tev: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:4c2) sent, resched in 0.1 s (min-ack 79, avail-seq 80, xmit 80) -1711462110.414528 [0] python3: => EVERYONE -1711462110.414537 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462110.414566 [0] gc: gc 0x556f7899e420: not yet, shortsleep -1711462110.414572 [0] tev: nn_xpack_send 52: 0x7590e000139c:20 0x7590e400d3a8:32 [ udp/10.101.12.71:7410@2 ] -1711462110.414588 [0] tev: traffic-xmit (1) 52 -1711462110.414813 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462110.414826 [0] recv: INFODST(110d7b4:17c5b8c5:94bd0ff4) -1711462110.414847 [0] recv: ACKNACK(F#5:81/0: L(:1c1 16958.074326) 110cd0d:56a27910:57318171:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2 ACK1 RM0) -1711462110.414855 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462110.414864 [0] recv: ACKNACK(F#13:81/0: L(:1c1 16958.074326) 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2 ACK1 RM0) -1711462110.414869 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462110.414879 [0] recv: ACKNACK(F#8:81/0: L(:1c1 16958.074326) 110cd0d:79d6eeac:ea4a8907:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2 ACK1 RM1) -1711462110.415652 [0] gc: gc 0x556f7899e420: deleting -1711462110.415673 [0] gc: gc_delete_reader(0x556f7899e420, 110d7b4:17c5b8c5:94bd0ff4:107) -1711462110.415696 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:107 @ 0x556f7877a504) user 3 builtin 12 -1711462110.415767 [0] gc: gc 0x556f781e6be0: deleting -1711462110.415779 [0] gc: gc 0x556f78a2f640: deleting -1711462110.415790 [0] gc: gc 0x556f78b57230: deleting -1711462110.415780 [0] python3: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:207) ... -1711462110.415824 [0] python3: => EVERYONE -1711462110.415851 [0] gc: gc 0x556f789d3cf0: deleting -1711462110.415859 [0] gc: gc_delete_reader(0x556f789d3cf0, 110d7b4:17c5b8c5:94bd0ff4:207) -1711462110.415880 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:207 @ 0x556f789485f4) user 2 builtin 12 -1711462110.415908 [0] gc: gc 0x556f789d3cf0: not yet, shortsleep -1711462110.415920 [0] tev: writer_hbcontrol: wr 110d7b4:17c5b8c5:94bd0ff4:3c2 multicasting (rel-prd 3 seq-eq-max 3 seq 90 maxseq 89) -1711462110.415932 [0] python3: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:307) ... -1711462110.415949 [0] tev: heartbeat(wr 110d7b4:17c5b8c5:94bd0ff4:3c2) sent, resched in 0.1 s (min-ack 89, avail-seq 90, xmit 90) -1711462110.415960 [0] python3: => EVERYONE -1711462110.415977 [0] tev: xpack_addmsg 0x7590e0001390 0x7590e400d2b0 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462110.416018 [0] tev: nn_xpack_send 52: 0x7590e000139c:20 0x7590e400d3a8:32 [ udp/10.101.12.71:7410@2 ] -1711462110.416024 [0] tev: traffic-xmit (1) 52 -1711462110.416215 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 168 from udp/10.101.12.71:50807 -1711462110.416223 [0] recv: INFODST(110d7b4:17c5b8c5:94bd0ff4) -1711462110.416231 [0] recv: ACKNACK(F#6:91/0: L(:1c1 16958.075726) 110cd0d:56a27910:57318171:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2 ACK1 RM0) -1711462110.416236 [0] recv: INFOSRC(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) -1711462110.416243 [0] recv: ACKNACK(F#16:91/0: L(:1c1 16958.075726) 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2 ACK1 RM0) -1711462110.416261 [0] recv: INFOSRC(110cd0d:79d6eeac:ea4a8907 vendor 1.16) -1711462110.416270 [0] recv: ACKNACK(F#10:91/0: L(:1c1 16958.075726) 110cd0d:79d6eeac:ea4a8907:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2 ACK1 RM1) -1711462110.416975 [0] gc: gc 0x556f789d3cf0: deleting -1711462110.416992 [0] gc: gc 0x556f78b57230: deleting -1711462110.417000 [0] gc: gc 0x556f78a2f640: deleting -1711462110.417007 [0] gc: gc 0x556f781e6be0: deleting -1711462110.417013 [0] gc: gc 0x556f789a7a40: deleting -1711462110.417019 [0] gc: gc 0x556f78a1a470: deleting -1711462110.417029 [0] gc: gc 0x556f789e4e40: deleting -1711462110.417035 [0] gc: gc_delete_reader(0x556f789e4e40, 110d7b4:17c5b8c5:94bd0ff4:307) -1711462110.417053 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:307 @ 0x556f78949de4) user 1 builtin 12 -1711462110.417063 [0] gc: gc 0x7590d8014d00: not yet, shortsleep -1711462110.417107 [0] python3: ddsi_delete_participant (110d7b4:17c5b8c5:94bd0ff4:1c1) -1711462110.417127 [0] python3: => EVERYONE -1711462110.417152 [0] python3: trigger_recv_threads: 0 many 0x556f78782ff0 -1711462110.417176 [0] python3: trigger_recv_threads: 1 single udp/239.255.0.1:7401 -1711462110.417207 [0] recv: done -1711462110.417246 [0] recvMC: done -1711462110.417266 [0] python3: trigger_recv_threads: 2 single udp/10.101.12.71:7415 -1711462110.417332 [0] recvUC: done -1711462110.417579 [0] python3: ddsi_delete_proxy_participant_by_guid(110cd0d:56a27910:57318171:1c1) - deleting -1711462110.417593 [0] python3: => EVERYONE -1711462110.417603 [0] python3: delete_ppt(110cd0d:56a27910:57318171:1c1) - deleting dependent proxy participants -1711462110.417614 [0] python3: delete_ppt(110cd0d:56a27910:57318171:1c1) - deleting endpoints -1711462110.417621 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1604) => EVERYONE -1711462110.417628 [0] python3: - deleting -1711462110.417635 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1504) => EVERYONE -1711462110.417641 [0] python3: - deleting -1711462110.417654 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1404) => EVERYONE -1711462110.417659 [0] python3: - deleting -1711462110.417665 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1304) => EVERYONE -1711462110.417670 [0] python3: - deleting -1711462110.417676 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:1104) => EVERYONE -1711462110.417681 [0] python3: - deleting -1711462110.417687 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:f04) => EVERYONE -1711462110.417692 [0] python3: - deleting -1711462110.417698 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:d04) => EVERYONE -1711462110.417703 [0] python3: - deleting -1711462110.417709 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:b04) => EVERYONE -1711462110.417714 [0] python3: - deleting -1711462110.417720 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:904) => EVERYONE -1711462110.417726 [0] python3: - deleting -1711462110.417732 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:504) => EVERYONE -1711462110.417737 [0] python3: - deleting -1711462110.417743 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:1203) - deleting -1711462110.417748 [0] python3: => EVERYONE -1711462110.417756 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:1003) - deleting -1711462110.417760 [0] python3: => EVERYONE -1711462110.417766 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:e03) - deleting -1711462110.417770 [0] python3: => EVERYONE -1711462110.417777 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:c03) - deleting -1711462110.417781 [0] python3: => EVERYONE -1711462110.417788 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:a03) - deleting -1711462110.417793 [0] python3: => EVERYONE -1711462110.417811 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:803) - deleting -1711462110.417816 [0] python3: => EVERYONE -1711462110.417822 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:703) - deleting -1711462110.417826 [0] python3: => EVERYONE -1711462110.417833 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:403) - deleting -1711462110.417837 [0] python3: => EVERYONE -1711462110.417844 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:301c4) - deleting -1711462110.417852 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:301c3) - deleting -1711462110.417860 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:300c4) - deleting -1711462110.417866 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:300c3) - deleting -1711462110.417875 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:200c7) - deleting -1711462110.417882 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:200c2) - deleting -1711462110.417889 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:4c7) - deleting -1711462110.417896 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:4c2) - deleting -1711462110.417902 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:3c7) - deleting -1711462110.417908 [0] python3: ddsi_delete_proxy_writer (110cd0d:56a27910:57318171:3c2) - deleting -1711462110.417916 [0] python3: ddsi_delete_proxy_reader (110cd0d:56a27910:57318171:100c7) - deleting -1711462110.417922 [0] python3: ddsi_delete_proxy_participant_by_guid(110cd0d:e3b81b8d:1ccb65b1:1c1) - deleting -1711462110.417926 [0] python3: => EVERYONE -1711462110.417932 [0] python3: delete_ppt(110cd0d:e3b81b8d:1ccb65b1:1c1) - deleting dependent proxy participants -1711462110.417937 [0] python3: delete_ppt(110cd0d:e3b81b8d:1ccb65b1:1c1) - deleting endpoints -1711462110.417943 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1604) => EVERYONE -1711462110.417947 [0] python3: - deleting -1711462110.417953 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1504) => EVERYONE -1711462110.417957 [0] python3: - deleting -1711462110.417962 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1404) => EVERYONE -1711462110.417967 [0] python3: - deleting -1711462110.417972 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1304) => EVERYONE -1711462110.417977 [0] python3: - deleting -1711462110.417982 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:1104) => EVERYONE -1711462110.417987 [0] python3: - deleting -1711462110.417992 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:f04) => EVERYONE -1711462110.417997 [0] python3: - deleting -1711462110.418002 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:d04) => EVERYONE -1711462110.418007 [0] python3: - deleting -1711462110.418012 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:b04) => EVERYONE -1711462110.418016 [0] python3: - deleting -1711462110.418022 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:904) => EVERYONE -1711462110.418026 [0] python3: - deleting -1711462110.418031 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:504) => EVERYONE -1711462110.418035 [0] python3: - deleting -1711462110.418040 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:1203) - deleting -1711462110.418045 [0] python3: => EVERYONE -1711462110.418051 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:1003) - deleting -1711462110.418055 [0] python3: => EVERYONE -1711462110.418061 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:e03) - deleting -1711462110.418065 [0] python3: => EVERYONE -1711462110.418071 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:c03) - deleting -1711462110.418075 [0] python3: => EVERYONE -1711462110.418085 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:a03) - deleting -1711462110.418089 [0] python3: => EVERYONE -1711462110.418095 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:803) - deleting -1711462110.418099 [0] python3: => EVERYONE -1711462110.418105 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:703) - deleting -1711462110.418109 [0] python3: => EVERYONE -1711462110.418114 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:403) - deleting -1711462110.418118 [0] python3: => EVERYONE -1711462110.418125 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:301c4) - deleting -1711462110.418131 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:301c3) - deleting -1711462110.418137 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:300c4) - deleting -1711462110.418143 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:300c3) - deleting -1711462110.418149 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:200c7) - deleting -1711462110.418155 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:200c2) - deleting -1711462110.418162 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:4c7) - deleting -1711462110.418165 [0] gc: gc 0x7590d8014d00: deleting -1711462110.418168 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:4c2) - deleting -1711462110.418189 [0] gc: gc 0x556f781e6be0: deleting -1711462110.418206 [0] gc: gc 0x556f78a2f640: deleting -1711462110.418197 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:3c7) - deleting -1711462110.418218 [0] gc: gc 0x556f78b57230: deleting -1711462110.418230 [0] python3: ddsi_delete_proxy_writer (110cd0d:e3b81b8d:1ccb65b1:3c2) - deleting -1711462110.418239 [0] python3: ddsi_delete_proxy_reader (110cd0d:e3b81b8d:1ccb65b1:100c7) - deleting -1711462110.418247 [0] python3: ddsi_delete_proxy_participant_by_guid(110cd0d:79d6eeac:ea4a8907:1c1) - deleting -1711462110.418251 [0] python3: => EVERYONE -1711462110.418259 [0] python3: delete_ppt(110cd0d:79d6eeac:ea4a8907:1c1) - deleting dependent proxy participants -1711462110.418264 [0] python3: delete_ppt(110cd0d:79d6eeac:ea4a8907:1c1) - deleting endpoints -1711462110.418271 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1604) => EVERYONE -1711462110.418277 [0] python3: - deleting -1711462110.418272 [0] gc: gc 0x556f789d3cf0: deleting -1711462110.418286 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1504) => EVERYONE -1711462110.418301 [0] python3: - deleting -1711462110.418295 [0] gc: gc 0x556f7899de30: deleting -1711462110.418307 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1404) => EVERYONE -1711462110.418326 [0] python3: - deleting -1711462110.418319 [0] gc: gc_delete_participant (0x556f7899de30, 110d7b4:17c5b8c5:94bd0ff4:1c1) -1711462110.418331 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1304) => EVERYONE -1711462110.418345 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 0:0:0:0 @ (nil)) user 0 builtin 12 -1711462110.418348 [0] python3: - deleting -1711462110.418365 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:1104) => EVERYONE -1711462110.418370 [0] python3: - deleting -1711462110.418376 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:f04) => EVERYONE -1711462110.418380 [0] python3: - deleting -1711462110.418386 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:d04) => EVERYONE -1711462110.418387 [0] gc: write_sample 110d7b4:17c5b8c5:94bd0ff4:100c2 #2: ST3 DCPSParticipant/ParticipantBuiltinTopicData:{participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1}} -1711462110.418391 [0] python3: - deleting -1711462110.418410 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:b04) => EVERYONE -1711462110.418411 [0] gc: non-timed queue now has 1 items -1711462110.418414 [0] python3: - deleting -1711462110.418452 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:904) => EVERYONE -1711462110.418440 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:100c2) ... -1711462110.418457 [0] python3: - deleting -1711462110.418477 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:504) => EVERYONE -1711462110.418483 [0] python3: - deleting -1711462110.418469 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:100c2) ... -1711462110.418489 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:1203) - deleting -1711462110.418506 [0] python3: => EVERYONE -1711462110.418515 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:1003) - deleting -1711462110.418520 [0] python3: => EVERYONE -1711462110.418506 [0] gc: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:100c2) state transition 0 -> 3 -1711462110.418527 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:e03) - deleting -1711462110.418539 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:3c2) ... -1711462110.418549 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:3c2) ... -1711462110.418542 [0] python3: => EVERYONE -1711462110.418570 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:c03) - deleting -1711462110.418576 [0] python3: => EVERYONE -1711462110.418562 [0] gc: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:3c2) state transition 0 -> 3 -1711462110.418582 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:a03) - deleting -1711462110.418598 [0] python3: => EVERYONE -1711462110.418592 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:4c2) ... -1711462110.418605 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:803) - deleting -1711462110.418613 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:4c2) ... -1711462110.418622 [0] python3: => EVERYONE -1711462110.418629 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:703) - deleting -1711462110.418633 [0] python3: => EVERYONE -1711462110.418633 [0] gc: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:4c2) state transition 0 -> 3 -1711462110.418642 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:403) - deleting -1711462110.418666 [0] python3: => EVERYONE -1711462110.418658 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:200c2) ... -1711462110.418673 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:301c4) - deleting -1711462110.418683 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:200c2) ... -1711462110.418695 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:301c3) - deleting -1711462110.418704 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:300c4) - deleting -1711462110.418712 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:300c3) - deleting -1711462110.418720 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:200c7) - deleting -1711462110.418727 [0] gc: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:200c2) state transition 0 -> 3 -1711462110.418741 [0] gc: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:100c7) ... -1711462110.418746 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:200c2) - deleting -1711462110.418753 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:2c2) - unknown guid -1711462110.418755 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:4c7) - deleting -1711462110.418763 [0] gc: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:2c7) - unknown guid -1711462110.418775 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:4c2) - deleting -1711462110.418783 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:3c7) - deleting -1711462110.418789 [0] python3: ddsi_delete_proxy_writer (110cd0d:79d6eeac:ea4a8907:3c2) - deleting -1711462110.418802 [0] python3: ddsi_delete_proxy_reader (110cd0d:79d6eeac:ea4a8907:100c7) - deleting -1711462110.418792 [0] gc: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:3c7) ... -1711462110.418825 [0] gc: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:4c7) ... -1711462110.418835 [0] gc: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:200c7) ... -1711462110.418845 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:300c3) ... -1711462110.418852 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:300c3) ... -1711462110.418860 [0] gc: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:300c3) state transition 0 -> 3 -1711462110.418867 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:301c3) ... -1711462110.418873 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:301c3) ... -1711462110.418881 [0] gc: writer_set_state(110d7b4:17c5b8c5:94bd0ff4:301c3) state transition 0 -> 3 -1711462110.418888 [0] gc: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:300c4) ... -1711462110.418896 [0] gc: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:301c4) ... -1711462110.418905 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:ff0003c2) - unknown guid -1711462110.418911 [0] gc: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:ff0003c7) - unknown guid -1711462110.418917 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:ff0004c2) - unknown guid -1711462110.418923 [0] gc: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:ff0004c7) - unknown guid -1711462110.418929 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:ff0200c2) - unknown guid -1711462110.418934 [0] gc: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:ff0200c7) - unknown guid -1711462110.418940 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:201c3) - unknown guid -1711462110.418946 [0] gc: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:201c4) - unknown guid -1711462110.418952 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:ff0101c2) - unknown guid -1711462110.418957 [0] gc: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:ff0101c7) - unknown guid -1711462110.418963 [0] gc: ddsi_delete_writer_nolinger(guid 110d7b4:17c5b8c5:94bd0ff4:ff0202c3) - unknown guid -1711462110.418968 [0] gc: delete_reader_guid(guid 110d7b4:17c5b8c5:94bd0ff4:ff0202c4) - unknown guid -1711462110.418976 [0] gc: gc 0x556f7899dc00: deleting -1711462110.418982 [0] gc: gc_delete_proxy_reader (0x556f7899dc00, 110cd0d:56a27910:57318171:1604) -1711462110.418990 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=29 -1711462110.419005 [0] gc: gc 0x556f789c67e0: deleting -1711462110.419011 [0] gc: gc_delete_proxy_reader (0x556f789c67e0, 110cd0d:56a27910:57318171:1504) -1711462110.419017 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=28 -1711462110.419028 [0] gc: gc 0x556f789e2a90: deleting -1711462110.419034 [0] gc: gc_delete_proxy_reader (0x556f789e2a90, 110cd0d:56a27910:57318171:1404) -1711462110.419040 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=27 -1711462110.419050 [0] gc: gc 0x556f78a3b790: deleting -1711462110.419057 [0] gc: gc_delete_proxy_reader (0x556f78a3b790, 110cd0d:56a27910:57318171:1304) -1711462110.419063 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=26 -1711462110.419074 [0] gc: gc 0x556f7883cee0: deleting -1711462110.419080 [0] gc: gc_delete_proxy_reader (0x556f7883cee0, 110cd0d:56a27910:57318171:1104) -1711462110.419086 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=25 -1711462110.419099 [0] gc: gc 0x556f7899fac0: deleting -1711462110.419106 [0] gc: gc_delete_proxy_reader (0x556f7899fac0, 110cd0d:56a27910:57318171:f04) -1711462110.419122 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=24 -1711462110.419134 [0] gc: gc 0x556f7888fca0: deleting -1711462110.419140 [0] gc: gc_delete_proxy_reader (0x556f7888fca0, 110cd0d:56a27910:57318171:d04) -1711462110.419146 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=23 -1711462110.419157 [0] gc: gc 0x556f78805850: deleting -1711462110.419163 [0] gc: gc_delete_proxy_reader (0x556f78805850, 110cd0d:56a27910:57318171:b04) -1711462110.419170 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=22 -1711462110.419182 [0] gc: gc 0x556f788bcb70: deleting -1711462110.419188 [0] gc: gc_delete_proxy_reader (0x556f788bcb70, 110cd0d:56a27910:57318171:904) -1711462110.419194 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=21 -1711462110.419205 [0] gc: gc 0x556f7888f150: deleting -1711462110.419211 [0] gc: gc_delete_proxy_reader (0x556f7888f150, 110cd0d:56a27910:57318171:504) -1711462110.419218 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=20 -1711462110.419229 [0] gc: gc 0x556f788bad20: deleting -1711462110.419236 [0] gc: gc_delete_proxy_writer_dqueue(0x556f788bad20, 110cd0d:56a27910:57318171:1203) -1711462110.419245 [0] gc: gc 0x556f789295a0: deleting -1711462110.419252 [0] gc: gc_delete_proxy_writer_dqueue(0x556f789295a0, 110cd0d:56a27910:57318171:1003) -1711462110.419258 [0] gc: gc 0x556f781b6bc0: deleting -1711462110.419264 [0] gc: gc_delete_proxy_writer_dqueue(0x556f781b6bc0, 110cd0d:56a27910:57318171:e03) -1711462110.419270 [0] gc: gc 0x556f78209640: deleting -1711462110.419280 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78209640, 110cd0d:56a27910:57318171:c03) -1711462110.419287 [0] gc: gc 0x556f78315b80: deleting -1711462110.419295 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78315b80, 110cd0d:56a27910:57318171:a03) -1711462110.419269 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f788bad20, 110cd0d:56a27910:57318171:1203) -1711462110.419304 [0] gc: gc 0x556f78301d90: deleting -1711462110.419315 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f789295a0, 110cd0d:56a27910:57318171:1003) -1711462110.419323 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f781b6bc0, 110cd0d:56a27910:57318171:e03) -1711462110.419328 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f78209640, 110cd0d:56a27910:57318171:c03) -1711462110.419330 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78301d90, 110cd0d:56a27910:57318171:803) -1711462110.419333 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f78315b80, 110cd0d:56a27910:57318171:a03) -1711462110.419342 [0] gc: gc 0x556f782d7be0: deleting -1711462110.419353 [0] gc: gc_delete_proxy_writer_dqueue(0x556f782d7be0, 110cd0d:56a27910:57318171:703) -1711462110.419361 [0] gc: gc 0x556f782e6d60: deleting -1711462110.419370 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f78301d90, 110cd0d:56a27910:57318171:803) -1711462110.419377 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f782d7be0, 110cd0d:56a27910:57318171:703) -1711462110.419384 [0] gc: gc_delete_proxy_writer_dqueue(0x556f782e6d60, 110cd0d:56a27910:57318171:403) -1711462110.419396 [0] gc: gc 0x556f78328970: deleting -1711462110.419400 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f782e6d60, 110cd0d:56a27910:57318171:403) -1711462110.419403 [0] gc: gc_delete_proxy_reader (0x556f78328970, 110cd0d:56a27910:57318171:301c4) -1711462110.419414 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=19 -1711462110.419425 [0] gc: gc 0x556f782e5800: deleting -1711462110.419431 [0] gc: gc_delete_proxy_writer_dqueue(0x556f782e5800, 110cd0d:56a27910:57318171:301c3) -1711462110.419439 [0] gc: gc 0x556f782a7020: deleting -1711462110.419446 [0] gc: gc_delete_proxy_reader (0x556f782a7020, 110cd0d:56a27910:57318171:300c4) -1711462110.419452 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f782e5800, 110cd0d:56a27910:57318171:301c3) -1711462110.419462 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=18 -1711462110.419474 [0] gc: gc 0x556f7831cf50: deleting -1711462110.419482 [0] gc: gc_delete_proxy_writer_dqueue(0x556f7831cf50, 110cd0d:56a27910:57318171:300c3) -1711462110.419491 [0] gc: gc 0x556f781c6da0: deleting -1711462110.419497 [0] gc: gc_delete_proxy_reader (0x556f781c6da0, 110cd0d:56a27910:57318171:200c7) -1711462110.419497 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f7831cf50, 110cd0d:56a27910:57318171:300c3) -1711462110.419510 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=17 -1711462110.419521 [0] gc: gc 0x556f78653850: deleting -1711462110.419529 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78653850, 110cd0d:56a27910:57318171:200c2) -1711462110.419537 [0] gc: gc 0x556f786eda90: deleting -1711462110.419543 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f78653850, 110cd0d:56a27910:57318171:200c2) -1711462110.419544 [0] gc: gc_delete_proxy_reader (0x556f786eda90, 110cd0d:56a27910:57318171:4c7) -1711462110.419572 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=16 -1711462110.419582 [0] gc: gc 0x556f78b3cd80: deleting -1711462110.419588 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78b3cd80, 110cd0d:56a27910:57318171:4c2) -1711462110.419597 [0] gc: gc 0x556f78391120: deleting -1711462110.419604 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f78b3cd80, 110cd0d:56a27910:57318171:4c2) -1711462110.419605 [0] gc: gc_delete_proxy_reader (0x556f78391120, 110cd0d:56a27910:57318171:3c7) -1711462110.419628 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=15 -1711462110.419638 [0] gc: gc 0x556f78739460: deleting -1711462110.419644 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78739460, 110cd0d:56a27910:57318171:3c2) -1711462110.419652 [0] gc: gc 0x556f78795cb0: deleting -1711462110.419658 [0] gc: gc_delete_proxy_reader (0x556f78795cb0, 110cd0d:56a27910:57318171:100c7) -1711462110.419667 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=14 -1711462110.419659 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f78739460, 110cd0d:56a27910:57318171:3c2) -1711462110.419677 [0] gc: gc 0x556f78769270: deleting -1711462110.419696 [0] gc: gc_delete_proxy_participant(0x556f78769270, 110cd0d:56a27910:57318171:1c1) -1711462110.419706 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=13 -1711462110.419711 [0] gc: gc 0x556f78731d20: deleting -1711462110.419717 [0] gc: gc_delete_proxy_reader (0x556f78731d20, 110cd0d:e3b81b8d:1ccb65b1:1604) -1711462110.419725 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=29 -1711462110.419738 [0] gc: gc 0x556f787a7cf0: deleting -1711462110.419745 [0] gc: gc_delete_proxy_reader (0x556f787a7cf0, 110cd0d:e3b81b8d:1ccb65b1:1504) -1711462110.419751 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=28 -1711462110.419762 [0] gc: gc 0x556f78794970: deleting -1711462110.419768 [0] gc: gc_delete_proxy_reader (0x556f78794970, 110cd0d:e3b81b8d:1ccb65b1:1404) -1711462110.419774 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=27 -1711462110.419785 [0] gc: gc 0x556f787a2f90: deleting -1711462110.419791 [0] gc: gc_delete_proxy_reader (0x556f787a2f90, 110cd0d:e3b81b8d:1ccb65b1:1304) -1711462110.419797 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=26 -1711462110.419809 [0] gc: gc 0x556f78768f60: deleting -1711462110.419815 [0] gc: gc_delete_proxy_reader (0x556f78768f60, 110cd0d:e3b81b8d:1ccb65b1:1104) -1711462110.419822 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=25 -1711462110.419840 [0] gc: gc 0x556f78746930: deleting -1711462110.419847 [0] gc: gc_delete_proxy_reader (0x556f78746930, 110cd0d:e3b81b8d:1ccb65b1:f04) -1711462110.419854 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=24 -1711462110.419866 [0] gc: gc 0x556f7877dd30: deleting -1711462110.419872 [0] gc: gc_delete_proxy_reader (0x556f7877dd30, 110cd0d:e3b81b8d:1ccb65b1:d04) -1711462110.419879 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=23 -1711462110.419889 [0] gc: gc 0x556f787b7c40: deleting -1711462110.419895 [0] gc: gc_delete_proxy_reader (0x556f787b7c40, 110cd0d:e3b81b8d:1ccb65b1:b04) -1711462110.419902 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=22 -1711462110.419912 [0] gc: gc 0x556f787bcfe0: deleting -1711462110.419918 [0] gc: gc_delete_proxy_reader (0x556f787bcfe0, 110cd0d:e3b81b8d:1ccb65b1:904) -1711462110.419925 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=21 -1711462110.419936 [0] gc: gc 0x556f787b7990: deleting -1711462110.419942 [0] gc: gc_delete_proxy_reader (0x556f787b7990, 110cd0d:e3b81b8d:1ccb65b1:504) -1711462110.419948 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=20 -1711462110.419958 [0] gc: gc 0x556f787a68a0: deleting -1711462110.419964 [0] gc: gc_delete_proxy_writer_dqueue(0x556f787a68a0, 110cd0d:e3b81b8d:1ccb65b1:1203) -1711462110.419973 [0] gc: gc 0x556f787c61d0: deleting -1711462110.419979 [0] gc: gc_delete_proxy_writer_dqueue(0x556f787c61d0, 110cd0d:e3b81b8d:1ccb65b1:1003) -1711462110.419987 [0] gc: gc 0x556f78759ef0: deleting -1711462110.419991 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f787a68a0, 110cd0d:e3b81b8d:1ccb65b1:1203) -1711462110.419993 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78759ef0, 110cd0d:e3b81b8d:1ccb65b1:e03) -1711462110.420006 [0] gc: gc 0x556f787bf2f0: deleting -1711462110.420012 [0] gc: gc_delete_proxy_writer_dqueue(0x556f787bf2f0, 110cd0d:e3b81b8d:1ccb65b1:c03) -1711462110.420015 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f787c61d0, 110cd0d:e3b81b8d:1ccb65b1:1003) -1711462110.420025 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f78759ef0, 110cd0d:e3b81b8d:1ccb65b1:e03) -1711462110.420019 [0] gc: gc 0x556f787c5f40: deleting -1711462110.420031 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f787bf2f0, 110cd0d:e3b81b8d:1ccb65b1:c03) -1711462110.420041 [0] gc: gc_delete_proxy_writer_dqueue(0x556f787c5f40, 110cd0d:e3b81b8d:1ccb65b1:a03) -1711462110.420062 [0] gc: gc 0x556f787c18d0: deleting -1711462110.420072 [0] gc: gc_delete_proxy_writer_dqueue(0x556f787c18d0, 110cd0d:e3b81b8d:1ccb65b1:803) -1711462110.420066 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f787c5f40, 110cd0d:e3b81b8d:1ccb65b1:a03) -1711462110.420084 [0] gc: gc 0x556f78741fe0: deleting -1711462110.420088 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f787c18d0, 110cd0d:e3b81b8d:1ccb65b1:803) -1711462110.420091 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78741fe0, 110cd0d:e3b81b8d:1ccb65b1:703) -1711462110.420112 [0] gc: gc 0x556f7876c720: deleting -1711462110.420116 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f78741fe0, 110cd0d:e3b81b8d:1ccb65b1:703) -1711462110.420119 [0] gc: gc_delete_proxy_writer_dqueue(0x556f7876c720, 110cd0d:e3b81b8d:1ccb65b1:403) -1711462110.420132 [0] gc: gc 0x556f787d3830: deleting -1711462110.420135 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f7876c720, 110cd0d:e3b81b8d:1ccb65b1:403) -1711462110.420138 [0] gc: gc_delete_proxy_reader (0x556f787d3830, 110cd0d:e3b81b8d:1ccb65b1:301c4) -1711462110.420150 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=19 -1711462110.420158 [0] gc: gc 0x556f787ebaf0: deleting -1711462110.420172 [0] gc: gc_delete_proxy_writer_dqueue(0x556f787ebaf0, 110cd0d:e3b81b8d:1ccb65b1:301c3) -1711462110.420181 [0] gc: gc 0x556f78788fd0: deleting -1711462110.420188 [0] gc: gc_delete_proxy_reader (0x556f78788fd0, 110cd0d:e3b81b8d:1ccb65b1:300c4) -1711462110.420188 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f787ebaf0, 110cd0d:e3b81b8d:1ccb65b1:301c3) -1711462110.420198 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=18 -1711462110.420222 [0] gc: gc 0x556f787fa080: deleting -1711462110.420229 [0] gc: gc_delete_proxy_writer_dqueue(0x556f787fa080, 110cd0d:e3b81b8d:1ccb65b1:300c3) -1711462110.420237 [0] gc: gc 0x556f787b0d90: deleting -1711462110.420244 [0] gc: gc_delete_proxy_reader (0x556f787b0d90, 110cd0d:e3b81b8d:1ccb65b1:200c7) -1711462110.420243 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f787fa080, 110cd0d:e3b81b8d:1ccb65b1:300c3) -1711462110.420256 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=17 -1711462110.420266 [0] gc: gc 0x556f787c05b0: deleting -1711462110.420272 [0] gc: gc_delete_proxy_writer_dqueue(0x556f787c05b0, 110cd0d:e3b81b8d:1ccb65b1:200c2) -1711462110.420280 [0] gc: gc 0x556f787669a0: deleting -1711462110.420285 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f787c05b0, 110cd0d:e3b81b8d:1ccb65b1:200c2) -1711462110.420286 [0] gc: gc_delete_proxy_reader (0x556f787669a0, 110cd0d:e3b81b8d:1ccb65b1:4c7) -1711462110.420309 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=16 -1711462110.420318 [0] gc: gc 0x556f78788b50: deleting -1711462110.420324 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78788b50, 110cd0d:e3b81b8d:1ccb65b1:4c2) -1711462110.420332 [0] gc: gc 0x556f78a2f640: deleting -1711462110.420338 [0] gc: gc_delete_proxy_reader (0x556f78a2f640, 110cd0d:e3b81b8d:1ccb65b1:3c7) -1711462110.420339 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f78788b50, 110cd0d:e3b81b8d:1ccb65b1:4c2) -1711462110.420348 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=15 -1711462110.420371 [0] gc: gc 0x556f781e6be0: deleting -1711462110.420379 [0] gc: gc_delete_proxy_writer_dqueue(0x556f781e6be0, 110cd0d:e3b81b8d:1ccb65b1:3c2) -1711462110.420387 [0] gc: gc 0x556f787c55e0: deleting -1711462110.420394 [0] gc: gc_delete_proxy_reader (0x556f787c55e0, 110cd0d:e3b81b8d:1ccb65b1:100c7) -1711462110.420393 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f781e6be0, 110cd0d:e3b81b8d:1ccb65b1:3c2) -1711462110.420402 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=14 -1711462110.420413 [0] gc: gc 0x556f787af560: deleting -1711462110.420420 [0] gc: gc_delete_proxy_participant(0x556f787af560, 110cd0d:e3b81b8d:1ccb65b1:1c1) -1711462110.420426 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=13 -1711462110.420432 [0] gc: gc 0x556f78b57230: deleting -1711462110.420437 [0] gc: gc_delete_proxy_reader (0x556f78b57230, 110cd0d:79d6eeac:ea4a8907:1604) -1711462110.420444 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=29 -1711462110.420455 [0] gc: gc 0x556f789d3cf0: deleting -1711462110.420462 [0] gc: gc_delete_proxy_reader (0x556f789d3cf0, 110cd0d:79d6eeac:ea4a8907:1504) -1711462110.420468 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=28 -1711462110.420478 [0] gc: gc 0x556f787cb400: deleting -1711462110.420484 [0] gc: gc_delete_proxy_reader (0x556f787cb400, 110cd0d:79d6eeac:ea4a8907:1404) -1711462110.420491 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=27 -1711462110.420523 [0] gc: gc 0x556f787ef290: deleting -1711462110.420540 [0] gc: gc_delete_proxy_reader (0x556f787ef290, 110cd0d:79d6eeac:ea4a8907:1304) -1711462110.420548 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=26 -1711462110.420565 [0] gc: gc 0x556f78792df0: deleting -1711462110.420572 [0] gc: gc_delete_proxy_reader (0x556f78792df0, 110cd0d:79d6eeac:ea4a8907:1104) -1711462110.420579 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=25 -1711462110.420590 [0] gc: gc 0x556f78792570: deleting -1711462110.420649 [0] gc: gc_delete_proxy_reader (0x556f78792570, 110cd0d:79d6eeac:ea4a8907:f04) -1711462110.420665 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=24 -1711462110.420681 [0] gc: gc 0x556f787f2800: deleting -1711462110.420687 [0] gc: gc_delete_proxy_reader (0x556f787f2800, 110cd0d:79d6eeac:ea4a8907:d04) -1711462110.420691 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=23 -1711462110.420698 [0] gc: gc 0x556f787cde60: deleting -1711462110.420702 [0] gc: gc_delete_proxy_reader (0x556f787cde60, 110cd0d:79d6eeac:ea4a8907:b04) -1711462110.420707 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=22 -1711462110.420713 [0] gc: gc 0x556f7887cfe0: deleting -1711462110.420717 [0] gc: gc_delete_proxy_reader (0x556f7887cfe0, 110cd0d:79d6eeac:ea4a8907:904) -1711462110.420721 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=21 -1711462110.420728 [0] gc: gc 0x556f784f75f0: deleting -1711462110.420732 [0] gc: gc_delete_proxy_reader (0x556f784f75f0, 110cd0d:79d6eeac:ea4a8907:504) -1711462110.420736 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=20 -1711462110.420743 [0] gc: gc 0x556f787ea650: deleting -1711462110.420748 [0] gc: gc_delete_proxy_writer_dqueue(0x556f787ea650, 110cd0d:79d6eeac:ea4a8907:1203) -1711462110.420755 [0] gc: gc 0x556f7883c120: deleting -1711462110.420760 [0] gc: gc_delete_proxy_writer_dqueue(0x556f7883c120, 110cd0d:79d6eeac:ea4a8907:1003) -1711462110.420762 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f787ea650, 110cd0d:79d6eeac:ea4a8907:1203) -1711462110.420772 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f7883c120, 110cd0d:79d6eeac:ea4a8907:1003) -1711462110.420764 [0] gc: gc 0x7590d8014d00: deleting -1711462110.420781 [0] gc: gc_delete_writer(0x7590d8014d00, 110d7b4:17c5b8c5:94bd0ff4:100c2) -1711462110.420802 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:100c2 @ 0x556f78728c14) user 0 builtin 11 -1711462110.420808 [0] gc: gc 0x556f788497e0: deleting -1711462110.420812 [0] gc: gc_delete_proxy_writer_dqueue(0x556f788497e0, 110cd0d:79d6eeac:ea4a8907:e03) -1711462110.420818 [0] gc: gc 0x556f78a8afc0: deleting -1711462110.420823 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78a8afc0, 110cd0d:79d6eeac:ea4a8907:c03) -1711462110.420825 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f788497e0, 110cd0d:79d6eeac:ea4a8907:e03) -1711462110.420834 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f78a8afc0, 110cd0d:79d6eeac:ea4a8907:c03) -1711462110.420827 [0] gc: gc 0x7590d8012530: deleting -1711462110.420848 [0] gc: gc_delete_writer(0x7590d8012530, 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462110.420861 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:3c2 @ 0x556f78722e74) user 0 builtin 10 -1711462110.420866 [0] gc: gc 0x556f78840730: deleting -1711462110.420870 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78840730, 110cd0d:79d6eeac:ea4a8907:a03) -1711462110.420876 [0] gc: gc 0x556f788c3190: deleting -1711462110.420881 [0] gc: gc_delete_proxy_writer_dqueue(0x556f788c3190, 110cd0d:79d6eeac:ea4a8907:803) -1711462110.420883 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f78840730, 110cd0d:79d6eeac:ea4a8907:a03) -1711462110.420892 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f788c3190, 110cd0d:79d6eeac:ea4a8907:803) -1711462110.420885 [0] gc: gc 0x556f787e1070: deleting -1711462110.420913 [0] gc: gc_delete_proxy_writer_dqueue(0x556f787e1070, 110cd0d:79d6eeac:ea4a8907:703) -1711462110.420920 [0] gc: gc 0x7590d800fc90: deleting -1711462110.420924 [0] gc: gc_delete_writer(0x7590d800fc90, 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462110.420925 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f787e1070, 110cd0d:79d6eeac:ea4a8907:703) -1711462110.420939 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4c2 @ 0x556f787109e4) user 0 builtin 9 -1711462110.420945 [0] gc: gc 0x556f78814a00: deleting -1711462110.420950 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78814a00, 110cd0d:79d6eeac:ea4a8907:403) -1711462110.420956 [0] gc: gc 0x556f789ac8e0: deleting -1711462110.420961 [0] gc: gc_delete_proxy_reader (0x556f789ac8e0, 110cd0d:79d6eeac:ea4a8907:301c4) -1711462110.420963 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x556f78814a00, 110cd0d:79d6eeac:ea4a8907:403) -1711462110.420966 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=19 -1711462110.420973 [0] gc: gc 0x556f782d10f0: deleting -1711462110.420977 [0] gc: gc_delete_proxy_writer_dqueue(0x556f782d10f0, 110cd0d:79d6eeac:ea4a8907:301c3) -1711462110.420984 [0] gc: gc 0x556f789b18b0: deleting -1711462110.420988 [0] gc: gc_delete_proxy_reader (0x556f789b18b0, 110cd0d:79d6eeac:ea4a8907:300c4) -1711462110.420993 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=18 -1711462110.420998 [0] gc: gc 0x556f789c17b0: deleting -1711462110.421003 [0] gc: gc_delete_proxy_writer_dqueue(0x556f789c17b0, 110cd0d:79d6eeac:ea4a8907:300c3) -1711462110.421007 [0] gc: gc 0x7590d800b4e0: deleting -1711462110.421009 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f782d10f0, 110cd0d:79d6eeac:ea4a8907:301c3) -1711462110.421012 [0] gc: gc_delete_writer(0x7590d800b4e0, 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462110.421038 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f789c17b0, 110cd0d:79d6eeac:ea4a8907:300c3) -1711462110.421048 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:200c2 @ 0x556f7899a0d4) user 0 builtin 8 -1711462110.421054 [0] gc: gc 0x556f789f64f0: deleting -1711462110.421058 [0] gc: gc_delete_proxy_reader (0x556f789f64f0, 110cd0d:79d6eeac:ea4a8907:200c7) -1711462110.421063 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=17 -1711462110.421068 [0] gc: gc 0x7590d8006ae0: deleting -1711462110.421073 [0] gc: gc_delete_reader(0x7590d8006ae0, 110d7b4:17c5b8c5:94bd0ff4:100c7) -1711462110.421080 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:100c7 @ 0x556f78743644) user 0 builtin 7 -1711462110.421084 [0] gc: gc 0x556f78a03780: deleting -1711462110.421088 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78a03780, 110cd0d:79d6eeac:ea4a8907:200c2) -1711462110.421094 [0] gc: gc 0x556f78a0edf0: deleting -1711462110.421099 [0] gc: gc_delete_proxy_reader (0x556f78a0edf0, 110cd0d:79d6eeac:ea4a8907:4c7) -1711462110.421102 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f78a03780, 110cd0d:79d6eeac:ea4a8907:200c2) -1711462110.421104 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=16 -1711462110.421123 [0] gc: gc 0x556f78a26ec0: deleting -1711462110.421127 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78a26ec0, 110cd0d:79d6eeac:ea4a8907:4c2) -1711462110.421133 [0] gc: gc 0x556f78a2d150: deleting -1711462110.421137 [0] gc: gc_delete_proxy_reader (0x556f78a2d150, 110cd0d:79d6eeac:ea4a8907:3c7) -1711462110.421140 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f78a26ec0, 110cd0d:79d6eeac:ea4a8907:4c2) -1711462110.421142 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=15 -1711462110.421165 [0] gc: gc 0x556f78a47730: deleting -1711462110.421170 [0] gc: gc_delete_proxy_writer_dqueue(0x556f78a47730, 110cd0d:79d6eeac:ea4a8907:3c2) -1711462110.421176 [0] gc: gc 0x556f789ea750: deleting -1711462110.421180 [0] gc: gc_delete_proxy_reader (0x556f789ea750, 110cd0d:79d6eeac:ea4a8907:100c7) -1711462110.421184 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x556f78a47730, 110cd0d:79d6eeac:ea4a8907:3c2) -1711462110.421185 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=14 -1711462110.421206 [0] gc: gc 0x556f78996810: deleting -1711462110.421211 [0] gc: gc_delete_proxy_participant(0x556f78996810, 110cd0d:79d6eeac:ea4a8907:1c1) -1711462110.421215 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=13 -1711462110.421220 [0] gc: gc 0x7590d8005430: deleting -1711462110.421224 [0] gc: gc_delete_reader(0x7590d8005430, 110d7b4:17c5b8c5:94bd0ff4:3c7) -1711462110.421232 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:3c7 @ 0x556f78777634) user 0 builtin 6 -1711462110.421236 [0] gc: gc 0x556f78999480: deleting -1711462110.421241 [0] gc: gc_delete_reader(0x556f78999480, 110d7b4:17c5b8c5:94bd0ff4:4c7) -1711462110.421248 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:4c7 @ 0x556f78768244) user 0 builtin 5 -1711462110.421253 [0] gc: gc 0x7590f0001a90: deleting -1711462110.421257 [0] gc: gc_delete_reader(0x7590f0001a90, 110d7b4:17c5b8c5:94bd0ff4:200c7) -1711462110.421265 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:200c7 @ 0x556f784892c4) user 0 builtin 4 -1711462110.421269 [0] gc: gc 0x7590f0001cc0: deleting -1711462110.421274 [0] gc: gc_delete_writer(0x7590f0001cc0, 110d7b4:17c5b8c5:94bd0ff4:300c3) -1711462110.421284 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:300c3 @ 0x556f7899c394) user 0 builtin 3 -1711462110.421288 [0] gc: gc 0x7590f0001ef0: deleting -1711462110.421292 [0] gc: gc_delete_writer(0x7590f0001ef0, 110d7b4:17c5b8c5:94bd0ff4:301c3) -1711462110.421322 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:301c3 @ 0x556f7899c914) user 0 builtin 2 -1711462110.421326 [0] gc: gc 0x7590f0002120: deleting -1711462110.421331 [0] gc: gc_delete_reader(0x7590f0002120, 110d7b4:17c5b8c5:94bd0ff4:300c4) -1711462110.421337 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:300c4 @ 0x556f78489174) user 0 builtin 1 -1711462110.421342 [0] gc: gc 0x7590f0002350: deleting -1711462110.421347 [0] gc: gc_delete_reader(0x7590f0002350, 110d7b4:17c5b8c5:94bd0ff4:301c4) -1711462110.421353 [0] gc: ddsi_unref_participant(110d7b4:17c5b8c5:94bd0ff4:1c1 @ 0x556f78729120 <- 110d7b4:17c5b8c5:94bd0ff4:301c4 @ 0x556f78200c94) user 0 builtin 0 -1711462110.421366 [0] gc: ddsi_remove_deleted_participant_guid(110d7b4:17c5b8c5:94bd0ff4:1c1 for_what=1) -1711462110.421373 [0] gc: gc 0x556f7899dc00: deleting -1711462110.421379 [0] gc: gc 0x7590f0002580: deleting -1711462110.421387 [0] gc: gc 0x7590f00027b0: deleting -1711462110.421392 [0] gc: gc 0x7590f00029e0: deleting -1711462110.421396 [0] gc: gc 0x7590f0002c10: deleting -1711462110.421401 [0] gc: gc 0x7590f0002e40: deleting -1711462110.421406 [0] gc: gc 0x7590f0003070: deleting -1711462110.421411 [0] gc: gc 0x556f78805850: deleting -1711462110.421416 [0] gc: gc 0x556f788bcb70: deleting -1711462110.421421 [0] gc: gc 0x556f7888f150: deleting -1711462110.421426 [0] gc: gc 0x556f788bad20: deleting -1711462110.421430 [0] gc: gc_delete_proxy_writer (0x556f788bad20, 110cd0d:56a27910:57318171:1203) -1711462110.421436 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=12 -1711462110.421450 [0] gc: gc 0x556f789295a0: deleting -1711462110.421455 [0] gc: gc_delete_proxy_writer (0x556f789295a0, 110cd0d:56a27910:57318171:1003) -1711462110.421460 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=11 -1711462110.421465 [0] gc: gc 0x556f781b6bc0: deleting -1711462110.421470 [0] gc: gc_delete_proxy_writer (0x556f781b6bc0, 110cd0d:56a27910:57318171:e03) -1711462110.421474 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=10 -1711462110.421480 [0] gc: gc 0x556f78209640: deleting -1711462110.421485 [0] gc: gc_delete_proxy_writer (0x556f78209640, 110cd0d:56a27910:57318171:c03) -1711462110.421490 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=9 -1711462110.421496 [0] gc: gc 0x556f78315b80: deleting -1711462110.421501 [0] gc: gc_delete_proxy_writer (0x556f78315b80, 110cd0d:56a27910:57318171:a03) -1711462110.421505 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=8 -1711462110.421512 [0] gc: gc 0x556f78301d90: deleting -1711462110.421516 [0] gc: gc_delete_proxy_writer (0x556f78301d90, 110cd0d:56a27910:57318171:803) -1711462110.421521 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=7 -1711462110.421527 [0] gc: gc 0x556f782d7be0: deleting -1711462110.421531 [0] gc: gc_delete_proxy_writer (0x556f782d7be0, 110cd0d:56a27910:57318171:703) -1711462110.421536 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=6 -1711462110.421542 [0] gc: gc 0x556f782e6d60: deleting -1711462110.421547 [0] gc: gc_delete_proxy_writer (0x556f782e6d60, 110cd0d:56a27910:57318171:403) -1711462110.421551 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=5 -1711462110.421557 [0] gc: gc 0x556f782e5800: deleting -1711462110.421562 [0] gc: gc_delete_proxy_writer (0x556f782e5800, 110cd0d:56a27910:57318171:301c3) -1711462110.421567 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:301c4, 2): reader no longer exists -1711462110.421572 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=4 -1711462110.421577 [0] gc: gc 0x556f7831cf50: deleting -1711462110.421582 [0] gc: gc_delete_proxy_writer (0x556f7831cf50, 110cd0d:56a27910:57318171:300c3) -1711462110.421587 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:300c4, 2): reader no longer exists -1711462110.421591 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=3 -1711462110.421596 [0] gc: gc 0x556f78653850: deleting -1711462110.421601 [0] gc: gc_delete_proxy_writer (0x556f78653850, 110cd0d:56a27910:57318171:200c2) -1711462110.421606 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:200c7, 5): reader no longer exists -1711462110.421610 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=2 -1711462110.421615 [0] gc: gc 0x556f78b3cd80: deleting -1711462110.421619 [0] gc: gc_delete_proxy_writer (0x556f78b3cd80, 110cd0d:56a27910:57318171:4c2) -1711462110.421624 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:4c7, 3): reader no longer exists -1711462110.421631 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=1 -1711462110.421636 [0] gc: gc 0x556f78739460: deleting -1711462110.421640 [0] gc: gc_delete_proxy_writer (0x556f78739460, 110cd0d:56a27910:57318171:3c2) -1711462110.421645 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:3c7, 4): reader no longer exists -1711462110.421650 [0] gc: ddsi_unref_proxy_participant(110cd0d:56a27910:57318171:1c1): refc=0, freeing -1711462110.421656 [0] gc: lease_unregister(l 0x7590d80071e0 guid 110cd0d:56a27910:57318171:1c1) -1711462110.421664 [0] gc: lease_free(l 0x7590d80071e0 guid 110cd0d:56a27910:57318171:1c1) -1711462110.421669 [0] gc: lease_free(l 0x7590d8007160 guid 110cd0d:56a27910:57318171:1c1) -1711462110.421677 [0] gc: ddsi_remove_deleted_participant_guid(110cd0d:56a27910:57318171:1c1 for_what=3) -1711462110.421683 [0] gc: gc 0x556f78769270: deleting -1711462110.421688 [0] gc: gc 0x556f787a7cf0: deleting -1711462110.421693 [0] gc: gc 0x556f78794970: deleting -1711462110.421698 [0] gc: gc 0x556f787a2f90: deleting -1711462110.421703 [0] gc: gc 0x556f78768f60: deleting -1711462110.421708 [0] gc: gc 0x556f78746930: deleting -1711462110.421712 [0] gc: gc 0x556f7877dd30: deleting -1711462110.421717 [0] gc: gc 0x556f787b7c40: deleting -1711462110.421721 [0] gc: gc 0x556f787bcfe0: deleting -1711462110.421726 [0] gc: gc 0x556f787b7990: deleting -1711462110.421731 [0] gc: gc 0x556f787a68a0: deleting -1711462110.421735 [0] gc: gc_delete_proxy_writer (0x556f787a68a0, 110cd0d:e3b81b8d:1ccb65b1:1203) -1711462110.421740 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=12 -1711462110.421747 [0] gc: gc 0x556f787c61d0: deleting -1711462110.421751 [0] gc: gc_delete_proxy_writer (0x556f787c61d0, 110cd0d:e3b81b8d:1ccb65b1:1003) -1711462110.421756 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=11 -1711462110.421762 [0] gc: gc 0x556f78759ef0: deleting -1711462110.421766 [0] gc: gc_delete_proxy_writer (0x556f78759ef0, 110cd0d:e3b81b8d:1ccb65b1:e03) -1711462110.421771 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=10 -1711462110.421778 [0] gc: gc 0x556f787bf2f0: deleting -1711462110.421783 [0] gc: gc_delete_proxy_writer (0x556f787bf2f0, 110cd0d:e3b81b8d:1ccb65b1:c03) -1711462110.421788 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=9 -1711462110.421794 [0] gc: gc 0x556f787c5f40: deleting -1711462110.421798 [0] gc: gc_delete_proxy_writer (0x556f787c5f40, 110cd0d:e3b81b8d:1ccb65b1:a03) -1711462110.421803 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=8 -1711462110.421810 [0] gc: gc 0x556f787c18d0: deleting -1711462110.421814 [0] gc: gc_delete_proxy_writer (0x556f787c18d0, 110cd0d:e3b81b8d:1ccb65b1:803) -1711462110.421819 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=7 -1711462110.421824 [0] gc: gc 0x556f78741fe0: deleting -1711462110.421829 [0] gc: gc_delete_proxy_writer (0x556f78741fe0, 110cd0d:e3b81b8d:1ccb65b1:703) -1711462110.421833 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=6 -1711462110.421840 [0] gc: gc 0x556f7876c720: deleting -1711462110.421844 [0] gc: gc_delete_proxy_writer (0x556f7876c720, 110cd0d:e3b81b8d:1ccb65b1:403) -1711462110.421849 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=5 -1711462110.421854 [0] gc: gc 0x556f787ebaf0: deleting -1711462110.421859 [0] gc: gc_delete_proxy_writer (0x556f787ebaf0, 110cd0d:e3b81b8d:1ccb65b1:301c3) -1711462110.421863 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:301c4, 2): reader no longer exists -1711462110.421868 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=4 -1711462110.421873 [0] gc: gc 0x556f787fa080: deleting -1711462110.421877 [0] gc: gc_delete_proxy_writer (0x556f787fa080, 110cd0d:e3b81b8d:1ccb65b1:300c3) -1711462110.421882 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:300c4, 2): reader no longer exists -1711462110.421887 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=3 -1711462110.421892 [0] gc: gc 0x556f787c05b0: deleting -1711462110.421896 [0] gc: gc_delete_proxy_writer (0x556f787c05b0, 110cd0d:e3b81b8d:1ccb65b1:200c2) -1711462110.421901 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:200c7, 6): reader no longer exists -1711462110.421909 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=2 -1711462110.421914 [0] gc: gc 0x556f78788b50: deleting -1711462110.421918 [0] gc: gc_delete_proxy_writer (0x556f78788b50, 110cd0d:e3b81b8d:1ccb65b1:4c2) -1711462110.421924 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:4c7, 3): reader no longer exists -1711462110.421928 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=1 -1711462110.421933 [0] gc: gc 0x556f781e6be0: deleting -1711462110.421937 [0] gc: gc_delete_proxy_writer (0x556f781e6be0, 110cd0d:e3b81b8d:1ccb65b1:3c2) -1711462110.421942 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:3c7, 3): reader no longer exists -1711462110.421947 [0] gc: ddsi_unref_proxy_participant(110cd0d:e3b81b8d:1ccb65b1:1c1): refc=0, freeing -1711462110.421951 [0] gc: lease_unregister(l 0x7590d800b990 guid 110cd0d:e3b81b8d:1ccb65b1:1c1) -1711462110.421956 [0] gc: lease_free(l 0x7590d800b990 guid 110cd0d:e3b81b8d:1ccb65b1:1c1) -1711462110.421960 [0] gc: lease_free(l 0x7590d800b910 guid 110cd0d:e3b81b8d:1ccb65b1:1c1) -1711462110.421967 [0] gc: ddsi_remove_deleted_participant_guid(110cd0d:e3b81b8d:1ccb65b1:1c1 for_what=3) -1711462110.421972 [0] gc: gc 0x556f787d3830: deleting -1711462110.421977 [0] gc: gc 0x556f789d3cf0: deleting -1711462110.421981 [0] gc: gc 0x556f787cb400: deleting -1711462110.421986 [0] gc: gc 0x556f787ef290: deleting -1711462110.421990 [0] gc: gc 0x556f78792df0: deleting -1711462110.421995 [0] gc: gc 0x556f78792570: deleting -1711462110.421999 [0] gc: gc 0x556f787f2800: deleting -1711462110.422003 [0] gc: gc 0x556f787cde60: deleting -1711462110.422007 [0] gc: gc 0x556f7887cfe0: deleting -1711462110.422012 [0] gc: gc 0x556f784f75f0: deleting -1711462110.422016 [0] gc: gc 0x556f787ea650: deleting -1711462110.422020 [0] gc: gc_delete_proxy_writer (0x556f787ea650, 110cd0d:79d6eeac:ea4a8907:1203) -1711462110.422025 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=12 -1711462110.422031 [0] gc: gc 0x556f7883c120: deleting -1711462110.422036 [0] gc: gc_delete_proxy_writer (0x556f7883c120, 110cd0d:79d6eeac:ea4a8907:1003) -1711462110.422040 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=11 -1711462110.422047 [0] gc: gc 0x556f788497e0: deleting -1711462110.422051 [0] gc: gc_delete_proxy_writer (0x556f788497e0, 110cd0d:79d6eeac:ea4a8907:e03) -1711462110.422056 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=10 -1711462110.422062 [0] gc: gc 0x556f78a8afc0: deleting -1711462110.422067 [0] gc: gc_delete_proxy_writer (0x556f78a8afc0, 110cd0d:79d6eeac:ea4a8907:c03) -1711462110.422071 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=9 -1711462110.422078 [0] gc: gc 0x556f78840730: deleting -1711462110.422082 [0] gc: gc_delete_proxy_writer (0x556f78840730, 110cd0d:79d6eeac:ea4a8907:a03) -1711462110.422087 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=8 -1711462110.422093 [0] gc: gc 0x556f788c3190: deleting -1711462110.422097 [0] gc: gc_delete_proxy_writer (0x556f788c3190, 110cd0d:79d6eeac:ea4a8907:803) -1711462110.422102 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=7 -1711462110.422108 [0] gc: gc 0x556f787e1070: deleting -1711462110.422112 [0] gc: gc_delete_proxy_writer (0x556f787e1070, 110cd0d:79d6eeac:ea4a8907:703) -1711462110.422117 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=6 -1711462110.422122 [0] gc: gc 0x556f78814a00: deleting -1711462110.422126 [0] gc: gc_delete_proxy_writer (0x556f78814a00, 110cd0d:79d6eeac:ea4a8907:403) -1711462110.422134 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=5 -1711462110.422140 [0] gc: gc 0x556f782d10f0: deleting -1711462110.422144 [0] gc: gc_delete_proxy_writer (0x556f782d10f0, 110cd0d:79d6eeac:ea4a8907:301c3) -1711462110.422149 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:301c4, 2): reader no longer exists -1711462110.422153 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=4 -1711462110.422158 [0] gc: gc 0x556f789c17b0: deleting -1711462110.422163 [0] gc: gc_delete_proxy_writer (0x556f789c17b0, 110cd0d:79d6eeac:ea4a8907:300c3) -1711462110.422168 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:300c4, 2): reader no longer exists -1711462110.422173 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=3 -1711462110.422178 [0] gc: gc 0x556f78a03780: deleting -1711462110.422182 [0] gc: gc_delete_proxy_writer (0x556f78a03780, 110cd0d:79d6eeac:ea4a8907:200c2) -1711462110.422187 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:200c7, 6): reader no longer exists -1711462110.422192 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=2 -1711462110.422196 [0] gc: gc 0x556f78a26ec0: deleting -1711462110.422200 [0] gc: gc_delete_proxy_writer (0x556f78a26ec0, 110cd0d:79d6eeac:ea4a8907:4c2) -1711462110.422205 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:4c7, 3): reader no longer exists -1711462110.422210 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=1 -1711462110.422215 [0] gc: gc 0x556f78a47730: deleting -1711462110.422219 [0] gc: gc_delete_proxy_writer (0x556f78a47730, 110cd0d:79d6eeac:ea4a8907:3c2) -1711462110.422224 [0] gc: ddsi_update_reader_init_acknack_count (110d7b4:17c5b8c5:94bd0ff4:3c7, 3): reader no longer exists -1711462110.422228 [0] gc: ddsi_unref_proxy_participant(110cd0d:79d6eeac:ea4a8907:1c1): refc=0, freeing -1711462110.422233 [0] gc: lease_unregister(l 0x7590d8010140 guid 110cd0d:79d6eeac:ea4a8907:1c1) -1711462110.422237 [0] gc: lease_free(l 0x7590d8010140 guid 110cd0d:79d6eeac:ea4a8907:1c1) -1711462110.422241 [0] gc: lease_free(l 0x7590d80100c0 guid 110cd0d:79d6eeac:ea4a8907:1c1) -1711462110.422247 [0] gc: ddsi_remove_deleted_participant_guid(110cd0d:79d6eeac:ea4a8907:1c1 for_what=3) -1711462110.422253 [0] gc: gc 0x7590d8014d00: deleting -1711462110.422257 [0] gc: gc 0x556f7899dc00: deleting -1711462110.422262 [0] gc: gc 0x556f789295a0: deleting -1711462110.422266 [0] gc: gc 0x556f781b6bc0: deleting -1711462110.422270 [0] gc: gc 0x556f78209640: deleting -1711462110.422274 [0] gc: gc 0x556f78315b80: deleting -1711462110.422279 [0] gc: gc 0x556f78301d90: deleting -1711462110.422283 [0] gc: gc 0x556f782d7be0: deleting -1711462110.422287 [0] gc: gc 0x556f782e6d60: deleting -1711462110.422292 [0] gc: gc 0x556f782e5800: deleting -1711462110.422297 [0] gc: gc 0x556f78795cb0: deleting -1711462110.422302 [0] gc: gc 0x556f787a7cf0: deleting -1711462110.422306 [0] gc: gc 0x556f787c61d0: deleting -1711462110.422310 [0] gc: gc 0x556f78759ef0: deleting -1711462110.422315 [0] gc: gc 0x556f787bf2f0: deleting -1711462110.422319 [0] gc: gc 0x556f787c5f40: deleting -1711462110.422323 [0] gc: gc 0x556f787c18d0: deleting -1711462110.422328 [0] gc: gc 0x556f78741fe0: deleting -1711462110.422332 [0] gc: gc 0x556f7876c720: deleting -1711462110.422336 [0] gc: gc 0x556f787ebaf0: deleting -1711462110.422340 [0] gc: gc 0x556f78769270: deleting -1711462110.422344 [0] gc: gc 0x556f789d3cf0: deleting -1711462110.422348 [0] gc: gc 0x556f7883c120: deleting -1711462110.422353 [0] gc: gc 0x556f788497e0: deleting -1711462110.422357 [0] gc: gc 0x556f78a8afc0: deleting -1711462110.422365 [0] gc: gc 0x556f78840730: deleting -1711462110.422369 [0] gc: gc 0x556f788c3190: deleting -1711462110.422373 [0] gc: gc 0x556f787e1070: deleting -1711462110.422378 [0] gc: gc 0x556f78814a00: deleting -1711462110.422382 [0] gc: gc 0x556f782d10f0: deleting -1711462110.422390 [0] gc: gc 0x556f787d3830: deleting -1711462110.422417 [0] python3: ddsi_delete_writer_nolinger(guid 0:0:0:100c2) ... -1711462110.422438 [0] python3: writer_set_state(0:0:0:100c2) state transition 0 -> 3 -1711462110.422485 [0] python3: ddsi_delete_writer_nolinger(guid 0:0:0:2c2) ... -1711462110.422491 [0] python3: writer_set_state(0:0:0:2c2) state transition 0 -> 3 -1711462110.422498 [0] python3: ddsi_delete_writer_nolinger(guid 0:0:0:3c2) ... -1711462110.422492 [0] gc: gc 0x556f789d3cf0: not yet, shortsleep -1711462110.422503 [0] python3: writer_set_state(0:0:0:3c2) state transition 0 -> 3 -1711462110.422518 [0] python3: ddsi_delete_writer_nolinger(guid 0:0:0:4c2) ... -1711462110.422523 [0] python3: writer_set_state(0:0:0:4c2) state transition 0 -> 3 -1711462110.423588 [0] gc: gc 0x556f789d3cf0: deleting -1711462110.423609 [0] gc: gc_delete_writer(0x556f789d3cf0, 0:0:0:100c2) -1711462110.423638 [0] gc: gc 0x556f781e6be0: deleting -1711462110.423644 [0] gc: gc_delete_writer(0x556f781e6be0, 0:0:0:2c2) -1711462110.423656 [0] gc: gc 0x556f78a0f590: deleting -1711462110.423660 [0] gc: gc_delete_writer(0x556f78a0f590, 0:0:0:3c2) -1711462110.423669 [0] gc: gc 0x556f78999480: deleting -1711462110.423673 [0] gc: gc_delete_writer(0x556f78999480, 0:0:0:4c2) -1711462110.423706 [0] gc: gc 0x556f78b57230: deleting -1711462110.424084 [0] python3: xpack_addmsg 0x556f78833260 0x7590e400d2b0 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.425157 [0] python3: nn_xpack_send 96: 0x556f7883326c:20 0x7590e400d3a8:48 0x7590f0001a64:28 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.0.(trunc) -1711462110.425166 [0] python3: traffic-xmit (101) 96 -1711462110.425186 [0] python3: leave conn 0x556f7872aec0 for (udp/239.255.0.1, *) interface (default): not leaving yet -1711462110.425203 [0] python3: leave conn 0x556f7875adb0 for (udp/239.255.0.1, *) interface (default): not leaving yet -1711462110.425212 [0] python3: leave conn 0x556f7872aec0 for (udp/239.255.0.1, *) interface udp/10.101.12.71 -1711462110.425228 [0] python3: leave conn 0x556f7875adb0 for (udp/239.255.0.1, *) interface udp/10.101.12.71 -1711462110.425237 [0] python3: ddsi_udp_release_conn multicast socket 7 port 7400 -1711462110.425260 [0] python3: ddsi_udp_release_conn multicast socket 8 port 7401 -1711462110.425268 [0] python3: ddsi_udp_release_conn unicast socket 5 port 7414 -1711462110.425275 [0] python3: ddsi_udp_release_conn unicast socket 6 port 7415 -1711462110.425282 [0] python3: ddsi_udp_release_conn unicast socket 9 port 40473 -1711462110.425292 [0] python3: udp finalized -1711462110.425564 [0] python3: Finis. -1711462090.567655 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 208 from udp/10.101.12.71:44991 -1711462090.567674 [0] recvMC: INFOTS(1711462090.567591438) -1711462090.567659 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 224 from udp/10.101.12.71:44991 -1711462090.567700 [0] recv: INFOTS(1711462090.567575352) -1711462090.567688 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #3 L(:1c1 16938.227177) 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: no heartbeat seen yet) -1711462090.567704 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #3 L(:1c1 16938.227203)) -1711462090.567717 [0] recvMC: HEARTBEAT(#5:3..3 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: end-of-tl-seq(rd 110cd0d:56a27910:57318171:504 #3) end-of-tl-seq(rd 110cd0d:e3b81b8d:1ccb65b1:504 #3) end-of-tl-seq(rd 110cd0d:79d6eeac:ea4a8907:504 #3) 110cd0d:56a27910:57318171:504@2 110cd0d:e3b81b8d:1ccb65b1:504@2 110cd0d:79d6eeac:ea4a8907:504@2) -1711462090.567723 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110443d:bb7f10a5:18901533:403: F#1:3/1:1 -1711462090.567729 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462090.567736 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc007e50 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.567740 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110443d:bb7f10a5:18901533:403: F#8:3/1:1 -1711462090.567743 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462090.567746 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc007fd0 0(control): niov 2 sz 68 => now niov 4 sz 124 -1711462090.567750 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110443d:bb7f10a5:18901533:403: F#17:3/1:1 -1711462090.567753 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462090.567731 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #3: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:703},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.567756 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc007cd0 0(control): niov 4 sz 124 => now niov 6 sz 180 -1711462090.567776 [0] tev: nn_xpack_send 180: 0x7408c000139c:20 0x7408bc007f38:48 0x7408bc0080a0:24 0x7408bc0080c8:32 0x7408bc007da0:24 0x7408bc007dc8:32 [ udp/10.101.12.71:7417@2 ] -1711462090.567778 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:703 reliable volatile writer unnamed: (default).rt/parameter_events/rcl_interfaces::msg::dds_::ParameterEvent_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=0<>,topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.567778 [0] tev: traffic-xmit (1) 180 -1711462090.567794 [0] dq.builtin: => EVERYONE -1711462090.567808 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:703) scanning all rds of topic rt/parameter_events -1711462090.567817 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 192 from udp/10.101.12.71:44991 -1711462090.567830 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462090.567834 [0] recvUC: INFOTS(1711462090.567591438) -1711462090.567853 [0] recvUC: DATA(110443d:bb7f10a5:18901533:403 -> 110cd0d:56a27910:57318171:504 #3 L(:1c1 16938.227333) msr_in_sync(110cd0d:56a27910:57318171:504 out-of-sync to tlcatchup)data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #3: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}}}}} =>110cd0d:56a27910:57318171:504 -1711462090.567870 [0] recvUC: msr_in_sync(110cd0d:e3b81b8d:1ccb65b1:504 out-of-sync to tlcatchup)data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #3: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}}}}} =>110cd0d:e3b81b8d:1ccb65b1:504 -1711462090.567886 [0] recvUC: msr_in_sync(110cd0d:79d6eeac:ea4a8907:504 out-of-sync to tlcatchup)data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #3: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}}}}} =>110cd0d:79d6eeac:ea4a8907:504 -1711462090.567893 [0] recvUC: ) -1711462090.567899 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 240 from udp/10.101.12.71:44991 -1711462090.567903 [0] recvUC: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.567906 [0] recvUC: INFOTS(1711462090.567591438) -1711462090.567910 [0] recvUC: DATA(110443d:bb7f10a5:18901533:403 -> 110cd0d:79d6eeac:ea4a8907:504 #3 L(:1c1 16938.227406)) -1711462090.567913 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462090.567919 [0] recvUC: HEARTBEAT(#6:3..3 110443d:bb7f10a5:18901533:403 -> 110cd0d:56a27910:57318171:504: 110cd0d:56a27910:57318171:504@3(sync)) -1711462090.567921 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110443d:bb7f10a5:18901533:403: F#2:4/0: -1711462090.567924 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462090.567924 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 288 from udp/10.101.12.71:44991 -1711462090.567925 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc007e50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.567929 [0] recvUC: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.567933 [0] recvUC: INFOTS(1711462090.567591438) -1711462090.567938 [0] tev: nn_xpack_send 64: 0x7408c000139c:20 0x7408bc007f38:44 [ udp/10.101.12.71:7417@2 ] -1711462090.567940 [0] tev: traffic-xmit (1) 64 -1711462090.567938 [0] recvUC: DATA(110443d:bb7f10a5:18901533:403 -> 110cd0d:e3b81b8d:1ccb65b1:504 #3 L(:1c1 16938.227433)) -1711462090.567947 [0] recvUC: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.567953 [0] recvUC: HEARTBEAT(#7:3..3 110443d:bb7f10a5:18901533:403 -> 110cd0d:79d6eeac:ea4a8907:504: 110cd0d:79d6eeac:ea4a8907:504@3(sync)) -1711462090.567954 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110443d:bb7f10a5:18901533:403: F#9:4/0: -1711462090.567959 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462090.567956 [0] recvUC: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.567961 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc007e50 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.567966 [0] recvUC: HEARTBEAT(#8:3..3 110443d:bb7f10a5:18901533:403 -> 110cd0d:e3b81b8d:1ccb65b1:504: 110cd0d:e3b81b8d:1ccb65b1:504@3(sync)) -1711462090.567967 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110443d:bb7f10a5:18901533:403: F#18:4/0: -1711462090.567976 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462090.567977 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc007fd0 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.567981 [0] tev: nn_xpack_send 116: 0x7408c000139c:20 0x7408bc007f38:44 0x7408bc0080a0:24 0x7408bc0080c8:28 [ udp/10.101.12.71:7417@2 ] -1711462090.567983 [0] tev: traffic-xmit (1) 116 -1711462090.568280 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 328 from udp/10.101.12.71:44991 -1711462090.568293 [0] recv: INFOTS(1711462090.568216939) -1711462090.568296 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #4 L(:1c1 16938.227797)) -1711462090.568300 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 324 from udp/10.101.12.71:44991 -1711462090.568308 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #4: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.1;">,topic_name="rr/static_transformer/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.568310 [0] recv: INFOTS(1711462090.568255806) -1711462090.568318 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #2 L(:1c1 16938.227814)) -1711462090.568326 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:803 reliable volatile writer unnamed: (default).rr/static_transformer/describe_parametersReply/rcl_interfaces::srv::dds_::DescribeParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.1;">,topic_name="rr/static_transformer/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.568334 [0] dq.builtin: => EVERYONE -1711462090.568336 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 256 from udp/10.101.12.71:44991 -1711462090.568340 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:803) scanning all rds of topic rr/static_transformer/describe_parametersReply -1711462090.568341 [0] recvMC: INFOTS(1711462090.568269284) -1711462090.568352 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #2: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.1;">,topic_name="rq/static_transformer/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:904},adlink_entity_factory=1} -1711462090.568355 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #4 L(:1c1 16938.227845) => EVERYONE -1711462090.568363 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:904 reliable volatile reader unnamed: (default).rq/static_transformer/describe_parametersRequest/rcl_interfaces::srv::dds_::DescribeParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.1;">,topic_name="rq/static_transformer/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.568372 [0] dq.builtin: => EVERYONE -1711462090.568377 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:904) scanning all wrs of topic rq/static_transformer/describe_parametersRequest -1711462090.568378 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #4: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462090.568385 [0] recvMC: HEARTBEAT(F#9:4..4 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@4(sync) 110cd0d:e3b81b8d:1ccb65b1:504@4(sync) 110cd0d:79d6eeac:ea4a8907:504@4(sync)) -1711462090.568541 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 320 from udp/10.101.12.71:44991 -1711462090.568543 [0] recv: INFOTS(1711462090.568522519) -1711462090.568545 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #5 L(:1c1 16938.228047)) -1711462090.568558 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #5: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.2;">,topic_name="rr/static_transformer/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.568566 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:a03 reliable volatile writer unnamed: (default).rr/static_transformer/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.2;">,topic_name="rr/static_transformer/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.568570 [0] dq.builtin: => EVERYONE -1711462090.568574 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:a03) scanning all rds of topic rr/static_transformer/get_parametersReply -1711462090.568581 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 312 from udp/10.101.12.71:44991 -1711462090.568584 [0] recv: INFOTS(1711462090.568565213) -1711462090.568586 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #3 L(:1c1 16938.228088)) -1711462090.568593 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #3: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.2;">,topic_name="rq/static_transformer/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:b04},adlink_entity_factory=1} -1711462090.568603 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:b04 reliable volatile reader unnamed: (default).rq/static_transformer/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.2;">,topic_name="rq/static_transformer/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.568608 [0] dq.builtin: => EVERYONE -1711462090.568615 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:b04) scanning all wrs of topic rq/static_transformer/get_parametersRequest -1711462090.568628 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 304 from udp/10.101.12.71:44991 -1711462090.568631 [0] recvMC: INFOTS(1711462090.568575899) -1711462090.568636 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #5 L(:1c1 16938.228135) => EVERYONE -1711462090.568654 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #5: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462090.568658 [0] recvMC: HEARTBEAT(F#10:5..5 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@5(sync) 110cd0d:e3b81b8d:1ccb65b1:504@5(sync) 110cd0d:79d6eeac:ea4a8907:504@5(sync)) -1711462090.568867 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 328 from udp/10.101.12.71:44991 -1711462090.568873 [0] recv: INFOTS(1711462090.568841289) -1711462090.568878 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #6 L(:1c1 16938.228377)) -1711462090.568889 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #6: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.3;">,topic_name="rr/static_transformer/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.568901 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:c03 reliable volatile writer unnamed: (default).rr/static_transformer/get_parameter_typesReply/rcl_interfaces::srv::dds_::GetParameterTypes_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.3;">,topic_name="rr/static_transformer/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.568912 [0] dq.builtin: => EVERYONE -1711462090.568915 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 324 from udp/10.101.12.71:44991 -1711462090.568918 [0] recv: INFOTS(1711462090.568893800) -1711462090.568919 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:c03) scanning all rds of topic rr/static_transformer/get_parameter_typesReply -1711462090.568923 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #4 L(:1c1 16938.228421)) -1711462090.568929 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #4: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.3;">,topic_name="rq/static_transformer/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:d04},adlink_entity_factory=1} -1711462090.568942 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:d04 reliable volatile reader unnamed: (default).rq/static_transformer/get_parameter_typesRequest/rcl_interfaces::srv::dds_::GetParameterTypes_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.3;">,topic_name="rq/static_transformer/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.568950 [0] dq.builtin: => EVERYONE -1711462090.568955 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:d04) scanning all wrs of topic rq/static_transformer/get_parameter_typesRequest -1711462090.568968 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 352 from udp/10.101.12.71:44991 -1711462090.568970 [0] recvMC: INFOTS(1711462090.568905973) -1711462090.568972 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #6 L(:1c1 16938.228474) => EVERYONE -1711462090.568991 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #6: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,13,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,12,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462090.568995 [0] recvMC: HEARTBEAT(F#11:6..6 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@6(sync) 110cd0d:e3b81b8d:1ccb65b1:504@6(sync) 110cd0d:79d6eeac:ea4a8907:504@6(sync)) -1711462090.569162 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 320 from udp/10.101.12.71:44991 -1711462090.569169 [0] recv: INFOTS(1711462090.569135598) -1711462090.569177 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #7 L(:1c1 16938.228673)) -1711462090.569188 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #7: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.4;">,topic_name="rr/static_transformer/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.569196 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:e03 reliable volatile writer unnamed: (default).rr/static_transformer/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.4;">,topic_name="rr/static_transformer/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.569201 [0] dq.builtin: => EVERYONE -1711462090.569206 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:e03) scanning all rds of topic rr/static_transformer/list_parametersReply -1711462090.569216 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 316 from udp/10.101.12.71:44991 -1711462090.569219 [0] recv: INFOTS(1711462090.569197394) -1711462090.569223 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #5 L(:1c1 16938.228723)) -1711462090.569230 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #5: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.4;">,topic_name="rq/static_transformer/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:f04},adlink_entity_factory=1} -1711462090.569238 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:f04 reliable volatile reader unnamed: (default).rq/static_transformer/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.4;">,topic_name="rq/static_transformer/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.569242 [0] dq.builtin: => EVERYONE -1711462090.569247 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:f04) scanning all wrs of topic rq/static_transformer/list_parametersRequest -1711462090.569281 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 400 from udp/10.101.12.71:44991 -1711462090.569288 [0] recvMC: INFOTS(1711462090.569209337) -1711462090.569294 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #7 L(:1c1 16938.228791) => EVERYONE -1711462090.569331 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #7: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,15,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,14,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462090.569341 [0] recvMC: HEARTBEAT(F#12:7..7 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@7(sync) 110cd0d:e3b81b8d:1ccb65b1:504@7(sync) 110cd0d:79d6eeac:ea4a8907:504@7(sync)) -1711462090.569463 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 320 from udp/10.101.12.71:44991 -1711462090.569468 [0] recv: INFOTS(1711462090.569441604) -1711462090.569473 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #8 L(:1c1 16938.228972)) -1711462090.569480 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #8: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.5;">,topic_name="rr/static_transformer/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:1003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.569489 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:1003 reliable volatile writer unnamed: (default).rr/static_transformer/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.5;">,topic_name="rr/static_transformer/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.569494 [0] dq.builtin: => EVERYONE -1711462090.569498 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:1003) scanning all rds of topic rr/static_transformer/set_parametersReply -1711462090.569507 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 312 from udp/10.101.12.71:44991 -1711462090.569509 [0] recv: INFOTS(1711462090.569489785) -1711462090.569520 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #6 L(:1c1 16938.229013)) -1711462090.569527 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #6: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.5;">,topic_name="rq/static_transformer/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:1104},adlink_entity_factory=1} -1711462090.569534 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:1104 reliable volatile reader unnamed: (default).rq/static_transformer/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.5;">,topic_name="rq/static_transformer/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.569541 [0] dq.builtin: => EVERYONE -1711462090.569546 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:1104) scanning all wrs of topic rq/static_transformer/set_parametersRequest -1711462090.569564 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 448 from udp/10.101.12.71:44991 -1711462090.569570 [0] recvMC: INFOTS(1711462090.569500644) -1711462090.569576 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #8 L(:1c1 16938.229074) => EVERYONE -1711462090.569617 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #8: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,17,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,16,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462090.569623 [0] recvMC: HEARTBEAT(F#13:8..8 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@8(sync) 110cd0d:e3b81b8d:1ccb65b1:504@8(sync) 110cd0d:79d6eeac:ea4a8907:504@8(sync)) -1711462090.569732 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 344 from udp/10.101.12.71:44991 -1711462090.569736 [0] recv: INFOTS(1711462090.569710842) -1711462090.569743 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #9 L(:1c1 16938.229240)) -1711462090.569759 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #9: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.6;">,topic_name="rr/static_transformer/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:1203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.569773 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:1203 reliable volatile writer unnamed: (default).rr/static_transformer/set_parameters_atomicallyReply/rcl_interfaces::srv::dds_::SetParametersAtomically_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.6;">,topic_name="rr/static_transformer/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.569782 [0] dq.builtin: => EVERYONE -1711462090.569788 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:1203) scanning all rds of topic rr/static_transformer/set_parameters_atomicallyReply -1711462090.569801 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 332 from udp/10.101.12.71:44991 -1711462090.569804 [0] recv: INFOTS(1711462090.569761244) -1711462090.569809 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #7 L(:1c1 16938.229308)) -1711462090.569817 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #7: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.6;">,topic_name="rq/static_transformer/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:1304},adlink_entity_factory=1} -1711462090.569827 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:1304 reliable volatile reader unnamed: (default).rq/static_transformer/set_parameters_atomicallyRequest/rcl_interfaces::srv::dds_::SetParametersAtomically_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.44.3d.bb.7f.10.a5.18.90.15.33.0.0.0.6;">,topic_name="rq/static_transformer/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.569833 [0] dq.builtin: => EVERYONE -1711462090.569837 [0] dq.builtin: match_proxy_reader_with_writers(prd 110443d:bb7f10a5:18901533:1304) scanning all wrs of topic rq/static_transformer/set_parameters_atomicallyRequest -1711462090.569857 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 496 from udp/10.101.12.71:44991 -1711462090.569865 [0] recvMC: INFOTS(1711462090.569771719) -1711462090.569871 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #9 L(:1c1 16938.229368) => EVERYONE -1711462090.569916 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #9: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,19,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,16,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,16) -1711462090.569923 [0] recvMC: HEARTBEAT(F#14:9..9 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@9(sync) 110cd0d:e3b81b8d:1ccb65b1:504@9(sync) 110cd0d:79d6eeac:ea4a8907:504@9(sync)) -1711462090.570486 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462090.570494 [0] recv: INFOTS(1711462090.570393375) -1711462090.570500 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462090.570507 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462090.570510 [0] recv: INFOTS(1711462090.570393375) -1711462090.570515 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462090.570511 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.570552 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 bes fc3f NEW (0x00000000-0x0000002c-0x00000000-0x00000000-0x00000000 op-Alienware-x16-R1/0.10.4/Linux/Linux) (data udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 meta udp/239.255.0.1:7400@2 udp/10.101.12.71:7418@2) QOS={user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{}} -1711462090.570561 [0] dq.builtin: lease_new(tdur 10000000000 guid 110aba1:7b19badd:ce0adb73:1c1) @ 0x7408c800c690 -1711462090.570565 [0] dq.builtin: lease_new(tdur 10000000000 guid 110aba1:7b19badd:ce0adb73:1c1) @ 0x7408c80256c0 -1711462090.570582 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:100c7) scanning participants tgt=0 -1711462090.570591 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:3c2) scanning participants tgt=3c7 -1711462090.570598 [0] dq.builtin: reader 110cd0d:56a27910:57318171:3c7 init_acknack_count = 1 -1711462090.570601 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:3c2 rd 110cd0d:56a27910:57318171:3c7) -1711462090.570608 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:3c2 rd 110cd0d:56a27910:57318171:3c7) - out-of-sync -1711462090.570613 [0] dq.builtin: reader 110cd0d:e3b81b8d:1ccb65b1:3c7 init_acknack_count = 12 -1711462090.570617 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:3c2 rd 110cd0d:e3b81b8d:1ccb65b1:3c7) -1711462090.570622 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:3c2 rd 110cd0d:e3b81b8d:1ccb65b1:3c7) -1711462090.570627 [0] dq.builtin: reader 110cd0d:79d6eeac:ea4a8907:3c7 init_acknack_count = 6 -1711462090.570630 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:3c2 rd 110cd0d:79d6eeac:ea4a8907:3c7) -1711462090.570636 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:3c2 rd 110cd0d:79d6eeac:ea4a8907:3c7) -1711462090.570645 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:3c7) scanning participants tgt=3c2 -1711462090.570650 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:56a27910:57318171:3c2 prd 110aba1:7b19badd:ce0adb73:3c7) -1711462090.570655 [0] dq.builtin: writer_add_connection(wr 110cd0d:56a27910:57318171:3c2 prd 110aba1:7b19badd:ce0adb73:3c7) - ack seq 9 -1711462090.570664 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.570669 [0] dq.builtin: reduced nlocs=5 -1711462090.570674 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.570684 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.570689 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.570693 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.570696 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.570700 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.570704 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.570709 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.570712 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.570715 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.570719 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.570723 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.570727 [0] dq.builtin: a b c d -1711462090.570732 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.570737 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.570741 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.570744 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.570749 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.570753 [0] dq.builtin: best = 4 -1711462090.570756 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.570762 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.570767 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:e3b81b8d:1ccb65b1:3c2 prd 110aba1:7b19badd:ce0adb73:3c7) -1711462090.570771 [0] dq.builtin: writer_add_connection(wr 110cd0d:e3b81b8d:1ccb65b1:3c2 prd 110aba1:7b19badd:ce0adb73:3c7) - ack seq 10 -1711462090.570778 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.570782 [0] dq.builtin: reduced nlocs=5 -1711462090.570786 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.570790 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.570794 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.570798 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.570801 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.570805 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.570810 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.570814 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.570819 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.570823 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.570827 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.570832 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.570836 [0] dq.builtin: a b c d -1711462090.570841 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.570845 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.570849 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.570853 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.570857 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.570860 [0] dq.builtin: best = 4 -1711462090.570864 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.570873 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.570877 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:79d6eeac:ea4a8907:3c2 prd 110aba1:7b19badd:ce0adb73:3c7) -1711462090.570881 [0] dq.builtin: writer_add_connection(wr 110cd0d:79d6eeac:ea4a8907:3c2 prd 110aba1:7b19badd:ce0adb73:3c7) - ack seq 10 -1711462090.570889 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.570893 [0] dq.builtin: reduced nlocs=5 -1711462090.570897 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.570901 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.570905 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.570909 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.570913 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.570917 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.570920 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.570925 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.570930 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.570933 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.570937 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.570940 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.570945 [0] dq.builtin: a b c d -1711462090.570950 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.570954 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.570958 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.570961 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.570966 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.570969 [0] dq.builtin: best = 4 -1711462090.570974 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.570979 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.570987 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:4c2) scanning participants tgt=4c7 -1711462090.570992 [0] dq.builtin: reader 110cd0d:56a27910:57318171:4c7 init_acknack_count = 1 -1711462090.570996 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:4c2 rd 110cd0d:56a27910:57318171:4c7) -1711462090.571000 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:4c2 rd 110cd0d:56a27910:57318171:4c7) - out-of-sync -1711462090.571005 [0] dq.builtin: reader 110cd0d:e3b81b8d:1ccb65b1:4c7 init_acknack_count = 10 -1711462090.571009 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:4c2 rd 110cd0d:e3b81b8d:1ccb65b1:4c7) -1711462090.571013 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:4c2 rd 110cd0d:e3b81b8d:1ccb65b1:4c7) -1711462090.571017 [0] dq.builtin: reader 110cd0d:79d6eeac:ea4a8907:4c7 init_acknack_count = 5 -1711462090.571020 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:4c2 rd 110cd0d:79d6eeac:ea4a8907:4c7) -1711462090.571025 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:4c2 rd 110cd0d:79d6eeac:ea4a8907:4c7) -1711462090.571034 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:4c7) scanning participants tgt=4c2 -1711462090.571038 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:56a27910:57318171:4c2 prd 110aba1:7b19badd:ce0adb73:4c7) -1711462090.571043 [0] dq.builtin: writer_add_connection(wr 110cd0d:56a27910:57318171:4c2 prd 110aba1:7b19badd:ce0adb73:4c7) - ack seq 10 -1711462090.571053 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.571057 [0] dq.builtin: reduced nlocs=5 -1711462090.571062 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571067 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571072 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571075 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571080 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.571083 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571088 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571092 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.571095 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571099 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571102 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.571105 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571109 [0] dq.builtin: a b c d -1711462090.571113 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.571117 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.571121 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.571126 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.571130 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.571133 [0] dq.builtin: best = 4 -1711462090.571137 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.571142 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.571147 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:e3b81b8d:1ccb65b1:4c2 prd 110aba1:7b19badd:ce0adb73:4c7) -1711462090.571151 [0] dq.builtin: writer_add_connection(wr 110cd0d:e3b81b8d:1ccb65b1:4c2 prd 110aba1:7b19badd:ce0adb73:4c7) - ack seq 10 -1711462090.571157 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.571161 [0] dq.builtin: reduced nlocs=5 -1711462090.571165 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571170 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571173 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571177 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571181 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.571185 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571189 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571193 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.571202 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571205 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571209 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.571213 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571217 [0] dq.builtin: a b c d -1711462090.571221 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.571225 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.571229 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.571235 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.571239 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.571243 [0] dq.builtin: best = 4 -1711462090.571246 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.571255 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.571260 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:79d6eeac:ea4a8907:4c2 prd 110aba1:7b19badd:ce0adb73:4c7) -1711462090.571264 [0] dq.builtin: writer_add_connection(wr 110cd0d:79d6eeac:ea4a8907:4c2 prd 110aba1:7b19badd:ce0adb73:4c7) - ack seq 10 -1711462090.571270 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.571274 [0] dq.builtin: reduced nlocs=5 -1711462090.571278 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571281 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571285 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571289 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571292 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.571296 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571299 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571303 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.571306 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571310 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571313 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.571318 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571323 [0] dq.builtin: a b c d -1711462090.571327 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.571330 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.571335 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.571340 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.571344 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.571347 [0] dq.builtin: best = 4 -1711462090.571351 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.571355 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.571364 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:200c2) scanning participants tgt=200c7 -1711462090.571368 [0] dq.builtin: reader 110cd0d:56a27910:57318171:200c7 init_acknack_count = 1 -1711462090.571372 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:200c2 rd 110cd0d:56a27910:57318171:200c7) -1711462090.571377 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:200c2 rd 110cd0d:56a27910:57318171:200c7) - out-of-sync -1711462090.571382 [0] dq.builtin: reader 110cd0d:e3b81b8d:1ccb65b1:200c7 init_acknack_count = 7 -1711462090.571386 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:200c2 rd 110cd0d:e3b81b8d:1ccb65b1:200c7) -1711462090.571390 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:200c2 rd 110cd0d:e3b81b8d:1ccb65b1:200c7) -1711462090.571394 [0] dq.builtin: reader 110cd0d:79d6eeac:ea4a8907:200c7 init_acknack_count = 5 -1711462090.571399 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:200c2 rd 110cd0d:79d6eeac:ea4a8907:200c7) -1711462090.571406 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:200c2 rd 110cd0d:79d6eeac:ea4a8907:200c7) -1711462090.571413 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:200c7) scanning participants tgt=200c2 -1711462090.571417 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:56a27910:57318171:200c2 prd 110aba1:7b19badd:ce0adb73:200c7) -1711462090.571421 [0] dq.builtin: writer_add_connection(wr 110cd0d:56a27910:57318171:200c2 prd 110aba1:7b19badd:ce0adb73:200c7) - ack seq 1 -1711462090.571428 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.571433 [0] dq.builtin: reduced nlocs=5 -1711462090.571437 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571441 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571446 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571449 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571453 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.571456 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571460 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571463 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.571466 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571470 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571474 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.571477 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571483 [0] dq.builtin: a b c d -1711462090.571487 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.571490 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.571494 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.571499 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.571503 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.571505 [0] dq.builtin: best = 4 -1711462090.571509 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.571513 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.571518 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:e3b81b8d:1ccb65b1:200c2 prd 110aba1:7b19badd:ce0adb73:200c7) -1711462090.571522 [0] dq.builtin: writer_add_connection(wr 110cd0d:e3b81b8d:1ccb65b1:200c2 prd 110aba1:7b19badd:ce0adb73:200c7) - ack seq 3 -1711462090.571529 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.571533 [0] dq.builtin: reduced nlocs=5 -1711462090.571537 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571541 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571544 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571548 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571551 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.571555 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571558 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571562 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.571565 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571568 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571572 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.571578 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571582 [0] dq.builtin: a b c d -1711462090.571587 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.571591 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.571594 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.571598 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.571602 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.571605 [0] dq.builtin: best = 4 -1711462090.571608 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.571612 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.571617 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:79d6eeac:ea4a8907:200c2 prd 110aba1:7b19badd:ce0adb73:200c7) -1711462090.571620 [0] dq.builtin: writer_add_connection(wr 110cd0d:79d6eeac:ea4a8907:200c2 prd 110aba1:7b19badd:ce0adb73:200c7) - ack seq 3 -1711462090.571627 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.571631 [0] dq.builtin: reduced nlocs=5 -1711462090.571634 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571638 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571642 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571645 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571648 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.571652 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571655 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571658 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.571663 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571667 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571671 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.571674 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571679 [0] dq.builtin: a b c d -1711462090.571683 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.571686 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.571690 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.571694 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.571698 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.571701 [0] dq.builtin: best = 4 -1711462090.571704 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.571709 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.571718 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:300c3) scanning participants tgt=300c4 -1711462090.571722 [0] dq.builtin: reader 110cd0d:56a27910:57318171:300c4 init_acknack_count = 1 -1711462090.571725 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:300c3 rd 110cd0d:56a27910:57318171:300c4) -1711462090.571729 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:300c3 rd 110cd0d:56a27910:57318171:300c4) - out-of-sync -1711462090.571734 [0] dq.builtin: reader 110cd0d:e3b81b8d:1ccb65b1:300c4 init_acknack_count = 5 -1711462090.571739 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:300c3 rd 110cd0d:e3b81b8d:1ccb65b1:300c4) -1711462090.571744 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:300c3 rd 110cd0d:e3b81b8d:1ccb65b1:300c4) -1711462090.571748 [0] dq.builtin: reader 110cd0d:79d6eeac:ea4a8907:300c4 init_acknack_count = 3 -1711462090.571751 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:300c3 rd 110cd0d:79d6eeac:ea4a8907:300c4) -1711462090.571755 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:300c3 rd 110cd0d:79d6eeac:ea4a8907:300c4) -1711462090.571763 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:300c4) scanning participants tgt=300c3 -1711462090.571767 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:56a27910:57318171:300c3 prd 110aba1:7b19badd:ce0adb73:300c4) -1711462090.571771 [0] dq.builtin: writer_add_connection(wr 110cd0d:56a27910:57318171:300c3 prd 110aba1:7b19badd:ce0adb73:300c4) - ack seq 0 -1711462090.571779 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.571782 [0] dq.builtin: reduced nlocs=5 -1711462090.571787 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571790 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571793 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571797 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571801 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.571804 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571808 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571811 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.571814 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571817 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571821 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.571824 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571825 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:3c2) suppressed, resched in 0.1 s (min-ack 9!, avail-seq 9, xmit 9) -1711462090.571828 [0] dq.builtin: a b c d -1711462090.571841 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.571845 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.571848 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.571852 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.571856 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.571859 [0] dq.builtin: best = 4 -1711462090.571862 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.571867 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.571872 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:e3b81b8d:1ccb65b1:300c3 prd 110aba1:7b19badd:ce0adb73:300c4) -1711462090.571876 [0] dq.builtin: writer_add_connection(wr 110cd0d:e3b81b8d:1ccb65b1:300c3 prd 110aba1:7b19badd:ce0adb73:300c4) - ack seq 0 -1711462090.571883 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.571886 [0] dq.builtin: reduced nlocs=5 -1711462090.571890 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571893 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571896 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571899 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571906 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.571909 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571912 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571915 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.571919 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571922 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571926 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.571929 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.571932 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:3c2) suppressed, resched in 0.1 s (min-ack 10!, avail-seq 9, xmit 10) -1711462090.571932 [0] dq.builtin: a b c d -1711462090.571941 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.571945 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.571949 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.571952 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.571957 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.571959 [0] dq.builtin: best = 4 -1711462090.571963 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.571967 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.571972 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:79d6eeac:ea4a8907:300c3 prd 110aba1:7b19badd:ce0adb73:300c4) -1711462090.571976 [0] dq.builtin: writer_add_connection(wr 110cd0d:79d6eeac:ea4a8907:300c3 prd 110aba1:7b19badd:ce0adb73:300c4) - ack seq 0 -1711462090.571982 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.571986 [0] dq.builtin: reduced nlocs=5 -1711462090.571990 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.571994 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.571997 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572001 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572004 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.572008 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572014 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572008 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 204 from udp/10.101.12.71:44991 -1711462090.572018 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.572027 [0] recv: INFOTS(1711462090.571973111) -1711462090.572033 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572033 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #10 L(:1c1 16938.231530)) -1711462090.572042 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:3c2) suppressed, resched in 0.1 s (min-ack 10!, avail-seq 9, xmit 10) -1711462090.572038 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572055 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.572059 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572063 [0] dq.builtin: a b c d -1711462090.572066 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.572070 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.572075 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.572078 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 520 from udp/10.101.12.71:44991 -1711462090.572087 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.572094 [0] recvMC: INFOTS(1711462090.571985769) -1711462090.572099 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.572116 [0] dq.builtin: best = 4 -1711462090.572120 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.572106 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #10 L(:1c1 16938.231597) => EVERYONE -1711462090.572125 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.572138 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:301c3) scanning participants tgt=301c4 -1711462090.572142 [0] dq.builtin: reader 110cd0d:56a27910:57318171:301c4 init_acknack_count = 1 -1711462090.572146 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:301c3 rd 110cd0d:56a27910:57318171:301c4) -1711462090.572150 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:301c3 rd 110cd0d:56a27910:57318171:301c4) - out-of-sync -1711462090.572154 [0] dq.builtin: reader 110cd0d:e3b81b8d:1ccb65b1:301c4 init_acknack_count = 5 -1711462090.572157 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:301c3 rd 110cd0d:e3b81b8d:1ccb65b1:301c4) -1711462090.572160 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:301c3 rd 110cd0d:e3b81b8d:1ccb65b1:301c4) -1711462090.572165 [0] dq.builtin: reader 110cd0d:79d6eeac:ea4a8907:301c4 init_acknack_count = 3 -1711462090.572168 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:301c3 rd 110cd0d:79d6eeac:ea4a8907:301c4) -1711462090.572174 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:301c3 rd 110cd0d:79d6eeac:ea4a8907:301c4) -1711462090.572182 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:301c4) scanning participants tgt=301c3 -1711462090.572187 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:56a27910:57318171:301c3 prd 110aba1:7b19badd:ce0adb73:301c4) -1711462090.572182 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #10: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,19,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,16,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,16) -1711462090.572192 [0] dq.builtin: writer_add_connection(wr 110cd0d:56a27910:57318171:301c3 prd 110aba1:7b19badd:ce0adb73:301c4) - ack seq 0 -1711462090.572200 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.572203 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:4c2) suppressed, resched in 0.1 s (min-ack 10!, avail-seq 10, xmit 10) -1711462090.572205 [0] dq.builtin: reduced nlocs=5 -1711462090.572201 [0] recvMC: HEARTBEAT(F#15:10..10 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@10(sync) 110cd0d:e3b81b8d:1ccb65b1:504@10(sync) 110cd0d:79d6eeac:ea4a8907:504@10(sync)) -1711462090.572216 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572234 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.572237 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572241 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572244 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.572247 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572251 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572254 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.572257 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572260 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572264 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.572268 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572272 [0] dq.builtin: a b c d -1711462090.572276 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.572280 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.572284 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.572288 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.572292 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.572294 [0] dq.builtin: best = 4 -1711462090.572297 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.572301 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.572306 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:e3b81b8d:1ccb65b1:301c3 prd 110aba1:7b19badd:ce0adb73:301c4) -1711462090.572310 [0] dq.builtin: writer_add_connection(wr 110cd0d:e3b81b8d:1ccb65b1:301c3 prd 110aba1:7b19badd:ce0adb73:301c4) - ack seq 0 -1711462090.572314 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:4c2) suppressed, resched in 0.1 s (min-ack 10!, avail-seq 10, xmit 10) -1711462090.572316 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.572324 [0] dq.builtin: reduced nlocs=5 -1711462090.572328 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572331 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.572334 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572338 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572341 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.572344 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572347 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572350 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.572353 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572356 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572359 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.572362 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572365 [0] dq.builtin: a b c d -1711462090.572368 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.572372 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.572375 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.572381 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.572385 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.572388 [0] dq.builtin: best = 4 -1711462090.572391 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.572396 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.572400 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:79d6eeac:ea4a8907:301c3 prd 110aba1:7b19badd:ce0adb73:301c4) -1711462090.572403 [0] dq.builtin: writer_add_connection(wr 110cd0d:79d6eeac:ea4a8907:301c3 prd 110aba1:7b19badd:ce0adb73:301c4) - ack seq 0 -1711462090.572410 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 udp/10.101.12.71:7418@2 -1711462090.572413 [0] dq.builtin: reduced nlocs=5 -1711462090.572417 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572421 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462090.572425 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572428 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572433 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462090.572430 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 84 from udp/10.101.12.71:52025 -1711462090.572437 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572442 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572413 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:4c2) suppressed, resched in 0.1 s (min-ack 10!, avail-seq 10, xmit 10) -1711462090.572447 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7418@2 3 -> 0 -1711462090.572447 [0] recv: HEARTBEAT(#1:1..2 L(:1c1 16938.231947)110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0: end-of-tl-seq(rd 110cd0d:56a27910:57318171:3c7 #2) 110cd0d:56a27910:57318171:3c7@0 110cd0d:e3b81b8d:1ccb65b1:3c7@2(sync) 110cd0d:79d6eeac:ea4a8907:3c7@2(sync)) -1711462090.572458 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572465 [0] recv: HEARTBEAT(#1:1..1 110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0: end-of-tl-seq(rd 110cd0d:56a27910:57318171:4c7 #1) 110cd0d:56a27910:57318171:4c7@0 110cd0d:e3b81b8d:1ccb65b1:4c7@1(sync) 110cd0d:79d6eeac:ea4a8907:4c7@1(sync)) -1711462090.572470 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.572473 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462090.572455 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110aba1:7b19badd:ce0adb73:3c2: F#1:1/2:11 -1711462090.572474 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 52 from udp/10.101.12.71:52025 -1711462090.572490 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110aba1:7b19badd:ce0adb73:3c2) -1711462090.572494 [0] recv: HEARTBEAT(#1:1..1 L(:1c1 16938.231996)110aba1:7b19badd:ce0adb73:200c2 -> 0:0:0:0: end-of-tl-seq(rd 110cd0d:56a27910:57318171:200c7 #1) 110cd0d:56a27910:57318171:200c7@0 110cd0d:e3b81b8d:1ccb65b1:200c7@1(sync) 110cd0d:79d6eeac:ea4a8907:200c7@1(sync)) -1711462090.572501 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc007e50 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.572508 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110aba1:7b19badd:ce0adb73:3c2: F#12:3/0: -1711462090.572512 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:3c7 -> pwr 110aba1:7b19badd:ce0adb73:3c2) -1711462090.572516 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc007fd0 0(control): niov 2 sz 68 => now niov 4 sz 120 -1711462090.572520 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:3c7 -> 110aba1:7b19badd:ce0adb73:3c2: F#6:3/0: -1711462090.572522 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:3c7 -> pwr 110aba1:7b19badd:ce0adb73:3c2) -1711462090.572528 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc007cd0 0(control): niov 4 sz 120 => now niov 6 sz 172 -1711462090.572478 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7400@2 4 -> 8 -1711462090.572536 [0] dq.builtin: a b c d -1711462090.572541 [0] dq.builtin: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. .. } -1711462090.572545 [0] dq.builtin: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. .. +u } -1711462090.572531 [0] tev: acknack 110cd0d:56a27910:57318171:4c7 -> 110aba1:7b19badd:ce0adb73:4c2: F#1:1/1:1 -1711462090.572551 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:4c7 -> pwr 110aba1:7b19badd:ce0adb73:4c2) -1711462090.572554 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc0079d0 0(control): niov 6 sz 172 => now niov 8 sz 228 -1711462090.572555 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462090.572549 [0] dq.builtin: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. .. } -1711462090.572562 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462090.572557 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110aba1:7b19badd:ce0adb73:4c2: F#10:2/0: -1711462090.572570 [0] recvUC: ACKNACK(#0:1/0: L(:1c1 16938.232065) 110443d:bb7f10a5:18901533:504 -> 110cd0d:56a27910:57318171:403 preemptive-nack rebase defer_heartbeat_to_peer: 110cd0d:56a27910:57318171:403 -> 110443d:bb7f10a5:18901533:504 - queue for transmit -1711462090.572572 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:4c7 -> pwr 110aba1:7b19badd:ce0adb73:4c2) -1711462090.572583 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc007b50 0(control): niov 8 sz 228 => now niov 10 sz 280 -1711462090.572580 [0] dq.builtin: loc 3 = udp/10.101.12.71:7418@2 1 { .. .. +u .. } -1711462090.572579 [0] recvUC: non-timed queue now has 1 items -1711462090.572592 [0] dq.builtin: loc 4 = udp/239.255.0.1:7400@2 -1 { +1 +1 +1 +1 } -1711462090.572602 [0] dq.builtin: best = 4 -1711462090.572599 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 84 from udp/10.101.12.71:52025 -1711462090.572606 [0] dq.builtin: simple udp/239.255.0.1:7400@2 -1711462090.572603 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:4c7 -> 110aba1:7b19badd:ce0adb73:4c2: F#5:2/0: -1711462090.572616 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:4c7 -> pwr 110aba1:7b19badd:ce0adb73:4c2) -1711462090.572598 [0] recvUC: ) -1711462090.572618 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc007850 0(control): niov 10 sz 280 => now niov 12 sz 332 -1711462090.572613 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462090.572625 [0] tev: acknack 110cd0d:56a27910:57318171:200c7 -> 110aba1:7b19badd:ce0adb73:200c2: F#1:1/1:1 -1711462090.572638 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:200c7 -> pwr 110aba1:7b19badd:ce0adb73:200c2) -1711462090.572641 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc0076d0 0(control): niov 12 sz 332 => now niov 14 sz 388 -1711462090.572638 [0] recv: HEARTBEAT(#1:1..0 L(:1c1 16938.232139)110aba1:7b19badd:ce0adb73:300c3 -> 0:0:0:0: end-of-tl-seq(rd 110cd0d:56a27910:57318171:300c4 #0) msr_in_sync(110cd0d:56a27910:57318171:300c4 out-of-sync to tlcatchup) 110cd0d:56a27910:57318171:300c4@0(sync) 110cd0d:e3b81b8d:1ccb65b1:300c4@0(sync) 110cd0d:79d6eeac:ea4a8907:300c4@0(sync)) -1711462090.572644 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:200c7 -> 110aba1:7b19badd:ce0adb73:200c2: F#7:2/0: -1711462090.572650 [0] recv: HEARTBEAT(#1:1..0 110aba1:7b19badd:ce0adb73:301c3 -> 0:0:0:0: end-of-tl-seq(rd 110cd0d:56a27910:57318171:301c4 #0) msr_in_sync(110cd0d:56a27910:57318171:301c4 out-of-sync to tlcatchup) 110cd0d:56a27910:57318171:301c4@0(sync) 110cd0d:e3b81b8d:1ccb65b1:301c4@0(sync) 110cd0d:79d6eeac:ea4a8907:301c4@0(sync)) -1711462090.572650 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:200c7 -> pwr 110aba1:7b19badd:ce0adb73:200c2) -1711462090.572650 [0] dq.builtin: => EVERYONE -1711462090.572662 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc007550 0(control): niov 14 sz 388 => now niov 16 sz 440 -1711462090.572671 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:200c7 -> 110aba1:7b19badd:ce0adb73:200c2: F#5:2/0: -1711462090.572673 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:200c7 -> pwr 110aba1:7b19badd:ce0adb73:200c2) -1711462090.572674 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc0073d0 0(control): niov 16 sz 440 => now niov 18 sz 492 -1711462090.572675 [0] dq.builtin: lease_register(l 0x7408c80256c0 guid 110aba1:7b19badd:ce0adb73:1c1) -1711462090.572678 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:200c2) suppressed, resched in 0.1 s (min-ack 1!, avail-seq 1, xmit 1) -1711462090.572683 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:200c2) suppressed, resched in 0.1 s (min-ack 3!, avail-seq 3, xmit 3) -1711462090.572686 [0] dq.builtin: broadcasted SPDP packet -> answering 0 0 0 -1711462090.572686 [0] tev: acknack 110cd0d:56a27910:57318171:300c4 -> 110aba1:7b19badd:ce0adb73:300c3: F#1:1/0: -1711462090.572689 [0] gc: gc 0x7408c80640a0: not yet, shortsleep -1711462090.572698 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:300c4 -> pwr 110aba1:7b19badd:ce0adb73:300c3) -1711462090.572700 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c4009af0 0(control): niov 18 sz 492 => now niov 20 sz 544 -1711462090.572702 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:300c4 -> 110aba1:7b19badd:ce0adb73:300c3: F#5:1/0: -1711462090.572704 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:300c4 -> pwr 110aba1:7b19badd:ce0adb73:300c3) -1711462090.572705 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.572706 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c4008bf0 0(control): niov 20 sz 544 => now niov 22 sz 596 -1711462090.572713 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:300c4 -> 110aba1:7b19badd:ce0adb73:300c3: F#3:1/0: -1711462090.572713 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (known) L(:1c1 16938.232216) -1711462090.572715 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:300c4 -> pwr 110aba1:7b19badd:ce0adb73:300c3) -1711462090.572720 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c4008d70 0(control): niov 22 sz 596 => now niov 24 sz 648 -1711462090.572723 [0] tev: acknack 110cd0d:56a27910:57318171:301c4 -> 110aba1:7b19badd:ce0adb73:301c3: F#1:1/0: -1711462090.572724 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #10: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/tf_static",type_name="tf2_msgs::msg::dds_::TFMessage_",durability=1,reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110443d:bb7f10a5:18901533:1403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.572725 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:301c4 -> pwr 110aba1:7b19badd:ce0adb73:301c3) -1711462090.572733 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c4008ef0 0(control): niov 24 sz 648 => now niov 26 sz 700 -1711462090.572735 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:301c4 -> 110aba1:7b19badd:ce0adb73:301c3: F#5:1/0: -1711462090.572737 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:301c4 -> pwr 110aba1:7b19badd:ce0adb73:301c3) -1711462090.572741 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c4008470 0(control): niov 26 sz 700 => now niov 28 sz 752 -1711462090.572744 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:301c4 -> 110aba1:7b19badd:ce0adb73:301c3: F#3:1/0: -1711462090.572747 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:301c4 -> pwr 110aba1:7b19badd:ce0adb73:301c3) -1711462090.572744 [0] dq.builtin: SEDP ST0 110443d:bb7f10a5:18901533:1403 reliable transient-local writer unnamed: (default).rt/tf_static/tf2_msgs::msg::dds_::TFMessage_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7417@2 ssm=0) QOS={user_data=0<>,topic_name="rt/tf_static",type_name="tf2_msgs::msg::dds_::TFMessage_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.572749 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40085f0 0(control): niov 28 sz 752 => now niov 30 sz 804 -1711462090.572754 [0] tev: non-timed queue now has 2 items -1711462090.572757 [0] tev: xmit spdp 110cd0d:56a27910:57318171:1c1 to 110aba1:7b19badd:ce0adb73:100c7 (resched 1s) -1711462090.572760 [0] dq.builtin: => EVERYONE -1711462090.572762 [0] tev: non-timed queue now has 3 items -1711462090.572768 [0] tev: xmit spdp 110cd0d:e3b81b8d:1ccb65b1:1c1 to 110aba1:7b19badd:ce0adb73:100c7 (resched 1s) -1711462090.572770 [0] tev: non-timed queue now has 4 items -1711462090.572771 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110443d:bb7f10a5:18901533:1403) scanning all rds of topic rt/tf_static -1711462090.572772 [0] tev: xmit spdp 110cd0d:79d6eeac:ea4a8907:1c1 to 110aba1:7b19badd:ce0adb73:100c7 (resched 1s) -1711462090.572778 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:200c2) suppressed, resched in 0.1 s (min-ack 3!, avail-seq 3, xmit 3) -1711462090.572793 [0] tev: nn_xpack_send 804: 0x7408c000139c:20 0x7408bc007f38:48 0x7408bc0080a0:24 0x7408bc0080c8:28 0x7408bc007da0:24 0x7408bc007dc8:28 0x7408bc007aa0:24 0x7408bc007ac8:32 0x7408bc007c20:24 0x7408bc007c48:28 0x7408bc007920:24 0x7408bc007948:28 0x7408bc0077a0:24 0x7408bc0077c8:32 0x7408bc007620:24 0x7408bc007648:28 0x7408bc0074a0:24 0x7408bc0074c8:28 0x7408c4009bc0:24 0x7408c4009be8:28 0x7408c4008cc0:24 0x7408c4008ce8:28 0x7408c4008e40:24 0x7408c4008e68:28 0x7408c4008fc0:24 0x7408c4008fe8:28 0x7408c4008540:24 0x7408c4008568:28 0x7408c40086c0:24 0x7408c40086e8:28 [ udp/10.101.12.71:7418@2 ] -1711462090.572795 [0] tev: traffic-xmit (1) 804 -1711462090.572797 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc008330 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.572802 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408bc008418:48 [ udp/10.101.12.71:7417@2 ] -1711462090.572804 [0] tev: traffic-xmit (1) 68 -1711462090.572806 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c4008770 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 460 -1711462090.572809 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c4008a70 0(data(0:0:0:0:#0/1)): niov 3 sz 460 => now niov 6 sz 908 -1711462090.572811 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40079f0 0(data(0:0:0:0:#0/1)): niov 6 sz 908 => now niov 9 sz 1356 -1711462090.572817 [0] tev: nn_xpack_send 1356: 0x7408c000139c:20 0x7408c4008858:52 0x7408ac009c94:388 0x7408c4008b40:24 0x7408c4008b68:36 0x7408d401eea4:388 0x7408c4007ac0:24 0x7408c4007ae8:36 0x7408e000a504:388 [ udp/10.101.12.71:7418@2 ] -1711462090.572818 [0] tev: traffic-xmit (1) 1356 -1711462090.572851 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 84 from udp/10.101.12.71:52025 -1711462090.572856 [0] recv: INFOTS(1711462090.570429633) -1711462090.572862 [0] recv: DATA(110aba1:7b19badd:ce0adb73:200c2 -> 0:0:0:0 #1 L(:1c1 16938.232359) msr_in_sync(110cd0d:56a27910:57318171:200c7 out-of-sync to tlcatchup)) -1711462090.572868 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:200c2 #1: ST0 DCPSParticipantMessage/ParticipantMessageData:{110aba1:7b19badd:ce0adb73:1}:1<0> -1711462090.572873 [0] dq.builtin: PMD ST0 pp 110aba1:7b19badd:ce0adb73 kind 1 data 1 -1711462090.572881 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 68 from udp/10.101.12.71:44991 -1711462090.572889 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462090.572900 [0] recvUC: ACKNACK(F#1:12/1:1 L(:1c1 16938.232392) 110443d:bb7f10a5:18901533:504 -> 110cd0d:56a27910:57318171:403 complying RX12non-timed queue now has 1 items -1711462090.572906 [0] recvUC: rexmit#1 maxseq:12<12<=12defer_heartbeat_to_peer: 110cd0d:56a27910:57318171:403 -> 110443d:bb7f10a5:18901533:504 - queue for transmit -1711462090.572909 [0] recvUC: ) -1711462090.572915 [0] recvUC: send_deferred_heartbeat: 790fc2d10bf8844f -> 7bd5090527eafdf7 - queue for transmit -1711462090.572918 [0] recvUC: non-timed queue now has 2 items -1711462090.572912 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:300c3) suppressed, resched in 0.1 s (min-ack 0!, avail-seq 0, xmit 0) -1711462090.572930 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc0084b0 0(rexmit(110cd0d:56a27910:57318171:403:#12/1)): niov 0 sz 0 => now niov 3 sz 544 -1711462090.572937 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc008630 0(control): niov 3 sz 544 => now niov 4 sz 576 -1711462090.572953 [0] tev: nn_xpack_send 576: 0x7408c000139c:20 0x7408bc008598:52 0x7408ac01b0d0:472 0x7408bc008728:32 [ udp/10.101.12.71:7417@2 ] -1711462090.572957 [0] tev: traffic-xmit (1) 576 -1711462090.573026 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:300c3) suppressed, resched in 0.1 s (min-ack 0!, avail-seq 0, xmit 0) -1711462090.573073 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462090.573078 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462090.573084 [0] recvUC: ACKNACK(F#2:13/0: L(:1c1 16938.232581) 110443d:bb7f10a5:18901533:504 -> 110cd0d:56a27910:57318171:403 setting-has-replied-to-hb happy-now) -1711462090.573187 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:300c3) suppressed, resched in 0.1 s (min-ack 0!, avail-seq 0, xmit 0) -1711462090.573359 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:301c3) suppressed, resched in 0.1 s (min-ack 0!, avail-seq 0, xmit 0) -1711462090.573453 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:301c3) suppressed, resched in 0.1 s (min-ack 0!, avail-seq 0, xmit 0) -1711462090.573633 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462090.573643 [0] recvUC: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.573649 [0] recvUC: ACKNACK(#0:1/0: L(:1c1 16938.233146) 110443d:bb7f10a5:18901533:504 -> 110cd0d:e3b81b8d:1ccb65b1:403 preemptive-nack rebase defer_heartbeat_to_peer: 110cd0d:e3b81b8d:1ccb65b1:403 -> 110443d:bb7f10a5:18901533:504 - queue for transmit -1711462090.573656 [0] recvUC: non-timed queue now has 1 items -1711462090.573659 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 612 from udp/10.101.12.71:40473 -1711462090.573664 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:301c3) suppressed, resched in 0.1 s (min-ack 0!, avail-seq 0, xmit 0) -1711462090.573665 [0] recv: INFOTS(1711462090.573532356) -1711462090.573670 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc008800 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.573672 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 536 from udp/10.101.12.71:40473 -1711462090.573678 [0] recvMC: INFOTS(1711462090.573586880) -1711462090.573682 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408bc0088e8:48 [ udp/10.101.12.71:7417@2 ] -1711462090.573686 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #10 L(:1c1 16938.233181) => EVERYONE -1711462090.573688 [0] tev: traffic-xmit (1) 68 -1711462090.573661 [0] recvUC: ) -1711462090.573681 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #10 L(:1c1 16938.233169)) -1711462090.573715 [0] recv: INFOTS(1711462090.573575071) -1711462090.573722 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #8) -1711462090.573738 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #10: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1) -1711462090.573739 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #10: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.7;">,topic_name="rr/topological_map_manager2/get_topological_mapReply",type_name="std_srvs::srv::dds_::Trigger_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.573748 [0] recvMC: HEARTBEAT(F#16:10..10 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@10(sync) 110cd0d:e3b81b8d:1ccb65b1:504@10(sync) 110cd0d:79d6eeac:ea4a8907:504@10(sync)) -1711462090.573754 [0] gc: gc 0x7408c80640a0: deleting -1711462090.573761 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 68 from udp/10.101.12.71:44991 -1711462090.573771 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1403 reliable volatile writer unnamed: (default).rr/topological_map_manager2/get_topological_mapReply/std_srvs::srv::dds_::Trigger_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.7;">,topic_name="rr/topological_map_manager2/get_topological_mapReply",type_name="std_srvs::srv::dds_::Trigger_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.573775 [0] recvUC: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.573785 [0] dq.builtin: => EVERYONE -1711462090.573790 [0] recvUC: ACKNACK(F#1:13/1:1 L(:1c1 16938.233278) 110443d:bb7f10a5:18901533:504 -> 110cd0d:e3b81b8d:1ccb65b1:403 complying RX13non-timed queue now has 1 items -1711462090.573791 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:1403) scanning all rds of topic rr/topological_map_manager2/get_topological_mapReply -1711462090.573796 [0] recvUC: rexmit#1 maxseq:13<13<=13defer_heartbeat_to_peer: 110cd0d:e3b81b8d:1ccb65b1:403 -> 110443d:bb7f10a5:18901533:504 - queue for transmit -1711462090.573804 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #8: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.7;">,topic_name="rq/topological_map_manager2/get_topological_mapRequest",type_name="std_srvs::srv::dds_::Trigger_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1504},adlink_entity_factory=1} -1711462090.573800 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc008980 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:403:#13/1)): niov 0 sz 0 => now niov 3 sz 520 -1711462090.573804 [0] recvUC: ) -1711462090.573817 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1504 reliable volatile reader unnamed: (default).rq/topological_map_manager2/get_topological_mapRequest/std_srvs::srv::dds_::Trigger_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.7;">,topic_name="rq/topological_map_manager2/get_topological_mapRequest",type_name="std_srvs::srv::dds_::Trigger_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.573820 [0] recvUC: send_deferred_heartbeat: 18ed9dbea84bb67e -> 7bd5090527eafdf7 - queue for transmit -1711462090.573826 [0] dq.builtin: => EVERYONE -1711462090.573827 [0] recvUC: non-timed queue now has 1 items -1711462090.573830 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:1504) scanning all wrs of topic rq/topological_map_manager2/get_topological_mapRequest -1711462090.573825 [0] tev: nn_xpack_send 520: 0x7408c000139c:20 0x7408bc008a68:52 0x7408d406c3b0:448 [ udp/10.101.12.71:7417@2 ] -1711462090.573837 [0] tev: traffic-xmit (1) 520 -1711462090.573841 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc008b00 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.573850 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408bc008be8:48 [ udp/10.101.12.71:7417@2 ] -1711462090.573853 [0] tev: traffic-xmit (1) 68 -1711462090.573925 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462090.573929 [0] recvUC: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.573935 [0] recvUC: ACKNACK(F#2:14/0: L(:1c1 16938.233433) 110443d:bb7f10a5:18901533:504 -> 110cd0d:e3b81b8d:1ccb65b1:403 setting-has-replied-to-hb happy-now) -1711462090.574490 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462090.574494 [0] recvUC: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.574499 [0] recvUC: ACKNACK(#0:1/0: L(:1c1 16938.233998) 110443d:bb7f10a5:18901533:504 -> 110cd0d:79d6eeac:ea4a8907:403 preemptive-nack rebase defer_heartbeat_to_peer: 110cd0d:79d6eeac:ea4a8907:403 -> 110443d:bb7f10a5:18901533:504 - queue for transmit -1711462090.574503 [0] recvUC: non-timed queue now has 1 items -1711462090.574507 [0] recvUC: ) -1711462090.574509 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc008c80 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.574518 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408bc008d68:48 [ udp/10.101.12.71:7417@2 ] -1711462090.574521 [0] tev: traffic-xmit (1) 68 -1711462090.574550 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 68 from udp/10.101.12.71:44991 -1711462090.574554 [0] recvUC: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.574560 [0] recvUC: ACKNACK(F#1:13/1:1 L(:1c1 16938.234058) 110443d:bb7f10a5:18901533:504 -> 110cd0d:79d6eeac:ea4a8907:403 complying RX13non-timed queue now has 1 items -1711462090.574564 [0] recvUC: rexmit#1 maxseq:13<13<=13defer_heartbeat_to_peer: 110cd0d:79d6eeac:ea4a8907:403 -> 110443d:bb7f10a5:18901533:504 - queue for transmit -1711462090.574566 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc008e00 0(rexmit(110cd0d:79d6eeac:ea4a8907:403:#13/1)): niov 0 sz 0 => now niov 3 sz 520 -1711462090.574573 [0] recvUC: ) -1711462090.574579 [0] recvUC: send_deferred_heartbeat: abaf4210bc473a65 -> 7bd5090527eafdf7 - queue for transmit -1711462090.574583 [0] recvUC: non-timed queue now has 1 items -1711462090.574583 [0] tev: nn_xpack_send 520: 0x7408c000139c:20 0x7408bc008ee8:52 0x7408e003d100:448 [ udp/10.101.12.71:7417@2 ] -1711462090.574591 [0] tev: traffic-xmit (1) 520 -1711462090.574595 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc008f80 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.574603 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408bc009068:48 [ udp/10.101.12.71:7417@2 ] -1711462090.574606 [0] tev: traffic-xmit (1) 68 -1711462090.574684 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462090.574688 [0] recvUC: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.574692 [0] recvUC: ACKNACK(F#2:14/0: L(:1c1 16938.234192) 110443d:bb7f10a5:18901533:504 -> 110cd0d:79d6eeac:ea4a8907:403 setting-has-replied-to-hb happy-now) -1711462090.575578 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 656 from udp/10.101.12.71:40473 -1711462090.575603 [0] recv: INFOTS(1711462090.575442461) -1711462090.575610 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #11 L(:1c1 16938.235107)) -1711462090.575613 [0] recv: INFOTS(1711462090.575483556) -1711462090.575617 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #9) -1711462090.575602 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 584 from udp/10.101.12.71:40473 -1711462090.575626 [0] recvMC: INFOTS(1711462090.575495060) -1711462090.575632 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #11 L(:1c1 16938.235130) => EVERYONE -1711462090.575634 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #11: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.8;">,topic_name="rr/topological_map_manager2/get_tagged_nodesReply",type_name="topological_navigation_msgs::srv::dds_::GetTaggedNodes_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.575657 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1603 reliable volatile writer unnamed: (default).rr/topological_map_manager2/get_tagged_nodesReply/topological_navigation_msgs::srv::dds_::GetTaggedNodes_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.8;">,topic_name="rr/topological_map_manager2/get_tagged_nodesReply",type_name="topological_navigation_msgs::srv::dds_::GetTaggedNodes_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.575668 [0] dq.builtin: => EVERYONE -1711462090.575675 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #11: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1) -1711462090.575677 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:1603) scanning all rds of topic rr/topological_map_manager2/get_tagged_nodesReply -1711462090.575686 [0] recvMC: HEARTBEAT(F#17:11..11 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@11(sync) 110cd0d:e3b81b8d:1ccb65b1:504@11(sync) 110cd0d:79d6eeac:ea4a8907:504@11(sync)) -1711462090.575699 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #9: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.8;">,topic_name="rq/topological_map_manager2/get_tagged_nodesRequest",type_name="topological_navigation_msgs::srv::dds_::GetTaggedNodes_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1704},adlink_entity_factory=1} -1711462090.575716 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1704 reliable volatile reader unnamed: (default).rq/topological_map_manager2/get_tagged_nodesRequest/topological_navigation_msgs::srv::dds_::GetTaggedNodes_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.8;">,topic_name="rq/topological_map_manager2/get_tagged_nodesRequest",type_name="topological_navigation_msgs::srv::dds_::GetTaggedNodes_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.575726 [0] dq.builtin: => EVERYONE -1711462090.575734 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:1704) scanning all wrs of topic rq/topological_map_manager2/get_tagged_nodesRequest -1711462090.575764 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 328 from udp/10.101.12.71:40473 -1711462090.575767 [0] recv: INFOTS(1711462090.575726889) -1711462090.575790 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #12 L(:1c1 16938.235271)) -1711462090.575801 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #12: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.9;">,topic_name="rr/topological_map_manager2/get_tagsReply",type_name="topological_navigation_msgs::srv::dds_::GetTags_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.575813 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 320 from udp/10.101.12.71:40473 -1711462090.575816 [0] recv: INFOTS(1711462090.575762290) -1711462090.575821 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #10 L(:1c1 16938.235320)) -1711462090.575817 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1803 reliable volatile writer unnamed: (default).rr/topological_map_manager2/get_tagsReply/topological_navigation_msgs::srv::dds_::GetTags_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.9;">,topic_name="rr/topological_map_manager2/get_tagsReply",type_name="topological_navigation_msgs::srv::dds_::GetTags_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.575840 [0] dq.builtin: => EVERYONE -1711462090.575848 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:1803) scanning all rds of topic rr/topological_map_manager2/get_tagsReply -1711462090.575858 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #10: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.9;">,topic_name="rq/topological_map_manager2/get_tagsRequest",type_name="topological_navigation_msgs::srv::dds_::GetTags_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1904},adlink_entity_factory=1} -1711462090.575862 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 632 from udp/10.101.12.71:40473 -1711462090.575866 [0] recvMC: INFOTS(1711462090.575799187) -1711462090.575874 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #12 L(:1c1 16938.235370) => EVERYONE -1711462090.575874 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1904 reliable volatile reader unnamed: (default).rq/topological_map_manager2/get_tagsRequest/topological_navigation_msgs::srv::dds_::GetTags_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.9;">,topic_name="rq/topological_map_manager2/get_tagsRequest",type_name="topological_navigation_msgs::srv::dds_::GetTags_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.575888 [0] dq.builtin: => EVERYONE -1711462090.575895 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:1904) scanning all wrs of topic rq/topological_map_manager2/get_tagsRequest -1711462090.575914 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #12: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1) -1711462090.575923 [0] recvMC: HEARTBEAT(F#18:12..12 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@12(sync) 110cd0d:e3b81b8d:1ccb65b1:504@12(sync) 110cd0d:79d6eeac:ea4a8907:504@12(sync)) -1711462090.576028 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.576031 [0] recv: INFOTS(1711462090.575995325) -1711462090.576034 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #13 L(:1c1 16938.235535)) -1711462090.576045 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #13: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.a;">,topic_name="rr/topological_map_manager2/get_node_tagsReply",type_name="topological_navigation_msgs::srv::dds_::GetNodeTags_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.576061 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1a03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/get_node_tagsReply/topological_navigation_msgs::srv::dds_::GetNodeTags_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.a;">,topic_name="rr/topological_map_manager2/get_node_tagsReply",type_name="topological_navigation_msgs::srv::dds_::GetNodeTags_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.576069 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 332 from udp/10.101.12.71:40473 -1711462090.576072 [0] recv: INFOTS(1711462090.576028935) -1711462090.576069 [0] dq.builtin: => EVERYONE -1711462090.576077 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #11 L(:1c1 16938.235576)) -1711462090.576088 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:1a03) scanning all rds of topic rr/topological_map_manager2/get_node_tagsReply -1711462090.576098 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #11: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.a;">,topic_name="rq/topological_map_manager2/get_node_tagsRequest",type_name="topological_navigation_msgs::srv::dds_::GetNodeTags_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1b04},adlink_entity_factory=1} -1711462090.576113 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1b04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/get_node_tagsRequest/topological_navigation_msgs::srv::dds_::GetNodeTags_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.a;">,topic_name="rq/topological_map_manager2/get_node_tagsRequest",type_name="topological_navigation_msgs::srv::dds_::GetNodeTags_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.576123 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 680 from udp/10.101.12.71:40473 -1711462090.576128 [0] recvMC: INFOTS(1711462090.576052639) -1711462090.576125 [0] dq.builtin: => EVERYONE -1711462090.576135 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #13 L(:1c1 16938.235632) => EVERYONE -1711462090.576185 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #13: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462090.576190 [0] recvMC: HEARTBEAT(F#19:13..13 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@13(sync) 110cd0d:e3b81b8d:1ccb65b1:504@13(sync) 110cd0d:79d6eeac:ea4a8907:504@13(sync)) -1711462090.576200 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:1b04) scanning all wrs of topic rq/topological_map_manager2/get_node_tagsRequest -1711462090.576301 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 356 from udp/10.101.12.71:40473 -1711462090.576304 [0] recv: INFOTS(1711462090.576266665) -1711462090.576309 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #14 L(:1c1 16938.235808)) -1711462090.576320 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #14: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.b;">,topic_name="rr/topological_map_manager2/get_edges_between_nodesReply",type_name="topological_navigation_msgs::srv::dds_::GetEdgesBetweenNodes_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.576336 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/get_edges_between_nodesReply/topological_navigation_msgs::srv::dds_::GetEdgesBetweenNodes_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.b;">,topic_name="rr/topological_map_manager2/get_edges_between_nodesReply",type_name="topological_navigation_msgs::srv::dds_::GetEdgesBetweenNodes_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.576337 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 348 from udp/10.101.12.71:40473 -1711462090.576344 [0] recv: INFOTS(1711462090.576303013) -1711462090.576345 [0] dq.builtin: => EVERYONE -1711462090.576347 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #12 L(:1c1 16938.235848)) -1711462090.576358 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:1c03) scanning all rds of topic rr/topological_map_manager2/get_edges_between_nodesReply -1711462090.576368 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #12: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.b;">,topic_name="rq/topological_map_manager2/get_edges_between_nodesRequest",type_name="topological_navigation_msgs::srv::dds_::GetEdgesBetweenNodes_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1d04},adlink_entity_factory=1} -1711462090.576382 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1d04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/get_edges_between_nodesRequest/topological_navigation_msgs::srv::dds_::GetEdgesBetweenNodes_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.b;">,topic_name="rq/topological_map_manager2/get_edges_between_nodesRequest",type_name="topological_navigation_msgs::srv::dds_::GetEdgesBetweenNodes_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.576390 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 728 from udp/10.101.12.71:40473 -1711462090.576390 [0] dq.builtin: => EVERYONE -1711462090.576396 [0] recvMC: INFOTS(1711462090.576322325) -1711462090.576403 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #14 L(:1c1 16938.235899) => EVERYONE -1711462090.576407 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:1d04) scanning all wrs of topic rq/topological_map_manager2/get_edges_between_nodesRequest -1711462090.576444 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #14: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0) -1711462090.576450 [0] recvMC: HEARTBEAT(F#20:14..14 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@14(sync) 110cd0d:e3b81b8d:1ccb65b1:504@14(sync) 110cd0d:79d6eeac:ea4a8907:504@14(sync)) -1711462090.576567 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 352 from udp/10.101.12.71:40473 -1711462090.576570 [0] recv: INFOTS(1711462090.576532468) -1711462090.576576 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #15 L(:1c1 16938.236074)) -1711462090.576589 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #15: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.c;">,topic_name="rr/topological_map_manager2/write_topological_mapReply",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.576603 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1e03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/write_topological_mapReply/topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.c;">,topic_name="rr/topological_map_manager2/write_topological_mapReply",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.576607 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 348 from udp/10.101.12.71:40473 -1711462090.576611 [0] recv: INFOTS(1711462090.576567173) -1711462090.576617 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #13 L(:1c1 16938.236115)) -1711462090.576611 [0] dq.builtin: => EVERYONE -1711462090.576631 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:1e03) scanning all rds of topic rr/topological_map_manager2/write_topological_mapReply -1711462090.576641 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #13: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.c;">,topic_name="rq/topological_map_manager2/write_topological_mapRequest",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1f04},adlink_entity_factory=1} -1711462090.576653 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 776 from udp/10.101.12.71:40473 -1711462090.576659 [0] recvMC: INFOTS(1711462090.576579736) -1711462090.576655 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:1f04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/write_topological_mapRequest/topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.c;">,topic_name="rq/topological_map_manager2/write_topological_mapRequest",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.576666 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #15 L(:1c1 16938.236163) => EVERYONE -1711462090.576676 [0] dq.builtin: => EVERYONE -1711462090.576686 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:1f04) scanning all wrs of topic rq/topological_map_manager2/write_topological_mapRequest -1711462090.576716 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #15: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462090.576722 [0] recvMC: HEARTBEAT(F#21:15..15 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@15(sync) 110cd0d:e3b81b8d:1ccb65b1:504@15(sync) 110cd0d:79d6eeac:ea4a8907:504@15(sync)) -1711462090.576772 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 352 from udp/10.101.12.71:40473 -1711462090.576776 [0] recv: INFOTS(1711462090.576742682) -1711462090.576779 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #16 L(:1c1 16938.236279)) -1711462090.576790 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #16: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.d;">,topic_name="rr/topological_map_manager2/switch_topological_mapReply",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.576806 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2003 reliable volatile writer unnamed: (default).rr/topological_map_manager2/switch_topological_mapReply/topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.d;">,topic_name="rr/topological_map_manager2/switch_topological_mapReply",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.576814 [0] dq.builtin: => EVERYONE -1711462090.576822 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2003) scanning all rds of topic rr/topological_map_manager2/switch_topological_mapReply -1711462090.576830 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 348 from udp/10.101.12.71:40473 -1711462090.576838 [0] recv: INFOTS(1711462090.576793854) -1711462090.576845 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #14 L(:1c1 16938.236341)) -1711462090.576857 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #14: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.d;">,topic_name="rq/topological_map_manager2/switch_topological_mapRequest",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2104},adlink_entity_factory=1} -1711462090.576877 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2104 reliable volatile reader unnamed: (default).rq/topological_map_manager2/switch_topological_mapRequest/topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.d;">,topic_name="rq/topological_map_manager2/switch_topological_mapRequest",type_name="topological_navigation_msgs::srv::dds_::WriteTopologicalMap_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.576877 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 824 from udp/10.101.12.71:40473 -1711462090.576883 [0] dq.builtin: => EVERYONE -1711462090.576897 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2104) scanning all wrs of topic rq/topological_map_manager2/switch_topological_mapRequest -1711462090.576889 [0] recvMC: INFOTS(1711462090.576805226) -1711462090.576912 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #16 L(:1c1 16938.236393) => EVERYONE -1711462090.576956 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #16: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.576962 [0] recvMC: HEARTBEAT(F#22:16..16 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@16(sync) 110cd0d:e3b81b8d:1ccb65b1:504@16(sync) 110cd0d:79d6eeac:ea4a8907:504@16(sync)) -1711462090.577430 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 652 from udp/10.101.12.71:40473 -1711462090.577437 [0] recv: INFOTS(1711462090.577330990) -1711462090.577440 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 872 from udp/10.101.12.71:40473 -1711462090.577443 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #17 L(:1c1 16938.236940)) -1711462090.577448 [0] recv: INFOTS(1711462090.577371768) -1711462090.577454 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #15) -1711462090.577445 [0] recvMC: INFOTS(1711462090.577381731) -1711462090.577471 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #17 L(:1c1 16938.236948) => EVERYONE -1711462090.577475 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #17: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.e;">,topic_name="rr/topological_map_manager2/add_topological_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddNode_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.577502 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2203 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_topological_nodeReply/topological_navigation_msgs::srv::dds_::AddNode_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.e;">,topic_name="rr/topological_map_manager2/add_topological_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddNode_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.577512 [0] dq.builtin: => EVERYONE -1711462090.577521 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2203) scanning all rds of topic rr/topological_map_manager2/add_topological_nodeReply -1711462090.577523 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #17: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.577531 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #15: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.e;">,topic_name="rq/topological_map_manager2/add_topological_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddNode_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2304},adlink_entity_factory=1} -1711462090.577531 [0] recvMC: HEARTBEAT(F#23:17..17 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@17(sync) 110cd0d:e3b81b8d:1ccb65b1:504@17(sync) 110cd0d:79d6eeac:ea4a8907:504@17(sync)) -1711462090.577547 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2304 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_topological_nodeRequest/topological_navigation_msgs::srv::dds_::AddNode_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.e;">,topic_name="rq/topological_map_manager2/add_topological_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddNode_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.577560 [0] dq.builtin: => EVERYONE -1711462090.577568 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2304) scanning all wrs of topic rq/topological_map_manager2/add_topological_nodeRequest -1711462090.577629 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.577637 [0] recv: INFOTS(1711462090.577582984) -1711462090.577643 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #18 L(:1c1 16938.237138)) -1711462090.577654 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #18: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.f;">,topic_name="rr/topological_map_manager2/remove_topological_nodeReply",type_name="topological_navigation_msgs::srv::dds_::RmvNode_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.577668 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.577673 [0] recv: INFOTS(1711462090.577626247) -1711462090.577670 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2403 reliable volatile writer unnamed: (default).rr/topological_map_manager2/remove_topological_nodeReply/topological_navigation_msgs::srv::dds_::RmvNode_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.f;">,topic_name="rr/topological_map_manager2/remove_topological_nodeReply",type_name="topological_navigation_msgs::srv::dds_::RmvNode_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.577678 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #16 L(:1c1 16938.237176)) -1711462090.577688 [0] dq.builtin: => EVERYONE -1711462090.577696 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2403) scanning all rds of topic rr/topological_map_manager2/remove_topological_nodeReply -1711462090.577705 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #16: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.f;">,topic_name="rq/topological_map_manager2/remove_topological_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::RmvNode_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2504},adlink_entity_factory=1} -1711462090.577716 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 920 from udp/10.101.12.71:40473 -1711462090.577724 [0] recvMC: INFOTS(1711462090.577649910) -1711462090.577720 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2504 reliable volatile reader unnamed: (default).rq/topological_map_manager2/remove_topological_nodeRequest/topological_navigation_msgs::srv::dds_::RmvNode_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.f;">,topic_name="rq/topological_map_manager2/remove_topological_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::RmvNode_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.577731 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #18 L(:1c1 16938.237228) => EVERYONE -1711462090.577742 [0] dq.builtin: => EVERYONE -1711462090.577750 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2504) scanning all wrs of topic rq/topological_map_manager2/remove_topological_nodeRequest -1711462090.577784 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #18: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.577791 [0] recvMC: HEARTBEAT(F#24:18..18 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@18(sync) 110cd0d:e3b81b8d:1ccb65b1:504@18(sync) 110cd0d:79d6eeac:ea4a8907:504@18(sync)) -1711462090.577883 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.577885 [0] recv: INFOTS(1711462090.577848971) -1711462090.577888 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #19 L(:1c1 16938.237389)) -1711462090.577898 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #19: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.10;">,topic_name="rr/topological_map_manager2/add_edges_between_nodesReply",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.577913 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2603 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_edges_between_nodesReply/topological_navigation_msgs::srv::dds_::AddEdge_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.10;">,topic_name="rr/topological_map_manager2/add_edges_between_nodesReply",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.577923 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.577927 [0] recv: INFOTS(1711462090.577884615) -1711462090.577932 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #17 L(:1c1 16938.237431)) -1711462090.577924 [0] dq.builtin: => EVERYONE -1711462090.577946 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2603) scanning all rds of topic rr/topological_map_manager2/add_edges_between_nodesReply -1711462090.577955 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #17: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.10;">,topic_name="rq/topological_map_manager2/add_edges_between_nodesRequest",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2704},adlink_entity_factory=1} -1711462090.577961 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 968 from udp/10.101.12.71:40473 -1711462090.577967 [0] recvMC: INFOTS(1711462090.577896758) -1711462090.577970 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2704 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_edges_between_nodesRequest/topological_navigation_msgs::srv::dds_::AddEdge_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.10;">,topic_name="rq/topological_map_manager2/add_edges_between_nodesRequest",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.577973 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #19 L(:1c1 16938.237471) => EVERYONE -1711462090.577980 [0] dq.builtin: => EVERYONE -1711462090.577993 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2704) scanning all wrs of topic rq/topological_map_manager2/add_edges_between_nodesRequest -1711462090.578025 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #19: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.578032 [0] recvMC: HEARTBEAT(F#25:19..19 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@19(sync) 110cd0d:e3b81b8d:1ccb65b1:504@19(sync) 110cd0d:79d6eeac:ea4a8907:504@19(sync)) -1711462090.578071 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 332 from udp/10.101.12.71:40473 -1711462090.578073 [0] recv: INFOTS(1711462090.578042902) -1711462090.578076 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #20 L(:1c1 16938.237578)) -1711462090.578086 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #20: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.11;">,topic_name="rr/topological_map_manager2/remove_edgeReply",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.578101 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2803 reliable volatile writer unnamed: (default).rr/topological_map_manager2/remove_edgeReply/topological_navigation_msgs::srv::dds_::AddEdge_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.11;">,topic_name="rr/topological_map_manager2/remove_edgeReply",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.578109 [0] dq.builtin: => EVERYONE -1711462090.578113 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 324 from udp/10.101.12.71:40473 -1711462090.578116 [0] recv: INFOTS(1711462090.578086523) -1711462090.578120 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #18 L(:1c1 16938.237620)) -1711462090.578121 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2803) scanning all rds of topic rr/topological_map_manager2/remove_edgeReply -1711462090.578135 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #18: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.11;">,topic_name="rq/topological_map_manager2/remove_edgeRequest",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2904},adlink_entity_factory=1} -1711462090.578150 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2904 reliable volatile reader unnamed: (default).rq/topological_map_manager2/remove_edgeRequest/topological_navigation_msgs::srv::dds_::AddEdge_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.11;">,topic_name="rq/topological_map_manager2/remove_edgeRequest",type_name="topological_navigation_msgs::srv::dds_::AddEdge_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.578156 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1016 from udp/10.101.12.71:40473 -1711462090.578163 [0] recvMC: INFOTS(1711462090.578098378) -1711462090.578158 [0] dq.builtin: => EVERYONE -1711462090.578169 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #20 L(:1c1 16938.237666) => EVERYONE -1711462090.578177 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2904) scanning all wrs of topic rq/topological_map_manager2/remove_edgeRequest -1711462090.578234 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #20: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.578241 [0] recvMC: HEARTBEAT(F#26:20..20 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@20(sync) 110cd0d:e3b81b8d:1ccb65b1:504@20(sync) 110cd0d:79d6eeac:ea4a8907:504@20(sync)) -1711462090.578319 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.578321 [0] recv: INFOTS(1711462090.578286739) -1711462090.578325 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #21 L(:1c1 16938.237825)) -1711462090.578336 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #21: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.12;">,topic_name="rr/topological_map_manager2/add_content_to_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddContent_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.578351 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2a03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_content_to_nodeReply/topological_navigation_msgs::srv::dds_::AddContent_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.12;">,topic_name="rr/topological_map_manager2/add_content_to_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddContent_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.578359 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 332 from udp/10.101.12.71:40473 -1711462090.578362 [0] recv: INFOTS(1711462090.578323981) -1711462090.578359 [0] dq.builtin: => EVERYONE -1711462090.578364 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #19 L(:1c1 16938.237866)) -1711462090.578379 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2a03) scanning all rds of topic rr/topological_map_manager2/add_content_to_nodeReply -1711462090.578388 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #19: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.12;">,topic_name="rq/topological_map_manager2/add_content_to_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddContent_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2b04},adlink_entity_factory=1} -1711462090.578406 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2b04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_content_to_nodeRequest/topological_navigation_msgs::srv::dds_::AddContent_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.12;">,topic_name="rq/topological_map_manager2/add_content_to_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddContent_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.578412 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1064 from udp/10.101.12.71:40473 -1711462090.578419 [0] recvMC: INFOTS(1711462090.578342953) -1711462090.578414 [0] dq.builtin: => EVERYONE -1711462090.578426 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #21 L(:1c1 16938.237923) => EVERYONE -1711462090.578434 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2b04) scanning all wrs of topic rq/topological_map_manager2/add_content_to_nodeRequest -1711462090.578484 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #21: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.578492 [0] recvMC: HEARTBEAT(F#27:21..21 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@21(sync) 110cd0d:e3b81b8d:1ccb65b1:504@21(sync) 110cd0d:79d6eeac:ea4a8907:504@21(sync)) -1711462090.578561 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.578563 [0] recv: INFOTS(1711462090.578531397) -1711462090.578565 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #22 L(:1c1 16938.238067)) -1711462090.578575 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #22: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.13;">,topic_name="rr/topological_map_manager2/update_node_nameReply",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeName_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.578595 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2c03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_node_nameReply/topological_navigation_msgs::srv::dds_::UpdateNodeName_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.13;">,topic_name="rr/topological_map_manager2/update_node_nameReply",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeName_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.578603 [0] dq.builtin: => EVERYONE -1711462090.578606 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 332 from udp/10.101.12.71:40473 -1711462090.578608 [0] recv: INFOTS(1711462090.578575730) -1711462090.578612 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #20 L(:1c1 16938.238112)) -1711462090.578612 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2c03) scanning all rds of topic rr/topological_map_manager2/update_node_nameReply -1711462090.578629 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #20: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.13;">,topic_name="rq/topological_map_manager2/update_node_nameRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeName_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2d04},adlink_entity_factory=1} -1711462090.578644 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2d04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_node_nameRequest/topological_navigation_msgs::srv::dds_::UpdateNodeName_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.13;">,topic_name="rq/topological_map_manager2/update_node_nameRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeName_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.578653 [0] dq.builtin: => EVERYONE -1711462090.578661 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2d04) scanning all wrs of topic rq/topological_map_manager2/update_node_nameRequest -1711462090.578661 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1112 from udp/10.101.12.71:40473 -1711462090.578672 [0] recvMC: INFOTS(1711462090.578589065) -1711462090.578677 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #22 L(:1c1 16938.238175) => EVERYONE -1711462090.578723 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #22: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.578733 [0] recvMC: HEARTBEAT(F#28:22..22 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@22(sync) 110cd0d:e3b81b8d:1ccb65b1:504@22(sync) 110cd0d:79d6eeac:ea4a8907:504@22(sync)) -1711462090.578778 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.578780 [0] recv: INFOTS(1711462090.578749181) -1711462090.578782 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #23 L(:1c1 16938.238284)) -1711462090.578793 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #23: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.14;">,topic_name="rr/topological_map_manager2/update_node_poseReply",type_name="topological_navigation_msgs::srv::dds_::AddNode_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.578809 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2e03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_node_poseReply/topological_navigation_msgs::srv::dds_::AddNode_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.14;">,topic_name="rr/topological_map_manager2/update_node_poseReply",type_name="topological_navigation_msgs::srv::dds_::AddNode_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.578816 [0] dq.builtin: => EVERYONE -1711462090.578818 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 328 from udp/10.101.12.71:40473 -1711462090.578823 [0] recv: INFOTS(1711462090.578795007) -1711462090.578829 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #21 L(:1c1 16938.238327)) -1711462090.578825 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:2e03) scanning all rds of topic rr/topological_map_manager2/update_node_poseReply -1711462090.578842 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #21: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.14;">,topic_name="rq/topological_map_manager2/update_node_poseRequest",type_name="topological_navigation_msgs::srv::dds_::AddNode_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2f04},adlink_entity_factory=1} -1711462090.578856 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:2f04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_node_poseRequest/topological_navigation_msgs::srv::dds_::AddNode_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.14;">,topic_name="rq/topological_map_manager2/update_node_poseRequest",type_name="topological_navigation_msgs::srv::dds_::AddNode_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.578865 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1160 from udp/10.101.12.71:40473 -1711462090.578873 [0] recvMC: INFOTS(1711462090.578803795) -1711462090.578866 [0] dq.builtin: => EVERYONE -1711462090.578880 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #23 L(:1c1 16938.238376) => EVERYONE -1711462090.578888 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:2f04) scanning all wrs of topic rq/topological_map_manager2/update_node_poseRequest -1711462090.578932 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #23: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.578938 [0] recvMC: HEARTBEAT(F#29:23..23 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@23(sync) 110cd0d:e3b81b8d:1ccb65b1:504@23(sync) 110cd0d:79d6eeac:ea4a8907:504@23(sync)) -1711462090.579027 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 352 from udp/10.101.12.71:40473 -1711462090.579029 [0] recv: INFOTS(1711462090.578997155) -1711462090.579031 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #24 L(:1c1 16938.238533)) -1711462090.579041 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #24: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.15;">,topic_name="rr/topological_map_manager2/update_node_toleranceReply",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeTolerance_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.579057 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3003 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_node_toleranceReply/topological_navigation_msgs::srv::dds_::UpdateNodeTolerance_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.15;">,topic_name="rr/topological_map_manager2/update_node_toleranceReply",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeTolerance_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.579068 [0] dq.builtin: => EVERYONE -1711462090.579076 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3003) scanning all rds of topic rr/topological_map_manager2/update_node_toleranceReply -1711462090.579076 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 348 from udp/10.101.12.71:40473 -1711462090.579083 [0] recv: INFOTS(1711462090.579038346) -1711462090.579087 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #22 L(:1c1 16938.238587)) -1711462090.579098 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #22: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.15;">,topic_name="rq/topological_map_manager2/update_node_toleranceRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeTolerance_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3104},adlink_entity_factory=1} -1711462090.579113 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3104 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_node_toleranceRequest/topological_navigation_msgs::srv::dds_::UpdateNodeTolerance_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.15;">,topic_name="rq/topological_map_manager2/update_node_toleranceRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateNodeTolerance_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.579117 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1208 from udp/10.101.12.71:40473 -1711462090.579125 [0] recvMC: INFOTS(1711462090.579057465) -1711462090.579121 [0] dq.builtin: => EVERYONE -1711462090.579132 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #24 L(:1c1 16938.238629) => EVERYONE -1711462090.579140 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3104) scanning all wrs of topic rq/topological_map_manager2/update_node_toleranceRequest -1711462090.579184 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #24: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.579194 [0] recvMC: HEARTBEAT(F#30:24..24 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@24(sync) 110cd0d:e3b81b8d:1ccb65b1:504@24(sync) 110cd0d:79d6eeac:ea4a8907:504@24(sync)) -1711462090.579276 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.579310 [0] recv: INFOTS(1711462090.579246849) -1711462090.579315 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #25 L(:1c1 16938.238814)) -1711462090.579325 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #25: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.16;">,topic_name="rr/topological_map_manager2/modify_node_tagsReply",type_name="topological_navigation_msgs::srv::dds_::ModifyTag_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.579340 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3203 reliable volatile writer unnamed: (default).rr/topological_map_manager2/modify_node_tagsReply/topological_navigation_msgs::srv::dds_::ModifyTag_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.16;">,topic_name="rr/topological_map_manager2/modify_node_tagsReply",type_name="topological_navigation_msgs::srv::dds_::ModifyTag_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.579348 [0] dq.builtin: => EVERYONE -1711462090.579356 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3203) scanning all rds of topic rr/topological_map_manager2/modify_node_tagsReply -1711462090.579362 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 328 from udp/10.101.12.71:40473 -1711462090.579364 [0] recv: INFOTS(1711462090.579338744) -1711462090.579367 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #23 L(:1c1 16938.238868)) -1711462090.579377 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #23: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.16;">,topic_name="rq/topological_map_manager2/modify_node_tagsRequest",type_name="topological_navigation_msgs::srv::dds_::ModifyTag_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3304},adlink_entity_factory=1} -1711462090.579393 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3304 reliable volatile reader unnamed: (default).rq/topological_map_manager2/modify_node_tagsRequest/topological_navigation_msgs::srv::dds_::ModifyTag_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.16;">,topic_name="rq/topological_map_manager2/modify_node_tagsRequest",type_name="topological_navigation_msgs::srv::dds_::ModifyTag_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.579403 [0] dq.builtin: => EVERYONE -1711462090.579404 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1256 from udp/10.101.12.71:40473 -1711462090.579417 [0] recvMC: INFOTS(1711462090.579348653) -1711462090.579413 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3304) scanning all wrs of topic rq/topological_map_manager2/modify_node_tagsRequest -1711462090.579424 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #25 L(:1c1 16938.238920) => EVERYONE -1711462090.579475 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #25: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.579481 [0] recvMC: HEARTBEAT(F#31:25..25 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@25(sync) 110cd0d:e3b81b8d:1ccb65b1:504@25(sync) 110cd0d:79d6eeac:ea4a8907:504@25(sync)) -1711462090.579560 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.579562 [0] recv: INFOTS(1711462090.579526903) -1711462090.579565 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #26 L(:1c1 16938.239066)) -1711462090.579574 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #26: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.17;">,topic_name="rr/topological_map_manager2/add_tag_to_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddTag_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.579589 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3403 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_tag_to_nodeReply/topological_navigation_msgs::srv::dds_::AddTag_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.17;">,topic_name="rr/topological_map_manager2/add_tag_to_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddTag_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.579597 [0] dq.builtin: => EVERYONE -1711462090.579604 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3403) scanning all rds of topic rr/topological_map_manager2/add_tag_to_nodeReply -1711462090.579613 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 324 from udp/10.101.12.71:40473 -1711462090.579625 [0] recv: INFOTS(1711462090.579582890) -1711462090.579631 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #24 L(:1c1 16938.239128)) -1711462090.579642 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #24: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.17;">,topic_name="rq/topological_map_manager2/add_tag_to_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddTag_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3504},adlink_entity_factory=1} -1711462090.579653 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1304 from udp/10.101.12.71:40473 -1711462090.579657 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3504 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_tag_to_nodeRequest/topological_navigation_msgs::srv::dds_::AddTag_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.17;">,topic_name="rq/topological_map_manager2/add_tag_to_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddTag_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.579668 [0] dq.builtin: => EVERYONE -1711462090.579659 [0] recvMC: INFOTS(1711462090.579592017) -1711462090.579677 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3504) scanning all wrs of topic rq/topological_map_manager2/add_tag_to_nodeRequest -1711462090.579678 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #26 L(:1c1 16938.239163) => EVERYONE -1711462090.579730 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #26: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.579737 [0] recvMC: HEARTBEAT(F#32:26..26 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@26(sync) 110cd0d:e3b81b8d:1ccb65b1:504@26(sync) 110cd0d:79d6eeac:ea4a8907:504@26(sync)) -1711462090.579765 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.579772 [0] recv: INFOTS(1711462090.579726226) -1711462090.579777 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #27 L(:1c1 16938.239275)) -1711462090.579789 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #27: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.18;">,topic_name="rr/topological_map_manager2/rm_tag_from_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddTag_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.579804 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 324 from udp/10.101.12.71:40473 -1711462090.579811 [0] recv: INFOTS(1711462090.579761832) -1711462090.579807 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3603 reliable volatile writer unnamed: (default).rr/topological_map_manager2/rm_tag_from_nodeReply/topological_navigation_msgs::srv::dds_::AddTag_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.18;">,topic_name="rr/topological_map_manager2/rm_tag_from_nodeReply",type_name="topological_navigation_msgs::srv::dds_::AddTag_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.579817 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #25 L(:1c1 16938.239314)) -1711462090.579826 [0] dq.builtin: => EVERYONE -1711462090.579835 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3603) scanning all rds of topic rr/topological_map_manager2/rm_tag_from_nodeReply -1711462090.579843 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1352 from udp/10.101.12.71:40473 -1711462090.579848 [0] recvMC: INFOTS(1711462090.579784458) -1711462090.579844 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #25: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.18;">,topic_name="rq/topological_map_manager2/rm_tag_from_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddTag_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3704},adlink_entity_factory=1} -1711462090.579854 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #27 L(:1c1 16938.239352) => EVERYONE -1711462090.579870 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3704 reliable volatile reader unnamed: (default).rq/topological_map_manager2/rm_tag_from_nodeRequest/topological_navigation_msgs::srv::dds_::AddTag_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.18;">,topic_name="rq/topological_map_manager2/rm_tag_from_nodeRequest",type_name="topological_navigation_msgs::srv::dds_::AddTag_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.579878 [0] dq.builtin: => EVERYONE -1711462090.579886 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3704) scanning all wrs of topic rq/topological_map_manager2/rm_tag_from_nodeRequest -1711462090.579906 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #27: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.579916 [0] recvMC: HEARTBEAT(F#33:27..27 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@27(sync) 110cd0d:e3b81b8d:1ccb65b1:504@27(sync) 110cd0d:79d6eeac:ea4a8907:504@27(sync)) -1711462090.580005 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 352 from udp/10.101.12.71:40473 -1711462090.580010 [0] recv: INFOTS(1711462090.579973596) -1711462090.580016 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #28 L(:1c1 16938.239513)) -1711462090.580028 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #28: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.19;">,topic_name="rr/topological_map_manager2/add_param_to_edge_configReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.580042 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3803 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_param_to_edge_configReply/topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.19;">,topic_name="rr/topological_map_manager2/add_param_to_edge_configReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.580051 [0] dq.builtin: => EVERYONE -1711462090.580055 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.580061 [0] recv: INFOTS(1711462090.580027501) -1711462090.580059 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3803) scanning all rds of topic rr/topological_map_manager2/add_param_to_edge_configReply -1711462090.580067 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #26 L(:1c1 16938.239565)) -1711462090.580077 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #26: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.19;">,topic_name="rq/topological_map_manager2/add_param_to_edge_configRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3904},adlink_entity_factory=1} -1711462090.580092 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3904 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_param_to_edge_configRequest/topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.19;">,topic_name="rq/topological_map_manager2/add_param_to_edge_configRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.580095 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1400 from udp/10.101.12.71:40473 -1711462090.580107 [0] recvMC: INFOTS(1711462090.580038123) -1711462090.580103 [0] dq.builtin: => EVERYONE -1711462090.580113 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #28 L(:1c1 16938.239610) => EVERYONE -1711462090.580124 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3904) scanning all wrs of topic rq/topological_map_manager2/add_param_to_edge_configRequest -1711462090.580167 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #28: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.580173 [0] recvMC: HEARTBEAT(F#34:28..28 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@28(sync) 110cd0d:e3b81b8d:1ccb65b1:504@28(sync) 110cd0d:79d6eeac:ea4a8907:504@28(sync)) -1711462090.580220 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 352 from udp/10.101.12.71:40473 -1711462090.580224 [0] recv: INFOTS(1711462090.580189530) -1711462090.580230 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #29 L(:1c1 16938.239728)) -1711462090.580242 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #29: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1a;">,topic_name="rr/topological_map_manager2/rm_param_from_edge_configReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.580257 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3a03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/rm_param_from_edge_configReply/topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1a;">,topic_name="rr/topological_map_manager2/rm_param_from_edge_configReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.580267 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 348 from udp/10.101.12.71:40473 -1711462090.580273 [0] recv: INFOTS(1711462090.580241067) -1711462090.580269 [0] dq.builtin: => EVERYONE -1711462090.580280 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #27 L(:1c1 16938.239776)) -1711462090.580288 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3a03) scanning all rds of topic rr/topological_map_manager2/rm_param_from_edge_configReply -1711462090.580298 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #27: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1a;">,topic_name="rq/topological_map_manager2/rm_param_from_edge_configRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3b04},adlink_entity_factory=1} -1711462090.580309 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1448 from udp/10.101.12.71:40473 -1711462090.580316 [0] recvMC: INFOTS(1711462090.580250371) -1711462090.580312 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3b04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/rm_param_from_edge_configRequest/topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1a;">,topic_name="rq/topological_map_manager2/rm_param_from_edge_configRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.580322 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #29 L(:1c1 16938.239820) => EVERYONE -1711462090.580330 [0] dq.builtin: => EVERYONE -1711462090.580338 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3b04) scanning all wrs of topic rq/topological_map_manager2/rm_param_from_edge_configRequest -1711462090.580374 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #29: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.580384 [0] recvMC: HEARTBEAT(F#35:29..29 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@29(sync) 110cd0d:e3b81b8d:1ccb65b1:504@29(sync) 110cd0d:79d6eeac:ea4a8907:504@29(sync)) -1711462090.580427 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 356 from udp/10.101.12.71:40473 -1711462090.580433 [0] recv: INFOTS(1711462090.580393021) -1711462090.580438 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #30 L(:1c1 16938.239937)) -1711462090.580449 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #30: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1b;">,topic_name="rr/topological_map_manager2/rm_param_from_topological_mapReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.580463 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3c03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/rm_param_from_topological_mapReply/topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1b;">,topic_name="rr/topological_map_manager2/rm_param_from_topological_mapReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.580470 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 352 from udp/10.101.12.71:40473 -1711462090.580476 [0] recv: INFOTS(1711462090.580434684) -1711462090.580471 [0] dq.builtin: => EVERYONE -1711462090.580482 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #28 L(:1c1 16938.239980)) -1711462090.580489 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3c03) scanning all rds of topic rr/topological_map_manager2/rm_param_from_topological_mapReply -1711462090.580508 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #28: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1b;">,topic_name="rq/topological_map_manager2/rm_param_from_topological_mapRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3d04},adlink_entity_factory=1} -1711462090.580520 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1496 from udp/10.101.12.71:40473 -1711462090.580523 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3d04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/rm_param_from_topological_mapRequest/topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1b;">,topic_name="rq/topological_map_manager2/rm_param_from_topological_mapRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfig_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.580525 [0] recvMC: INFOTS(1711462090.580451532) -1711462090.580537 [0] dq.builtin: => EVERYONE -1711462090.580539 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #30 L(:1c1 16938.240028) => EVERYONE -1711462090.580546 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3d04) scanning all wrs of topic rq/topological_map_manager2/rm_param_from_topological_mapRequest -1711462090.580590 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #30: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.580596 [0] recvMC: HEARTBEAT(F#36:30..30 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@30(sync) 110cd0d:e3b81b8d:1ccb65b1:504@30(sync) 110cd0d:79d6eeac:ea4a8907:504@30(sync)) -1711462090.580695 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 356 from udp/10.101.12.71:40473 -1711462090.580702 [0] recv: INFOTS(1711462090.580658980) -1711462090.580707 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #31 L(:1c1 16938.240205)) -1711462090.580718 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #31: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1c;">,topic_name="rr/topological_map_manager2/update_node_restrictionsReply",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.580733 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3e03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_node_restrictionsReply/topological_navigation_msgs::srv::dds_::UpdateRestrictions_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1c;">,topic_name="rr/topological_map_manager2/update_node_restrictionsReply",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.580741 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.580750 [0] recv: INFOTS(1711462090.580705816) -1711462090.580743 [0] dq.builtin: => EVERYONE -1711462090.580755 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #29 L(:1c1 16938.240254)) -1711462090.580765 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:3e03) scanning all rds of topic rr/topological_map_manager2/update_node_restrictionsReply -1711462090.580775 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #29: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1c;">,topic_name="rq/topological_map_manager2/update_node_restrictionsRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3f04},adlink_entity_factory=1} -1711462090.580785 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1544 from udp/10.101.12.71:40473 -1711462090.580789 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:3f04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_node_restrictionsRequest/topological_navigation_msgs::srv::dds_::UpdateRestrictions_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1c;">,topic_name="rq/topological_map_manager2/update_node_restrictionsRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.580790 [0] recvMC: INFOTS(1711462090.580722130) -1711462090.580796 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #31 L(:1c1 16938.240293) => EVERYONE -1711462090.580801 [0] dq.builtin: => EVERYONE -1711462090.580809 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:3f04) scanning all wrs of topic rq/topological_map_manager2/update_node_restrictionsRequest -1711462090.580843 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #31: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.580850 [0] recvMC: HEARTBEAT(F#37:31..31 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@31(sync) 110cd0d:e3b81b8d:1ccb65b1:504@31(sync) 110cd0d:79d6eeac:ea4a8907:504@31(sync)) -1711462090.580902 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 356 from udp/10.101.12.71:40473 -1711462090.580905 [0] recv: INFOTS(1711462090.580867994) -1711462090.580911 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #32 L(:1c1 16938.240409)) -1711462090.580923 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #32: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1d;">,topic_name="rr/topological_map_manager2/update_edge_restrictionsReply",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.580938 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4003 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_edge_restrictionsReply/topological_navigation_msgs::srv::dds_::UpdateRestrictions_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1d;">,topic_name="rr/topological_map_manager2/update_edge_restrictionsReply",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.580943 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.580946 [0] dq.builtin: => EVERYONE -1711462090.580947 [0] recv: INFOTS(1711462090.580901717) -1711462090.580955 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4003) scanning all rds of topic rr/topological_map_manager2/update_edge_restrictionsReply -1711462090.580956 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #30 L(:1c1 16938.240451)) -1711462090.580965 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #30: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1d;">,topic_name="rq/topological_map_manager2/update_edge_restrictionsRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4104},adlink_entity_factory=1} -1711462090.580979 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4104 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_edge_restrictionsRequest/topological_navigation_msgs::srv::dds_::UpdateRestrictions_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1d;">,topic_name="rq/topological_map_manager2/update_edge_restrictionsRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateRestrictions_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.580990 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1592 from udp/10.101.12.71:40473 -1711462090.580995 [0] recvMC: INFOTS(1711462090.580918119) -1711462090.580990 [0] dq.builtin: => EVERYONE -1711462090.581002 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #32 L(:1c1 16938.240499) => EVERYONE -1711462090.581010 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4104) scanning all wrs of topic rq/topological_map_manager2/update_edge_restrictionsRequest -1711462090.581055 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #32: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.581061 [0] recvMC: HEARTBEAT(F#38:32..32 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@32(sync) 110cd0d:e3b81b8d:1ccb65b1:504@32(sync) 110cd0d:79d6eeac:ea4a8907:504@32(sync)) -1711462090.581194 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.581198 [0] recv: INFOTS(1711462090.581146130) -1711462090.581204 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #33 L(:1c1 16938.240702)) -1711462090.581216 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #33: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1e;">,topic_name="rr/topological_map_manager2/update_edgeReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdge_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581232 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4203 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_edgeReply/topological_navigation_msgs::srv::dds_::UpdateEdge_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1e;">,topic_name="rr/topological_map_manager2/update_edgeReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdge_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581237 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 324 from udp/10.101.12.71:40473 -1711462090.581241 [0] dq.builtin: => EVERYONE -1711462090.581242 [0] recv: INFOTS(1711462090.581210847) -1711462090.581251 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #31 L(:1c1 16938.240746)) -1711462090.581252 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4203) scanning all rds of topic rr/topological_map_manager2/update_edgeReply -1711462090.581269 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #31: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1e;">,topic_name="rq/topological_map_manager2/update_edgeRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdge_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4304},adlink_entity_factory=1} -1711462090.581280 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1640 from udp/10.101.12.71:40473 -1711462090.581284 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4304 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_edgeRequest/topological_navigation_msgs::srv::dds_::UpdateEdge_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1e;">,topic_name="rq/topological_map_manager2/update_edgeRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdge_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.581285 [0] recvMC: INFOTS(1711462090.581220310) -1711462090.581295 [0] dq.builtin: => EVERYONE -1711462090.581300 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #33 L(:1c1 16938.240789) => EVERYONE -1711462090.581310 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4304) scanning all wrs of topic rq/topological_map_manager2/update_edgeRequest -1711462090.581355 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #33: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.581362 [0] recvMC: HEARTBEAT(F#39:33..33 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@33(sync) 110cd0d:e3b81b8d:1ccb65b1:504@33(sync) 110cd0d:79d6eeac:ea4a8907:504@33(sync)) -1711462090.581461 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 336 from udp/10.101.12.71:40473 -1711462090.581465 [0] recv: INFOTS(1711462090.581430143) -1711462090.581470 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #34 L(:1c1 16938.240969)) -1711462090.581481 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #34: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1f;">,topic_name="rr/topological_map_manager2/update_actionReply",type_name="topological_navigation_msgs::srv::dds_::UpdateAction_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581501 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4403 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_actionReply/topological_navigation_msgs::srv::dds_::UpdateAction_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1f;">,topic_name="rr/topological_map_manager2/update_actionReply",type_name="topological_navigation_msgs::srv::dds_::UpdateAction_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581509 [0] dq.builtin: => EVERYONE -1711462090.581516 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 332 from udp/10.101.12.71:40473 -1711462090.581518 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4403) scanning all rds of topic rr/topological_map_manager2/update_actionReply -1711462090.581520 [0] recv: INFOTS(1711462090.581483917) -1711462090.581529 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #32 L(:1c1 16938.241024)) -1711462090.581541 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #32: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1f;">,topic_name="rq/topological_map_manager2/update_actionRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateAction_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4504},adlink_entity_factory=1} -1711462090.581556 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4504 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_actionRequest/topological_navigation_msgs::srv::dds_::UpdateAction_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.1f;">,topic_name="rq/topological_map_manager2/update_actionRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateAction_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.581563 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1688 from udp/10.101.12.71:40473 -1711462090.581569 [0] recvMC: INFOTS(1711462090.581502801) -1711462090.581565 [0] dq.builtin: => EVERYONE -1711462090.581577 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #34 L(:1c1 16938.241073) => EVERYONE -1711462090.581587 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4504) scanning all wrs of topic rq/topological_map_manager2/update_actionRequest -1711462090.581634 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #34: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.581645 [0] recvMC: HEARTBEAT(F#40:34..34 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@34(sync) 110cd0d:e3b81b8d:1ccb65b1:504@34(sync) 110cd0d:79d6eeac:ea4a8907:504@34(sync)) -1711462090.581762 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 328 from udp/10.101.12.71:40473 -1711462090.581766 [0] recv: INFOTS(1711462090.581730334) -1711462090.581772 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #35 L(:1c1 16938.241270)) -1711462090.581783 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #35: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.20;">,topic_name="rr/topological_map_manager2/add_datumReply",type_name="topological_navigation_msgs::srv::dds_::AddDatum_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581798 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4603 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_datumReply/topological_navigation_msgs::srv::dds_::AddDatum_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.20;">,topic_name="rr/topological_map_manager2/add_datumReply",type_name="topological_navigation_msgs::srv::dds_::AddDatum_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.581807 [0] dq.builtin: => EVERYONE -1711462090.581810 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 324 from udp/10.101.12.71:40473 -1711462090.581817 [0] recv: INFOTS(1711462090.581783677) -1711462090.581821 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #33 L(:1c1 16938.241321)) -1711462090.581819 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4603) scanning all rds of topic rr/topological_map_manager2/add_datumReply -1711462090.581840 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #33: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.20;">,topic_name="rq/topological_map_manager2/add_datumRequest",type_name="topological_navigation_msgs::srv::dds_::AddDatum_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4704},adlink_entity_factory=1} -1711462090.581855 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4704 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_datumRequest/topological_navigation_msgs::srv::dds_::AddDatum_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.20;">,topic_name="rq/topological_map_manager2/add_datumRequest",type_name="topological_navigation_msgs::srv::dds_::AddDatum_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.581867 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1736 from udp/10.101.12.71:40473 -1711462090.581875 [0] recvMC: INFOTS(1711462090.581796803) -1711462090.581868 [0] dq.builtin: => EVERYONE -1711462090.581884 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #35 L(:1c1 16938.241379) => EVERYONE -1711462090.581892 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4704) scanning all wrs of topic rq/topological_map_manager2/add_datumRequest -1711462090.581945 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #35: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.581953 [0] recvMC: HEARTBEAT(F#41:35..35 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@35(sync) 110cd0d:e3b81b8d:1ccb65b1:504@35(sync) 110cd0d:79d6eeac:ea4a8907:504@35(sync)) -1711462090.582076 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.582084 [0] recv: INFOTS(1711462090.582034642) -1711462090.582090 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #36 L(:1c1 16938.241587)) -1711462090.582102 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #36: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.21;">,topic_name="rr/topological_map_manager2/update_fail_policyReply",type_name="topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582118 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4803 reliable volatile writer unnamed: (default).rr/topological_map_manager2/update_fail_policyReply/topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.21;">,topic_name="rr/topological_map_manager2/update_fail_policyReply",type_name="topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.582131 [0] dq.builtin: => EVERYONE -1711462090.582139 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4803) scanning all rds of topic rr/topological_map_manager2/update_fail_policyReply -1711462090.582179 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1784 from udp/10.101.12.71:40473 -1711462090.582189 [0] recvMC: INFOTS(1711462090.582110521) -1711462090.582196 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 340 from udp/10.101.12.71:40473 -1711462090.582203 [0] recv: INFOTS(1711462090.582090581) -1711462090.582196 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #36 L(:1c1 16938.241692) => EVERYONE -1711462090.582213 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #34 L(:1c1 16938.241706)) -1711462090.582229 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #34: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.21;">,topic_name="rq/topological_map_manager2/update_fail_policyRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4904},adlink_entity_factory=1} -1711462090.582248 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4904 reliable volatile reader unnamed: (default).rq/topological_map_manager2/update_fail_policyRequest/topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.21;">,topic_name="rq/topological_map_manager2/update_fail_policyRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateFailPolicy_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.582259 [0] dq.builtin: => EVERYONE -1711462090.582273 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #36: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.582276 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4904) scanning all wrs of topic rq/topological_map_manager2/update_fail_policyRequest -1711462090.582286 [0] recvMC: HEARTBEAT(F#42:36..36 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@36(sync) 110cd0d:e3b81b8d:1ccb65b1:504@36(sync) 110cd0d:79d6eeac:ea4a8907:504@36(sync)) -1711462090.582543 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1832 from udp/10.101.12.71:40473 -1711462090.582548 [0] recvMC: INFOTS(1711462090.582480087) -1711462090.582554 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #37 L(:1c1 16938.242052) => EVERYONE -1711462090.582603 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #37: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.582609 [0] recvMC: HEARTBEAT(F#43:37..37 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@37(sync) 110cd0d:e3b81b8d:1ccb65b1:504@37(sync) 110cd0d:79d6eeac:ea4a8907:504@37(sync)) -1711462090.582888 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1880 from udp/10.101.12.71:40473 -1711462090.582897 [0] recvMC: INFOTS(1711462090.582807206) -1711462090.582902 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #38 L(:1c1 16938.242401) => EVERYONE -1711462090.582952 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #38: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.582958 [0] recvMC: HEARTBEAT(F#44:38..38 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@38(sync) 110cd0d:e3b81b8d:1ccb65b1:504@38(sync) 110cd0d:79d6eeac:ea4a8907:504@38(sync)) -1711462090.583091 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 352 from udp/10.101.12.71:40473 -1711462090.583101 [0] recv: INFOTS(1711462090.582385748) -1711462090.583107 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #37 L(:1c1 16938.242604)) -1711462090.583120 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.583125 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462090.583125 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #37: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.22;">,topic_name="rr/topological_map_manager2/set_node_influence_zoneReply",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZone_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583132 [0] recv: ACKNACK(#0:1/0: L(:1c1 16938.242628) 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:56a27910:57318171:3c2 preemptive-nack rebase defer_heartbeat_to_peer: 110cd0d:56a27910:57318171:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 - queue for transmit -1711462090.583143 [0] recv: non-timed queue now has 1 items -1711462090.583148 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4a03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/set_node_influence_zoneReply/topological_navigation_msgs::srv::dds_::SetInfluenceZone_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.22;">,topic_name="rr/topological_map_manager2/set_node_influence_zoneReply",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZone_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583149 [0] recv: ) -1711462090.583154 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40088f0 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.583158 [0] dq.builtin: => EVERYONE -1711462090.583169 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4a03) scanning all rds of topic rr/topological_map_manager2/set_node_influence_zoneReply -1711462090.583171 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408c40089d8:48 [ udp/10.101.12.71:7418@2 ] -1711462090.583180 [0] tev: traffic-xmit (1) 68 -1711462090.583172 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.583198 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462090.583205 [0] recv: ACKNACK(#0:1/0: L(:1c1 16938.242701) 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:56a27910:57318171:4c2 preemptive-nack rebase defer_heartbeat_to_peer: 110cd0d:56a27910:57318171:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 - queue for transmit -1711462090.583210 [0] recv: non-timed queue now has 1 items -1711462090.583214 [0] recv: ) -1711462090.583217 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc007020 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.583223 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462090.583227 [0] recv: INFOTS(1711462090.582465762) -1711462090.583228 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408bc007108:48 [ udp/10.101.12.71:7418@2 ] -1711462090.583240 [0] tev: traffic-xmit (1) 68 -1711462090.583234 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #35 L(:1c1 16938.242731)) -1711462090.583259 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #35: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.22;">,topic_name="rq/topological_map_manager2/set_node_influence_zoneRequest",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZone_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4b04},adlink_entity_factory=1} -1711462090.583261 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1928 from udp/10.101.12.71:40473 -1711462090.583273 [0] recvMC: INFOTS(1711462090.583170500) -1711462090.583276 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4b04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/set_node_influence_zoneRequest/topological_navigation_msgs::srv::dds_::SetInfluenceZone_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.22;">,topic_name="rq/topological_map_manager2/set_node_influence_zoneRequest",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZone_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.583280 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #39 L(:1c1 16938.242776) => EVERYONE -1711462090.583286 [0] dq.builtin: => EVERYONE -1711462090.583295 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4b04) scanning all wrs of topic rq/topological_map_manager2/set_node_influence_zoneRequest -1711462090.583305 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 156 from udp/10.101.12.71:52025 -1711462090.583312 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462090.583318 [0] recv: ACKNACK(F#1:1/9:111111111 L(:1c1 16938.242816) 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:56a27910:57318171:3c2 complying RX1non-timed queue now has 1 items -1711462090.583320 [0] recv: RX2non-timed queue now has 2 items -1711462090.583323 [0] recv: RX3non-timed queue now has 3 items -1711462090.583326 [0] recv: RX4non-timed queue now has 4 items -1711462090.583328 [0] recv: RX5non-timed queue now has 5 items -1711462090.583331 [0] recv: RX6non-timed queue now has 6 items -1711462090.583336 [0] recv: RX7non-timed queue now has 6 items -1711462090.583338 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc006d20 0(rexmit(110cd0d:56a27910:57318171:3c2:#1/1)): niov 0 sz 0 => now niov 3 sz 244 -1711462090.583339 [0] recv: RX8non-timed queue now has 7 items -1711462090.583350 [0] recv: RX9non-timed queue now has 8 items -1711462090.583340 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #39: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.583352 [0] recv: rexmit#9 maxseq:9<9<=9defer_heartbeat_to_peer: 110cd0d:56a27910:57318171:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 - queue for transmit -1711462090.583363 [0] recv: ) -1711462090.583366 [0] recv: ACKNACK(#0:1/0: 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:56a27910:57318171:200c2 preemptive-nack rebase defer_heartbeat_to_peer: 110cd0d:56a27910:57318171:200c2 -> 110aba1:7b19badd:ce0adb73:200c7 - queue for transmit -1711462090.583368 [0] recv: non-timed queue now has 8 items -1711462090.583371 [0] recv: non-timed queue now has 9 items -1711462090.583373 [0] recv: ) -1711462090.583363 [0] recvMC: HEARTBEAT(F#45:39..39 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@39(sync) 110cd0d:e3b81b8d:1ccb65b1:504@39(sync) 110cd0d:79d6eeac:ea4a8907:504@39(sync)) -1711462090.583375 [0] recv: ACKNACK(#0:1/0: 110aba1:7b19badd:ce0adb73:300c4 -> 110cd0d:56a27910:57318171:300c3 setting-has-replied-to-hb preemptive-nack whc-empty defer_heartbeat_to_peer: 110cd0d:56a27910:57318171:300c3 -> 110aba1:7b19badd:ce0adb73:300c4 - queue for transmit -1711462090.583382 [0] recv: non-timed queue now has 10 items -1711462090.583384 [0] recv: ) -1711462090.583355 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc006ea0 0(rexmit(110cd0d:56a27910:57318171:3c2:#2/1)): niov 3 sz 244 => now niov 5 sz 480 -1711462090.583389 [0] recv: ACKNACK(F#1:1/10:1111111111 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:56a27910:57318171:4c2 complying RX1non-timed queue now has 11 items -1711462090.583396 [0] recv: RX2non-timed queue now has 12 items -1711462090.583400 [0] recv: RX3non-timed queue now has 13 items -1711462090.583402 [0] recv: RX4non-timed queue now has 14 items -1711462090.583404 [0] recv: RX5non-timed queue now has 15 items -1711462090.583406 [0] recv: RX6non-timed queue now has 16 items -1711462090.583409 [0] recv: RX7non-timed queue now has 17 items -1711462090.583412 [0] recv: RX8non-timed queue now has 18 items -1711462090.583414 [0] recv: RX9non-timed queue now has 19 items -1711462090.583417 [0] recv: RX10non-timed queue now has 20 items -1711462090.583419 [0] recv: rexmit#10 maxseq:10<10<=10defer_heartbeat_to_peer: 110cd0d:56a27910:57318171:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 - queue for transmit -1711462090.583420 [0] recv: ) -1711462090.583421 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc0069c0 0(rexmit(110cd0d:56a27910:57318171:3c2:#3/1)): niov 5 sz 480 => now niov 7 sz 684 -1711462090.583422 [0] recv: send_deferred_heartbeat: e22762d101915c4a -> 79bd04c9dfe259de - queue for transmit -1711462090.583427 [0] recv: non-timed queue now has 19 items -1711462090.583426 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc006840 0(rexmit(110cd0d:56a27910:57318171:3c2:#4/1)): niov 7 sz 684 => now niov 9 sz 984 -1711462090.583432 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.583437 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462090.583435 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc0066c0 0(rexmit(110cd0d:56a27910:57318171:3c2:#5/1)): niov 9 sz 984 => now niov 11 sz 1276 -1711462090.583441 [0] recv: ACKNACK(#0:1/0: L(:1c1 16938.242941) 110aba1:7b19badd:ce0adb73:301c4 -> 110cd0d:56a27910:57318171:301c3 setting-has-replied-to-hb preemptive-nack whc-empty defer_heartbeat_to_peer: 110cd0d:56a27910:57318171:301c3 -> 110aba1:7b19badd:ce0adb73:301c4 - queue for transmit -1711462090.583448 [0] recv: non-timed queue now has 18 items -1711462090.583451 [0] recv: ) -1711462090.583452 [0] tev: nn_xpack_send 1276: 0x7408c000139c:20 0x7408bc006e08:52 0x7408ac01de94:172 0x7408bc006f98:36 0x7408ac010284:200 0x7408bc006ab8:36 0x7408ac0240d4:168 0x7408bc006938:36 0x7408ac015d34:264 0x7408bc0067b8:36 0x7408ac028794:256 [ udp/10.101.12.71:7418@2 ] -1711462090.583457 [0] tev: traffic-xmit (1) 1276 -1711462090.583454 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.583464 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.583461 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c4009f70 0(rexmit(110cd0d:56a27910:57318171:3c2:#6/1)): niov 0 sz 0 => now niov 3 sz 336 -1711462090.583468 [0] recv: ACKNACK(#0:1/0: L(:1c1 16938.242968) 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:e3b81b8d:1ccb65b1:3c2 preemptive-nack rebase defer_heartbeat_to_peer: 110cd0d:e3b81b8d:1ccb65b1:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 - queue for transmit -1711462090.583475 [0] recv: non-timed queue now has 18 items -1711462090.583477 [0] recv: ) -1711462090.583481 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 324 from udp/10.101.12.71:40473 -1711462090.583484 [0] recv: INFOTS(1711462090.582707552) -1711462090.583472 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc002560 0(rexmit(110cd0d:56a27910:57318171:3c2:#7/1)): niov 3 sz 336 => now niov 5 sz 628 -1711462090.583487 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #38 L(:1c1 16938.242988)) -1711462090.583495 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc0023e0 0(rexmit(110cd0d:56a27910:57318171:3c2:#8/1)): niov 5 sz 628 => now niov 7 sz 920 -1711462090.583503 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40091f0 0(rexmit(110cd0d:56a27910:57318171:3c2:#9/1)): niov 7 sz 920 => now niov 9 sz 1232 -1711462090.583508 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40094f0 0(control): niov 9 sz 1232 => now niov 10 sz 1264 -1711462090.583508 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #38: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.23;">,topic_name="rr/topological_map_manager2/clear_topological_nodesReply",type_name="std_srvs::srv::dds_::Empty_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583513 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c4009370 0(control): niov 10 sz 1264 => now niov 11 sz 1296 -1711462090.583520 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c4009670 0(control): niov 11 sz 1296 => now niov 12 sz 1328 -1711462090.583540 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 92 from udp/10.101.12.71:52025 -1711462090.583543 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.583540 [0] tev: nn_xpack_send 1328: 0x7408c000139c:20 0x7408c400a058:52 0x7408ac02b704:264 0x7408bc002658:36 0x7408ac02f294:256 0x7408bc0024d8:36 0x7408ac034034:256 0x7408c40092e8:36 0x7408ac037b04:276 0x7408c40095e8:32 0x7408c4009468:32 0x7408c4009768:32 [ udp/10.101.12.71:7418@2 ] -1711462090.583545 [0] recv: ACKNACK(#0:1/0: L(:1c1 16938.243047) 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:e3b81b8d:1ccb65b1:4c2 preemptive-nack rebase defer_heartbeat_to_peer: 110cd0d:e3b81b8d:1ccb65b1:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 - queue for transmit -1711462090.583550 [0] tev: traffic-xmit (1) 1328 -1711462090.583556 [0] recv: non-timed queue now has 13 items -1711462090.583559 [0] recv: ) -1711462090.583557 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40097f0 0(rexmit(110cd0d:56a27910:57318171:4c2:#1/1)): niov 0 sz 0 => now niov 3 sz 248 -1711462090.583561 [0] recv: ACKNACK(#0:1/0: 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 preemptive-nack rebase defer_heartbeat_to_peer: 110cd0d:e3b81b8d:1ccb65b1:200c2 -> 110aba1:7b19badd:ce0adb73:200c7 - queue for transmit -1711462090.583547 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4c03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/clear_topological_nodesReply/std_srvs::srv::dds_::Empty_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.23;">,topic_name="rr/topological_map_manager2/clear_topological_nodesReply",type_name="std_srvs::srv::dds_::Empty_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583569 [0] recv: non-timed queue now has 13 items -1711462090.583567 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400a3f0 0(rexmit(110cd0d:56a27910:57318171:4c2:#2/1)): niov 3 sz 248 => now niov 5 sz 540 -1711462090.583586 [0] recv: ) -1711462090.583596 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 964 from udp/10.101.12.71:40473 -1711462090.583599 [0] recv: INFOTS(1711462090.582794562) -1711462090.583604 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #36 L(:1c1 16938.243103)) -1711462090.583607 [0] recv: INFOTS(1711462090.583082734) -1711462090.583611 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #39) -1711462090.583614 [0] recv: INFOTS(1711462090.583152869) -1711462090.583617 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #37) -1711462090.583599 [0] dq.builtin: => EVERYONE -1711462090.583620 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.583591 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400a570 0(rexmit(110cd0d:56a27910:57318171:4c2:#3/1)): niov 5 sz 540 => now niov 7 sz 824 -1711462090.583623 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.583629 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400a6f0 0(rexmit(110cd0d:56a27910:57318171:4c2:#4/1)): niov 7 sz 824 => now niov 9 sz 1116 -1711462090.583635 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c4009df0 0(rexmit(110cd0d:56a27910:57318171:4c2:#5/1)): niov 9 sz 1116 => now niov 11 sz 1400 -1711462090.583630 [0] recv: ACKNACK(#0:1/0: L(:1c1 16938.243127) 110aba1:7b19badd:ce0adb73:300c4 -> 110cd0d:e3b81b8d:1ccb65b1:300c3 setting-has-replied-to-hb preemptive-nack whc-empty defer_heartbeat_to_peer: 110cd0d:e3b81b8d:1ccb65b1:300c3 -> 110aba1:7b19badd:ce0adb73:300c4 - queue for transmit -1711462090.583646 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4c03) scanning all rds of topic rr/topological_map_manager2/clear_topological_nodesReply -1711462090.583642 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1976 from udp/10.101.12.71:40473 -1711462090.583657 [0] recvMC: INFOTS(1711462090.583554164) -1711462090.583649 [0] tev: nn_xpack_send 1400: 0x7408c000139c:20 0x7408c40098d8:52 0x7408ac01feb4:176 0x7408c400a4e8:36 0x7408ac024e54:256 0x7408c400a668:36 0x7408ac029384:248 0x7408c400a7e8:36 0x7408ac02c7e4:256 0x7408c4009ee8:36 0x7408ac030404:248 [ udp/10.101.12.71:7418@2 ] -1711462090.583661 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #36: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.23;">,topic_name="rq/topological_map_manager2/clear_topological_nodesRequest",type_name="std_srvs::srv::dds_::Empty_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4d04},adlink_entity_factory=1} -1711462090.583663 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #40 L(:1c1 16938.243161) => EVERYONE -1711462090.583649 [0] recv: non-timed queue now has 10 items -1711462090.583679 [0] recv: ) -1711462090.583683 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4d04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/clear_topological_nodesRequest/std_srvs::srv::dds_::Empty_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.23;">,topic_name="rq/topological_map_manager2/clear_topological_nodesRequest",type_name="std_srvs::srv::dds_::Empty_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.583680 [0] tev: traffic-xmit (1) 1400 -1711462090.583688 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 680 from udp/10.101.12.71:40473 -1711462090.583699 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc0026e0 0(rexmit(110cd0d:56a27910:57318171:4c2:#6/1)): niov 0 sz 0 => now niov 3 sz 320 -1711462090.583698 [0] dq.builtin: => EVERYONE -1711462090.583700 [0] recv: INFOTS(1711462090.583470556) -1711462090.583705 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400a870 0(rexmit(110cd0d:56a27910:57318171:4c2:#7/1)): niov 3 sz 320 => now niov 5 sz 624 -1711462090.583711 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4d04) scanning all wrs of topic rq/topological_map_manager2/clear_topological_nodesRequest -1711462090.583713 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #40 L(:1c1 16938.243204)) -1711462090.583715 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400a9f0 0(rexmit(110cd0d:56a27910:57318171:4c2:#8/1)): niov 5 sz 624 => now niov 7 sz 800 -1711462090.583716 [0] recv: INFOTS(1711462090.583536280) -1711462090.583720 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ab70 0(rexmit(110cd0d:56a27910:57318171:4c2:#9/1)): niov 7 sz 800 => now niov 9 sz 968 -1711462090.583725 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400acf0 0(rexmit(110cd0d:56a27910:57318171:4c2:#10/1)): niov 9 sz 968 => now niov 11 sz 1136 -1711462090.583726 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #38) -1711462090.583731 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #39: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.24;">,topic_name="rr/topological_map_manager2/add_topological_node_multiReply",type_name="topological_navigation_msgs::srv::dds_::AddNodeArray_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583728 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ae70 0(control): niov 11 sz 1136 => now niov 12 sz 1168 -1711462090.583709 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #40: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.583733 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.583886 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.583739 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400a0f0 0(control): niov 12 sz 1168 => now niov 13 sz 1200 -1711462090.583896 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400a270 0(control): niov 13 sz 1200 => now niov 15 sz 1256 -1711462090.583900 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400bef0 0(control): niov 15 sz 1256 => now niov 16 sz 1288 -1711462090.583892 [0] recv: ACKNACK(#0:1/0: L(:1c1 16938.243390) 110aba1:7b19badd:ce0adb73:301c4 -> 110cd0d:e3b81b8d:1ccb65b1:301c3 setting-has-replied-to-hb preemptive-nack whc-empty defer_heartbeat_to_peer: 110cd0d:e3b81b8d:1ccb65b1:301c3 -> 110aba1:7b19badd:ce0adb73:301c4 - queue for transmit -1711462090.583902 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400aff0 0(control): niov 16 sz 1288 => now niov 17 sz 1320 -1711462090.583906 [0] recv: non-timed queue now has 2 items -1711462090.583909 [0] recv: ) -1711462090.583911 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400b170 0(control): niov 17 sz 1320 => now niov 18 sz 1352 -1711462090.583915 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400b2f0 0(control): niov 18 sz 1352 => now niov 19 sz 1384 -1711462090.583883 [0] recvMC: HEARTBEAT(F#46:40..40 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@40(sync) 110cd0d:e3b81b8d:1ccb65b1:504@40(sync) 110cd0d:79d6eeac:ea4a8907:504@40(sync)) -1711462090.583748 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4e03 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_topological_node_multiReply/topological_navigation_msgs::srv::dds_::AddNodeArray_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.24;">,topic_name="rr/topological_map_manager2/add_topological_node_multiReply",type_name="topological_navigation_msgs::srv::dds_::AddNodeArray_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.583926 [0] tev: nn_xpack_send 1384: 0x7408c000139c:20 0x7408bc0027c8:52 0x7408ac034b44:248 0x7408c400a968:36 0x7408ac038ff4:268 0x7408c400aae8:36 0x7408ac03b2c4:140 0x7408c400ac68:36 0x7408ac03cef4:132 0x7408c400ade8:36 0x7408ac03eef4:132 0x7408c400af68:32 0x7408c400a1e8:32 0x7408c400a340:24 0x7408c400a368:32 0x7408c400bfe8:32 0x7408c400b0e8:32 0x7408c400b268:32 0x7408c400b3e8:32 [ udp/10.101.12.71:7418@2 ] -1711462090.583932 [0] tev: traffic-xmit (1) 1384 -1711462090.583936 [0] dq.builtin: => EVERYONE -1711462090.583937 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.583943 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.583945 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:4e03) scanning all rds of topic rr/topological_map_manager2/add_topological_node_multiReply -1711462090.583945 [0] recv: ACKNACK(#0:1/0: L(:1c1 16938.243447) 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:79d6eeac:ea4a8907:3c2 preemptive-nack rebase defer_heartbeat_to_peer: 110cd0d:79d6eeac:ea4a8907:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 - queue for transmit -1711462090.583953 [0] recv: non-timed queue now has 1 items -1711462090.583956 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #37: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.24;">,topic_name="rq/topological_map_manager2/add_topological_node_multiRequest",type_name="topological_navigation_msgs::srv::dds_::AddNodeArray_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4f04},adlink_entity_factory=1} -1711462090.583956 [0] recv: ) -1711462090.583958 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400b470 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.583969 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408c400b558:48 [ udp/10.101.12.71:7418@2 ] -1711462090.583971 [0] tev: traffic-xmit (1) 68 -1711462090.583977 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:4f04 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_topological_node_multiRequest/topological_navigation_msgs::srv::dds_::AddNodeArray_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.24;">,topic_name="rq/topological_map_manager2/add_topological_node_multiRequest",type_name="topological_navigation_msgs::srv::dds_::AddNodeArray_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.583986 [0] dq.builtin: => EVERYONE -1711462090.583991 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 360 from udp/10.101.12.71:40473 -1711462090.583993 [0] recv: INFOTS(1711462090.583967232) -1711462090.583996 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #41 L(:1c1 16938.243497)) -1711462090.583999 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:4f04) scanning all wrs of topic rq/topological_map_manager2/add_topological_node_multiRequest -1711462090.584016 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #40: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.25;">,topic_name="rr/topological_map_manager2/add_edges_between_nodes_multiReply",type_name="topological_navigation_msgs::srv::dds_::AddEdgeArray_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584033 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5003 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_edges_between_nodes_multiReply/topological_navigation_msgs::srv::dds_::AddEdgeArray_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.25;">,topic_name="rr/topological_map_manager2/add_edges_between_nodes_multiReply",type_name="topological_navigation_msgs::srv::dds_::AddEdgeArray_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584041 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 356 from udp/10.101.12.71:40473 -1711462090.584043 [0] recv: INFOTS(1711462090.584023477) -1711462090.584046 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #39 L(:1c1 16938.243547)) -1711462090.584051 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.584052 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.584055 [0] gc: gc 0x7408c8084400: not yet, shortsleep -1711462090.584057 [0] recv: ACKNACK(#0:1/0: L(:1c1 16938.243556) 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:79d6eeac:ea4a8907:4c2 preemptive-nack rebase defer_heartbeat_to_peer: 110cd0d:79d6eeac:ea4a8907:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 - queue for transmit -1711462090.584063 [0] recv: non-timed queue now has 1 items -1711462090.584057 [0] dq.builtin: => EVERYONE -1711462090.584064 [0] recv: ) -1711462090.584066 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400c470 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.584074 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:5003) scanning all rds of topic rr/topological_map_manager2/add_edges_between_nodes_multiReply -1711462090.584078 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408c400c558:48 [ udp/10.101.12.71:7418@2 ] -1711462090.584085 [0] tev: traffic-xmit (1) 68 -1711462090.584089 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #38: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.25;">,topic_name="rq/topological_map_manager2/add_edges_between_nodes_multiRequest",type_name="topological_navigation_msgs::srv::dds_::AddEdgeArray_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5104},adlink_entity_factory=1} -1711462090.584094 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2024 from udp/10.101.12.71:40473 -1711462090.584097 [0] recvMC: INFOTS(1711462090.584035736) -1711462090.584099 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #41 L(:1c1 16938.243601) => EVERYONE -1711462090.584106 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5104 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_edges_between_nodes_multiRequest/topological_navigation_msgs::srv::dds_::AddEdgeArray_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.25;">,topic_name="rq/topological_map_manager2/add_edges_between_nodes_multiRequest",type_name="topological_navigation_msgs::srv::dds_::AddEdgeArray_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.584119 [0] dq.builtin: => EVERYONE -1711462090.584129 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:5104) scanning all wrs of topic rq/topological_map_manager2/add_edges_between_nodes_multiRequest -1711462090.584131 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #41: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.584139 [0] recvMC: HEARTBEAT(F#47:41..41 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@41(sync) 110cd0d:e3b81b8d:1ccb65b1:504@41(sync) 110cd0d:79d6eeac:ea4a8907:504@41(sync)) -1711462090.584140 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #41: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.26;">,topic_name="rr/topological_map_manager2/add_param_to_edge_config_multiReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584159 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5203 reliable volatile writer unnamed: (default).rr/topological_map_manager2/add_param_to_edge_config_multiReply/topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.26;">,topic_name="rr/topological_map_manager2/add_param_to_edge_config_multiReply",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584168 [0] dq.builtin: => EVERYONE -1711462090.584175 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:5203) scanning all rds of topic rr/topological_map_manager2/add_param_to_edge_config_multiReply -1711462090.584184 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #39: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.26;">,topic_name="rq/topological_map_manager2/add_param_to_edge_config_multiRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5304},adlink_entity_factory=1} -1711462090.584193 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.584195 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.584198 [0] recv: ACKNACK(#0:1/0: L(:1c1 16938.243699) 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 preemptive-nack rebase defer_heartbeat_to_peer: 110cd0d:79d6eeac:ea4a8907:200c2 -> 110aba1:7b19badd:ce0adb73:200c7 - queue for transmit -1711462090.584201 [0] recv: non-timed queue now has 1 items -1711462090.584204 [0] recv: ) -1711462090.584206 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400c2f0 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.584198 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5304 reliable volatile reader unnamed: (default).rq/topological_map_manager2/add_param_to_edge_config_multiRequest/topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.26;">,topic_name="rq/topological_map_manager2/add_param_to_edge_config_multiRequest",type_name="topological_navigation_msgs::srv::dds_::UpdateEdgeConfigArray_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.584211 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408c400c3d8:48 [ udp/10.101.12.71:7418@2 ] -1711462090.584221 [0] tev: traffic-xmit (1) 68 -1711462090.584227 [0] dq.builtin: => EVERYONE -1711462090.584228 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.584235 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.584236 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:5304) scanning all wrs of topic rq/topological_map_manager2/add_param_to_edge_config_multiRequest -1711462090.584238 [0] recv: ACKNACK(#0:1/0: L(:1c1 16938.243739) 110aba1:7b19badd:ce0adb73:300c4 -> 110cd0d:79d6eeac:ea4a8907:300c3 setting-has-replied-to-hb preemptive-nack whc-empty defer_heartbeat_to_peer: 110cd0d:79d6eeac:ea4a8907:300c3 -> 110aba1:7b19badd:ce0adb73:300c4 - queue for transmit -1711462090.584244 [0] recv: non-timed queue now has 1 items -1711462090.584246 [0] recv: ) -1711462090.584246 [0] tev: xpack_addmsg 0x7408c0001390 0x7408d0001390 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.584254 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408d0001478:48 [ udp/10.101.12.71:7418@2 ] -1711462090.584255 [0] tev: traffic-xmit (1) 68 -1711462090.584324 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 360 from udp/10.101.12.71:40473 -1711462090.584326 [0] recv: INFOTS(1711462090.584293877) -1711462090.584328 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #42 L(:1c1 16938.243830)) -1711462090.584347 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #42: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.27;">,topic_name="rr/topological_map_manager2/set_node_influence_zone_multiReply",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZoneArray_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584372 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5403 reliable volatile writer unnamed: (default).rr/topological_map_manager2/set_node_influence_zone_multiReply/topological_navigation_msgs::srv::dds_::SetInfluenceZoneArray_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.27;">,topic_name="rr/topological_map_manager2/set_node_influence_zone_multiReply",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZoneArray_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.584373 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 356 from udp/10.101.12.71:40473 -1711462090.584379 [0] recv: INFOTS(1711462090.584335539) -1711462090.584382 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #40 L(:1c1 16938.243883)) -1711462090.584385 [0] dq.builtin: => EVERYONE -1711462090.584395 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:5403) scanning all rds of topic rr/topological_map_manager2/set_node_influence_zone_multiReply -1711462090.584407 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #40: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.27;">,topic_name="rq/topological_map_manager2/set_node_influence_zone_multiRequest",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZoneArray_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5504},adlink_entity_factory=1} -1711462090.584425 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.584427 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.584431 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5504 reliable volatile reader unnamed: (default).rq/topological_map_manager2/set_node_influence_zone_multiRequest/topological_navigation_msgs::srv::dds_::SetInfluenceZoneArray_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=54<"serviceid= 1.10.d7.b4.17.c5.b8.c5.94.bd.f.f4.0.0.0.27;">,topic_name="rq/topological_map_manager2/set_node_influence_zone_multiRequest",type_name="topological_navigation_msgs::srv::dds_::SetInfluenceZoneArray_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.584431 [0] recv: ACKNACK(#0:1/0: L(:1c1 16938.243931) 110aba1:7b19badd:ce0adb73:301c4 -> 110cd0d:79d6eeac:ea4a8907:301c3 setting-has-replied-to-hb preemptive-nack whc-empty defer_heartbeat_to_peer: 110cd0d:79d6eeac:ea4a8907:301c3 -> 110aba1:7b19badd:ce0adb73:301c4 - queue for transmit -1711462090.584439 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2072 from udp/10.101.12.71:40473 -1711462090.584443 [0] recvMC: INFOTS(1711462090.584362470) -1711462090.584440 [0] recv: non-timed queue now has 1 items -1711462090.584448 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #42 L(:1c1 16938.243947) => EVERYONE -1711462090.584451 [0] recv: ) -1711462090.584447 [0] dq.builtin: => EVERYONE -1711462090.584456 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400b770 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.584467 [0] dq.builtin: match_proxy_reader_with_writers(prd 110d7b4:17c5b8c5:94bd0ff4:5504) scanning all wrs of topic rq/topological_map_manager2/set_node_influence_zone_multiRequest -1711462090.584480 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408c400b858:48 [ udp/10.101.12.71:7418@2 ] -1711462090.584484 [0] tev: traffic-xmit (1) 68 -1711462090.584491 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #42: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462090.584499 [0] recvMC: HEARTBEAT(F#49:42..42 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@42(sync) 110cd0d:e3b81b8d:1ccb65b1:504@42(sync) 110cd0d:79d6eeac:ea4a8907:504@42(sync)) -1711462090.584618 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 124 from udp/10.101.12.71:52025 -1711462090.584620 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462090.584623 [0] recv: ACKNACK(F#2:10/0: L(:1c1 16938.244124) 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:56a27910:57318171:3c2 setting-has-replied-to-hb happy-now) -1711462090.584627 [0] recv: ACKNACK(F#1:1/1:1 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:56a27910:57318171:200c2 complying RX1non-timed queue now has 1 items -1711462090.584629 [0] recv: rexmit#1 maxseq:1<1<=1defer_heartbeat_to_peer: 110cd0d:56a27910:57318171:200c2 -> 110aba1:7b19badd:ce0adb73:200c7 - queue for transmit -1711462090.584631 [0] recv: ) -1711462090.584633 [0] recv: ACKNACK(F#1:1/0: 110aba1:7b19badd:ce0adb73:300c4 -> 110cd0d:56a27910:57318171:300c3 happy-now) -1711462090.584635 [0] recv: send_deferred_heartbeat: b0f11d4f1d29d666 -> 2e9a32ef85ddbc26 - queue for transmit -1711462090.584633 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc0029e0 0(rexmit(110cd0d:56a27910:57318171:200c2:#1/1)): niov 0 sz 0 => now niov 3 sz 100 -1711462090.584636 [0] recv: non-timed queue now has 1 items -1711462090.584646 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc002860 0(control): niov 3 sz 100 => now niov 4 sz 132 -1711462090.584658 [0] tev: nn_xpack_send 132: 0x7408c000139c:20 0x7408bc002ac8:52 0x7408c800f16c:28 0x7408bc002958:32 [ udp/10.101.12.71:7418@2 ] -1711462090.584661 [0] tev: traffic-xmit (1) 132 -1711462090.584757 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 92 from udp/10.101.12.71:52025 -1711462090.584759 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462090.584761 [0] recv: ACKNACK(F#2:11/0: L(:1c1 16938.244263) 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:56a27910:57318171:4c2 setting-has-replied-to-hb happy-now) -1711462090.584763 [0] recv: ACKNACK(F#1:1/0: 110aba1:7b19badd:ce0adb73:301c4 -> 110cd0d:56a27910:57318171:301c3 happy-now) -1711462090.584854 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 268 from udp/10.101.12.71:52025 -1711462090.584856 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.584860 [0] recv: ACKNACK(F#1:1/10:1111111111 L(:1c1 16938.244360) 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:e3b81b8d:1ccb65b1:3c2 complying RX1non-timed queue now has 1 items -1711462090.584862 [0] recv: M2 RX3non-timed queue now has 2 items -1711462090.584864 [0] recv: RX4non-timed queue now has 3 items -1711462090.584868 [0] recv: RX5non-timed queue now has 3 items -1711462090.584871 [0] recv: RX6non-timed queue now has 4 items -1711462090.584873 [0] recv: RX7non-timed queue now has 5 items -1711462090.584876 [0] recv: RX8non-timed queue now has 6 items -1711462090.584878 [0] recv: RX9non-timed queue now has 7 items -1711462090.584869 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400b5f0 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:3c2:#1/1)): niov 0 sz 0 => now niov 3 sz 244 -1711462090.584881 [0] recv: M10 FXGAP2..3/8:00000001non-timed queue now has 8 items -1711462090.584886 [0] recv: rexmit#9 maxseq:10<10<=10defer_heartbeat_to_peer: 110cd0d:e3b81b8d:1ccb65b1:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 - queue for transmit -1711462090.584888 [0] recv: ) -1711462090.584890 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400cef0 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:3c2:#3/1)): niov 3 sz 244 => now niov 5 sz 448 -1711462090.584892 [0] recv: ACKNACK(F#1:1/10:1111111111 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:e3b81b8d:1ccb65b1:4c2 complying RX1non-timed queue now has 8 items -1711462090.584897 [0] recv: RX2non-timed queue now has 9 items -1711462090.584900 [0] recv: RX3non-timed queue now has 10 items -1711462090.584903 [0] recv: RX4non-timed queue now has 11 items -1711462090.584905 [0] recv: RX5non-timed queue now has 12 items -1711462090.584909 [0] recv: RX6non-timed queue now has 13 items -1711462090.584911 [0] recv: RX7non-timed queue now has 14 items -1711462090.584913 [0] recv: RX8non-timed queue now has 15 items -1711462090.584916 [0] recv: RX9non-timed queue now has 16 items -1711462090.584918 [0] recv: RX10non-timed queue now has 17 items -1711462090.584920 [0] recv: rexmit#10 maxseq:10<10<=10defer_heartbeat_to_peer: 110cd0d:e3b81b8d:1ccb65b1:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 - queue for transmit -1711462090.584922 [0] recv: non-timed queue now has 17 items -1711462090.584923 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ba70 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:3c2:#4/1)): niov 5 sz 448 => now niov 7 sz 748 -1711462090.584923 [0] recv: ) -1711462090.584929 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400b8f0 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:3c2:#5/1)): niov 7 sz 748 => now niov 9 sz 1040 -1711462090.584931 [0] recv: ACKNACK(F#1:3/1:1 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 complying RX3non-timed queue now has 17 items -1711462090.584936 [0] recv: rexmit#1 maxseq:3<3<=3defer_heartbeat_to_peer: 110cd0d:e3b81b8d:1ccb65b1:200c2 -> 110aba1:7b19badd:ce0adb73:200c7 - queue for transmit -1711462090.584940 [0] recv: non-timed queue now has 17 items -1711462090.584942 [0] recv: ) -1711462090.584940 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400bbf0 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:3c2:#6/1)): niov 9 sz 1040 => now niov 11 sz 1340 -1711462090.584945 [0] recv: ACKNACK(F#1:1/0: 110aba1:7b19badd:ce0adb73:300c4 -> 110cd0d:e3b81b8d:1ccb65b1:300c3 happy-now) -1711462090.584953 [0] recv: ACKNACK(F#1:1/0: 110aba1:7b19badd:ce0adb73:301c4 -> 110cd0d:e3b81b8d:1ccb65b1:301c3 happy-now) -1711462090.584955 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.584958 [0] recv: ACKNACK(F#1:1/10:1111111111 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:79d6eeac:ea4a8907:3c2 complying RX1non-timed queue now has 17 items -1711462090.584960 [0] recv: M2 RX3non-timed queue now has 18 items -1711462090.584961 [0] tev: nn_xpack_send 1340: 0x7408c000139c:20 0x7408c400b6d8:52 0x7408d4029a84:172 0x7408c400cfe8:36 0x7408d4095d14:168 0x7408c400bb68:36 0x7408d409b634:264 0x7408c400b9e8:36 0x7408d405e424:256 0x7408c400bce8:36 0x7408d4063364:264 [ udp/10.101.12.71:7418@2 ] -1711462090.584962 [0] recv: RX4non-timed queue now has 19 items -1711462090.584965 [0] tev: traffic-xmit (1) 1340 -1711462090.584968 [0] recv: RX5non-timed queue now has 20 items -1711462090.584971 [0] recv: RX6non-timed queue now has 21 items -1711462090.584973 [0] recv: RX7non-timed queue now has 22 items -1711462090.584975 [0] recv: RX8non-timed queue now has 23 items -1711462090.584978 [0] recv: RX9non-timed queue now has 24 items -1711462090.584981 [0] recv: M10 FXGAP2..3/8:00000001non-timed queue now has 25 items -1711462090.584982 [0] recv: rexmit#9 maxseq:10<10<=10defer_heartbeat_to_peer: 110cd0d:79d6eeac:ea4a8907:3c2 -> 110aba1:7b19badd:ce0adb73:3c7 - queue for transmit -1711462090.584984 [0] recv: non-timed queue now has 26 items -1711462090.584983 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400bd70 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:3c2:#7/1)): niov 0 sz 0 => now niov 3 sz 328 -1711462090.584986 [0] recv: ) -1711462090.584991 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400c170 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:3c2:#8/1)): niov 3 sz 328 => now niov 5 sz 620 -1711462090.584994 [0] recv: ACKNACK(F#1:1/10:1111111111 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:79d6eeac:ea4a8907:4c2 complying RX1non-timed queue now has 26 items -1711462090.584997 [0] recv: RX2non-timed queue now has 27 items -1711462090.584999 [0] recv: RX3non-timed queue now has 28 items -1711462090.585001 [0] recv: RX4non-timed queue now has 29 items -1711462090.585004 [0] recv: RX5non-timed queue now has 30 items -1711462090.585006 [0] recv: RX6non-timed queue now has 31 items -1711462090.585010 [0] recv: RX7non-timed queue now has 32 items -1711462090.585012 [0] recv: RX8non-timed queue now has 33 items -1711462090.585014 [0] recv: RX9non-timed queue now has 34 items -1711462090.585016 [0] recv: RX10non-timed queue now has 35 items -1711462090.585018 [0] recv: rexmit#10 maxseq:10<10<=10defer_heartbeat_to_peer: 110cd0d:79d6eeac:ea4a8907:4c2 -> 110aba1:7b19badd:ce0adb73:4c7 - queue for transmit -1711462090.585020 [0] recv: non-timed queue now has 36 items -1711462090.585022 [0] recv: ) -1711462090.585023 [0] recv: send_deferred_heartbeat: e6906c1267fe410d -> 79bd04c9dfe259de - queue for transmit -1711462090.585025 [0] recv: non-timed queue now has 36 items -1711462090.585025 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400d1f0 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:3c2:#9/1)): niov 5 sz 620 => now niov 7 sz 932 -1711462090.585028 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 68 from udp/10.101.12.71:52025 -1711462090.585033 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400d370 0(control): niov 7 sz 932 => now niov 8 sz 968 -1711462090.585034 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.585039 [0] tev: xpack_addmsg 0x7408c0001390 0x7408e000a1a0 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:4c2:#1/1)): niov 8 sz 968 => now niov 10 sz 1180 -1711462090.585042 [0] recv: ACKNACK(F#1:3/1:1 L(:1c1 16938.244539) 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 complying RX3non-timed queue now has 35 items -1711462090.585044 [0] recv: rexmit#1 maxseq:3<3<=3defer_heartbeat_to_peer: 110cd0d:79d6eeac:ea4a8907:200c2 -> 110aba1:7b19badd:ce0adb73:200c7 - queue for transmit -1711462090.585046 [0] recv: ) -1711462090.585047 [0] recv: send_deferred_heartbeat: c4ced519f5211b97 -> 2e9a32ef85ddbc26 - queue for transmit -1711462090.585049 [0] recv: non-timed queue now has 35 items -1711462090.585051 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.585053 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.585055 [0] recv: ACKNACK(F#1:1/0: L(:1c1 16938.244557) 110aba1:7b19badd:ce0adb73:300c4 -> 110cd0d:79d6eeac:ea4a8907:300c3 happy-now) -1711462090.585058 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.585060 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.585055 [0] tev: nn_xpack_send 1180: 0x7408c000139c:20 0x7408c400be58:52 0x7408d4068954:256 0x7408c400c268:36 0x7408d4101cf4:256 0x7408c400d2e8:36 0x7408d4085c94:276 0x7408c400d468:36 0x7408e0009cf8:36 0x7408d402b444:176 [ udp/10.101.12.71:7418@2 ] -1711462090.585062 [0] recv: ACKNACK(F#1:1/0: L(:1c1 16938.244564) 110aba1:7b19badd:ce0adb73:301c4 -> 110cd0d:79d6eeac:ea4a8907:301c3 happy-now) -1711462090.585066 [0] tev: traffic-xmit (1) 1180 -1711462090.585069 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.585071 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462090.585073 [0] recv: ACKNACK(F#2:2/0: L(:1c1 16938.244575) 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:56a27910:57318171:200c2 setting-has-replied-to-hb happy-now) -1711462090.585078 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400daf0 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:4c2:#2/1)): niov 0 sz 0 => now niov 3 sz 328 -1711462090.585083 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400cbf0 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:4c2:#3/1)): niov 3 sz 328 => now niov 5 sz 612 -1711462090.585088 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400c8f0 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:4c2:#4/1)): niov 5 sz 612 => now niov 7 sz 904 -1711462090.585092 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400cd70 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:4c2:#5/1)): niov 7 sz 904 => now niov 9 sz 1188 -1711462090.585102 [0] tev: nn_xpack_send 1188: 0x7408c000139c:20 0x7408c400dbd8:52 0x7408d409cd74:256 0x7408c400cce8:36 0x7408d405f624:248 0x7408c400c9e8:36 0x7408d4064584:256 0x7408c400ce68:36 0x7408d40fadd4:248 [ udp/10.101.12.71:7418@2 ] -1711462090.585109 [0] tev: traffic-xmit (1) 1188 -1711462090.585110 [0] gc: gc 0x7408c8084400: deleting -1711462090.585114 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400d070 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:4c2:#6/1)): niov 0 sz 0 => now niov 3 sz 320 -1711462090.585122 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e0f0 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:4c2:#7/1)): niov 3 sz 320 => now niov 5 sz 624 -1711462090.585126 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400d670 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:4c2:#8/1)): niov 5 sz 624 => now niov 7 sz 800 -1711462090.585130 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e270 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:4c2:#9/1)): niov 7 sz 800 => now niov 9 sz 968 -1711462090.585134 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400d7f0 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:4c2:#10/1)): niov 9 sz 968 => now niov 11 sz 1136 -1711462090.585137 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ca70 0(control): niov 11 sz 1136 => now niov 12 sz 1168 -1711462090.585141 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400d4f0 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:200c2:#3/1)): niov 12 sz 1168 => now niov 14 sz 1232 -1711462090.585145 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400d970 0(control): niov 14 sz 1232 => now niov 15 sz 1264 -1711462090.585156 [0] tev: nn_xpack_send 1264: 0x7408c000139c:20 0x7408c400d158:52 0x7408d4103124:248 0x7408c400e1e8:36 0x7408d4087084:268 0x7408c400d768:36 0x7408d408f7c4:140 0x7408c400e368:36 0x7408d4091824:132 0x7408c400d8e8:36 0x7408d4093804:132 0x7408c400cb68:32 0x7408c400d5e8:36 0x7408c0002f6c:28 0x7408c400da68:32 [ udp/10.101.12.71:7418@2 ] -1711462090.585159 [0] tev: traffic-xmit (1) 1264 -1711462090.585163 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ddf0 0(rexmit(110cd0d:79d6eeac:ea4a8907:3c2:#1/1)): niov 0 sz 0 => now niov 3 sz 244 -1711462090.585167 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400dc70 0(rexmit(110cd0d:79d6eeac:ea4a8907:3c2:#3/1)): niov 3 sz 244 => now niov 5 sz 448 -1711462090.585171 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc005b30 0(rexmit(110cd0d:79d6eeac:ea4a8907:3c2:#4/1)): niov 5 sz 448 => now niov 7 sz 744 -1711462090.585175 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc003170 0(rexmit(110cd0d:79d6eeac:ea4a8907:3c2:#5/1)): niov 7 sz 744 => now niov 9 sz 1032 -1711462090.585179 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc002e70 0(rexmit(110cd0d:79d6eeac:ea4a8907:3c2:#6/1)): niov 9 sz 1032 => now niov 11 sz 1328 -1711462090.585189 [0] tev: nn_xpack_send 1328: 0x7408c000139c:20 0x7408c400ded8:52 0x7408e0019a34:172 0x7408c400dd68:36 0x7408e0021b34:168 0x7408bc005c28:36 0x7408e00143e4:260 0x7408bc005aa8:36 0x7408e0020064:252 0x7408bc002f68:36 0x7408e00296e4:260 [ udp/10.101.12.71:7418@2 ] -1711462090.585193 [0] tev: traffic-xmit (1) 1328 -1711462090.585196 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc002ff0 0(rexmit(110cd0d:79d6eeac:ea4a8907:3c2:#7/1)): niov 0 sz 0 => now niov 3 sz 324 -1711462090.585200 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400c5f0 0(rexmit(110cd0d:79d6eeac:ea4a8907:3c2:#8/1)): niov 3 sz 324 => now niov 5 sz 612 -1711462090.585203 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e870 0(rexmit(110cd0d:79d6eeac:ea4a8907:3c2:#9/1)): niov 5 sz 612 => now niov 7 sz 920 -1711462090.585207 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400c770 0(control): niov 7 sz 920 => now niov 8 sz 956 -1711462090.585210 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400df70 0(control): niov 8 sz 956 => now niov 10 sz 1012 -1711462090.585214 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e9f0 0(rexmit(110cd0d:79d6eeac:ea4a8907:4c2:#1/1)): niov 10 sz 1012 => now niov 13 sz 1248 -1711462090.585225 [0] tev: nn_xpack_send 1248: 0x7408c000139c:20 0x7408bc0030d8:52 0x7408e002dcd4:252 0x7408c400c6e8:36 0x7408e0033864:252 0x7408c400e968:36 0x7408e0037c74:272 0x7408c400c868:36 0x7408c400e040:24 0x7408c400e068:32 0x7408c400eac0:24 0x7408c400eae8:36 0x7408e001b744:176 [ udp/10.101.12.71:7418@2 ] -1711462090.585231 [0] tev: traffic-xmit (1) 1248 -1711462090.585236 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400eb70 0(rexmit(110cd0d:79d6eeac:ea4a8907:4c2:#2/1)): niov 0 sz 0 => now niov 3 sz 324 -1711462090.585240 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ecf0 0(rexmit(110cd0d:79d6eeac:ea4a8907:4c2:#3/1)): niov 3 sz 324 => now niov 5 sz 604 -1711462090.585244 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e3f0 0(rexmit(110cd0d:79d6eeac:ea4a8907:4c2:#4/1)): niov 5 sz 604 => now niov 7 sz 892 -1711462090.585248 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c4011870 0(rexmit(110cd0d:79d6eeac:ea4a8907:4c2:#5/1)): niov 7 sz 892 => now niov 9 sz 1172 -1711462090.585252 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f170 0(rexmit(110cd0d:79d6eeac:ea4a8907:4c2:#6/1)): niov 9 sz 1172 => now niov 11 sz 1452 -1711462090.585256 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.585258 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.585260 [0] recv: ACKNACK(F#2:11/0: L(:1c1 16938.244762) 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:e3b81b8d:1ccb65b1:3c2 setting-has-replied-to-hb happy-now) -1711462090.585263 [0] tev: nn_xpack_send 1452: 0x7408c000139c:20 0x7408c400ec58:52 0x7408e001fee4:252 0x7408c400ede8:36 0x7408e00030a4:244 0x7408c400e4e8:36 0x7408e002a714:252 0x7408c4011968:36 0x7408e002ed84:244 0x7408c400f268:36 0x7408e0034a24:244 [ udp/10.101.12.71:7418@2 ] -1711462090.585266 [0] tev: traffic-xmit (1) 1452 -1711462090.585270 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f770 0(rexmit(110cd0d:79d6eeac:ea4a8907:4c2:#7/1)): niov 0 sz 0 => now niov 3 sz 336 -1711462090.585274 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e570 0(rexmit(110cd0d:79d6eeac:ea4a8907:4c2:#8/1)): niov 3 sz 336 => now niov 5 sz 512 -1711462090.585278 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ee70 0(rexmit(110cd0d:79d6eeac:ea4a8907:4c2:#9/1)): niov 5 sz 512 => now niov 7 sz 680 -1711462090.585282 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e6f0 0(rexmit(110cd0d:79d6eeac:ea4a8907:4c2:#10/1)): niov 7 sz 680 => now niov 9 sz 848 -1711462090.585286 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400eff0 0(control): niov 9 sz 848 => now niov 10 sz 880 -1711462090.585289 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f2f0 0(control): niov 10 sz 880 => now niov 11 sz 912 -1711462090.585290 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.585295 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.585293 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f470 0(rexmit(110cd0d:79d6eeac:ea4a8907:200c2:#3/1)): niov 11 sz 912 => now niov 13 sz 976 -1711462090.585297 [0] recv: ACKNACK(F#2:11/0: L(:1c1 16938.244799) 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:e3b81b8d:1ccb65b1:4c2 setting-has-replied-to-hb happy-now) -1711462090.585302 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f5f0 0(control): niov 13 sz 976 => now niov 14 sz 1008 -1711462090.585316 [0] tev: nn_xpack_send 1008: 0x7408c000139c:20 0x7408c400f858:52 0x7408e0038d24:264 0x7408c400e668:36 0x7408e002c194:140 0x7408c400ef68:36 0x7408e003cc64:132 0x7408c400e7e8:36 0x7408e003ee54:132 0x7408c400f0e8:32 0x7408c400f3e8:32 0x7408c400f568:36 0x7408c800d1dc:28 0x7408c400f6e8:32 [ udp/10.101.12.71:7418@2 ] -1711462090.585319 [0] tev: traffic-xmit (1) 1008 -1711462090.585387 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.585390 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.585392 [0] recv: ACKNACK(F#2:4/0: L(:1c1 16938.244894) 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 setting-has-replied-to-hb happy-now) -1711462090.585516 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 92 from udp/10.101.12.71:52025 -1711462090.585518 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.585522 [0] recv: ACKNACK(F#2:11/0: L(:1c1 16938.245022) 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:79d6eeac:ea4a8907:3c2 setting-has-replied-to-hb happy-now) -1711462090.585524 [0] recv: ACKNACK(F#2:11/0: 110aba1:7b19badd:ce0adb73:4c7 -> 110cd0d:79d6eeac:ea4a8907:4c2 setting-has-replied-to-hb happy-now) -1711462090.585532 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.585534 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.585536 [0] recv: ACKNACK(F#2:4/0: L(:1c1 16938.245038) 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 setting-has-replied-to-hb happy-now) -1711462090.588384 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 224 from udp/10.101.12.71:52025 -1711462090.588388 [0] recv: INFOTS(1711462090.588344046) -1711462090.588393 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #3 L(:1c1 16938.247891)) -1711462090.588409 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #3: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:703},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588431 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:703 reliable volatile writer unnamed: (default).rt/parameter_events/rcl_interfaces::msg::dds_::ParameterEvent_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=0<>,topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.588443 [0] dq.builtin: => EVERYONE -1711462090.588452 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:703) scanning all rds of topic rt/parameter_events -1711462090.588466 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 216 from udp/10.101.12.71:52025 -1711462090.588471 [0] recvMC: INFOTS(1711462090.588369545) -1711462090.588474 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #3 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.588476 [0] recvMC: HEARTBEAT(#4:3..3 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.589381 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 336 from udp/10.101.12.71:52025 -1711462090.589392 [0] recv: INFOTS(1711462090.589341876) -1711462090.589401 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #4 L(:1c1 16938.248895)) -1711462090.589416 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #4: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.1;">,topic_name="rr/topological_navigation_core/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.589435 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:803 reliable volatile writer unnamed: (default).rr/topological_navigation_core/describe_parametersReply/rcl_interfaces::srv::dds_::DescribeParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.1;">,topic_name="rr/topological_navigation_core/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.589450 [0] dq.builtin: => EVERYONE -1711462090.589459 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:803) scanning all rds of topic rr/topological_navigation_core/describe_parametersReply -1711462090.589474 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 332 from udp/10.101.12.71:52025 -1711462090.589480 [0] recv: INFOTS(1711462090.589420872) -1711462090.589489 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #2 L(:1c1 16938.248983)) -1711462090.589502 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #2: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.1;">,topic_name="rq/topological_navigation_core/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:904},adlink_entity_factory=1} -1711462090.589520 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:904 reliable volatile reader unnamed: (default).rq/topological_navigation_core/describe_parametersRequest/rcl_interfaces::srv::dds_::DescribeParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.1;">,topic_name="rq/topological_navigation_core/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.589538 [0] dq.builtin: => EVERYONE -1711462090.589540 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 264 from udp/10.101.12.71:52025 -1711462090.589550 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:904) scanning all wrs of topic rq/topological_navigation_core/describe_parametersRequest -1711462090.589551 [0] recvMC: INFOTS(1711462090.589459043) -1711462090.589561 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #4 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.589565 [0] recvMC: HEARTBEAT(F#7:4..4 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.589871 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 328 from udp/10.101.12.71:52025 -1711462090.589879 [0] recv: INFOTS(1711462090.589837664) -1711462090.589885 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #5 L(:1c1 16938.249382)) -1711462090.589899 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #5: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.2;">,topic_name="rr/topological_navigation_core/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.589917 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:a03 reliable volatile writer unnamed: (default).rr/topological_navigation_core/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.2;">,topic_name="rr/topological_navigation_core/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.589938 [0] dq.builtin: => EVERYONE -1711462090.589939 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 324 from udp/10.101.12.71:52025 -1711462090.589948 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:a03) scanning all rds of topic rr/topological_navigation_core/get_parametersReply -1711462090.589950 [0] recv: INFOTS(1711462090.589906240) -1711462090.589961 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #3 L(:1c1 16938.249453)) -1711462090.589973 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #3: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.2;">,topic_name="rq/topological_navigation_core/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:b04},adlink_entity_factory=1} -1711462090.589990 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:b04 reliable volatile reader unnamed: (default).rq/topological_navigation_core/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.2;">,topic_name="rq/topological_navigation_core/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.589998 [0] dq.builtin: => EVERYONE -1711462090.590008 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 312 from udp/10.101.12.71:52025 -1711462090.590011 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:b04) scanning all wrs of topic rq/topological_navigation_core/get_parametersRequest -1711462090.590011 [0] recvMC: INFOTS(1711462090.589932268) -1711462090.590020 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #5 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.590022 [0] recvMC: HEARTBEAT(F#8:5..5 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.590284 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 336 from udp/10.101.12.71:52025 -1711462090.590291 [0] recv: INFOTS(1711462090.590253167) -1711462090.590298 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #6 L(:1c1 16938.249794)) -1711462090.590310 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #6: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.3;">,topic_name="rr/topological_navigation_core/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.590329 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:c03 reliable volatile writer unnamed: (default).rr/topological_navigation_core/get_parameter_typesReply/rcl_interfaces::srv::dds_::GetParameterTypes_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.3;">,topic_name="rr/topological_navigation_core/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.590338 [0] dq.builtin: => EVERYONE -1711462090.590346 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:c03) scanning all rds of topic rr/topological_navigation_core/get_parameter_typesReply -1711462090.590371 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 332 from udp/10.101.12.71:52025 -1711462090.590377 [0] recv: INFOTS(1711462090.590339038) -1711462090.590386 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #4 L(:1c1 16938.249880)) -1711462090.590397 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #4: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.3;">,topic_name="rq/topological_navigation_core/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:d04},adlink_entity_factory=1} -1711462090.590413 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:d04 reliable volatile reader unnamed: (default).rq/topological_navigation_core/get_parameter_typesRequest/rcl_interfaces::srv::dds_::GetParameterTypes_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.3;">,topic_name="rq/topological_navigation_core/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.590422 [0] dq.builtin: => EVERYONE -1711462090.590434 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:d04) scanning all wrs of topic rq/topological_navigation_core/get_parameter_typesRequest -1711462090.590437 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 360 from udp/10.101.12.71:52025 -1711462090.590440 [0] recvMC: INFOTS(1711462090.590361377) -1711462090.590442 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #6 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.590445 [0] recvMC: HEARTBEAT(F#9:6..6 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.590766 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 328 from udp/10.101.12.71:52025 -1711462090.590774 [0] recv: INFOTS(1711462090.590733363) -1711462090.590781 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #7 L(:1c1 16938.250278)) -1711462090.590798 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #7: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.4;">,topic_name="rr/topological_navigation_core/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.590815 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:e03 reliable volatile writer unnamed: (default).rr/topological_navigation_core/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.4;">,topic_name="rr/topological_navigation_core/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.590825 [0] dq.builtin: => EVERYONE -1711462090.590833 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:e03) scanning all rds of topic rr/topological_navigation_core/list_parametersReply -1711462090.590839 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 324 from udp/10.101.12.71:52025 -1711462090.590845 [0] recv: INFOTS(1711462090.590809109) -1711462090.590851 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #5 L(:1c1 16938.250348)) -1711462090.590862 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #5: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.4;">,topic_name="rq/topological_navigation_core/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:f04},adlink_entity_factory=1} -1711462090.590878 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:f04 reliable volatile reader unnamed: (default).rq/topological_navigation_core/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.4;">,topic_name="rq/topological_navigation_core/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.590886 [0] dq.builtin: => EVERYONE -1711462090.590899 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:f04) scanning all wrs of topic rq/topological_navigation_core/list_parametersRequest -1711462090.590916 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 408 from udp/10.101.12.71:52025 -1711462090.590918 [0] recvMC: INFOTS(1711462090.590832188) -1711462090.590920 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #7 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.590923 [0] recvMC: HEARTBEAT(F#10:7..7 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.591254 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 328 from udp/10.101.12.71:52025 -1711462090.591261 [0] recv: INFOTS(1711462090.591221553) -1711462090.591267 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #8 L(:1c1 16938.250764)) -1711462090.591280 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #8: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.5;">,topic_name="rr/topological_navigation_core/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.591297 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1003 reliable volatile writer unnamed: (default).rr/topological_navigation_core/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.5;">,topic_name="rr/topological_navigation_core/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.591306 [0] dq.builtin: => EVERYONE -1711462090.591314 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:1003) scanning all rds of topic rr/topological_navigation_core/set_parametersReply -1711462090.591340 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 324 from udp/10.101.12.71:52025 -1711462090.591346 [0] recv: INFOTS(1711462090.591307020) -1711462090.591352 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #6 L(:1c1 16938.250849)) -1711462090.591385 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #6: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.5;">,topic_name="rq/topological_navigation_core/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1104},adlink_entity_factory=1} -1711462090.591399 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1104 reliable volatile reader unnamed: (default).rq/topological_navigation_core/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.5;">,topic_name="rq/topological_navigation_core/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.591406 [0] dq.builtin: => EVERYONE -1711462090.591415 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 456 from udp/10.101.12.71:52025 -1711462090.591422 [0] recvMC: INFOTS(1711462090.591332052) -1711462090.591418 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:1104) scanning all wrs of topic rq/topological_navigation_core/set_parametersRequest -1711462090.591428 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #8 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.591439 [0] recvMC: HEARTBEAT(F#11:8..8 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.591650 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 352 from udp/10.101.12.71:52025 -1711462090.591653 [0] recv: INFOTS(1711462090.591617144) -1711462090.591659 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #9 L(:1c1 16938.251156)) -1711462090.591673 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #9: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.6;">,topic_name="rr/topological_navigation_core/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.591693 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1203 reliable volatile writer unnamed: (default).rr/topological_navigation_core/set_parameters_atomicallyReply/rcl_interfaces::srv::dds_::SetParametersAtomically_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.6;">,topic_name="rr/topological_navigation_core/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.591698 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 340 from udp/10.101.12.71:52025 -1711462090.591700 [0] dq.builtin: => EVERYONE -1711462090.591701 [0] recv: INFOTS(1711462090.591678024) -1711462090.591708 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #7 L(:1c1 16938.251205)) -1711462090.591709 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:1203) scanning all rds of topic rr/topological_navigation_core/set_parameters_atomicallyReply -1711462090.591718 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #7: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.6;">,topic_name="rq/topological_navigation_core/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1304},adlink_entity_factory=1} -1711462090.591729 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1304 reliable volatile reader unnamed: (default).rq/topological_navigation_core/set_parameters_atomicallyRequest/rcl_interfaces::srv::dds_::SetParametersAtomically_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.6;">,topic_name="rq/topological_navigation_core/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.591743 [0] dq.builtin: => EVERYONE -1711462090.591747 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:1304) scanning all wrs of topic rq/topological_navigation_core/set_parameters_atomicallyRequest -1711462090.591774 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 504 from udp/10.101.12.71:52025 -1711462090.591778 [0] recvMC: INFOTS(1711462090.591692230) -1711462090.591781 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #9 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.591786 [0] recvMC: HEARTBEAT(F#12:9..9 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.591919 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 316 from udp/10.101.12.71:52025 -1711462090.591922 [0] recv: INFOTS(1711462090.591900460) -1711462090.591925 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #10 L(:1c1 16938.251426)) -1711462090.591932 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #10: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.7;">,topic_name="rq/controller_server/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.591941 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1403 reliable volatile writer unnamed: (default).rq/controller_server/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.7;">,topic_name="rq/controller_server/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.591946 [0] dq.builtin: => EVERYONE -1711462090.591951 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:1403) scanning all rds of topic rq/controller_server/set_parametersRequest -1711462090.591985 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 308 from udp/10.101.12.71:52025 -1711462090.591992 [0] recv: INFOTS(1711462090.591954823) -1711462090.591996 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #8 L(:1c1 16938.251496)) -1711462090.592004 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #8: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.7;">,topic_name="rr/controller_server/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1504},adlink_entity_factory=1} -1711462090.592012 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1504 reliable volatile reader unnamed: (default).rr/controller_server/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.7;">,topic_name="rr/controller_server/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.592022 [0] dq.builtin: => EVERYONE -1711462090.592026 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:1504) scanning all wrs of topic rr/controller_server/set_parametersReply -1711462090.592046 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 552 from udp/10.101.12.71:52025 -1711462090.592050 [0] recvMC: INFOTS(1711462090.591969903) -1711462090.592053 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #10 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.592058 [0] recvMC: HEARTBEAT(F#13:10..10 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.592175 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 316 from udp/10.101.12.71:52025 -1711462090.592178 [0] recv: INFOTS(1711462090.592154676) -1711462090.592183 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #11 L(:1c1 16938.251682)) -1711462090.592190 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #11: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.8;">,topic_name="rq/controller_server/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.592199 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1603 reliable volatile writer unnamed: (default).rq/controller_server/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.8;">,topic_name="rq/controller_server/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.592203 [0] dq.builtin: => EVERYONE -1711462090.592208 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:1603) scanning all rds of topic rq/controller_server/list_parametersRequest -1711462090.592227 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 308 from udp/10.101.12.71:52025 -1711462090.592230 [0] recv: INFOTS(1711462090.592204340) -1711462090.592235 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #9 L(:1c1 16938.251734)) -1711462090.592243 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #9: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.8;">,topic_name="rr/controller_server/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1704},adlink_entity_factory=1} -1711462090.592251 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1704 reliable volatile reader unnamed: (default).rr/controller_server/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.8;">,topic_name="rr/controller_server/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.592260 [0] dq.builtin: => EVERYONE -1711462090.592264 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:1704) scanning all wrs of topic rr/controller_server/list_parametersReply -1711462090.592290 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 600 from udp/10.101.12.71:52025 -1711462090.592295 [0] recvMC: INFOTS(1711462090.592217036) -1711462090.592300 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #11 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.592304 [0] recvMC: HEARTBEAT(F#14:11..11 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.592425 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 316 from udp/10.101.12.71:52025 -1711462090.592428 [0] recv: INFOTS(1711462090.592403130) -1711462090.592433 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #12 L(:1c1 16938.251932)) -1711462090.592440 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #12: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.9;">,topic_name="rq/controller_server/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.592450 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1803 reliable volatile writer unnamed: (default).rq/controller_server/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.9;">,topic_name="rq/controller_server/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.592454 [0] dq.builtin: => EVERYONE -1711462090.592459 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:1803) scanning all rds of topic rq/controller_server/get_parametersRequest -1711462090.592475 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 308 from udp/10.101.12.71:52025 -1711462090.592478 [0] recv: INFOTS(1711462090.592455025) -1711462090.592483 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #10 L(:1c1 16938.251982)) -1711462090.592490 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #10: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.9;">,topic_name="rr/controller_server/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1904},adlink_entity_factory=1} -1711462090.592559 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 648 from udp/10.101.12.71:52025 -1711462090.592568 [0] recvMC: INFOTS(1711462090.592467231) -1711462090.592563 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1904 reliable volatile reader unnamed: (default).rr/controller_server/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.9;">,topic_name="rr/controller_server/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.592586 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #12 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.592596 [0] recvMC: HEARTBEAT(F#15:12..12 110aba1:7b19badd:ce0adb73:403? -> 0:0:0:0) -1711462090.592597 [0] dq.builtin: => EVERYONE -1711462090.592606 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:1904) scanning all wrs of topic rr/controller_server/get_parametersReply -1711462090.597380 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.597395 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462090.597403 [0] recvUC: ACKNACK(#0:1/0: 110aba1:7b19badd:ce0adb73:504? -> 110cd0d:56a27910:57318171:403) -1711462090.598416 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.598431 [0] recvUC: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.598438 [0] recvUC: ACKNACK(#0:1/0: 110aba1:7b19badd:ce0adb73:504? -> 110cd0d:e3b81b8d:1ccb65b1:403) -1711462090.598970 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.598995 [0] recvUC: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.599001 [0] recvUC: ACKNACK(#0:1/0: 110aba1:7b19badd:ce0adb73:504? -> 110cd0d:79d6eeac:ea4a8907:403) -1711462090.619793 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 444 from udp/10.101.12.71:58212 -1711462090.619823 [0] recv: INFOTS(1711462090.519442682) -1711462090.619845 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #1) -1711462090.619865 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 444 from udp/10.101.12.71:58212 -1711462090.619877 [0] recv: INFOTS(1711462090.519442682) -1711462090.619888 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #1) -1711462090.619940 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.619975 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16938.279476) -1711462090.619997 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.620019 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16938.279522) -1711462090.642272 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 444 from udp/10.101.12.71:40473 -1711462090.642301 [0] recv: INFOTS(1711462090.541682763) -1711462090.642319 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 0:0:0:0 #1) -1711462090.642337 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 444 from udp/10.101.12.71:40473 -1711462090.642353 [0] recv: INFOTS(1711462090.541682763) -1711462090.642364 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 0:0:0:0 #1) -1711462090.642387 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.642407 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16938.301909) -1711462090.642424 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.642431 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16938.301934) -1711462090.649692 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 444 from udp/10.101.12.71:44991 -1711462090.649726 [0] recv: INFOTS(1711462090.549308855) -1711462090.649746 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #1) -1711462090.649758 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 444 from udp/10.101.12.71:44991 -1711462090.649767 [0] recv: INFOTS(1711462090.549308855) -1711462090.649778 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #1) -1711462090.649807 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.649818 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16938.309321) -1711462090.649839 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.649854 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16938.309357) -1711462090.653403 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:403) suppressed, resched in inf s (min-ack 12, avail-seq 12, xmit 12) -1711462090.653437 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:403) suppressed, resched in inf s (min-ack 13, avail-seq 13, xmit 13) -1711462090.653584 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:403) suppressed, resched in inf s (min-ack 13, avail-seq 13, xmit 13) -1711462090.670768 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462090.670793 [0] recv: INFOTS(1711462090.570393375) -1711462090.670818 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462090.670831 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462090.670839 [0] recv: INFOTS(1711462090.570393375) -1711462090.670845 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.670860 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (known) L(:1c1 16938.330362) -1711462090.670848 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462090.670874 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462090.670882 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (known) L(:1c1 16938.330385) -1711462090.670875 [0] recv: thread_cputime 0.046884000 -1711462090.671961 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 84 from udp/10.101.12.71:58212 -1711462090.671977 [0] tev: thread_cputime 0.010776000 -1711462090.672006 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:3c2) suppressed, resched in inf s (min-ack 9, avail-seq 9, xmit 9) -1711462090.672010 [0] recv: HEARTBEAT(#9:1..10 L(:1c1 16938.331485)110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:3c7@10(sync) 110cd0d:e3b81b8d:1ccb65b1:3c7@10(sync) 110cd0d:79d6eeac:ea4a8907:3c7@10(sync)) -1711462090.672023 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:3c2) suppressed, resched in inf s (min-ack 10, avail-seq 9, xmit 10) -1711462090.672067 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#3:11/0: -1711462090.672075 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462090.672089 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f770 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.672100 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#13:11/0: -1711462090.672107 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462090.672042 [0] recv: HEARTBEAT(#9:1..8 110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:4c7@8(sync) 110cd0d:e3b81b8d:1ccb65b1:4c7@8(sync) 110cd0d:79d6eeac:ea4a8907:4c7@8(sync)) -1711462090.672130 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e570 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.672168 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 68 from udp/10.101.12.71:58212 -1711462090.672183 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.672171 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#7:11/0: -1711462090.672217 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462090.672229 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ee70 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.672203 [0] recv: HEARTBEAT(#9:1..1 L(:1c1 16938.331684)110e21c:d0762c48:a9f0fb28:200c2 -> 110cd0d:79d6eeac:ea4a8907:0: 110cd0d:79d6eeac:ea4a8907:200c7@1(sync)) -1711462090.672243 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:3c2) suppressed, resched in inf s (min-ack 10, avail-seq 9, xmit 10) -1711462090.672254 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#6:9/0: -1711462090.672263 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462090.672264 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462090.672293 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e6f0 0(control): niov 6 sz 168 => now niov 7 sz 196 -1711462090.672285 [0] recv: HEARTBEAT(#7:1..10 L(:1c1 16938.331779)110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:3c7@10(sync) 110cd0d:e3b81b8d:1ccb65b1:3c7@10(sync) 110cd0d:79d6eeac:ea4a8907:3c7@10(sync)) -1711462090.672327 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462090.672346 [0] recv: HEARTBEAT(#5:1..0 L(:1c1 16938.331842)110e21c:d0762c48:a9f0fb28:300c3 -> 0:0:0:0: 110cd0d:56a27910:57318171:300c4@0(sync) 110cd0d:e3b81b8d:1ccb65b1:300c4@0(sync) 110cd0d:79d6eeac:ea4a8907:300c4@0(sync)) -1711462090.672305 [0] tev: acknack 110cd0d:56a27910:57318171:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#3:9/0: -1711462090.672360 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462090.672373 [0] recv: HEARTBEAT(#7:1..7 L(:1c1 16938.331871)110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:4c7@7(sync) 110cd0d:e3b81b8d:1ccb65b1:4c7@7(sync) 110cd0d:79d6eeac:ea4a8907:4c7@7(sync)) -1711462090.672388 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462090.672407 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462090.672425 [0] recv: HEARTBEAT(#8:1..42 L(:1c1 16938.331920)110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:3c7@42(sync) 110cd0d:e3b81b8d:1ccb65b1:3c7@42(sync) 110cd0d:79d6eeac:ea4a8907:3c7@42(sync)) -1711462090.672451 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400eff0 0(control): niov 7 sz 196 => now niov 9 sz 248 -1711462090.672482 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#11:9/0: -1711462090.672487 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462090.672516 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f2f0 0(control): niov 9 sz 248 => now niov 11 sz 300 -1711462090.672528 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:4c2) suppressed, resched in inf s (min-ack 10, avail-seq 10, xmit 10) -1711462090.672516 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462090.672538 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:200c7 -> 110e21c:d0762c48:a9f0fb28:200c2: F#6:2/0: -1711462090.672554 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:200c7 -> pwr 110e21c:d0762c48:a9f0fb28:200c2) -1711462090.672558 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f470 0(control): niov 11 sz 300 => now niov 13 sz 352 -1711462090.672564 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#7:11/0: -1711462090.672568 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462090.672588 [0] recv: HEARTBEAT(#5:1..0 L(:1c1 16938.332051)110e21c:d0762c48:a9f0fb28:301c3 -> 0:0:0:0: 110cd0d:56a27910:57318171:301c4@0(sync) 110cd0d:e3b81b8d:1ccb65b1:301c4@0(sync) 110cd0d:79d6eeac:ea4a8907:301c4@0(sync)) -1711462090.672607 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462090.672616 [0] recv: HEARTBEAT(#7:1..1 L(:1c1 16938.332115)110443d:bb7f10a5:18901533:200c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:200c7@1(sync) 110cd0d:e3b81b8d:1ccb65b1:200c7@1(sync) 110cd0d:79d6eeac:ea4a8907:200c7@1(sync)) -1711462090.672623 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462090.672634 [0] recv: HEARTBEAT(#8:1..40 L(:1c1 16938.332134)110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:4c7@40(sync) 110cd0d:e3b81b8d:1ccb65b1:4c7@40(sync) 110cd0d:79d6eeac:ea4a8907:4c7@40(sync)) -1711462090.672640 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462090.672651 [0] recv: HEARTBEAT(#3:1..0 L(:1c1 16938.332149)110443d:bb7f10a5:18901533:300c3 -> 0:0:0:0: 110cd0d:56a27910:57318171:300c4@0(sync) 110cd0d:e3b81b8d:1ccb65b1:300c4@0(sync) 110cd0d:79d6eeac:ea4a8907:300c4@0(sync)) -1711462090.672593 [0] tev: nn_xpack_send 352: 0x7408c000139c:20 0x7408c400f858:44 0x7408c400e640:24 0x7408c400e668:28 0x7408c400ef40:24 0x7408c400ef68:28 0x7408c400e7e8:28 0x7408c400f0c0:24 0x7408c400f0e8:28 0x7408c400f3c0:24 0x7408c400f3e8:28 0x7408c400f540:24 0x7408c400f568:28 [ udp/10.101.12.71:7412@2 ] -1711462090.672683 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462090.672708 [0] tev: traffic-xmit (1) 352 -1711462090.672723 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f5f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.672740 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#3:11/0: -1711462090.672748 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462090.672756 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f770 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.672714 [0] recv: HEARTBEAT(#3:1..0 L(:1c1 16938.332214)110443d:bb7f10a5:18901533:301c3 -> 0:0:0:0: 110cd0d:56a27910:57318171:301c4@0(sync) 110cd0d:e3b81b8d:1ccb65b1:301c4@0(sync) 110cd0d:79d6eeac:ea4a8907:301c4@0(sync)) -1711462090.672769 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#13:11/0: -1711462090.672792 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462090.672799 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e570 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.672812 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:4c2) suppressed, resched in inf s (min-ack 10, avail-seq 10, xmit 10) -1711462090.672827 [0] tev: acknack 110cd0d:56a27910:57318171:300c4 -> 110e21c:d0762c48:a9f0fb28:300c3: F#2:1/0: -1711462090.672845 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:300c4 -> pwr 110e21c:d0762c48:a9f0fb28:300c3) -1711462090.672880 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c400f6d8:44 0x7408c400f840:24 0x7408c400f868:28 0x7408c400e640:24 0x7408c400e668:28 [ udp/10.101.12.71:7416@2 ] -1711462090.672890 [0] tev: traffic-xmit (1) 168 -1711462090.672898 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ee70 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.672908 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:300c4 -> 110e21c:d0762c48:a9f0fb28:300c3: F#6:1/0: -1711462090.672915 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:300c4 -> pwr 110e21c:d0762c48:a9f0fb28:300c3) -1711462090.672922 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f5f0 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.672931 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:300c4 -> 110e21c:d0762c48:a9f0fb28:300c3: F#4:1/0: -1711462090.672937 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:300c4 -> pwr 110e21c:d0762c48:a9f0fb28:300c3) -1711462090.672945 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f770 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.672955 [0] tev: acknack 110cd0d:56a27910:57318171:4c7 -> 110443d:bb7f10a5:18901533:4c2: F#3:8/0: -1711462090.672961 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:4c7 -> pwr 110443d:bb7f10a5:18901533:4c2) -1711462090.672979 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c400ef58:44 0x7408c400f6c0:24 0x7408c400f6e8:28 0x7408c400f840:24 0x7408c400f868:28 [ udp/10.101.12.71:7412@2 ] -1711462090.672987 [0] tev: traffic-xmit (1) 168 -1711462090.672994 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e570 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.673002 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110443d:bb7f10a5:18901533:4c2: F#11:8/0: -1711462090.673009 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:4c7 -> pwr 110443d:bb7f10a5:18901533:4c2) -1711462090.673016 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ee70 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.673026 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:4c7 -> 110443d:bb7f10a5:18901533:4c2: F#6:8/0: -1711462090.673032 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:4c7 -> pwr 110443d:bb7f10a5:18901533:4c2) -1711462090.673038 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f5f0 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.673049 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:4c2) suppressed, resched in inf s (min-ack 10, avail-seq 10, xmit 10) -1711462090.673058 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#3:43/0: -1711462090.673065 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462090.673083 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c400e658:44 0x7408c400ef40:24 0x7408c400ef68:28 0x7408c400f6c0:24 0x7408c400f6e8:28 [ udp/10.101.12.71:7416@2 ] -1711462090.673090 [0] tev: traffic-xmit (1) 168 -1711462090.673097 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f770 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.673106 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#13:43/0: -1711462090.673113 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462090.673119 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e570 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.673127 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#7:43/0: -1711462090.673134 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462090.673142 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ee70 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.673151 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:301c4 -> 110e21c:d0762c48:a9f0fb28:301c3: F#6:1/0: -1711462090.673164 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:301c4 -> pwr 110e21c:d0762c48:a9f0fb28:301c3) -1711462090.673182 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c400f858:44 0x7408c400e640:24 0x7408c400e668:28 0x7408c400ef40:24 0x7408c400ef68:28 [ udp/10.101.12.71:7414@2 ] -1711462090.673189 [0] tev: traffic-xmit (1) 168 -1711462090.673195 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f5f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.673204 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:301c4 -> 110e21c:d0762c48:a9f0fb28:301c3: F#4:1/0: -1711462090.673210 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:301c4 -> pwr 110e21c:d0762c48:a9f0fb28:301c3) -1711462090.673216 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f770 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.673225 [0] tev: acknack 110cd0d:56a27910:57318171:301c4 -> 110e21c:d0762c48:a9f0fb28:301c3: F#2:1/0: -1711462090.673231 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:301c4 -> pwr 110e21c:d0762c48:a9f0fb28:301c3) -1711462090.673237 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e570 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.673248 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:200c7 -> 110443d:bb7f10a5:18901533:200c2: F#8:2/0: -1711462090.673255 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:200c7 -> pwr 110443d:bb7f10a5:18901533:200c2) -1711462090.673271 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c400f6d8:44 0x7408c400f840:24 0x7408c400f868:28 0x7408c400e640:24 0x7408c400e668:28 [ udp/10.101.12.71:7412@2 ] -1711462090.673277 [0] tev: traffic-xmit (1) 168 -1711462090.673285 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ee70 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.673293 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:200c7 -> 110443d:bb7f10a5:18901533:200c2: F#6:2/0: -1711462090.673300 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:200c7 -> pwr 110443d:bb7f10a5:18901533:200c2) -1711462090.673307 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f5f0 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.673315 [0] tev: acknack 110cd0d:56a27910:57318171:200c7 -> 110443d:bb7f10a5:18901533:200c2: F#3:2/0: -1711462090.673321 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:200c7 -> pwr 110443d:bb7f10a5:18901533:200c2) -1711462090.673328 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f770 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.673338 [0] tev: acknack 110cd0d:56a27910:57318171:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2: F#3:41/0: -1711462090.673344 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:4c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462090.673359 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c400ef58:44 0x7408c400f6c0:24 0x7408c400f6e8:28 0x7408c400f840:24 0x7408c400f868:28 [ udp/10.101.12.71:7416@2 ] -1711462090.673367 [0] tev: traffic-xmit (1) 168 -1711462090.673374 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e570 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.673382 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2: F#6:41/0: -1711462090.673388 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:4c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462090.673396 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ee70 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.673405 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2: F#11:41/0: -1711462090.673412 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:4c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462090.673419 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f5f0 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.673428 [0] tev: acknack 110cd0d:56a27910:57318171:300c4 -> 110443d:bb7f10a5:18901533:300c3: F#2:1/0: -1711462090.673434 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:300c4 -> pwr 110443d:bb7f10a5:18901533:300c3) -1711462090.673459 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c400e658:44 0x7408c400ef40:24 0x7408c400ef68:28 0x7408c400f6c0:24 0x7408c400f6e8:28 [ udp/10.101.12.71:7414@2 ] -1711462090.673466 [0] tev: traffic-xmit (1) 168 -1711462090.673473 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f770 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.673481 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:300c4 -> 110443d:bb7f10a5:18901533:300c3: F#6:1/0: -1711462090.673488 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:300c4 -> pwr 110443d:bb7f10a5:18901533:300c3) -1711462090.673495 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e570 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.673503 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:300c4 -> 110443d:bb7f10a5:18901533:300c3: F#4:1/0: -1711462090.673508 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:300c4 -> pwr 110443d:bb7f10a5:18901533:300c3) -1711462090.673514 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ee70 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.673522 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:200c2) suppressed, resched in inf s (min-ack 1, avail-seq 1, xmit 1) -1711462090.673531 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:200c2) suppressed, resched in inf s (min-ack 3, avail-seq 3, xmit 3) -1711462090.673540 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:301c4 -> 110443d:bb7f10a5:18901533:301c3: F#4:1/0: -1711462090.673549 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:301c4 -> pwr 110443d:bb7f10a5:18901533:301c3) -1711462090.673555 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f5f0 0(control): niov 6 sz 168 => now niov 7 sz 196 -1711462090.673564 [0] tev: acknack 110cd0d:56a27910:57318171:301c4 -> 110443d:bb7f10a5:18901533:301c3: F#2:1/0: -1711462090.673569 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:301c4 -> pwr 110443d:bb7f10a5:18901533:301c3) -1711462090.673575 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e6f0 0(control): niov 7 sz 196 => now niov 9 sz 248 -1711462090.673582 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:301c4 -> 110443d:bb7f10a5:18901533:301c3: F#6:1/0: -1711462090.673588 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:301c4 -> pwr 110443d:bb7f10a5:18901533:301c3) -1711462090.673593 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400eff0 0(control): niov 9 sz 248 => now niov 11 sz 300 -1711462090.673601 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:200c2) suppressed, resched in inf s (min-ack 3, avail-seq 3, xmit 3) -1711462090.673610 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:300c3) suppressed, resched in inf s (min-ack 0, avail-seq 0, xmit 0) -1711462090.673618 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:300c3) suppressed, resched in inf s (min-ack 0, avail-seq 0, xmit 0) -1711462090.673625 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:300c3) suppressed, resched in inf s (min-ack 0, avail-seq 0, xmit 0) -1711462090.673633 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:301c3) suppressed, resched in inf s (min-ack 0, avail-seq 0, xmit 0) -1711462090.673640 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:301c3) suppressed, resched in inf s (min-ack 0, avail-seq 0, xmit 0) -1711462090.673661 [0] tev: nn_xpack_send 300: 0x7408c000139c:20 0x7408c400f858:44 0x7408c400e640:24 0x7408c400e668:28 0x7408c400ef40:24 0x7408c400ef68:28 0x7408c400f6e8:28 0x7408c400e7c0:24 0x7408c400e7e8:28 0x7408c400f0c0:24 0x7408c400f0e8:28 [ udp/10.101.12.71:7416@2 ] -1711462090.673668 [0] tev: traffic-xmit (1) 300 -1711462090.673679 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:301c3) suppressed, resched in inf s (min-ack 0, avail-seq 0, xmit 0) -1711462090.674357 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 116 from udp/10.101.12.71:52025 -1711462090.674378 [0] recv: HEARTBEAT(#5:1..12 L(:1c1 16938.333868)110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:3c7@0 110cd0d:e3b81b8d:1ccb65b1:3c7@12(sync) 110cd0d:79d6eeac:ea4a8907:3c7@12(sync)) -1711462090.674389 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462090.674407 [0] recv: HEARTBEAT(#5:1..10 110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:4c7@0 110cd0d:e3b81b8d:1ccb65b1:4c7@10(sync) 110cd0d:79d6eeac:ea4a8907:4c7@10(sync)) -1711462090.674461 [0] recv: HEARTBEAT(#5:1..1 110aba1:7b19badd:ce0adb73:200c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:200c7@1(sync) 110cd0d:e3b81b8d:1ccb65b1:200c7@1(sync) 110cd0d:79d6eeac:ea4a8907:200c7@1(sync)) -1711462090.674461 [0] recvMC: HEARTBEAT(#18:11..11 L(:1c1 16938.333937)110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@11(sync) 110cd0d:e3b81b8d:1ccb65b1:504@11(sync) 110cd0d:79d6eeac:ea4a8907:504@11(sync)) -1711462090.674485 [0] recvMC: thread_cputime 0.010238000 -1711462090.674502 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 84 from udp/10.101.12.71:52025 -1711462090.674469 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110aba1:7b19badd:ce0adb73:3c2: F#2:1/12:110000000000 -1711462090.674521 [0] recv: HEARTBEAT(#2:1..0 L(:1c1 16938.334017)110aba1:7b19badd:ce0adb73:300c3 -> 0:0:0:0: 110cd0d:56a27910:57318171:300c4@0(sync) 110cd0d:e3b81b8d:1ccb65b1:300c4@0(sync) 110cd0d:79d6eeac:ea4a8907:300c4@0(sync)) -1711462090.674545 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110aba1:7b19badd:ce0adb73:3c2) -1711462090.674557 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f770 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.674566 [0] recv: HEARTBEAT(#2:1..0 110aba1:7b19badd:ce0adb73:301c3 -> 0:0:0:0: 110cd0d:56a27910:57318171:301c4@0(sync) 110cd0d:e3b81b8d:1ccb65b1:301c4@0(sync) 110cd0d:79d6eeac:ea4a8907:301c4@0(sync)) -1711462090.674505 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462090.674607 [0] recvMC: HEARTBEAT(#18:10..10 L(:1c1 16938.334102)110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@10(sync) 110cd0d:e3b81b8d:1ccb65b1:504@10(sync) 110cd0d:79d6eeac:ea4a8907:504@10(sync)) -1711462090.674574 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110aba1:7b19badd:ce0adb73:3c2: F#13:13/0: -1711462090.674672 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:3c7 -> pwr 110aba1:7b19badd:ce0adb73:3c2) -1711462090.674684 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e570 0(control): niov 2 sz 68 => now niov 4 sz 120 -1711462090.674699 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:3c7 -> 110aba1:7b19badd:ce0adb73:3c2: F#7:13/0: -1711462090.674707 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:3c7 -> pwr 110aba1:7b19badd:ce0adb73:3c2) -1711462090.674718 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ee70 0(control): niov 4 sz 120 => now niov 6 sz 172 -1711462090.674732 [0] tev: acknack 110cd0d:56a27910:57318171:4c7 -> 110aba1:7b19badd:ce0adb73:4c2: F#2:1/10:1000000000 -1711462090.674740 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:4c7 -> pwr 110aba1:7b19badd:ce0adb73:4c2) -1711462090.674749 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f5f0 0(control): niov 6 sz 172 => now niov 8 sz 228 -1711462090.674761 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110aba1:7b19badd:ce0adb73:4c2: F#11:11/0: -1711462090.674808 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:4c7 -> pwr 110aba1:7b19badd:ce0adb73:4c2) -1711462090.674816 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e6f0 0(control): niov 8 sz 228 => now niov 10 sz 280 -1711462090.674831 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:4c7 -> 110aba1:7b19badd:ce0adb73:4c2: F#6:11/0: -1711462090.674839 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:4c7 -> pwr 110aba1:7b19badd:ce0adb73:4c2) -1711462090.674848 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400eff0 0(control): niov 10 sz 280 => now niov 12 sz 332 -1711462090.674858 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110e21c:d0762c48:a9f0fb28:403: F#4:12/0: -1711462090.674876 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110e21c:d0762c48:a9f0fb28:403) -1711462090.674919 [0] tev: nn_xpack_send 332: 0x7408c000139c:20 0x7408c400f858:48 0x7408c400e640:24 0x7408c400e668:28 0x7408c400ef40:24 0x7408c400ef68:28 0x7408c400f6c0:24 0x7408c400f6e8:32 0x7408c400e7c0:24 0x7408c400e7e8:28 0x7408c400f0c0:24 0x7408c400f0e8:28 [ udp/10.101.12.71:7418@2 ] -1711462090.674930 [0] tev: traffic-xmit (1) 332 -1711462090.674939 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f2f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.674950 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110e21c:d0762c48:a9f0fb28:403: F#18:12/0: -1711462090.674956 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110e21c:d0762c48:a9f0fb28:403) -1711462090.674964 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f770 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.674974 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110e21c:d0762c48:a9f0fb28:403: F#9:12/0: -1711462090.674980 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110e21c:d0762c48:a9f0fb28:403) -1711462090.674987 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e570 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.674996 [0] tev: acknack 110cd0d:56a27910:57318171:200c7 -> 110aba1:7b19badd:ce0adb73:200c2: F#2:2/0: -1711462090.675002 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:200c7 -> pwr 110aba1:7b19badd:ce0adb73:200c2) -1711462090.675022 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c400f3d8:44 0x7408c400f840:24 0x7408c400f868:28 0x7408c400e640:24 0x7408c400e668:28 [ udp/10.101.12.71:7413@2 ] -1711462090.675030 [0] tev: traffic-xmit (1) 168 -1711462090.675038 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ee70 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.675048 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:200c7 -> 110aba1:7b19badd:ce0adb73:200c2: F#8:2/0: -1711462090.675055 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:200c7 -> pwr 110aba1:7b19badd:ce0adb73:200c2) -1711462090.675062 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f2f0 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.675072 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:200c7 -> 110aba1:7b19badd:ce0adb73:200c2: F#6:2/0: -1711462090.675078 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:200c7 -> pwr 110aba1:7b19badd:ce0adb73:200c2) -1711462090.675085 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f770 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.675087 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 480 from udp/10.101.12.71:52025 -1711462090.675107 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462090.675116 [0] recv: INFOTS(1711462090.570840580) -1711462090.675096 [0] tev: acknack 110cd0d:56a27910:57318171:300c4 -> 110aba1:7b19badd:ce0adb73:300c3: F#2:1/0: -1711462090.675135 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:300c4 -> pwr 110aba1:7b19badd:ce0adb73:300c3) -1711462090.675141 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e570 0(control): niov 6 sz 168 => now niov 8 sz 220 -1711462090.675153 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:300c4 -> 110aba1:7b19badd:ce0adb73:300c3: F#6:1/0: -1711462090.675160 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:300c4 -> pwr 110aba1:7b19badd:ce0adb73:300c3) -1711462090.675143 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 110cd0d:56a27910:57318171:3c7 #1 L(:1c1 16938.334609)) -1711462090.675178 [0] recv: INFOTS(1711462090.571289169) -1711462090.675191 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 110cd0d:56a27910:57318171:3c7 #2 msr_in_sync(110cd0d:56a27910:57318171:3c7 out-of-sync to tlcatchup)) -1711462090.675205 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #1: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675206 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 280 from udp/10.101.12.71:52025 -1711462090.675238 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462090.675246 [0] recv: INFOTS(1711462090.570915636) -1711462090.675257 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 110cd0d:56a27910:57318171:4c7 #1 L(:1c1 16938.334740) msr_in_sync(110cd0d:56a27910:57318171:4c7 out-of-sync to tlcatchup)) -1711462090.675263 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:403 reliable transient-local writer unnamed: (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675269 [0] recv: HEARTBEAT(#6:1..12 110aba1:7b19badd:ce0adb73:3c2 -> 110cd0d:56a27910:57318171:3c7: 110cd0d:56a27910:57318171:3c7@12(sync)) -1711462090.675296 [0] dq.builtin: => EVERYONE -1711462090.675311 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 68 from udp/10.101.12.71:52025 -1711462090.675339 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462090.675346 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:403) scanning all rds of topic ros_discovery_info -1711462090.675351 [0] recv: HEARTBEAT(#6:1..10 L(:1c1 16938.334840)110aba1:7b19badd:ce0adb73:4c2 -> 110cd0d:56a27910:57318171:4c7: 110cd0d:56a27910:57318171:4c7@10(sync)) -1711462090.675365 [0] dq.builtin: reader 110cd0d:56a27910:57318171:504 init_acknack_count = 1 -1711462090.675374 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:403 rd 110cd0d:56a27910:57318171:504) -1711462090.675387 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:403 rd 110cd0d:56a27910:57318171:504) - out-of-sync -1711462090.675395 [0] dq.builtin: reader 110cd0d:e3b81b8d:1ccb65b1:504 init_acknack_count = 17 -1711462090.675401 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:403 rd 110cd0d:e3b81b8d:1ccb65b1:504) -1711462090.675409 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:403 rd 110cd0d:e3b81b8d:1ccb65b1:504) - out-of-sync -1711462090.675418 [0] dq.builtin: reader 110cd0d:79d6eeac:ea4a8907:504 init_acknack_count = 8 -1711462090.675425 [0] dq.builtin: reader_add_connection(pwr 110aba1:7b19badd:ce0adb73:403 rd 110cd0d:79d6eeac:ea4a8907:504) -1711462090.675167 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f5f0 0(control): niov 8 sz 220 => now niov 10 sz 272 -1711462090.675452 [0] dq.builtin: proxy_writer_add_connection(pwr 110aba1:7b19badd:ce0adb73:403 rd 110cd0d:79d6eeac:ea4a8907:504) - out-of-sync -1711462090.675458 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:300c4 -> 110aba1:7b19badd:ce0adb73:300c3: F#4:1/0: -1711462090.675466 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:300c4 -> pwr 110aba1:7b19badd:ce0adb73:300c3) -1711462090.675472 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400e6f0 0(control): niov 10 sz 272 => now niov 12 sz 324 -1711462090.675477 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #2: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/rosout",type_name="rcl_interfaces::msg::dds_::Log_",durability=1,durability_service=0:0:1000:-1:-1:-1,reliability=1:9223372036854775807,lifespan=10000000000,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675481 [0] tev: acknack 110cd0d:56a27910:57318171:301c4 -> 110aba1:7b19badd:ce0adb73:301c3: F#2:1/0: -1711462090.675505 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:301c4 -> pwr 110aba1:7b19badd:ce0adb73:301c3) -1711462090.675513 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400eff0 0(control): niov 12 sz 324 => now niov 14 sz 376 -1711462090.675517 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:603 reliable transient-local writer unnamed: (default).rt/rosout/rcl_interfaces::msg::dds_::Log_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=0<>,topic_name="rt/rosout",type_name="rcl_interfaces::msg::dds_::Log_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:1000:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=10000000000,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675521 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:301c4 -> 110aba1:7b19badd:ce0adb73:301c3: F#6:1/0: -1711462090.675529 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:301c4 -> pwr 110aba1:7b19badd:ce0adb73:301c3) -1711462090.675535 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f470 0(control): niov 14 sz 376 => now niov 16 sz 428 -1711462090.675539 [0] dq.builtin: => EVERYONE -1711462090.675543 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:301c4 -> 110aba1:7b19badd:ce0adb73:301c3: F#4:1/0: -1711462090.675551 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:301c4 -> pwr 110aba1:7b19badd:ce0adb73:301c3) -1711462090.675557 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110aba1:7b19badd:ce0adb73:603) scanning all rds of topic rt/rosout -1711462090.675557 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400eb70 0(control): niov 16 sz 428 => now niov 18 sz 480 -1711462090.675574 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #3: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:703},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675578 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110443d:bb7f10a5:18901533:403: F#3:11/0: -1711462090.675588 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462090.675583 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:703 reliable volatile writer unnamed: (default).rt/parameter_events/rcl_interfaces::msg::dds_::ParameterEvent_ p(open) known -1711462090.675615 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=0<>,topic_name="rt/parameter_events",type_name="rcl_interfaces::msg::dds_::ParameterEvent_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675619 [0] tev: nn_xpack_send 480: 0x7408c000139c:20 0x7408c400ef58:44 0x7408c400f3c0:24 0x7408c400f3e8:28 0x7408c400f840:24 0x7408c400f868:28 0x7408c400e640:24 0x7408c400e668:28 0x7408c400f6c0:24 0x7408c400f6e8:28 0x7408c400e7c0:24 0x7408c400e7e8:28 0x7408c400f0c0:24 0x7408c400f0e8:28 0x7408c400f540:24 0x7408c400f568:28 0x7408c400ec40:24 0x7408c400ec68:28 [ udp/10.101.12.71:7418@2 ] -1711462090.675638 [0] tev: traffic-xmit (1) 480 -1711462090.675631 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #4: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.1;">,topic_name="rr/topological_navigation_core/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675658 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:803 reliable volatile writer unnamed: (default).rr/topological_navigation_core/describe_parametersReply/rcl_interfaces::srv::dds_::DescribeParameters_Response_ p(open) known -1711462090.675647 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ecf0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.675676 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.1;">,topic_name="rr/topological_navigation_core/describe_parametersReply",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675685 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110443d:bb7f10a5:18901533:403: F#19:11/0: -1711462090.675696 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #5: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.2;">,topic_name="rr/topological_navigation_core/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:a03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675704 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462090.675716 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:a03 reliable volatile writer unnamed: (default).rr/topological_navigation_core/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_ p(open) known -1711462090.675719 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ee70 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.675734 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.2;">,topic_name="rr/topological_navigation_core/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675738 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110443d:bb7f10a5:18901533:403: F#10:11/0: -1711462090.675746 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #6: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.3;">,topic_name="rr/topological_navigation_core/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:c03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675747 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462090.675759 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:c03 reliable volatile writer unnamed: (default).rr/topological_navigation_core/get_parameter_typesReply/rcl_interfaces::srv::dds_::GetParameterTypes_Response_ p(open) known -1711462090.675773 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f2f0 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.675784 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110aba1:7b19badd:ce0adb73:3c2: F#3:13/0: -1711462090.675792 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110aba1:7b19badd:ce0adb73:3c2) -1711462090.675786 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.3;">,topic_name="rr/topological_navigation_core/get_parameter_typesReply",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675813 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #7: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.4;">,topic_name="rr/topological_navigation_core/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:e03},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675822 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:e03 reliable volatile writer unnamed: (default).rr/topological_navigation_core/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_ p(open) known -1711462090.675815 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c400edd8:44 0x7408c400ef40:24 0x7408c400ef68:28 0x7408c400f3c0:24 0x7408c400f3e8:28 [ udp/10.101.12.71:7417@2 ] -1711462090.675838 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.4;">,topic_name="rr/topological_navigation_core/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675839 [0] tev: traffic-xmit (1) 168 -1711462090.675850 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #8: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.5;">,topic_name="rr/topological_navigation_core/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1003},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675867 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1003 reliable volatile writer unnamed: (default).rr/topological_navigation_core/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_ p(open) known -1711462090.675858 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f770 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.675894 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.5;">,topic_name="rr/topological_navigation_core/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675898 [0] tev: acknack 110cd0d:56a27910:57318171:4c7 -> 110aba1:7b19badd:ce0adb73:4c2: F#3:11/0: -1711462090.675907 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:4c7 -> pwr 110aba1:7b19badd:ce0adb73:4c2) -1711462090.675913 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ecf0 0(control): niov 2 sz 64 => now niov 3 sz 92 -1711462090.675922 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #9: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.6;">,topic_name="rr/topological_navigation_core/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1203},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675930 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1203 reliable volatile writer unnamed: (default).rr/topological_navigation_core/set_parameters_atomicallyReply/rcl_interfaces::srv::dds_::SetParametersAtomically_Response_ p(open) known -1711462090.675930 [0] tev: nn_xpack_send 92: 0x7408c000139c:20 0x7408c400f858:44 0x7408c400ede8:28 [ udp/10.101.12.71:7418@2 ] -1711462090.675956 [0] tev: traffic-xmit (1) 92 -1711462090.675947 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.6;">,topic_name="rr/topological_navigation_core/set_parameters_atomicallyReply",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Response_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675977 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #10: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.7;">,topic_name="rq/controller_server/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1403},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.675984 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1403 reliable volatile writer unnamed: (default).rq/controller_server/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_ p(open) known -1711462090.675999 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.7;">,topic_name="rq/controller_server/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.676012 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #11: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.8;">,topic_name="rq/controller_server/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.676018 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1603 reliable volatile writer unnamed: (default).rq/controller_server/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_ p(open) known -1711462090.676033 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.8;">,topic_name="rq/controller_server/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.676043 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #12: ST0 DCPSPublication/PublicationBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.9;">,topic_name="rq/controller_server/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.676049 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1803 reliable volatile writer unnamed: (default).rq/controller_server/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_ p(open) known -1711462090.676063 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.9;">,topic_name="rq/controller_server/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462090.676073 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #1: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",durability=1,reliability=1:9223372036854775807,history=1:-1,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:504},adlink_entity_factory=1} -1711462090.676094 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:504 reliable transient-local reader unnamed: (default).ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=0<>,topic_name="ros_discovery_info",type_name="rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_",topic_data=0<>,group_data=0<>,durability=1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=1:-1,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.676109 [0] dq.builtin: => EVERYONE -1711462090.676122 [0] dq.builtin: match_proxy_reader_with_writers(prd 110aba1:7b19badd:ce0adb73:504) scanning all wrs of topic ros_discovery_info -1711462090.676132 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:56a27910:57318171:403 prd 110aba1:7b19badd:ce0adb73:504) -1711462090.676138 [0] dq.builtin: writer_add_connection(wr 110cd0d:56a27910:57318171:403 prd 110aba1:7b19badd:ce0adb73:504) - ack seq 12 -1711462090.676151 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7415@2 udp/10.101.12.71:7417@2 udp/10.101.12.71:7419@2 -1711462090.676157 [0] dq.builtin: reduced nlocs=5 -1711462090.676163 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.676168 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7413@2 0 -> 0 -1711462090.676173 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.676176 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.676181 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7417@2 2 -> 0 -1711462090.676185 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.676188 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.676193 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7419@2 3 -> 0 -1711462090.676197 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.676201 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.676205 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7415@2 1 -> 0 -1711462090.676209 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.676215 [0] dq.builtin: a b c d -1711462090.676222 [0] dq.builtin: loc 0 = udp/10.101.12.71:7413@2 1 { +u .. .. .. } -1711462090.676227 [0] dq.builtin: loc 1 = udp/10.101.12.71:7415@2 1 { .. .. .. +u } -1711462090.676232 [0] dq.builtin: loc 2 = udp/10.101.12.71:7417@2 1 { .. +u .. .. } -1711462090.676238 [0] dq.builtin: loc 3 = udp/10.101.12.71:7419@2 1 { .. .. +u .. } -1711462090.676244 [0] dq.builtin: loc 4 = udp/239.255.0.1:7401@2 -1 { +1 +1 +1 +1 } -1711462090.676248 [0] dq.builtin: best = 4 -1711462090.676252 [0] dq.builtin: simple udp/239.255.0.1:7401@2 -1711462090.676259 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462090.676268 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:e3b81b8d:1ccb65b1:403 prd 110aba1:7b19badd:ce0adb73:504) -1711462090.676272 [0] dq.builtin: writer_add_connection(wr 110cd0d:e3b81b8d:1ccb65b1:403 prd 110aba1:7b19badd:ce0adb73:504) - ack seq 13 -1711462090.676281 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7415@2 udp/10.101.12.71:7417@2 udp/10.101.12.71:7419@2 -1711462090.676286 [0] dq.builtin: reduced nlocs=5 -1711462090.676290 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.676294 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7413@2 0 -> 0 -1711462090.676298 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.676302 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.676306 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7417@2 2 -> 0 -1711462090.676310 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.676317 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.676321 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7419@2 3 -> 0 -1711462090.676325 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.676329 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.676333 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7415@2 1 -> 0 -1711462090.676337 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.676343 [0] dq.builtin: a b c d -1711462090.676348 [0] dq.builtin: loc 0 = udp/10.101.12.71:7413@2 1 { +u .. .. .. } -1711462090.676353 [0] dq.builtin: loc 1 = udp/10.101.12.71:7415@2 1 { .. .. .. +u } -1711462090.676358 [0] dq.builtin: loc 2 = udp/10.101.12.71:7417@2 1 { .. +u .. .. } -1711462090.676363 [0] dq.builtin: loc 3 = udp/10.101.12.71:7419@2 1 { .. .. +u .. } -1711462090.676368 [0] dq.builtin: loc 4 = udp/239.255.0.1:7401@2 -1 { +1 +1 +1 +1 } -1711462090.676372 [0] dq.builtin: best = 4 -1711462090.676375 [0] dq.builtin: simple udp/239.255.0.1:7401@2 -1711462090.676381 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462090.676387 [0] dq.builtin: proxy_reader_add_connection(wr 110cd0d:79d6eeac:ea4a8907:403 prd 110aba1:7b19badd:ce0adb73:504) -1711462090.676392 [0] dq.builtin: writer_add_connection(wr 110cd0d:79d6eeac:ea4a8907:403 prd 110aba1:7b19badd:ce0adb73:504) - ack seq 13 -1711462090.676401 [0] dq.builtin: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7415@2 udp/10.101.12.71:7417@2 udp/10.101.12.71:7419@2 -1711462090.676404 [0] dq.builtin: reduced nlocs=5 -1711462090.676408 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.676413 [0] dq.builtin: rdidx 0 lidx udp/10.101.12.71:7413@2 0 -> 0 -1711462090.676417 [0] dq.builtin: rdidx 0 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.676420 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.676424 [0] dq.builtin: rdidx 1 lidx udp/10.101.12.71:7417@2 2 -> 0 -1711462090.676429 [0] dq.builtin: rdidx 1 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.676433 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.676437 [0] dq.builtin: rdidx 2 lidx udp/10.101.12.71:7419@2 3 -> 0 -1711462090.676441 [0] dq.builtin: rdidx 2 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.676444 [0] dq.builtin: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462090.676449 [0] dq.builtin: rdidx 3 lidx udp/10.101.12.71:7415@2 1 -> 0 -1711462090.676453 [0] dq.builtin: rdidx 3 lidx udp/239.255.0.1:7401@2 4 -> 8 -1711462090.676457 [0] dq.builtin: a b c d -1711462090.676463 [0] dq.builtin: loc 0 = udp/10.101.12.71:7413@2 1 { +u .. .. .. } -1711462090.676467 [0] dq.builtin: loc 1 = udp/10.101.12.71:7415@2 1 { .. .. .. +u } -1711462090.676472 [0] dq.builtin: loc 2 = udp/10.101.12.71:7417@2 1 { .. +u .. .. } -1711462090.676477 [0] dq.builtin: loc 3 = udp/10.101.12.71:7419@2 1 { .. .. +u .. } -1711462090.676483 [0] dq.builtin: loc 4 = udp/239.255.0.1:7401@2 -1 { +1 +1 +1 +1 } -1711462090.676486 [0] dq.builtin: best = 4 -1711462090.676490 [0] dq.builtin: simple udp/239.255.0.1:7401@2 -1711462090.676510 [0] dq.builtin: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462090.676524 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #2: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.1;">,topic_name="rq/topological_navigation_core/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:904},adlink_entity_factory=1} -1711462090.676541 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:904 reliable volatile reader unnamed: (default).rq/topological_navigation_core/describe_parametersRequest/rcl_interfaces::srv::dds_::DescribeParameters_Request_ p(open) known -1711462090.676557 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.1;">,topic_name="rq/topological_navigation_core/describe_parametersRequest",type_name="rcl_interfaces::srv::dds_::DescribeParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.676570 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #3: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.2;">,topic_name="rq/topological_navigation_core/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:b04},adlink_entity_factory=1} -1711462090.676576 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:b04 reliable volatile reader unnamed: (default).rq/topological_navigation_core/get_parametersRequest/rcl_interfaces::srv::dds_::GetParameters_Request_ p(open) known -1711462090.676591 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.2;">,topic_name="rq/topological_navigation_core/get_parametersRequest",type_name="rcl_interfaces::srv::dds_::GetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.676600 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #4: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.3;">,topic_name="rq/topological_navigation_core/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:d04},adlink_entity_factory=1} -1711462090.676607 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:d04 reliable volatile reader unnamed: (default).rq/topological_navigation_core/get_parameter_typesRequest/rcl_interfaces::srv::dds_::GetParameterTypes_Request_ p(open) known -1711462090.676621 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.3;">,topic_name="rq/topological_navigation_core/get_parameter_typesRequest",type_name="rcl_interfaces::srv::dds_::GetParameterTypes_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.676634 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #5: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.4;">,topic_name="rq/topological_navigation_core/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:f04},adlink_entity_factory=1} -1711462090.676641 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:f04 reliable volatile reader unnamed: (default).rq/topological_navigation_core/list_parametersRequest/rcl_interfaces::srv::dds_::ListParameters_Request_ p(open) known -1711462090.676655 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.4;">,topic_name="rq/topological_navigation_core/list_parametersRequest",type_name="rcl_interfaces::srv::dds_::ListParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.676664 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #6: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.5;">,topic_name="rq/topological_navigation_core/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1104},adlink_entity_factory=1} -1711462090.676670 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1104 reliable volatile reader unnamed: (default).rq/topological_navigation_core/set_parametersRequest/rcl_interfaces::srv::dds_::SetParameters_Request_ p(open) known -1711462090.676684 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.5;">,topic_name="rq/topological_navigation_core/set_parametersRequest",type_name="rcl_interfaces::srv::dds_::SetParameters_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.676694 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #7: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.6;">,topic_name="rq/topological_navigation_core/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",reliability=1:9223372036854775807,history=0:1000,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1304},adlink_entity_factory=1} -1711462090.676703 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1304 reliable volatile reader unnamed: (default).rq/topological_navigation_core/set_parameters_atomicallyRequest/rcl_interfaces::srv::dds_::SetParametersAtomically_Request_ p(open) known -1711462090.676717 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=53<"serviceid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.6;">,topic_name="rq/topological_navigation_core/set_parameters_atomicallyRequest",type_name="rcl_interfaces::srv::dds_::SetParametersAtomically_Request_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:1000,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.676726 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #8: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.7;">,topic_name="rr/controller_server/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1504},adlink_entity_factory=1} -1711462090.676733 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1504 reliable volatile reader unnamed: (default).rr/controller_server/set_parametersReply/rcl_interfaces::srv::dds_::SetParameters_Response_ p(open) known -1711462090.676748 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.7;">,topic_name="rr/controller_server/set_parametersReply",type_name="rcl_interfaces::srv::dds_::SetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.676757 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #9: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.8;">,topic_name="rr/controller_server/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1704},adlink_entity_factory=1} -1711462090.676763 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1704 reliable volatile reader unnamed: (default).rr/controller_server/list_parametersReply/rcl_interfaces::srv::dds_::ListParameters_Response_ p(open) known -1711462090.676777 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.8;">,topic_name="rr/controller_server/list_parametersReply",type_name="rcl_interfaces::srv::dds_::ListParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.676789 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #10: ST0 DCPSSubscription/SubscriptionBuiltinTopicData:{user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.9;">,topic_name="rr/controller_server/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110aba1:7b19badd:ce0adb73:1904},adlink_entity_factory=1} -1711462090.676796 [0] dq.builtin: SEDP ST0 110aba1:7b19badd:ce0adb73:1904 reliable volatile reader unnamed: (default).rr/controller_server/get_parametersReply/rcl_interfaces::srv::dds_::GetParameters_Response_ p(open) known -1711462090.676810 [0] dq.builtin: (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7419@2 ssm=0) QOS={user_data=52<"clientid= 1.10.ab.a1.7b.19.ba.dd.ce.a.db.73.0.0.0.9;">,topic_name="rr/controller_server/get_parametersReply",type_name="rcl_interfaces::srv::dds_::GetParameters_Response_",topic_data=0<>,group_data=0<>,durability=0,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,presentation=0:0:0,partition={},time_based_filter=0,transport_priority=0,type_consistency_enforcement=1:11000,data_representation=1(0),adlink_entity_factory=1,adlink_reader_lifespan=0:9223372036854775807,adlink_reader_data_lifecycle=9223372036854775807:9223372036854775807,adlink_subscription_keys=0:{}} -1711462090.677358 [0] tev: writer_hbcontrol: wr 110cd0d:56a27910:57318171:403 unicasting to prd 110aba1:7b19badd:ce0adb73:504 (rel-prd 4 seq-eq-max 3 seq 12 maxseq 12) -1711462090.677379 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:403) sent, resched in 0.1 s (min-ack 12!, avail-seq 12, xmit 12) -1711462090.677387 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f770 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.677397 [0] tev: writer_hbcontrol: wr 110cd0d:e3b81b8d:1ccb65b1:403 unicasting to prd 110aba1:7b19badd:ce0adb73:504 (rel-prd 4 seq-eq-max 3 seq 13 maxseq 13) -1711462090.677405 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:403) sent, resched in 0.1 s (min-ack 13!, avail-seq 13, xmit 13) -1711462090.677412 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400ecf0 0(control): niov 2 sz 68 => now niov 4 sz 124 -1711462090.677434 [0] tev: nn_xpack_send 124: 0x7408c000139c:20 0x7408c400f858:48 0x7408c400edc0:24 0x7408c400ede8:32 [ udp/10.101.12.71:7419@2 ] -1711462090.677441 [0] tev: traffic-xmit (1) 124 -1711462090.677578 [0] tev: writer_hbcontrol: wr 110cd0d:79d6eeac:ea4a8907:403 unicasting to prd 110aba1:7b19badd:ce0adb73:504 (rel-prd 4 seq-eq-max 3 seq 13 maxseq 13) -1711462090.677588 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:403) sent, resched in 0.1 s (min-ack 13!, avail-seq 13, xmit 13) -1711462090.677596 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f770 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.677613 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408c400f858:48 [ udp/10.101.12.71:7419@2 ] -1711462090.677621 [0] tev: traffic-xmit (1) 68 -1711462090.677623 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 116 from udp/10.101.12.71:52025 -1711462090.677641 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462090.677666 [0] recvUC: ACKNACK(F#1:12/1:1 L(:1c1 16938.337142) 110aba1:7b19badd:ce0adb73:504 -> 110cd0d:56a27910:57318171:403 complying RX12non-timed queue now has 1 items -1711462090.677678 [0] recvUC: rexmit#1 maxseq:12<12<=12defer_heartbeat_to_peer: 110cd0d:56a27910:57318171:403 -> 110aba1:7b19badd:ce0adb73:504 - queue for transmit -1711462090.677683 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009100 0(rexmit(110cd0d:56a27910:57318171:403:#12/1)): niov 0 sz 0 => now niov 3 sz 544 -1711462090.677687 [0] recvUC: ) -1711462090.677707 [0] tev: nn_xpack_send 544: 0x7408c000139c:20 0x7408bc0091e8:52 0x7408ac01b0d0:472 [ udp/10.101.12.71:7419@2 ] -1711462090.677725 [0] tev: traffic-xmit (1) 544 -1711462090.677708 [0] recvUC: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.677758 [0] recvUC: ACKNACK(F#1:13/1:1 110aba1:7b19badd:ce0adb73:504 -> 110cd0d:e3b81b8d:1ccb65b1:403 complying RX13non-timed queue now has 1 items -1711462090.677767 [0] recvUC: rexmit#1 maxseq:13<13<=13defer_heartbeat_to_peer: 110cd0d:e3b81b8d:1ccb65b1:403 -> 110aba1:7b19badd:ce0adb73:504 - queue for transmit -1711462090.677773 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(rexmit(110cd0d:e3b81b8d:1ccb65b1:403:#13/1)): niov 0 sz 0 => now niov 3 sz 520 -1711462090.677773 [0] recvUC: non-timed queue now has 1 items -1711462090.677796 [0] recvUC: ) -1711462090.677807 [0] recvUC: send_deferred_heartbeat: 18ed9dbea84bb67e -> daaf4d312a3532b - queue for transmit -1711462090.677815 [0] recvUC: non-timed queue now has 1 items -1711462090.677800 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009280 0(control): niov 3 sz 520 => now niov 5 sz 576 -1711462090.677836 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009580 0(control): niov 5 sz 576 => now niov 7 sz 632 -1711462090.677825 [0] recvUC: thread_cputime 0.005695000 -1711462090.677856 [0] tev: nn_xpack_send 632: 0x7408c000139c:20 0x7408bc0094e8:52 0x7408d406c3b0:448 0x7408bc009350:24 0x7408bc009378:32 0x7408bc009650:24 0x7408bc009678:32 [ udp/10.101.12.71:7419@2 ] -1711462090.677867 [0] tev: traffic-xmit (1) 632 -1711462090.677862 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 68 from udp/10.101.12.71:52025 -1711462090.677889 [0] recvUC: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.677906 [0] recvUC: ACKNACK(F#1:13/1:1 L(:1c1 16938.337391) 110aba1:7b19badd:ce0adb73:504 -> 110cd0d:79d6eeac:ea4a8907:403 complying RX13non-timed queue now has 1 items -1711462090.677916 [0] recvUC: rexmit#1 maxseq:13<13<=13defer_heartbeat_to_peer: 110cd0d:79d6eeac:ea4a8907:403 -> 110aba1:7b19badd:ce0adb73:504 - queue for transmit -1711462090.677922 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(rexmit(110cd0d:79d6eeac:ea4a8907:403:#13/1)): niov 0 sz 0 => now niov 3 sz 520 -1711462090.677923 [0] recvUC: ) -1711462090.677942 [0] recvUC: send_deferred_heartbeat: abaf4210bc473a65 -> daaf4d312a3532b - queue for transmit -1711462090.677950 [0] recvUC: non-timed queue now has 1 items -1711462090.677942 [0] tev: nn_xpack_send 520: 0x7408c000139c:20 0x7408bc0097e8:52 0x7408e003d100:448 [ udp/10.101.12.71:7419@2 ] -1711462090.677968 [0] tev: traffic-xmit (1) 520 -1711462090.677976 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.677991 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408bc009968:48 [ udp/10.101.12.71:7419@2 ] -1711462090.677998 [0] tev: traffic-xmit (1) 68 -1711462090.678142 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 108 from udp/10.101.12.71:52025 -1711462090.678152 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462090.678161 [0] recvUC: ACKNACK(F#2:13/0: L(:1c1 16938.337654) 110aba1:7b19badd:ce0adb73:504 -> 110cd0d:56a27910:57318171:403 setting-has-replied-to-hb happy-now) -1711462090.678168 [0] recvUC: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.678175 [0] recvUC: ACKNACK(F#2:14/0: 110aba1:7b19badd:ce0adb73:504 -> 110cd0d:e3b81b8d:1ccb65b1:403 setting-has-replied-to-hb happy-now) -1711462090.678292 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462090.678300 [0] recvUC: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.678309 [0] recvUC: ACKNACK(F#2:14/0: L(:1c1 16938.337803) 110aba1:7b19badd:ce0adb73:504 -> 110cd0d:79d6eeac:ea4a8907:403 setting-has-replied-to-hb happy-now) -1711462090.685371 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.685394 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.685403 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.685437 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc009968:44 0x7408bc0097d0:24 0x7408bc0097f8:28 0x7408bc0094d0:24 0x7408bc0094f8:28 [ udp/10.101.12.71:7419@2 ] -1711462090.685444 [0] tev: traffic-xmit (1) 168 -1711462090.685586 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 116 from udp/10.101.12.71:52025 -1711462090.685598 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462090.685617 [0] recvUC: HEARTBEAT(#16:12..12 L(:1c1 16938.345100)110aba1:7b19badd:ce0adb73:403 -> 110cd0d:56a27910:57318171:504: end-of-tl-seq(rd 110cd0d:56a27910:57318171:504 #12) end-of-tl-seq(rd 110cd0d:e3b81b8d:1ccb65b1:504 #12) end-of-tl-seq(rd 110cd0d:79d6eeac:ea4a8907:504 #12) 110cd0d:56a27910:57318171:504@11) -1711462090.685625 [0] recvUC: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.685628 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110aba1:7b19badd:ce0adb73:403: F#1:12/1:1 -1711462090.685646 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462090.685654 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.685665 [0] recvUC: HEARTBEAT(#17:12..12 110aba1:7b19badd:ce0adb73:403 -> 110cd0d:79d6eeac:ea4a8907:504: 110cd0d:79d6eeac:ea4a8907:504@11) -1711462090.685671 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408bc009968:48 [ udp/10.101.12.71:7419@2 ] -1711462090.685691 [0] tev: traffic-xmit (1) 68 -1711462090.685682 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 68 from udp/10.101.12.71:52025 -1711462090.685703 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110aba1:7b19badd:ce0adb73:403: F#8:12/1:1 -1711462090.685711 [0] recvUC: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.685724 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462090.685736 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.685746 [0] recvUC: HEARTBEAT(#18:12..12 L(:1c1 16938.345212)110aba1:7b19badd:ce0adb73:403 -> 110cd0d:e3b81b8d:1ccb65b1:504: 110cd0d:e3b81b8d:1ccb65b1:504@11) -1711462090.685752 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408bc009968:48 [ udp/10.101.12.71:7419@2 ] -1711462090.685771 [0] tev: traffic-xmit (1) 68 -1711462090.685763 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 632 from udp/10.101.12.71:52025 -1711462090.685784 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110aba1:7b19badd:ce0adb73:403: F#17:12/1:1 -1711462090.685808 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462090.685816 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 68 -1711462090.685796 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462090.685834 [0] tev: nn_xpack_send 68: 0x7408c000139c:20 0x7408bc009968:48 [ udp/10.101.12.71:7419@2 ] -1711462090.685844 [0] tev: traffic-xmit (1) 68 -1711462090.685837 [0] recvUC: INFOTS(1711462090.592467231) -1711462090.685944 [0] recvUC: DATA(110aba1:7b19badd:ce0adb73:403 -> 110cd0d:56a27910:57318171:504 #12 L(:1c1 16938.345298) msr_in_sync(110cd0d:56a27910:57318171:504 out-of-sync to tlcatchup)data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #12: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206, =>110cd0d:56a27910:57318171:504 -1711462090.686044 [0] recvUC: msr_in_sync(110cd0d:e3b81b8d:1ccb65b1:504 out-of-sync to tlcatchup)data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #12: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206, =>110cd0d:e3b81b8d:1ccb65b1:504 -1711462090.686129 [0] recvUC: msr_in_sync(110cd0d:79d6eeac:ea4a8907:504 out-of-sync to tlcatchup)data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #12: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206, =>110cd0d:79d6eeac:ea4a8907:504 -1711462090.686141 [0] recvUC: ) -1711462090.686153 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 68 from udp/10.101.12.71:52025 -1711462090.686161 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462090.686174 [0] recvUC: HEARTBEAT(#19:12..12 L(:1c1 16938.345663)110aba1:7b19badd:ce0adb73:403 -> 110cd0d:56a27910:57318171:504: 110cd0d:56a27910:57318171:504@12(sync)) -1711462090.686185 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 664 from udp/10.101.12.71:52025 -1711462090.686191 [0] recvUC: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462090.686197 [0] recvUC: INFOTS(1711462090.592467231) -1711462090.686213 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110aba1:7b19badd:ce0adb73:403: F#2:13/0: -1711462090.686225 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462090.686233 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.686239 [0] recvUC: DATA(110aba1:7b19badd:ce0adb73:403 -> 110cd0d:79d6eeac:ea4a8907:504 #12 L(:1c1 16938.345694)) -1711462090.686258 [0] tev: nn_xpack_send 64: 0x7408c000139c:20 0x7408bc009968:44 [ udp/10.101.12.71:7419@2 ] -1711462090.686267 [0] tev: traffic-xmit (1) 64 -1711462090.686262 [0] recvUC: HEARTBEAT(#20:12..12 110aba1:7b19badd:ce0adb73:403 -> 110cd0d:79d6eeac:ea4a8907:504: 110cd0d:79d6eeac:ea4a8907:504@12(sync)) -1711462090.686278 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110aba1:7b19badd:ce0adb73:403: F#9:13/0: -1711462090.686301 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462090.686309 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.686291 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 632 from udp/10.101.12.71:52025 -1711462090.686327 [0] tev: nn_xpack_send 64: 0x7408c000139c:20 0x7408bc009968:44 [ udp/10.101.12.71:7419@2 ] -1711462090.686337 [0] tev: traffic-xmit (1) 64 -1711462090.686328 [0] recvUC: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.686357 [0] recvUC: INFOTS(1711462090.592467231) -1711462090.686366 [0] recvUC: DATA(110aba1:7b19badd:ce0adb73:403 -> 110cd0d:e3b81b8d:1ccb65b1:504 #12 L(:1c1 16938.345830)) -1711462090.686376 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 68 from udp/10.101.12.71:52025 -1711462090.686383 [0] recvUC: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462090.686394 [0] recvUC: HEARTBEAT(#21:12..12 L(:1c1 16938.345886)110aba1:7b19badd:ce0adb73:403 -> 110cd0d:e3b81b8d:1ccb65b1:504: 110cd0d:e3b81b8d:1ccb65b1:504@12(sync)) -1711462090.686403 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110aba1:7b19badd:ce0adb73:403: F#18:13/0: -1711462090.686412 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462090.686418 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.686434 [0] tev: nn_xpack_send 64: 0x7408c000139c:20 0x7408bc009968:44 [ udp/10.101.12.71:7419@2 ] -1711462090.686440 [0] tev: traffic-xmit (1) 64 -1711462090.774545 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462090.774584 [0] recvMC: HEARTBEAT(#50:42..42 L(:1c1 16938.434073)110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@42(sync) 110cd0d:e3b81b8d:1ccb65b1:504@42(sync) 110cd0d:79d6eeac:ea4a8907:504@42(sync)) -1711462090.774661 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#3:43/0: -1711462090.774680 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462090.774689 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.774697 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#19:43/0: -1711462090.774703 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462090.774708 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.774715 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#10:43/0: -1711462090.774720 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462090.774725 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.774751 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc009968:44 0x7408bc0097d0:24 0x7408bc0097f8:28 0x7408bc0094d0:24 0x7408bc0094f8:28 [ udp/10.101.12.71:7415@2 ] -1711462090.774758 [0] tev: traffic-xmit (1) 168 -1711462090.777536 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:403) suppressed, resched in inf s (min-ack 12, avail-seq 12, xmit 12) -1711462090.777573 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:403) suppressed, resched in inf s (min-ack 13, avail-seq 13, xmit 13) -1711462090.777582 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:403) suppressed, resched in inf s (min-ack 13, avail-seq 13, xmit 13) -1711462090.790633 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 52 from udp/10.101.12.71:52025 -1711462090.790667 [0] recvMC: HEARTBEAT(#22:12..12 L(:1c1 16938.450158)110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@12(sync) 110cd0d:e3b81b8d:1ccb65b1:504@12(sync) 110cd0d:79d6eeac:ea4a8907:504@12(sync)) -1711462090.790740 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110aba1:7b19badd:ce0adb73:403: F#3:13/0: -1711462090.790759 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462090.790766 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462090.790781 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110aba1:7b19badd:ce0adb73:403: F#19:13/0: -1711462090.790786 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462090.790793 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462090.790801 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110aba1:7b19badd:ce0adb73:403: F#10:13/0: -1711462090.790806 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462090.790811 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462090.790836 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc009968:44 0x7408bc0097d0:24 0x7408bc0097f8:28 0x7408bc0094d0:24 0x7408bc0094f8:28 [ udp/10.101.12.71:7419@2 ] -1711462090.790843 [0] tev: traffic-xmit (1) 168 -1711462091.469275 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 256 from udp/10.101.12.71:40473 -1711462091.469305 [0] recv: INFOTS(1711462091.469007481) -1711462091.469323 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #43 L(:1c1 16939.128806)) -1711462091.469367 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #43: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/topological_map_2",type_name="std_msgs::msg::dds_::String_",durability=1,durability_service=0:0:10:-1:-1:-1,reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5603},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462091.469416 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5603 reliable transient-local writer unnamed: (default).rt/topological_map_2/std_msgs::msg::dds_::String_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=0<>,topic_name="rt/topological_map_2",type_name="std_msgs::msg::dds_::String_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:10:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462091.469430 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2096 from udp/10.101.12.71:40473 -1711462091.469454 [0] recvMC: INFOTS(1711462091.469060530) -1711462091.469457 [0] dq.builtin: => EVERYONE -1711462091.469475 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #43 L(:1c1 16939.128956) => EVERYONE -1711462091.469511 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:5603) scanning all rds of topic rt/topological_map_2 -1711462091.469524 [0] dq.builtin: reader 110cd0d:56a27910:57318171:1404 init_acknack_count = 1 -1711462091.469528 [0] dq.builtin: reader_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:5603 rd 110cd0d:56a27910:57318171:1404) -1711462091.469549 [0] dq.builtin: proxy_writer_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:5603 rd 110cd0d:56a27910:57318171:1404) - out-of-sync -1711462091.469555 [0] dq.builtin: reader 110cd0d:e3b81b8d:1ccb65b1:1404 init_acknack_count = 9 -1711462091.469559 [0] dq.builtin: reader_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:5603 rd 110cd0d:e3b81b8d:1ccb65b1:1404) -1711462091.469564 [0] dq.builtin: proxy_writer_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:5603 rd 110cd0d:e3b81b8d:1ccb65b1:1404) - out-of-sync -1711462091.469569 [0] dq.builtin: reader 110cd0d:79d6eeac:ea4a8907:1404 init_acknack_count = 5 -1711462091.469575 [0] dq.builtin: reader_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:5603 rd 110cd0d:79d6eeac:ea4a8907:1404) -1711462091.469580 [0] dq.builtin: proxy_writer_add_connection(pwr 110d7b4:17c5b8c5:94bd0ff4:5603 rd 110cd0d:79d6eeac:ea4a8907:1404) - out-of-sync -1711462091.469590 [0] dq.builtin: thread_cputime 0.018514000 -1711462091.469683 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #43: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462091.469805 [0] recvMC: HEARTBEAT(#51:43..43 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@43(sync) 110cd0d:e3b81b8d:1ccb65b1:504@43(sync) 110cd0d:79d6eeac:ea4a8907:504@43(sync)) -1711462091.469887 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#4:44/0: -1711462091.469907 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462091.469892 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462091.469917 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462091.469943 [0] recvMC: HEARTBEAT(#1:1..0 L(:1c1 16939.129433)110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: end-of-tl-seq(rd 110cd0d:56a27910:57318171:1404 #0) msr_in_sync(110cd0d:56a27910:57318171:1404 out-of-sync to tlcatchup) end-of-tl-seq(rd 110cd0d:e3b81b8d:1ccb65b1:1404 #0) msr_in_sync(110cd0d:e3b81b8d:1ccb65b1:1404 out-of-sync to tlcatchup) end-of-tl-seq(rd 110cd0d:79d6eeac:ea4a8907:1404 #0) msr_in_sync(110cd0d:79d6eeac:ea4a8907:1404 out-of-sync to tlcatchup) 110cd0d:56a27910:57318171:1404@0(sync) 110cd0d:e3b81b8d:1ccb65b1:1404@0(sync) 110cd0d:79d6eeac:ea4a8907:1404@0(sync)) -1711462091.469948 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#20:44/0: -1711462091.469956 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462091.469963 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462091.469972 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#11:44/0: -1711462091.469978 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462091.469995 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462091.470005 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:1404 -> 110d7b4:17c5b8c5:94bd0ff4:5603: F#9:1/0: -1711462091.470010 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:1404 -> pwr 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462091.470015 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009280 0(control): niov 6 sz 168 => now niov 8 sz 220 -1711462091.470022 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:1404 -> 110d7b4:17c5b8c5:94bd0ff4:5603: F#5:1/0: -1711462091.470028 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:1404 -> pwr 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462091.470033 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009580 0(control): niov 8 sz 220 => now niov 10 sz 272 -1711462091.470039 [0] tev: acknack 110cd0d:56a27910:57318171:1404 -> 110d7b4:17c5b8c5:94bd0ff4:5603: F#1:1/0: -1711462091.470045 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:1404 -> pwr 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462091.470050 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009100 0(control): niov 10 sz 272 => now niov 12 sz 324 -1711462091.470083 [0] tev: nn_xpack_send 324: 0x7408c000139c:20 0x7408bc009968:44 0x7408bc0097d0:24 0x7408bc0097f8:28 0x7408bc0094d0:24 0x7408bc0094f8:28 0x7408bc009350:24 0x7408bc009378:28 0x7408bc009650:24 0x7408bc009678:28 0x7408bc0091d0:24 0x7408bc0091f8:28 [ udp/10.101.12.71:7415@2 ] -1711462091.470092 [0] tev: traffic-xmit (1) 324 -1711462091.481721 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2120 from udp/10.101.12.71:40473 -1711462091.481733 [0] recvMC: INFOTS(1711462091.481540997) -1711462091.481734 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 200 from udp/10.101.12.71:40473 -1711462091.481743 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #44 L(:1c1 16939.141236) => EVERYONE -1711462091.481764 [0] recv: INFOTS(1711462091.481496692) -1711462091.481792 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #44 L(:1c1 16939.141266)) -1711462091.481846 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #44: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462091.481856 [0] recvMC: HEARTBEAT(F#52:44..44 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@44(sync) 110cd0d:e3b81b8d:1ccb65b1:504@44(sync) 110cd0d:79d6eeac:ea4a8907:504@44(sync)) -1711462091.481914 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #44: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/tf",type_name="tf2_msgs::msg::dds_::TFMessage_",reliability=1:9223372036854775807,history=0:100,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5703},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462091.482007 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5703 reliable volatile writer unnamed: (default).rt/tf/tf2_msgs::msg::dds_::TFMessage_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=0<>,topic_name="rt/tf",type_name="tf2_msgs::msg::dds_::TFMessage_",topic_data=0<>,group_data=0<>,durability=0,durability_service=0:0:1:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:100,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462091.482106 [0] dq.builtin: => EVERYONE -1711462091.482132 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:5703) scanning all rds of topic rt/tf -1711462091.482914 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2144 from udp/10.101.12.71:40473 -1711462091.482920 [0] recvMC: INFOTS(1711462091.482763810) -1711462091.482926 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #45 L(:1c1 16939.142423) => EVERYONE -1711462091.482946 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 276 from udp/10.101.12.71:40473 -1711462091.482972 [0] recv: INFOTS(1711462091.482728775) -1711462091.482985 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #45 L(:1c1 16939.142474)) -1711462091.482993 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #45: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462091.483011 [0] recvMC: HEARTBEAT(F#53:45..45 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@45(sync) 110cd0d:e3b81b8d:1ccb65b1:504@45(sync) 110cd0d:79d6eeac:ea4a8907:504@45(sync)) -1711462091.483095 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #45: ST0 DCPSPublication/PublicationBuiltinTopicData:{topic_name="rt/topological_map",type_name="topological_navigation_msgs::msg::dds_::TopologicalMap_",durability=1,durability_service=0:0:10:-1:-1:-1,reliability=1:9223372036854775807,history=0:10,protocol_version=2:1,vendorid=1:16,endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5803},adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462091.483150 [0] dq.builtin: SEDP ST0 110d7b4:17c5b8c5:94bd0ff4:5803 reliable transient-local writer unnamed: (default).rt/topological_map/topological_navigation_msgs::msg::dds_::TopologicalMap_ p(open) NEW (as udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 ssm=0) QOS={user_data=0<>,topic_name="rt/topological_map",type_name="topological_navigation_msgs::msg::dds_::TopologicalMap_",topic_data=0<>,group_data=0<>,durability=1,durability_service=0:0:10:-1:-1:-1,deadline=9223372036854775807,latency_budget=0,liveliness=0:9223372036854775807,reliability=1:9223372036854775807,lifespan=9223372036854775807,destination_order=0,history=0:10,resource_limits=-1:-1:-1,ownership=0,ownership_strength=0,presentation=0:0:0,partition={},transport_priority=0,data_representation=1(0),adlink_entity_factory=1,adlink_writer_data_lifecycle=0} -1711462091.483185 [0] dq.builtin: => EVERYONE -1711462091.483240 [0] dq.builtin: match_proxy_writer_with_readers(pwr 110d7b4:17c5b8c5:94bd0ff4:5803) scanning all rds of topic rt/topological_map -1711462091.521386 [0] tev: non-timed queue now has 1 items -1711462091.521441 [0] tev: xmit spdp 110cd0d:56a27910:57318171:1c1 to 110e21c:d0762c48:a9f0fb28:100c7 (resched 1s) -1711462091.521460 [0] tev: non-timed queue now has 2 items -1711462091.521469 [0] tev: xmit spdp 110cd0d:e3b81b8d:1ccb65b1:1c1 to 110e21c:d0762c48:a9f0fb28:100c7 (resched 1s) -1711462091.521483 [0] tev: non-timed queue now has 3 items -1711462091.521491 [0] tev: xmit spdp 110cd0d:79d6eeac:ea4a8907:1c1 to 110e21c:d0762c48:a9f0fb28:100c7 (resched 1s) -1711462091.521503 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 460 -1711462091.521511 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(data(0:0:0:0:#0/1)): niov 3 sz 460 => now niov 6 sz 908 -1711462091.521518 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(data(0:0:0:0:#0/1)): niov 6 sz 908 => now niov 9 sz 1356 -1711462091.521578 [0] tev: nn_xpack_send 1356: 0x7408c000139c:20 0x7408bc009968:52 0x7408ac009c94:388 0x7408bc0097d0:24 0x7408bc0097f8:36 0x7408d401eea4:388 0x7408bc0094d0:24 0x7408bc0094f8:36 0x7408e000a504:388 [ udp/10.101.12.71:7412@2 ] -1711462091.521587 [0] tev: traffic-xmit (1) 1356 -1711462091.543207 [0] tev: non-timed queue now has 1 items -1711462091.543245 [0] tev: xmit spdp 110cd0d:56a27910:57318171:1c1 to 110d7b4:17c5b8c5:94bd0ff4:100c7 (resched 1s) -1711462091.543263 [0] tev: non-timed queue now has 2 items -1711462091.543272 [0] tev: xmit spdp 110cd0d:e3b81b8d:1ccb65b1:1c1 to 110d7b4:17c5b8c5:94bd0ff4:100c7 (resched 1s) -1711462091.543287 [0] tev: non-timed queue now has 3 items -1711462091.543295 [0] tev: xmit spdp 110cd0d:79d6eeac:ea4a8907:1c1 to 110d7b4:17c5b8c5:94bd0ff4:100c7 (resched 1s) -1711462091.543306 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 460 -1711462091.543315 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(data(0:0:0:0:#0/1)): niov 3 sz 460 => now niov 6 sz 908 -1711462091.543323 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(data(0:0:0:0:#0/1)): niov 6 sz 908 => now niov 9 sz 1356 -1711462091.543375 [0] tev: nn_xpack_send 1356: 0x7408c000139c:20 0x7408bc009968:52 0x7408ac009c94:388 0x7408bc0097d0:24 0x7408bc0097f8:36 0x7408d401eea4:388 0x7408bc0094d0:24 0x7408bc0094f8:36 0x7408e000a504:388 [ udp/10.101.12.71:7414@2 ] -1711462091.543384 [0] tev: traffic-xmit (1) 1356 -1711462091.550579 [0] tev: non-timed queue now has 1 items -1711462091.550599 [0] tev: xmit spdp 110cd0d:56a27910:57318171:1c1 to 110443d:bb7f10a5:18901533:100c7 (resched 1s) -1711462091.550614 [0] tev: non-timed queue now has 2 items -1711462091.550624 [0] tev: xmit spdp 110cd0d:e3b81b8d:1ccb65b1:1c1 to 110443d:bb7f10a5:18901533:100c7 (resched 1s) -1711462091.550636 [0] tev: non-timed queue now has 3 items -1711462091.550646 [0] tev: xmit spdp 110cd0d:79d6eeac:ea4a8907:1c1 to 110443d:bb7f10a5:18901533:100c7 (resched 1s) -1711462091.550657 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 460 -1711462091.550666 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(data(0:0:0:0:#0/1)): niov 3 sz 460 => now niov 6 sz 908 -1711462091.550674 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(data(0:0:0:0:#0/1)): niov 6 sz 908 => now niov 9 sz 1356 -1711462091.550707 [0] tev: nn_xpack_send 1356: 0x7408c000139c:20 0x7408bc009968:52 0x7408ac009c94:388 0x7408bc0097d0:24 0x7408bc0097f8:36 0x7408d401eea4:388 0x7408bc0094d0:24 0x7408bc0094f8:36 0x7408e000a504:388 [ udp/10.101.12.71:7416@2 ] -1711462091.550716 [0] tev: traffic-xmit (1) 1356 -1711462091.569318 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462091.569392 [0] recv: HEARTBEAT(#9:1..45 L(:1c1 16939.228869)110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:3c7@45(sync) 110cd0d:e3b81b8d:1ccb65b1:3c7@45(sync) 110cd0d:79d6eeac:ea4a8907:3c7@45(sync)) -1711462091.569450 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#4:46/0: -1711462091.569471 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462091.569481 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462091.569497 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#14:46/0: -1711462091.569503 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462091.569510 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462091.569520 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#8:46/0: -1711462091.569527 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462091.569534 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462091.569568 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc009968:44 0x7408bc0097d0:24 0x7408bc0097f8:28 0x7408bc0094d0:24 0x7408bc0094f8:28 [ udp/10.101.12.71:7414@2 ] -1711462091.569578 [0] tev: traffic-xmit (1) 168 -1711462091.572845 [0] tev: non-timed queue now has 1 items -1711462091.572881 [0] tev: xmit spdp 110cd0d:56a27910:57318171:1c1 to 110aba1:7b19badd:ce0adb73:100c7 (resched 1s) -1711462091.572897 [0] tev: non-timed queue now has 2 items -1711462091.572906 [0] tev: xmit spdp 110cd0d:e3b81b8d:1ccb65b1:1c1 to 110aba1:7b19badd:ce0adb73:100c7 (resched 1s) -1711462091.572920 [0] tev: non-timed queue now has 3 items -1711462091.572927 [0] tev: xmit spdp 110cd0d:79d6eeac:ea4a8907:1c1 to 110aba1:7b19badd:ce0adb73:100c7 (resched 1s) -1711462091.572937 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 460 -1711462091.572945 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(data(0:0:0:0:#0/1)): niov 3 sz 460 => now niov 6 sz 908 -1711462091.572952 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(data(0:0:0:0:#0/1)): niov 6 sz 908 => now niov 9 sz 1356 -1711462091.572997 [0] tev: nn_xpack_send 1356: 0x7408c000139c:20 0x7408bc009968:52 0x7408ac009c94:388 0x7408bc0097d0:24 0x7408bc0097f8:36 0x7408d401eea4:388 0x7408bc0094d0:24 0x7408bc0094f8:36 0x7408e000a504:388 [ udp/10.101.12.71:7418@2 ] -1711462091.573005 [0] tev: traffic-xmit (1) 1356 -1711462091.669841 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462091.669946 [0] recvMC: HEARTBEAT(#54:45..45 L(:1c1 16939.329405)110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@45(sync) 110cd0d:e3b81b8d:1ccb65b1:504@45(sync) 110cd0d:79d6eeac:ea4a8907:504@45(sync)) -1711462091.670142 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#5:46/0: -1711462091.670146 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462091.670254 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462091.670283 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462091.670307 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#21:46/0: -1711462091.670324 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462091.670341 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462091.670348 [0] recvMC: HEARTBEAT(#3:1..1 L(:1c1 16939.329818)110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0: 110cd0d:56a27910:57318171:1404@0(sync) 110cd0d:e3b81b8d:1ccb65b1:1404@0(sync) 110cd0d:79d6eeac:ea4a8907:1404@0(sync)) -1711462091.670376 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#12:46/0: -1711462091.670520 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462091.670565 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462091.670599 [0] tev: acknack 110cd0d:56a27910:57318171:1404 -> 110d7b4:17c5b8c5:94bd0ff4:5603: F#2:1/1:1 -1711462091.670616 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:1404 -> pwr 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462091.670631 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009280 0(control): niov 6 sz 168 => now niov 8 sz 224 -1711462091.670651 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:1404 -> 110d7b4:17c5b8c5:94bd0ff4:5603: F#10:1/1:1 -1711462091.670665 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:1404 -> pwr 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462091.670682 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009580 0(control): niov 8 sz 224 => now niov 10 sz 280 -1711462091.670700 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:1404 -> 110d7b4:17c5b8c5:94bd0ff4:5603: F#6:1/1:1 -1711462091.670719 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:1404 -> pwr 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462091.670733 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009100 0(control): niov 10 sz 280 => now niov 12 sz 336 -1711462091.670809 [0] tev: nn_xpack_send 336: 0x7408c000139c:20 0x7408bc009968:44 0x7408bc0097d0:24 0x7408bc0097f8:28 0x7408bc0094d0:24 0x7408bc0094f8:28 0x7408bc009350:24 0x7408bc009378:32 0x7408bc009650:24 0x7408bc009678:32 0x7408bc0091d0:24 0x7408bc0091f8:32 [ udp/10.101.12.71:7415@2 ] -1711462091.670830 [0] tev: traffic-xmit (1) 336 -1711462091.671617 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20568 from udp/10.101.12.71:40473 -1711462091.671673 [0] recvMC: INFOTS(1711462091.478307355) -1711462091.671739 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[1..1]/[0..20500) of 340680 L(:1c1 16939.331168)) -1711462091.671989 [0] recvUC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 164 from udp/10.101.12.71:40473 -1711462091.672038 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462091.672078 [0] recvUC: HEARTBEAT(#5:1..1 L(:1c1 16939.331535)110d7b4:17c5b8c5:94bd0ff4:5603 -> 110cd0d:56a27910:57318171:1404: 110cd0d:56a27910:57318171:1404@0(sync)) -1711462091.672099 [0] recvUC: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462091.672119 [0] recvUC: HEARTBEAT(#6:1..1 110d7b4:17c5b8c5:94bd0ff4:5603 -> 110cd0d:e3b81b8d:1ccb65b1:1404: 110cd0d:e3b81b8d:1ccb65b1:1404@0(sync)) -1711462091.672133 [0] recvUC: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462091.672149 [0] recvUC: HEARTBEAT(#7:1..1 110d7b4:17c5b8c5:94bd0ff4:5603 -> 110cd0d:79d6eeac:ea4a8907:1404: 110cd0d:79d6eeac:ea4a8907:1404@0(sync)) -1711462091.672175 [0] tev: thread_cputime 0.015848000 -1711462091.672233 [0] tev: acknack 110cd0d:56a27910:57318171:1404 -> 110d7b4:17c5b8c5:94bd0ff4:5603: F#3:1/0: + nackfrag #1:1/2/16:1111111111111111 -1711462091.672250 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:1404 -> pwr 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462091.672266 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 100 -1711462091.672305 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:1404 -> 110d7b4:17c5b8c5:94bd0ff4:5603: F#11:1/0: + nackfrag #2:1/2/16:1111111111111111 -1711462091.672319 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:1404 -> pwr 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462091.672331 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 100 => now niov 4 sz 188 -1711462091.672354 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:1404 -> 110d7b4:17c5b8c5:94bd0ff4:5603: F#7:1/0: + nackfrag #3:1/2/16:1111111111111111 -1711462091.672395 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:1404 -> pwr 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462091.672411 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 188 => now niov 6 sz 276 -1711462091.672473 [0] tev: nn_xpack_send 276: 0x7408c000139c:20 0x7408bc009968:80 0x7408bc0097d0:24 0x7408bc0097f8:64 0x7408bc0094d0:24 0x7408bc0094f8:64 [ udp/10.101.12.71:7415@2 ] -1711462091.672490 [0] tev: traffic-xmit (1) 276 -1711462091.673548 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.673594 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[5..5]/[82000..102500) of 340680 L(:1c1 16939.333082)) -1711462091.673797 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.673840 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[6..6]/[102500..123000) of 340680 L(:1c1 16939.333329)) -1711462091.673894 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.673916 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[7..7]/[123000..143500) of 340680 L(:1c1 16939.333412)) -1711462091.674072 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.674110 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[8..8]/[143500..164000) of 340680 L(:1c1 16939.333601)) -1711462091.674163 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.674182 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[9..9]/[164000..184500) of 340680 L(:1c1 16939.333678)) -1711462091.674371 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.674426 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[10..10]/[184500..205000) of 340680 L(:1c1 16939.333916)) -1711462091.674488 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.674512 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[11..11]/[205000..225500) of 340680 L(:1c1 16939.334008)) -1711462091.674529 [0] recvMC: thread_cputime 0.010752000 -1711462091.674584 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.674603 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[12..12]/[225500..246000) of 340680 L(:1c1 16939.334100)) -1711462091.676607 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.676641 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[13..13]/[246000..266500) of 340680 L(:1c1 16939.336135)) -1711462091.676757 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.676823 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[14..14]/[266500..287000) of 340680 L(:1c1 16939.336312)) -1711462091.676868 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.676878 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[15..15]/[287000..307500) of 340680 L(:1c1 16939.336378)) -1711462091.676922 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.676931 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[16..16]/[307500..328000) of 340680 L(:1c1 16939.336432)) -1711462091.680238 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 12736 from udp/10.101.12.71:40473 -1711462091.680305 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[17..17]/[328000..340680) of 340680 L(:1c1 16939.339794)) -1711462091.680354 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.680383 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[2..2]/[20500..41000) of 340680 L(:1c1 16939.339881)) -1711462091.680426 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.680436 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[3..3]/[41000..61500) of 340680 L(:1c1 16939.339937)) -1711462091.680565 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.680590 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[4..4]/[61500..82000) of 340680 L(:1c1 16939.340080) => EVERYONE -1711462091.680980 [0] recvUC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 164 from udp/10.101.12.71:40473 -1711462091.681034 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462091.682899 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:5603 #1: ST0 rt/topological_map_2/std_msgs::msg::dds_::String_:{"{"meta": {"last_updated": "2022-06-23_13-10-11"}, "metric_map": "riseholme", "name": "strawberry_polytunnel", "nodes": [{"meta": {"map": "riseholme", "node": "WayPoint140", "pointset": "riseholme_restrict"}, "node": {"edges": [{"action": "NavigateToPose", "action_type": "geometry_msgs/PoseStamped", "config": [], "edge_id": "WayPoint140_WayPoint74", "fail_policy": "fail", "fluid_navigation": true, "goal": {"target_pose": {"header": {"frame_id": "$node.parent_frame"}, "pose": "$node.pose"}}, "node": "WayPoint74", "recovery_behaviours_config": "", "restrictions_planning": "True", "restrictions_runtime": "obstacleFree_1"}, {"action": "NavigateToPose", "action_type": "geometry_msgs/PoseStamped", "config": [], "edge_id": "WayPoint140_WayPoint141", "fail_policy": "fail", "fluid_navigation": true, "goal": {"target_pose": {"header": {"frame_id": "$node.parent_frame"}, "pose": "$node.pose"}}, "node": "WayPoint141", "recovery_behaviours_config": "", "restrictions_planning": "True", "restrictions_runtime": "obstacleFr) -1711462091.682925 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.682935 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[5..5]/[82000..102500) of 340680 L(:1c1 16939.342433)) -1711462091.682965 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 20556 from udp/10.101.12.71:40473 -1711462091.682974 [0] recvMC: DATAFRAG(110d7b4:17c5b8c5:94bd0ff4:5603 -> 0:0:0:0 #1/[6..6]/[102500..123000) of 340680 L(:1c1 16939.342474)) -1711462091.683005 [0] recvUC: HEARTBEAT(#9:1..1 L(:1c1 16939.340531)110d7b4:17c5b8c5:94bd0ff4:5603 -> 110cd0d:56a27910:57318171:1404: 110cd0d:56a27910:57318171:1404@1(sync)) -1711462091.683048 [0] recvUC: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462091.683067 [0] tev: acknack 110cd0d:56a27910:57318171:1404 -> 110d7b4:17c5b8c5:94bd0ff4:5603: F#4:2/0: -1711462091.683093 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:1404 -> pwr 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462091.683108 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462091.683164 [0] tev: nn_xpack_send 64: 0x7408c000139c:20 0x7408bc009968:44 [ udp/10.101.12.71:7415@2 ] -1711462091.683175 [0] tev: traffic-xmit (1) 64 -1711462091.683193 [0] recvUC: HEARTBEAT(#10:1..1 110d7b4:17c5b8c5:94bd0ff4:5603 -> 110cd0d:e3b81b8d:1ccb65b1:1404: 110cd0d:e3b81b8d:1ccb65b1:1404@1(sync)) -1711462091.683209 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:1404 -> 110d7b4:17c5b8c5:94bd0ff4:5603: F#12:2/0: -1711462091.683237 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:1404 -> pwr 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462091.683249 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462091.683223 [0] recvUC: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462091.683276 [0] tev: nn_xpack_send 64: 0x7408c000139c:20 0x7408bc009968:44 [ udp/10.101.12.71:7415@2 ] -1711462091.683290 [0] tev: traffic-xmit (1) 64 -1711462091.683282 [0] recvUC: HEARTBEAT(#11:1..1 110d7b4:17c5b8c5:94bd0ff4:5603 -> 110cd0d:79d6eeac:ea4a8907:1404: 110cd0d:79d6eeac:ea4a8907:1404@1(sync)) -1711462091.683302 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:1404 -> 110d7b4:17c5b8c5:94bd0ff4:5603: F#8:2/0: -1711462091.683332 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:1404 -> pwr 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462091.683346 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462091.683368 [0] tev: nn_xpack_send 64: 0x7408c000139c:20 0x7408bc009968:44 [ udp/10.101.12.71:7415@2 ] -1711462091.683379 [0] tev: traffic-xmit (1) 64 -1711462091.683398 [0] recvUC: thread_cputime 0.007174000 -1711462091.905837 [0] tev: write_sample 110cd0d:e3b81b8d:1ccb65b1:200c2 #4: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:e3b81b8d:1ccb65b1:1}:1<0> -1711462091.905916 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(110cd0d:e3b81b8d:1ccb65b1:200c2:#4/1)): niov 0 sz 0 => now niov 3 sz 84 -1711462091.905933 [0] tev: writer_hbcontrol: wr 110cd0d:e3b81b8d:1ccb65b1:200c2 multicasting (rel-prd 4 seq-eq-max 4 seq 4 maxseq 3) -1711462091.905951 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:200c2) piggybacked, resched in 0.1 s (min-ack 3, avail-seq 4, xmit 3) -1711462091.905963 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 3 sz 84 => now niov 4 sz 116 -1711462091.906092 [0] tev: nn_xpack_send 116: 0x7408c000139c:20 0x7408bc009978:36 0x7408c8038f6c:28 0x7408bc0097f8:32 [ udp/239.255.0.1:7400@2 ] -1711462091.906107 [0] tev: traffic-xmit (1) 116 -1711462091.906121 [0] tev: resched pmd(110cd0d:e3b81b8d:1ccb65b1:1c1): 8s -1711462091.906145 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462091.906197 [0] recv: INFOTS(1711462091.905809560) -1711462091.906222 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:200c2 -> 0:0:0:0 #4 110cd0d:e3b81b8d:1ccb65b1:200c2? -> 0:0:0:0) -1711462091.906231 [0] recv: HEARTBEAT(#29:4..4 110cd0d:e3b81b8d:1ccb65b1:200c2? -> 0:0:0:0) -1711462091.906254 [0] recv: thread_cputime 0.048331000 -1711462091.906574 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462091.906615 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462091.906639 [0] recv: ACKNACK(F#3:5/0: L(:1c1 16939.566114) 110d7b4:17c5b8c5:94bd0ff4:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 ACK1 RM0) -1711462091.906657 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462091.906662 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462091.906672 [0] recv: ACKNACK(F#3:5/0: L(:1c1 16939.566165) 110e21c:d0762c48:a9f0fb28:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 ACK1 RM0) -1711462091.906683 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462091.906688 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462091.906697 [0] recv: ACKNACK(F#3:5/0: L(:1c1 16939.566191) 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 ACK1 RM0) -1711462091.906707 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462091.906712 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462091.906722 [0] recv: ACKNACK(F#3:5/0: L(:1c1 16939.566216) 110443d:bb7f10a5:18901533:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 ACK1 RM0) -1711462092.006014 [0] tev: non-timed queue now has 1 items -1711462092.006092 [0] tev: xmit spdp 110cd0d:e3b81b8d:1ccb65b1:1c1 to 0:0:0:100c7 (resched 8s) -1711462092.006115 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:200c2) suppressed, resched in inf s (min-ack 4, avail-seq 4, xmit 4) -1711462092.006132 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 444 -1711462092.006440 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462092.006504 [0] recv: INFOTS(1711462067.905323275) -1711462092.006592 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 0:0:0:0 #1) -1711462092.006610 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462092.006670 [0] recv: INFOTS(1711462067.905323275) -1711462092.006681 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 0:0:0:0 #1) -1711462092.006728 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462092.006796 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (local) -1711462092.006834 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462092.006846 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (local) -1711462092.007971 [0] tev: nn_xpack_send 444: 0x7408c000139c:20 0x7408bc009978:36 0x7408d401eea4:388 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.(trunc) -1711462092.007993 [0] tev: traffic-xmit (101) 444 -1711462092.521510 [0] tev: non-timed queue now has 1 items -1711462092.521568 [0] tev: xmit spdp 110cd0d:56a27910:57318171:1c1 to 110e21c:d0762c48:a9f0fb28:100c7 (resched 1s) -1711462092.521587 [0] tev: non-timed queue now has 2 items -1711462092.521597 [0] tev: xmit spdp 110cd0d:e3b81b8d:1ccb65b1:1c1 to 110e21c:d0762c48:a9f0fb28:100c7 (resched 1s) -1711462092.521613 [0] tev: non-timed queue now has 3 items -1711462092.521622 [0] tev: xmit spdp 110cd0d:79d6eeac:ea4a8907:1c1 to 110e21c:d0762c48:a9f0fb28:100c7 (resched 1s) -1711462092.521634 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 460 -1711462092.521644 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(data(0:0:0:0:#0/1)): niov 3 sz 460 => now niov 6 sz 908 -1711462092.521652 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(data(0:0:0:0:#0/1)): niov 6 sz 908 => now niov 9 sz 1356 -1711462092.521717 [0] tev: nn_xpack_send 1356: 0x7408c000139c:20 0x7408bc009968:52 0x7408ac009c94:388 0x7408bc0097d0:24 0x7408bc0097f8:36 0x7408d401eea4:388 0x7408bc0094d0:24 0x7408bc0094f8:36 0x7408e000a504:388 [ udp/10.101.12.71:7412@2 ] -1711462092.521726 [0] tev: traffic-xmit (1) 1356 -1711462092.543382 [0] tev: non-timed queue now has 1 items -1711462092.543421 [0] tev: xmit spdp 110cd0d:56a27910:57318171:1c1 to 110d7b4:17c5b8c5:94bd0ff4:100c7 (resched 1s) -1711462092.543440 [0] tev: non-timed queue now has 2 items -1711462092.543449 [0] tev: xmit spdp 110cd0d:e3b81b8d:1ccb65b1:1c1 to 110d7b4:17c5b8c5:94bd0ff4:100c7 (resched 1s) -1711462092.543464 [0] tev: non-timed queue now has 3 items -1711462092.543473 [0] tev: xmit spdp 110cd0d:79d6eeac:ea4a8907:1c1 to 110d7b4:17c5b8c5:94bd0ff4:100c7 (resched 1s) -1711462092.543484 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 460 -1711462092.543493 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(data(0:0:0:0:#0/1)): niov 3 sz 460 => now niov 6 sz 908 -1711462092.543501 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(data(0:0:0:0:#0/1)): niov 6 sz 908 => now niov 9 sz 1356 -1711462092.543556 [0] tev: nn_xpack_send 1356: 0x7408c000139c:20 0x7408bc009968:52 0x7408ac009c94:388 0x7408bc0097d0:24 0x7408bc0097f8:36 0x7408d401eea4:388 0x7408bc0094d0:24 0x7408bc0094f8:36 0x7408e000a504:388 [ udp/10.101.12.71:7414@2 ] -1711462092.543566 [0] tev: traffic-xmit (1) 1356 -1711462092.550845 [0] tev: non-timed queue now has 1 items -1711462092.550923 [0] tev: xmit spdp 110cd0d:56a27910:57318171:1c1 to 110443d:bb7f10a5:18901533:100c7 (resched 1s) -1711462092.550955 [0] tev: non-timed queue now has 2 items -1711462092.550972 [0] tev: xmit spdp 110cd0d:e3b81b8d:1ccb65b1:1c1 to 110443d:bb7f10a5:18901533:100c7 (resched 1s) -1711462092.550997 [0] tev: non-timed queue now has 3 items -1711462092.551012 [0] tev: xmit spdp 110cd0d:79d6eeac:ea4a8907:1c1 to 110443d:bb7f10a5:18901533:100c7 (resched 1s) -1711462092.551030 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 460 -1711462092.551055 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(data(0:0:0:0:#0/1)): niov 3 sz 460 => now niov 6 sz 908 -1711462092.551070 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(data(0:0:0:0:#0/1)): niov 6 sz 908 => now niov 9 sz 1356 -1711462092.551164 [0] tev: nn_xpack_send 1356: 0x7408c000139c:20 0x7408bc009968:52 0x7408ac009c94:388 0x7408bc0097d0:24 0x7408bc0097f8:36 0x7408d401eea4:388 0x7408bc0094d0:24 0x7408bc0094f8:36 0x7408e000a504:388 [ udp/10.101.12.71:7416@2 ] -1711462092.551185 [0] tev: traffic-xmit (1) 1356 -1711462092.572987 [0] tev: non-timed queue now has 1 items -1711462092.573068 [0] tev: xmit spdp 110cd0d:56a27910:57318171:1c1 to 110aba1:7b19badd:ce0adb73:100c7 (resched 1s) -1711462092.573102 [0] tev: non-timed queue now has 2 items -1711462092.573121 [0] tev: xmit spdp 110cd0d:e3b81b8d:1ccb65b1:1c1 to 110aba1:7b19badd:ce0adb73:100c7 (resched 1s) -1711462092.573189 [0] tev: non-timed queue now has 3 items -1711462092.573207 [0] tev: xmit spdp 110cd0d:79d6eeac:ea4a8907:1c1 to 110aba1:7b19badd:ce0adb73:100c7 (resched 1s) -1711462092.573229 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 460 -1711462092.573246 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(data(0:0:0:0:#0/1)): niov 3 sz 460 => now niov 6 sz 908 -1711462092.573262 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(data(0:0:0:0:#0/1)): niov 6 sz 908 => now niov 9 sz 1356 -1711462092.573367 [0] tev: nn_xpack_send 1356: 0x7408c000139c:20 0x7408bc009968:52 0x7408ac009c94:388 0x7408bc0097d0:24 0x7408bc0097f8:36 0x7408d401eea4:388 0x7408bc0094d0:24 0x7408bc0094f8:36 0x7408e000a504:388 [ udp/10.101.12.71:7418@2 ] -1711462092.573386 [0] tev: traffic-xmit (1) 1356 -1711462093.521681 [0] tev: thread_cputime 0.020693000 -1711462093.521827 [0] tev: non-timed queue now has 1 items -1711462093.521867 [0] tev: non-timed queue now has 2 items -1711462093.521897 [0] tev: non-timed queue now has 3 items -1711462093.521926 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 460 -1711462093.521944 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(data(0:0:0:0:#0/1)): niov 3 sz 460 => now niov 6 sz 908 -1711462093.521960 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(data(0:0:0:0:#0/1)): niov 6 sz 908 => now niov 9 sz 1356 -1711462093.522086 [0] tev: nn_xpack_send 1356: 0x7408c000139c:20 0x7408bc009968:52 0x7408ac009c94:388 0x7408bc0097d0:24 0x7408bc0097f8:36 0x7408d401eea4:388 0x7408bc0094d0:24 0x7408bc0094f8:36 0x7408e000a504:388 [ udp/10.101.12.71:7412@2 ] -1711462093.522104 [0] tev: traffic-xmit (1) 1356 -1711462093.543589 [0] tev: non-timed queue now has 1 items -1711462093.543640 [0] tev: non-timed queue now has 2 items -1711462093.543659 [0] tev: non-timed queue now has 3 items -1711462093.543674 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 460 -1711462093.543684 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(data(0:0:0:0:#0/1)): niov 3 sz 460 => now niov 6 sz 908 -1711462093.543694 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(data(0:0:0:0:#0/1)): niov 6 sz 908 => now niov 9 sz 1356 -1711462093.543761 [0] tev: nn_xpack_send 1356: 0x7408c000139c:20 0x7408bc009968:52 0x7408ac009c94:388 0x7408bc0097d0:24 0x7408bc0097f8:36 0x7408d401eea4:388 0x7408bc0094d0:24 0x7408bc0094f8:36 0x7408e000a504:388 [ udp/10.101.12.71:7414@2 ] -1711462093.543772 [0] tev: traffic-xmit (1) 1356 -1711462093.551059 [0] tev: non-timed queue now has 1 items -1711462093.551144 [0] tev: non-timed queue now has 2 items -1711462093.551176 [0] tev: non-timed queue now has 3 items -1711462093.551200 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 460 -1711462093.551217 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(data(0:0:0:0:#0/1)): niov 3 sz 460 => now niov 6 sz 908 -1711462093.551232 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(data(0:0:0:0:#0/1)): niov 6 sz 908 => now niov 9 sz 1356 -1711462093.551328 [0] tev: nn_xpack_send 1356: 0x7408c000139c:20 0x7408bc009968:52 0x7408ac009c94:388 0x7408bc0097d0:24 0x7408bc0097f8:36 0x7408d401eea4:388 0x7408bc0094d0:24 0x7408bc0094f8:36 0x7408e000a504:388 [ udp/10.101.12.71:7416@2 ] -1711462093.551345 [0] tev: traffic-xmit (1) 1356 -1711462093.573072 [0] tev: non-timed queue now has 1 items -1711462093.573141 [0] tev: non-timed queue now has 2 items -1711462093.573172 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 460 -1711462093.573201 [0] tev: non-timed queue now has 2 items -1711462093.573254 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(data(0:0:0:0:#0/1)): niov 3 sz 460 => now niov 6 sz 908 -1711462093.573272 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(data(0:0:0:0:#0/1)): niov 6 sz 908 => now niov 9 sz 1356 -1711462093.573376 [0] tev: nn_xpack_send 1356: 0x7408c000139c:20 0x7408bc009968:52 0x7408ac009c94:388 0x7408bc0097d0:24 0x7408bc0097f8:36 0x7408d401eea4:388 0x7408bc0094d0:24 0x7408bc0094f8:36 0x7408e000a504:388 [ udp/10.101.12.71:7418@2 ] -1711462093.573394 [0] tev: traffic-xmit (1) 1356 -1711462093.654337 [0] tev: write_sample 110cd0d:79d6eeac:ea4a8907:200c2 #4: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:79d6eeac:ea4a8907:1}:1<0> -1711462093.654441 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(110cd0d:79d6eeac:ea4a8907:200c2:#4/1)): niov 0 sz 0 => now niov 3 sz 84 -1711462093.654465 [0] tev: writer_hbcontrol: wr 110cd0d:79d6eeac:ea4a8907:200c2 multicasting (rel-prd 4 seq-eq-max 4 seq 4 maxseq 3) -1711462093.654492 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:200c2) piggybacked, resched in 0.1 s (min-ack 3, avail-seq 4, xmit 3) -1711462093.654509 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 3 sz 84 => now niov 4 sz 116 -1711462093.654709 [0] tev: nn_xpack_send 116: 0x7408c000139c:20 0x7408bc009978:36 0x7408c804e65c:28 0x7408bc0097f8:32 [ udp/239.255.0.1:7400@2 ] -1711462093.654728 [0] tev: traffic-xmit (1) 116 -1711462093.654766 [0] tev: resched pmd(110cd0d:79d6eeac:ea4a8907:1c1): 8s -1711462093.654843 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462093.654910 [0] recv: INFOTS(1711462093.654299867) -1711462093.654937 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:200c2 -> 0:0:0:0 #4 110cd0d:79d6eeac:ea4a8907:200c2? -> 0:0:0:0) -1711462093.654957 [0] recv: HEARTBEAT(#21:4..4 110cd0d:79d6eeac:ea4a8907:200c2? -> 0:0:0:0) -1711462093.654989 [0] recv: thread_cputime 0.049123000 -1711462093.655401 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462093.655450 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462093.655498 [0] recv: ACKNACK(F#3:5/0: L(:1c1 16941.314947) 110d7b4:17c5b8c5:94bd0ff4:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 ACK1 RM0) -1711462093.655563 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462093.655582 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462093.655610 [0] recv: ACKNACK(F#3:5/0: L(:1c1 16941.315083) 110e21c:d0762c48:a9f0fb28:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 ACK1 RM0) -1711462093.655757 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462093.655794 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462093.655823 [0] recv: ACKNACK(F#3:5/0: L(:1c1 16941.315293) 110443d:bb7f10a5:18901533:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 ACK1 RM0) -1711462093.655854 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462093.655867 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462093.655889 [0] recv: ACKNACK(F#3:5/0: L(:1c1 16941.315368) 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 ACK1 RM0) -1711462093.754040 [0] tev: non-timed queue now has 1 items -1711462093.754105 [0] tev: xmit spdp 110cd0d:79d6eeac:ea4a8907:1c1 to 0:0:0:100c7 (resched 8s) -1711462093.754124 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 444 -1711462093.754293 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462093.754337 [0] recv: INFOTS(1711462069.653526636) -1711462093.754359 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 0:0:0:0 #1) -1711462093.754379 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462093.754385 [0] recv: INFOTS(1711462069.653526636) -1711462093.754414 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 0:0:0:0 #1) -1711462093.754449 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462093.754484 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (local) -1711462093.754495 [0] dq.builtin: thread_cputime 0.018726000 -1711462093.754527 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462093.754538 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (local) -1711462093.755517 [0] tev: nn_xpack_send 444: 0x7408c000139c:20 0x7408bc009978:36 0x7408e000a504:388 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.(trunc) -1711462093.755536 [0] tev: traffic-xmit (101) 444 -1711462093.755552 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:200c2) suppressed, resched in inf s (min-ack 4, avail-seq 4, xmit 4) -1711462098.143916 [0] tev: thread_cputime 0.022373000 -1711462098.144091 [0] tev: write_sample 110cd0d:56a27910:57318171:200c2 #2: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:56a27910:57318171:1}:1<0> -1711462098.144165 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(110cd0d:56a27910:57318171:200c2:#2/1)): niov 0 sz 0 => now niov 3 sz 84 -1711462098.144189 [0] tev: writer_hbcontrol: wr 110cd0d:56a27910:57318171:200c2 multicasting (rel-prd 4 seq-eq-max 4 seq 2 maxseq 1) -1711462098.144216 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:200c2) piggybacked, resched in 0.1 s (min-ack 1, avail-seq 2, xmit 1) -1711462098.144234 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 3 sz 84 => now niov 4 sz 116 -1711462098.144435 [0] tev: nn_xpack_send 116: 0x7408c000139c:20 0x7408bc009978:36 0x7408c800d1dc:28 0x7408bc0097f8:32 [ udp/239.255.0.1:7400@2 ] -1711462098.144457 [0] tev: traffic-xmit (1) 116 -1711462098.144477 [0] tev: resched pmd(110cd0d:56a27910:57318171:1c1): 8s -1711462098.144605 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462098.144722 [0] recv: INFOTS(1711462098.144063519) -1711462098.144773 [0] recv: DATA(110cd0d:56a27910:57318171:200c2 -> 0:0:0:0 #2 110cd0d:56a27910:57318171:200c2? -> 0:0:0:0) -1711462098.144792 [0] recv: HEARTBEAT(#9:2..2 110cd0d:56a27910:57318171:200c2? -> 0:0:0:0) -1711462098.144814 [0] recv: thread_cputime 0.050257000 -1711462098.145525 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462098.145586 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462098.145636 [0] recv: ACKNACK(F#3:3/0: L(:1c1 16945.805082) 110443d:bb7f10a5:18901533:200c7 -> 110cd0d:56a27910:57318171:200c2 ACK1 RM0) -1711462098.145665 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462098.145674 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462098.145690 [0] recv: ACKNACK(F#3:3/0: L(:1c1 16945.805176) 110e21c:d0762c48:a9f0fb28:200c7 -> 110cd0d:56a27910:57318171:200c2 ACK1 RM0) -1711462098.145706 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462098.145714 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462098.145729 [0] recv: ACKNACK(F#3:3/0: L(:1c1 16945.805217) 110d7b4:17c5b8c5:94bd0ff4:200c7 -> 110cd0d:56a27910:57318171:200c2 ACK1 RM0) -1711462098.145742 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462098.145750 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462098.145762 [0] recv: ACKNACK(F#3:3/0: L(:1c1 16945.805252) 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:56a27910:57318171:200c2 ACK1 RM0) -1711462098.244012 [0] tev: non-timed queue now has 1 items -1711462098.244120 [0] tev: xmit spdp 110cd0d:56a27910:57318171:1c1 to 0:0:0:100c7 (resched 8s) -1711462098.244150 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:200c2) suppressed, resched in inf s (min-ack 2, avail-seq 2, xmit 2) -1711462098.244174 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 444 -1711462098.244538 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462098.244608 [0] recv: INFOTS(1711462090.143481252) -1711462098.244649 [0] recv: DATA(110cd0d:56a27910:57318171:100c2 -> 0:0:0:0 #1) -1711462098.244677 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462098.244690 [0] recv: INFOTS(1711462090.143481252) -1711462098.244705 [0] recv: DATA(110cd0d:56a27910:57318171:100c2 -> 0:0:0:0 #1) -1711462098.244830 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:56a27910:57318171:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.244930 [0] dq.builtin: SPDP ST0 110cd0d:56a27910:57318171:1c1 (local) -1711462098.244995 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:56a27910:57318171:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.245021 [0] dq.builtin: SPDP ST0 110cd0d:56a27910:57318171:1c1 (local) -1711462098.245043 [0] dq.builtin: thread_cputime 0.018775000 -1711462098.246115 [0] tev: nn_xpack_send 444: 0x7408c000139c:20 0x7408bc009978:36 0x7408ac009c94:388 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.(trunc) -1711462098.246139 [0] tev: traffic-xmit (101) 444 -1711462098.520149 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 116 from udp/10.101.12.71:58212 -1711462098.520218 [0] recv: INFOTS(1711462098.519615324) -1711462098.520261 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:200c2 -> 0:0:0:0 #2 L(:1c1 16946.179717)) -1711462098.520300 [0] recv: HEARTBEAT(#10:2..2 110e21c:d0762c48:a9f0fb28:200c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:200c7@2(sync) 110cd0d:e3b81b8d:1ccb65b1:200c7@2(sync) 110cd0d:79d6eeac:ea4a8907:200c7@2(sync)) -1711462098.520431 [0] tev: acknack 110cd0d:56a27910:57318171:200c7 -> 110e21c:d0762c48:a9f0fb28:200c2: F#3:3/0: -1711462098.520468 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:200c2 #2: ST0 DCPSParticipantMessage/ParticipantMessageData:{110e21c:d0762c48:a9f0fb28:1}:1<0> -1711462098.520601 [0] dq.builtin: PMD ST0 pp 110e21c:d0762c48:a9f0fb28 kind 1 data 1 -1711462098.520526 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:200c7 -> pwr 110e21c:d0762c48:a9f0fb28:200c2) -1711462098.520721 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462098.520754 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:200c7 -> 110e21c:d0762c48:a9f0fb28:200c2: F#8:3/0: -1711462098.520771 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:200c7 -> pwr 110e21c:d0762c48:a9f0fb28:200c2) -1711462098.520786 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462098.520808 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:200c7 -> 110e21c:d0762c48:a9f0fb28:200c2: F#7:3/0: -1711462098.520823 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:200c7 -> pwr 110e21c:d0762c48:a9f0fb28:200c2) -1711462098.520838 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462098.520927 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc009968:44 0x7408bc0097d0:24 0x7408bc0097f8:28 0x7408bc0094d0:24 0x7408bc0094f8:28 [ udp/10.101.12.71:7412@2 ] -1711462098.520946 [0] tev: traffic-xmit (1) 168 -1711462098.542401 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 116 from udp/10.101.12.71:40473 -1711462098.542466 [0] recv: INFOTS(1711462098.541939305) -1711462098.542537 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:200c2 -> 0:0:0:0 #2 L(:1c1 16946.201965)) -1711462098.542592 [0] recv: HEARTBEAT(#8:2..2 110d7b4:17c5b8c5:94bd0ff4:200c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:200c7@2(sync) 110cd0d:e3b81b8d:1ccb65b1:200c7@2(sync) 110cd0d:79d6eeac:ea4a8907:200c7@2(sync)) -1711462098.542699 [0] tev: acknack 110cd0d:56a27910:57318171:200c7 -> 110d7b4:17c5b8c5:94bd0ff4:200c2: F#3:3/0: -1711462098.542757 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:200c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462098.542735 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:200c2 #2: ST0 DCPSParticipantMessage/ParticipantMessageData:{110d7b4:17c5b8c5:94bd0ff4:1}:1<0> -1711462098.542846 [0] dq.builtin: PMD ST0 pp 110d7b4:17c5b8c5:94bd0ff4 kind 1 data 1 -1711462098.542784 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462098.542963 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:200c7 -> 110d7b4:17c5b8c5:94bd0ff4:200c2: F#8:3/0: -1711462098.542985 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:200c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462098.543002 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462098.543021 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:200c7 -> 110d7b4:17c5b8c5:94bd0ff4:200c2: F#6:3/0: -1711462098.543034 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:200c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462098.543047 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462098.543112 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc009968:44 0x7408bc0097d0:24 0x7408bc0097f8:28 0x7408bc0094d0:24 0x7408bc0094f8:28 [ udp/10.101.12.71:7414@2 ] -1711462098.543130 [0] tev: traffic-xmit (1) 168 -1711462098.549783 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 116 from udp/10.101.12.71:44991 -1711462098.549839 [0] recv: INFOTS(1711462098.549450527) -1711462098.549895 [0] recv: DATA(110443d:bb7f10a5:18901533:200c2 -> 0:0:0:0 #2 L(:1c1 16946.209338)) -1711462098.549937 [0] recv: HEARTBEAT(#8:2..2 110443d:bb7f10a5:18901533:200c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:200c7@2(sync) 110cd0d:e3b81b8d:1ccb65b1:200c7@2(sync) 110cd0d:79d6eeac:ea4a8907:200c7@2(sync)) -1711462098.550039 [0] tev: acknack 110cd0d:56a27910:57318171:200c7 -> 110443d:bb7f10a5:18901533:200c2: F#4:3/0: -1711462098.550120 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:200c7 -> pwr 110443d:bb7f10a5:18901533:200c2) -1711462098.550165 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462098.550189 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:200c7 -> 110443d:bb7f10a5:18901533:200c2: F#9:3/0: -1711462098.550204 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:200c7 -> pwr 110443d:bb7f10a5:18901533:200c2) -1711462098.550220 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462098.550257 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:200c7 -> 110443d:bb7f10a5:18901533:200c2: F#7:3/0: -1711462098.550074 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:200c2 #2: ST0 DCPSParticipantMessage/ParticipantMessageData:{110443d:bb7f10a5:18901533:1}:1<0> -1711462098.550548 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:200c7 -> pwr 110443d:bb7f10a5:18901533:200c2) -1711462098.550566 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462098.550632 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc009968:44 0x7408bc0097d0:24 0x7408bc0097f8:28 0x7408bc0094d0:24 0x7408bc0094f8:28 [ udp/10.101.12.71:7416@2 ] -1711462098.550649 [0] tev: traffic-xmit (1) 168 -1711462098.550695 [0] dq.builtin: PMD ST0 pp 110443d:bb7f10a5:18901533 kind 1 data 1 -1711462098.570830 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 116 from udp/10.101.12.71:52025 -1711462098.570866 [0] recv: INFOTS(1711462098.570608394) -1711462098.570880 [0] recv: DATA(110aba1:7b19badd:ce0adb73:200c2 -> 0:0:0:0 #2 L(:1c1 16946.230367)) -1711462098.570895 [0] recv: HEARTBEAT(#6:2..2 110aba1:7b19badd:ce0adb73:200c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:200c7@2(sync) 110cd0d:e3b81b8d:1ccb65b1:200c7@2(sync) 110cd0d:79d6eeac:ea4a8907:200c7@2(sync)) -1711462098.570930 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:200c2 #2: ST0 DCPSParticipantMessage/ParticipantMessageData:{110aba1:7b19badd:ce0adb73:1}:1<0> -1711462098.570963 [0] tev: acknack 110cd0d:56a27910:57318171:200c7 -> 110aba1:7b19badd:ce0adb73:200c2: F#3:3/0: -1711462098.570994 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:200c7 -> pwr 110aba1:7b19badd:ce0adb73:200c2) -1711462098.570966 [0] dq.builtin: PMD ST0 pp 110aba1:7b19badd:ce0adb73 kind 1 data 1 -1711462098.571008 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462098.571046 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:200c7 -> 110aba1:7b19badd:ce0adb73:200c2: F#9:3/0: -1711462098.571054 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:200c7 -> pwr 110aba1:7b19badd:ce0adb73:200c2) -1711462098.571061 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462098.571074 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:200c7 -> 110aba1:7b19badd:ce0adb73:200c2: F#7:3/0: -1711462098.571082 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:200c7 -> pwr 110aba1:7b19badd:ce0adb73:200c2) -1711462098.571090 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462098.571135 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc009968:44 0x7408bc0097d0:24 0x7408bc0097f8:28 0x7408bc0094d0:24 0x7408bc0094f8:28 [ udp/10.101.12.71:7418@2 ] -1711462098.571148 [0] tev: traffic-xmit (1) 168 -1711462098.620188 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 444 from udp/10.101.12.71:58212 -1711462098.620217 [0] recv: INFOTS(1711462090.519442682) -1711462098.620239 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #1) -1711462098.620261 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 444 from udp/10.101.12.71:58212 -1711462098.620273 [0] recv: INFOTS(1711462090.519442682) -1711462098.620329 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #1) -1711462098.620488 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.620611 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16946.280106) -1711462098.620676 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.620702 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16946.280201) -1711462098.642287 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 444 from udp/10.101.12.71:40473 -1711462098.642318 [0] recv: INFOTS(1711462090.541682763) -1711462098.642345 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 0:0:0:0 #1) -1711462098.642374 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 444 from udp/10.101.12.71:40473 -1711462098.642387 [0] recv: INFOTS(1711462090.541682763) -1711462098.642417 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 0:0:0:0 #1) -1711462098.642606 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.642696 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16946.302191) -1711462098.642760 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.642786 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16946.302285) -1711462098.649984 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 444 from udp/10.101.12.71:44991 -1711462098.650030 [0] recv: INFOTS(1711462090.549308855) -1711462098.650100 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #1) -1711462098.650114 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 444 from udp/10.101.12.71:44991 -1711462098.650126 [0] recv: INFOTS(1711462090.549308855) -1711462098.650133 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #1) -1711462098.650331 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.650393 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16946.309891) -1711462098.650440 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.650459 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16946.309959) -1711462098.670809 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462098.670838 [0] recv: INFOTS(1711462090.570393375) -1711462098.670853 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462098.670866 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462098.670870 [0] recv: INFOTS(1711462090.570393375) -1711462098.670875 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462098.670981 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.671012 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (known) L(:1c1 16946.330512) -1711462098.671048 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462098.671077 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (known) L(:1c1 16946.330578) -1711462099.906039 [0] tev: thread_cputime 0.027066000 -1711462099.906177 [0] tev: write_sample 110cd0d:e3b81b8d:1ccb65b1:200c2 #5: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:e3b81b8d:1ccb65b1:1}:1<0> -1711462099.906479 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(110cd0d:e3b81b8d:1ccb65b1:200c2:#5/1)): niov 0 sz 0 => now niov 3 sz 84 -1711462099.906502 [0] tev: writer_hbcontrol: wr 110cd0d:e3b81b8d:1ccb65b1:200c2 multicasting (rel-prd 4 seq-eq-max 4 seq 5 maxseq 4) -1711462099.906522 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:200c2) piggybacked, resched in 0.1 s (min-ack 4, avail-seq 5, xmit 4) -1711462099.906535 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 3 sz 84 => now niov 4 sz 116 -1711462099.906689 [0] tev: nn_xpack_send 116: 0x7408c000139c:20 0x7408bc009978:36 0x7408c800f16c:28 0x7408bc0097f8:32 [ udp/239.255.0.1:7400@2 ] -1711462099.906706 [0] tev: traffic-xmit (1) 116 -1711462099.906716 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462099.906779 [0] recv: INFOTS(1711462099.906152938) -1711462099.906817 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:200c2 -> 0:0:0:0 #5 110cd0d:e3b81b8d:1ccb65b1:200c2? -> 0:0:0:0) -1711462099.906833 [0] recv: HEARTBEAT(#30:5..5 110cd0d:e3b81b8d:1ccb65b1:200c2? -> 0:0:0:0) -1711462099.906849 [0] recv: thread_cputime 0.050832000 -1711462099.906722 [0] tev: resched pmd(110cd0d:e3b81b8d:1ccb65b1:1c1): 8s -1711462099.907036 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462099.907051 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462099.907090 [0] recv: ACKNACK(F#4:6/0: L(:1c1 16947.566551) 110443d:bb7f10a5:18901533:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 ACK1 RM0) -1711462099.907112 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462099.907139 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462099.907159 [0] recv: ACKNACK(F#4:6/0: L(:1c1 16947.566642) 110d7b4:17c5b8c5:94bd0ff4:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 ACK1 RM0) -1711462099.907175 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462099.907182 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462099.907193 [0] recv: ACKNACK(F#4:6/0: L(:1c1 16947.566686) 110e21c:d0762c48:a9f0fb28:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 ACK1 RM0) -1711462099.907356 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462099.907364 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462099.907375 [0] recv: ACKNACK(F#4:6/0: L(:1c1 16947.566867) 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 ACK1 RM0) -1711462100.006242 [0] tev: non-timed queue now has 1 items -1711462100.006339 [0] tev: xmit spdp 110cd0d:e3b81b8d:1ccb65b1:1c1 to 0:0:0:100c7 (resched 8s) -1711462100.006364 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:200c2) suppressed, resched in inf s (min-ack 5, avail-seq 5, xmit 5) -1711462100.006383 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 444 -1711462100.006577 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462100.006641 [0] recv: INFOTS(1711462067.905323275) -1711462100.006667 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 0:0:0:0 #1) -1711462100.006866 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462100.006876 [0] recv: INFOTS(1711462067.905323275) -1711462100.006885 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 0:0:0:0 #1) -1711462100.006918 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462100.007009 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (local) -1711462100.007029 [0] dq.builtin: thread_cputime 0.020966000 -1711462100.007074 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462100.007099 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (local) -1711462100.008351 [0] tev: nn_xpack_send 444: 0x7408c000139c:20 0x7408bc009978:36 0x7408d401eea4:388 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.(trunc) -1711462100.008374 [0] tev: traffic-xmit (101) 444 -1711462100.520365 [0] gc: thread_cputime 0.022248000 -1711462101.654569 [0] tev: thread_cputime 0.029555000 -1711462101.654722 [0] tev: write_sample 110cd0d:79d6eeac:ea4a8907:200c2 #5: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:79d6eeac:ea4a8907:1}:1<0> -1711462101.654772 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(110cd0d:79d6eeac:ea4a8907:200c2:#5/1)): niov 0 sz 0 => now niov 3 sz 84 -1711462101.654793 [0] tev: writer_hbcontrol: wr 110cd0d:79d6eeac:ea4a8907:200c2 multicasting (rel-prd 4 seq-eq-max 4 seq 5 maxseq 4) -1711462101.654853 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:200c2) piggybacked, resched in 0.1 s (min-ack 4, avail-seq 5, xmit 4) -1711462101.654871 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 3 sz 84 => now niov 4 sz 116 -1711462101.655067 [0] tev: nn_xpack_send 116: 0x7408c000139c:20 0x7408bc009978:36 0x7408c8038f6c:28 0x7408bc0097f8:32 [ udp/239.255.0.1:7400@2 ] -1711462101.655090 [0] tev: traffic-xmit (1) 116 -1711462101.655110 [0] tev: resched pmd(110cd0d:79d6eeac:ea4a8907:1c1): 8s -1711462101.655193 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462101.655283 [0] recv: INFOTS(1711462101.654695551) -1711462101.655309 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:200c2 -> 0:0:0:0 #5 110cd0d:79d6eeac:ea4a8907:200c2? -> 0:0:0:0) -1711462101.655322 [0] recv: HEARTBEAT(#22:5..5 110cd0d:79d6eeac:ea4a8907:200c2? -> 0:0:0:0) -1711462101.655345 [0] recv: thread_cputime 0.051418000 -1711462101.655644 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462101.655688 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462101.655725 [0] recv: ACKNACK(F#4:6/0: L(:1c1 16949.315187) 110443d:bb7f10a5:18901533:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 ACK1 RM0) -1711462101.655753 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462101.655781 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462101.655806 [0] recv: ACKNACK(F#4:6/0: L(:1c1 16949.315283) 110d7b4:17c5b8c5:94bd0ff4:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 ACK1 RM0) -1711462101.655832 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462101.655840 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462101.655859 [0] recv: ACKNACK(F#4:6/0: L(:1c1 16949.315343) 110e21c:d0762c48:a9f0fb28:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 ACK1 RM0) -1711462101.655922 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462101.655935 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462101.655950 [0] recv: ACKNACK(F#4:6/0: L(:1c1 16949.315437) 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 ACK1 RM0) -1711462101.754274 [0] tev: non-timed queue now has 1 items -1711462101.754368 [0] tev: xmit spdp 110cd0d:79d6eeac:ea4a8907:1c1 to 0:0:0:100c7 (resched 8s) -1711462101.754394 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 444 -1711462101.754614 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462101.754683 [0] recv: INFOTS(1711462069.653526636) -1711462101.754735 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 0:0:0:0 #1) -1711462101.754761 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462101.754778 [0] recv: INFOTS(1711462069.653526636) -1711462101.754792 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 0:0:0:0 #1) -1711462101.754985 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462101.755063 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (local) -1711462101.755170 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462101.755223 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (local) -1711462101.755245 [0] dq.builtin: thread_cputime 0.021307000 -1711462101.756482 [0] tev: nn_xpack_send 444: 0x7408c000139c:20 0x7408bc009978:36 0x7408e000a504:388 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.(trunc) -1711462101.756537 [0] tev: traffic-xmit (101) 444 -1711462101.756562 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:200c2) suppressed, resched in inf s (min-ack 5, avail-seq 5, xmit 5) -1711462106.144086 [0] tev: thread_cputime 0.032640000 -1711462106.144192 [0] tev: write_sample 110cd0d:56a27910:57318171:200c2 #3: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:56a27910:57318171:1}:1<0> -1711462106.144229 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(110cd0d:56a27910:57318171:200c2:#3/1)): niov 0 sz 0 => now niov 3 sz 84 -1711462106.144244 [0] tev: writer_hbcontrol: wr 110cd0d:56a27910:57318171:200c2 multicasting (rel-prd 4 seq-eq-max 4 seq 3 maxseq 2) -1711462106.144261 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:200c2) piggybacked, resched in 0.1 s (min-ack 2, avail-seq 3, xmit 2) -1711462106.144273 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 3 sz 84 => now niov 4 sz 116 -1711462106.144408 [0] tev: nn_xpack_send 116: 0x7408c000139c:20 0x7408bc009978:36 0x7408c804e65c:28 0x7408bc0097f8:32 [ udp/239.255.0.1:7400@2 ] -1711462106.144422 [0] tev: traffic-xmit (1) 116 -1711462106.144447 [0] tev: resched pmd(110cd0d:56a27910:57318171:1c1): 8s -1711462106.144549 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462106.144618 [0] recv: INFOTS(1711462106.144172669) -1711462106.144645 [0] recv: DATA(110cd0d:56a27910:57318171:200c2 -> 0:0:0:0 #3 110cd0d:56a27910:57318171:200c2? -> 0:0:0:0) -1711462106.144659 [0] recv: HEARTBEAT(#10:3..3 110cd0d:56a27910:57318171:200c2? -> 0:0:0:0) -1711462106.144674 [0] recv: thread_cputime 0.052353000 -1711462106.144945 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462106.144974 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462106.145003 [0] recv: ACKNACK(F#4:4/0: L(:1c1 16953.804473) 110d7b4:17c5b8c5:94bd0ff4:200c7 -> 110cd0d:56a27910:57318171:200c2 ACK1 RM0) -1711462106.145028 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462106.145046 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462106.145062 [0] recv: ACKNACK(F#4:4/0: L(:1c1 16953.804548) 110e21c:d0762c48:a9f0fb28:200c7 -> 110cd0d:56a27910:57318171:200c2 ACK1 RM0) -1711462106.145081 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462106.145091 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462106.145105 [0] recv: ACKNACK(F#4:4/0: L(:1c1 16953.804593) 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:56a27910:57318171:200c2 ACK1 RM0) -1711462106.145122 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462106.145133 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462106.145147 [0] recv: ACKNACK(F#4:4/0: L(:1c1 16953.804635) 110443d:bb7f10a5:18901533:200c7 -> 110cd0d:56a27910:57318171:200c2 ACK1 RM0) -1711462106.244177 [0] tev: non-timed queue now has 1 items -1711462106.244239 [0] tev: xmit spdp 110cd0d:56a27910:57318171:1c1 to 0:0:0:100c7 (resched 8s) -1711462106.244257 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:200c2) suppressed, resched in inf s (min-ack 3, avail-seq 3, xmit 3) -1711462106.244271 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 444 -1711462106.244457 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462106.244488 [0] recv: INFOTS(1711462090.143481252) -1711462106.244537 [0] recv: DATA(110cd0d:56a27910:57318171:100c2 -> 0:0:0:0 #1) -1711462106.244560 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462106.244581 [0] recv: INFOTS(1711462090.143481252) -1711462106.244595 [0] recv: DATA(110cd0d:56a27910:57318171:100c2 -> 0:0:0:0 #1) -1711462106.244661 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:56a27910:57318171:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.244711 [0] dq.builtin: SPDP ST0 110cd0d:56a27910:57318171:1c1 (local) -1711462106.244736 [0] dq.builtin: thread_cputime 0.021725000 -1711462106.244775 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:56a27910:57318171:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.244811 [0] dq.builtin: SPDP ST0 110cd0d:56a27910:57318171:1c1 (local) -1711462106.245770 [0] tev: nn_xpack_send 444: 0x7408c000139c:20 0x7408bc009978:36 0x7408ac009c94:388 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.(trunc) -1711462106.245790 [0] tev: traffic-xmit (101) 444 -1711462106.520045 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 116 from udp/10.101.12.71:58212 -1711462106.520082 [0] recv: INFOTS(1711462106.519773993) -1711462106.520113 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:200c2 -> 0:0:0:0 #3 L(:1c1 16954.179582)) -1711462106.520137 [0] recv: HEARTBEAT(#11:3..3 110e21c:d0762c48:a9f0fb28:200c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:200c7@3(sync) 110cd0d:e3b81b8d:1ccb65b1:200c7@3(sync) 110cd0d:79d6eeac:ea4a8907:200c7@3(sync)) -1711462106.520229 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:200c2 #3: ST0 DCPSParticipantMessage/ParticipantMessageData:{110e21c:d0762c48:a9f0fb28:1}:1<0> -1711462106.520260 [0] dq.builtin: PMD ST0 pp 110e21c:d0762c48:a9f0fb28 kind 1 data 1 -1711462106.520230 [0] tev: acknack 110cd0d:56a27910:57318171:200c7 -> 110e21c:d0762c48:a9f0fb28:200c2: F#4:4/0: -1711462106.520344 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:200c7 -> pwr 110e21c:d0762c48:a9f0fb28:200c2) -1711462106.520357 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462106.520369 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:200c7 -> 110e21c:d0762c48:a9f0fb28:200c2: F#9:4/0: -1711462106.520378 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:200c7 -> pwr 110e21c:d0762c48:a9f0fb28:200c2) -1711462106.520385 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462106.520395 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:200c7 -> 110e21c:d0762c48:a9f0fb28:200c2: F#8:4/0: -1711462106.520416 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:200c7 -> pwr 110e21c:d0762c48:a9f0fb28:200c2) -1711462106.520422 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462106.520457 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc009968:44 0x7408bc0097d0:24 0x7408bc0097f8:28 0x7408bc0094d0:24 0x7408bc0094f8:28 [ udp/10.101.12.71:7412@2 ] -1711462106.520465 [0] tev: traffic-xmit (1) 168 -1711462106.542274 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 116 from udp/10.101.12.71:40473 -1711462106.542310 [0] recv: INFOTS(1711462106.542026862) -1711462106.542327 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:200c2 -> 0:0:0:0 #3 L(:1c1 16954.201811)) -1711462106.542350 [0] recv: HEARTBEAT(#9:3..3 110d7b4:17c5b8c5:94bd0ff4:200c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:200c7@3(sync) 110cd0d:e3b81b8d:1ccb65b1:200c7@3(sync) 110cd0d:79d6eeac:ea4a8907:200c7@3(sync)) -1711462106.542391 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:200c2 #3: ST0 DCPSParticipantMessage/ParticipantMessageData:{110d7b4:17c5b8c5:94bd0ff4:1}:1<0> -1711462106.542421 [0] dq.builtin: PMD ST0 pp 110d7b4:17c5b8c5:94bd0ff4 kind 1 data 1 -1711462106.542494 [0] tev: acknack 110cd0d:56a27910:57318171:200c7 -> 110d7b4:17c5b8c5:94bd0ff4:200c2: F#4:4/0: -1711462106.542535 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:200c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462106.542551 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462106.542565 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:200c7 -> 110d7b4:17c5b8c5:94bd0ff4:200c2: F#9:4/0: -1711462106.542574 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:200c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462106.542581 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462106.542594 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:200c7 -> 110d7b4:17c5b8c5:94bd0ff4:200c2: F#7:4/0: -1711462106.542602 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:200c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462106.542615 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462106.542652 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc009968:44 0x7408bc0097d0:24 0x7408bc0097f8:28 0x7408bc0094d0:24 0x7408bc0094f8:28 [ udp/10.101.12.71:7414@2 ] -1711462106.542661 [0] tev: traffic-xmit (1) 168 -1711462106.549911 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 116 from udp/10.101.12.71:44991 -1711462106.549989 [0] recv: INFOTS(1711462106.549523877) -1711462106.550019 [0] recv: DATA(110443d:bb7f10a5:18901533:200c2 -> 0:0:0:0 #3 L(:1c1 16954.209488)) -1711462106.550073 [0] recv: HEARTBEAT(#9:3..3 110443d:bb7f10a5:18901533:200c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:200c7@3(sync) 110cd0d:e3b81b8d:1ccb65b1:200c7@3(sync) 110cd0d:79d6eeac:ea4a8907:200c7@3(sync)) -1711462106.550131 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:200c2 #3: ST0 DCPSParticipantMessage/ParticipantMessageData:{110443d:bb7f10a5:18901533:1}:1<0> -1711462106.550155 [0] dq.builtin: PMD ST0 pp 110443d:bb7f10a5:18901533 kind 1 data 1 -1711462106.550187 [0] tev: acknack 110cd0d:56a27910:57318171:200c7 -> 110443d:bb7f10a5:18901533:200c2: F#5:4/0: -1711462106.550237 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:200c7 -> pwr 110443d:bb7f10a5:18901533:200c2) -1711462106.550259 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462106.550279 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:200c7 -> 110443d:bb7f10a5:18901533:200c2: F#10:4/0: -1711462106.550293 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:200c7 -> pwr 110443d:bb7f10a5:18901533:200c2) -1711462106.550307 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462106.550356 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:200c7 -> 110443d:bb7f10a5:18901533:200c2: F#8:4/0: -1711462106.550379 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:200c7 -> pwr 110443d:bb7f10a5:18901533:200c2) -1711462106.550394 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462106.550542 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc009968:44 0x7408bc0097d0:24 0x7408bc0097f8:28 0x7408bc0094d0:24 0x7408bc0094f8:28 [ udp/10.101.12.71:7416@2 ] -1711462106.550562 [0] tev: traffic-xmit (1) 168 -1711462106.571348 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 116 from udp/10.101.12.71:52025 -1711462106.571441 [0] recv: INFOTS(1711462106.570832443) -1711462106.571474 [0] recv: DATA(110aba1:7b19badd:ce0adb73:200c2 -> 0:0:0:0 #3 L(:1c1 16954.230938)) -1711462106.571512 [0] recv: HEARTBEAT(#7:3..3 110aba1:7b19badd:ce0adb73:200c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:200c7@3(sync) 110cd0d:e3b81b8d:1ccb65b1:200c7@3(sync) 110cd0d:79d6eeac:ea4a8907:200c7@3(sync)) -1711462106.571701 [0] tev: acknack 110cd0d:56a27910:57318171:200c7 -> 110aba1:7b19badd:ce0adb73:200c2: F#4:4/0: -1711462106.571783 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:200c7 -> pwr 110aba1:7b19badd:ce0adb73:200c2) -1711462106.571805 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462106.571832 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:200c7 -> 110aba1:7b19badd:ce0adb73:200c2: F#10:4/0: -1711462106.571848 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:200c7 -> pwr 110aba1:7b19badd:ce0adb73:200c2) -1711462106.571717 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:200c2 #3: ST0 DCPSParticipantMessage/ParticipantMessageData:{110aba1:7b19badd:ce0adb73:1}:1<0> -1711462106.571913 [0] dq.builtin: PMD ST0 pp 110aba1:7b19badd:ce0adb73 kind 1 data 1 -1711462106.571862 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462106.572041 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:200c7 -> 110aba1:7b19badd:ce0adb73:200c2: F#8:4/0: -1711462106.572064 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:200c7 -> pwr 110aba1:7b19badd:ce0adb73:200c2) -1711462106.572082 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462106.572155 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc009968:44 0x7408bc0097d0:24 0x7408bc0097f8:28 0x7408bc0094d0:24 0x7408bc0094f8:28 [ udp/10.101.12.71:7418@2 ] -1711462106.572173 [0] tev: traffic-xmit (1) 168 -1711462106.620328 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 444 from udp/10.101.12.71:58212 -1711462106.620363 [0] recv: INFOTS(1711462090.519442682) -1711462106.620382 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #1) -1711462106.620396 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 444 from udp/10.101.12.71:58212 -1711462106.620404 [0] recv: INFOTS(1711462090.519442682) -1711462106.620413 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #1) -1711462106.620474 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.620519 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16954.280019) -1711462106.620551 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192695",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110e21c:d0762c48:a9f0fb28:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7413},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7412},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.620575 [0] dq.builtin: SPDP ST0 110e21c:d0762c48:a9f0fb28:1c1 (known) L(:1c1 16954.280077) -1711462106.642571 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 444 from udp/10.101.12.71:40473 -1711462106.642616 [0] recv: INFOTS(1711462090.541682763) -1711462106.642640 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 0:0:0:0 #1) -1711462106.642674 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 444 from udp/10.101.12.71:40473 -1711462106.642685 [0] recv: INFOTS(1711462090.541682763) -1711462106.642695 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 0:0:0:0 #1) -1711462106.642764 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.642799 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16954.302298) -1711462106.642842 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192693",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7415},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7414},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.642860 [0] dq.builtin: SPDP ST0 110d7b4:17c5b8c5:94bd0ff4:1c1 (known) L(:1c1 16954.302362) -1711462106.650211 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 444 from udp/10.101.12.71:44991 -1711462106.650279 [0] recv: INFOTS(1711462090.549308855) -1711462106.650329 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #1) -1711462106.650355 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 444 from udp/10.101.12.71:44991 -1711462106.650370 [0] recv: INFOTS(1711462090.549308855) -1711462106.650397 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #1) -1711462106.650473 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.650564 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16954.310060) -1711462106.650622 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192691",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110443d:bb7f10a5:18901533:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7417},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7416},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.650648 [0] dq.builtin: SPDP ST0 110443d:bb7f10a5:18901533:1c1 (known) L(:1c1 16954.310147) -1711462106.671265 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462106.671327 [0] recv: INFOTS(1711462090.570393375) -1711462106.671384 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462106.671429 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 444 from udp/10.101.12.71:52025 -1711462106.671451 [0] recv: INFOTS(1711462090.570393375) -1711462106.671473 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #1) -1711462106.671536 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.671595 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (known) L(:1c1 16954.331090) -1711462106.671659 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"192697",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110aba1:7b19badd:ce0adb73:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7419},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7418},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462106.671716 [0] dq.builtin: SPDP ST0 110aba1:7b19badd:ce0adb73:1c1 (known) L(:1c1 16954.331214) -1711462107.906312 [0] tev: thread_cputime 0.036129000 -1711462107.906461 [0] tev: write_sample 110cd0d:e3b81b8d:1ccb65b1:200c2 #6: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:e3b81b8d:1ccb65b1:1}:1<0> -1711462107.906511 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(110cd0d:e3b81b8d:1ccb65b1:200c2:#6/1)): niov 0 sz 0 => now niov 3 sz 84 -1711462107.906533 [0] tev: writer_hbcontrol: wr 110cd0d:e3b81b8d:1ccb65b1:200c2 multicasting (rel-prd 4 seq-eq-max 4 seq 6 maxseq 5) -1711462107.906560 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:200c2) piggybacked, resched in 0.1 s (min-ack 5, avail-seq 6, xmit 5) -1711462107.906577 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 3 sz 84 => now niov 4 sz 116 -1711462107.906764 [0] tev: nn_xpack_send 116: 0x7408c000139c:20 0x7408bc009978:36 0x7408c800d1dc:28 0x7408bc0097f8:32 [ udp/239.255.0.1:7400@2 ] -1711462107.906826 [0] tev: traffic-xmit (1) 116 -1711462107.906848 [0] tev: resched pmd(110cd0d:e3b81b8d:1ccb65b1:1c1): 8s -1711462107.906850 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462107.906935 [0] recv: INFOTS(1711462107.906432793) -1711462107.906980 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:200c2 -> 0:0:0:0 #6 110cd0d:e3b81b8d:1ccb65b1:200c2? -> 0:0:0:0) -1711462107.907018 [0] recv: HEARTBEAT(#31:6..6 110cd0d:e3b81b8d:1ccb65b1:200c2? -> 0:0:0:0) -1711462107.907043 [0] recv: thread_cputime 0.054932000 -1711462107.907514 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462107.907568 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462107.907610 [0] recv: ACKNACK(F#5:7/0: L(:1c1 16955.567064) 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 ACK1 RM0) -1711462107.907643 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462107.907658 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462107.907681 [0] recv: ACKNACK(F#5:7/0: L(:1c1 16955.567159) 110443d:bb7f10a5:18901533:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 ACK1 RM0) -1711462107.907706 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462107.907719 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462107.907739 [0] recv: ACKNACK(F#5:7/0: L(:1c1 16955.567220) 110e21c:d0762c48:a9f0fb28:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 ACK1 RM0) -1711462107.907761 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462107.907774 [0] recv: INFODST(110cd0d:e3b81b8d:1ccb65b1) -1711462107.907794 [0] recv: ACKNACK(F#5:7/0: L(:1c1 16955.567275) 110d7b4:17c5b8c5:94bd0ff4:200c7 -> 110cd0d:e3b81b8d:1ccb65b1:200c2 ACK1 RM0) -1711462108.006514 [0] tev: non-timed queue now has 1 items -1711462108.006629 [0] tev: xmit spdp 110cd0d:e3b81b8d:1ccb65b1:1c1 to 0:0:0:100c7 (resched 8s) -1711462108.006660 [0] tev: heartbeat(wr 110cd0d:e3b81b8d:1ccb65b1:200c2) suppressed, resched in inf s (min-ack 6, avail-seq 6, xmit 6) -1711462108.006683 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 444 -1711462108.007061 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462108.007195 [0] recv: INFOTS(1711462067.905323275) -1711462108.007238 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 0:0:0:0 #1) -1711462108.007270 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462108.007288 [0] recv: INFOTS(1711462067.905323275) -1711462108.007307 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 0:0:0:0 #1) -1711462108.007399 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462108.007460 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (local) -1711462108.007581 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462108.007632 [0] dq.builtin: SPDP ST0 110cd0d:e3b81b8d:1ccb65b1:1c1 (local) -1711462108.007656 [0] dq.builtin: thread_cputime 0.021725000 -1711462108.009175 [0] tev: nn_xpack_send 444: 0x7408c000139c:20 0x7408bc009978:36 0x7408d401eea4:388 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.(trunc) -1711462108.009236 [0] tev: traffic-xmit (101) 444 -1711462109.654729 [0] tev: thread_cputime 0.039614000 -1711462109.654805 [0] tev: write_sample 110cd0d:79d6eeac:ea4a8907:200c2 #6: ST0 DCPSParticipantMessage/ParticipantMessageData:{110cd0d:79d6eeac:ea4a8907:1}:1<0> -1711462109.654830 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(110cd0d:79d6eeac:ea4a8907:200c2:#6/1)): niov 0 sz 0 => now niov 3 sz 84 -1711462109.654842 [0] tev: writer_hbcontrol: wr 110cd0d:79d6eeac:ea4a8907:200c2 multicasting (rel-prd 4 seq-eq-max 4 seq 6 maxseq 5) -1711462109.654854 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:200c2) piggybacked, resched in 0.1 s (min-ack 5, avail-seq 6, xmit 5) -1711462109.654862 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 3 sz 84 => now niov 4 sz 116 -1711462109.654951 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 116 from udp/10.101.12.71:50807 -1711462109.654977 [0] recv: INFOTS(1711462109.654791672) -1711462109.654958 [0] tev: nn_xpack_send 116: 0x7408c000139c:20 0x7408bc009978:36 0x7408c800f16c:28 0x7408bc0097f8:32 [ udp/239.255.0.1:7400@2 ] -1711462109.654993 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:200c2 -> 0:0:0:0 #6 110cd0d:79d6eeac:ea4a8907:200c2? -> 0:0:0:0) -1711462109.655007 [0] tev: traffic-xmit (1) 116 -1711462109.655028 [0] tev: resched pmd(110cd0d:79d6eeac:ea4a8907:1c1): 8s -1711462109.655029 [0] recv: HEARTBEAT(#23:6..6 110cd0d:79d6eeac:ea4a8907:200c2? -> 0:0:0:0) -1711462109.655066 [0] recv: thread_cputime 0.055966000 -1711462109.655265 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462109.655275 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462109.655292 [0] recv: ACKNACK(F#5:7/0: L(:1c1 16957.314777) 110d7b4:17c5b8c5:94bd0ff4:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 ACK1 RM0) -1711462109.655308 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462109.655316 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462109.655327 [0] recv: ACKNACK(F#5:7/0: L(:1c1 16957.314818) 110443d:bb7f10a5:18901533:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 ACK1 RM0) -1711462109.655339 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462109.655346 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462109.655357 [0] recv: ACKNACK(F#5:7/0: L(:1c1 16957.314849) 110aba1:7b19badd:ce0adb73:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 ACK1 RM0) -1711462109.655369 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462109.655376 [0] recv: INFODST(110cd0d:79d6eeac:ea4a8907) -1711462109.655387 [0] recv: ACKNACK(F#5:7/0: L(:1c1 16957.314879) 110e21c:d0762c48:a9f0fb28:200c7 -> 110cd0d:79d6eeac:ea4a8907:200c2 ACK1 RM0) -1711462109.754465 [0] tev: non-timed queue now has 1 items -1711462109.754538 [0] tev: xmit spdp 110cd0d:79d6eeac:ea4a8907:1c1 to 0:0:0:100c7 (resched 8s) -1711462109.754558 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 444 -1711462109.754753 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462109.754789 [0] recv: INFOTS(1711462069.653526636) -1711462109.754816 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 0:0:0:0 #1) -1711462109.754838 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 444 from udp/10.101.12.71:50807 -1711462109.754850 [0] recv: INFOTS(1711462069.653526636) -1711462109.754865 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 0:0:0:0 #1) -1711462109.754929 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462109.754991 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (local) -1711462109.755009 [0] dq.builtin: thread_cputime 0.021789000 -1711462109.755049 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #1: ST0 /ParticipantBuiltinTopicData:{user_data=10<"enclave=/;">,property_list={1:"__ProcessName":"python3",1:"__Pid":"191354",1:"__Hostname":"op-Alienware-x16-R1"}:{},protocol_version=2:1,vendorid=1:16,participant_lease_duration=10000000000,participant_guid={110cd0d:79d6eeac:ea4a8907:1c1},builtin_endpoint_set=64575,domain_id=0,default_unicast_locator={udp/10.101.12.71:7411},default_multicast_locator={udp/239.255.0.1:7401},metatraffic_unicast_locator={udp/10.101.12.71:7410},metatraffic_multicast_locator={udp/239.255.0.1:7400},adlink_participant_version_info=0:44:0:0:0:"op-Alienware-x16-R1/0.10.4/Linux/Linux",cyclone_receive_buffer_size=2147483647} -1711462109.755083 [0] dq.builtin: SPDP ST0 110cd0d:79d6eeac:ea4a8907:1c1 (local) -1711462109.756234 [0] tev: nn_xpack_send 444: 0x7408c000139c:20 0x7408bc009978:36 0x7408e000a504:388 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.(trunc) -1711462109.756277 [0] tev: traffic-xmit (101) 444 -1711462109.756296 [0] tev: heartbeat(wr 110cd0d:79d6eeac:ea4a8907:200c2) suppressed, resched in inf s (min-ack 6, avail-seq 6, xmit 6) -1711462109.907177 [0] gc: thread_cputime 0.022465000 -1711462110.150810 [0] python3: write_sample 110cd0d:56a27910:57318171:403 #13: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162 -1711462110.150862 [0] python3: xpack_addmsg 0x7408c4010670 0x7408bc009880 0(data(110cd0d:56a27910:57318171:403:#13/1)): niov 0 sz 0 => now niov 3 sz 504 -1711462110.150873 [0] python3: writer_hbcontrol: wr 110cd0d:56a27910:57318171:403 multicasting (rel-prd 4 seq-eq-max 4 seq 13 maxseq 12) -1711462110.150885 [0] python3: heartbeat(wr 110cd0d:56a27910:57318171:403) piggybacked, resched in 0.1 s (min-ack 12, avail-seq 13, xmit 12) -1711462110.150891 [0] python3: xpack_addmsg 0x7408c4010670 0x7408bc009700 0(control): niov 3 sz 504 => now niov 4 sz 536 -1711462110.150979 [0] python3: nn_xpack_send 536: 0x7408c401067c:20 0x7408bc009978:36 0x7408ac03d4c0:448 0x7408bc0097f8:32 [ udp/239.255.0.1:7401@2 ] -1711462110.150984 [0] python3: traffic-xmit (1) 536 -1711462110.150991 [0] python3: => EVERYONE -1711462110.151008 [0] recvMC: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 536 from udp/10.101.12.71:50807 -1711462110.151053 [0] recvMC: INFOTS(1711462110.150718264) -1711462110.151114 [0] recvMC: DATA(110cd0d:56a27910:57318171:403 -> 0:0:0:0 #13 110cd0d:56a27910:57318171:403? -> 0:0:0:0) -1711462110.151123 [0] recvMC: HEARTBEAT(#9:13..13 110cd0d:56a27910:57318171:403? -> 0:0:0:0) -1711462110.151038 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:56a27910:57318171:603) ... -1711462110.151187 [0] python3: writer_set_state(110cd0d:56a27910:57318171:603) state transition 0 -> 1 -1711462110.151203 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:603) ... -1711462110.151214 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:603) - no unack'ed samples -1711462110.151224 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:603) ... -1711462110.151135 [0] recvMC: thread_cputime 0.014132000 -1711462110.151242 [0] python3: => EVERYONE -1711462110.151310 [0] python3: writer_set_state(110cd0d:56a27910:57318171:603) state transition 1 -> 3 -1711462110.151387 [0] gc: gc 0x7408ac0322b0: deleting -1711462110.151413 [0] gc: gc_delete_writer(0x7408ac0322b0, 110cd0d:56a27910:57318171:603) -1711462110.151453 [0] gc: write_sample 110cd0d:56a27910:57318171:3c2 #10: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:603}} -1711462110.151474 [0] gc: non-timed queue now has 1 items -1711462110.151498 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:603 @ 0x7408ac021dc4) user 22 builtin 12 -1711462110.151496 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(data(110cd0d:56a27910:57318171:3c2:#10/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.151507 [0] recvUC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462110.151511 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.151548 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462110.151579 [0] recvUC: ACKNACK(F#3:14/0: L(:1c1 16957.811048) 110e21c:d0762c48:a9f0fb28:504 -> 110cd0d:56a27910:57318171:403 ACK1 RM0) -1711462110.151591 [0] recvUC: thread_cputime 0.007257000 -1711462110.151604 [0] recvUC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462110.151612 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462110.151616 [0] tev: nn_xpack_send 96: 0x7408c000139c:20 0x7408c4011ae8:48 0x7408c8073ec4:28 [ udp/239.255.0.1:7400@2 ] -1711462110.151654 [0] tev: traffic-xmit (1) 96 -1711462110.151660 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 96 from udp/10.101.12.71:50807 -1711462110.151686 [0] recv: INFOTS(1711462110.151439386) -1711462110.151700 [0] recv: DATA(110cd0d:56a27910:57318171:3c2 -> 0:0:0:0 #10 110cd0d:56a27910:57318171:3c2? -> 0:0:0:0) -1711462110.151631 [0] recvUC: ACKNACK(F#3:14/0: L(:1c1 16957.811115) 110443d:bb7f10a5:18901533:504 -> 110cd0d:56a27910:57318171:403 ACK1 RM0) -1711462110.151777 [0] recvUC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462110.151784 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462110.151804 [0] recvUC: ACKNACK(F#3:14/0: L(:1c1 16957.811286) 110aba1:7b19badd:ce0adb73:504 -> 110cd0d:56a27910:57318171:403 ACK1 RM0) -1711462110.151812 [0] recvUC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462110.151817 [0] recvUC: INFODST(110cd0d:56a27910:57318171) -1711462110.151831 [0] recvUC: ACKNACK(F#3:14/0: L(:1c1 16957.811321) 110d7b4:17c5b8c5:94bd0ff4:504 -> 110cd0d:56a27910:57318171:403 ACK1 RM0) -1711462110.152565 [0] gc: gc 0x7408c8016150: deleting -1711462110.176530 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 472 from udp/10.101.12.71:44991 -1711462110.176592 [0] recvMC: INFOTS(1711462110.176055959) -1711462110.176622 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #11 L(:1c1 16957.836092) => EVERYONE -1711462110.176813 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #11: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,17,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,16,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.176846 [0] recvMC: HEARTBEAT(#19:11..11 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@11(sync) 110cd0d:e3b81b8d:1ccb65b1:504@11(sync) 110cd0d:79d6eeac:ea4a8907:504@11(sync)) -1711462110.176867 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 600 from udp/10.101.12.71:52025 -1711462110.176879 [0] recvMC: INFOTS(1711462110.176561088) -1711462110.176884 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110443d:bb7f10a5:18901533:403: F#4:12/0: -1711462110.176997 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462110.177013 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.177033 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110443d:bb7f10a5:18901533:403: F#20:12/0: -1711462110.177239 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462110.177265 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.176919 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #13 L(:1c1 16957.836380) => EVERYONE -1711462110.177290 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110443d:bb7f10a5:18901533:403: F#11:12/0: -1711462110.177307 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462110.177314 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.177367 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c4011ad8:44 0x7408bc009950:24 0x7408bc009978:28 0x7408bc0097d0:24 0x7408bc0097f8:28 [ udp/10.101.12.71:7417@2 ] -1711462110.177384 [0] tev: traffic-xmit (1) 168 -1711462110.177138 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.177439 [0] recv: INFOTS(1711462110.176811721) -1711462110.177463 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #8 L(:1c1 16957.836934)) -1711462110.177514 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #8: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:1304}} -1711462110.177670 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:1304 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:1304) => EVERYONE -1711462110.177704 [0] dq.builtin: - deleting -1711462110.177719 [0] dq.builtin: delete -1711462110.177739 [0] gc: gc 0x7408c80951c0: not yet, shortsleep -1711462110.177605 [0] recvMC: data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #13: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,) -1711462110.177887 [0] recvMC: HEARTBEAT(#23:13..13 110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@13(sync) 110cd0d:e3b81b8d:1ccb65b1:504@13(sync) 110cd0d:79d6eeac:ea4a8907:504@13(sync)) -1711462110.177905 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110aba1:7b19badd:ce0adb73:403: F#4:14/0: -1711462110.177917 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462110.177935 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.177943 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110aba1:7b19badd:ce0adb73:403: F#20:14/0: -1711462110.177958 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462110.177965 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.177971 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110aba1:7b19badd:ce0adb73:403: F#11:14/0: -1711462110.177976 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462110.177984 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.178040 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c4011ad8:44 0x7408bc009950:24 0x7408bc009978:28 0x7408bc0097d0:24 0x7408bc0097f8:28 [ udp/10.101.12.71:7419@2 ] -1711462110.178047 [0] tev: traffic-xmit (1) 168 -1711462110.178621 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.178650 [0] recv: INFOTS(1711462110.178392915) -1711462110.178670 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #11 L(:1c1 16957.838150)) -1711462110.178724 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #11: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1304}} -1711462110.178742 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:1304 ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:1304) => EVERYONE -1711462110.178767 [0] dq.builtin: - deleting -1711462110.178780 [0] dq.builtin: delete -1711462110.178860 [0] gc: gc 0x7408c80951c0: deleting -1711462110.178884 [0] gc: gc_delete_proxy_reader (0x7408c80951c0, 110443d:bb7f10a5:18901533:1304) -1711462110.178898 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=28 -1711462110.178916 [0] gc: gc 0x7408c80953f0: deleting -1711462110.178925 [0] gc: gc_delete_proxy_reader (0x7408c80953f0, 110aba1:7b19badd:ce0adb73:1304) -1711462110.178935 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=33 -1711462110.178951 [0] gc: gc 0x7408c8016150: deleting -1711462110.178962 [0] gc: gc 0x7408c80953f0: deleting -1711462110.179459 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.179488 [0] recv: INFOTS(1711462110.179299892) -1711462110.179512 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #11 L(:1c1 16957.838988)) -1711462110.179617 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #11: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:1203}} -1711462110.179651 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:1203 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:1203) - deleting -1711462110.179667 [0] dq.builtin: => EVERYONE -1711462110.179716 [0] dq.builtin: delete -1711462110.179728 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 424 from udp/10.101.12.71:44991 -1711462110.179733 [0] gc: gc 0x7408c807ae70: deleting -1711462110.179756 [0] recvMC: INFOTS(1711462110.179423769) -1711462110.179781 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c807ae70, 110443d:bb7f10a5:18901533:1203) -1711462110.179784 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #12 L(:1c1 16957.839257) => EVERYONE -1711462110.179836 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c807ae70, 110443d:bb7f10a5:18901533:1203) -1711462110.179866 [0] dq.user: thread_cputime 0.002164000 -1711462110.179869 [0] gc: gc 0x7408c807ae70: deleting -1711462110.179895 [0] gc: gc_delete_proxy_writer (0x7408c807ae70, 110443d:bb7f10a5:18901533:1203) -1711462110.179914 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=27 -1711462110.179953 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.179990 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #12: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,15,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.180001 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.180023 [0] recv: INFOTS(1711462110.179720416) -1711462110.180012 [0] recvMC: HEARTBEAT(F#20:12..12 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@12(sync) 110cd0d:e3b81b8d:1ccb65b1:504@12(sync) 110cd0d:79d6eeac:ea4a8907:504@12(sync)) -1711462110.180063 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #13 L(:1c1 16957.839524)) -1711462110.180134 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #13: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1203}} -1711462110.180152 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:1203 ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:1203) - deleting -1711462110.180164 [0] dq.builtin: => EVERYONE -1711462110.180200 [0] dq.builtin: delete -1711462110.180260 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 552 from udp/10.101.12.71:52025 -1711462110.180288 [0] recvMC: INFOTS(1711462110.179892567) -1711462110.180309 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #14 L(:1c1 16957.839788) => EVERYONE -1711462110.180439 [0] recvMC: data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #14: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,) -1711462110.180481 [0] recvMC: HEARTBEAT(F#24:14..14 110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@14(sync) 110cd0d:e3b81b8d:1ccb65b1:504@14(sync) 110cd0d:79d6eeac:ea4a8907:504@14(sync)) -1711462110.180794 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.180806 [0] recv: INFOTS(1711462110.180647407) -1711462110.180827 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #9 L(:1c1 16957.840308)) -1711462110.180858 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #9: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:1104}} -1711462110.180878 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:1104 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:1104) => EVERYONE -1711462110.180897 [0] dq.builtin: - deleting -1711462110.180908 [0] dq.builtin: delete -1711462110.181027 [0] gc: gc 0x7408c8016150: deleting -1711462110.181045 [0] gc: gc 0x7408c8067c90: deleting -1711462110.181054 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8067c90, 110aba1:7b19badd:ce0adb73:1203) -1711462110.181069 [0] gc: gc 0x7408c807ae70: deleting -1711462110.181077 [0] gc: gc_delete_proxy_reader (0x7408c807ae70, 110443d:bb7f10a5:18901533:1104) -1711462110.181091 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=26 -1711462110.181080 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8067c90, 110aba1:7b19badd:ce0adb73:1203) -1711462110.181107 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.181181 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.181208 [0] recv: INFOTS(1711462110.181018038) -1711462110.181226 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #12 L(:1c1 16957.840708)) -1711462110.181258 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #12: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1104}} -1711462110.181286 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:1104 ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:1104) => EVERYONE -1711462110.181306 [0] dq.builtin: - deleting -1711462110.181315 [0] dq.builtin: delete -1711462110.181992 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.182009 [0] recv: INFOTS(1711462110.181868318) -1711462110.182024 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #12 L(:1c1 16957.841510)) -1711462110.182048 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #12: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:1003}} -1711462110.182063 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:1003 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:1003) - deleting -1711462110.182072 [0] dq.builtin: => EVERYONE -1711462110.182101 [0] dq.builtin: delete -1711462110.182195 [0] gc: gc 0x7408c8016150: deleting -1711462110.182202 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 376 from udp/10.101.12.71:44991 -1711462110.182206 [0] gc: gc 0x7408c8067c90: deleting -1711462110.182262 [0] gc: gc_delete_proxy_writer (0x7408c8067c90, 110aba1:7b19badd:ce0adb73:1203) -1711462110.182280 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=32 -1711462110.182234 [0] recvMC: INFOTS(1711462110.181963719) -1711462110.182293 [0] gc: gc 0x7408c807ea40: deleting -1711462110.182304 [0] gc: gc_delete_proxy_reader (0x7408c807ea40, 110aba1:7b19badd:ce0adb73:1104) -1711462110.182317 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=31 -1711462110.182334 [0] gc: gc 0x7408c8036c70: deleting -1711462110.182347 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8036c70, 110443d:bb7f10a5:18901533:1003) -1711462110.182370 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.182379 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #13 L(:1c1 16957.841735) => EVERYONE -1711462110.182389 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8036c70, 110443d:bb7f10a5:18901533:1003) -1711462110.182456 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.182472 [0] recv: INFOTS(1711462110.182296975) -1711462110.182492 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #14 L(:1c1 16957.841974)) -1711462110.182493 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #13: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,13,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.182531 [0] recvMC: HEARTBEAT(F#21:13..13 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@13(sync) 110cd0d:e3b81b8d:1ccb65b1:504@13(sync) 110cd0d:79d6eeac:ea4a8907:504@13(sync)) -1711462110.182536 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #14: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1003}} -1711462110.182576 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:1003 ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:1003) - deleting -1711462110.182591 [0] dq.builtin: => EVERYONE -1711462110.182633 [0] dq.builtin: delete -1711462110.182648 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 504 from udp/10.101.12.71:52025 -1711462110.182663 [0] recvMC: INFOTS(1711462110.182388702) -1711462110.182683 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #15 L(:1c1 16957.842165) => EVERYONE -1711462110.182800 [0] recvMC: data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #15: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,20,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,) -1711462110.182830 [0] recvMC: HEARTBEAT(F#25:15..15 110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@15(sync) 110cd0d:e3b81b8d:1ccb65b1:504@15(sync) 110cd0d:79d6eeac:ea4a8907:504@15(sync)) -1711462110.183201 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.183222 [0] recv: INFOTS(1711462110.183032571) -1711462110.183238 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #10 L(:1c1 16957.842723)) -1711462110.183275 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #10: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:f04}} -1711462110.183303 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:f04 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:f04) => EVERYONE -1711462110.183339 [0] dq.builtin: - deleting -1711462110.183353 [0] dq.builtin: delete -1711462110.183443 [0] gc: gc 0x7408c8016150: deleting -1711462110.183455 [0] gc: gc 0x7408c807ea40: deleting -1711462110.183465 [0] gc: gc 0x7408c8036c70: deleting -1711462110.183472 [0] gc: gc_delete_proxy_writer (0x7408c8036c70, 110443d:bb7f10a5:18901533:1003) -1711462110.183482 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=25 -1711462110.183492 [0] gc: gc 0x7408c8067c90: deleting -1711462110.183503 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8067c90, 110aba1:7b19badd:ce0adb73:1003) -1711462110.183516 [0] gc: gc 0x7408c808c670: deleting -1711462110.183523 [0] gc: gc_delete_proxy_reader (0x7408c808c670, 110443d:bb7f10a5:18901533:f04) -1711462110.183532 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=24 -1711462110.183545 [0] gc: gc 0x7408c8016150: deleting -1711462110.183555 [0] gc: gc 0x7408c808c670: not yet, shortsleep -1711462110.183531 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8067c90, 110aba1:7b19badd:ce0adb73:1003) -1711462110.183800 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.183816 [0] recv: INFOTS(1711462110.183595883) -1711462110.183844 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #13 L(:1c1 16957.843318)) -1711462110.183887 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #13: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:f04}} -1711462110.183931 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:f04 ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:f04) => EVERYONE -1711462110.183970 [0] dq.builtin: - deleting -1711462110.183986 [0] dq.builtin: delete -1711462110.184379 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.184393 [0] recv: INFOTS(1711462110.184270366) -1711462110.184408 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #13 L(:1c1 16957.843895)) -1711462110.184445 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #13: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:e03}} -1711462110.184467 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:e03 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:e03) - deleting -1711462110.184479 [0] dq.builtin: => EVERYONE -1711462110.184539 [0] dq.builtin: delete -1711462110.184591 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 328 from udp/10.101.12.71:44991 -1711462110.184622 [0] gc: gc 0x7408c808c670: deleting -1711462110.184640 [0] gc: gc 0x7408c8067c90: deleting -1711462110.184658 [0] gc: gc_delete_proxy_writer (0x7408c8067c90, 110aba1:7b19badd:ce0adb73:1003) -1711462110.184627 [0] recvMC: INFOTS(1711462110.184354578) -1711462110.184671 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=30 -1711462110.184743 [0] gc: gc 0x7408c8043890: deleting -1711462110.184749 [0] gc: gc_delete_proxy_reader (0x7408c8043890, 110aba1:7b19badd:ce0adb73:f04) -1711462110.184757 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=29 -1711462110.184765 [0] gc: gc 0x7408c808af10: deleting -1711462110.184768 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #14 L(:1c1 16957.844127) => EVERYONE -1711462110.184772 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c808af10, 110443d:bb7f10a5:18901533:e03) -1711462110.184811 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.184828 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c808af10, 110443d:bb7f10a5:18901533:e03) -1711462110.184890 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #14: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,11,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.184920 [0] recvMC: HEARTBEAT(F#22:14..14 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@14(sync) 110cd0d:e3b81b8d:1ccb65b1:504@14(sync) 110cd0d:79d6eeac:ea4a8907:504@14(sync)) -1711462110.185199 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.185211 [0] recv: INFOTS(1711462110.185066146) -1711462110.185235 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #15 L(:1c1 16957.844714)) -1711462110.185271 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #15: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:e03}} -1711462110.185302 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:e03 ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:e03) - deleting -1711462110.185317 [0] dq.builtin: => EVERYONE -1711462110.185356 [0] dq.builtin: delete -1711462110.185435 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 456 from udp/10.101.12.71:52025 -1711462110.185464 [0] recvMC: INFOTS(1711462110.185144558) -1711462110.185487 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #16 L(:1c1 16957.844965) => EVERYONE -1711462110.185649 [0] recvMC: data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #16: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,20,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,22,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,24,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.185664 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.185714 [0] recv: INFOTS(1711462110.185500957) -1711462110.185677 [0] recvMC: HEARTBEAT(F#26:16..16 110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@16(sync) 110cd0d:e3b81b8d:1ccb65b1:504@16(sync) 110cd0d:79d6eeac:ea4a8907:504@16(sync)) -1711462110.185736 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #11 L(:1c1 16957.845214)) -1711462110.185804 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #11: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:d04}} -1711462110.185826 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:d04 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:d04) => EVERYONE -1711462110.185854 [0] dq.builtin: - deleting -1711462110.185862 [0] dq.builtin: delete -1711462110.185879 [0] gc: gc 0x7408c8016150: deleting -1711462110.185895 [0] gc: gc 0x7408c8043890: deleting -1711462110.185937 [0] gc: gc 0x7408c808af10: deleting -1711462110.185946 [0] gc: gc_delete_proxy_writer (0x7408c808af10, 110443d:bb7f10a5:18901533:e03) -1711462110.185953 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=23 -1711462110.185966 [0] gc: gc 0x7408c8067c90: deleting -1711462110.185982 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8067c90, 110aba1:7b19badd:ce0adb73:e03) -1711462110.185993 [0] gc: gc 0x7408c808b3e0: deleting -1711462110.186002 [0] gc: gc_delete_proxy_reader (0x7408c808b3e0, 110443d:bb7f10a5:18901533:d04) -1711462110.186010 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8067c90, 110aba1:7b19badd:ce0adb73:e03) -1711462110.186014 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=22 -1711462110.186047 [0] gc: gc 0x7408c8016150: deleting -1711462110.186055 [0] gc: gc 0x7408c8067c90: deleting -1711462110.186061 [0] gc: gc_delete_proxy_writer (0x7408c8067c90, 110aba1:7b19badd:ce0adb73:e03) -1711462110.186067 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=28 -1711462110.186074 [0] gc: gc 0x7408c808b3e0: deleting -1711462110.186080 [0] gc: gc 0x7408c8016150: deleting -1711462110.186494 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.186511 [0] recv: INFOTS(1711462110.186335683) -1711462110.186549 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #14 L(:1c1 16957.846013)) -1711462110.186594 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #14: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:d04}} -1711462110.186624 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:d04 ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:d04) => EVERYONE -1711462110.186652 [0] dq.builtin: - deleting -1711462110.186667 [0] dq.builtin: delete -1711462110.186675 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.186983 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.186999 [0] recv: INFOTS(1711462110.186833962) -1711462110.187024 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #14 L(:1c1 16957.846500)) -1711462110.187064 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #14: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:c03}} -1711462110.187090 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:c03 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:c03) - deleting -1711462110.187113 [0] dq.builtin: => EVERYONE -1711462110.187158 [0] dq.builtin: delete -1711462110.187196 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 280 from udp/10.101.12.71:44991 -1711462110.187222 [0] recvMC: INFOTS(1711462110.186930064) -1711462110.187240 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #15 L(:1c1 16957.846723) => EVERYONE -1711462110.187363 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #15: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,9,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.187416 [0] recvMC: HEARTBEAT(F#23:15..15 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@15(sync) 110cd0d:e3b81b8d:1ccb65b1:504@15(sync) 110cd0d:79d6eeac:ea4a8907:504@15(sync)) -1711462110.187745 [0] gc: gc 0x7408c8016150: deleting -1711462110.187780 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110aba1:7b19badd:ce0adb73:d04) -1711462110.187791 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=27 -1711462110.187804 [0] gc: gc 0x7408c8043890: deleting -1711462110.187813 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8043890, 110443d:bb7f10a5:18901533:c03) -1711462110.187824 [0] gc: gc 0x7408c808b3e0: deleting -1711462110.187838 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.187869 [0] recv: INFOTS(1711462110.187668713) -1711462110.187839 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8043890, 110443d:bb7f10a5:18901533:c03) -1711462110.187890 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #16 L(:1c1 16957.847370)) -1711462110.187916 [0] gc: gc 0x7408c8043890: deleting -1711462110.187943 [0] gc: gc_delete_proxy_writer (0x7408c8043890, 110443d:bb7f10a5:18901533:c03) -1711462110.187957 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=21 -1711462110.187944 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #16: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:c03}} -1711462110.187974 [0] gc: gc 0x7408c808b3e0: not yet, shortsleep -1711462110.188006 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:c03 ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:c03) - deleting -1711462110.188023 [0] dq.builtin: => EVERYONE -1711462110.188064 [0] dq.builtin: delete -1711462110.188074 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 408 from udp/10.101.12.71:52025 -1711462110.188106 [0] recvMC: INFOTS(1711462110.187809186) -1711462110.188128 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #17 L(:1c1 16957.847606) => EVERYONE -1711462110.188245 [0] recvMC: data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #17: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,20,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,22,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,24,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.188266 [0] recvMC: HEARTBEAT(F#27:17..17 110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@17(sync) 110cd0d:e3b81b8d:1ccb65b1:504@17(sync) 110cd0d:79d6eeac:ea4a8907:504@17(sync)) -1711462110.188356 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.188376 [0] recv: INFOTS(1711462110.188204641) -1711462110.188412 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #12 L(:1c1 16957.847878)) -1711462110.188588 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #12: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:b04}} -1711462110.188638 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:b04 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:b04) => EVERYONE -1711462110.188674 [0] dq.builtin: - deleting -1711462110.188682 [0] dq.builtin: delete -1711462110.189075 [0] gc: gc 0x7408c808b3e0: deleting -1711462110.189094 [0] gc: gc 0x7408c8016150: deleting -1711462110.189103 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110aba1:7b19badd:ce0adb73:c03) -1711462110.189115 [0] gc: gc 0x7408c8013c30: deleting -1711462110.189141 [0] gc: gc_delete_proxy_reader (0x7408c8013c30, 110443d:bb7f10a5:18901533:b04) -1711462110.189157 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=20 -1711462110.189119 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.189175 [0] gc: gc 0x7408c808b3e0: not yet, shortsleep -1711462110.189202 [0] recv: INFOTS(1711462110.188954699) -1711462110.189131 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110aba1:7b19badd:ce0adb73:c03) -1711462110.189227 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #15 L(:1c1 16957.848704)) -1711462110.189321 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #15: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:b04}} -1711462110.189359 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:b04 ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:b04) => EVERYONE -1711462110.189385 [0] dq.builtin: - deleting -1711462110.189395 [0] dq.builtin: delete -1711462110.189881 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.189905 [0] recv: INFOTS(1711462110.189703464) -1711462110.189926 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #15 L(:1c1 16957.849406)) -1711462110.190080 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #15: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:a03}} -1711462110.190110 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 232 from udp/10.101.12.71:44991 -1711462110.190160 [0] recvMC: INFOTS(1711462110.189872726) -1711462110.190184 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #16 L(:1c1 16957.849660) => EVERYONE -1711462110.190132 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:a03 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:a03) - deleting -1711462110.190228 [0] dq.builtin: => EVERYONE -1711462110.190258 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #16: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.190286 [0] recvMC: HEARTBEAT(F#24:16..16 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@16(sync) 110cd0d:e3b81b8d:1ccb65b1:504@16(sync) 110cd0d:79d6eeac:ea4a8907:504@16(sync)) -1711462110.190263 [0] gc: gc 0x7408c808b3e0: deleting -1711462110.190262 [0] dq.builtin: delete -1711462110.190367 [0] gc: gc 0x7408c8016150: deleting -1711462110.190418 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110aba1:7b19badd:ce0adb73:c03) -1711462110.190433 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=26 -1711462110.190454 [0] gc: gc 0x7408c8067c90: deleting -1711462110.190474 [0] gc: gc_delete_proxy_reader (0x7408c8067c90, 110aba1:7b19badd:ce0adb73:b04) -1711462110.190510 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=25 -1711462110.190457 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.190537 [0] gc: gc 0x7408c8043890: deleting -1711462110.190552 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8043890, 110443d:bb7f10a5:18901533:a03) -1711462110.190578 [0] gc: gc 0x7408c808b3e0: deleting -1711462110.190593 [0] gc: gc 0x7408c8067c90: deleting -1711462110.190596 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8043890, 110443d:bb7f10a5:18901533:a03) -1711462110.190624 [0] recv: INFOTS(1711462110.190259026) -1711462110.190697 [0] gc: gc 0x7408c8043890: deleting -1711462110.190731 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #17 L(:1c1 16957.850121)) -1711462110.190747 [0] gc: gc_delete_proxy_writer (0x7408c8043890, 110443d:bb7f10a5:18901533:a03) -1711462110.190780 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=19 -1711462110.190788 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #17: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:a03}} -1711462110.190806 [0] gc: gc 0x7408c808b3e0: not yet, shortsleep -1711462110.190813 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:a03 ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:a03) - deleting -1711462110.190835 [0] dq.builtin: => EVERYONE -1711462110.190867 [0] dq.builtin: delete -1711462110.190908 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 360 from udp/10.101.12.71:52025 -1711462110.190928 [0] recvMC: INFOTS(1711462110.190464105) -1711462110.190954 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #18 L(:1c1 16957.850429) => EVERYONE -1711462110.191054 [0] recvMC: data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #18: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,20,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,22,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,24,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.191079 [0] recvMC: HEARTBEAT(F#28:18..18 110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@18(sync) 110cd0d:e3b81b8d:1ccb65b1:504@18(sync) 110cd0d:79d6eeac:ea4a8907:504@18(sync)) -1711462110.191119 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.191129 [0] recv: INFOTS(1711462110.190989734) -1711462110.191141 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #13 L(:1c1 16957.850630)) -1711462110.191162 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #13: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:904}} -1711462110.191174 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:904 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:904) => EVERYONE -1711462110.191202 [0] dq.builtin: - deleting -1711462110.191219 [0] dq.builtin: delete -1711462110.191657 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 508 from udp/10.101.12.71:58212 -1711462110.191679 [0] recvMC: INFOTS(1711462110.191353654) -1711462110.191701 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.191722 [0] recv: INFOTS(1711462110.191549194) -1711462110.191769 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #16 L(:1c1 16957.851225)) -1711462110.191705 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #12 L(:1c1 16957.851180) => EVERYONE -1711462110.191797 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #16: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:904}} -1711462110.191826 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:904 ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:904) => EVERYONE -1711462110.191857 [0] dq.builtin: - deleting -1711462110.191921 [0] dq.builtin: delete -1711462110.191901 [0] gc: gc 0x7408c808b3e0: deleting -1711462110.191971 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #12: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,16,3,0,0,) -1711462110.191978 [0] gc: gc 0x7408c8016150: deleting -1711462110.192056 [0] recvMC: HEARTBEAT(#19:12..12 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@12(sync) 110cd0d:e3b81b8d:1ccb65b1:504@12(sync) 110cd0d:79d6eeac:ea4a8907:504@12(sync)) -1711462110.192078 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110aba1:7b19badd:ce0adb73:a03) -1711462110.192085 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110e21c:d0762c48:a9f0fb28:403: F#5:13/0: -1711462110.192134 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110aba1:7b19badd:ce0adb73:a03) -1711462110.192141 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110e21c:d0762c48:a9f0fb28:403) -1711462110.192122 [0] gc: gc 0x7408c8040ad0: deleting -1711462110.192194 [0] gc: gc_delete_proxy_reader (0x7408c8040ad0, 110443d:bb7f10a5:18901533:904) -1711462110.192181 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.192209 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=18 -1711462110.192231 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110e21c:d0762c48:a9f0fb28:403: F#19:13/0: -1711462110.192241 [0] gc: gc 0x7408c8013c30: deleting -1711462110.192257 [0] gc: gc_delete_proxy_reader (0x7408c8013c30, 110aba1:7b19badd:ce0adb73:904) -1711462110.192270 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=24 -1711462110.192242 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110e21c:d0762c48:a9f0fb28:403) -1711462110.192302 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.192289 [0] gc: gc 0x7408c8016150: deleting -1711462110.192338 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110aba1:7b19badd:ce0adb73:a03) -1711462110.192351 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=23 -1711462110.192324 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110e21c:d0762c48:a9f0fb28:403: F#10:13/0: -1711462110.192379 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110e21c:d0762c48:a9f0fb28:403) -1711462110.192369 [0] gc: gc 0x7408c808b3e0: deleting -1711462110.192412 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.192432 [0] gc: gc 0x7408c8013c30: deleting -1711462110.192446 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.192465 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.192482 [0] recv: INFOTS(1711462110.192364136) -1711462110.192515 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #16 L(:1c1 16957.851983)) -1711462110.192526 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c4011ad8:44 0x7408bc009950:24 0x7408bc009978:28 0x7408bc0097d0:24 0x7408bc0097f8:28 [ udp/10.101.12.71:7413@2 ] -1711462110.192543 [0] tev: traffic-xmit (1) 168 -1711462110.192557 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #16: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:803}} -1711462110.192578 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:803 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:803) - deleting -1711462110.192590 [0] dq.builtin: => EVERYONE -1711462110.192623 [0] dq.builtin: delete -1711462110.192733 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 208 from udp/10.101.12.71:44991 -1711462110.192755 [0] recvMC: INFOTS(1711462110.192525975) -1711462110.192773 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #17 L(:1c1 16957.852255) => EVERYONE -1711462110.192841 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #17: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.192862 [0] recvMC: HEARTBEAT(F#25:17..17 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@17(sync) 110cd0d:e3b81b8d:1ccb65b1:504@17(sync) 110cd0d:79d6eeac:ea4a8907:504@17(sync)) -1711462110.193048 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.193080 [0] recv: INFOTS(1711462110.192899351) -1711462110.193097 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #18 L(:1c1 16957.852566)) -1711462110.193152 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #18: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:803}} -1711462110.193165 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:803 ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:803) - deleting -1711462110.193178 [0] dq.builtin: => EVERYONE -1711462110.193206 [0] dq.builtin: delete -1711462110.193304 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 336 from udp/10.101.12.71:52025 -1711462110.193329 [0] recvMC: INFOTS(1711462110.193029153) -1711462110.193347 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #19 L(:1c1 16957.852830) => EVERYONE -1711462110.193440 [0] recvMC: data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #19: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,20,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,22,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,24,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.193481 [0] recvMC: HEARTBEAT(F#29:19..19 110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@19(sync) 110cd0d:e3b81b8d:1ccb65b1:504@19(sync) 110cd0d:79d6eeac:ea4a8907:504@19(sync)) -1711462110.193527 [0] gc: gc 0x7408c8016150: deleting -1711462110.193547 [0] gc: gc 0x7408c8067c90: deleting -1711462110.193557 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8067c90, 110443d:bb7f10a5:18901533:803) -1711462110.193570 [0] gc: gc 0x7408c8043890: deleting -1711462110.193580 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8043890, 110aba1:7b19badd:ce0adb73:803) -1711462110.193585 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8067c90, 110443d:bb7f10a5:18901533:803) -1711462110.193617 [0] gc: gc 0x7408c8067c90: deleting -1711462110.193630 [0] gc: gc_delete_proxy_writer (0x7408c8067c90, 110443d:bb7f10a5:18901533:803) -1711462110.193644 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=17 -1711462110.193631 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8043890, 110aba1:7b19badd:ce0adb73:803) -1711462110.193668 [0] gc: gc 0x7408c808b3e0: not yet, shortsleep -1711462110.193815 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.193831 [0] recv: INFOTS(1711462110.193730576) -1711462110.193850 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #17 L(:1c1 16957.853332)) -1711462110.193903 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #17: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:703}} -1711462110.193945 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:703 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:703) - deleting -1711462110.193952 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.193964 [0] dq.builtin: => EVERYONE -1711462110.193986 [0] recv: INFOTS(1711462110.193391175) -1711462110.194006 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #9 L(:1c1 16957.853487)) -1711462110.194174 [0] dq.builtin: delete -1711462110.194212 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 184 from udp/10.101.12.71:44991 -1711462110.194556 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #9: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:1304}} -1711462110.194578 [0] recvMC: INFOTS(1711462110.193879178) -1711462110.194608 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:1304 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:1304) => EVERYONE -1711462110.194657 [0] dq.builtin: - deleting -1711462110.194614 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.194674 [0] dq.builtin: delete -1711462110.194616 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #18 L(:1c1 16957.854077) => EVERYONE -1711462110.194720 [0] recv: INFOTS(1711462110.194357465) -1711462110.194781 [0] gc: gc 0x7408c808b3e0: deleting -1711462110.194782 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #18: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{},{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,6,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.194826 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #19 L(:1c1 16957.854219)) -1711462110.194841 [0] gc: gc 0x7408c8043890: deleting -1711462110.194896 [0] gc: gc_delete_proxy_writer (0x7408c8043890, 110aba1:7b19badd:ce0adb73:803) -1711462110.194912 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=22 -1711462110.194930 [0] gc: gc 0x7408c8016150: deleting -1711462110.194941 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110443d:bb7f10a5:18901533:703) -1711462110.194955 [0] gc: gc 0x7408c8040ad0: deleting -1711462110.194988 [0] gc: gc_delete_proxy_reader (0x7408c8040ad0, 110e21c:d0762c48:a9f0fb28:1304) -1711462110.195005 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=29 -1711462110.194879 [0] recvMC: HEARTBEAT(F#26:18..18 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@18(sync) 110cd0d:e3b81b8d:1ccb65b1:504@18(sync) 110cd0d:79d6eeac:ea4a8907:504@18(sync)) -1711462110.195005 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110443d:bb7f10a5:18901533:703) -1711462110.195062 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 288 from udp/10.101.12.71:52025 -1711462110.194899 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #19: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:703}} -1711462110.195080 [0] recvMC: INFOTS(1711462110.194629401) -1711462110.195108 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:703 ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:703) - deleting -1711462110.195032 [0] gc: gc 0x7408c808b3e0: not yet, shortsleep -1711462110.195150 [0] dq.builtin: => EVERYONE -1711462110.195135 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #20 L(:1c1 16957.854581) => EVERYONE -1711462110.195189 [0] dq.builtin: delete -1711462110.195257 [0] recvMC: data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #20: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,22,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,24,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.195280 [0] recvMC: HEARTBEAT(F#30:20..20 110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@20(sync) 110cd0d:e3b81b8d:1ccb65b1:504@20(sync) 110cd0d:79d6eeac:ea4a8907:504@20(sync)) -1711462110.195406 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.195428 [0] recv: INFOTS(1711462110.195259141) -1711462110.195452 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #11 L(:1c1 16957.854929)) -1711462110.195482 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #11: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:1203}} -1711462110.195499 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:1203 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:1203) - deleting -1711462110.195525 [0] dq.builtin: => EVERYONE -1711462110.195537 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.195554 [0] recv: INFOTS(1711462110.195373351) -1711462110.195568 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #18 L(:1c1 16957.855056)) -1711462110.195568 [0] dq.builtin: delete -1711462110.195616 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #18: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:1403}} -1711462110.195630 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:1403 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:1403) - deleting -1711462110.195646 [0] dq.builtin: => EVERYONE -1711462110.195680 [0] dq.builtin: delete -1711462110.195821 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 460 from udp/10.101.12.71:58212 -1711462110.195841 [0] recvMC: INFOTS(1711462110.195421660) -1711462110.195865 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #13 L(:1c1 16957.855342) => EVERYONE -1711462110.196004 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #13: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.196040 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.196060 [0] recv: INFOTS(1711462110.195845630) -1711462110.196047 [0] recvMC: HEARTBEAT(F#20:13..13 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@13(sync) 110cd0d:e3b81b8d:1ccb65b1:504@13(sync) 110cd0d:79d6eeac:ea4a8907:504@13(sync)) -1711462110.196085 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #17 L(:1c1 16957.855561)) -1711462110.196116 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 160 from udp/10.101.12.71:44991 -1711462110.196145 [0] recvMC: INFOTS(1711462110.195554831) -1711462110.196160 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #19 L(:1c1 16957.855646) => EVERYONE -1711462110.196179 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #17: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1504}} -1711462110.196210 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #19: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","static_transformer",{},{}}}}) -1711462110.196212 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:1504 ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:1504) => EVERYONE -1711462110.196237 [0] recvMC: HEARTBEAT(F#27:19..19 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@19(sync) 110cd0d:e3b81b8d:1ccb65b1:504@19(sync) 110cd0d:79d6eeac:ea4a8907:504@19(sync)) -1711462110.196271 [0] dq.builtin: - deleting -1711462110.196287 [0] dq.builtin: delete -1711462110.196258 [0] gc: gc 0x7408c808b3e0: deleting -1711462110.196390 [0] gc: gc 0x7408c8040ad0: deleting -1711462110.196409 [0] gc: gc 0x7408c8016150: deleting -1711462110.196427 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110443d:bb7f10a5:18901533:703) -1711462110.196440 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=16 -1711462110.196459 [0] gc: gc 0x7408c8013c30: deleting -1711462110.196472 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8013c30, 110aba1:7b19badd:ce0adb73:703) -1711462110.196484 [0] gc: gc 0x7408c803bcd0: deleting -1711462110.196492 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c803bcd0, 110e21c:d0762c48:a9f0fb28:1203) -1711462110.196511 [0] gc: gc 0x7408c8067c90: deleting -1711462110.196517 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8013c30, 110aba1:7b19badd:ce0adb73:703) -1711462110.196521 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8067c90, 110443d:bb7f10a5:18901533:1403) -1711462110.196543 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c803bcd0, 110e21c:d0762c48:a9f0fb28:1203) -1711462110.196563 [0] gc: gc 0x7408c8066850: deleting -1711462110.196573 [0] gc: gc_delete_proxy_reader (0x7408c8066850, 110aba1:7b19badd:ce0adb73:1504) -1711462110.196585 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=21 -1711462110.196614 [0] gc: gc 0x7408c808b3e0: deleting -1711462110.196628 [0] gc: gc 0x7408c8013c30: deleting -1711462110.196639 [0] gc: gc_delete_proxy_writer (0x7408c8013c30, 110aba1:7b19badd:ce0adb73:703) -1711462110.196650 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=20 -1711462110.196617 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8067c90, 110443d:bb7f10a5:18901533:1403) -1711462110.196669 [0] gc: gc 0x7408c8066850: deleting -1711462110.196699 [0] gc: gc 0x7408c803bcd0: deleting -1711462110.196707 [0] gc: gc_delete_proxy_writer (0x7408c803bcd0, 110e21c:d0762c48:a9f0fb28:1203) -1711462110.196716 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=28 -1711462110.196731 [0] gc: gc 0x7408c808b3e0: deleting -1711462110.196741 [0] gc: gc 0x7408c8067c90: deleting -1711462110.196750 [0] gc: gc_delete_proxy_writer (0x7408c8067c90, 110443d:bb7f10a5:18901533:1403) -1711462110.196758 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=15 -1711462110.196771 [0] gc: gc 0x7408c8066850: deleting -1711462110.196780 [0] gc: gc 0x7408c808b3e0: deleting -1711462110.197066 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.197078 [0] recv: INFOTS(1711462110.196935375) -1711462110.197090 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #10 L(:1c1 16957.856581)) -1711462110.197124 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #10: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:1104}} -1711462110.197149 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:1104 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:1104) => EVERYONE -1711462110.197178 [0] dq.builtin: - deleting -1711462110.197196 [0] dq.builtin: delete -1711462110.197202 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.197213 [0] gc: gc 0x7408c8016150: deleting -1711462110.197243 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110e21c:d0762c48:a9f0fb28:1104) -1711462110.197262 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=27 -1711462110.197216 [0] recv: INFOTS(1711462110.197064444) -1711462110.197289 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.197304 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #19 L(:1c1 16957.856718)) -1711462110.197349 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #19: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:603}} -1711462110.197363 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:603 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:603) - deleting -1711462110.197374 [0] dq.builtin: => EVERYONE -1711462110.197408 [0] dq.builtin: delete -1711462110.197511 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 120 from udp/10.101.12.71:44991 -1711462110.197526 [0] recvMC: INFOTS(1711462110.197216804) -1711462110.197542 [0] recvMC: DATA(110443d:bb7f10a5:18901533:403 -> 0:0:0:0 #20 L(:1c1 16957.857028) => EVERYONE -1711462110.197596 [0] recvMC: data(application, vendor 1.16): 110443d:bb7f10a5:18901533:403 #20: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,68,61,187,127,16,165,24,144,21,51,0,0,1,193,0,0,0,0,0,0,0,0}}},{}}) -1711462110.197622 [0] recvMC: HEARTBEAT(F#28:20..20 110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@20(sync) 110cd0d:e3b81b8d:1ccb65b1:504@20(sync) 110cd0d:79d6eeac:ea4a8907:504@20(sync)) -1711462110.197673 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.197713 [0] recv: INFOTS(1711462110.197489510) -1711462110.197724 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #20 L(:1c1 16957.857216)) -1711462110.197749 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #20: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1403}} -1711462110.197787 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:1403 ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:1403) - deleting -1711462110.197798 [0] dq.builtin: => EVERYONE -1711462110.197834 [0] dq.builtin: delete -1711462110.198021 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 240 from udp/10.101.12.71:52025 -1711462110.198040 [0] recvMC: INFOTS(1711462110.197789884) -1711462110.198059 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #21 L(:1c1 16957.857541) => EVERYONE -1711462110.198116 [0] recvMC: data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #21: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,25,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,24,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.198131 [0] recvMC: HEARTBEAT(F#31:21..21 110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@21(sync) 110cd0d:e3b81b8d:1ccb65b1:504@21(sync) 110cd0d:79d6eeac:ea4a8907:504@21(sync)) -1711462110.198400 [0] gc: gc 0x7408c8066850: deleting -1711462110.198431 [0] gc: gc 0x7408c8016150: deleting -1711462110.198442 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110443d:bb7f10a5:18901533:603) -1711462110.198460 [0] gc: gc 0x7408c805eed0: deleting -1711462110.198470 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c805eed0, 110aba1:7b19badd:ce0adb73:1403) -1711462110.198474 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110443d:bb7f10a5:18901533:603) -1711462110.198508 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c805eed0, 110aba1:7b19badd:ce0adb73:1403) -1711462110.198514 [0] gc: gc 0x7408c8016150: deleting -1711462110.198549 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110443d:bb7f10a5:18901533:603) -1711462110.198550 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.198588 [0] recv: INFOTS(1711462110.198317479) -1711462110.198570 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=14 -1711462110.198604 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #12 L(:1c1 16957.858089)) -1711462110.198631 [0] gc: gc 0x7408c805eed0: deleting -1711462110.198658 [0] gc: gc_delete_proxy_writer (0x7408c805eed0, 110aba1:7b19badd:ce0adb73:1403) -1711462110.198647 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #12: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:1003}} -1711462110.198674 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=19 -1711462110.198691 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:1003 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:1003) - deleting -1711462110.198707 [0] dq.builtin: => EVERYONE -1711462110.198732 [0] dq.builtin: delete -1711462110.198731 [0] gc: gc 0x7408c8066850: deleting -1711462110.198764 [0] gc: gc 0x7408c805eed0: deleting -1711462110.198779 [0] gc: gc 0x7408c8016150: deleting -1711462110.198787 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 412 from udp/10.101.12.71:58212 -1711462110.198804 [0] recvMC: INFOTS(1711462110.198438587) -1711462110.198819 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #14 L(:1c1 16957.858306) => EVERYONE -1711462110.198790 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110e21c:d0762c48:a9f0fb28:1003) -1711462110.198871 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110e21c:d0762c48:a9f0fb28:1003) -1711462110.198901 [0] gc: gc 0x7408c8016150: deleting -1711462110.198944 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110e21c:d0762c48:a9f0fb28:1003) -1711462110.198902 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #14: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.198976 [0] recvMC: HEARTBEAT(F#21:14..14 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@14(sync) 110cd0d:e3b81b8d:1ccb65b1:504@14(sync) 110cd0d:79d6eeac:ea4a8907:504@14(sync)) -1711462110.198961 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=26 -1711462110.199014 [0] gc: gc 0x7408c8066850: deleting -1711462110.199249 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.199263 [0] recv: INFOTS(1711462110.199105790) -1711462110.199274 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #18 L(:1c1 16957.858766)) -1711462110.199325 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #18: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1704}} -1711462110.199346 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:1704 ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:1704) => EVERYONE -1711462110.199372 [0] dq.builtin: - deleting -1711462110.199389 [0] dq.builtin: delete -1711462110.199399 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.199960 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.199969 [0] recv: INFOTS(1711462110.199842623) -1711462110.199981 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #11 L(:1c1 16957.859472)) -1711462110.200018 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #11: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:f04}} -1711462110.200042 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:f04 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:f04) => EVERYONE -1711462110.200064 [0] dq.builtin: - deleting -1711462110.200074 [0] dq.builtin: delete -1711462110.200315 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.200323 [0] recv: INFOTS(1711462110.200208970) -1711462110.200337 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #13 L(:1c1 16957.859826)) -1711462110.200359 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #13: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:e03}} -1711462110.200379 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:e03 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:e03) - deleting -1711462110.200399 [0] dq.builtin: => EVERYONE -1711462110.200392 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.200429 [0] recv: INFOTS(1711462110.200281996) -1711462110.200433 [0] dq.builtin: delete -1711462110.200438 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #21 L(:1c1 16957.859932)) -1711462110.200456 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #21: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1603}} -1711462110.200934 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:1603 ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:1603) - deleting -1711462110.200954 [0] dq.builtin: => EVERYONE -1711462110.200479 [0] gc: gc 0x7408c8016150: deleting -1711462110.200991 [0] dq.builtin: delete -1711462110.201209 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110aba1:7b19badd:ce0adb73:1704) -1711462110.201159 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 364 from udp/10.101.12.71:58212 -1711462110.201281 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=18 -1711462110.201336 [0] gc: gc 0x7408c8050f20: deleting -1711462110.201354 [0] gc: gc_delete_proxy_reader (0x7408c8050f20, 110e21c:d0762c48:a9f0fb28:f04) -1711462110.201367 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=25 -1711462110.201380 [0] gc: gc 0x7408c805eed0: deleting -1711462110.201390 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c805eed0, 110e21c:d0762c48:a9f0fb28:e03) -1711462110.201317 [0] recvMC: INFOTS(1711462110.200343585) -1711462110.201493 [0] gc: gc 0x7408c8043890: deleting -1711462110.201547 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8043890, 110aba1:7b19badd:ce0adb73:1603) -1711462110.201562 [0] gc: gc 0x7408c8066850: deleting -1711462110.201575 [0] gc: gc 0x7408c8050f20: deleting -1711462110.201506 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c805eed0, 110e21c:d0762c48:a9f0fb28:e03) -1711462110.201531 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #15 L(:1c1 16957.860816) => EVERYONE -1711462110.201621 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8043890, 110aba1:7b19badd:ce0adb73:1603) -1711462110.201624 [0] gc: gc 0x7408c805eed0: deleting -1711462110.201668 [0] gc: gc_delete_proxy_writer (0x7408c805eed0, 110e21c:d0762c48:a9f0fb28:e03) -1711462110.201681 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=24 -1711462110.201696 [0] gc: gc 0x7408c8043890: deleting -1711462110.201702 [0] gc: gc_delete_proxy_writer (0x7408c8043890, 110aba1:7b19badd:ce0adb73:1603) -1711462110.201710 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=17 -1711462110.201721 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.201729 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #15: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.201754 [0] recvMC: HEARTBEAT(F#22:15..15 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@15(sync) 110cd0d:e3b81b8d:1ccb65b1:504@15(sync) 110cd0d:79d6eeac:ea4a8907:504@15(sync)) -1711462110.201779 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 192 from udp/10.101.12.71:52025 -1711462110.201791 [0] recvMC: INFOTS(1711462110.200384071) -1711462110.201808 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #22 L(:1c1 16957.861293) => EVERYONE -1711462110.201838 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.201850 [0] recv: INFOTS(1711462110.201520038) -1711462110.201871 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #12 L(:1c1 16957.861352)) -1711462110.201915 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #12: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:d04}} -1711462110.201940 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:d04 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:d04) => EVERYONE -1711462110.201856 [0] recvMC: data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #22: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{},{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,6,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.201970 [0] dq.builtin: - deleting -1711462110.202031 [0] recvMC: HEARTBEAT(F#32:22..22 110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@22(sync) 110cd0d:e3b81b8d:1ccb65b1:504@22(sync) 110cd0d:79d6eeac:ea4a8907:504@22(sync)) -1711462110.202033 [0] dq.builtin: delete -1711462110.202730 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.202739 [0] recv: INFOTS(1711462110.202594273) -1711462110.202749 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #19 L(:1c1 16957.862242)) -1711462110.202791 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #19: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1904}} -1711462110.202812 [0] gc: gc 0x7408c8066850: deleting -1711462110.202825 [0] gc: gc 0x7408c8043890: deleting -1711462110.202846 [0] gc: gc 0x7408c8016150: deleting -1711462110.202862 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110e21c:d0762c48:a9f0fb28:d04) -1711462110.202881 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=23 -1711462110.202817 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:1904 ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:1904) => EVERYONE -1711462110.202897 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.202921 [0] dq.builtin: - deleting -1711462110.202935 [0] dq.builtin: delete -1711462110.203026 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.203035 [0] recv: INFOTS(1711462110.202893761) -1711462110.203048 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #14 L(:1c1 16957.862538)) -1711462110.203076 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #14: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:c03}} -1711462110.203087 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:c03 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:c03) - deleting -1711462110.203094 [0] dq.builtin: => EVERYONE -1711462110.203118 [0] dq.builtin: delete -1711462110.203229 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 316 from udp/10.101.12.71:58212 -1711462110.203253 [0] recvMC: INFOTS(1711462110.202997343) -1711462110.203274 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #16 L(:1c1 16957.862753) => EVERYONE -1711462110.203366 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #16: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.203387 [0] recvMC: HEARTBEAT(F#23:16..16 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@16(sync) 110cd0d:e3b81b8d:1ccb65b1:504@16(sync) 110cd0d:79d6eeac:ea4a8907:504@16(sync)) -1711462110.203999 [0] gc: gc 0x7408c8066850: deleting -1711462110.204015 [0] gc: gc 0x7408c8016150: deleting -1711462110.204021 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110aba1:7b19badd:ce0adb73:1904) -1711462110.204033 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=16 -1711462110.204042 [0] gc: gc 0x7408c8050f20: deleting -1711462110.204049 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8050f20, 110e21c:d0762c48:a9f0fb28:c03) -1711462110.204057 [0] gc: gc 0x7408c8066850: deleting -1711462110.204074 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8050f20, 110e21c:d0762c48:a9f0fb28:c03) -1711462110.204106 [0] gc: gc 0x7408c8050f20: deleting -1711462110.204117 [0] gc: gc_delete_proxy_writer (0x7408c8050f20, 110e21c:d0762c48:a9f0fb28:c03) -1711462110.204128 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=22 -1711462110.204138 [0] gc: gc 0x7408c8066850: deleting -1711462110.204139 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.204175 [0] recv: INFOTS(1711462110.204013066) -1711462110.204191 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #22 L(:1c1 16957.863677)) -1711462110.204221 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #22: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:1803}} -1711462110.204236 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:1803 ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:1803) - deleting -1711462110.204247 [0] dq.builtin: => EVERYONE -1711462110.204282 [0] dq.builtin: delete -1711462110.204303 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.204372 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 168 from udp/10.101.12.71:52025 -1711462110.204394 [0] recvMC: INFOTS(1711462110.204092708) -1711462110.204413 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #23 L(:1c1 16957.863895) => EVERYONE -1711462110.204469 [0] recvMC: data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #23: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_navigation_core",{},{}}}}) -1711462110.204483 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.204525 [0] recv: INFOTS(1711462110.204117111) -1711462110.204546 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #13 L(:1c1 16957.864025)) -1711462110.204488 [0] recvMC: HEARTBEAT(F#33:23..23 110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@23(sync) 110cd0d:e3b81b8d:1ccb65b1:504@23(sync) 110cd0d:79d6eeac:ea4a8907:504@23(sync)) -1711462110.204605 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #13: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:b04}} -1711462110.204628 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:b04 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:b04) => EVERYONE -1711462110.204659 [0] dq.builtin: - deleting -1711462110.204670 [0] dq.builtin: delete -1711462110.205394 [0] gc: gc 0x7408c8016150: deleting -1711462110.205413 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110aba1:7b19badd:ce0adb73:1803) -1711462110.205432 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.205460 [0] recv: INFOTS(1711462110.205296205) -1711462110.205438 [0] gc: gc 0x7408c805eed0: deleting -1711462110.205486 [0] gc: gc_delete_proxy_reader (0x7408c805eed0, 110e21c:d0762c48:a9f0fb28:b04) -1711462110.205503 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=21 -1711462110.205462 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110aba1:7b19badd:ce0adb73:1803) -1711462110.205531 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.205486 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #23 L(:1c1 16957.864960)) -1711462110.205672 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #23: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:603}} -1711462110.205694 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:603 ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:603) - deleting -1711462110.205724 [0] dq.builtin: => EVERYONE -1711462110.205674 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.205738 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 120 from udp/10.101.12.71:52025 -1711462110.205776 [0] recv: INFOTS(1711462110.205333502) -1711462110.205827 [0] recvMC: INFOTS(1711462110.205378348) -1711462110.205758 [0] dq.builtin: delete -1711462110.205854 [0] recvMC: DATA(110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0 #24 L(:1c1 16957.865322) => EVERYONE -1711462110.205893 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #15 L(:1c1 16957.865272)) -1711462110.205929 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #15: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:a03}} -1711462110.205947 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:a03 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:a03) - deleting -1711462110.205961 [0] dq.builtin: => EVERYONE -1711462110.205933 [0] recvMC: data(application, vendor 1.16): 110aba1:7b19badd:ce0adb73:403 #24: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,171,161,123,25,186,221,206,10,219,115,0,0,1,193,0,0,0,0,0,0,0,0}}},{}}) -1711462110.205994 [0] dq.builtin: delete -1711462110.205998 [0] recvMC: HEARTBEAT(F#34:24..24 110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@24(sync) 110cd0d:e3b81b8d:1ccb65b1:504@24(sync) 110cd0d:79d6eeac:ea4a8907:504@24(sync)) -1711462110.206038 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 268 from udp/10.101.12.71:58212 -1711462110.206052 [0] recvMC: INFOTS(1711462110.205461976) -1711462110.206073 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #17 L(:1c1 16957.865554) => EVERYONE -1711462110.206150 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #17: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,21,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.206168 [0] recvMC: HEARTBEAT(F#24:17..17 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@17(sync) 110cd0d:e3b81b8d:1ccb65b1:504@17(sync) 110cd0d:79d6eeac:ea4a8907:504@17(sync)) -1711462110.206703 [0] gc: gc 0x7408c8066850: deleting -1711462110.206736 [0] gc: gc 0x7408c8016150: deleting -1711462110.206747 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110aba1:7b19badd:ce0adb73:1803) -1711462110.206759 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=15 -1711462110.206778 [0] gc: gc 0x7408c8050f20: deleting -1711462110.206792 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8050f20, 110aba1:7b19badd:ce0adb73:603) -1711462110.206814 [0] gc: gc 0x7408c805eed0: deleting -1711462110.206824 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c805eed0, 110e21c:d0762c48:a9f0fb28:a03) -1711462110.206845 [0] gc: gc 0x7408c8066850: deleting -1711462110.206823 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.206864 [0] recv: INFOTS(1711462110.206657137) -1711462110.206832 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8050f20, 110aba1:7b19badd:ce0adb73:603) -1711462110.206885 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #14 L(:1c1 16957.866364)) -1711462110.206911 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c805eed0, 110e21c:d0762c48:a9f0fb28:a03) -1711462110.206952 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #14: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:904}} -1711462110.206989 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:904 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:904) => EVERYONE -1711462110.206972 [0] gc: gc 0x7408c8050f20: deleting -1711462110.207019 [0] gc: gc_delete_proxy_writer (0x7408c8050f20, 110aba1:7b19badd:ce0adb73:603) -1711462110.207010 [0] dq.builtin: - deleting -1711462110.207036 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=14 -1711462110.207042 [0] dq.builtin: delete -1711462110.207052 [0] gc: gc 0x7408c805eed0: deleting -1711462110.207063 [0] gc: gc_delete_proxy_writer (0x7408c805eed0, 110e21c:d0762c48:a9f0fb28:a03) -1711462110.207072 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=20 -1711462110.207087 [0] gc: gc 0x7408c8016150: deleting -1711462110.207095 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110e21c:d0762c48:a9f0fb28:904) -1711462110.207103 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=19 -1711462110.207116 [0] gc: gc 0x7408c8066850: deleting -1711462110.207126 [0] gc: gc 0x7408c805eed0: deleting -1711462110.207135 [0] gc: gc 0x7408c8016150: deleting -1711462110.208199 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.208213 [0] recv: INFOTS(1711462110.208064226) -1711462110.208227 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #16 L(:1c1 16957.867715)) -1711462110.208245 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #16: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:803}} -1711462110.208255 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:803 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:803) - deleting -1711462110.208265 [0] dq.builtin: => EVERYONE -1711462110.208289 [0] dq.builtin: delete -1711462110.208308 [0] gc: gc 0x7408c8016150: deleting -1711462110.208333 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110e21c:d0762c48:a9f0fb28:803) -1711462110.208359 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110e21c:d0762c48:a9f0fb28:803) -1711462110.208380 [0] gc: gc 0x7408c8016150: deleting -1711462110.208393 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110e21c:d0762c48:a9f0fb28:803) -1711462110.208406 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=18 -1711462110.208423 [0] gc: gc 0x7408c8066850: deleting -1711462110.208439 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 244 from udp/10.101.12.71:58212 -1711462110.208453 [0] recvMC: INFOTS(1711462110.208197991) -1711462110.208476 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #18 L(:1c1 16957.867955) => EVERYONE -1711462110.208595 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #18: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.208613 [0] recvMC: HEARTBEAT(F#25:18..18 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@18(sync) 110cd0d:e3b81b8d:1ccb65b1:504@18(sync) 110cd0d:79d6eeac:ea4a8907:504@18(sync)) -1711462110.209394 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.209413 [0] recv: INFOTS(1711462110.209265145) -1711462110.209423 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #15 L(:1c1 16957.868914)) -1711462110.209449 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #15: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:1504}} -1711462110.209465 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:1504 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:1504) => EVERYONE -1711462110.209492 [0] dq.builtin: - deleting -1711462110.209507 [0] dq.builtin: delete -1711462110.209518 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.209652 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 220 from udp/10.101.12.71:58212 -1711462110.209675 [0] recvMC: INFOTS(1711462110.209425688) -1711462110.209702 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #19 L(:1c1 16957.869175) => EVERYONE -1711462110.209768 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #19: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,20,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.209790 [0] recvMC: HEARTBEAT(F#26:19..19 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@19(sync) 110cd0d:e3b81b8d:1ccb65b1:504@19(sync) 110cd0d:79d6eeac:ea4a8907:504@19(sync)) -1711462110.210608 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.210631 [0] recv: INFOTS(1711462110.210493781) -1711462110.210618 [0] gc: gc 0x7408c8016150: deleting -1711462110.210650 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #17 L(:1c1 16957.870133)) -1711462110.210673 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110e21c:d0762c48:a9f0fb28:1504) -1711462110.210689 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=17 -1711462110.210708 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #17: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:703}} -1711462110.210728 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:703 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:703) - deleting -1711462110.210745 [0] dq.builtin: => EVERYONE -1711462110.210709 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.210778 [0] dq.builtin: delete -1711462110.210865 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 196 from udp/10.101.12.71:58212 -1711462110.210886 [0] recvMC: INFOTS(1711462110.210679198) -1711462110.210943 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #20 L(:1c1 16957.870387) => EVERYONE -1711462110.210996 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #20: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{},{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,6,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.211016 [0] recvMC: HEARTBEAT(F#27:20..20 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@20(sync) 110cd0d:e3b81b8d:1ccb65b1:504@20(sync) 110cd0d:79d6eeac:ea4a8907:504@20(sync)) -1711462110.211784 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.211804 [0] recv: INFOTS(1711462110.211688403) -1711462110.211819 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #18 L(:1c1 16957.871304)) -1711462110.211845 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #18: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:1403}} -1711462110.211871 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:1403 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:1403) - deleting -1711462110.211881 [0] dq.builtin: => EVERYONE -1711462110.211850 [0] gc: gc 0x7408c8066850: deleting -1711462110.211911 [0] dq.builtin: delete -1711462110.211912 [0] gc: gc 0x7408c8016150: deleting -1711462110.211945 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110e21c:d0762c48:a9f0fb28:703) -1711462110.211959 [0] gc: gc 0x7408c8006f50: deleting -1711462110.211966 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110e21c:d0762c48:a9f0fb28:703) -1711462110.211969 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8006f50, 110e21c:d0762c48:a9f0fb28:1403) -1711462110.212008 [0] gc: gc 0x7408c8016150: deleting -1711462110.212020 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110e21c:d0762c48:a9f0fb28:703) -1711462110.212039 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=16 -1711462110.212012 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8006f50, 110e21c:d0762c48:a9f0fb28:1403) -1711462110.211989 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 172 from udp/10.101.12.71:58212 -1711462110.212059 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.212095 [0] recvMC: INFOTS(1711462110.211821961) -1711462110.212148 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #21 L(:1c1 16957.871594) => EVERYONE -1711462110.212194 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #21: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","topological_transform_publisher",{},{}}}}) -1711462110.212231 [0] recvMC: HEARTBEAT(F#28:21..21 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@21(sync) 110cd0d:e3b81b8d:1ccb65b1:504@21(sync) 110cd0d:79d6eeac:ea4a8907:504@21(sync)) -1711462110.213023 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.213043 [0] recv: INFOTS(1711462110.212917857) -1711462110.213052 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #19 L(:1c1 16957.872546)) -1711462110.213076 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #19: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:603}} -1711462110.213090 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:603 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:603) - deleting -1711462110.213098 [0] dq.builtin: => EVERYONE -1711462110.213121 [0] dq.builtin: delete -1711462110.213171 [0] gc: gc 0x7408c8066850: deleting -1711462110.213191 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 120 from udp/10.101.12.71:58212 -1711462110.213215 [0] recvMC: INFOTS(1711462110.213044269) -1711462110.213195 [0] gc: gc 0x7408c8006f50: deleting -1711462110.213247 [0] gc: gc_delete_proxy_writer (0x7408c8006f50, 110e21c:d0762c48:a9f0fb28:1403) -1711462110.213258 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=15 -1711462110.213239 [0] recvMC: DATA(110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0 #22 L(:1c1 16957.872717) => EVERYONE -1711462110.213275 [0] gc: gc 0x7408c8016150: deleting -1711462110.213302 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110e21c:d0762c48:a9f0fb28:603) -1711462110.213314 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.213315 [0] recvMC: data(application, vendor 1.16): 110e21c:d0762c48:a9f0fb28:403 #22: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,226,28,208,118,44,72,169,240,251,40,0,0,1,193,0,0,0,0,0,0,0,0}}},{}}) -1711462110.213339 [0] recvMC: HEARTBEAT(F#29:22..22 110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@22(sync) 110cd0d:e3b81b8d:1ccb65b1:504@22(sync) 110cd0d:79d6eeac:ea4a8907:504@22(sync)) -1711462110.213351 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110e21c:d0762c48:a9f0fb28:603) -1711462110.213444 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2096 from udp/10.101.12.71:40473 -1711462110.213457 [0] recvMC: INFOTS(1711462110.213069639) -1711462110.213476 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #46 L(:1c1 16957.872959) => EVERYONE -1711462110.213590 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #46: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,19,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462110.213605 [0] recvMC: HEARTBEAT(#55:46..46 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@46(sync) 110cd0d:e3b81b8d:1ccb65b1:504@46(sync) 110cd0d:79d6eeac:ea4a8907:504@46(sync)) -1711462110.213623 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#6:47/0: -1711462110.213634 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462110.213642 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.213651 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#22:47/0: -1711462110.213656 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462110.213663 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.213670 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#13:47/0: -1711462110.213676 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462110.213683 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.213718 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c4011ad8:44 0x7408bc009950:24 0x7408bc009978:28 0x7408bc0097d0:24 0x7408bc0097f8:28 [ udp/10.101.12.71:7415@2 ] -1711462110.213724 [0] tev: traffic-xmit (1) 168 -1711462110.214399 [0] gc: gc 0x7408c8066850: deleting -1711462110.214417 [0] gc: gc 0x7408c8016150: deleting -1711462110.214422 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110e21c:d0762c48:a9f0fb28:603) -1711462110.214428 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=14 -1711462110.214436 [0] gc: gc 0x7408c8066850: deleting -1711462110.214546 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.214565 [0] recv: INFOTS(1711462110.214373670) -1711462110.214583 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #41 L(:1c1 16957.874066)) -1711462110.214627 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #41: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2704}} -1711462110.214644 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2704 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2704) => EVERYONE -1711462110.214678 [0] dq.builtin: - deleting -1711462110.214698 [0] dq.builtin: delete -1711462110.214705 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.215786 [0] gc: gc 0x7408c8016150: deleting -1711462110.215807 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2704) -1711462110.215825 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=96 -1711462110.215842 [0] gc: gc 0x7408c8066850: deleting -1711462110.215895 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.215909 [0] recv: INFOTS(1711462110.215754782) -1711462110.215935 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #46 L(:1c1 16957.875412)) -1711462110.215962 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #46: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2603}} -1711462110.215975 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2603 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2603) - deleting -1711462110.215985 [0] dq.builtin: => EVERYONE -1711462110.216008 [0] dq.builtin: delete -1711462110.216015 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.216118 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2048 from udp/10.101.12.71:40473 -1711462110.216133 [0] recvMC: INFOTS(1711462110.215865725) -1711462110.216150 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #47 L(:1c1 16957.875636) => EVERYONE -1711462110.216273 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #47: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462110.216285 [0] recvMC: HEARTBEAT(F#56:47..47 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@47(sync) 110cd0d:e3b81b8d:1ccb65b1:504@47(sync) 110cd0d:79d6eeac:ea4a8907:504@47(sync)) -1711462110.217088 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.217106 [0] recv: INFOTS(1711462110.216976537) -1711462110.217128 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #42 L(:1c1 16957.876608)) -1711462110.217105 [0] gc: gc 0x7408c8016150: deleting -1711462110.217166 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2603) -1711462110.217187 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #42: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1304}} -1711462110.217191 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2603) -1711462110.217222 [0] gc: gc 0x7408c8016150: deleting -1711462110.217239 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2603) -1711462110.217263 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=95 -1711462110.217227 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1304 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1304) => EVERYONE -1711462110.217299 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.217361 [0] dq.builtin: - deleting -1711462110.217384 [0] dq.builtin: delete -1711462110.218412 [0] gc: gc 0x7408c8066850: deleting -1711462110.218431 [0] gc: gc 0x7408c8016150: deleting -1711462110.218447 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1304) -1711462110.218461 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=94 -1711462110.218490 [0] gc: gc 0x7408c8066850: deleting -1711462110.218565 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.218588 [0] recv: INFOTS(1711462110.218401795) -1711462110.218607 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #47 L(:1c1 16957.878091)) -1711462110.218657 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #47: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1203}} -1711462110.218684 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1203 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1203) - deleting -1711462110.218703 [0] dq.builtin: => EVERYONE -1711462110.218748 [0] dq.builtin: delete -1711462110.218759 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.218933 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 2000 from udp/10.101.12.71:40473 -1711462110.218945 [0] recvMC: INFOTS(1711462110.218561783) -1711462110.218958 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #48 L(:1c1 16957.878448) => EVERYONE -1711462110.219087 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #48: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,3) -1711462110.219101 [0] recvMC: HEARTBEAT(F#57:48..48 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@48(sync) 110cd0d:e3b81b8d:1ccb65b1:504@48(sync) 110cd0d:79d6eeac:ea4a8907:504@48(sync)) -1711462110.219798 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.219816 [0] recv: INFOTS(1711462110.219653728) -1711462110.219838 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #43 L(:1c1 16957.879318)) -1711462110.219841 [0] gc: gc 0x7408c8016150: deleting -1711462110.219876 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #43: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1104}} -1711462110.219880 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1203) -1711462110.219917 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1104 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1104) => EVERYONE -1711462110.219955 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1203) -1711462110.219986 [0] dq.builtin: - deleting -1711462110.220189 [0] gc: gc 0x7408c8016150: deleting -1711462110.220231 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1203) -1711462110.220209 [0] dq.builtin: delete -1711462110.220250 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=93 -1711462110.220289 [0] gc: gc 0x7408c8006f50: deleting -1711462110.220306 [0] gc: gc_delete_proxy_reader (0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:1104) -1711462110.220320 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=92 -1711462110.220340 [0] gc: gc 0x7408c8066850: deleting -1711462110.220352 [0] gc: gc 0x7408c8006f50: deleting -1711462110.221055 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.221079 [0] recv: INFOTS(1711462110.220906100) -1711462110.221101 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #48 L(:1c1 16957.880581)) -1711462110.221135 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #48: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1003}} -1711462110.221162 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1003 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1003) - deleting -1711462110.221179 [0] dq.builtin: => EVERYONE -1711462110.221225 [0] dq.builtin: delete -1711462110.221236 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.221390 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1952 from udp/10.101.12.71:40473 -1711462110.221411 [0] recvMC: INFOTS(1711462110.221033854) -1711462110.221437 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #49 L(:1c1 16957.880913) => EVERYONE -1711462110.221589 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #49: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,4) -1711462110.221607 [0] recvMC: HEARTBEAT(F#58:49..49 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@49(sync) 110cd0d:e3b81b8d:1ccb65b1:504@49(sync) 110cd0d:79d6eeac:ea4a8907:504@49(sync)) -1711462110.222300 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.222321 [0] recv: INFOTS(1711462110.222150811) -1711462110.222351 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #44 L(:1c1 16957.881824)) -1711462110.222326 [0] gc: gc 0x7408c8016150: deleting -1711462110.222387 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1003) -1711462110.222387 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #44: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:f04}} -1711462110.222413 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1003) -1711462110.222439 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:f04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:f04) => EVERYONE -1711462110.222464 [0] gc: gc 0x7408c8016150: deleting -1711462110.222523 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1003) -1711462110.222534 [0] dq.builtin: - deleting -1711462110.222569 [0] dq.builtin: delete -1711462110.222541 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=91 -1711462110.222643 [0] gc: gc 0x7408c8016150: deleting -1711462110.222652 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:f04) -1711462110.222659 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=90 -1711462110.222671 [0] gc: gc 0x7408c8066850: deleting -1711462110.222678 [0] gc: gc 0x7408c8016150: deleting -1711462110.223611 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.223632 [0] recv: INFOTS(1711462110.223428697) -1711462110.223657 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #49 L(:1c1 16957.883134)) -1711462110.223704 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #49: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:e03}} -1711462110.223727 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:e03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:e03) - deleting -1711462110.223740 [0] dq.builtin: => EVERYONE -1711462110.223778 [0] dq.builtin: delete -1711462110.223794 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.223898 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1904 from udp/10.101.12.71:40473 -1711462110.223914 [0] recvMC: INFOTS(1711462110.223556659) -1711462110.223963 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #50 L(:1c1 16957.883417) => EVERYONE -1711462110.224102 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #50: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,4) -1711462110.224117 [0] recvMC: HEARTBEAT(F#59:50..50 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@50(sync) 110cd0d:e3b81b8d:1ccb65b1:504@50(sync) 110cd0d:79d6eeac:ea4a8907:504@50(sync)) -1711462110.224802 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.224819 [0] recv: INFOTS(1711462110.224684003) -1711462110.224853 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #45 L(:1c1 16957.884322)) -1711462110.224887 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #45: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:d04}} -1711462110.224921 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:d04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:d04) => EVERYONE -1711462110.224888 [0] gc: gc 0x7408c8016150: deleting -1711462110.224958 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:e03) -1711462110.224964 [0] dq.builtin: - deleting -1711462110.224999 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:e03) -1711462110.225022 [0] dq.builtin: delete -1711462110.225031 [0] gc: gc 0x7408c8006f50: not yet, shortsleep -1711462110.226085 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.226107 [0] recv: INFOTS(1711462110.225949014) -1711462110.226130 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #50 L(:1c1 16957.885610)) -1711462110.226147 [0] gc: gc 0x7408c8006f50: deleting -1711462110.226171 [0] gc: gc_delete_proxy_reader (0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:d04) -1711462110.226178 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #50: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:c03}} -1711462110.226200 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:c03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:c03) - deleting -1711462110.226215 [0] dq.builtin: => EVERYONE -1711462110.226182 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=89 -1711462110.226244 [0] dq.builtin: delete -1711462110.226249 [0] gc: gc 0x7408c8016150: deleting -1711462110.226314 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:e03) -1711462110.226328 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=88 -1711462110.226339 [0] gc: gc 0x7408c8006f50: deleting -1711462110.226356 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:c03) -1711462110.226368 [0] gc: gc 0x7408c8066850: deleting -1711462110.226376 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:c03) -1711462110.226377 [0] gc: gc 0x7408c8016150: deleting -1711462110.226402 [0] gc: gc 0x7408c8006f50: deleting -1711462110.226413 [0] gc: gc_delete_proxy_writer (0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:c03) -1711462110.226418 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1856 from udp/10.101.12.71:40473 -1711462110.226422 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=87 -1711462110.226459 [0] recvMC: INFOTS(1711462110.226054803) -1711462110.226476 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.226518 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #51 L(:1c1 16957.885958) => EVERYONE -1711462110.226725 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #51: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,4) -1711462110.226792 [0] recvMC: HEARTBEAT(F#60:51..51 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@51(sync) 110cd0d:e3b81b8d:1ccb65b1:504@51(sync) 110cd0d:79d6eeac:ea4a8907:504@51(sync)) -1711462110.227307 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.227345 [0] recv: INFOTS(1711462110.227176717) -1711462110.227370 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #46 L(:1c1 16957.886848)) -1711462110.227414 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #46: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:b04}} -1711462110.227444 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:b04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:b04) => EVERYONE -1711462110.227477 [0] dq.builtin: - deleting -1711462110.227505 [0] dq.builtin: delete -1711462110.227592 [0] gc: gc 0x7408c8066850: deleting -1711462110.227625 [0] gc: gc 0x7408c8016150: deleting -1711462110.227639 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:b04) -1711462110.227652 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=86 -1711462110.227673 [0] gc: gc 0x7408c8066850: deleting -1711462110.228821 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.228910 [0] recv: INFOTS(1711462110.228522592) -1711462110.228951 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #51 L(:1c1 16957.888411)) -1711462110.228998 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #51: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:a03}} -1711462110.229019 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:a03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:a03) - deleting -1711462110.229042 [0] dq.builtin: => EVERYONE -1711462110.229086 [0] dq.builtin: delete -1711462110.229113 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.229235 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1808 from udp/10.101.12.71:40473 -1711462110.229248 [0] recvMC: INFOTS(1711462110.228719825) -1711462110.229262 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #52 L(:1c1 16957.888751) => EVERYONE -1711462110.229400 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #52: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.229415 [0] recvMC: HEARTBEAT(F#61:52..52 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@52(sync) 110cd0d:e3b81b8d:1ccb65b1:504@52(sync) 110cd0d:79d6eeac:ea4a8907:504@52(sync)) -1711462110.229999 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.230014 [0] recv: INFOTS(1711462110.229849806) -1711462110.230029 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #47 L(:1c1 16957.889516)) -1711462110.230053 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #47: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:904}} -1711462110.230072 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:904 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:904) => EVERYONE -1711462110.230109 [0] dq.builtin: - deleting -1711462110.230121 [0] dq.builtin: delete -1711462110.230235 [0] gc: gc 0x7408c8016150: deleting -1711462110.230255 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:a03) -1711462110.230272 [0] gc: gc 0x7408c8006f50: deleting -1711462110.230281 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:a03) -1711462110.230285 [0] gc: gc_delete_proxy_reader (0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:904) -1711462110.230325 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=85 -1711462110.230351 [0] gc: gc 0x7408c8016150: deleting -1711462110.230362 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:a03) -1711462110.230374 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=84 -1711462110.230394 [0] gc: gc 0x7408c8066850: deleting -1711462110.230408 [0] gc: gc 0x7408c8016150: deleting -1711462110.231107 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.231117 [0] recv: INFOTS(1711462110.231018837) -1711462110.231131 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #52 L(:1c1 16957.890619)) -1711462110.231166 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #52: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:803}} -1711462110.231182 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:803 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:803) - deleting -1711462110.231188 [0] dq.builtin: => EVERYONE -1711462110.231210 [0] dq.builtin: delete -1711462110.231230 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.231409 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1784 from udp/10.101.12.71:40473 -1711462110.231419 [0] recvMC: INFOTS(1711462110.231152392) -1711462110.231430 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #53 L(:1c1 16957.890921) => EVERYONE -1711462110.231540 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #53: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.231550 [0] recvMC: HEARTBEAT(F#62:53..53 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@53(sync) 110cd0d:e3b81b8d:1ccb65b1:504@53(sync) 110cd0d:79d6eeac:ea4a8907:504@53(sync)) -1711462110.232296 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.232304 [0] recv: INFOTS(1711462110.232191115) -1711462110.232316 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #53 L(:1c1 16957.891807)) -1711462110.232327 [0] gc: gc 0x7408c8016150: deleting -1711462110.232349 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:803) -1711462110.232361 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #53: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:703}} -1711462110.232404 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:703 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:703) - deleting -1711462110.232420 [0] dq.builtin: => EVERYONE -1711462110.232404 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:803) -1711462110.232454 [0] dq.builtin: delete -1711462110.232476 [0] gc: gc 0x7408c807d440: not yet, shortsleep -1711462110.232716 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1736 from udp/10.101.12.71:40473 -1711462110.232730 [0] recvMC: INFOTS(1711462110.232345337) -1711462110.232748 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #54 L(:1c1 16957.892233) => EVERYONE -1711462110.232850 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #54: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,23,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.232865 [0] recvMC: HEARTBEAT(F#63:54..54 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@54(sync) 110cd0d:e3b81b8d:1ccb65b1:504@54(sync) 110cd0d:79d6eeac:ea4a8907:504@54(sync)) -1711462110.233446 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.233457 [0] recv: INFOTS(1711462110.233337855) -1711462110.233473 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #48 L(:1c1 16957.892960)) -1711462110.233506 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #48: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1504}} -1711462110.233525 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1504 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1504) => EVERYONE -1711462110.233548 [0] dq.builtin: - deleting -1711462110.233557 [0] dq.builtin: delete -1711462110.233586 [0] gc: gc 0x7408c807d440: deleting -1711462110.233607 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c807d440, 110d7b4:17c5b8c5:94bd0ff4:703) -1711462110.233624 [0] gc: gc 0x7408c8016150: deleting -1711462110.233635 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:803) -1711462110.233641 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c807d440, 110d7b4:17c5b8c5:94bd0ff4:703) -1711462110.233648 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=83 -1711462110.233697 [0] gc: gc 0x7408c8006f50: deleting -1711462110.233714 [0] gc: gc_delete_proxy_reader (0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:1504) -1711462110.233727 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=82 -1711462110.233750 [0] gc: gc 0x7408c807d440: deleting -1711462110.233761 [0] gc: gc_delete_proxy_writer (0x7408c807d440, 110d7b4:17c5b8c5:94bd0ff4:703) -1711462110.233773 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=81 -1711462110.233789 [0] gc: gc 0x7408c8066850: deleting -1711462110.233824 [0] gc: gc 0x7408c8006f50: deleting -1711462110.233836 [0] gc: gc 0x7408c807d440: deleting -1711462110.234700 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.234727 [0] recv: INFOTS(1711462110.234533470) -1711462110.234757 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #54 L(:1c1 16957.894228)) -1711462110.234794 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #54: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1403}} -1711462110.234815 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1403 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1403) - deleting -1711462110.234827 [0] dq.builtin: => EVERYONE -1711462110.234875 [0] dq.builtin: delete -1711462110.234897 [0] gc: gc 0x7408c8016150: deleting -1711462110.234919 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1403) -1711462110.234960 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1403) -1711462110.234997 [0] gc: gc 0x7408c8016150: deleting -1711462110.235016 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1403) -1711462110.235030 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=80 -1711462110.235054 [0] gc: gc 0x7408c8066850: deleting -1711462110.235142 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1688 from udp/10.101.12.71:40473 -1711462110.235152 [0] recvMC: INFOTS(1711462110.234735835) -1711462110.235166 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #55 L(:1c1 16957.894655) => EVERYONE -1711462110.235278 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #55: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,25,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.235296 [0] recvMC: HEARTBEAT(F#64:55..55 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@55(sync) 110cd0d:e3b81b8d:1ccb65b1:504@55(sync) 110cd0d:79d6eeac:ea4a8907:504@55(sync)) -1711462110.235938 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.235951 [0] recv: INFOTS(1711462110.235766500) -1711462110.235972 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #49 L(:1c1 16957.895453)) -1711462110.236013 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #49: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1704}} -1711462110.236041 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1704 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1704) => EVERYONE -1711462110.236063 [0] dq.builtin: - deleting -1711462110.236083 [0] dq.builtin: delete -1711462110.236093 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.237167 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.237254 [0] recv: INFOTS(1711462110.236982638) -1711462110.237180 [0] gc: gc 0x7408c8016150: deleting -1711462110.237277 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #55 L(:1c1 16957.896754)) -1711462110.237301 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1704) -1711462110.237320 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=79 -1711462110.237340 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.237340 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #55: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1603}} -1711462110.237379 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1603 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1603) - deleting -1711462110.237387 [0] dq.builtin: => EVERYONE -1711462110.237406 [0] dq.builtin: delete -1711462110.237502 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1640 from udp/10.101.12.71:40473 -1711462110.237521 [0] recvMC: INFOTS(1711462110.237105267) -1711462110.237536 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #56 L(:1c1 16957.897023) => EVERYONE -1711462110.237657 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #56: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,27,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.237669 [0] recvMC: HEARTBEAT(F#65:56..56 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@56(sync) 110cd0d:e3b81b8d:1ccb65b1:504@56(sync) 110cd0d:79d6eeac:ea4a8907:504@56(sync)) -1711462110.238358 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.238386 [0] recv: INFOTS(1711462110.238231579) -1711462110.238407 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #50 L(:1c1 16957.897886)) -1711462110.238430 [0] gc: gc 0x7408c8066850: deleting -1711462110.238433 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #50: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1904}} -1711462110.238451 [0] gc: gc 0x7408c8016150: deleting -1711462110.238470 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1603) -1711462110.238498 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1904 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1904) => EVERYONE -1711462110.238515 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1603) -1711462110.238529 [0] dq.builtin: - deleting -1711462110.238558 [0] gc: gc 0x7408c8016150: deleting -1711462110.238577 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1603) -1711462110.238559 [0] dq.builtin: delete -1711462110.238590 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=78 -1711462110.238624 [0] gc: gc 0x7408c8035250: deleting -1711462110.238633 [0] gc: gc_delete_proxy_reader (0x7408c8035250, 110d7b4:17c5b8c5:94bd0ff4:1904) -1711462110.238658 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=77 -1711462110.238672 [0] gc: gc 0x7408c8066850: deleting -1711462110.238681 [0] gc: gc 0x7408c8035250: deleting -1711462110.239502 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.239517 [0] recv: INFOTS(1711462110.239384619) -1711462110.239532 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #56 L(:1c1 16957.899019)) -1711462110.239557 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #56: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1803}} -1711462110.239566 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1803 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1803) - deleting -1711462110.239574 [0] dq.builtin: => EVERYONE -1711462110.239598 [0] dq.builtin: delete -1711462110.239622 [0] gc: gc 0x7408c8016150: deleting -1711462110.239646 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1803) -1711462110.239672 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1803) -1711462110.239696 [0] gc: gc 0x7408c8016150: deleting -1711462110.239707 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1803) -1711462110.239718 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=76 -1711462110.239739 [0] gc: gc 0x7408c8066850: deleting -1711462110.239849 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1592 from udp/10.101.12.71:40473 -1711462110.239857 [0] recvMC: INFOTS(1711462110.239529783) -1711462110.239869 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #57 L(:1c1 16957.899360) => EVERYONE -1711462110.239958 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #57: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,29,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.239972 [0] recvMC: HEARTBEAT(F#66:57..57 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@57(sync) 110cd0d:e3b81b8d:1ccb65b1:504@57(sync) 110cd0d:79d6eeac:ea4a8907:504@57(sync)) -1711462110.240673 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.240693 [0] recv: INFOTS(1711462110.240557023) -1711462110.240719 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #51 L(:1c1 16957.900194)) -1711462110.240743 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #51: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1b04}} -1711462110.240758 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1b04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1b04) => EVERYONE -1711462110.240787 [0] dq.builtin: - deleting -1711462110.240806 [0] dq.builtin: delete -1711462110.240823 [0] gc: gc 0x7408c8016150: deleting -1711462110.240863 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1b04) -1711462110.240876 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=75 -1711462110.240892 [0] gc: gc 0x7408c8066850: deleting -1711462110.240938 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.240961 [0] recv: INFOTS(1711462110.240780572) -1711462110.240979 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #57 L(:1c1 16957.900461)) -1711462110.241001 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #57: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1a03}} -1711462110.241011 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1a03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1a03) - deleting -1711462110.241017 [0] dq.builtin: => EVERYONE -1711462110.241035 [0] dq.builtin: delete -1711462110.241047 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.241163 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1544 from udp/10.101.12.71:40473 -1711462110.241178 [0] recvMC: INFOTS(1711462110.240869006) -1711462110.241198 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #58 L(:1c1 16957.900680) => EVERYONE -1711462110.241324 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #58: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,31,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.241338 [0] recvMC: HEARTBEAT(F#67:58..58 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@58(sync) 110cd0d:e3b81b8d:1ccb65b1:504@58(sync) 110cd0d:79d6eeac:ea4a8907:504@58(sync)) -1711462110.242041 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.242075 [0] recv: INFOTS(1711462110.241943611) -1711462110.242099 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #52 L(:1c1 16957.901575)) -1711462110.242123 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #52: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1d04}} -1711462110.242132 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1d04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1d04) => EVERYONE -1711462110.242141 [0] gc: gc 0x7408c8016150: deleting -1711462110.242166 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1a03) -1711462110.242157 [0] dq.builtin: - deleting -1711462110.242192 [0] dq.builtin: delete -1711462110.242196 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1a03) -1711462110.242201 [0] gc: gc 0x7408c807c290: deleting -1711462110.242230 [0] gc: gc_delete_proxy_reader (0x7408c807c290, 110d7b4:17c5b8c5:94bd0ff4:1d04) -1711462110.242239 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=74 -1711462110.242253 [0] gc: gc 0x7408c8016150: deleting -1711462110.242272 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1a03) -1711462110.242281 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=73 -1711462110.242294 [0] gc: gc 0x7408c8066850: deleting -1711462110.242303 [0] gc: gc 0x7408c8016150: deleting -1711462110.243206 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.243227 [0] recv: INFOTS(1711462110.243107441) -1711462110.243252 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #58 L(:1c1 16957.902729)) -1711462110.243274 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #58: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1c03}} -1711462110.243284 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1c03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1c03) - deleting -1711462110.243290 [0] dq.builtin: => EVERYONE -1711462110.243313 [0] dq.builtin: delete -1711462110.243326 [0] gc: gc 0x7408c8016150: deleting -1711462110.243342 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1c03) -1711462110.243365 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1c03) -1711462110.243390 [0] gc: gc 0x7408c8016150: deleting -1711462110.243397 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1c03) -1711462110.243407 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=72 -1711462110.243420 [0] gc: gc 0x7408c8066850: deleting -1711462110.243505 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1496 from udp/10.101.12.71:40473 -1711462110.243522 [0] recvMC: INFOTS(1711462110.243228417) -1711462110.243538 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #59 L(:1c1 16957.903025) => EVERYONE -1711462110.243635 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #59: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,33,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.243649 [0] recvMC: HEARTBEAT(F#68:59..59 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@59(sync) 110cd0d:e3b81b8d:1ccb65b1:504@59(sync) 110cd0d:79d6eeac:ea4a8907:504@59(sync)) -1711462110.244378 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.244398 [0] recv: INFOTS(1711462110.244270576) -1711462110.244414 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #53 L(:1c1 16957.903899)) -1711462110.244435 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #53: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1f04}} -1711462110.244446 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1f04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:1f04) => EVERYONE -1711462110.244463 [0] dq.builtin: - deleting -1711462110.244475 [0] dq.builtin: delete -1711462110.244483 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.245493 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.245513 [0] recv: INFOTS(1711462110.245398636) -1711462110.245529 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #59 L(:1c1 16957.905014)) -1711462110.245553 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #59: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:1e03}} -1711462110.245567 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:1e03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:1e03) - deleting -1711462110.245576 [0] dq.builtin: => EVERYONE -1711462110.245585 [0] gc: gc 0x7408c8016150: deleting -1711462110.245598 [0] dq.builtin: delete -1711462110.245602 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:1f04) -1711462110.245621 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=71 -1711462110.245639 [0] gc: gc 0x7408c8006f50: deleting -1711462110.245645 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:1e03) -1711462110.245653 [0] gc: gc 0x7408c8066850: deleting -1711462110.245672 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:1e03) -1711462110.245720 [0] gc: gc 0x7408c8006f50: deleting -1711462110.245727 [0] gc: gc_delete_proxy_writer (0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:1e03) -1711462110.245734 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=70 -1711462110.245742 [0] gc: gc 0x7408c8066850: deleting -1711462110.245799 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1448 from udp/10.101.12.71:40473 -1711462110.245807 [0] recvMC: INFOTS(1711462110.245476405) -1711462110.245819 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #60 L(:1c1 16957.905310) => EVERYONE -1711462110.245908 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #60: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,35,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.245917 [0] recvMC: HEARTBEAT(F#69:60..60 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@60(sync) 110cd0d:e3b81b8d:1ccb65b1:504@60(sync) 110cd0d:79d6eeac:ea4a8907:504@60(sync)) -1711462110.246634 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.246665 [0] recv: INFOTS(1711462110.246534188) -1711462110.246687 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #54 L(:1c1 16957.906165)) -1711462110.246714 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #54: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2104}} -1711462110.246730 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2104 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2104) => EVERYONE -1711462110.246752 [0] dq.builtin: - deleting -1711462110.246777 [0] dq.builtin: delete -1711462110.246783 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.246904 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.246928 [0] recv: INFOTS(1711462110.246821907) -1711462110.246943 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #60 L(:1c1 16957.906429)) -1711462110.246967 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #60: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2003}} -1711462110.246981 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2003 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2003) - deleting -1711462110.246998 [0] dq.builtin: => EVERYONE -1711462110.247021 [0] dq.builtin: delete -1711462110.247205 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1400 from udp/10.101.12.71:40473 -1711462110.247215 [0] recvMC: INFOTS(1711462110.246924796) -1711462110.247228 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #61 L(:1c1 16957.906718) => EVERYONE -1711462110.247313 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #61: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,37,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.247322 [0] recvMC: HEARTBEAT(F#70:61..61 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@61(sync) 110cd0d:e3b81b8d:1ccb65b1:504@61(sync) 110cd0d:79d6eeac:ea4a8907:504@61(sync)) -1711462110.247873 [0] gc: gc 0x7408c8016150: deleting -1711462110.247897 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2104) -1711462110.247907 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=69 -1711462110.247923 [0] gc: gc 0x7408c807d440: deleting -1711462110.247931 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c807d440, 110d7b4:17c5b8c5:94bd0ff4:2003) -1711462110.247940 [0] gc: gc 0x7408c8066850: deleting -1711462110.247953 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c807d440, 110d7b4:17c5b8c5:94bd0ff4:2003) -1711462110.247982 [0] gc: gc 0x7408c807d440: deleting -1711462110.247993 [0] gc: gc_delete_proxy_writer (0x7408c807d440, 110d7b4:17c5b8c5:94bd0ff4:2003) -1711462110.248002 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=68 -1711462110.248014 [0] gc: gc 0x7408c8066850: deleting -1711462110.248090 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.248115 [0] recv: INFOTS(1711462110.248003659) -1711462110.248139 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #55 L(:1c1 16957.907615)) -1711462110.248160 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #55: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2304}} -1711462110.248176 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2304 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2304) => EVERYONE -1711462110.248200 [0] dq.builtin: - deleting -1711462110.248214 [0] dq.builtin: delete -1711462110.248223 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.249284 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.249326 [0] recv: INFOTS(1711462110.249152398) -1711462110.249303 [0] gc: gc 0x7408c8016150: deleting -1711462110.249366 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2304) -1711462110.249378 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=67 -1711462110.249353 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #61 L(:1c1 16957.908826)) -1711462110.249402 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.249427 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #61: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2203}} -1711462110.249436 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2203 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2203) - deleting -1711462110.249447 [0] dq.builtin: => EVERYONE -1711462110.249470 [0] dq.builtin: delete -1711462110.249564 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1352 from udp/10.101.12.71:40473 -1711462110.249574 [0] recvMC: INFOTS(1711462110.249287705) -1711462110.249589 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #62 L(:1c1 16957.909077) => EVERYONE -1711462110.249715 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #62: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.249727 [0] recvMC: HEARTBEAT(F#71:62..62 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@62(sync) 110cd0d:e3b81b8d:1ccb65b1:504@62(sync) 110cd0d:79d6eeac:ea4a8907:504@62(sync)) -1711462110.250399 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.250430 [0] recv: INFOTS(1711462110.250315538) -1711462110.250448 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #56 L(:1c1 16957.909921)) -1711462110.250472 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #56: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2504}} -1711462110.250487 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2504 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2504) => EVERYONE -1711462110.250505 [0] gc: gc 0x7408c8066850: deleting -1711462110.250515 [0] dq.builtin: - deleting -1711462110.250525 [0] gc: gc 0x7408c8016150: deleting -1711462110.250539 [0] dq.builtin: delete -1711462110.250553 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2203) -1711462110.250567 [0] gc: gc 0x7408c8035250: deleting -1711462110.250575 [0] gc: gc_delete_proxy_reader (0x7408c8035250, 110d7b4:17c5b8c5:94bd0ff4:2504) -1711462110.250590 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=66 -1711462110.250580 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2203) -1711462110.250619 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.250676 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.250701 [0] recv: INFOTS(1711462110.250535418) -1711462110.250719 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #62 L(:1c1 16957.910201)) -1711462110.250742 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #62: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2403}} -1711462110.250753 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2403 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2403) - deleting -1711462110.250760 [0] dq.builtin: => EVERYONE -1711462110.250778 [0] dq.builtin: delete -1711462110.250812 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:403) suppressed, resched in inf s (min-ack 13, avail-seq 13, xmit 13) -1711462110.250922 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1304 from udp/10.101.12.71:40473 -1711462110.250937 [0] recvMC: INFOTS(1711462110.250646289) -1711462110.250953 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #63 L(:1c1 16957.910439) => EVERYONE -1711462110.251110 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #63: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,41,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.251138 [0] recvMC: HEARTBEAT(F#72:63..63 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@63(sync) 110cd0d:e3b81b8d:1ccb65b1:504@63(sync) 110cd0d:79d6eeac:ea4a8907:504@63(sync)) -1711462110.251522 [0] tev: writer_hbcontrol: wr 110cd0d:56a27910:57318171:3c2 multicasting (rel-prd 4 seq-eq-max 4 seq 10 maxseq 9) -1711462110.251550 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:3c2) sent, resched in 0.1 s (min-ack 9, avail-seq 10, xmit 10) -1711462110.251562 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 0 sz 0 => now niov 2 sz 52 -1711462110.251623 [0] recv: HDR(110cd0d:56a27910:57318171 vendor 1.16) len 52 from udp/10.101.12.71:50807 -1711462110.251643 [0] recv: HEARTBEAT(#9:1..10 110cd0d:56a27910:57318171:3c2? -> 0:0:0:0) -1711462110.251627 [0] tev: nn_xpack_send 52: 0x7408c000139c:20 0x7408c4011ae8:32 [ udp/239.255.0.1:7400@2 ] -1711462110.251677 [0] tev: traffic-xmit (1) 52 -1711462110.251717 [0] gc: gc 0x7408c8066850: deleting -1711462110.251726 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 64 from udp/10.101.12.71:40473 -1711462110.251748 [0] gc: gc 0x7408c8016150: deleting -1711462110.251762 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462110.251780 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2203) -1711462110.251788 [0] recv: ACKNACK(F#3:11/0: L(:1c1 16957.911263) 110d7b4:17c5b8c5:94bd0ff4:3c7 -> 110cd0d:56a27910:57318171:3c2 ACK1 RM0) -1711462110.251802 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=65 -1711462110.251841 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 64 from udp/10.101.12.71:58212 -1711462110.251855 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462110.251846 [0] gc: gc 0x7408c807c290: deleting -1711462110.251882 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c807c290, 110d7b4:17c5b8c5:94bd0ff4:2403) -1711462110.251872 [0] recv: ACKNACK(F#3:11/0: L(:1c1 16957.911357) 110e21c:d0762c48:a9f0fb28:3c7 -> 110cd0d:56a27910:57318171:3c2 ACK1 RM0) -1711462110.251901 [0] gc: gc 0x7408c8066850: deleting -1711462110.251914 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c807c290, 110d7b4:17c5b8c5:94bd0ff4:2403) -1711462110.251919 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 64 from udp/10.101.12.71:44991 -1711462110.251963 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462110.251979 [0] recv: ACKNACK(F#3:11/0: L(:1c1 16957.911465) 110443d:bb7f10a5:18901533:3c7 -> 110cd0d:56a27910:57318171:3c2 ACK1 RM0) -1711462110.251990 [0] gc: gc 0x7408c807c290: deleting -1711462110.252011 [0] gc: gc_delete_proxy_writer (0x7408c807c290, 110d7b4:17c5b8c5:94bd0ff4:2403) -1711462110.251994 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.252037 [0] recv: INFOTS(1711462110.251787909) -1711462110.252023 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=64 -1711462110.252053 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #57 L(:1c1 16957.911538)) -1711462110.252071 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.252089 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 64 from udp/10.101.12.71:52025 -1711462110.252114 [0] recv: INFODST(110cd0d:56a27910:57318171) -1711462110.252102 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #57: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5104}} -1711462110.252132 [0] recv: ACKNACK(F#3:11/0: L(:1c1 16957.911615) 110aba1:7b19badd:ce0adb73:3c7 -> 110cd0d:56a27910:57318171:3c2 ACK1 RM1) -1711462110.252151 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5104 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:5104) => EVERYONE -1711462110.252188 [0] dq.builtin: - deleting -1711462110.252199 [0] dq.builtin: delete -1711462110.253173 [0] gc: gc 0x7408c8066850: deleting -1711462110.253191 [0] gc: gc 0x7408c8016150: deleting -1711462110.253200 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5104) -1711462110.253209 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=63 -1711462110.253223 [0] gc: gc 0x7408c8066850: deleting -1711462110.253282 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.253300 [0] recv: INFOTS(1711462110.253143913) -1711462110.253324 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #63 L(:1c1 16957.912801)) -1711462110.253346 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #63: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5003}} -1711462110.253360 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5003 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:5003) - deleting -1711462110.253369 [0] dq.builtin: => EVERYONE -1711462110.253402 [0] dq.builtin: delete -1711462110.253420 [0] gc: gc 0x7408c8016150: deleting -1711462110.253438 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5003) -1711462110.253474 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5003) -1711462110.253510 [0] gc: gc 0x7408c8016150: deleting -1711462110.253520 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5003) -1711462110.253545 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1256 from udp/10.101.12.71:40473 -1711462110.253560 [0] recvMC: INFOTS(1711462110.253252814) -1711462110.253547 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=62 -1711462110.253578 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #64 L(:1c1 16957.913062) => EVERYONE -1711462110.253599 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.253754 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #64: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,43,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.253772 [0] recvMC: HEARTBEAT(F#73:64..64 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@64(sync) 110cd0d:e3b81b8d:1ccb65b1:504@64(sync) 110cd0d:79d6eeac:ea4a8907:504@64(sync)) -1711462110.254430 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.254447 [0] recv: INFOTS(1711462110.254311896) -1711462110.254465 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #58 L(:1c1 16957.913949)) -1711462110.254485 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #58: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2904}} -1711462110.254502 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2904 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2904) => EVERYONE -1711462110.254522 [0] dq.builtin: - deleting -1711462110.254530 [0] dq.builtin: delete -1711462110.254685 [0] gc: gc 0x7408c8066850: deleting -1711462110.254701 [0] gc: gc 0x7408c8016150: deleting -1711462110.254709 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2904) -1711462110.254717 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=61 -1711462110.254730 [0] gc: gc 0x7408c8066850: deleting -1711462110.255572 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.255839 [0] recv: INFOTS(1711462110.255450496) -1711462110.255853 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #64 L(:1c1 16957.915341)) -1711462110.255881 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #64: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2803}} -1711462110.255901 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2803 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2803) - deleting -1711462110.255916 [0] dq.builtin: => EVERYONE -1711462110.255963 [0] dq.builtin: delete -1711462110.255975 [0] gc: gc 0x7408c8016150: deleting -1711462110.255988 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1208 from udp/10.101.12.71:40473 -1711462110.256000 [0] recvMC: INFOTS(1711462110.255527534) -1711462110.255989 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2803) -1711462110.256020 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #65 L(:1c1 16957.915502) => EVERYONE -1711462110.256048 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2803) -1711462110.256087 [0] gc: gc 0x7408c8016150: deleting -1711462110.256097 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2803) -1711462110.256108 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=60 -1711462110.256123 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.256195 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #65: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,45,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.256212 [0] recvMC: HEARTBEAT(F#74:65..65 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@65(sync) 110cd0d:e3b81b8d:1ccb65b1:504@65(sync) 110cd0d:79d6eeac:ea4a8907:504@65(sync)) -1711462110.256649 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.256668 [0] recv: INFOTS(1711462110.256559919) -1711462110.256701 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #59 L(:1c1 16957.916170)) -1711462110.256741 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #59: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2b04}} -1711462110.256773 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2b04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2b04) => EVERYONE -1711462110.256801 [0] dq.builtin: - deleting -1711462110.256809 [0] dq.builtin: delete -1711462110.257196 [0] gc: gc 0x7408c8066850: deleting -1711462110.257212 [0] gc: gc 0x7408c8016150: deleting -1711462110.257219 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2b04) -1711462110.257227 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=59 -1711462110.257240 [0] gc: gc 0x7408c8066850: deleting -1711462110.257806 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.257820 [0] recv: INFOTS(1711462110.257696628) -1711462110.257833 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #65 L(:1c1 16957.917322)) -1711462110.257876 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #65: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2a03}} -1711462110.257895 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2a03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2a03) - deleting -1711462110.257901 [0] dq.builtin: => EVERYONE -1711462110.257920 [0] dq.builtin: delete -1711462110.257933 [0] gc: gc 0x7408c8016150: deleting -1711462110.257947 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2a03) -1711462110.257968 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2a03) -1711462110.258005 [0] gc: gc 0x7408c8016150: deleting -1711462110.258016 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2a03) -1711462110.258025 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=58 -1711462110.258039 [0] gc: gc 0x7408c8066850: deleting -1711462110.258063 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1160 from udp/10.101.12.71:40473 -1711462110.258090 [0] recvMC: INFOTS(1711462110.257775243) -1711462110.258109 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #66 L(:1c1 16957.917592) => EVERYONE -1711462110.258254 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #66: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,47,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.258270 [0] recvMC: HEARTBEAT(F#75:66..66 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@66(sync) 110cd0d:e3b81b8d:1ccb65b1:504@66(sync) 110cd0d:79d6eeac:ea4a8907:504@66(sync)) -1711462110.258986 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.259013 [0] recv: INFOTS(1711462110.258846924) -1711462110.259031 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #60 L(:1c1 16957.918515)) -1711462110.259071 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #60: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2d04}} -1711462110.259096 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2d04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2d04) => EVERYONE -1711462110.259121 [0] dq.builtin: - deleting -1711462110.259129 [0] dq.builtin: delete -1711462110.259142 [0] gc: gc 0x7408c8016150: deleting -1711462110.259157 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2d04) -1711462110.259168 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=57 -1711462110.259183 [0] gc: gc 0x7408c8066850: deleting -1711462110.260389 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.260404 [0] recv: INFOTS(1711462110.260256234) -1711462110.260427 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #66 L(:1c1 16957.919905)) -1711462110.260467 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #66: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2c03}} -1711462110.260491 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2c03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2c03) - deleting -1711462110.260531 [0] dq.builtin: => EVERYONE -1711462110.260564 [0] dq.builtin: delete -1711462110.260581 [0] gc: gc 0x7408c8016150: deleting -1711462110.260613 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2c03) -1711462110.260639 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2c03) -1711462110.260668 [0] gc: gc 0x7408c8016150: deleting -1711462110.260696 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2c03) -1711462110.260707 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=56 -1711462110.260723 [0] gc: gc 0x7408c8066850: deleting -1711462110.260725 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1112 from udp/10.101.12.71:40473 -1711462110.260772 [0] recvMC: INFOTS(1711462110.260382757) -1711462110.260790 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #67 L(:1c1 16957.920273) => EVERYONE -1711462110.260972 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #67: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,49,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.260991 [0] recvMC: HEARTBEAT(F#76:67..67 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@67(sync) 110cd0d:e3b81b8d:1ccb65b1:504@67(sync) 110cd0d:79d6eeac:ea4a8907:504@67(sync)) -1711462110.261641 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.261669 [0] recv: INFOTS(1711462110.261474906) -1711462110.261693 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #61 L(:1c1 16957.921171)) -1711462110.261757 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #61: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2f04}} -1711462110.261782 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2f04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:2f04) => EVERYONE -1711462110.261809 [0] dq.builtin: - deleting -1711462110.261824 [0] dq.builtin: delete -1711462110.261843 [0] gc: gc 0x7408c8016150: deleting -1711462110.261864 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2f04) -1711462110.261881 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=55 -1711462110.261901 [0] gc: gc 0x7408c8066850: deleting -1711462110.262875 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.262900 [0] recv: INFOTS(1711462110.262693665) -1711462110.262922 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #67 L(:1c1 16957.922401)) -1711462110.262965 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #67: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:2e03}} -1711462110.262992 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:2e03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:2e03) - deleting -1711462110.263001 [0] dq.builtin: => EVERYONE -1711462110.263037 [0] dq.builtin: delete -1711462110.263058 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.263186 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1064 from udp/10.101.12.71:40473 -1711462110.263202 [0] recvMC: INFOTS(1711462110.262818245) -1711462110.263367 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #68 L(:1c1 16957.922703) => EVERYONE -1711462110.263618 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #68: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,51,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.263653 [0] recvMC: HEARTBEAT(F#77:68..68 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@68(sync) 110cd0d:e3b81b8d:1ccb65b1:504@68(sync) 110cd0d:79d6eeac:ea4a8907:504@68(sync)) -1711462110.264166 [0] gc: gc 0x7408c8016150: deleting -1711462110.264199 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2e03) -1711462110.264173 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.264244 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2e03) -1711462110.264275 [0] recv: INFOTS(1711462110.263960068) -1711462110.264319 [0] gc: gc 0x7408c8016150: deleting -1711462110.264367 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:2e03) -1711462110.264349 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #62 L(:1c1 16957.923773)) -1711462110.264395 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=54 -1711462110.264444 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #62: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3104}} -1711462110.264445 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.264466 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3104 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3104) => EVERYONE -1711462110.264520 [0] dq.builtin: - deleting -1711462110.264535 [0] dq.builtin: delete -1711462110.265429 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.265459 [0] recv: INFOTS(1711462110.265251831) -1711462110.265480 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #68 L(:1c1 16957.924959)) -1711462110.265527 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #68: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3003}} -1711462110.265546 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3003 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3003) - deleting -1711462110.265561 [0] dq.builtin: => EVERYONE -1711462110.265564 [0] gc: gc 0x7408c8066850: deleting -1711462110.265597 [0] dq.builtin: delete -1711462110.265635 [0] gc: gc 0x7408c8016150: deleting -1711462110.265680 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3104) -1711462110.265695 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=53 -1711462110.265717 [0] gc: gc 0x7408c8006f50: deleting -1711462110.265727 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:3003) -1711462110.265740 [0] gc: gc 0x7408c8066850: deleting -1711462110.265775 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 1016 from udp/10.101.12.71:40473 -1711462110.265757 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:3003) -1711462110.265808 [0] recvMC: INFOTS(1711462110.265383925) -1711462110.265855 [0] gc: gc 0x7408c8006f50: deleting -1711462110.265876 [0] gc: gc_delete_proxy_writer (0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:3003) -1711462110.265861 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #69 L(:1c1 16957.925308) => EVERYONE -1711462110.265893 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=52 -1711462110.265916 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.266080 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #69: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,53,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.266109 [0] recvMC: HEARTBEAT(F#78:69..69 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@69(sync) 110cd0d:e3b81b8d:1ccb65b1:504@69(sync) 110cd0d:79d6eeac:ea4a8907:504@69(sync)) -1711462110.266663 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.266687 [0] recv: INFOTS(1711462110.266492303) -1711462110.266710 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #63 L(:1c1 16957.926188)) -1711462110.266752 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #63: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3304}} -1711462110.266778 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3304 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3304) => EVERYONE -1711462110.266808 [0] dq.builtin: - deleting -1711462110.266823 [0] dq.builtin: delete -1711462110.267005 [0] gc: gc 0x7408c8066850: deleting -1711462110.267031 [0] gc: gc 0x7408c8016150: deleting -1711462110.267040 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3304) -1711462110.267051 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=51 -1711462110.267069 [0] gc: gc 0x7408c8066850: deleting -1711462110.268335 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.268349 [0] recv: INFOTS(1711462110.268216434) -1711462110.268368 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #69 L(:1c1 16957.927850)) -1711462110.268417 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #69: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3203}} -1711462110.268437 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3203 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3203) - deleting -1711462110.268451 [0] dq.builtin: => EVERYONE -1711462110.268473 [0] dq.builtin: delete -1711462110.268489 [0] gc: gc 0x7408c8016150: deleting -1711462110.268550 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3203) -1711462110.268604 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3203) -1711462110.268635 [0] gc: gc 0x7408c8016150: deleting -1711462110.268643 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 968 from udp/10.101.12.71:40473 -1711462110.268644 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3203) -1711462110.268671 [0] recvMC: INFOTS(1711462110.268318557) -1711462110.268676 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=50 -1711462110.268693 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #70 L(:1c1 16957.928172) => EVERYONE -1711462110.268703 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.268839 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #70: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,55,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.268861 [0] recvMC: HEARTBEAT(F#79:70..70 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@70(sync) 110cd0d:e3b81b8d:1ccb65b1:504@70(sync) 110cd0d:79d6eeac:ea4a8907:504@70(sync)) -1711462110.269576 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.269601 [0] recv: INFOTS(1711462110.269427108) -1711462110.269625 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #64 L(:1c1 16957.929102)) -1711462110.269665 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #64: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3504}} -1711462110.269684 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3504 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3504) => EVERYONE -1711462110.269718 [0] dq.builtin: - deleting -1711462110.269731 [0] dq.builtin: delete -1711462110.269791 [0] gc: gc 0x7408c8066850: deleting -1711462110.269816 [0] gc: gc 0x7408c8016150: deleting -1711462110.269826 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3504) -1711462110.269836 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=49 -1711462110.269854 [0] gc: gc 0x7408c8066850: deleting -1711462110.270719 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.270736 [0] recv: INFOTS(1711462110.270594373) -1711462110.270768 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #70 L(:1c1 16957.930236)) -1711462110.270805 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #70: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3403}} -1711462110.270830 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3403 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3403) - deleting -1711462110.270837 [0] dq.builtin: => EVERYONE -1711462110.270865 [0] dq.builtin: delete -1711462110.270888 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.271030 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 920 from udp/10.101.12.71:40473 -1711462110.271052 [0] recvMC: INFOTS(1711462110.270694611) -1711462110.271074 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #71 L(:1c1 16957.930553) => EVERYONE -1711462110.271211 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #71: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,57,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.271232 [0] recvMC: HEARTBEAT(F#80:71..71 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@71(sync) 110cd0d:e3b81b8d:1ccb65b1:504@71(sync) 110cd0d:79d6eeac:ea4a8907:504@71(sync)) -1711462110.271908 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.271923 [0] recv: INFOTS(1711462110.271774725) -1711462110.271944 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #65 L(:1c1 16957.931424)) -1711462110.271989 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #65: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3704}} -1711462110.272013 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3704 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3704) => EVERYONE -1711462110.271999 [0] gc: gc 0x7408c8016150: deleting -1711462110.272031 [0] dq.builtin: - deleting -1711462110.272057 [0] dq.builtin: delete -1711462110.272045 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3403) -1711462110.272090 [0] gc: gc 0x7408c807d440: deleting -1711462110.272100 [0] gc: gc_delete_proxy_reader (0x7408c807d440, 110d7b4:17c5b8c5:94bd0ff4:3704) -1711462110.272116 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=48 -1711462110.272103 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3403) -1711462110.272135 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.273239 [0] gc: gc 0x7408c8066850: deleting -1711462110.273262 [0] gc: gc 0x7408c8016150: deleting -1711462110.273272 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3403) -1711462110.273281 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=47 -1711462110.273298 [0] gc: gc 0x7408c8066850: deleting -1711462110.273327 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.273344 [0] recv: INFOTS(1711462110.273181976) -1711462110.273364 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #71 L(:1c1 16957.932846)) -1711462110.273402 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #71: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3603}} -1711462110.273425 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3603 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3603) - deleting -1711462110.273451 [0] dq.builtin: => EVERYONE -1711462110.273478 [0] dq.builtin: delete -1711462110.273488 [0] gc: gc 0x7408c8016150: deleting -1711462110.273502 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3603) -1711462110.273526 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3603) -1711462110.273553 [0] gc: gc 0x7408c8016150: deleting -1711462110.273564 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3603) -1711462110.273574 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=46 -1711462110.273581 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 872 from udp/10.101.12.71:40473 -1711462110.273596 [0] gc: gc 0x7408c8066850: deleting -1711462110.273618 [0] recvMC: INFOTS(1711462110.273304522) -1711462110.273655 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #72 L(:1c1 16957.933119) => EVERYONE -1711462110.273809 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #72: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,59,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,) -1711462110.273834 [0] recvMC: HEARTBEAT(F#81:72..72 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@72(sync) 110cd0d:e3b81b8d:1ccb65b1:504@72(sync) 110cd0d:79d6eeac:ea4a8907:504@72(sync)) -1711462110.274653 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.274688 [0] recv: INFOTS(1711462110.274472079) -1711462110.274715 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #66 L(:1c1 16957.934187)) -1711462110.274761 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #66: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3904}} -1711462110.274783 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3904 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3904) => EVERYONE -1711462110.274804 [0] dq.builtin: - deleting -1711462110.274816 [0] dq.builtin: delete -1711462110.274827 [0] gc: gc 0x7408c8016150: deleting -1711462110.274842 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3904) -1711462110.274854 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=45 -1711462110.274872 [0] gc: gc 0x7408c8066850: deleting -1711462110.275981 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.276010 [0] recv: INFOTS(1711462110.275834015) -1711462110.276041 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #72 L(:1c1 16957.935510)) -1711462110.276081 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #72: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3803}} -1711462110.276105 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3803 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3803) - deleting -1711462110.276126 [0] dq.builtin: => EVERYONE -1711462110.276159 [0] dq.builtin: delete -1711462110.276173 [0] gc: gc 0x7408c8016150: deleting -1711462110.276199 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3803) -1711462110.276231 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3803) -1711462110.276261 [0] gc: gc 0x7408c8016150: deleting -1711462110.276275 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3803) -1711462110.276286 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=44 -1711462110.276297 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 824 from udp/10.101.12.71:40473 -1711462110.276349 [0] recvMC: INFOTS(1711462110.275936014) -1711462110.276322 [0] gc: gc 0x7408c8066850: deleting -1711462110.276373 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #73 L(:1c1 16957.935849) => EVERYONE -1711462110.276573 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #73: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,61,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0) -1711462110.276600 [0] recvMC: HEARTBEAT(F#82:73..73 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@73(sync) 110cd0d:e3b81b8d:1ccb65b1:504@73(sync) 110cd0d:79d6eeac:ea4a8907:504@73(sync)) -1711462110.277013 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462110.277060 [0] recv: HEARTBEAT(#8:1..13 L(:1c1 16957.936539)110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:4c7@13(sync) 110cd0d:e3b81b8d:1ccb65b1:4c7@13(sync) 110cd0d:79d6eeac:ea4a8907:4c7@13(sync)) -1711462110.277088 [0] tev: acknack 110cd0d:56a27910:57318171:4c7 -> 110443d:bb7f10a5:18901533:4c2: F#4:14/0: -1711462110.277113 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:4c7 -> pwr 110443d:bb7f10a5:18901533:4c2) -1711462110.277139 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.277159 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110443d:bb7f10a5:18901533:4c2: F#12:14/0: -1711462110.277174 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:4c7 -> pwr 110443d:bb7f10a5:18901533:4c2) -1711462110.277189 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.277206 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:4c7 -> 110443d:bb7f10a5:18901533:4c2: F#7:14/0: -1711462110.277220 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:4c7 -> pwr 110443d:bb7f10a5:18901533:4c2) -1711462110.277233 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.277301 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c4011ad8:44 0x7408bc009950:24 0x7408bc009978:28 0x7408bc0097d0:24 0x7408bc0097f8:28 [ udp/10.101.12.71:7416@2 ] -1711462110.277319 [0] tev: traffic-xmit (1) 168 -1711462110.277484 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.277526 [0] recv: INFOTS(1711462110.277107873) -1711462110.277554 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #67 L(:1c1 16957.937026)) -1711462110.277597 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #67: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3b04}} -1711462110.277620 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3b04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3b04) => EVERYONE -1711462110.277674 [0] dq.builtin: - deleting -1711462110.277688 [0] dq.builtin: delete -1711462110.277708 [0] gc: gc 0x7408c8016150: deleting -1711462110.277735 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3b04) -1711462110.277750 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=43 -1711462110.277773 [0] gc: gc 0x7408c8066850: deleting -1711462110.278616 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 52 from udp/10.101.12.71:52025 -1711462110.278662 [0] recv: HEARTBEAT(#7:1..19 L(:1c1 16957.938144)110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:4c7@19(sync) 110cd0d:e3b81b8d:1ccb65b1:4c7@19(sync) 110cd0d:79d6eeac:ea4a8907:4c7@19(sync)) -1711462110.278688 [0] tev: acknack 110cd0d:56a27910:57318171:4c7 -> 110aba1:7b19badd:ce0adb73:4c2: F#4:20/0: -1711462110.278719 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:4c7 -> pwr 110aba1:7b19badd:ce0adb73:4c2) -1711462110.278740 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.278692 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.278796 [0] recv: INFOTS(1711462110.278533644) -1711462110.278765 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110aba1:7b19badd:ce0adb73:4c2: F#12:20/0: -1711462110.278842 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:4c7 -> pwr 110aba1:7b19badd:ce0adb73:4c2) -1711462110.278861 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.278823 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #73 L(:1c1 16957.938295)) -1711462110.278888 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:4c7 -> 110aba1:7b19badd:ce0adb73:4c2: F#7:20/0: -1711462110.278940 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:4c7 -> pwr 110aba1:7b19badd:ce0adb73:4c2) -1711462110.278961 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.278960 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #73: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3a03}} -1711462110.279012 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c4011ad8:44 0x7408bc009950:24 0x7408bc009978:28 0x7408bc0097d0:24 0x7408bc0097f8:28 [ udp/10.101.12.71:7418@2 ] -1711462110.279035 [0] tev: traffic-xmit (1) 168 -1711462110.279015 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3a03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3a03) - deleting -1711462110.279086 [0] dq.builtin: => EVERYONE -1711462110.279124 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 776 from udp/10.101.12.71:40473 -1711462110.279137 [0] dq.builtin: delete -1711462110.279159 [0] recvMC: INFOTS(1711462110.278642503) -1711462110.279158 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.279189 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #74 L(:1c1 16957.938659) => EVERYONE -1711462110.279391 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #74: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,63,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462110.279440 [0] recvMC: HEARTBEAT(F#83:74..74 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@74(sync) 110cd0d:e3b81b8d:1ccb65b1:504@74(sync) 110cd0d:79d6eeac:ea4a8907:504@74(sync)) -1711462110.279494 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462110.279529 [0] recv: HEARTBEAT(#8:1..19 L(:1c1 16957.939014)110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:3c7@19(sync) 110cd0d:e3b81b8d:1ccb65b1:3c7@19(sync) 110cd0d:79d6eeac:ea4a8907:3c7@19(sync)) -1711462110.279548 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#4:20/0: -1711462110.279572 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462110.279586 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.279604 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#14:20/0: -1711462110.279616 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462110.279626 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.279644 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#8:20/0: -1711462110.279656 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462110.279667 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.279709 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c4011ad8:44 0x7408bc009950:24 0x7408bc009978:28 0x7408bc0097d0:24 0x7408bc0097f8:28 [ udp/10.101.12.71:7416@2 ] -1711462110.279723 [0] tev: traffic-xmit (1) 168 -1711462110.279900 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 52 from udp/10.101.12.71:52025 -1711462110.279956 [0] recv: HEARTBEAT(#7:1..23 L(:1c1 16957.939436)110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:3c7@23(sync) 110cd0d:e3b81b8d:1ccb65b1:3c7@23(sync) 110cd0d:79d6eeac:ea4a8907:3c7@23(sync)) -1711462110.279969 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110aba1:7b19badd:ce0adb73:3c2: F#4:24/0: -1711462110.280003 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110aba1:7b19badd:ce0adb73:3c2) -1711462110.280018 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.280034 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110aba1:7b19badd:ce0adb73:3c2: F#14:24/0: -1711462110.280045 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:3c7 -> pwr 110aba1:7b19badd:ce0adb73:3c2) -1711462110.280056 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.280069 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:3c7 -> 110aba1:7b19badd:ce0adb73:3c2: F#8:24/0: -1711462110.280083 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:3c7 -> pwr 110aba1:7b19badd:ce0adb73:3c2) -1711462110.280106 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.280085 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.280162 [0] recv: INFOTS(1711462110.279820853) -1711462110.280163 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c4011ad8:44 0x7408bc009950:24 0x7408bc009978:28 0x7408bc0097d0:24 0x7408bc0097f8:28 [ udp/10.101.12.71:7418@2 ] -1711462110.280205 [0] tev: traffic-xmit (1) 168 -1711462110.280189 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #68 L(:1c1 16957.939662)) -1711462110.280272 [0] gc: gc 0x7408c8016150: deleting -1711462110.280284 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #68: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3d04}} -1711462110.280294 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3a03) -1711462110.280318 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3d04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3d04) => EVERYONE -1711462110.280345 [0] dq.builtin: - deleting -1711462110.280356 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3a03) -1711462110.280360 [0] dq.builtin: delete -1711462110.280370 [0] gc: gc 0x7408c8035250: not yet, shortsleep -1711462110.281318 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.281338 [0] recv: INFOTS(1711462110.281176913) -1711462110.281359 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #74 L(:1c1 16957.940839)) -1711462110.281390 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #74: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3c03}} -1711462110.281410 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3c03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3c03) - deleting -1711462110.281419 [0] dq.builtin: => EVERYONE -1711462110.281447 [0] dq.builtin: delete -1711462110.281466 [0] gc: gc 0x7408c8035250: deleting -1711462110.281487 [0] gc: gc_delete_proxy_reader (0x7408c8035250, 110d7b4:17c5b8c5:94bd0ff4:3d04) -1711462110.281499 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=42 -1711462110.281519 [0] gc: gc 0x7408c8016150: deleting -1711462110.281531 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3a03) -1711462110.281547 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=41 -1711462110.281564 [0] gc: gc 0x7408c807c290: deleting -1711462110.281576 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c807c290, 110d7b4:17c5b8c5:94bd0ff4:3c03) -1711462110.281591 [0] gc: gc 0x7408c8066850: deleting -1711462110.281601 [0] gc: gc 0x7408c8016150: deleting -1711462110.281606 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c807c290, 110d7b4:17c5b8c5:94bd0ff4:3c03) -1711462110.281611 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 728 from udp/10.101.12.71:40473 -1711462110.281663 [0] recvMC: INFOTS(1711462110.281294357) -1711462110.281645 [0] gc: gc 0x7408c807c290: deleting -1711462110.281700 [0] gc: gc_delete_proxy_writer (0x7408c807c290, 110d7b4:17c5b8c5:94bd0ff4:3c03) -1711462110.281685 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #75 L(:1c1 16957.941163) => EVERYONE -1711462110.281717 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=40 -1711462110.281740 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.281887 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #75: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,65,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,64,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462110.281927 [0] recvMC: HEARTBEAT(F#84:75..75 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@75(sync) 110cd0d:e3b81b8d:1ccb65b1:504@75(sync) 110cd0d:79d6eeac:ea4a8907:504@75(sync)) -1711462110.282652 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.282676 [0] recv: INFOTS(1711462110.282396477) -1711462110.282701 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #69 L(:1c1 16957.942177)) -1711462110.282733 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #69: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3f04}} -1711462110.282754 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3f04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3f04) => EVERYONE -1711462110.282783 [0] dq.builtin: - deleting -1711462110.282797 [0] dq.builtin: delete -1711462110.282833 [0] gc: gc 0x7408c8066850: deleting -1711462110.282855 [0] gc: gc 0x7408c8016150: deleting -1711462110.282871 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3f04) -1711462110.282884 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=39 -1711462110.282903 [0] gc: gc 0x7408c8066850: deleting -1711462110.283784 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.283818 [0] recv: INFOTS(1711462110.283671990) -1711462110.283847 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #75 L(:1c1 16957.943319)) -1711462110.283879 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #75: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:3e03}} -1711462110.283904 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:3e03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3e03) - deleting -1711462110.283917 [0] dq.builtin: => EVERYONE -1711462110.283957 [0] dq.builtin: delete -1711462110.283970 [0] gc: gc 0x7408c8016150: deleting -1711462110.284004 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3e03) -1711462110.284054 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3e03) -1711462110.284093 [0] gc: gc 0x7408c8016150: deleting -1711462110.284108 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:3e03) -1711462110.284120 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=38 -1711462110.284138 [0] gc: gc 0x7408c8066850: deleting -1711462110.284164 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 680 from udp/10.101.12.71:40473 -1711462110.284196 [0] recvMC: INFOTS(1711462110.283774544) -1711462110.284220 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #76 L(:1c1 16957.943696) => EVERYONE -1711462110.284387 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #76: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,67,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,66,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,68,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462110.284431 [0] recvMC: HEARTBEAT(F#85:76..76 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@76(sync) 110cd0d:e3b81b8d:1ccb65b1:504@76(sync) 110cd0d:79d6eeac:ea4a8907:504@76(sync)) -1711462110.285011 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.285042 [0] recv: INFOTS(1711462110.284892655) -1711462110.285072 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #70 L(:1c1 16957.944542)) -1711462110.285107 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #70: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4104}} -1711462110.285138 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4104 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4104) => EVERYONE -1711462110.285178 [0] dq.builtin: - deleting -1711462110.285201 [0] dq.builtin: delete -1711462110.285215 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.286220 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.286248 [0] recv: INFOTS(1711462110.286072873) -1711462110.286272 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #76 L(:1c1 16957.945749)) -1711462110.286308 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #76: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4003}} -1711462110.286317 [0] gc: gc 0x7408c8016150: deleting -1711462110.286331 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4003 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4003) - deleting -1711462110.286359 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4104) -1711462110.286380 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=37 -1711462110.286405 [0] dq.builtin: => EVERYONE -1711462110.286406 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.286442 [0] dq.builtin: delete -1711462110.286568 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 632 from udp/10.101.12.71:40473 -1711462110.286600 [0] recvMC: INFOTS(1711462110.286193571) -1711462110.286627 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #77 L(:1c1 16957.946100) => EVERYONE -1711462110.286802 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #77: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,69,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,68,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,70,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,72,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462110.286843 [0] recvMC: HEARTBEAT(F#86:77..77 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@77(sync) 110cd0d:e3b81b8d:1ccb65b1:504@77(sync) 110cd0d:79d6eeac:ea4a8907:504@77(sync)) -1711462110.287376 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.287405 [0] recv: INFOTS(1711462110.287238788) -1711462110.287428 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #71 L(:1c1 16957.946905)) -1711462110.287463 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #71: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4304}} -1711462110.287487 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4304 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4304) => EVERYONE -1711462110.287531 [0] dq.builtin: - deleting -1711462110.287556 [0] dq.builtin: delete -1711462110.287534 [0] gc: gc 0x7408c8066850: deleting -1711462110.287612 [0] gc: gc 0x7408c8016150: deleting -1711462110.287627 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4003) -1711462110.287646 [0] gc: gc 0x7408c8006f50: deleting -1711462110.287661 [0] gc: gc_delete_proxy_reader (0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:4304) -1711462110.287679 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=36 -1711462110.287662 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4003) -1711462110.287703 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.288611 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.288721 [0] recv: INFOTS(1711462110.288409621) -1711462110.288747 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #77 L(:1c1 16957.948216)) -1711462110.288777 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #77: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4203}} -1711462110.288802 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4203 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4203) - deleting -1711462110.288817 [0] dq.builtin: => EVERYONE -1711462110.288806 [0] gc: gc 0x7408c8066850: deleting -1711462110.288852 [0] dq.builtin: delete -1711462110.288869 [0] gc: gc 0x7408c8016150: deleting -1711462110.288907 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4003) -1711462110.288923 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=35 -1711462110.288946 [0] gc: gc 0x7408c807d440: deleting -1711462110.288959 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c807d440, 110d7b4:17c5b8c5:94bd0ff4:4203) -1711462110.288976 [0] gc: gc 0x7408c8066850: deleting -1711462110.288980 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 584 from udp/10.101.12.71:40473 -1711462110.288987 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c807d440, 110d7b4:17c5b8c5:94bd0ff4:4203) -1711462110.289039 [0] recvMC: INFOTS(1711462110.288540698) -1711462110.289072 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #78 L(:1c1 16957.948538) => EVERYONE -1711462110.289091 [0] gc: gc 0x7408c807d440: deleting -1711462110.289114 [0] gc: gc_delete_proxy_writer (0x7408c807d440, 110d7b4:17c5b8c5:94bd0ff4:4203) -1711462110.289131 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=34 -1711462110.289154 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.289247 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #78: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,71,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,70,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,72,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,74,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,76,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462110.289290 [0] recvMC: HEARTBEAT(F#87:78..78 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@78(sync) 110cd0d:e3b81b8d:1ccb65b1:504@78(sync) 110cd0d:79d6eeac:ea4a8907:504@78(sync)) -1711462110.289727 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.289750 [0] recv: INFOTS(1711462110.289583439) -1711462110.289770 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #72 L(:1c1 16957.949252)) -1711462110.289827 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #72: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4504}} -1711462110.289856 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4504 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4504) => EVERYONE -1711462110.289890 [0] dq.builtin: - deleting -1711462110.289904 [0] dq.builtin: delete -1711462110.290241 [0] gc: gc 0x7408c8066850: deleting -1711462110.290265 [0] gc: gc 0x7408c8016150: deleting -1711462110.290276 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4504) -1711462110.290288 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=33 -1711462110.290309 [0] gc: gc 0x7408c8066850: deleting -1711462110.290885 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.290910 [0] recv: INFOTS(1711462110.290746464) -1711462110.290930 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #78 L(:1c1 16957.950413)) -1711462110.290966 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #78: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4403}} -1711462110.290983 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4403 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4403) - deleting -1711462110.290994 [0] dq.builtin: => EVERYONE -1711462110.291089 [0] dq.builtin: delete -1711462110.291144 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 536 from udp/10.101.12.71:40473 -1711462110.291186 [0] recvMC: INFOTS(1711462110.290874452) -1711462110.291218 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #79 L(:1c1 16957.950686) => EVERYONE -1711462110.291376 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.291420 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #79: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,73,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,72,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,74,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,76,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,78,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462110.291475 [0] recvMC: HEARTBEAT(F#88:79..79 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@79(sync) 110cd0d:e3b81b8d:1ccb65b1:504@79(sync) 110cd0d:79d6eeac:ea4a8907:504@79(sync)) -1711462110.292054 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.292080 [0] recv: INFOTS(1711462110.291919173) -1711462110.292100 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #73 L(:1c1 16957.951582)) -1711462110.292140 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #73: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4704}} -1711462110.292169 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4704 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4704) => EVERYONE -1711462110.292219 [0] dq.builtin: - deleting -1711462110.292241 [0] dq.builtin: delete -1711462110.292376 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.292392 [0] recv: INFOTS(1711462110.292287600) -1711462110.292416 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #79 L(:1c1 16957.951895)) -1711462110.292454 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #79: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4603}} -1711462110.292471 [0] gc: gc 0x7408c8016150: deleting -1711462110.292488 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4603 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4603) - deleting -1711462110.292534 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4403) -1711462110.292557 [0] gc: gc 0x7408c8035250: deleting -1711462110.292574 [0] gc: gc_delete_proxy_reader (0x7408c8035250, 110d7b4:17c5b8c5:94bd0ff4:4704) -1711462110.292593 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=32 -1711462110.292563 [0] dq.builtin: => EVERYONE -1711462110.292617 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.292574 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4403) -1711462110.292678 [0] dq.builtin: delete -1711462110.292830 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 488 from udp/10.101.12.71:40473 -1711462110.292850 [0] recvMC: INFOTS(1711462110.292409838) -1711462110.292875 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #80 L(:1c1 16957.952351) => EVERYONE -1711462110.293030 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #80: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,75,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,74,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,76,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,78,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,) -1711462110.293071 [0] recvMC: HEARTBEAT(F#89:80..80 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@80(sync) 110cd0d:e3b81b8d:1ccb65b1:504@80(sync) 110cd0d:79d6eeac:ea4a8907:504@80(sync)) -1711462110.293606 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.293625 [0] recv: INFOTS(1711462110.293464039) -1711462110.293649 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #74 L(:1c1 16957.953127)) -1711462110.293672 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.293705 [0] recv: HEARTBEAT(#10:1..15 L(:1c1 16957.953189)110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:4c7@15(sync) 110cd0d:e3b81b8d:1ccb65b1:4c7@15(sync) 110cd0d:79d6eeac:ea4a8907:4c7@15(sync)) -1711462110.293712 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #74: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4904}} -1711462110.293751 [0] gc: gc 0x7408c8066850: deleting -1711462110.293788 [0] gc: gc 0x7408c807c290: deleting -1711462110.293744 [0] tev: acknack 110cd0d:56a27910:57318171:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#4:16/0: -1711462110.293800 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c807c290, 110d7b4:17c5b8c5:94bd0ff4:4603) -1711462110.293827 [0] gc: gc 0x7408c8016150: deleting -1711462110.293843 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4403) -1711462110.293860 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=31 -1711462110.293869 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.293906 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.293881 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.293882 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c807c290, 110d7b4:17c5b8c5:94bd0ff4:4603) -1711462110.293766 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4904 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4904) => EVERYONE -1711462110.293933 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#12:16/0: -1711462110.294056 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.294072 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.294091 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#7:16/0: -1711462110.294104 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.294119 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.294106 [0] dq.builtin: - deleting -1711462110.294180 [0] dq.builtin: delete -1711462110.294181 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c4011ad8:44 0x7408bc009950:24 0x7408bc009978:28 0x7408bc0097d0:24 0x7408bc0097f8:28 [ udp/10.101.12.71:7412@2 ] -1711462110.294224 [0] tev: traffic-xmit (1) 168 -1711462110.294786 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.294808 [0] recv: INFOTS(1711462110.294634250) -1711462110.294834 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #80 L(:1c1 16957.954309)) -1711462110.294900 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #80: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4803}} -1711462110.294917 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4803 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4803) - deleting -1711462110.294947 [0] dq.builtin: => EVERYONE -1711462110.294983 [0] dq.builtin: delete -1711462110.295010 [0] gc: gc 0x7408c8066850: deleting -1711462110.295023 [0] gc: gc 0x7408c807c290: deleting -1711462110.295032 [0] gc: gc_delete_proxy_writer (0x7408c807c290, 110d7b4:17c5b8c5:94bd0ff4:4603) -1711462110.295042 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=30 -1711462110.295056 [0] gc: gc 0x7408c8016150: deleting -1711462110.295064 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4904) -1711462110.295072 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=29 -1711462110.295083 [0] gc: gc 0x7408c8006f50: deleting -1711462110.295093 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:4803) -1711462110.295107 [0] gc: gc 0x7408c8066850: deleting -1711462110.295116 [0] gc: gc 0x7408c8016150: deleting -1711462110.295130 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:4803) -1711462110.295167 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 440 from udp/10.101.12.71:40473 -1711462110.295187 [0] gc: gc 0x7408c8006f50: deleting -1711462110.295227 [0] gc: gc_delete_proxy_writer (0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:4803) -1711462110.295197 [0] recvMC: INFOTS(1711462110.294787650) -1711462110.295248 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=28 -1711462110.295280 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #81 L(:1c1 16957.954697) => EVERYONE -1711462110.295308 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.295469 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #81: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,77,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,76,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,78,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.295497 [0] recvMC: HEARTBEAT(F#90:81..81 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@81(sync) 110cd0d:e3b81b8d:1ccb65b1:504@81(sync) 110cd0d:79d6eeac:ea4a8907:504@81(sync)) -1711462110.295514 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.295560 [0] recv: HEARTBEAT(#10:1..19 L(:1c1 16957.955042)110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:3c7@19(sync) 110cd0d:e3b81b8d:1ccb65b1:3c7@19(sync) 110cd0d:79d6eeac:ea4a8907:3c7@19(sync)) -1711462110.295582 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#4:20/0: -1711462110.295598 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.295620 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.295634 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#14:20/0: -1711462110.295660 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.295690 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.295706 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#8:20/0: -1711462110.295716 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.295729 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.295778 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c4011ad8:44 0x7408bc009950:24 0x7408bc009978:28 0x7408bc0097d0:24 0x7408bc0097f8:28 [ udp/10.101.12.71:7412@2 ] -1711462110.295787 [0] tev: traffic-xmit (1) 168 -1711462110.295935 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.295959 [0] recv: INFOTS(1711462110.295791082) -1711462110.295982 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #75 L(:1c1 16957.955459)) -1711462110.296032 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #75: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4b04}} -1711462110.296052 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4b04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4b04) => EVERYONE -1711462110.296079 [0] dq.builtin: - deleting -1711462110.296096 [0] dq.builtin: delete -1711462110.296406 [0] gc: gc 0x7408c8066850: deleting -1711462110.296431 [0] gc: gc 0x7408c8016150: deleting -1711462110.296451 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4b04) -1711462110.296461 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=27 -1711462110.296477 [0] gc: gc 0x7408c8066850: deleting -1711462110.297080 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.297109 [0] recv: INFOTS(1711462110.296972092) -1711462110.297145 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #81 L(:1c1 16957.956609)) -1711462110.297197 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #81: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4a03}} -1711462110.297288 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4a03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4a03) - deleting -1711462110.297305 [0] dq.builtin: => EVERYONE -1711462110.297354 [0] dq.builtin: delete -1711462110.297368 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.297404 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 392 from udp/10.101.12.71:40473 -1711462110.297421 [0] recvMC: INFOTS(1711462110.297082585) -1711462110.297439 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #82 L(:1c1 16957.956922) => EVERYONE -1711462110.297569 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #82: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,79,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,78,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.297589 [0] recvMC: HEARTBEAT(F#91:82..82 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@82(sync) 110cd0d:e3b81b8d:1ccb65b1:504@82(sync) 110cd0d:79d6eeac:ea4a8907:504@82(sync)) -1711462110.298246 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.298267 [0] recv: INFOTS(1711462110.298143983) -1711462110.298292 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #76 L(:1c1 16957.957767)) -1711462110.298323 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #76: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4d04}} -1711462110.298347 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4d04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4d04) => EVERYONE -1711462110.298381 [0] dq.builtin: - deleting -1711462110.298395 [0] dq.builtin: delete -1711462110.298502 [0] gc: gc 0x7408c8016150: deleting -1711462110.298512 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4a03) -1711462110.298520 [0] gc: gc 0x7408c807d440: deleting -1711462110.298527 [0] gc: gc_delete_proxy_reader (0x7408c807d440, 110d7b4:17c5b8c5:94bd0ff4:4d04) -1711462110.298534 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=26 -1711462110.298535 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4a03) -1711462110.298549 [0] gc: gc 0x7408c8066850: not yet, shortsleep -1711462110.298578 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.298616 [0] recv: INFOTS(1711462110.298471822) -1711462110.298637 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #82 L(:1c1 16957.958117)) -1711462110.298666 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #82: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4c03}} -1711462110.298687 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4c03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4c03) - deleting -1711462110.298699 [0] dq.builtin: => EVERYONE -1711462110.298731 [0] dq.builtin: delete -1711462110.298843 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 344 from udp/10.101.12.71:40473 -1711462110.298857 [0] recvMC: INFOTS(1711462110.298593713) -1711462110.298879 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #83 L(:1c1 16957.958359) => EVERYONE -1711462110.298975 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #83: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,83,4,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,82,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.298993 [0] recvMC: HEARTBEAT(F#92:83..83 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@83(sync) 110cd0d:e3b81b8d:1ccb65b1:504@83(sync) 110cd0d:79d6eeac:ea4a8907:504@83(sync)) -1711462110.299671 [0] gc: gc 0x7408c8066850: deleting -1711462110.299690 [0] gc: gc 0x7408c8016150: deleting -1711462110.299695 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4a03) -1711462110.299703 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=25 -1711462110.299714 [0] gc: gc 0x7408c8035250: deleting -1711462110.299720 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8035250, 110d7b4:17c5b8c5:94bd0ff4:4c03) -1711462110.299729 [0] gc: gc 0x7408c8066850: deleting -1711462110.299742 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8035250, 110d7b4:17c5b8c5:94bd0ff4:4c03) -1711462110.299780 [0] gc: gc 0x7408c8035250: deleting -1711462110.299787 [0] gc: gc_delete_proxy_writer (0x7408c8035250, 110d7b4:17c5b8c5:94bd0ff4:4c03) -1711462110.299794 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=24 -1711462110.299802 [0] gc: gc 0x7408c8066850: deleting -1711462110.299853 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.299868 [0] recv: INFOTS(1711462110.299733268) -1711462110.299888 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #77 L(:1c1 16957.959370)) -1711462110.299915 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #77: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4f04}} -1711462110.299935 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4f04 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4f04) => EVERYONE -1711462110.299958 [0] dq.builtin: - deleting -1711462110.299971 [0] dq.builtin: delete -1711462110.299976 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.301064 [0] gc: gc 0x7408c8016150: deleting -1711462110.301081 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4f04) -1711462110.301087 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=23 -1711462110.301101 [0] gc: gc 0x7408c8066850: deleting -1711462110.301109 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.301132 [0] recv: INFOTS(1711462110.301005028) -1711462110.301151 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #83 L(:1c1 16957.960633)) -1711462110.301240 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #83: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:4e03}} -1711462110.301251 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:4e03 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4e03) - deleting -1711462110.301265 [0] dq.builtin: => EVERYONE -1711462110.301288 [0] dq.builtin: delete -1711462110.301294 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.301367 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 296 from udp/10.101.12.71:40473 -1711462110.301390 [0] recvMC: INFOTS(1711462110.301158893) -1711462110.301420 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #84 L(:1c1 16957.960891) => EVERYONE -1711462110.301503 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #84: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,85,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,84,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.301522 [0] recvMC: HEARTBEAT(F#93:84..84 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@84(sync) 110cd0d:e3b81b8d:1ccb65b1:504@84(sync) 110cd0d:79d6eeac:ea4a8907:504@84(sync)) -1711462110.302352 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.302369 [0] recv: INFOTS(1711462110.302235006) -1711462110.302371 [0] gc: gc 0x7408c8016150: deleting -1711462110.302396 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #78 L(:1c1 16957.961870)) -1711462110.302448 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4e03) -1711462110.302494 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #78: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5304}} -1711462110.302525 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5304 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:5304) => EVERYONE -1711462110.302504 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4e03) -1711462110.302615 [0] dq.builtin: - deleting -1711462110.302630 [0] gc: gc 0x7408c8016150: deleting -1711462110.302659 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4e03) -1711462110.302638 [0] dq.builtin: delete -1711462110.302677 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=22 -1711462110.302719 [0] gc: gc 0x7408c807c290: deleting -1711462110.302729 [0] gc: gc_delete_proxy_reader (0x7408c807c290, 110d7b4:17c5b8c5:94bd0ff4:5304) -1711462110.302738 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=21 -1711462110.302753 [0] gc: gc 0x7408c8066850: deleting -1711462110.302762 [0] gc: gc 0x7408c807c290: deleting -1711462110.303572 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.303593 [0] recv: INFOTS(1711462110.303466791) -1711462110.303618 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #84 L(:1c1 16957.963094)) -1711462110.303655 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #84: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5203}} -1711462110.303675 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5203 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:5203) - deleting -1711462110.303690 [0] dq.builtin: => EVERYONE -1711462110.303748 [0] dq.builtin: delete -1711462110.303758 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.303848 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 248 from udp/10.101.12.71:40473 -1711462110.303869 [0] recvMC: INFOTS(1711462110.303608296) -1711462110.303893 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #85 L(:1c1 16957.963371) => EVERYONE -1711462110.303962 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #85: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,86,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.303982 [0] recvMC: HEARTBEAT(F#94:85..85 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@85(sync) 110cd0d:e3b81b8d:1ccb65b1:504@85(sync) 110cd0d:79d6eeac:ea4a8907:504@85(sync)) -1711462110.304785 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.304809 [0] recv: INFOTS(1711462110.304665223) -1711462110.304831 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #79 L(:1c1 16957.964310)) -1711462110.304855 [0] gc: gc 0x7408c8016150: deleting -1711462110.304937 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5203) -1711462110.304919 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #79: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5504}} -1711462110.304980 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5504 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:5504) => EVERYONE -1711462110.304987 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5203) -1711462110.305014 [0] dq.builtin: - deleting -1711462110.305026 [0] dq.builtin: delete -1711462110.305029 [0] gc: gc 0x7408c8016150: deleting -1711462110.305061 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5203) -1711462110.305092 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=20 -1711462110.305115 [0] gc: gc 0x7408c8006f50: deleting -1711462110.305129 [0] gc: gc_delete_proxy_reader (0x7408c8006f50, 110d7b4:17c5b8c5:94bd0ff4:5504) -1711462110.305139 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=19 -1711462110.305156 [0] gc: gc 0x7408c8066850: deleting -1711462110.305168 [0] gc: gc 0x7408c8006f50: deleting -1711462110.306098 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.306122 [0] recv: INFOTS(1711462110.305944071) -1711462110.306150 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #85 L(:1c1 16957.965621)) -1711462110.306180 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #85: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5403}} -1711462110.306194 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5403 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:5403) - deleting -1711462110.306202 [0] dq.builtin: => EVERYONE -1711462110.306235 [0] dq.builtin: delete -1711462110.306258 [0] gc: gc 0x7408c8016150: deleting -1711462110.306285 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5403) -1711462110.306319 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5403) -1711462110.306355 [0] gc: gc 0x7408c8016150: deleting -1711462110.306376 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5403) -1711462110.306390 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=18 -1711462110.306415 [0] gc: gc 0x7408c8066850: deleting -1711462110.307436 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 224 from udp/10.101.12.71:40473 -1711462110.307464 [0] recvMC: INFOTS(1711462110.307152640) -1711462110.307493 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #86 L(:1c1 16957.966964) => EVERYONE -1711462110.307688 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #86: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,87,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.307708 [0] recvMC: HEARTBEAT(F#95:86..86 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@86(sync) 110cd0d:e3b81b8d:1ccb65b1:504@86(sync) 110cd0d:79d6eeac:ea4a8907:504@86(sync)) -1711462110.307891 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.307913 [0] recv: INFOTS(1711462110.307705837) -1711462110.307939 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #86 L(:1c1 16957.967414)) -1711462110.307992 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #86: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5603}} -1711462110.308021 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5603 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:5603) - deleting -1711462110.308045 [0] dq.builtin: => EVERYONE -1711462110.308103 [0] dq.builtin: delete -1711462110.308118 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.308342 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 200 from udp/10.101.12.71:40473 -1711462110.308358 [0] recvMC: INFOTS(1711462110.308113998) -1711462110.308374 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #87 L(:1c1 16957.967860) => EVERYONE -1711462110.308433 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #87: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,88,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.308465 [0] recvMC: HEARTBEAT(F#96:87..87 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@87(sync) 110cd0d:e3b81b8d:1ccb65b1:504@87(sync) 110cd0d:79d6eeac:ea4a8907:504@87(sync)) -1711462110.308848 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.308867 [0] recv: INFOTS(1711462110.308696854) -1711462110.308906 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #87 L(:1c1 16957.968369)) -1711462110.308973 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #87: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5703}} -1711462110.309002 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5703 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:5703) - deleting -1711462110.309020 [0] dq.builtin: => EVERYONE -1711462110.309065 [0] dq.builtin: delete -1711462110.309121 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 176 from udp/10.101.12.71:40473 -1711462110.309154 [0] recvMC: INFOTS(1711462110.308810509) -1711462110.309180 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #88 L(:1c1 16957.968654) => EVERYONE -1711462110.309216 [0] gc: gc 0x7408c8016150: deleting -1711462110.309250 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462110.309256 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #88: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,6,3,0,0,0,0,0,0,0,0}}}}}}}) -1711462110.309304 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462110.309282 [0] gc: gc 0x7408c807d440: deleting -1711462110.309320 [0] recvMC: HEARTBEAT(F#97:88..88 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@88(sync) 110cd0d:e3b81b8d:1ccb65b1:504@88(sync) 110cd0d:79d6eeac:ea4a8907:504@88(sync)) -1711462110.309365 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c807d440, 110d7b4:17c5b8c5:94bd0ff4:5703) -1711462110.309410 [0] gc: gc 0x7408c8016150: deleting -1711462110.309430 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5603) -1711462110.309417 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c807d440, 110d7b4:17c5b8c5:94bd0ff4:5703) -1711462110.309463 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:1404, 13): 9 -> 13 -1711462110.309496 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:1404, 5): 1 -> 5 -1711462110.309522 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:1404, 9): 5 -> 9 -1711462110.309543 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=17 -1711462110.309568 [0] gc: gc 0x7408c807d440: deleting -1711462110.309579 [0] gc: gc_delete_proxy_writer (0x7408c807d440, 110d7b4:17c5b8c5:94bd0ff4:5703) -1711462110.309590 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=16 -1711462110.309606 [0] gc: gc 0x7408c8066850: deleting -1711462110.309617 [0] gc: gc 0x7408c807d440: deleting -1711462110.310027 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.310052 [0] recv: INFOTS(1711462110.309878806) -1711462110.310076 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #88 L(:1c1 16957.969554)) -1711462110.310123 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #88: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:5803}} -1711462110.310177 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:5803 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:5803) - deleting -1711462110.310199 [0] dq.builtin: => EVERYONE -1711462110.310248 [0] dq.builtin: delete -1711462110.310266 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.310293 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 152 from udp/10.101.12.71:40473 -1711462110.310317 [0] recvMC: INFOTS(1711462110.310031935) -1711462110.310345 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #89 L(:1c1 16957.969817) => EVERYONE -1711462110.310404 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #89: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","map_manager",{},{}}}}) -1711462110.310430 [0] recvMC: HEARTBEAT(F#98:89..89 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@89(sync) 110cd0d:e3b81b8d:1ccb65b1:504@89(sync) 110cd0d:79d6eeac:ea4a8907:504@89(sync)) -1711462110.311197 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.311219 [0] recv: INFOTS(1711462110.311071865) -1711462110.311233 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #89 L(:1c1 16957.970722)) -1711462110.311281 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #89: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:603}} -1711462110.311311 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:603 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:603) - deleting -1711462110.311323 [0] dq.builtin: => EVERYONE -1711462110.311331 [0] recvMC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 120 from udp/10.101.12.71:40473 -1711462110.311359 [0] gc: gc 0x7408c8016150: deleting -1711462110.311386 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5803) -1711462110.311407 [0] gc: gc 0x7408c8035250: not yet, shortsleep -1711462110.311417 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5803) -1711462110.311367 [0] recvMC: INFOTS(1711462110.311185386) -1711462110.311369 [0] dq.builtin: delete -1711462110.311494 [0] recvMC: DATA(110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0 #90 L(:1c1 16957.970868) => EVERYONE -1711462110.311544 [0] recvMC: data(application, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:403 #90: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,215,180,23,197,184,197,148,189,15,244,0,0,1,193,0,0,0,0,0,0,0,0}}},{}}) -1711462110.311565 [0] recvMC: HEARTBEAT(F#99:90..90 110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@90(sync) 110cd0d:e3b81b8d:1ccb65b1:504@90(sync) 110cd0d:79d6eeac:ea4a8907:504@90(sync)) -1711462110.312519 [0] gc: gc 0x7408c8035250: deleting -1711462110.312540 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8035250, 110d7b4:17c5b8c5:94bd0ff4:603) -1711462110.312552 [0] gc: gc 0x7408c8016150: deleting -1711462110.312568 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:5803) -1711462110.312559 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8035250, 110d7b4:17c5b8c5:94bd0ff4:603) -1711462110.312584 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=15 -1711462110.312626 [0] gc: gc 0x7408c8035250: deleting -1711462110.312638 [0] gc: gc_delete_proxy_writer (0x7408c8035250, 110d7b4:17c5b8c5:94bd0ff4:603) -1711462110.312649 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=14 -1711462110.312665 [0] gc: gc 0x7408c8066850: deleting -1711462110.312674 [0] gc: gc 0x7408c8035250: deleting -1711462110.314605 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462110.314644 [0] recv: HEARTBEAT(#9:1..79 L(:1c1 16957.974125)110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:4c7@79(sync) 110cd0d:e3b81b8d:1ccb65b1:4c7@79(sync) 110cd0d:79d6eeac:ea4a8907:4c7@79(sync)) -1711462110.314685 [0] tev: acknack 110cd0d:56a27910:57318171:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2: F#4:80/0: -1711462110.314712 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:4c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462110.314731 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.314742 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2: F#12:80/0: -1711462110.314749 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:4c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462110.314757 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.314765 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2: F#7:80/0: -1711462110.314772 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:4c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462110.314779 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.314839 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c4011ad8:44 0x7408bc009950:24 0x7408bc009978:28 0x7408bc0097d0:24 0x7408bc0097f8:28 [ udp/10.101.12.71:7414@2 ] -1711462110.314848 [0] tev: traffic-xmit (1) 168 -1711462110.315992 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462110.316028 [0] recv: HEARTBEAT(#10:1..89 L(:1c1 16957.975517)110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:3c7@89(sync) 110cd0d:e3b81b8d:1ccb65b1:3c7@89(sync) 110cd0d:79d6eeac:ea4a8907:3c7@89(sync)) -1711462110.316053 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#5:90/0: -1711462110.316074 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462110.316089 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.316109 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#15:90/0: -1711462110.316121 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462110.316133 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.316142 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#9:90/0: -1711462110.316148 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462110.316156 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.316177 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c4011ad8:44 0x7408bc009950:24 0x7408bc009978:28 0x7408bc0097d0:24 0x7408bc0097f8:28 [ udp/10.101.12.71:7414@2 ] -1711462110.316190 [0] tev: traffic-xmit (1) 168 -1711462110.351587 [0] tev: heartbeat(wr 110cd0d:56a27910:57318171:3c2) suppressed, resched in inf s (min-ack 10, avail-seq 9, xmit 10) -1711462110.376661 [0] recvMC: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462110.376766 [0] recvMC: HEARTBEAT(#29:20..20 L(:1c1 16958.036225)110443d:bb7f10a5:18901533:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@20(sync) 110cd0d:e3b81b8d:1ccb65b1:504@20(sync) 110cd0d:79d6eeac:ea4a8907:504@20(sync)) -1711462110.376867 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110443d:bb7f10a5:18901533:403: F#5:21/0: -1711462110.376914 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462110.376941 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.376965 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110443d:bb7f10a5:18901533:403: F#21:21/0: -1711462110.377007 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462110.377021 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.377038 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110443d:bb7f10a5:18901533:403: F#12:21/0: -1711462110.377048 [0] recvMC: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 52 from udp/10.101.12.71:52025 -1711462110.377051 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110443d:bb7f10a5:18901533:403) -1711462110.377113 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.377086 [0] recvMC: HEARTBEAT(#35:24..24 L(:1c1 16958.036571)110aba1:7b19badd:ce0adb73:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@24(sync) 110cd0d:e3b81b8d:1ccb65b1:504@24(sync) 110cd0d:79d6eeac:ea4a8907:504@24(sync)) -1711462110.377138 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110aba1:7b19badd:ce0adb73:403: F#5:25/0: -1711462110.377203 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462110.377278 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408c4011ad8:44 0x7408bc009950:24 0x7408bc009978:28 0x7408bc0097d0:24 0x7408bc0097f8:28 [ udp/10.101.12.71:7417@2 ] -1711462110.377312 [0] tev: traffic-xmit (1) 168 -1711462110.377330 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.377352 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110aba1:7b19badd:ce0adb73:403: F#21:25/0: -1711462110.377377 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462110.377391 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.377412 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110aba1:7b19badd:ce0adb73:403: F#12:25/0: -1711462110.377506 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110aba1:7b19badd:ce0adb73:403) -1711462110.377522 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.377564 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc0094e8:44 0x7408c4011ac0:24 0x7408c4011ae8:28 0x7408bc009950:24 0x7408bc009978:28 [ udp/10.101.12.71:7419@2 ] -1711462110.377581 [0] tev: traffic-xmit (1) 168 -1711462110.378904 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.378972 [0] recv: INFOTS(1711462110.378453601) -1711462110.379036 [0] recv: DATA(110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0 #20 L(:1c1 16958.038470)) -1711462110.379077 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.379091 [0] recv: INFOTS(1711462110.378380676) -1711462110.379111 [0] recv: DATA(110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0 #24 L(:1c1 16958.038592)) -1711462110.379153 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:3c2 #20: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:403}} -1711462110.379206 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:403 ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:403) - deleting -1711462110.379227 [0] dq.builtin: => EVERYONE -1711462110.379295 [0] dq.builtin: delete -1711462110.379322 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:3c2 #24: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:403}} -1711462110.379340 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:403 ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:403) - deleting -1711462110.379371 [0] dq.builtin: => EVERYONE -1711462110.379377 [0] gc: gc 0x7408c8016150: deleting -1711462110.379443 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110443d:bb7f10a5:18901533:403) -1711462110.379466 [0] gc: gc 0x7408c807c290: not yet, shortsleep -1711462110.379423 [0] dq.builtin: delete -1711462110.379483 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110443d:bb7f10a5:18901533:403) -1711462110.379699 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 52 from udp/10.101.12.71:44991 -1711462110.379772 [0] recv: HEARTBEAT(#9:20..20 L(:1c1 16958.039247)110443d:bb7f10a5:18901533:3c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:3c7@20(sync) 110cd0d:e3b81b8d:1ccb65b1:3c7@20(sync) 110cd0d:79d6eeac:ea4a8907:3c7@20(sync)) -1711462110.379804 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.379821 [0] recv: INFOTS(1711462110.379581375) -1711462110.379845 [0] recv: DATA(110443d:bb7f10a5:18901533:4c2 -> 0:0:0:0 #14 L(:1c1 16958.039322)) -1711462110.379803 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#5:21/0: -1711462110.379917 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462110.379932 [0] dq.builtin: data(builtin, vendor 1.16): 110443d:bb7f10a5:18901533:4c2 #14: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110443d:bb7f10a5:18901533:504}} -1711462110.379937 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.380075 [0] dq.builtin: SEDP ST3 110443d:bb7f10a5:18901533:504 ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:504) => EVERYONE -1711462110.380022 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 52 from udp/10.101.12.71:52025 -1711462110.380130 [0] recv: HEARTBEAT(#8:24..24 L(:1c1 16958.039619)110aba1:7b19badd:ce0adb73:3c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:3c7@24(sync) 110cd0d:e3b81b8d:1ccb65b1:3c7@24(sync) 110cd0d:79d6eeac:ea4a8907:3c7@24(sync)) -1711462110.380136 [0] dq.builtin: - deleting -1711462110.380308 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#15:21/0: -1711462110.380341 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462110.380331 [0] dq.builtin: delete -1711462110.380355 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.380434 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:3c7 -> 110443d:bb7f10a5:18901533:3c2: F#9:21/0: -1711462110.380457 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:3c7 -> pwr 110443d:bb7f10a5:18901533:3c2) -1711462110.380473 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009880 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.380490 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:3c7 -> 110aba1:7b19badd:ce0adb73:3c2: F#9:25/0: -1711462110.380550 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:3c7 -> pwr 110aba1:7b19badd:ce0adb73:3c2) -1711462110.380587 [0] gc: gc 0x7408c807c290: deleting -1711462110.380616 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc0094e8:44 0x7408c4011ac0:24 0x7408c4011ae8:28 0x7408bc009950:24 0x7408bc009978:28 [ udp/10.101.12.71:7416@2 ] -1711462110.380638 [0] tev: traffic-xmit (1) 168 -1711462110.380617 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c807c290, 110aba1:7b19badd:ce0adb73:403) -1711462110.380660 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.380691 [0] gc: gc 0x7408c8016150: deleting -1711462110.380707 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c807c290, 110aba1:7b19badd:ce0adb73:403) -1711462110.380713 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110443d:bb7f10a5:18901533:403) -1711462110.380780 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:504, 22): 17 -> 22 -1711462110.380791 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.380817 [0] recv: INFOTS(1711462110.380434543) -1711462110.380831 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110aba1:7b19badd:ce0adb73:3c2: F#5:25/0: -1711462110.380902 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110aba1:7b19badd:ce0adb73:3c2) -1711462110.380934 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.380804 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:504, 6): 1 -> 6 -1711462110.380954 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110aba1:7b19badd:ce0adb73:3c2: F#15:25/0: -1711462110.381024 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:3c7 -> pwr 110aba1:7b19badd:ce0adb73:3c2) -1711462110.381039 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.380845 [0] recv: DATA(110aba1:7b19badd:ce0adb73:4c2 -> 0:0:0:0 #20 L(:1c1 16958.040317)) -1711462110.381009 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:504, 13): 8 -> 13 -1711462110.381096 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc0097e8:44 0x7408bc0094d0:24 0x7408bc0094f8:28 0x7408c4011ac0:24 0x7408c4011ae8:28 [ udp/10.101.12.71:7418@2 ] -1711462110.381113 [0] dq.builtin: data(builtin, vendor 1.16): 110aba1:7b19badd:ce0adb73:4c2 #20: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110aba1:7b19badd:ce0adb73:504}} -1711462110.381141 [0] tev: traffic-xmit (1) 168 -1711462110.381115 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=13 -1711462110.381206 [0] gc: gc 0x7408c8006f50: deleting -1711462110.381228 [0] gc: gc_delete_proxy_reader (0x7408c8006f50, 110443d:bb7f10a5:18901533:504) -1711462110.381210 [0] dq.builtin: SEDP ST3 110aba1:7b19badd:ce0adb73:504 ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:504) => EVERYONE -1711462110.381269 [0] gc: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7415@2 udp/10.101.12.71:7419@2 -1711462110.381289 [0] dq.builtin: - deleting -1711462110.381289 [0] gc: reduced nlocs=4 -1711462110.381341 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.381357 [0] gc: rdidx 0 lidx udp/10.101.12.71:7413@2 0 -> 0 -1711462110.381370 [0] gc: rdidx 0 lidx udp/239.255.0.1:7401@2 3 -> 8 -1711462110.381384 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.381397 [0] gc: rdidx 1 lidx udp/10.101.12.71:7415@2 1 -> 0 -1711462110.381410 [0] gc: rdidx 1 lidx udp/239.255.0.1:7401@2 3 -> 8 -1711462110.381427 [0] gc: a b -1711462110.381443 [0] gc: loc 0 = udp/10.101.12.71:7413@2 1 { +u .. } -1711462110.381463 [0] gc: loc 1 = udp/10.101.12.71:7415@2 1 { .. +u } -1711462110.381479 [0] gc: loc 2 = udp/10.101.12.71:7419@2 2147483647 { .. .. } -1711462110.381496 [0] gc: loc 3 = udp/239.255.0.1:7401@2 1 { +1 +1 } -1711462110.381510 [0] gc: best = 3 -1711462110.381527 [0] gc: simple udp/239.255.0.1:7401@2 -1711462110.381548 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462110.381582 [0] gc: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7415@2 -1711462110.381601 [0] gc: reduced nlocs=3 -1711462110.381619 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.381638 [0] gc: rdidx 0 lidx udp/10.101.12.71:7413@2 0 -> 0 -1711462110.381654 [0] gc: rdidx 0 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462110.381669 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.381685 [0] gc: rdidx 1 lidx udp/10.101.12.71:7415@2 1 -> 0 -1711462110.381699 [0] gc: rdidx 1 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462110.381714 [0] gc: a b -1711462110.381584 [0] dq.builtin: delete -1711462110.381757 [0] gc: loc 0 = udp/10.101.12.71:7413@2 1 { +u .. } -1711462110.381789 [0] gc: loc 1 = udp/10.101.12.71:7415@2 1 { .. +u } -1711462110.381807 [0] gc: loc 2 = udp/239.255.0.1:7401@2 1 { +1 +1 } -1711462110.381815 [0] gc: best = 2 -1711462110.381824 [0] gc: simple udp/239.255.0.1:7401@2 -1711462110.381839 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462110.381863 [0] gc: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7415@2 -1711462110.381873 [0] gc: reduced nlocs=3 -1711462110.381885 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.381895 [0] gc: rdidx 0 lidx udp/10.101.12.71:7413@2 0 -> 0 -1711462110.381904 [0] gc: rdidx 0 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462110.381912 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.381921 [0] gc: rdidx 1 lidx udp/10.101.12.71:7415@2 1 -> 0 -1711462110.381930 [0] gc: rdidx 1 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462110.381939 [0] gc: a b -1711462110.381949 [0] gc: loc 0 = udp/10.101.12.71:7413@2 1 { +u .. } -1711462110.381958 [0] gc: loc 1 = udp/10.101.12.71:7415@2 1 { .. +u } -1711462110.381968 [0] gc: loc 2 = udp/239.255.0.1:7401@2 1 { +1 +1 } -1711462110.381975 [0] gc: best = 2 -1711462110.381983 [0] gc: simple udp/239.255.0.1:7401@2 -1711462110.381995 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462110.382007 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=12 -1711462110.382023 [0] gc: gc 0x7408c807c290: deleting -1711462110.382032 [0] gc: gc_delete_proxy_writer (0x7408c807c290, 110aba1:7b19badd:ce0adb73:403) -1711462110.382048 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:504, 22): 22 -> 22 -1711462110.382067 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:504, 6): 6 -> 6 -1711462110.382081 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:504, 13): 13 -> 13 -1711462110.382093 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=13 -1711462110.382106 [0] gc: gc 0x7408c8066850: deleting -1711462110.382117 [0] gc: gc 0x7408c80057c0: deleting -1711462110.382124 [0] gc: gc_delete_proxy_reader (0x7408c80057c0, 110aba1:7b19badd:ce0adb73:504) -1711462110.382141 [0] gc: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7415@2 -1711462110.382150 [0] gc: reduced nlocs=3 -1711462110.382160 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.382169 [0] gc: rdidx 0 lidx udp/10.101.12.71:7413@2 0 -> 0 -1711462110.382178 [0] gc: rdidx 0 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462110.382186 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.382195 [0] gc: rdidx 1 lidx udp/10.101.12.71:7415@2 1 -> 0 -1711462110.382204 [0] gc: rdidx 1 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462110.382213 [0] gc: a b -1711462110.382223 [0] gc: loc 0 = udp/10.101.12.71:7413@2 1 { +u .. } -1711462110.382234 [0] gc: loc 1 = udp/10.101.12.71:7415@2 1 { .. +u } -1711462110.382246 [0] gc: loc 2 = udp/239.255.0.1:7401@2 1 { +1 +1 } -1711462110.382252 [0] gc: best = 2 -1711462110.382271 [0] gc: simple udp/239.255.0.1:7401@2 -1711462110.382286 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462110.382306 [0] gc: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7415@2 -1711462110.382315 [0] gc: reduced nlocs=3 -1711462110.382325 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.382334 [0] gc: rdidx 0 lidx udp/10.101.12.71:7413@2 0 -> 0 -1711462110.382342 [0] gc: rdidx 0 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462110.382351 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.382360 [0] gc: rdidx 1 lidx udp/10.101.12.71:7415@2 1 -> 0 -1711462110.382368 [0] gc: rdidx 1 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462110.382377 [0] gc: a b -1711462110.382387 [0] gc: loc 0 = udp/10.101.12.71:7413@2 1 { +u .. } -1711462110.382398 [0] gc: loc 1 = udp/10.101.12.71:7415@2 1 { .. +u } -1711462110.382412 [0] gc: loc 2 = udp/239.255.0.1:7401@2 1 { +1 +1 } -1711462110.382418 [0] gc: best = 2 -1711462110.382426 [0] gc: simple udp/239.255.0.1:7401@2 -1711462110.382438 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462110.382455 [0] gc: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7413@2 udp/10.101.12.71:7415@2 -1711462110.382464 [0] gc: reduced nlocs=3 -1711462110.382474 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.382485 [0] gc: rdidx 0 lidx udp/10.101.12.71:7413@2 0 -> 0 -1711462110.382495 [0] gc: rdidx 0 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462110.382504 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.382513 [0] gc: rdidx 1 lidx udp/10.101.12.71:7415@2 1 -> 0 -1711462110.382521 [0] gc: rdidx 1 lidx udp/239.255.0.1:7401@2 2 -> 8 -1711462110.382530 [0] gc: a b -1711462110.382539 [0] gc: loc 0 = udp/10.101.12.71:7413@2 1 { +u .. } -1711462110.382548 [0] gc: loc 1 = udp/10.101.12.71:7415@2 1 { .. +u } -1711462110.382558 [0] gc: loc 2 = udp/239.255.0.1:7401@2 1 { +1 +1 } -1711462110.382564 [0] gc: best = 2 -1711462110.382572 [0] gc: simple udp/239.255.0.1:7401@2 -1711462110.382583 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:403): udp/239.255.0.1:7401@2 (burst size 4294901760 rexmit 1048576) -1711462110.382593 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=12 -1711462110.382607 [0] gc: gc 0x7408c8006f50: deleting -1711462110.382616 [0] gc: gc 0x7408c807c290: deleting -1711462110.382626 [0] gc: gc 0x7408c8066850: deleting -1711462110.385423 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.385435 [0] recv: INFOTS(1711462110.385271352) -1711462110.385449 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #2) -1711462110.385465 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110aba1:7b19badd:ce0adb73:1c1}} -1711462110.385641 [0] recv: HDR(110aba1:7b19badd:ce0adb73 vendor 1.16) len 96 from udp/10.101.12.71:52025 -1711462110.385667 [0] recv: INFOTS(1711462110.385271352) -1711462110.385678 [0] recv: DATA(110aba1:7b19badd:ce0adb73:100c2 -> 0:0:0:0 #2) -1711462110.385653 [0] dq.builtin: SPDP ST3 110aba1:7b19badd:ce0adb73:1c1ddsi_delete_proxy_participant_by_guid(110aba1:7b19badd:ce0adb73:1c1) - deleting -1711462110.385700 [0] dq.builtin: => EVERYONE -1711462110.385737 [0] dq.builtin: delete_ppt(110aba1:7b19badd:ce0adb73:1c1) - deleting dependent proxy participants -1711462110.385753 [0] dq.builtin: delete_ppt(110aba1:7b19badd:ce0adb73:1c1) - deleting endpoints -1711462110.385763 [0] dq.builtin: ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:301c4) - deleting -1711462110.385782 [0] dq.builtin: ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:301c3) - deleting -1711462110.385793 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.385797 [0] dq.builtin: ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:300c4) - deleting -1711462110.385830 [0] dq.builtin: ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:300c3) - deleting -1711462110.385850 [0] dq.builtin: ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:200c7) - deleting -1711462110.385868 [0] dq.builtin: ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:200c2) - deleting -1711462110.385881 [0] dq.builtin: ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:4c7) - deleting -1711462110.385898 [0] dq.builtin: ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:4c2) - deleting -1711462110.385909 [0] dq.builtin: ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:3c7) - deleting -1711462110.385925 [0] dq.builtin: ddsi_delete_proxy_writer (110aba1:7b19badd:ce0adb73:3c2) - deleting -1711462110.385933 [0] dq.builtin: ddsi_delete_proxy_reader (110aba1:7b19badd:ce0adb73:100c7) - deleting -1711462110.385939 [0] dq.builtin: delete -1711462110.385948 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110aba1:7b19badd:ce0adb73:1c1}} -1711462110.385955 [0] dq.builtin: SPDP ST3 110aba1:7b19badd:ce0adb73:1c1 unknown not allowed -1711462110.386873 [0] gc: gc 0x7408c8016150: deleting -1711462110.386885 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110aba1:7b19badd:ce0adb73:301c4) -1711462110.386910 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.386920 [0] gc: reduced nlocs=4 -1711462110.386931 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.386949 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.386958 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.386968 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.386978 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.386989 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.386999 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387010 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.387021 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387033 [0] gc: a b c -1711462110.387044 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.387057 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.387069 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.387081 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.387090 [0] gc: best = 3 -1711462110.387103 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.387115 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.387133 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.387145 [0] gc: reduced nlocs=4 -1711462110.387154 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387163 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.387173 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387196 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387206 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.387214 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387224 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387233 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.387245 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387255 [0] gc: a b c -1711462110.387268 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.387279 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.387301 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.387312 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.387321 [0] gc: best = 3 -1711462110.387333 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.387347 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.387366 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.387379 [0] gc: reduced nlocs=4 -1711462110.387389 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387398 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.387410 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387423 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387435 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.387444 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387456 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387464 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.387474 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387486 [0] gc: a b c -1711462110.387499 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.387511 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.387523 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.387535 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.387542 [0] gc: best = 3 -1711462110.387552 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.387562 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.387572 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=11 -1711462110.387587 [0] gc: gc 0x7408c80929f0: deleting -1711462110.387599 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c80929f0, 110aba1:7b19badd:ce0adb73:301c3) -1711462110.387612 [0] gc: gc 0x7408c80057c0: deleting -1711462110.387627 [0] gc: gc_delete_proxy_reader (0x7408c80057c0, 110aba1:7b19badd:ce0adb73:300c4) -1711462110.387618 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c80929f0, 110aba1:7b19badd:ce0adb73:301c3) -1711462110.387651 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.387679 [0] gc: reduced nlocs=4 -1711462110.387691 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387702 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.387713 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387721 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387739 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.387755 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387764 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387773 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.387784 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387795 [0] gc: a b c -1711462110.387807 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.387819 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.387831 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.387842 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.387849 [0] gc: best = 3 -1711462110.387863 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.387878 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.387897 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.387906 [0] gc: reduced nlocs=4 -1711462110.387918 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387932 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.387944 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387951 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387962 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.387971 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.387979 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.387989 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.387997 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388008 [0] gc: a b c -1711462110.388019 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.388028 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.388040 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.388053 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.388062 [0] gc: best = 3 -1711462110.388074 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.388085 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.388377 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.388392 [0] gc: reduced nlocs=4 -1711462110.388404 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388416 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.388424 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388431 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388439 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.388447 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388452 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388461 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.388467 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388476 [0] gc: a b c -1711462110.388484 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.388509 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.388526 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.388535 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.388540 [0] gc: best = 3 -1711462110.388549 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.388562 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.388571 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=10 -1711462110.388581 [0] gc: gc 0x7408c807d440: deleting -1711462110.388600 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c807d440, 110aba1:7b19badd:ce0adb73:300c3) -1711462110.388609 [0] gc: gc 0x7408c8007880: deleting -1711462110.388616 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c807d440, 110aba1:7b19badd:ce0adb73:300c3) -1711462110.388617 [0] gc: gc_delete_proxy_reader (0x7408c8007880, 110aba1:7b19badd:ce0adb73:200c7) -1711462110.388652 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.388661 [0] gc: reduced nlocs=4 -1711462110.388666 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388676 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.388686 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388694 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388703 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.388708 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388714 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388720 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.388726 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388733 [0] gc: a b c -1711462110.388744 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.388750 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.388756 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.388766 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.388772 [0] gc: best = 3 -1711462110.388777 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.388785 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.388799 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.388804 [0] gc: reduced nlocs=4 -1711462110.388809 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388815 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.388820 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388825 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388830 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.388836 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388840 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388845 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.388852 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388858 [0] gc: a b c -1711462110.388864 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.388875 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.388881 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.388887 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.388893 [0] gc: best = 3 -1711462110.388898 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.388905 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.388915 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.388920 [0] gc: reduced nlocs=4 -1711462110.388925 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388931 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.388935 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388941 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388946 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.388951 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388956 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.388963 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.388967 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.388974 [0] gc: a b c -1711462110.388980 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.388985 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.388991 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.388997 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.389001 [0] gc: best = 3 -1711462110.389007 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.389015 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.389019 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=9 -1711462110.389026 [0] gc: gc 0x7408c8035250: deleting -1711462110.389030 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8035250, 110aba1:7b19badd:ce0adb73:200c2) -1711462110.389037 [0] gc: gc 0x7408c8041ae0: deleting -1711462110.389041 [0] gc: gc_delete_proxy_reader (0x7408c8041ae0, 110aba1:7b19badd:ce0adb73:4c7) -1711462110.389043 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c8035250, 110aba1:7b19badd:ce0adb73:200c2) -1711462110.389054 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.389070 [0] gc: reduced nlocs=4 -1711462110.389075 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389080 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.389086 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389090 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389097 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.389102 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389108 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389113 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.389120 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389125 [0] gc: a b c -1711462110.389131 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.389140 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.389148 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.389156 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.389160 [0] gc: best = 3 -1711462110.389166 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.389174 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.389185 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.389190 [0] gc: reduced nlocs=4 -1711462110.389195 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389202 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.389207 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389212 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389221 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.389228 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389233 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389239 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.389244 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389251 [0] gc: a b c -1711462110.389257 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.389263 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.389269 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.389275 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.389279 [0] gc: best = 3 -1711462110.389285 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.389293 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.389303 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.389307 [0] gc: reduced nlocs=4 -1711462110.389312 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389319 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.389325 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389329 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389335 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.389341 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389346 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389352 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.389356 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389361 [0] gc: a b c -1711462110.389367 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.389373 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.389378 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.389385 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.389390 [0] gc: best = 3 -1711462110.389395 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.389401 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.389411 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=8 -1711462110.389417 [0] gc: gc 0x7408c800b910: deleting -1711462110.389422 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c800b910, 110aba1:7b19badd:ce0adb73:4c2) -1711462110.389428 [0] gc: gc 0x7408c807c290: deleting -1711462110.389433 [0] gc: gc_delete_proxy_reader (0x7408c807c290, 110aba1:7b19badd:ce0adb73:3c7) -1711462110.389434 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c800b910, 110aba1:7b19badd:ce0adb73:4c2) -1711462110.389444 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.389462 [0] gc: reduced nlocs=4 -1711462110.389467 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389472 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.389477 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389482 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389487 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.389492 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389497 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389502 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.389506 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389512 [0] gc: a b c -1711462110.389517 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.389523 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.389529 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.389536 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.389541 [0] gc: best = 3 -1711462110.389546 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.389552 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.389563 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.389568 [0] gc: reduced nlocs=4 -1711462110.389572 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389577 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.389583 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389588 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389593 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.389599 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389603 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389608 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.389614 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389619 [0] gc: a b c -1711462110.389624 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.389631 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.389636 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.389643 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.389648 [0] gc: best = 3 -1711462110.389653 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.389660 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.389671 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 udp/10.101.12.71:7416@2 -1711462110.389680 [0] gc: reduced nlocs=4 -1711462110.389685 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389691 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.389696 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389703 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389709 [0] gc: rdidx 1 lidx udp/10.101.12.71:7416@2 2 -> 0 -1711462110.389714 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389718 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.389724 [0] gc: rdidx 2 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.389729 [0] gc: rdidx 2 lidx udp/239.255.0.1:7400@2 3 -> 8 -1711462110.389734 [0] gc: a b c -1711462110.389742 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. .. } -1711462110.389749 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. .. +u } -1711462110.389755 [0] gc: loc 2 = udp/10.101.12.71:7416@2 1 { .. +u .. } -1711462110.389762 [0] gc: loc 3 = udp/239.255.0.1:7400@2 0 { +1 +1 +1 } -1711462110.389768 [0] gc: best = 3 -1711462110.389774 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.389780 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.389787 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=7 -1711462110.389792 [0] gc: gc 0x7408c8050f20: deleting -1711462110.389797 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8050f20, 110aba1:7b19badd:ce0adb73:3c2) -1711462110.389803 [0] gc: gc 0x7408c801ddd0: deleting -1711462110.389808 [0] gc: gc_delete_proxy_reader (0x7408c801ddd0, 110aba1:7b19badd:ce0adb73:100c7) -1711462110.389815 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=6 -1711462110.389824 [0] gc: gc 0x7408c8065c00: deleting -1711462110.389831 [0] gc: gc_delete_proxy_participant(0x7408c8065c00, 110aba1:7b19badd:ce0adb73:1c1) -1711462110.389838 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=5 -1711462110.389846 [0] gc: gc 0x7408c80929f0: deleting -1711462110.389854 [0] gc: gc_delete_proxy_writer (0x7408c80929f0, 110aba1:7b19badd:ce0adb73:301c3) -1711462110.389810 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c8050f20, 110aba1:7b19badd:ce0adb73:3c2) -1711462110.389863 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:301c4, 7): 5 -> 7 -1711462110.389876 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:301c4, 3): 1 -> 3 -1711462110.389885 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:301c4, 5): 3 -> 5 -1711462110.389892 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=4 -1711462110.389899 [0] gc: gc 0x7408c807d440: deleting -1711462110.389904 [0] gc: gc_delete_proxy_writer (0x7408c807d440, 110aba1:7b19badd:ce0adb73:300c3) -1711462110.389911 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:300c4, 7): 5 -> 7 -1711462110.389917 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:300c4, 3): 1 -> 3 -1711462110.389927 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:300c4, 5): 3 -> 5 -1711462110.389933 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=3 -1711462110.389941 [0] gc: gc 0x7408c8035250: deleting -1711462110.389946 [0] gc: gc_delete_proxy_writer (0x7408c8035250, 110aba1:7b19badd:ce0adb73:200c2) -1711462110.389953 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:200c7, 11): 7 -> 11 -1711462110.389963 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:200c7, 5): 1 -> 5 -1711462110.389970 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:200c7, 9): 5 -> 9 -1711462110.389975 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=2 -1711462110.389981 [0] gc: gc 0x7408c800b910: deleting -1711462110.389987 [0] gc: gc_delete_proxy_writer (0x7408c800b910, 110aba1:7b19badd:ce0adb73:4c2) -1711462110.389995 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:4c7, 13): 10 -> 13 -1711462110.390004 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:4c7, 5): 1 -> 5 -1711462110.390009 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:4c7, 8): 5 -> 8 -1711462110.390014 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=1 -1711462110.390020 [0] gc: gc 0x7408c8050f20: deleting -1711462110.390025 [0] gc: gc_delete_proxy_writer (0x7408c8050f20, 110aba1:7b19badd:ce0adb73:3c2) -1711462110.390031 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:3c7, 16): 12 -> 16 -1711462110.390037 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:3c7, 6): 1 -> 6 -1711462110.390044 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:3c7, 10): 6 -> 10 -1711462110.390049 [0] gc: ddsi_unref_proxy_participant(110aba1:7b19badd:ce0adb73:1c1): refc=0, freeing -1711462110.390055 [0] gc: lease_unregister(l 0x7408c80256c0 guid 110aba1:7b19badd:ce0adb73:1c1) -1711462110.390061 [0] gc: lease_free(l 0x7408c80256c0 guid 110aba1:7b19badd:ce0adb73:1c1) -1711462110.390066 [0] gc: lease_free(l 0x7408c800c690 guid 110aba1:7b19badd:ce0adb73:1c1) -1711462110.390077 [0] gc: ddsi_remove_deleted_participant_guid(110aba1:7b19badd:ce0adb73:1c1 for_what=3) -1711462110.390084 [0] gc: gc 0x7408c8006f50: deleting -1711462110.390089 [0] gc: gc 0x7408c8015c30: deleting -1711462110.391743 [0] recvMC: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.391784 [0] recvMC: HEARTBEAT(#30:22..22 L(:1c1 16958.051270)110e21c:d0762c48:a9f0fb28:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@22(sync) 110cd0d:e3b81b8d:1ccb65b1:504@22(sync) 110cd0d:79d6eeac:ea4a8907:504@22(sync)) -1711462110.391803 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110e21c:d0762c48:a9f0fb28:403: F#6:23/0: -1711462110.391818 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110e21c:d0762c48:a9f0fb28:403) -1711462110.391829 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.391840 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110e21c:d0762c48:a9f0fb28:403: F#20:23/0: -1711462110.391848 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110e21c:d0762c48:a9f0fb28:403) -1711462110.391857 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.391867 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110e21c:d0762c48:a9f0fb28:403: F#11:23/0: -1711462110.391874 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110e21c:d0762c48:a9f0fb28:403) -1711462110.391882 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.391919 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc0097e8:44 0x7408bc0094d0:24 0x7408bc0094f8:28 0x7408c4011ac0:24 0x7408c4011ae8:28 [ udp/10.101.12.71:7413@2 ] -1711462110.391929 [0] tev: traffic-xmit (1) 168 -1711462110.392150 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.392166 [0] recv: INFOTS(1711462110.392032273) -1711462110.392181 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0 #20 L(:1c1 16958.051667)) -1711462110.392211 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:3c2 #20: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:403}} -1711462110.392222 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:403 ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:403) - deleting -1711462110.392228 [0] dq.builtin: => EVERYONE -1711462110.392250 [0] dq.builtin: delete -1711462110.392257 [0] gc: gc 0x7408c8039950: deleting -1711462110.392264 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8039950, 110e21c:d0762c48:a9f0fb28:403) -1711462110.392280 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c8039950, 110e21c:d0762c48:a9f0fb28:403) -1711462110.392296 [0] gc: gc 0x7408c8039950: deleting -1711462110.392305 [0] gc: gc_delete_proxy_writer (0x7408c8039950, 110e21c:d0762c48:a9f0fb28:403) -1711462110.392314 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:504, 21): 22 -> 21 -1711462110.392326 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:504, 7): 6 -> 7 -1711462110.392335 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:504, 12): 13 -> 12 -1711462110.392342 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=13 -1711462110.392349 [0] gc: gc 0x7408c8015c30: deleting -1711462110.392422 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.392434 [0] recv: INFOTS(1711462110.384844509) -1711462110.392460 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #2) -1711462110.392466 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110443d:bb7f10a5:18901533:1c1}} -1711462110.392487 [0] recv: HDR(110443d:bb7f10a5:18901533 vendor 1.16) len 96 from udp/10.101.12.71:44991 -1711462110.392506 [0] recv: INFOTS(1711462110.384844509) -1711462110.392488 [0] dq.builtin: SPDP ST3 110443d:bb7f10a5:18901533:1c1ddsi_delete_proxy_participant_by_guid(110443d:bb7f10a5:18901533:1c1) - deleting -1711462110.392531 [0] dq.builtin: => EVERYONE -1711462110.392538 [0] recv: DATA(110443d:bb7f10a5:18901533:100c2 -> 0:0:0:0 #2) -1711462110.392547 [0] dq.builtin: delete_ppt(110443d:bb7f10a5:18901533:1c1) - deleting dependent proxy participants -1711462110.392555 [0] dq.builtin: delete_ppt(110443d:bb7f10a5:18901533:1c1) - deleting endpoints -1711462110.392562 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:301c4) - deleting -1711462110.392574 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:301c3) - deleting -1711462110.392579 [0] gc: gc 0x7408c80929f0: not yet, shortsleep -1711462110.392581 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:300c4) - deleting -1711462110.392599 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:300c3) - deleting -1711462110.392611 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:200c7) - deleting -1711462110.392619 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:200c2) - deleting -1711462110.392626 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:4c7) - deleting -1711462110.392635 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:4c2) - deleting -1711462110.392643 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:3c7) - deleting -1711462110.392651 [0] dq.builtin: ddsi_delete_proxy_writer (110443d:bb7f10a5:18901533:3c2) - deleting -1711462110.392657 [0] dq.builtin: ddsi_delete_proxy_reader (110443d:bb7f10a5:18901533:100c7) - deleting -1711462110.392664 [0] dq.builtin: delete -1711462110.392673 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110443d:bb7f10a5:18901533:1c1}} -1711462110.392680 [0] dq.builtin: SPDP ST3 110443d:bb7f10a5:18901533:1c1 unknown not allowed -1711462110.393364 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.393383 [0] recv: INFOTS(1711462110.393273698) -1711462110.393393 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0 #16 L(:1c1 16958.052885)) -1711462110.393427 [0] dq.builtin: data(builtin, vendor 1.16): 110e21c:d0762c48:a9f0fb28:4c2 #16: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110e21c:d0762c48:a9f0fb28:504}} -1711462110.393444 [0] dq.builtin: SEDP ST3 110e21c:d0762c48:a9f0fb28:504 ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:504) => EVERYONE -1711462110.393456 [0] dq.builtin: - deleting -1711462110.393466 [0] dq.builtin: delete -1711462110.393643 [0] gc: gc 0x7408c80929f0: deleting -1711462110.393679 [0] gc: gc_delete_proxy_reader (0x7408c80929f0, 110443d:bb7f10a5:18901533:301c4) -1711462110.393660 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.393692 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.393700 [0] gc: reduced nlocs=3 -1711462110.393706 [0] recv: HEARTBEAT(#11:16..16 L(:1c1 16958.053198)110e21c:d0762c48:a9f0fb28:4c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:4c7@16(sync) 110cd0d:e3b81b8d:1ccb65b1:4c7@16(sync) 110cd0d:79d6eeac:ea4a8907:4c7@16(sync)) -1711462110.393707 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393724 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.393727 [0] tev: acknack 110cd0d:56a27910:57318171:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#5:17/0: -1711462110.393730 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393745 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.393757 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.393758 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393779 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.393786 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393794 [0] gc: a b -1711462110.393801 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.393771 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#13:17/0: -1711462110.393808 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.393837 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.393843 [0] gc: best = 2 -1711462110.393851 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.393820 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.393858 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.393875 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.393881 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.393897 [0] gc: reduced nlocs=3 -1711462110.393892 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:4c7 -> 110e21c:d0762c48:a9f0fb28:4c2: F#8:17/0: -1711462110.393901 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393921 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.393928 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393936 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.393912 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:4c7 -> pwr 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.393942 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.393961 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.393975 [0] gc: a b -1711462110.393983 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.393990 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.393998 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.394003 [0] gc: best = 2 -1711462110.393956 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.394009 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394032 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394044 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.394049 [0] gc: reduced nlocs=3 -1711462110.394056 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394065 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.394071 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394079 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394087 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.394096 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394102 [0] gc: a b -1711462110.394110 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.394120 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.394127 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.394136 [0] gc: best = 2 -1711462110.394142 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394151 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:301c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394159 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=11 -1711462110.394167 [0] gc: gc 0x7408c80057c0: deleting -1711462110.394173 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c80057c0, 110443d:bb7f10a5:18901533:301c3) -1711462110.394057 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc0097e8:44 0x7408bc0094d0:24 0x7408bc0094f8:28 0x7408c4011ac0:24 0x7408c4011ae8:28 [ udp/10.101.12.71:7412@2 ] -1711462110.394184 [0] gc: gc 0x7408c8016150: deleting -1711462110.394190 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110443d:bb7f10a5:18901533:300c4) -1711462110.394202 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.394210 [0] gc: reduced nlocs=3 -1711462110.394223 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394228 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.394202 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c80057c0, 110443d:bb7f10a5:18901533:301c3) -1711462110.394235 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394250 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394257 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.394266 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394273 [0] gc: a b -1711462110.394283 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.394290 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.394297 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.394304 [0] gc: best = 2 -1711462110.394315 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394202 [0] tev: traffic-xmit (1) 168 -1711462110.394323 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394333 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.394338 [0] gc: reduced nlocs=3 -1711462110.394344 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394350 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.394355 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394363 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394368 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.394373 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394378 [0] gc: a b -1711462110.394384 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.394391 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.394398 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.394406 [0] gc: best = 2 -1711462110.394413 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394422 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394431 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.394435 [0] gc: reduced nlocs=3 -1711462110.394440 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394447 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.394452 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394457 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394462 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.394467 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394472 [0] gc: a b -1711462110.394480 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.394486 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.394492 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.394496 [0] gc: best = 2 -1711462110.394501 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394507 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:300c3): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394513 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=10 -1711462110.394519 [0] gc: gc 0x7408c8039950: deleting -1711462110.394528 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8039950, 110443d:bb7f10a5:18901533:300c3) -1711462110.394536 [0] gc: gc 0x7408c8007880: deleting -1711462110.394541 [0] gc: gc_delete_proxy_reader (0x7408c8007880, 110443d:bb7f10a5:18901533:200c7) -1711462110.394541 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c8039950, 110443d:bb7f10a5:18901533:300c3) -1711462110.394553 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.394567 [0] gc: reduced nlocs=3 -1711462110.394576 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394581 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.394587 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394592 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394604 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.394609 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394616 [0] gc: a b -1711462110.394625 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.394631 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.394640 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.394645 [0] gc: best = 2 -1711462110.394654 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394661 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394670 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.394675 [0] gc: reduced nlocs=3 -1711462110.394687 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394692 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.394699 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394703 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394709 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.394714 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394720 [0] gc: a b -1711462110.394726 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.394732 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.394738 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.394743 [0] gc: best = 2 -1711462110.394748 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394754 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394766 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.394772 [0] gc: reduced nlocs=3 -1711462110.394777 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394783 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.394788 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394793 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394800 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.394805 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394811 [0] gc: a b -1711462110.394817 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.394823 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.394829 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.394836 [0] gc: best = 2 -1711462110.394843 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394849 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:200c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.394854 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=9 -1711462110.394861 [0] gc: gc 0x7408c8041ae0: deleting -1711462110.394867 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8041ae0, 110443d:bb7f10a5:18901533:200c2) -1711462110.394875 [0] gc: gc 0x7408c800b910: deleting -1711462110.394880 [0] gc: gc_delete_proxy_reader (0x7408c800b910, 110443d:bb7f10a5:18901533:4c7) -1711462110.394891 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.394902 [0] gc: reduced nlocs=3 -1711462110.394907 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394917 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.394924 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394930 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.394936 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.394943 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.394952 [0] gc: a b -1711462110.394892 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c8041ae0, 110443d:bb7f10a5:18901533:200c2) -1711462110.394959 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.394974 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.394981 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.394985 [0] gc: best = 2 -1711462110.394991 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.394998 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.395009 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.395013 [0] gc: reduced nlocs=3 -1711462110.395017 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395022 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.395027 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.395031 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395036 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.395041 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.395046 [0] gc: a b -1711462110.395053 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.395066 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.395072 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.395077 [0] gc: best = 2 -1711462110.395081 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.395087 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.395096 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.395100 [0] gc: reduced nlocs=3 -1711462110.395105 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395110 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.395116 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.395122 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395127 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.395132 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.395138 [0] gc: a b -1711462110.395145 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.395153 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.395160 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.395164 [0] gc: best = 2 -1711462110.395169 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.395175 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:4c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.395187 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=8 -1711462110.395192 [0] gc: gc 0x7408c802f7c0: deleting -1711462110.395197 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c802f7c0, 110443d:bb7f10a5:18901533:4c2) -1711462110.395203 [0] gc: gc 0x7408c801ddd0: deleting -1711462110.395207 [0] gc: gc_delete_proxy_reader (0x7408c801ddd0, 110443d:bb7f10a5:18901533:3c7) -1711462110.395208 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c802f7c0, 110443d:bb7f10a5:18901533:4c2) -1711462110.395216 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.395231 [0] gc: reduced nlocs=3 -1711462110.395236 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395241 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.395245 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.395249 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395254 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.395259 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.395264 [0] gc: a b -1711462110.395269 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.395275 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.395282 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.395286 [0] gc: best = 2 -1711462110.395291 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.395297 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.395306 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.395311 [0] gc: reduced nlocs=3 -1711462110.395315 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395320 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.395325 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.395329 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395334 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.395338 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.395343 [0] gc: a b -1711462110.395348 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.395354 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.395360 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.395364 [0] gc: best = 2 -1711462110.395370 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.395376 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.395384 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7412@2 udp/10.101.12.71:7414@2 -1711462110.395388 [0] gc: reduced nlocs=3 -1711462110.395394 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395399 [0] gc: rdidx 0 lidx udp/10.101.12.71:7412@2 0 -> 0 -1711462110.395404 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.395409 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395413 [0] gc: rdidx 1 lidx udp/10.101.12.71:7414@2 1 -> 0 -1711462110.395418 [0] gc: rdidx 1 lidx udp/239.255.0.1:7400@2 2 -> 8 -1711462110.395423 [0] gc: a b -1711462110.395428 [0] gc: loc 0 = udp/10.101.12.71:7412@2 1 { +u .. } -1711462110.395558 [0] gc: loc 1 = udp/10.101.12.71:7414@2 1 { .. +u } -1711462110.395565 [0] gc: loc 2 = udp/239.255.0.1:7400@2 1 { +1 +1 } -1711462110.395571 [0] gc: best = 2 -1711462110.395575 [0] gc: simple udp/239.255.0.1:7400@2 -1711462110.395581 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:3c2): udp/239.255.0.1:7400@2 (burst size 4294901760 rexmit 1048576) -1711462110.395585 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=7 -1711462110.395590 [0] gc: gc 0x7408c8065c00: deleting -1711462110.395594 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8065c00, 110443d:bb7f10a5:18901533:3c2) -1711462110.395600 [0] gc: gc 0x7408c8050f20: deleting -1711462110.395608 [0] gc: gc_delete_proxy_reader (0x7408c8050f20, 110443d:bb7f10a5:18901533:100c7) -1711462110.395612 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=6 -1711462110.395617 [0] gc: gc 0x7408c8040ad0: deleting -1711462110.395623 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 52 from udp/10.101.12.71:58212 -1711462110.395629 [0] gc: gc_delete_proxy_participant(0x7408c8040ad0, 110443d:bb7f10a5:18901533:1c1) -1711462110.395655 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=5 -1711462110.395661 [0] gc: gc 0x7408c803bcd0: deleting -1711462110.395663 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#5:21/0: -1711462110.395616 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c8065c00, 110443d:bb7f10a5:18901533:3c2) -1711462110.395683 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.395666 [0] gc: gc_delete_proxy_reader (0x7408c803bcd0, 110e21c:d0762c48:a9f0fb28:504) -1711462110.395703 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.395649 [0] recv: HEARTBEAT(#11:20..20 L(:1c1 16958.055145)110e21c:d0762c48:a9f0fb28:3c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:3c7@20(sync) 110cd0d:e3b81b8d:1ccb65b1:3c7@20(sync) 110cd0d:79d6eeac:ea4a8907:3c7@20(sync)) -1711462110.395719 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#15:21/0: -1711462110.395721 [0] gc: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 -1711462110.395740 [0] gc: reduced nlocs=2 -1711462110.395749 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395755 [0] gc: rdidx 0 lidx udp/10.101.12.71:7415@2 0 -> 0 -1711462110.395762 [0] gc: rdidx 0 lidx udp/239.255.0.1:7401@2 1 -> 8 -1711462110.395768 [0] gc: a -1711462110.395774 [0] gc: loc 0 = udp/10.101.12.71:7415@2 1 { +u } -1711462110.395781 [0] gc: loc 1 = udp/239.255.0.1:7401@2 2 { +1 } -1711462110.395785 [0] gc: best = 0 -1711462110.395742 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.395790 [0] gc: simple udp/10.101.12.71:7415@2 -1711462110.395810 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:403): udp/10.101.12.71:7415@2 (burst size 4294901760 rexmit 1048576) -1711462110.395802 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.395819 [0] gc: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 -1711462110.395833 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:3c7 -> 110e21c:d0762c48:a9f0fb28:3c2: F#9:21/0: -1711462110.395845 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:3c7 -> pwr 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.395836 [0] gc: reduced nlocs=2 -1711462110.395854 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.395867 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395873 [0] gc: rdidx 0 lidx udp/10.101.12.71:7415@2 0 -> 0 -1711462110.395878 [0] gc: rdidx 0 lidx udp/239.255.0.1:7401@2 1 -> 8 -1711462110.395882 [0] gc: a -1711462110.395887 [0] gc: loc 0 = udp/10.101.12.71:7415@2 1 { +u } -1711462110.395892 [0] gc: loc 1 = udp/239.255.0.1:7401@2 2 { +1 } -1711462110.395895 [0] gc: best = 0 -1711462110.395899 [0] gc: simple udp/10.101.12.71:7415@2 -1711462110.395904 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc0097e8:44 0x7408bc0094d0:24 0x7408bc0094f8:28 0x7408c4011ac0:24 0x7408c4011ae8:28 [ udp/10.101.12.71:7412@2 ] -1711462110.395917 [0] tev: traffic-xmit (1) 168 -1711462110.395905 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:403): udp/10.101.12.71:7415@2 (burst size 4294901760 rexmit 1048576) -1711462110.395938 [0] gc: setcover: all_addrs udp/239.255.0.1:7401@2 udp/10.101.12.71:7415@2 -1711462110.395942 [0] gc: reduced nlocs=2 -1711462110.395948 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.395953 [0] gc: rdidx 0 lidx udp/10.101.12.71:7415@2 0 -> 0 -1711462110.395959 [0] gc: rdidx 0 lidx udp/239.255.0.1:7401@2 1 -> 8 -1711462110.395965 [0] gc: a -1711462110.395970 [0] gc: loc 0 = udp/10.101.12.71:7415@2 1 { +u } -1711462110.395975 [0] gc: loc 1 = udp/239.255.0.1:7401@2 2 { +1 } -1711462110.395979 [0] gc: best = 0 -1711462110.395983 [0] gc: simple udp/10.101.12.71:7415@2 -1711462110.395989 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:403): udp/10.101.12.71:7415@2 (burst size 4294901760 rexmit 1048576) -1711462110.395993 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=12 -1711462110.395999 [0] gc: gc 0x7408c80057c0: deleting -1711462110.396003 [0] gc: gc_delete_proxy_writer (0x7408c80057c0, 110443d:bb7f10a5:18901533:301c3) -1711462110.396008 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:301c4, 7): 7 -> 7 -1711462110.396015 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:301c4, 3): 3 -> 3 -1711462110.396020 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:301c4, 5): 5 -> 5 -1711462110.396026 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=4 -1711462110.396031 [0] gc: gc 0x7408c8039950: deleting -1711462110.396035 [0] gc: gc_delete_proxy_writer (0x7408c8039950, 110443d:bb7f10a5:18901533:300c3) -1711462110.396040 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:300c4, 7): 7 -> 7 -1711462110.396047 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:300c4, 3): 3 -> 3 -1711462110.396055 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:300c4, 5): 5 -> 5 -1711462110.396062 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=3 -1711462110.396067 [0] gc: gc 0x7408c8041ae0: deleting -1711462110.396074 [0] gc: gc_delete_proxy_writer (0x7408c8041ae0, 110443d:bb7f10a5:18901533:200c2) -1711462110.396079 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:200c7, 11): 11 -> 11 -1711462110.396086 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:200c7, 6): 5 -> 6 -1711462110.396094 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:200c7, 9): 9 -> 9 -1711462110.396101 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=2 -1711462110.396111 [0] gc: gc 0x7408c802f7c0: deleting -1711462110.396116 [0] gc: gc_delete_proxy_writer (0x7408c802f7c0, 110443d:bb7f10a5:18901533:4c2) -1711462110.396122 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:4c7, 13): 13 -> 13 -1711462110.396129 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:4c7, 5): 5 -> 5 -1711462110.396138 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:4c7, 8): 8 -> 8 -1711462110.396144 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=1 -1711462110.396150 [0] gc: gc 0x7408c8065c00: deleting -1711462110.396155 [0] gc: gc_delete_proxy_writer (0x7408c8065c00, 110443d:bb7f10a5:18901533:3c2) -1711462110.396160 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:3c7, 16): 16 -> 16 -1711462110.396167 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:3c7, 6): 6 -> 6 -1711462110.396174 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:3c7, 10): 10 -> 10 -1711462110.396181 [0] gc: ddsi_unref_proxy_participant(110443d:bb7f10a5:18901533:1c1): refc=0, freeing -1711462110.396187 [0] gc: lease_unregister(l 0x7408c803d510 guid 110443d:bb7f10a5:18901533:1c1) -1711462110.396192 [0] gc: lease_free(l 0x7408c803d510 guid 110443d:bb7f10a5:18901533:1c1) -1711462110.396197 [0] gc: lease_free(l 0x7408c801cc80 guid 110443d:bb7f10a5:18901533:1c1) -1711462110.396205 [0] gc: ddsi_remove_deleted_participant_guid(110443d:bb7f10a5:18901533:1c1 for_what=3) -1711462110.396211 [0] gc: gc 0x7408c8015c30: deleting -1711462110.396216 [0] gc: gc 0x7408c80057c0: deleting -1711462110.396220 [0] gc: gc 0x7408c8006f50: deleting -1711462110.404300 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.404335 [0] recv: INFOTS(1711462110.397918357) -1711462110.404355 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #2) -1711462110.404373 [0] recv: HDR(110e21c:d0762c48:a9f0fb28 vendor 1.16) len 96 from udp/10.101.12.71:58212 -1711462110.404382 [0] recv: INFOTS(1711462110.397918357) -1711462110.404391 [0] recv: DATA(110e21c:d0762c48:a9f0fb28:100c2 -> 0:0:0:0 #2) -1711462110.404417 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110e21c:d0762c48:a9f0fb28:1c1}} -1711462110.404453 [0] dq.builtin: SPDP ST3 110e21c:d0762c48:a9f0fb28:1c1ddsi_delete_proxy_participant_by_guid(110e21c:d0762c48:a9f0fb28:1c1) - deleting -1711462110.404464 [0] dq.builtin: => EVERYONE -1711462110.404493 [0] dq.builtin: delete_ppt(110e21c:d0762c48:a9f0fb28:1c1) - deleting dependent proxy participants -1711462110.404517 [0] dq.builtin: delete_ppt(110e21c:d0762c48:a9f0fb28:1c1) - deleting endpoints -1711462110.404528 [0] dq.builtin: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:301c4) - deleting -1711462110.404555 [0] dq.builtin: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:301c3) - deleting -1711462110.404564 [0] dq.builtin: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:300c4) - deleting -1711462110.404569 [0] gc: gc 0x7408c80191a0: not yet, shortsleep -1711462110.404574 [0] dq.builtin: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:300c3) - deleting -1711462110.404600 [0] dq.builtin: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:200c7) - deleting -1711462110.404610 [0] dq.builtin: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:200c2) - deleting -1711462110.404617 [0] dq.builtin: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:4c7) - deleting -1711462110.404628 [0] dq.builtin: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:4c2) - deleting -1711462110.404635 [0] dq.builtin: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:3c7) - deleting -1711462110.404648 [0] dq.builtin: ddsi_delete_proxy_writer (110e21c:d0762c48:a9f0fb28:3c2) - deleting -1711462110.404656 [0] dq.builtin: ddsi_delete_proxy_reader (110e21c:d0762c48:a9f0fb28:100c7) - deleting -1711462110.404677 [0] dq.builtin: delete -1711462110.404688 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110e21c:d0762c48:a9f0fb28:1c1}} -1711462110.404694 [0] dq.builtin: SPDP ST3 110e21c:d0762c48:a9f0fb28:1c1 unknown not allowed -1711462110.405663 [0] gc: gc 0x7408c80191a0: deleting -1711462110.405686 [0] gc: gc_delete_proxy_reader (0x7408c80191a0, 110e21c:d0762c48:a9f0fb28:301c4) -1711462110.405706 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.405715 [0] gc: reduced nlocs=2 -1711462110.405723 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.405732 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.405738 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.405749 [0] gc: a -1711462110.405757 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.405780 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.405787 [0] gc: best = 0 -1711462110.405793 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.405803 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:301c3): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.405815 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.405820 [0] gc: reduced nlocs=2 -1711462110.405829 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.405834 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.405841 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.405848 [0] gc: a -1711462110.405854 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.405861 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.405866 [0] gc: best = 0 -1711462110.405870 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.405878 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:301c3): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.405887 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.405891 [0] gc: reduced nlocs=2 -1711462110.405897 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.405902 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.405908 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.405913 [0] gc: a -1711462110.405919 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.405926 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.405929 [0] gc: best = 0 -1711462110.405938 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.405944 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:301c3): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.405950 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=11 -1711462110.405960 [0] gc: gc 0x7408c8004d10: deleting -1711462110.405966 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8004d10, 110e21c:d0762c48:a9f0fb28:301c3) -1711462110.405976 [0] gc: gc 0x7408c8004260: deleting -1711462110.405982 [0] gc: gc_delete_proxy_reader (0x7408c8004260, 110e21c:d0762c48:a9f0fb28:300c4) -1711462110.405992 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.405996 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c8004d10, 110e21c:d0762c48:a9f0fb28:301c3) -1711462110.405999 [0] gc: reduced nlocs=2 -1711462110.406033 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406039 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.406045 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406050 [0] gc: a -1711462110.406058 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.406065 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.406069 [0] gc: best = 0 -1711462110.406075 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.406082 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:300c3): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.406093 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.406098 [0] gc: reduced nlocs=2 -1711462110.406103 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406108 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.406116 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406121 [0] gc: a -1711462110.406127 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.406136 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.406142 [0] gc: best = 0 -1711462110.406147 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.406154 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:300c3): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.406163 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.406167 [0] gc: reduced nlocs=2 -1711462110.406177 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406182 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.406190 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406196 [0] gc: a -1711462110.406203 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.406210 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.406217 [0] gc: best = 0 -1711462110.406223 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.406230 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:300c3): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.406243 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=10 -1711462110.406249 [0] gc: gc 0x7408c8072920: deleting -1711462110.406253 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8072920, 110e21c:d0762c48:a9f0fb28:300c3) -1711462110.406262 [0] gc: gc 0x7408c8039950: deleting -1711462110.406267 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c8072920, 110e21c:d0762c48:a9f0fb28:300c3) -1711462110.406269 [0] gc: gc_delete_proxy_reader (0x7408c8039950, 110e21c:d0762c48:a9f0fb28:200c7) -1711462110.406290 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.406295 [0] gc: reduced nlocs=2 -1711462110.406301 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406306 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.406312 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406317 [0] gc: a -1711462110.406326 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.406331 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.406347 [0] gc: best = 0 -1711462110.406353 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.406363 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:200c2): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.406373 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.406378 [0] gc: reduced nlocs=2 -1711462110.406385 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406390 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.406394 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406399 [0] gc: a -1711462110.406404 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.406412 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.406417 [0] gc: best = 0 -1711462110.406422 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.406428 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:200c2): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.406436 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.406441 [0] gc: reduced nlocs=2 -1711462110.406446 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406452 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.406457 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406463 [0] gc: a -1711462110.406469 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.406475 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.406479 [0] gc: best = 0 -1711462110.406484 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.406491 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:200c2): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.406496 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=9 -1711462110.406502 [0] gc: gc 0x7408c8016150: deleting -1711462110.406506 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8016150, 110e21c:d0762c48:a9f0fb28:200c2) -1711462110.406512 [0] gc: gc 0x7408c8057380: deleting -1711462110.406517 [0] gc: gc_delete_proxy_reader (0x7408c8057380, 110e21c:d0762c48:a9f0fb28:4c7) -1711462110.406518 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c8016150, 110e21c:d0762c48:a9f0fb28:200c2) -1711462110.406527 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.406544 [0] gc: reduced nlocs=2 -1711462110.406549 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406554 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.406559 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406566 [0] gc: a -1711462110.406574 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.406580 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.406584 [0] gc: best = 0 -1711462110.406589 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.406596 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:4c2): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.406606 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.406610 [0] gc: reduced nlocs=2 -1711462110.406614 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406620 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.406627 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406636 [0] gc: a -1711462110.406642 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.406649 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.406655 [0] gc: best = 0 -1711462110.406661 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.406667 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:4c2): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.406682 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.406687 [0] gc: reduced nlocs=2 -1711462110.406692 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406698 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.406706 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406710 [0] gc: a -1711462110.406716 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.406724 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.406728 [0] gc: best = 0 -1711462110.406733 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.406739 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:4c2): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.406745 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=8 -1711462110.406751 [0] gc: gc 0x7408c80929f0: deleting -1711462110.406755 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c80929f0, 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.406761 [0] gc: gc 0x7408c8005280: deleting -1711462110.406767 [0] gc: gc_delete_proxy_reader (0x7408c8005280, 110e21c:d0762c48:a9f0fb28:3c7) -1711462110.406767 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c80929f0, 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.406781 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.406786 [0] gc: reduced nlocs=2 -1711462110.406791 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406796 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.406801 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406806 [0] gc: a -1711462110.406811 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.406817 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.406821 [0] gc: best = 0 -1711462110.406826 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.406832 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:3c2): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.406842 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.406847 [0] gc: reduced nlocs=2 -1711462110.406852 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406857 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.406865 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406869 [0] gc: a -1711462110.406876 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.406882 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.406886 [0] gc: best = 0 -1711462110.406891 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.406898 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:3c2): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.406912 [0] gc: setcover: all_addrs udp/239.255.0.1:7400@2 udp/10.101.12.71:7414@2 -1711462110.406916 [0] gc: reduced nlocs=2 -1711462110.406923 [0] gc: nloopback = 0, nlocs = 2, redundant_networking = 0 -1711462110.406928 [0] gc: rdidx 0 lidx udp/10.101.12.71:7414@2 0 -> 0 -1711462110.406934 [0] gc: rdidx 0 lidx udp/239.255.0.1:7400@2 1 -> 8 -1711462110.406938 [0] gc: a -1711462110.406944 [0] gc: loc 0 = udp/10.101.12.71:7414@2 1 { +u } -1711462110.406950 [0] gc: loc 1 = udp/239.255.0.1:7400@2 2 { +1 } -1711462110.406956 [0] gc: best = 0 -1711462110.406961 [0] gc: simple udp/10.101.12.71:7414@2 -1711462110.406967 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:3c2): udp/10.101.12.71:7414@2 (burst size 4294901760 rexmit 1048576) -1711462110.406973 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=7 -1711462110.406979 [0] gc: gc 0x7408c8057780: deleting -1711462110.406983 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8057780, 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.406989 [0] gc: gc 0x7408c8002660: deleting -1711462110.406994 [0] gc: gc_delete_proxy_reader (0x7408c8002660, 110e21c:d0762c48:a9f0fb28:100c7) -1711462110.407002 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=6 -1711462110.407009 [0] gc: gc 0x7408c801daa0: deleting -1711462110.407018 [0] gc: gc_delete_proxy_participant(0x7408c801daa0, 110e21c:d0762c48:a9f0fb28:1c1) -1711462110.407024 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=5 -1711462110.407030 [0] gc: gc 0x7408c8004d10: deleting -1711462110.407036 [0] gc: gc_delete_proxy_writer (0x7408c8004d10, 110e21c:d0762c48:a9f0fb28:301c3) -1711462110.406995 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c8057780, 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.407047 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:301c4, 7): 7 -> 7 -1711462110.407073 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:301c4, 3): 3 -> 3 -1711462110.407079 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:301c4, 5): 5 -> 5 -1711462110.407085 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=4 -1711462110.407090 [0] gc: gc 0x7408c8072920: deleting -1711462110.407094 [0] gc: gc_delete_proxy_writer (0x7408c8072920, 110e21c:d0762c48:a9f0fb28:300c3) -1711462110.407100 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:300c4, 7): 7 -> 7 -1711462110.407108 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:300c4, 3): 3 -> 3 -1711462110.407115 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:300c4, 5): 5 -> 5 -1711462110.407122 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=3 -1711462110.407127 [0] gc: gc 0x7408c8016150: deleting -1711462110.407132 [0] gc: gc_delete_proxy_writer (0x7408c8016150, 110e21c:d0762c48:a9f0fb28:200c2) -1711462110.407138 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:200c7, 10): 11 -> 10 -1711462110.407146 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:200c7, 5): 6 -> 5 -1711462110.407154 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:200c7, 9): 9 -> 9 -1711462110.407160 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=2 -1711462110.407165 [0] gc: gc 0x7408c80929f0: deleting -1711462110.407170 [0] gc: gc_delete_proxy_writer (0x7408c80929f0, 110e21c:d0762c48:a9f0fb28:4c2) -1711462110.407175 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:4c7, 14): 13 -> 14 -1711462110.407183 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:4c7, 6): 5 -> 6 -1711462110.407198 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:4c7, 9): 8 -> 9 -1711462110.407206 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=1 -1711462110.407211 [0] gc: gc 0x7408c8057780: deleting -1711462110.407215 [0] gc: gc_delete_proxy_writer (0x7408c8057780, 110e21c:d0762c48:a9f0fb28:3c2) -1711462110.407220 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:3c7, 16): 16 -> 16 -1711462110.407228 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:3c7, 6): 6 -> 6 -1711462110.407238 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:3c7, 10): 10 -> 10 -1711462110.407243 [0] gc: ddsi_unref_proxy_participant(110e21c:d0762c48:a9f0fb28:1c1): refc=0, freeing -1711462110.407248 [0] gc: lease_unregister(l 0x7408c8051660 guid 110e21c:d0762c48:a9f0fb28:1c1) -1711462110.407253 [0] gc: lease_free(l 0x7408c8051660 guid 110e21c:d0762c48:a9f0fb28:1c1) -1711462110.407257 [0] gc: lease_free(l 0x7408c801d3a0 guid 110e21c:d0762c48:a9f0fb28:1c1) -1711462110.407268 [0] gc: ddsi_remove_deleted_participant_guid(110e21c:d0762c48:a9f0fb28:1c1 for_what=3) -1711462110.407274 [0] gc: gc 0x7408c80057c0: deleting -1711462110.407278 [0] gc: gc 0x7408c8015c30: deleting -1711462110.413533 [0] recvUC: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462110.413594 [0] recvUC: HEARTBEAT(#100:90..90 L(:1c1 16958.073073)110d7b4:17c5b8c5:94bd0ff4:403 -> 0:0:0:0: 110cd0d:56a27910:57318171:504@90(sync) 110cd0d:e3b81b8d:1ccb65b1:504@90(sync) 110cd0d:79d6eeac:ea4a8907:504@90(sync)) -1711462110.413635 [0] tev: acknack 110cd0d:56a27910:57318171:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#7:91/0: -1711462110.413666 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462110.413678 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.413690 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#23:91/0: -1711462110.413698 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462110.413706 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.413717 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:504 -> 110d7b4:17c5b8c5:94bd0ff4:403: F#14:91/0: -1711462110.413724 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:504 -> pwr 110d7b4:17c5b8c5:94bd0ff4:403) -1711462110.413731 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.413794 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc0097e8:44 0x7408bc0094d0:24 0x7408bc0094f8:28 0x7408c4011ac0:24 0x7408c4011ae8:28 [ udp/10.101.12.71:7415@2 ] -1711462110.413805 [0] tev: traffic-xmit (1) 168 -1711462110.414185 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.414208 [0] recv: INFOTS(1711462110.414026522) -1711462110.414228 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0 #90 L(:1c1 16958.073709)) -1711462110.414272 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:3c2 #90: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:403}} -1711462110.414304 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:403 ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:403) - deleting -1711462110.414317 [0] dq.builtin: => EVERYONE -1711462110.414368 [0] dq.builtin: delete -1711462110.414383 [0] gc: gc 0x7408c80929f0: deleting -1711462110.414400 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c80929f0, 110d7b4:17c5b8c5:94bd0ff4:403) -1711462110.414430 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.414442 [0] dq.user: gc_delete_proxy_writer_dqueue_bubble(0x7408c80929f0, 110d7b4:17c5b8c5:94bd0ff4:403) -1711462110.414468 [0] recv: INFOTS(1711462110.414306501) -1711462110.414485 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0 #80 L(:1c1 16958.073969)) -1711462110.414489 [0] gc: gc 0x7408c80929f0: deleting -1711462110.414506 [0] gc: gc_delete_proxy_writer (0x7408c80929f0, 110d7b4:17c5b8c5:94bd0ff4:403) -1711462110.414512 [0] dq.builtin: data(builtin, vendor 1.16): 110d7b4:17c5b8c5:94bd0ff4:4c2 #80: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110d7b4:17c5b8c5:94bd0ff4:504}} -1711462110.414522 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:504, 24): 22 -> 24 -1711462110.414528 [0] dq.builtin: SEDP ST3 110d7b4:17c5b8c5:94bd0ff4:504 ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:504) => EVERYONE -1711462110.414536 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:504, 8): 7 -> 8 -1711462110.414546 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:504, 15): 13 -> 15 -1711462110.414553 [0] dq.builtin: - deleting -1711462110.414554 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=13 -1711462110.414574 [0] dq.builtin: delete -1711462110.414588 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462110.414590 [0] gc: gc 0x7408c8016150: not yet, shortsleep -1711462110.414636 [0] recv: HEARTBEAT(#10:80..80 L(:1c1 16958.074122)110d7b4:17c5b8c5:94bd0ff4:4c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:4c7@80(sync) 110cd0d:e3b81b8d:1ccb65b1:4c7@80(sync) 110cd0d:79d6eeac:ea4a8907:4c7@80(sync)) -1711462110.414652 [0] tev: acknack 110cd0d:56a27910:57318171:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2: F#5:81/0: -1711462110.414678 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:4c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462110.414691 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.414703 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2: F#13:81/0: -1711462110.414711 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:4c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462110.414719 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.414728 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:4c7 -> 110d7b4:17c5b8c5:94bd0ff4:4c2: F#8:81/0: -1711462110.414736 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:4c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462110.414743 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.414793 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc0097e8:44 0x7408bc0094d0:24 0x7408bc0094f8:28 0x7408c4011ac0:24 0x7408c4011ae8:28 [ udp/10.101.12.71:7414@2 ] -1711462110.414802 [0] tev: traffic-xmit (1) 168 -1711462110.415712 [0] gc: gc 0x7408c8016150: deleting -1711462110.415738 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:504) -1711462110.415750 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:403): (burst size 4294901760 rexmit 1048576) -1711462110.415759 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:403): (burst size 4294901760 rexmit 1048576) -1711462110.415767 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:403): (burst size 4294901760 rexmit 1048576) -1711462110.415774 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=12 -1711462110.415783 [0] gc: gc 0x7408c8015c30: deleting -1711462110.415789 [0] gc: gc 0x7408c8016150: deleting -1711462110.416047 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 52 from udp/10.101.12.71:40473 -1711462110.416081 [0] recv: HEARTBEAT(#11:90..90 L(:1c1 16958.075568)110d7b4:17c5b8c5:94bd0ff4:3c2 -> 0:0:0:0: 110cd0d:56a27910:57318171:3c7@90(sync) 110cd0d:e3b81b8d:1ccb65b1:3c7@90(sync) 110cd0d:79d6eeac:ea4a8907:3c7@90(sync)) -1711462110.416094 [0] tev: acknack 110cd0d:56a27910:57318171:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#6:91/0: -1711462110.416118 [0] tev: send acknack(rd 110cd0d:56a27910:57318171:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462110.416127 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009700 0(control): niov 0 sz 0 => now niov 2 sz 64 -1711462110.416137 [0] tev: acknack 110cd0d:e3b81b8d:1ccb65b1:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#16:91/0: -1711462110.416144 [0] tev: send acknack(rd 110cd0d:e3b81b8d:1ccb65b1:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462110.416152 [0] tev: xpack_addmsg 0x7408c0001390 0x7408bc009400 0(control): niov 2 sz 64 => now niov 4 sz 116 -1711462110.416161 [0] tev: acknack 110cd0d:79d6eeac:ea4a8907:3c7 -> 110d7b4:17c5b8c5:94bd0ff4:3c2: F#10:91/0: -1711462110.416169 [0] tev: send acknack(rd 110cd0d:79d6eeac:ea4a8907:3c7 -> pwr 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462110.416176 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c40119f0 0(control): niov 4 sz 116 => now niov 6 sz 168 -1711462110.416205 [0] tev: nn_xpack_send 168: 0x7408c000139c:20 0x7408bc0097e8:44 0x7408bc0094d0:24 0x7408bc0094f8:28 0x7408c4011ac0:24 0x7408c4011ae8:28 [ udp/10.101.12.71:7414@2 ] -1711462110.416214 [0] tev: traffic-xmit (1) 168 -1711462110.424208 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.424249 [0] recv: INFOTS(1711462110.418367566) -1711462110.424271 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 0:0:0:0 #2) -1711462110.424293 [0] recv: HDR(110d7b4:17c5b8c5:94bd0ff4 vendor 1.16) len 96 from udp/10.101.12.71:40473 -1711462110.424302 [0] recv: INFOTS(1711462110.418367566) -1711462110.424312 [0] recv: DATA(110d7b4:17c5b8c5:94bd0ff4:100c2 -> 0:0:0:0 #2) -1711462110.424330 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1}} -1711462110.424359 [0] dq.builtin: SPDP ST3 110d7b4:17c5b8c5:94bd0ff4:1c1ddsi_delete_proxy_participant_by_guid(110d7b4:17c5b8c5:94bd0ff4:1c1) - deleting -1711462110.424368 [0] dq.builtin: => EVERYONE -1711462110.424397 [0] dq.builtin: delete_ppt(110d7b4:17c5b8c5:94bd0ff4:1c1) - deleting dependent proxy participants -1711462110.424405 [0] dq.builtin: delete_ppt(110d7b4:17c5b8c5:94bd0ff4:1c1) - deleting endpoints -1711462110.424413 [0] dq.builtin: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:301c4) - deleting -1711462110.424431 [0] dq.builtin: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:301c3) - deleting -1711462110.424439 [0] dq.builtin: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:300c4) - deleting -1711462110.424449 [0] dq.builtin: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:300c3) - deleting -1711462110.424456 [0] dq.builtin: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:200c7) - deleting -1711462110.424457 [0] gc: gc 0x7408c8072920: not yet, shortsleep -1711462110.424467 [0] dq.builtin: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:200c2) - deleting -1711462110.424569 [0] dq.builtin: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:4c7) - deleting -1711462110.424586 [0] dq.builtin: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:4c2) - deleting -1711462110.424593 [0] dq.builtin: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:3c7) - deleting -1711462110.424604 [0] dq.builtin: ddsi_delete_proxy_writer (110d7b4:17c5b8c5:94bd0ff4:3c2) - deleting -1711462110.424612 [0] dq.builtin: ddsi_delete_proxy_reader (110d7b4:17c5b8c5:94bd0ff4:100c7) - deleting -1711462110.424618 [0] dq.builtin: delete -1711462110.424628 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110d7b4:17c5b8c5:94bd0ff4:1c1}} -1711462110.424635 [0] dq.builtin: SPDP ST3 110d7b4:17c5b8c5:94bd0ff4:1c1 unknown not allowed -1711462110.425621 [0] gc: gc 0x7408c8072920: deleting -1711462110.425669 [0] gc: gc_delete_proxy_reader (0x7408c8072920, 110d7b4:17c5b8c5:94bd0ff4:301c4) -1711462110.425693 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:301c3): (burst size 4294901760 rexmit 1048576) -1711462110.425711 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:301c3): (burst size 4294901760 rexmit 1048576) -1711462110.425726 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:301c3): (burst size 4294901760 rexmit 1048576) -1711462110.425737 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=11 -1711462110.425751 [0] gc: gc 0x7408c8004d10: deleting -1711462110.425759 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8004d10, 110d7b4:17c5b8c5:94bd0ff4:301c3) -1711462110.425771 [0] gc: gc 0x7408c8057380: deleting -1711462110.425778 [0] gc: gc_delete_proxy_reader (0x7408c8057380, 110d7b4:17c5b8c5:94bd0ff4:300c4) -1711462110.425792 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:300c3): (burst size 4294901760 rexmit 1048576) -1711462110.425809 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:300c3): (burst size 4294901760 rexmit 1048576) -1711462110.425792 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c8004d10, 110d7b4:17c5b8c5:94bd0ff4:301c3) -1711462110.425826 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:300c3): (burst size 4294901760 rexmit 1048576) -1711462110.425851 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=10 -1711462110.425867 [0] gc: gc 0x7408c8039950: deleting -1711462110.425875 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8039950, 110d7b4:17c5b8c5:94bd0ff4:300c3) -1711462110.425886 [0] gc: gc 0x7408c8004260: deleting -1711462110.425890 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c8039950, 110d7b4:17c5b8c5:94bd0ff4:300c3) -1711462110.425894 [0] gc: gc_delete_proxy_reader (0x7408c8004260, 110d7b4:17c5b8c5:94bd0ff4:200c7) -1711462110.425935 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:200c2): (burst size 4294901760 rexmit 1048576) -1711462110.425949 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:200c2): (burst size 4294901760 rexmit 1048576) -1711462110.425962 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:200c2): (burst size 4294901760 rexmit 1048576) -1711462110.425972 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=9 -1711462110.425984 [0] gc: gc 0x7408c80191a0: deleting -1711462110.425991 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c80191a0, 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462110.426001 [0] gc: gc 0x7408c8016150: deleting -1711462110.426006 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c80191a0, 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462110.426008 [0] gc: gc_delete_proxy_reader (0x7408c8016150, 110d7b4:17c5b8c5:94bd0ff4:4c7) -1711462110.426035 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:4c2): (burst size 4294901760 rexmit 1048576) -1711462110.426049 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:4c2): (burst size 4294901760 rexmit 1048576) -1711462110.426062 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:4c2): (burst size 4294901760 rexmit 1048576) -1711462110.426073 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=8 -1711462110.426082 [0] gc: gc 0x7408c80929f0: deleting -1711462110.426090 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c80929f0, 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462110.426100 [0] gc: gc 0x7408c8005280: deleting -1711462110.426111 [0] gc: gc_delete_proxy_reader (0x7408c8005280, 110d7b4:17c5b8c5:94bd0ff4:3c7) -1711462110.426104 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c80929f0, 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462110.426124 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:e3b81b8d:1ccb65b1:3c2): (burst size 4294901760 rexmit 1048576) -1711462110.426165 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:56a27910:57318171:3c2): (burst size 4294901760 rexmit 1048576) -1711462110.426180 [0] gc: ddsi_rebuild_writer_addrset(110cd0d:79d6eeac:ea4a8907:3c2): (burst size 4294901760 rexmit 1048576) -1711462110.426190 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=7 -1711462110.426201 [0] gc: gc 0x7408c8002660: deleting -1711462110.426208 [0] gc: gc_delete_proxy_writer_dqueue(0x7408c8002660, 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462110.426217 [0] gc: gc 0x7408c801daa0: deleting -1711462110.426229 [0] gc: gc_delete_proxy_reader (0x7408c801daa0, 110d7b4:17c5b8c5:94bd0ff4:100c7) -1711462110.426240 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=6 -1711462110.426222 [0] dq.builtin: gc_delete_proxy_writer_dqueue_bubble(0x7408c8002660, 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462110.426254 [0] gc: gc 0x7408c8057780: deleting -1711462110.426262 [0] gc: gc_delete_proxy_participant(0x7408c8057780, 110d7b4:17c5b8c5:94bd0ff4:1c1) -1711462110.426270 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=5 -1711462110.426277 [0] gc: gc 0x7408c8004d10: deleting -1711462110.426284 [0] gc: gc_delete_proxy_writer (0x7408c8004d10, 110d7b4:17c5b8c5:94bd0ff4:301c3) -1711462110.426296 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:301c4, 6): 7 -> 6 -1711462110.426312 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:301c4, 2): 3 -> 2 -1711462110.426323 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:301c4, 4): 5 -> 4 -1711462110.426332 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=4 -1711462110.426343 [0] gc: gc 0x7408c8039950: deleting -1711462110.426349 [0] gc: gc_delete_proxy_writer (0x7408c8039950, 110d7b4:17c5b8c5:94bd0ff4:300c3) -1711462110.426361 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:300c4, 6): 7 -> 6 -1711462110.426375 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:300c4, 2): 3 -> 2 -1711462110.426389 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:300c4, 4): 5 -> 4 -1711462110.426401 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=3 -1711462110.426411 [0] gc: gc 0x7408c80191a0: deleting -1711462110.426418 [0] gc: gc_delete_proxy_writer (0x7408c80191a0, 110d7b4:17c5b8c5:94bd0ff4:200c2) -1711462110.426428 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:200c7, 10): 11 -> 10 -1711462110.426441 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:200c7, 5): 6 -> 5 -1711462110.426455 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:200c7, 8): 9 -> 8 -1711462110.426467 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=2 -1711462110.426478 [0] gc: gc 0x7408c80929f0: deleting -1711462110.426486 [0] gc: gc_delete_proxy_writer (0x7408c80929f0, 110d7b4:17c5b8c5:94bd0ff4:4c2) -1711462110.426497 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:4c7, 14): 14 -> 14 -1711462110.426510 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:4c7, 6): 6 -> 6 -1711462110.426524 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:4c7, 9): 9 -> 9 -1711462110.426536 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=1 -1711462110.426546 [0] gc: gc 0x7408c8002660: deleting -1711462110.426553 [0] gc: gc_delete_proxy_writer (0x7408c8002660, 110d7b4:17c5b8c5:94bd0ff4:3c2) -1711462110.426563 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:e3b81b8d:1ccb65b1:3c7, 17): 16 -> 17 -1711462110.426575 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:56a27910:57318171:3c7, 7): 6 -> 7 -1711462110.426597 [0] gc: ddsi_update_reader_init_acknack_count (110cd0d:79d6eeac:ea4a8907:3c7, 11): 10 -> 11 -1711462110.426609 [0] gc: ddsi_unref_proxy_participant(110d7b4:17c5b8c5:94bd0ff4:1c1): refc=0, freeing -1711462110.426619 [0] gc: lease_unregister(l 0x7408c80114b0 guid 110d7b4:17c5b8c5:94bd0ff4:1c1) -1711462110.426629 [0] gc: lease_free(l 0x7408c80114b0 guid 110d7b4:17c5b8c5:94bd0ff4:1c1) -1711462110.426636 [0] gc: lease_free(l 0x7408c800b500 guid 110d7b4:17c5b8c5:94bd0ff4:1c1) -1711462110.426654 [0] gc: ddsi_remove_deleted_participant_guid(110d7b4:17c5b8c5:94bd0ff4:1c1 for_what=3) -1711462110.426668 [0] gc: gc 0x7408c8015c30: deleting -1711462110.426675 [0] gc: gc 0x7408c80057c0: deleting -1711462110.555245 [0] python3: write_sample 110cd0d:e3b81b8d:1ccb65b1:403 #14: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,14,3,0,0,0,0,0,0 -1711462110.555300 [0] python3: => EVERYONE -1711462110.555337 [0] python3: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:1304) ... -1711462110.555346 [0] python3: => EVERYONE -1711462110.555467 [0] gc: gc 0x6443028ed6f0: deleting -1711462110.555506 [0] gc: gc_delete_reader(0x6443028ed6f0, 110cd0d:e3b81b8d:1ccb65b1:1304) -1711462110.555543 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:4c2 #11: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:1304}} -1711462110.555570 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:1304 @ 0x7408d40864b4) user 21 builtin 12 -1711462110.555583 [0] gc: gc 0x7408c80057c0: deleting -1711462110.555583 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:e3b81b8d:1ccb65b1:1203) ... -1711462110.555593 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:1203) state transition 0 -> 1 -1711462110.555599 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:1203) ... -1711462110.555605 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:1203) - no unack'ed samples -1711462110.555609 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:1203) ... -1711462110.555614 [0] python3: => EVERYONE -1711462110.555628 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:1203) state transition 1 -> 3 -1711462110.555643 [0] gc: gc 0x6443028ece30: deleting -1711462110.555653 [0] gc: gc_delete_writer(0x6443028ece30, 110cd0d:e3b81b8d:1ccb65b1:1203) -1711462110.555673 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:3c2 #11: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:1203}} -1711462110.555695 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:1203 @ 0x7408d40851d4) user 20 builtin 12 -1711462110.555704 [0] gc: gc 0x7408c80057c0: deleting -1711462110.555877 [0] python3: write_sample 110cd0d:e3b81b8d:1ccb65b1:403 #15: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,14,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.555923 [0] python3: => EVERYONE -1711462110.555950 [0] python3: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:1104) ... -1711462110.555958 [0] python3: => EVERYONE -1711462110.555994 [0] gc: gc 0x6443026b71b0: deleting -1711462110.556015 [0] gc: gc_delete_reader(0x6443026b71b0, 110cd0d:e3b81b8d:1ccb65b1:1104) -1711462110.556039 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:4c2 #12: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:1104}} -1711462110.556060 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:1104 @ 0x7408d4102744) user 19 builtin 12 -1711462110.556066 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:e3b81b8d:1ccb65b1:1003) ... -1711462110.556073 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:1003) state transition 0 -> 1 -1711462110.556077 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:1003) ... -1711462110.556082 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:1003) - no unack'ed samples -1711462110.556085 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:1003) ... -1711462110.556090 [0] python3: => EVERYONE -1711462110.556102 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:1003) state transition 1 -> 3 -1711462110.556175 [0] gc: gc 0x7408b8009e10: deleting -1711462110.556198 [0] gc: gc 0x6443028e6c00: deleting -1711462110.556206 [0] gc: gc_delete_writer(0x6443028e6c00, 110cd0d:e3b81b8d:1ccb65b1:1003) -1711462110.556234 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:3c2 #12: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:1003}} -1711462110.556256 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:1003 @ 0x7408d41010c4) user 18 builtin 12 -1711462110.556267 [0] gc: gc 0x7408c80057c0: deleting -1711462110.556317 [0] python3: write_sample 110cd0d:e3b81b8d:1ccb65b1:403 #16: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,12,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.556323 [0] python3: => EVERYONE -1711462110.556335 [0] python3: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:f04) ... -1711462110.556348 [0] python3: => EVERYONE -1711462110.556420 [0] gc: gc 0x6443026b6d50: deleting -1711462110.556440 [0] gc: gc_delete_reader(0x6443026b6d50, 110cd0d:e3b81b8d:1ccb65b1:f04) -1711462110.556463 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:4c2 #13: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:f04}} -1711462110.556484 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:f04 @ 0x7408d4069174) user 17 builtin 12 -1711462110.556487 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:e3b81b8d:1ccb65b1:e03) ... -1711462110.556515 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:e03) state transition 0 -> 1 -1711462110.556519 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:e03) ... -1711462110.556523 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:e03) - no unack'ed samples -1711462110.556527 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:e03) ... -1711462110.556531 [0] python3: => EVERYONE -1711462110.556535 [0] gc: gc 0x7408c80057c0: not yet, shortsleep -1711462110.556543 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:e03) state transition 1 -> 3 -1711462110.557648 [0] gc: gc 0x7408c80057c0: deleting -1711462110.557683 [0] gc: gc 0x6443028ee1e0: deleting -1711462110.557692 [0] gc: gc_delete_writer(0x6443028ee1e0, 110cd0d:e3b81b8d:1ccb65b1:e03) -1711462110.557721 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:3c2 #13: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:e03}} -1711462110.557740 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:e03 @ 0x7408d4067f54) user 16 builtin 12 -1711462110.557746 [0] gc: gc 0x7408c80057c0: deleting -1711462110.557926 [0] python3: write_sample 110cd0d:e3b81b8d:1ccb65b1:403 #17: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,10,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.557959 [0] python3: => EVERYONE -1711462110.557979 [0] python3: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:d04) ... -1711462110.557990 [0] python3: => EVERYONE -1711462110.558015 [0] gc: gc 0x6443028b92b0: deleting -1711462110.558022 [0] gc: gc_delete_reader(0x6443028b92b0, 110cd0d:e3b81b8d:1ccb65b1:d04) -1711462110.558031 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:4c2 #14: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:d04}} -1711462110.558041 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:d04 @ 0x7408d4063ba4) user 15 builtin 12 -1711462110.558047 [0] gc: gc 0x7408c80057c0: not yet, shortsleep -1711462110.558053 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:e3b81b8d:1ccb65b1:c03) ... -1711462110.558059 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:c03) state transition 0 -> 1 -1711462110.558064 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:c03) ... -1711462110.558069 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:c03) - no unack'ed samples -1711462110.558074 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:c03) ... -1711462110.558078 [0] python3: => EVERYONE -1711462110.558103 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:c03) state transition 1 -> 3 -1711462110.559121 [0] gc: gc 0x7408c80057c0: deleting -1711462110.559144 [0] gc: gc 0x6443028ae970: deleting -1711462110.559160 [0] gc: gc_delete_writer(0x6443028ae970, 110cd0d:e3b81b8d:1ccb65b1:c03) -1711462110.559172 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:3c2 #14: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:c03}} -1711462110.559183 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:c03 @ 0x7408d40627f4) user 14 builtin 12 -1711462110.559188 [0] gc: gc 0x7408c80057c0: deleting -1711462110.559267 [0] python3: write_sample 110cd0d:e3b81b8d:1ccb65b1:403 #18: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,8,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.559274 [0] python3: => EVERYONE -1711462110.559288 [0] python3: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:b04) ... -1711462110.559295 [0] python3: => EVERYONE -1711462110.559317 [0] gc: gc 0x6443028ae970: deleting -1711462110.559322 [0] gc: gc_delete_reader(0x6443028ae970, 110cd0d:e3b81b8d:1ccb65b1:b04) -1711462110.559330 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:4c2 #15: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:b04}} -1711462110.559338 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:b04 @ 0x7408d405ec44) user 13 builtin 12 -1711462110.559344 [0] gc: gc 0x7408c80057c0: deleting -1711462110.559347 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:e3b81b8d:1ccb65b1:a03) ... -1711462110.559353 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:a03) state transition 0 -> 1 -1711462110.559357 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:a03) ... -1711462110.559361 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:a03) - no unack'ed samples -1711462110.559365 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:a03) ... -1711462110.559369 [0] python3: => EVERYONE -1711462110.559382 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:a03) state transition 1 -> 3 -1711462110.559394 [0] gc: gc 0x6443028b92b0: deleting -1711462110.559400 [0] gc: gc_delete_writer(0x6443028b92b0, 110cd0d:e3b81b8d:1ccb65b1:a03) -1711462110.559410 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:3c2 #15: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:a03}} -1711462110.559419 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:a03 @ 0x7408d405d934) user 12 builtin 12 -1711462110.559424 [0] gc: gc 0x7408c80057c0: deleting -1711462110.559458 [0] python3: write_sample 110cd0d:e3b81b8d:1ccb65b1:403 #19: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,7,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.559464 [0] python3: => EVERYONE -1711462110.559479 [0] python3: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:904) ... -1711462110.559493 [0] python3: => EVERYONE -1711462110.559513 [0] gc: gc 0x6443028ee1e0: deleting -1711462110.559519 [0] gc: gc_delete_reader(0x6443028ee1e0, 110cd0d:e3b81b8d:1ccb65b1:904) -1711462110.559528 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:4c2 #16: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:904}} -1711462110.559538 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:904 @ 0x7408d409c394) user 11 builtin 12 -1711462110.559544 [0] gc: gc 0x7408c80057c0: deleting -1711462110.559548 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:e3b81b8d:1ccb65b1:803) ... -1711462110.559554 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:803) state transition 0 -> 1 -1711462110.559559 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:803) ... -1711462110.559563 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:803) - no unack'ed samples -1711462110.559568 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:803) ... -1711462110.559572 [0] python3: => EVERYONE -1711462110.559586 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:803) state transition 1 -> 3 -1711462110.559600 [0] gc: gc 0x6443026b6d50: deleting -1711462110.559607 [0] gc: gc_delete_writer(0x6443026b6d50, 110cd0d:e3b81b8d:1ccb65b1:803) -1711462110.559617 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:3c2 #16: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:803}} -1711462110.559627 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:803 @ 0x7408d4070934) user 10 builtin 12 -1711462110.559656 [0] gc: gc 0x7408c80057c0: deleting -1711462110.559710 [0] python3: write_sample 110cd0d:e3b81b8d:1ccb65b1:403 #20: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,22,4,0,0,0,0,0,0,0,0}}}},{}}}} -1711462110.559718 [0] python3: => EVERYONE -1711462110.559729 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:e3b81b8d:1ccb65b1:703) ... -1711462110.559737 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:703) state transition 0 -> 1 -1711462110.559745 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:703) ... -1711462110.559750 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:703) - no unack'ed samples -1711462110.559754 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:703) ... -1711462110.559758 [0] python3: => EVERYONE -1711462110.559773 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:703) state transition 1 -> 3 -1711462110.559787 [0] gc: gc 0x6443028e6c00: deleting -1711462110.559793 [0] gc: gc_delete_writer(0x6443028e6c00, 110cd0d:e3b81b8d:1ccb65b1:703) -1711462110.559803 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:3c2 #17: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:703}} -1711462110.559821 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:703 @ 0x7408d40310b4) user 9 builtin 12 -1711462110.559827 [0] gc: gc 0x7408c80057c0: deleting -1711462110.559869 [0] python3: write_sample 110cd0d:e3b81b8d:1ccb65b1:403 #21: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,22,4,0,0,0,0,0,0,0,0}}}},{}}}} -1711462110.559876 [0] python3: => EVERYONE -1711462110.559893 [0] python3: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:1404) ... -1711462110.559901 [0] python3: => EVERYONE -1711462110.559923 [0] gc: gc 0x6443028ece30: deleting -1711462110.559929 [0] gc: gc_delete_reader(0x6443028ece30, 110cd0d:e3b81b8d:1ccb65b1:1404) -1711462110.559937 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:4c2 #17: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:1404}} -1711462110.559947 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:1404 @ 0x7408d408eee4) user 8 builtin 12 -1711462110.559953 [0] gc: gc 0x7408c80057c0: not yet, shortsleep -1711462110.559987 [0] python3: write_sample 110cd0d:e3b81b8d:1ccb65b1:403 #22: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,22,4,0,0,0,0,0,0,0,0}}}},{}}}} -1711462110.559994 [0] python3: => EVERYONE -1711462110.560007 [0] python3: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:1504) ... -1711462110.560014 [0] python3: => EVERYONE -1711462110.561028 [0] gc: gc 0x7408c80057c0: deleting -1711462110.561051 [0] gc: gc 0x6443028ed6f0: deleting -1711462110.561056 [0] gc: gc_delete_reader(0x6443028ed6f0, 110cd0d:e3b81b8d:1ccb65b1:1504) -1711462110.561065 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:4c2 #18: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:1504}} -1711462110.561078 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:1504 @ 0x7408d4091214) user 7 builtin 12 -1711462110.561084 [0] gc: gc 0x7408c80057c0: deleting -1711462110.561135 [0] python3: write_sample 110cd0d:e3b81b8d:1ccb65b1:403 #23: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{},{}}}} -1711462110.561142 [0] python3: => EVERYONE -1711462110.561157 [0] python3: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:1604) ... -1711462110.561164 [0] python3: => EVERYONE -1711462110.561193 [0] gc: gc 0x6443028ed6f0: deleting -1711462110.561199 [0] gc: gc_delete_reader(0x6443028ed6f0, 110cd0d:e3b81b8d:1ccb65b1:1604) -1711462110.561208 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:4c2 #19: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:1604}} -1711462110.561218 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:1604 @ 0x7408d4093214) user 6 builtin 12 -1711462110.561225 [0] gc: gc 0x7408c80057c0: deleting -1711462110.561244 [0] python3: write_sample 110cd0d:e3b81b8d:1ccb65b1:403 #24: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,227,184,27,141,28,203,101,177,0,0,1,193,0,0,0,0,0,0,0,0}}},{}} -1711462110.561252 [0] python3: => EVERYONE -1711462110.561445 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:e3b81b8d:1ccb65b1:403) ... -1711462110.561452 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:403) state transition 0 -> 1 -1711462110.561458 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:403) ... -1711462110.561463 [0] python3: delete_writer(guid 110cd0d:e3b81b8d:1ccb65b1:403) - no unack'ed samples -1711462110.561468 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:403) ... -1711462110.561473 [0] python3: => EVERYONE -1711462110.561488 [0] python3: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:403) state transition 1 -> 3 -1711462110.561505 [0] gc: gc 0x6443028ece30: deleting -1711462110.561513 [0] gc: gc_delete_writer(0x6443028ece30, 110cd0d:e3b81b8d:1ccb65b1:403) -1711462110.561536 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:3c2 #18: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:403}} -1711462110.561569 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:403 @ 0x7408d4029104) user 5 builtin 12 -1711462110.561582 [0] python3: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:504) ... -1711462110.561590 [0] python3: => EVERYONE -1711462110.561612 [0] gc: gc 0x6443028e6c00: deleting -1711462110.561620 [0] gc: gc_delete_reader(0x6443028e6c00, 110cd0d:e3b81b8d:1ccb65b1:504) -1711462110.561634 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:4c2 #20: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:e3b81b8d:1ccb65b1:504}} -1711462110.561646 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:504 @ 0x7408d402c844) user 4 builtin 12 -1711462110.561665 [0] python3: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:207) ... -1711462110.561672 [0] python3: => EVERYONE -1711462110.561694 [0] gc: gc 0x6443026b6d50: deleting -1711462110.561701 [0] gc: gc_delete_reader(0x6443026b6d50, 110cd0d:e3b81b8d:1ccb65b1:207) -1711462110.561713 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:207 @ 0x7408d4021604) user 3 builtin 12 -1711462110.561728 [0] gc: gc 0x6443028ee1e0: not yet, shortsleep -1711462110.561743 [0] python3: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:307) ... -1711462110.561751 [0] python3: => EVERYONE -1711462110.562795 [0] gc: gc 0x6443028ee1e0: deleting -1711462110.562811 [0] gc: gc 0x6443028b92b0: deleting -1711462110.562819 [0] gc: gc 0x6443028ae970: deleting -1711462110.562825 [0] gc: gc_delete_reader(0x6443028ae970, 110cd0d:e3b81b8d:1ccb65b1:307) -1711462110.562845 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:307 @ 0x7408d4023224) user 2 builtin 12 -1711462110.562852 [0] gc: gc 0x7408c80057c0: deleting -1711462110.562891 [0] gc: gc 0x6443028ae970: deleting -1711462110.562909 [0] python3: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:107) ... -1711462110.562958 [0] python3: => EVERYONE -1711462110.562993 [0] gc: gc 0x6443028b92b0: deleting -1711462110.563002 [0] gc: gc_delete_reader(0x6443028b92b0, 110cd0d:e3b81b8d:1ccb65b1:107) -1711462110.563015 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:107 @ 0x7408d40202a4) user 1 builtin 12 -1711462110.563043 [0] python3: ddsi_delete_participant (110cd0d:e3b81b8d:1ccb65b1:1c1) -1711462110.563058 [0] python3: => EVERYONE -1711462110.563045 [0] gc: gc 0x7408b8013060: deleting -1711462110.563085 [0] gc: gc 0x7408d40241d0: deleting -1711462110.563091 [0] gc: gc_delete_participant (0x7408d40241d0, 110cd0d:e3b81b8d:1ccb65b1:1c1) -1711462110.563100 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 0:0:0:0 @ (nil)) user 0 builtin 12 -1711462110.563122 [0] gc: write_sample 110cd0d:e3b81b8d:1ccb65b1:100c2 #2: ST3 DCPSParticipant/ParticipantBuiltinTopicData:{participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1}} -1711462110.563138 [0] gc: non-timed queue now has 1 items -1711462110.563148 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:100c2) ... -1711462110.563154 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:100c2) ... -1711462110.563165 [0] gc: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:100c2) state transition 0 -> 3 -1711462110.563167 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c4011b70 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.563173 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:3c2) ... -1711462110.563235 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:3c2) ... -1711462110.563243 [0] gc: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:3c2) state transition 0 -> 3 -1711462110.563257 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:4c2) ... -1711462110.563262 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:4c2) ... -1711462110.563270 [0] gc: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:4c2) state transition 0 -> 3 -1711462110.563276 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:200c2) ... -1711462110.563282 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:200c2) ... -1711462110.563289 [0] gc: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:200c2) state transition 0 -> 3 -1711462110.563296 [0] gc: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:100c7) ... -1711462110.563305 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:2c2) - unknown guid -1711462110.563311 [0] gc: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:2c7) - unknown guid -1711462110.563317 [0] gc: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:3c7) ... -1711462110.563324 [0] gc: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:4c7) ... -1711462110.563331 [0] gc: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:200c7) ... -1711462110.563340 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:300c3) ... -1711462110.563345 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:300c3) ... -1711462110.563353 [0] gc: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:300c3) state transition 0 -> 3 -1711462110.563359 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:301c3) ... -1711462110.563365 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:301c3) ... -1711462110.563373 [0] gc: writer_set_state(110cd0d:e3b81b8d:1ccb65b1:301c3) state transition 0 -> 3 -1711462110.563379 [0] gc: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:300c4) ... -1711462110.563388 [0] gc: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:301c4) ... -1711462110.563390 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 96 from udp/10.101.12.71:50807 -1711462110.563409 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:ff0003c2) - unknown guid -1711462110.563457 [0] gc: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:ff0003c7) - unknown guid -1711462110.563464 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:ff0004c2) - unknown guid -1711462110.563475 [0] gc: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:ff0004c7) - unknown guid -1711462110.563481 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:ff0200c2) - unknown guid -1711462110.563443 [0] recv: INFOTS(1711462110.563113561) -1711462110.563487 [0] gc: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:ff0200c7) - unknown guid -1711462110.563497 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:201c3) - unknown guid -1711462110.563503 [0] gc: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:201c4) - unknown guid -1711462110.563509 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:ff0101c2) - unknown guid -1711462110.563516 [0] gc: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:ff0101c7) - unknown guid -1711462110.563522 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:e3b81b8d:1ccb65b1:ff0202c3) - unknown guid -1711462110.563531 [0] gc: delete_reader_guid(guid 110cd0d:e3b81b8d:1ccb65b1:ff0202c4) - unknown guid -1711462110.563523 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 0:0:0:0 #2) -1711462110.563539 [0] gc: gc 0x7408c80057c0: not yet, shortsleep -1711462110.563567 [0] recv: HDR(110cd0d:e3b81b8d:1ccb65b1 vendor 1.16) len 96 from udp/10.101.12.71:50807 -1711462110.563593 [0] recv: INFOTS(1711462110.563113561) -1711462110.563602 [0] recv: DATA(110cd0d:e3b81b8d:1ccb65b1:100c2 -> 0:0:0:0 #2) -1711462110.563627 [0] python3: write_sample 110cd0d:79d6eeac:ea4a8907:403 #14: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16 -1711462110.563681 [0] python3: => EVERYONE -1711462110.563685 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1}} -1711462110.563763 [0] dq.builtin: SPDP ST3 110cd0d:e3b81b8d:1ccb65b1:1c1 unknown not allowed -1711462110.563711 [0] python3: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:1304) ... -1711462110.563800 [0] python3: => EVERYONE -1711462110.563783 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110cd0d:e3b81b8d:1ccb65b1:1c1}} -1711462110.563830 [0] dq.builtin: SPDP ST3 110cd0d:e3b81b8d:1ccb65b1:1c1 unknown not allowed -1711462110.565040 [0] tev: nn_xpack_send 96: 0x7408c000139c:20 0x7408c4011c68:48 0x7408c80938f4:28 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.0.(trunc) -1711462110.565066 [0] tev: traffic-xmit (101) 96 -1711462110.565700 [0] gc: gc 0x7408c80057c0: deleting -1711462110.565726 [0] gc: gc_delete_writer(0x7408c80057c0, 110cd0d:e3b81b8d:1ccb65b1:100c2) -1711462110.565746 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:100c2 @ 0x7408d401a274) user 0 builtin 11 -1711462110.565754 [0] gc: gc 0x7408c8015c30: deleting -1711462110.565760 [0] gc: gc_delete_writer(0x7408c8015c30, 110cd0d:e3b81b8d:1ccb65b1:3c2) -1711462110.565772 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:3c2 @ 0x7408d401b2e4) user 0 builtin 10 -1711462110.565777 [0] gc: gc 0x7408c800ad10: deleting -1711462110.565783 [0] gc: gc_delete_writer(0x7408c800ad10, 110cd0d:e3b81b8d:1ccb65b1:4c2) -1711462110.565794 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:4c2 @ 0x7408d401aaa4) user 0 builtin 9 -1711462110.565800 [0] gc: gc 0x7408c80064a0: deleting -1711462110.565805 [0] gc: gc_delete_writer(0x7408c80064a0, 110cd0d:e3b81b8d:1ccb65b1:200c2) -1711462110.565817 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:200c2 @ 0x7408d401bb84) user 0 builtin 8 -1711462110.565822 [0] gc: gc 0x7408d4101f70: deleting -1711462110.565828 [0] gc: gc_delete_reader(0x7408d4101f70, 110cd0d:e3b81b8d:1ccb65b1:100c7) -1711462110.565835 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:100c7 @ 0x7408d401d284) user 0 builtin 7 -1711462110.565840 [0] gc: gc 0x7408d4101690: deleting -1711462110.565846 [0] gc: gc_delete_reader(0x7408d4101690, 110cd0d:e3b81b8d:1ccb65b1:3c7) -1711462110.565852 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:3c7 @ 0x7408d401d964) user 0 builtin 6 -1711462110.565857 [0] gc: gc 0x7408d4017ad0: deleting -1711462110.565862 [0] gc: gc_delete_reader(0x7408d4017ad0, 110cd0d:e3b81b8d:1ccb65b1:4c7) -1711462110.565868 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:4c7 @ 0x7408d401d5e4) user 0 builtin 5 -1711462110.565874 [0] gc: gc 0x7408d0001690: deleting -1711462110.565879 [0] gc: gc_delete_reader(0x7408d0001690, 110cd0d:e3b81b8d:1ccb65b1:200c7) -1711462110.565885 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:200c7 @ 0x7408d401dce4) user 0 builtin 4 -1711462110.565892 [0] gc: gc 0x7408d00018c0: deleting -1711462110.565897 [0] gc: gc_delete_writer(0x7408d00018c0, 110cd0d:e3b81b8d:1ccb65b1:300c3) -1711462110.565907 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:300c3 @ 0x7408d401c434) user 0 builtin 3 -1711462110.565913 [0] gc: gc 0x7408d0001af0: deleting -1711462110.565918 [0] gc: gc_delete_writer(0x7408d0001af0, 110cd0d:e3b81b8d:1ccb65b1:301c3) -1711462110.565928 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:301c3 @ 0x7408d401ccd4) user 0 builtin 2 -1711462110.565933 [0] gc: gc 0x7408d0001d20: deleting -1711462110.565938 [0] gc: gc_delete_reader(0x7408d0001d20, 110cd0d:e3b81b8d:1ccb65b1:300c4) -1711462110.565945 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:300c4 @ 0x7408d401e054) user 0 builtin 1 -1711462110.565950 [0] gc: gc 0x7408d0001f50: deleting -1711462110.565955 [0] gc: gc_delete_reader(0x7408d0001f50, 110cd0d:e3b81b8d:1ccb65b1:301c4) -1711462110.565962 [0] gc: ddsi_unref_participant(110cd0d:e3b81b8d:1ccb65b1:1c1 @ 0x7408d4017230 <- 110cd0d:e3b81b8d:1ccb65b1:301c4 @ 0x7408d401e3d4) user 0 builtin 0 -1711462110.565972 [0] gc: ddsi_remove_deleted_participant_guid(110cd0d:e3b81b8d:1ccb65b1:1c1 for_what=1) -1711462110.565979 [0] gc: gc 0x7408d401ec10: deleting -1711462110.565984 [0] gc: gc_delete_reader(0x7408d401ec10, 110cd0d:79d6eeac:ea4a8907:1304) -1711462110.566003 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:4c2 #11: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:1304}} -1711462110.566020 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:1304 @ 0x7408e00383b4) user 21 builtin 12 -1711462110.566026 [0] gc: gc 0x7408d4017ad0: deleting -1711462110.566031 [0] gc: gc 0x7408d401ec10: deleting -1711462110.566078 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:79d6eeac:ea4a8907:1203) ... -1711462110.566112 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:1203) state transition 0 -> 1 -1711462110.566119 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:1203) ... -1711462110.566125 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:1203) - no unack'ed samples -1711462110.566131 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:1203) ... -1711462110.566140 [0] python3: => EVERYONE -1711462110.566161 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:1203) state transition 1 -> 3 -1711462110.566178 [0] gc: gc 0x7408d401f760: deleting -1711462110.566186 [0] gc: gc_delete_writer(0x7408d401f760, 110cd0d:79d6eeac:ea4a8907:1203) -1711462110.566199 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:3c2 #11: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:1203}} -1711462110.566215 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:1203 @ 0x7408e0037304) user 20 builtin 12 -1711462110.566255 [0] gc: gc 0x7408b8066520: deleting -1711462110.566351 [0] python3: write_sample 110cd0d:79d6eeac:ea4a8907:403 #15: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,14,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.566365 [0] python3: => EVERYONE -1711462110.566381 [0] python3: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:1104) ... -1711462110.566390 [0] python3: => EVERYONE -1711462110.566416 [0] gc: gc 0x6443028ee1e0: deleting -1711462110.566423 [0] gc: gc_delete_reader(0x6443028ee1e0, 110cd0d:79d6eeac:ea4a8907:1104) -1711462110.566433 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:4c2 #12: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:1104}} -1711462110.566446 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:1104 @ 0x7408e0033f84) user 19 builtin 12 -1711462110.566453 [0] gc: gc 0x7408d4017ad0: deleting -1711462110.566461 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:79d6eeac:ea4a8907:1003) ... -1711462110.566469 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:1003) state transition 0 -> 1 -1711462110.566474 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:1003) ... -1711462110.566479 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:1003) - no unack'ed samples -1711462110.566484 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:1003) ... -1711462110.566507 [0] python3: => EVERYONE -1711462110.566520 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:1003) state transition 1 -> 3 -1711462110.566537 [0] gc: gc 0x6443026b6d50: deleting -1711462110.566544 [0] gc: gc_delete_writer(0x6443026b6d50, 110cd0d:79d6eeac:ea4a8907:1003) -1711462110.566556 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:3c2 #12: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:1003}} -1711462110.566569 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:1003 @ 0x7408e00330e4) user 18 builtin 12 -1711462110.566577 [0] gc: gc 0x7408d4017ad0: deleting -1711462110.566647 [0] python3: write_sample 110cd0d:79d6eeac:ea4a8907:403 #16: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,12,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.566656 [0] python3: => EVERYONE -1711462110.566671 [0] python3: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:f04) ... -1711462110.566679 [0] python3: => EVERYONE -1711462110.566700 [0] gc: gc 0x6443028e6c00: deleting -1711462110.566706 [0] gc: gc_delete_reader(0x6443028e6c00, 110cd0d:79d6eeac:ea4a8907:f04) -1711462110.566715 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:4c2 #13: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:f04}} -1711462110.566725 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:f04 @ 0x7408e0023eb4) user 17 builtin 12 -1711462110.566735 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:79d6eeac:ea4a8907:e03) ... -1711462110.566742 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:e03) state transition 0 -> 1 -1711462110.566747 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:e03) ... -1711462110.566751 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:e03) - no unack'ed samples -1711462110.566756 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:e03) ... -1711462110.566761 [0] python3: => EVERYONE -1711462110.566771 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:e03) state transition 1 -> 3 -1711462110.566773 [0] gc: gc 0x7408b800bcd0: not yet, shortsleep -1711462110.567858 [0] gc: gc 0x7408b800bcd0: deleting -1711462110.567877 [0] gc: gc 0x6443028ece30: deleting -1711462110.567882 [0] gc: gc_delete_writer(0x6443028ece30, 110cd0d:79d6eeac:ea4a8907:e03) -1711462110.567892 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:3c2 #13: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:e03}} -1711462110.567904 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:e03 @ 0x7408e002d4d4) user 16 builtin 12 -1711462110.567910 [0] gc: gc 0x7408d4017ad0: deleting -1711462110.567992 [0] python3: write_sample 110cd0d:79d6eeac:ea4a8907:403 #17: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,10,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.568003 [0] python3: => EVERYONE -1711462110.568013 [0] python3: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:d04) ... -1711462110.568021 [0] python3: => EVERYONE -1711462110.568039 [0] gc: gc 0x6443028ed6f0: deleting -1711462110.568045 [0] gc: gc_delete_reader(0x6443028ed6f0, 110cd0d:79d6eeac:ea4a8907:d04) -1711462110.568053 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:4c2 #14: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:d04}} -1711462110.568063 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:d04 @ 0x7408e00234f4) user 15 builtin 12 -1711462110.568072 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:79d6eeac:ea4a8907:c03) ... -1711462110.568078 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:c03) state transition 0 -> 1 -1711462110.568083 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:c03) ... -1711462110.568087 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:c03) - no unack'ed samples -1711462110.568091 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:c03) ... -1711462110.568096 [0] python3: => EVERYONE -1711462110.568106 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:c03) state transition 1 -> 3 -1711462110.568125 [0] gc: gc 0x6443028ed6f0: deleting -1711462110.568132 [0] gc: gc_delete_writer(0x6443028ed6f0, 110cd0d:79d6eeac:ea4a8907:c03) -1711462110.568142 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:3c2 #14: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:c03}} -1711462110.568152 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:c03 @ 0x7408e0028fd4) user 14 builtin 12 -1711462110.568169 [0] gc: gc 0x7408a8009f20: deleting -1711462110.568194 [0] gc: gc 0x7408a8005ae0: not yet, shortsleep -1711462110.568216 [0] python3: write_sample 110cd0d:79d6eeac:ea4a8907:403 #18: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,8,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.568223 [0] python3: => EVERYONE -1711462110.568233 [0] python3: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:b04) ... -1711462110.568240 [0] python3: => EVERYONE -1711462110.569255 [0] gc: gc 0x7408a8005ae0: deleting -1711462110.569266 [0] gc: gc 0x6443028ece30: deleting -1711462110.569271 [0] gc: gc_delete_reader(0x6443028ece30, 110cd0d:79d6eeac:ea4a8907:b04) -1711462110.569279 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:4c2 #15: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:b04}} -1711462110.569289 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:b04 @ 0x7408e00228c4) user 13 builtin 12 -1711462110.569294 [0] gc: gc 0x7408d4017ad0: deleting -1711462110.569321 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:79d6eeac:ea4a8907:a03) ... -1711462110.569333 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:a03) state transition 0 -> 1 -1711462110.569337 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:a03) ... -1711462110.569341 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:a03) - no unack'ed samples -1711462110.569345 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:a03) ... -1711462110.569349 [0] python3: => EVERYONE -1711462110.569361 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:a03) state transition 1 -> 3 -1711462110.569374 [0] gc: gc 0x6443028e6c00: deleting -1711462110.569380 [0] gc: gc_delete_writer(0x6443028e6c00, 110cd0d:79d6eeac:ea4a8907:a03) -1711462110.569390 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:3c2 #15: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:a03}} -1711462110.569400 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:a03 @ 0x7408e0026a64) user 12 builtin 12 -1711462110.569405 [0] gc: gc 0x7408d4017ad0: deleting -1711462110.569439 [0] python3: write_sample 110cd0d:79d6eeac:ea4a8907:403 #19: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,7,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.569445 [0] python3: => EVERYONE -1711462110.569454 [0] python3: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:904) ... -1711462110.569460 [0] python3: => EVERYONE -1711462110.569539 [0] gc: gc 0x6443026b6d50: deleting -1711462110.569570 [0] gc: gc_delete_reader(0x6443026b6d50, 110cd0d:79d6eeac:ea4a8907:904) -1711462110.569603 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:4c2 #16: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:904}} -1711462110.569632 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:904 @ 0x7408e001fb84) user 11 builtin 12 -1711462110.569634 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:79d6eeac:ea4a8907:803) ... -1711462110.569654 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:803) state transition 0 -> 1 -1711462110.569645 [0] gc: gc 0x7408d4017ad0: not yet, shortsleep -1711462110.569658 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:803) ... -1711462110.569673 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:803) - no unack'ed samples -1711462110.569679 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:803) ... -1711462110.569683 [0] python3: => EVERYONE -1711462110.569692 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:803) state transition 1 -> 3 -1711462110.570760 [0] gc: gc 0x7408d4017ad0: deleting -1711462110.570777 [0] gc: gc 0x6443028ee1e0: deleting -1711462110.570784 [0] gc: gc_delete_writer(0x6443028ee1e0, 110cd0d:79d6eeac:ea4a8907:803) -1711462110.570806 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:3c2 #16: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:803}} -1711462110.570829 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:803 @ 0x7408e0023674) user 10 builtin 12 -1711462110.570839 [0] gc: gc 0x7408d4017ad0: deleting -1711462110.570896 [0] python3: write_sample 110cd0d:79d6eeac:ea4a8907:403 #20: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,22,4,0,0,0,0,0,0,0,0}}}},{}}}} -1711462110.570906 [0] python3: => EVERYONE -1711462110.570913 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:79d6eeac:ea4a8907:703) ... -1711462110.570920 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:703) state transition 0 -> 1 -1711462110.570926 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:703) ... -1711462110.570931 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:703) - no unack'ed samples -1711462110.570935 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:703) ... -1711462110.570939 [0] python3: => EVERYONE -1711462110.570951 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:703) state transition 1 -> 3 -1711462110.571030 [0] gc: gc 0x6443028b92b0: deleting -1711462110.571051 [0] gc: gc_delete_writer(0x6443028b92b0, 110cd0d:79d6eeac:ea4a8907:703) -1711462110.571077 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:3c2 #17: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:703}} -1711462110.571102 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:703 @ 0x7408e00213b4) user 9 builtin 12 -1711462110.571114 [0] gc: gc 0x7408d4017ad0: deleting -1711462110.571141 [0] python3: write_sample 110cd0d:79d6eeac:ea4a8907:403 #21: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,22,4,0,0,0,0,0,0,0,0}}}},{}}}} -1711462110.571147 [0] python3: => EVERYONE -1711462110.571156 [0] python3: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:1404) ... -1711462110.571163 [0] python3: => EVERYONE -1711462110.571223 [0] gc: gc 0x6443028ae970: deleting -1711462110.571243 [0] gc: gc_delete_reader(0x6443028ae970, 110cd0d:79d6eeac:ea4a8907:1404) -1711462110.571265 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:4c2 #17: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:1404}} -1711462110.571286 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:1404 @ 0x7408e002bef4) user 8 builtin 12 -1711462110.571298 [0] gc: gc 0x7408d4017ad0: deleting -1711462110.571316 [0] python3: write_sample 110cd0d:79d6eeac:ea4a8907:403 #22: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,22,4,0,0,0,0,0,0,0,0}}}},{}}}} -1711462110.571321 [0] python3: => EVERYONE -1711462110.571330 [0] python3: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:1504) ... -1711462110.571336 [0] python3: => EVERYONE -1711462110.571403 [0] gc: gc 0x6443028ae970: deleting -1711462110.571424 [0] gc: gc_delete_reader(0x6443028ae970, 110cd0d:79d6eeac:ea4a8907:1504) -1711462110.571445 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:4c2 #18: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:1504}} -1711462110.571466 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:1504 @ 0x7408e003c5e4) user 7 builtin 12 -1711462110.571478 [0] gc: gc 0x7408d4017ad0: not yet, shortsleep -1711462110.571485 [0] python3: write_sample 110cd0d:79d6eeac:ea4a8907:403 #23: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{},{}}}} -1711462110.571491 [0] python3: => EVERYONE -1711462110.571499 [0] python3: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:1604) ... -1711462110.571511 [0] python3: => EVERYONE -1711462110.572635 [0] gc: gc 0x7408d4017ad0: deleting -1711462110.572660 [0] gc: gc 0x6443028b92b0: deleting -1711462110.572669 [0] gc: gc_delete_reader(0x6443028b92b0, 110cd0d:79d6eeac:ea4a8907:1604) -1711462110.572689 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:4c2 #19: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:1604}} -1711462110.572710 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:1604 @ 0x7408e003e774) user 6 builtin 12 -1711462110.572721 [0] gc: gc 0x7408d4017ad0: not yet, shortsleep -1711462110.572723 [0] python3: write_sample 110cd0d:79d6eeac:ea4a8907:403 #24: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,121,214,238,172,234,74,137,7,0,0,1,193,0,0,0,0,0,0,0,0}}},{}} -1711462110.572738 [0] python3: => EVERYONE -1711462110.572892 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:79d6eeac:ea4a8907:403) ... -1711462110.572898 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:403) state transition 0 -> 1 -1711462110.572901 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:403) ... -1711462110.572905 [0] python3: delete_writer(guid 110cd0d:79d6eeac:ea4a8907:403) - no unack'ed samples -1711462110.572909 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:403) ... -1711462110.572913 [0] python3: => EVERYONE -1711462110.572922 [0] python3: writer_set_state(110cd0d:79d6eeac:ea4a8907:403) state transition 1 -> 3 -1711462110.573841 [0] gc: gc 0x7408d4017ad0: deleting -1711462110.573867 [0] gc: gc 0x6443028ee1e0: deleting -1711462110.573876 [0] gc: gc_delete_writer(0x6443028ee1e0, 110cd0d:79d6eeac:ea4a8907:403) -1711462110.573910 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:3c2 #18: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:403}} -1711462110.573939 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:403 @ 0x7408e00190b4) user 5 builtin 12 -1711462110.573977 [0] python3: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:504) ... -1711462110.573983 [0] python3: => EVERYONE -1711462110.574047 [0] gc: gc 0x6443026b6d50: deleting -1711462110.574068 [0] gc: gc_delete_reader(0x6443026b6d50, 110cd0d:79d6eeac:ea4a8907:504) -1711462110.574092 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:4c2 #20: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:79d6eeac:ea4a8907:504}} -1711462110.574113 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:504 @ 0x7408e001abd4) user 4 builtin 12 -1711462110.574122 [0] python3: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:307) ... -1711462110.574127 [0] python3: => EVERYONE -1711462110.574154 [0] gc: gc 0x7408e0015030: deleting -1711462110.574164 [0] gc: gc_delete_reader(0x7408e0015030, 110cd0d:79d6eeac:ea4a8907:307) -1711462110.574180 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:307 @ 0x7408e0012054) user 3 builtin 12 -1711462110.574189 [0] gc: gc 0x6443028e6c00: deleting -1711462110.574190 [0] python3: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:107) ... -1711462110.574204 [0] python3: => EVERYONE -1711462110.574296 [0] gc: gc 0x6443028ece30: deleting -1711462110.574317 [0] gc: gc_delete_reader(0x6443028ece30, 110cd0d:79d6eeac:ea4a8907:107) -1711462110.574339 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:107 @ 0x7408e000b794) user 2 builtin 12 -1711462110.574342 [0] python3: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:207) ... -1711462110.574356 [0] python3: => EVERYONE -1711462110.574373 [0] gc: gc 0x6443028ed6f0: deleting -1711462110.574396 [0] gc: gc_delete_reader(0x6443028ed6f0, 110cd0d:79d6eeac:ea4a8907:207) -1711462110.574412 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:207 @ 0x7408e000d524) user 1 builtin 12 -1711462110.574426 [0] gc: gc 0x6443028ed6f0: not yet, shortsleep -1711462110.574429 [0] python3: ddsi_delete_participant (110cd0d:79d6eeac:ea4a8907:1c1) -1711462110.574443 [0] python3: => EVERYONE -1711462110.575526 [0] gc: gc 0x6443028ed6f0: deleting -1711462110.575542 [0] gc: gc 0x6443028ece30: deleting -1711462110.575549 [0] gc: gc 0x6443028e6c00: deleting -1711462110.575555 [0] gc: gc 0x7408d4017ad0: deleting -1711462110.575563 [0] gc: gc 0x7408e000ac50: deleting -1711462110.575569 [0] gc: gc_delete_participant (0x7408e000ac50, 110cd0d:79d6eeac:ea4a8907:1c1) -1711462110.575576 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 0:0:0:0 @ (nil)) user 0 builtin 12 -1711462110.575597 [0] gc: write_sample 110cd0d:79d6eeac:ea4a8907:100c2 #2: ST3 DCPSParticipant/ParticipantBuiltinTopicData:{participant_guid={110cd0d:79d6eeac:ea4a8907:1c1}} -1711462110.575614 [0] gc: non-timed queue now has 1 items -1711462110.575623 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:100c2) ... -1711462110.575630 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:100c2) ... -1711462110.575641 [0] gc: writer_set_state(110cd0d:79d6eeac:ea4a8907:100c2) state transition 0 -> 3 -1711462110.575650 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:3c2) ... -1711462110.575657 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:3c2) ... -1711462110.575631 [0] tev: xpack_addmsg 0x7408c0001390 0x7408c400f8f0 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.575666 [0] gc: writer_set_state(110cd0d:79d6eeac:ea4a8907:3c2) state transition 0 -> 3 -1711462110.575696 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:4c2) ... -1711462110.575705 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:4c2) ... -1711462110.575715 [0] gc: writer_set_state(110cd0d:79d6eeac:ea4a8907:4c2) state transition 0 -> 3 -1711462110.575722 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:200c2) ... -1711462110.575728 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:200c2) ... -1711462110.575736 [0] gc: writer_set_state(110cd0d:79d6eeac:ea4a8907:200c2) state transition 0 -> 3 -1711462110.575743 [0] gc: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:100c7) ... -1711462110.575753 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:2c2) - unknown guid -1711462110.575760 [0] gc: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:2c7) - unknown guid -1711462110.575765 [0] gc: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:3c7) ... -1711462110.575764 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 96 from udp/10.101.12.71:50807 -1711462110.575776 [0] gc: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:4c7) ... -1711462110.575802 [0] recv: INFOTS(1711462110.575588337) -1711462110.575815 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 0:0:0:0 #2) -1711462110.575819 [0] gc: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:200c7) ... -1711462110.575835 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:300c3) ... -1711462110.575842 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:300c3) ... -1711462110.575826 [0] recv: HDR(110cd0d:79d6eeac:ea4a8907 vendor 1.16) len 96 from udp/10.101.12.71:50807 -1711462110.575859 [0] recv: INFOTS(1711462110.575588337) -1711462110.575866 [0] recv: DATA(110cd0d:79d6eeac:ea4a8907:100c2 -> 0:0:0:0 #2) -1711462110.575851 [0] gc: writer_set_state(110cd0d:79d6eeac:ea4a8907:300c3) state transition 0 -> 3 -1711462110.575875 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110cd0d:79d6eeac:ea4a8907:1c1}} -1711462110.575895 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:301c3) ... -1711462110.575928 [0] dq.builtin: SPDP ST3 110cd0d:79d6eeac:ea4a8907:1c1 unknown not allowed -1711462110.575930 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:301c3) ... -1711462110.575940 [0] dq.builtin: data(builtin, vendor 1.16): 0:0:0:0 #2: ST3 /ParticipantBuiltinTopicData:{participant_guid={110cd0d:79d6eeac:ea4a8907:1c1}} -1711462110.575960 [0] dq.builtin: SPDP ST3 110cd0d:79d6eeac:ea4a8907:1c1 unknown not allowed -1711462110.575952 [0] gc: writer_set_state(110cd0d:79d6eeac:ea4a8907:301c3) state transition 0 -> 3 -1711462110.575975 [0] gc: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:300c4) ... -1711462110.575984 [0] gc: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:301c4) ... -1711462110.575993 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:ff0003c2) - unknown guid -1711462110.575999 [0] gc: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:ff0003c7) - unknown guid -1711462110.576005 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:ff0004c2) - unknown guid -1711462110.576010 [0] gc: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:ff0004c7) - unknown guid -1711462110.576016 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:ff0200c2) - unknown guid -1711462110.576022 [0] gc: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:ff0200c7) - unknown guid -1711462110.576027 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:201c3) - unknown guid -1711462110.576033 [0] gc: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:201c4) - unknown guid -1711462110.576039 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:ff0101c2) - unknown guid -1711462110.576045 [0] gc: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:ff0101c7) - unknown guid -1711462110.576050 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:79d6eeac:ea4a8907:ff0202c3) - unknown guid -1711462110.576056 [0] gc: delete_reader_guid(guid 110cd0d:79d6eeac:ea4a8907:ff0202c4) - unknown guid -1711462110.576062 [0] gc: gc 0x6443028ed6f0: not yet, shortsleep -1711462110.576772 [0] tev: nn_xpack_send 96: 0x7408c000139c:20 0x7408c400f9e8:48 0x7408c8058b84:28 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.0.(trunc) -1711462110.576810 [0] tev: traffic-xmit (101) 96 -1711462110.577149 [0] gc: gc 0x6443028ed6f0: deleting -1711462110.577186 [0] gc: gc_delete_writer(0x6443028ed6f0, 110cd0d:79d6eeac:ea4a8907:100c2) -1711462110.577201 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:100c2 @ 0x7408e0005b94) user 0 builtin 11 -1711462110.577208 [0] gc: gc 0x7408d4101690: deleting -1711462110.577214 [0] gc: gc_delete_writer(0x7408d4101690, 110cd0d:79d6eeac:ea4a8907:3c2) -1711462110.577229 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:3c2 @ 0x7408e00068b4) user 0 builtin 10 -1711462110.577236 [0] gc: gc 0x7408d4101f70: deleting -1711462110.577241 [0] gc: gc_delete_writer(0x7408d4101f70, 110cd0d:79d6eeac:ea4a8907:4c2) -1711462110.577257 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:4c2 @ 0x7408e0006154) user 0 builtin 9 -1711462110.577263 [0] gc: gc 0x7408c80064a0: deleting -1711462110.577269 [0] gc: gc_delete_writer(0x7408c80064a0, 110cd0d:79d6eeac:ea4a8907:200c2) -1711462110.577284 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:200c2 @ 0x7408e0007104) user 0 builtin 8 -1711462110.577292 [0] gc: gc 0x7408c800ad10: deleting -1711462110.577297 [0] gc: gc_delete_reader(0x7408c800ad10, 110cd0d:79d6eeac:ea4a8907:100c7) -1711462110.577305 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:100c7 @ 0x7408e0008804) user 0 builtin 7 -1711462110.577311 [0] gc: gc 0x7408c8015c30: deleting -1711462110.577317 [0] gc: gc_delete_reader(0x7408c8015c30, 110cd0d:79d6eeac:ea4a8907:3c7) -1711462110.577324 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:3c7 @ 0x7408e0008ee4) user 0 builtin 6 -1711462110.577330 [0] gc: gc 0x7408c80057c0: deleting -1711462110.577336 [0] gc: gc_delete_reader(0x7408c80057c0, 110cd0d:79d6eeac:ea4a8907:4c7) -1711462110.577343 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:4c7 @ 0x7408e0008b64) user 0 builtin 5 -1711462110.577349 [0] gc: gc 0x7408d0001640: deleting -1711462110.577355 [0] gc: gc_delete_reader(0x7408d0001640, 110cd0d:79d6eeac:ea4a8907:200c7) -1711462110.577362 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:200c7 @ 0x7408e0009264) user 0 builtin 4 -1711462110.577368 [0] gc: gc 0x7408d0001870: deleting -1711462110.577373 [0] gc: gc_delete_writer(0x7408d0001870, 110cd0d:79d6eeac:ea4a8907:300c3) -1711462110.577384 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:300c3 @ 0x7408e00079b4) user 0 builtin 3 -1711462110.577391 [0] gc: gc 0x7408d0001aa0: deleting -1711462110.577397 [0] gc: gc_delete_writer(0x7408d0001aa0, 110cd0d:79d6eeac:ea4a8907:301c3) -1711462110.577409 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:301c3 @ 0x7408e0008254) user 0 builtin 2 -1711462110.577416 [0] gc: gc 0x7408d0001cd0: deleting -1711462110.577422 [0] gc: gc_delete_reader(0x7408d0001cd0, 110cd0d:79d6eeac:ea4a8907:300c4) -1711462110.577429 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:300c4 @ 0x7408e00095d4) user 0 builtin 1 -1711462110.577442 [0] gc: gc 0x7408d0001f00: deleting -1711462110.577448 [0] gc: gc_delete_reader(0x7408d0001f00, 110cd0d:79d6eeac:ea4a8907:301c4) -1711462110.577455 [0] gc: ddsi_unref_participant(110cd0d:79d6eeac:ea4a8907:1c1 @ 0x7408e0001f40 <- 110cd0d:79d6eeac:ea4a8907:301c4 @ 0x7408e0009954) user 0 builtin 0 -1711462110.577466 [0] gc: ddsi_remove_deleted_participant_guid(110cd0d:79d6eeac:ea4a8907:1c1 for_what=1) -1711462110.577473 [0] gc: gc 0x7408c80057c0: deleting -1711462110.596752 [0] python3: write_sample 110cd0d:56a27910:57318171:403 #14: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,17,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,14,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162 -1711462110.596805 [0] python3: => EVERYONE -1711462110.596823 [0] python3: delete_reader_guid(guid 110cd0d:56a27910:57318171:1304) ... -1711462110.596830 [0] python3: => EVERYONE -1711462110.597004 [0] gc: gc 0x6443028ae2e0: deleting -1711462110.597034 [0] gc: gc_delete_reader(0x6443028ae2e0, 110cd0d:56a27910:57318171:1304) -1711462110.597066 [0] gc: write_sample 110cd0d:56a27910:57318171:4c2 #11: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:1304}} -1711462110.597090 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:1304 @ 0x7408ac0384d4) user 21 builtin 12 -1711462110.597101 [0] gc: gc 0x7408c80057c0: deleting -1711462110.597164 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:56a27910:57318171:1203) ... -1711462110.597189 [0] python3: writer_set_state(110cd0d:56a27910:57318171:1203) state transition 0 -> 1 -1711462110.597195 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:1203) ... -1711462110.597199 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:1203) - no unack'ed samples -1711462110.597203 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:1203) ... -1711462110.597208 [0] python3: => EVERYONE -1711462110.597219 [0] python3: writer_set_state(110cd0d:56a27910:57318171:1203) state transition 1 -> 3 -1711462110.597304 [0] gc: gc 0x6443028e67a0: deleting -1711462110.597331 [0] gc: gc_delete_writer(0x6443028e67a0, 110cd0d:56a27910:57318171:1203) -1711462110.597368 [0] gc: write_sample 110cd0d:56a27910:57318171:3c2 #11: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:1203}} -1711462110.597394 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:1203 @ 0x7408ac0375f4) user 20 builtin 12 -1711462110.597405 [0] gc: gc 0x7408c80057c0: deleting -1711462110.597524 [0] python3: write_sample 110cd0d:56a27910:57318171:403 #15: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,15,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,12,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,14,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.597563 [0] python3: => EVERYONE -1711462110.597571 [0] python3: delete_reader_guid(guid 110cd0d:56a27910:57318171:1104) ... -1711462110.597576 [0] python3: => EVERYONE -1711462110.597653 [0] gc: gc 0x7408e000a270: deleting -1711462110.597672 [0] gc: gc_delete_reader(0x7408e000a270, 110cd0d:56a27910:57318171:1104) -1711462110.597693 [0] gc: write_sample 110cd0d:56a27910:57318171:4c2 #12: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:1104}} -1711462110.597714 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:1104 @ 0x7408ac034754) user 19 builtin 12 -1711462110.597724 [0] gc: gc 0x7408c80057c0: deleting -1711462110.597785 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:56a27910:57318171:1003) ... -1711462110.597816 [0] python3: writer_set_state(110cd0d:56a27910:57318171:1003) state transition 0 -> 1 -1711462110.597825 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:1003) ... -1711462110.597831 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:1003) - no unack'ed samples -1711462110.597836 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:1003) ... -1711462110.597844 [0] python3: => EVERYONE -1711462110.597859 [0] python3: writer_set_state(110cd0d:56a27910:57318171:1003) state transition 1 -> 3 -1711462110.597932 [0] gc: gc 0x6443026b6d50: deleting -1711462110.597950 [0] gc: gc_delete_writer(0x6443026b6d50, 110cd0d:56a27910:57318171:1003) -1711462110.597975 [0] gc: write_sample 110cd0d:56a27910:57318171:3c2 #12: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:1003}} -1711462110.597998 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:1003 @ 0x7408ac0337c4) user 18 builtin 12 -1711462110.598009 [0] gc: gc 0x7408c80057c0: deleting -1711462110.598062 [0] python3: write_sample 110cd0d:56a27910:57318171:403 #16: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,13,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,10,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,12,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.598070 [0] python3: => EVERYONE -1711462110.598076 [0] python3: delete_reader_guid(guid 110cd0d:56a27910:57318171:f04) ... -1711462110.598080 [0] python3: => EVERYONE -1711462110.598155 [0] gc: gc 0x6443028ee1e0: deleting -1711462110.598173 [0] gc: gc_delete_reader(0x6443028ee1e0, 110cd0d:56a27910:57318171:f04) -1711462110.598193 [0] gc: write_sample 110cd0d:56a27910:57318171:4c2 #13: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:f04}} -1711462110.598225 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:f04 @ 0x7408ac02f8a4) user 17 builtin 12 -1711462110.598236 [0] gc: gc 0x7408c80057c0: deleting -1711462110.598240 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:56a27910:57318171:e03) ... -1711462110.598247 [0] python3: writer_set_state(110cd0d:56a27910:57318171:e03) state transition 0 -> 1 -1711462110.598253 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:e03) ... -1711462110.598258 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:e03) - no unack'ed samples -1711462110.598263 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:e03) ... -1711462110.598269 [0] python3: => EVERYONE -1711462110.598278 [0] python3: writer_set_state(110cd0d:56a27910:57318171:e03) state transition 1 -> 3 -1711462110.598350 [0] gc: gc 0x6443028b92b0: deleting -1711462110.598369 [0] gc: gc_delete_writer(0x6443028b92b0, 110cd0d:56a27910:57318171:e03) -1711462110.598392 [0] gc: write_sample 110cd0d:56a27910:57318171:3c2 #13: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:e03}} -1711462110.598414 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:e03 @ 0x7408ac02e9a4) user 16 builtin 12 -1711462110.598424 [0] gc: gc 0x7408c80057c0: deleting -1711462110.598469 [0] python3: write_sample 110cd0d:56a27910:57318171:403 #17: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,11,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,8,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,10,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.598477 [0] python3: => EVERYONE -1711462110.598483 [0] python3: delete_reader_guid(guid 110cd0d:56a27910:57318171:d04) ... -1711462110.598487 [0] python3: => EVERYONE -1711462110.598563 [0] gc: gc 0x6443028ae970: deleting -1711462110.598581 [0] gc: gc_delete_reader(0x6443028ae970, 110cd0d:56a27910:57318171:d04) -1711462110.598602 [0] gc: write_sample 110cd0d:56a27910:57318171:4c2 #14: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:d04}} -1711462110.598621 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:d04 @ 0x7408ac023524) user 15 builtin 12 -1711462110.598628 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:56a27910:57318171:c03) ... -1711462110.598631 [0] gc: gc 0x7408c80057c0: not yet, shortsleep -1711462110.598634 [0] python3: writer_set_state(110cd0d:56a27910:57318171:c03) state transition 0 -> 1 -1711462110.598648 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:c03) ... -1711462110.598652 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:c03) - no unack'ed samples -1711462110.598656 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:c03) ... -1711462110.598660 [0] python3: => EVERYONE -1711462110.598667 [0] python3: writer_set_state(110cd0d:56a27910:57318171:c03) state transition 1 -> 3 -1711462110.599754 [0] gc: gc 0x7408c80057c0: deleting -1711462110.599779 [0] gc: gc 0x6443028ae970: deleting -1711462110.599788 [0] gc: gc_delete_writer(0x6443028ae970, 110cd0d:56a27910:57318171:c03) -1711462110.599813 [0] gc: write_sample 110cd0d:56a27910:57318171:3c2 #14: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:c03}} -1711462110.599849 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:c03 @ 0x7408ac02afb4) user 14 builtin 12 -1711462110.599860 [0] gc: gc 0x7408c80057c0: deleting -1711462110.599916 [0] python3: write_sample 110cd0d:56a27910:57318171:403 #18: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,9,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,7,3,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,8,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.599927 [0] python3: => EVERYONE -1711462110.599933 [0] python3: delete_reader_guid(guid 110cd0d:56a27910:57318171:b04) ... -1711462110.599938 [0] python3: => EVERYONE -1711462110.600013 [0] gc: gc 0x6443026b6d50: deleting -1711462110.600033 [0] gc: gc_delete_reader(0x6443026b6d50, 110cd0d:56a27910:57318171:b04) -1711462110.600055 [0] gc: write_sample 110cd0d:56a27910:57318171:4c2 #15: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:b04}} -1711462110.600077 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:b04 @ 0x7408ac016d14) user 13 builtin 12 -1711462110.600083 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:56a27910:57318171:a03) ... -1711462110.600088 [0] python3: writer_set_state(110cd0d:56a27910:57318171:a03) state transition 0 -> 1 -1711462110.600095 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:a03) ... -1711462110.600088 [0] gc: gc 0x7408c80057c0: not yet, shortsleep -1711462110.600101 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:a03) - no unack'ed samples -1711462110.600120 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:a03) ... -1711462110.600125 [0] python3: => EVERYONE -1711462110.600134 [0] python3: writer_set_state(110cd0d:56a27910:57318171:a03) state transition 1 -> 3 -1711462110.601180 [0] gc: gc 0x7408c80057c0: deleting -1711462110.601206 [0] gc: gc 0x6443028ae2e0: deleting -1711462110.601213 [0] gc: gc_delete_writer(0x6443028ae2e0, 110cd0d:56a27910:57318171:a03) -1711462110.601240 [0] gc: write_sample 110cd0d:56a27910:57318171:3c2 #15: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:a03}} -1711462110.601262 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:a03 @ 0x7408ac028124) user 12 builtin 12 -1711462110.601272 [0] gc: gc 0x7408c80057c0: deleting -1711462110.601313 [0] python3: write_sample 110cd0d:56a27910:57318171:403 #19: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,22,4,0,0,0,0,0,0,0,0}}}},{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,7,3,0,0,0,0,0,0,0,0}}}}}}} -1711462110.601323 [0] python3: => EVERYONE -1711462110.601332 [0] python3: delete_reader_guid(guid 110cd0d:56a27910:57318171:904) ... -1711462110.601336 [0] python3: => EVERYONE -1711462110.601353 [0] gc: gc 0x6443028ee870: deleting -1711462110.601363 [0] gc: gc_delete_reader(0x6443028ee870, 110cd0d:56a27910:57318171:904) -1711462110.601378 [0] gc: write_sample 110cd0d:56a27910:57318171:4c2 #16: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:904}} -1711462110.601408 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:904 @ 0x7408ac01c794) user 11 builtin 12 -1711462110.601418 [0] gc: gc 0x7408c80057c0: deleting -1711462110.601420 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:56a27910:57318171:803) ... -1711462110.601440 [0] python3: writer_set_state(110cd0d:56a27910:57318171:803) state transition 0 -> 1 -1711462110.601446 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:803) ... -1711462110.601451 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:803) - no unack'ed samples -1711462110.601457 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:803) ... -1711462110.601463 [0] python3: => EVERYONE -1711462110.601472 [0] python3: writer_set_state(110cd0d:56a27910:57318171:803) state transition 1 -> 3 -1711462110.601488 [0] gc: gc 0x6443028fcff0: deleting -1711462110.601497 [0] gc: gc_delete_writer(0x6443028fcff0, 110cd0d:56a27910:57318171:803) -1711462110.601512 [0] gc: write_sample 110cd0d:56a27910:57318171:3c2 #16: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:803}} -1711462110.601532 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:803 @ 0x7408ac023254) user 10 builtin 12 -1711462110.601541 [0] gc: gc 0x7408c80057c0: deleting -1711462110.601598 [0] python3: write_sample 110cd0d:56a27910:57318171:403 #20: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,20,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,22,4,0,0,0,0,0,0,0,0}}}},{}}}} -1711462110.601604 [0] python3: => EVERYONE -1711462110.601609 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:56a27910:57318171:703) ... -1711462110.601613 [0] python3: writer_set_state(110cd0d:56a27910:57318171:703) state transition 0 -> 1 -1711462110.601617 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:703) ... -1711462110.601620 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:703) - no unack'ed samples -1711462110.601624 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:703) ... -1711462110.601628 [0] python3: => EVERYONE -1711462110.601635 [0] python3: writer_set_state(110cd0d:56a27910:57318171:703) state transition 1 -> 3 -1711462110.601646 [0] gc: gc 0x64430289d600: deleting -1711462110.601655 [0] gc: gc_delete_writer(0x64430289d600, 110cd0d:56a27910:57318171:703) -1711462110.601670 [0] gc: write_sample 110cd0d:56a27910:57318171:3c2 #17: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:703}} -1711462110.601688 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:703 @ 0x7408ac023a64) user 9 builtin 12 -1711462110.601697 [0] gc: gc 0x7408c80057c0: deleting -1711462110.601807 [0] python3: write_sample 110cd0d:56a27910:57318171:403 #21: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,21,4,0,0,0,0,0,0,0,0}}}{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,22,4,0,0,0,0,0,0,0,0}}}},{}}}} -1711462110.601813 [0] python3: => EVERYONE -1711462110.601819 [0] python3: delete_reader_guid(guid 110cd0d:56a27910:57318171:1404) ... -1711462110.601823 [0] python3: => EVERYONE -1711462110.601839 [0] gc: gc 0x6443028e6c00: deleting -1711462110.601847 [0] gc: gc_delete_reader(0x6443028e6c00, 110cd0d:56a27910:57318171:1404) -1711462110.601860 [0] gc: write_sample 110cd0d:56a27910:57318171:4c2 #17: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:1404}} -1711462110.601882 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:1404 @ 0x7408ac03aef4) user 8 builtin 12 -1711462110.601892 [0] gc: gc 0x7408c80057c0: deleting -1711462110.601907 [0] python3: write_sample 110cd0d:56a27910:57318171:403 #22: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,22,4,0,0,0,0,0,0,0,0}}}},{}}}} -1711462110.601913 [0] python3: => EVERYONE -1711462110.601919 [0] python3: delete_reader_guid(guid 110cd0d:56a27910:57318171:1504) ... -1711462110.601922 [0] python3: => EVERYONE -1711462110.601938 [0] gc: gc 0x6443028e6c00: deleting -1711462110.601946 [0] gc: gc_delete_reader(0x6443028e6c00, 110cd0d:56a27910:57318171:1504) -1711462110.601958 [0] gc: write_sample 110cd0d:56a27910:57318171:4c2 #18: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:1504}} -1711462110.601972 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:1504 @ 0x7408ac03cb04) user 7 builtin 12 -1711462110.601981 [0] gc: gc 0x7408c80057c0: deleting -1711462110.601993 [0] python3: write_sample 110cd0d:56a27910:57318171:403 #23: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,1,193,0,0,0,0,0,0,0,0}}},{{"/","test_node",{},{}}}} -1711462110.601999 [0] python3: => EVERYONE -1711462110.602004 [0] python3: delete_reader_guid(guid 110cd0d:56a27910:57318171:1604) ... -1711462110.602008 [0] python3: => EVERYONE -1711462110.602021 [0] gc: gc 0x64430289d600: deleting -1711462110.602030 [0] gc: gc_delete_reader(0x64430289d600, 110cd0d:56a27910:57318171:1604) -1711462110.602043 [0] gc: write_sample 110cd0d:56a27910:57318171:4c2 #19: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:1604}} -1711462110.602057 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:1604 @ 0x7408ac03eb04) user 6 builtin 12 -1711462110.602066 [0] gc: gc 0x7408c80057c0: deleting -1711462110.602074 [0] python3: write_sample 110cd0d:56a27910:57318171:403 #24: ST0 ros_discovery_info/rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_:{{{{1,16,205,13,86,162,121,16,87,49,129,113,0,0,1,193,0,0,0,0,0,0,0,0}}},{}} -1711462110.602079 [0] python3: => EVERYONE -1711462110.602188 [0] python3: ddsi_unblock_throttled_writer(guid 110cd0d:56a27910:57318171:403) ... -1711462110.602193 [0] python3: writer_set_state(110cd0d:56a27910:57318171:403) state transition 0 -> 1 -1711462110.602198 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:403) ... -1711462110.602204 [0] python3: delete_writer(guid 110cd0d:56a27910:57318171:403) - no unack'ed samples -1711462110.602209 [0] python3: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:403) ... -1711462110.602215 [0] python3: => EVERYONE -1711462110.602223 [0] python3: writer_set_state(110cd0d:56a27910:57318171:403) state transition 1 -> 3 -1711462110.602240 [0] gc: gc 0x6443028fcff0: deleting -1711462110.602252 [0] gc: gc_delete_writer(0x6443028fcff0, 110cd0d:56a27910:57318171:403) -1711462110.602268 [0] gc: write_sample 110cd0d:56a27910:57318171:3c2 #18: ST3 DCPSPublication/PublicationBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:403}} -1711462110.602289 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:403 @ 0x7408ac01d5a4) user 5 builtin 12 -1711462110.602332 [0] python3: delete_reader_guid(guid 110cd0d:56a27910:57318171:504) ... -1711462110.602337 [0] python3: => EVERYONE -1711462110.602361 [0] gc: gc 0x6443028ee870: deleting -1711462110.602371 [0] gc: gc_delete_reader(0x6443028ee870, 110cd0d:56a27910:57318171:504) -1711462110.602384 [0] gc: write_sample 110cd0d:56a27910:57318171:4c2 #20: ST3 DCPSSubscription/SubscriptionBuiltinTopicData:{endpoint_guid={110cd0d:56a27910:57318171:504}} -1711462110.602400 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:504 @ 0x7408ac01f034) user 4 builtin 12 -1711462110.602417 [0] python3: delete_reader_guid(guid 110cd0d:56a27910:57318171:307) ... -1711462110.602422 [0] python3: => EVERYONE -1711462110.602436 [0] gc: gc 0x7408ac019790: deleting -1711462110.602445 [0] gc: gc_delete_reader(0x7408ac019790, 110cd0d:56a27910:57318171:307) -1711462110.602460 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:307 @ 0x7408ac014d24) user 3 builtin 12 -1711462110.602467 [0] python3: delete_reader_guid(guid 110cd0d:56a27910:57318171:207) ... -1711462110.602474 [0] python3: => EVERYONE -1711462110.602468 [0] gc: gc 0x7408ac005130: deleting -1711462110.602489 [0] gc: gc 0x6443028ae2e0: deleting -1711462110.602495 [0] gc: gc_delete_reader(0x6443028ae2e0, 110cd0d:56a27910:57318171:207) -1711462110.602508 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:207 @ 0x7408ac00d0b4) user 2 builtin 12 -1711462110.602515 [0] python3: delete_reader_guid(guid 110cd0d:56a27910:57318171:107) ... -1711462110.602523 [0] python3: => EVERYONE -1711462110.602517 [0] gc: gc 0x6443026b6d50: deleting -1711462110.602537 [0] gc: gc 0x6443028ae970: deleting -1711462110.602544 [0] gc: gc 0x7408c80057c0: deleting -1711462110.602552 [0] gc: gc 0x6443028ae2e0: deleting -1711462110.602558 [0] gc: gc_delete_reader(0x6443028ae2e0, 110cd0d:56a27910:57318171:107) -1711462110.602571 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:107 @ 0x7408ac00aeb4) user 1 builtin 12 -1711462110.602576 [0] python3: ddsi_delete_participant (110cd0d:56a27910:57318171:1c1) -1711462110.602581 [0] gc: gc 0x6443026b6d50: not yet, shortsleep -1711462110.602583 [0] python3: => EVERYONE -1711462110.602610 [0] python3: trigger_recv_threads: 0 many 0x7408d4016670 -1711462110.602625 [0] python3: trigger_recv_threads: 1 single udp/239.255.0.1:7401 -1711462110.602649 [0] recv: done -1711462110.602685 [0] recvMC: done -1711462110.602699 [0] python3: trigger_recv_threads: 2 single udp/10.101.12.71:7411 -1711462110.602769 [0] recvUC: done -1711462110.603654 [0] gc: gc 0x6443026b6d50: deleting -1711462110.603674 [0] gc: gc 0x7408ac00a3e0: deleting -1711462110.603681 [0] gc: gc_delete_participant (0x7408ac00a3e0, 110cd0d:56a27910:57318171:1c1) -1711462110.603689 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 0:0:0:0 @ (nil)) user 0 builtin 12 -1711462110.603709 [0] gc: write_sample 110cd0d:56a27910:57318171:100c2 #2: ST3 DCPSParticipant/ParticipantBuiltinTopicData:{participant_guid={110cd0d:56a27910:57318171:1c1}} -1711462110.603724 [0] gc: non-timed queue now has 1 items -1711462110.603732 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:100c2) ... -1711462110.603738 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:100c2) ... -1711462110.603747 [0] gc: writer_set_state(110cd0d:56a27910:57318171:100c2) state transition 0 -> 3 -1711462110.603754 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:3c2) ... -1711462110.603759 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:3c2) ... -1711462110.603766 [0] gc: writer_set_state(110cd0d:56a27910:57318171:3c2) state transition 0 -> 3 -1711462110.603773 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:4c2) ... -1711462110.603788 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:4c2) ... -1711462110.603795 [0] gc: writer_set_state(110cd0d:56a27910:57318171:4c2) state transition 0 -> 3 -1711462110.603803 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:200c2) ... -1711462110.603808 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:200c2) ... -1711462110.603815 [0] gc: writer_set_state(110cd0d:56a27910:57318171:200c2) state transition 0 -> 3 -1711462110.603821 [0] gc: delete_reader_guid(guid 110cd0d:56a27910:57318171:100c7) ... -1711462110.603829 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:2c2) - unknown guid -1711462110.603836 [0] gc: delete_reader_guid(guid 110cd0d:56a27910:57318171:2c7) - unknown guid -1711462110.603842 [0] gc: delete_reader_guid(guid 110cd0d:56a27910:57318171:3c7) ... -1711462110.603850 [0] gc: delete_reader_guid(guid 110cd0d:56a27910:57318171:4c7) ... -1711462110.603857 [0] gc: delete_reader_guid(guid 110cd0d:56a27910:57318171:200c7) ... -1711462110.603866 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:300c3) ... -1711462110.603872 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:300c3) ... -1711462110.603878 [0] gc: writer_set_state(110cd0d:56a27910:57318171:300c3) state transition 0 -> 3 -1711462110.603885 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:301c3) ... -1711462110.603891 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:301c3) ... -1711462110.603897 [0] gc: writer_set_state(110cd0d:56a27910:57318171:301c3) state transition 0 -> 3 -1711462110.603904 [0] gc: delete_reader_guid(guid 110cd0d:56a27910:57318171:300c4) ... -1711462110.603911 [0] gc: delete_reader_guid(guid 110cd0d:56a27910:57318171:301c4) ... -1711462110.603918 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:ff0003c2) - unknown guid -1711462110.603924 [0] gc: delete_reader_guid(guid 110cd0d:56a27910:57318171:ff0003c7) - unknown guid -1711462110.603930 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:ff0004c2) - unknown guid -1711462110.603936 [0] gc: delete_reader_guid(guid 110cd0d:56a27910:57318171:ff0004c7) - unknown guid -1711462110.603941 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:ff0200c2) - unknown guid -1711462110.603948 [0] gc: delete_reader_guid(guid 110cd0d:56a27910:57318171:ff0200c7) - unknown guid -1711462110.603953 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:201c3) - unknown guid -1711462110.603959 [0] gc: delete_reader_guid(guid 110cd0d:56a27910:57318171:201c4) - unknown guid -1711462110.603964 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:ff0101c2) - unknown guid -1711462110.603970 [0] gc: delete_reader_guid(guid 110cd0d:56a27910:57318171:ff0101c7) - unknown guid -1711462110.603975 [0] gc: ddsi_delete_writer_nolinger(guid 110cd0d:56a27910:57318171:ff0202c3) - unknown guid -1711462110.603980 [0] gc: delete_reader_guid(guid 110cd0d:56a27910:57318171:ff0202c4) - unknown guid -1711462110.603986 [0] gc: gc 0x6443026b6d50: deleting -1711462110.603991 [0] gc: gc_delete_writer(0x6443026b6d50, 110cd0d:56a27910:57318171:100c2) -1711462110.604003 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:100c2 @ 0x7408ac005564) user 0 builtin 11 -1711462110.604010 [0] gc: gc 0x7408c8015c30: deleting -1711462110.604016 [0] gc: gc_delete_writer(0x7408c8015c30, 110cd0d:56a27910:57318171:3c2) -1711462110.604026 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:3c2 @ 0x7408ac0063a4) user 0 builtin 10 -1711462110.604033 [0] gc: gc 0x7408c800ad10: deleting -1711462110.604039 [0] gc: gc_delete_writer(0x7408c800ad10, 110cd0d:56a27910:57318171:4c2) -1711462110.604054 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:4c2 @ 0x7408ac005bb4) user 0 builtin 9 -1711462110.604061 [0] gc: gc 0x7408c80064a0: deleting -1711462110.604068 [0] gc: gc_delete_writer(0x7408c80064a0, 110cd0d:56a27910:57318171:200c2) -1711462110.604081 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:200c2 @ 0x7408ac006bf4) user 0 builtin 8 -1711462110.604091 [0] gc: gc 0x7408d4101f70: deleting -1711462110.604096 [0] gc: gc_delete_reader(0x7408d4101f70, 110cd0d:56a27910:57318171:100c7) -1711462110.604104 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:100c7 @ 0x7408ac001534) user 0 builtin 7 -1711462110.604109 [0] gc: gc 0x7408d4101690: deleting -1711462110.604114 [0] gc: gc_delete_reader(0x7408d4101690, 110cd0d:56a27910:57318171:3c7) -1711462110.604121 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:3c7 @ 0x7408ac008884) user 0 builtin 6 -1711462110.604127 [0] gc: gc 0x6443028ed6f0: deleting -1711462110.604132 [0] gc: gc_delete_reader(0x6443028ed6f0, 110cd0d:56a27910:57318171:4c7) -1711462110.604139 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:4c7 @ 0x7408ac008504) user 0 builtin 5 -1711462110.604144 [0] gc: gc 0x7408d0001640: deleting -1711462110.604149 [0] gc: gc_delete_reader(0x7408d0001640, 110cd0d:56a27910:57318171:200c7) -1711462110.604156 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:200c7 @ 0x7408ac008c04) user 0 builtin 4 -1711462110.604162 [0] gc: gc 0x7408d0001870: deleting -1711462110.604167 [0] gc: gc_delete_writer(0x7408d0001870, 110cd0d:56a27910:57318171:300c3) -1711462110.604176 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:300c3 @ 0x7408ac0074a4) user 0 builtin 3 -1711462110.604182 [0] gc: gc 0x7408d0001aa0: deleting -1711462110.604188 [0] gc: gc_delete_writer(0x7408d0001aa0, 110cd0d:56a27910:57318171:301c3) -1711462110.604213 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:301c3 @ 0x7408ac007d44) user 0 builtin 2 -1711462110.604220 [0] gc: gc 0x7408d0001cd0: deleting -1711462110.604225 [0] gc: gc_delete_reader(0x7408d0001cd0, 110cd0d:56a27910:57318171:300c4) -1711462110.604232 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:300c4 @ 0x7408ac008f74) user 0 builtin 1 -1711462110.604237 [0] gc: gc 0x7408d0001f00: deleting -1711462110.604243 [0] gc: gc_delete_reader(0x7408d0001f00, 110cd0d:56a27910:57318171:301c4) -1711462110.604250 [0] gc: ddsi_unref_participant(110cd0d:56a27910:57318171:1c1 @ 0x7408ac001d20 <- 110cd0d:56a27910:57318171:301c4 @ 0x7408ac0092f4) user 0 builtin 0 -1711462110.604262 [0] gc: ddsi_remove_deleted_participant_guid(110cd0d:56a27910:57318171:1c1 for_what=1) -1711462110.604269 [0] gc: gc 0x6443028ed6f0: deleting -1711462110.604289 [0] python3: ddsi_delete_writer_nolinger(guid 0:0:0:100c2) ... -1711462110.604312 [0] python3: writer_set_state(0:0:0:100c2) state transition 0 -> 3 -1711462110.604323 [0] python3: ddsi_delete_writer_nolinger(guid 0:0:0:2c2) ... -1711462110.604329 [0] python3: writer_set_state(0:0:0:2c2) state transition 0 -> 3 -1711462110.604335 [0] python3: ddsi_delete_writer_nolinger(guid 0:0:0:3c2) ... -1711462110.604329 [0] gc: gc 0x7408c40185f0: not yet, shortsleep -1711462110.604339 [0] python3: writer_set_state(0:0:0:3c2) state transition 0 -> 3 -1711462110.604355 [0] python3: ddsi_delete_writer_nolinger(guid 0:0:0:4c2) ... -1711462110.604359 [0] python3: writer_set_state(0:0:0:4c2) state transition 0 -> 3 -1711462110.605406 [0] gc: gc 0x7408c40185f0: deleting -1711462110.605417 [0] gc: gc_delete_writer(0x7408c40185f0, 0:0:0:100c2) -1711462110.605432 [0] gc: gc 0x6443028ee870: deleting -1711462110.605438 [0] gc: gc_delete_writer(0x6443028ee870, 0:0:0:2c2) -1711462110.605447 [0] gc: gc 0x6443028fcff0: deleting -1711462110.605453 [0] gc: gc_delete_writer(0x6443028fcff0, 0:0:0:3c2) -1711462110.605462 [0] gc: gc 0x64430289d600: deleting -1711462110.605467 [0] gc: gc_delete_writer(0x64430289d600, 0:0:0:4c2) -1711462110.605507 [0] gc: gc 0x6443028e6c00: deleting -1711462110.605736 [0] python3: xpack_addmsg 0x6443027daf60 0x7408c400fa70 0(data(0:0:0:0:#0/1)): niov 0 sz 0 => now niov 3 sz 96 -1711462110.606455 [0] python3: nn_xpack_send 96: 0x6443027daf6c:20 0x7408c400fb68:48 0x7408c8059604:28 [ udp/239.255.0.1:7400@2 udp/127.0.0.1:7410@2 udp/127.0.0.1:7412@2 udp/127.0.0.1:7414@2 udp/127.0.0.1:7416@2 udp/127.0.0.1:7418@2 udp/127.0.0.1:7420@2 udp/127.0.0.1:7422@2 udp/127.0.0.1:7424@2 udp/127.0.0.1:7426@2 udp/127.0.0.1:7428@2 udp/127.0.0.1:7430@2 udp/127.0.0.1:7432@2 udp/127.0.0.1:7434@2 udp/127.0.0.1:7436@2 udp/127.0.0.1:7438@2 udp/127.0.0.1:7440@2 udp/127.0.0.1:7442@2 udp/127.0.0.1:7444@2 udp/127.0.0.1:7446@2 udp/127.0.0.1:7448@2 udp/127.0.0.1:7450@2 udp/127.0.0.1:7452@2 udp/127.0.0.1:7454@2 udp/127.0.0.1:7456@2 udp/127.0.0.1:7458@2 udp/127.0.0.1:7460@2 udp/127.0.0.1:7462@2 udp/127.0.0.1:7464@2 udp/127.0.0.1:7466@2 udp/127.0.0.1:7468@2 udp/127.0.0.1:7470@2 udp/127.0.0.1:7472@2 udp/127.0.0.1:7474@2 udp/127.0.0.1:7476@2 udp/127.0.0.1:7478@2 udp/127.0.0.1:7480@2 udp/127.0.0.1:7482@2 udp/127.0.0.1:7484@2 udp/127.0.0.1:7486@2 udp/127.0.0.1:7488@2 udp/127.0.0.1:7490@2 udp/127.0.0.1:7492@2 udp/127.0.0.1:7494@2 udp/127.0.0.1:7496@2 udp/127.0.0.1:7498@2 udp/127.0.0.1:7500@2 udp/127.0.0.1:7502@2 udp/127.0.0.1:7504@2 udp/127.0.0.1:7506@2 udp/127.0.0.1:7508@2 udp/127.0.0.1:7510@2 udp/127.0.0.1:7512@2 udp/127.0.0.1:7514@2 udp/127.0.0.1:7516@2 udp/127.0.0.1:7518@2 udp/127.0.0.1:7520@2 udp/127.0.0.1:7522@2 udp/127.0.0.1:7524@2 udp/127.0.0.1:7526@2 udp/127.0.0.1:7528@2 udp/127.0.0.1:7530@2 udp/127.0.0.1:7532@2 udp/127.0.0.1:7534@2 udp/127.0.0.1:7536@2 udp/127.0.0.1:7538@2 udp/127.0.0.1:7540@2 udp/127.0.0.1:7542@2 udp/127.0.0.1:7544@2 udp/127.0.0.1:7546@2 udp/127.0.0.1:7548@2 udp/127.0.0.1:7550@2 udp/127.0.0.1:7552@2 udp/127.0.0.1:7554@2 udp/127.0.0.1:7556@2 udp/127.0.0.1:7558@2 udp/127.0.0.1:7560@2 udp/127.0.0.1:7562@2 udp/127.0.0.1:7564@2 udp/127.0.0.1:7566@2 udp/127.0.0.1:7568@2 udp/127.0.0.1:7570@2 udp/127.0.0.1:7572@2 udp/127.0.0.1:7574@2 udp/127.0.0.1:7576@2 udp/127.0.0.1:7578@2 udp/127.0.0.1:7580@2 udp/127.0.0.1:7582@2 udp/127.0.0.1:7584@2 udp/127.0.0.1:7586@2 udp/127.0.0.1:7588@2 udp/127.0.(trunc) -1711462110.606464 [0] python3: traffic-xmit (101) 96 -1711462110.606478 [0] python3: leave conn 0x7408d400ab50 for (udp/239.255.0.1, *) interface (default): not leaving yet -1711462110.606483 [0] python3: leave conn 0x7408d40088c0 for (udp/239.255.0.1, *) interface (default): not leaving yet -1711462110.606490 [0] python3: leave conn 0x7408d400ab50 for (udp/239.255.0.1, *) interface udp/10.101.12.71 -1711462110.606500 [0] python3: leave conn 0x7408d40088c0 for (udp/239.255.0.1, *) interface udp/10.101.12.71 -1711462110.606515 [0] python3: ddsi_udp_release_conn multicast socket 36 port 7400 -1711462110.606535 [0] python3: ddsi_udp_release_conn multicast socket 37 port 7401 -1711462110.606542 [0] python3: ddsi_udp_release_conn unicast socket 34 port 7410 -1711462110.606547 [0] python3: ddsi_udp_release_conn unicast socket 35 port 7411 -1711462110.606553 [0] python3: ddsi_udp_release_conn unicast socket 38 port 50807 -1711462110.606560 [0] python3: udp finalized -1711462110.606771 [0] python3: Finis. diff --git a/topological_navigation/doc/MAP_ANALYSER.md b/topological_navigation/doc/MAP_ANALYSER.md new file mode 100644 index 00000000..c1cf2a0a --- /dev/null +++ b/topological_navigation/doc/MAP_ANALYSER.md @@ -0,0 +1,424 @@ +# Topological Map Analyser + +`map_analyser.py` is a stand-alone command-line tool for analysing +`.tmap2.yaml` topological map files. It requires no ROS 2 runtime and +only depends on `pyyaml`, `jsonschema`, `networkx` and (for the `merge` +subcommand) `pyproj`, so it can be run locally or in a CI pipeline +(e.g. a GitHub Actions workflow). + +## What it checks + +* **Schema compliance** – validates the map against + `config/tmap-schema.yaml` (delegates to `validate_map.py`). +* **Orphaned nodes** – nodes with no incoming edges, i.e. nodes that + can never be reached by navigating the graph. +* **Disconnected sub-maps** – weakly connected components of the + topological graph. More than one component means the map contains + islands of nodes that cannot reach each other. +* **Map statistics** – node/edge counts, total and average edge + length, a breakdown of edge counts per action, and the number of + bidirectional vs. unidirectional edges. +* **Overlapping influence zones** – pairs of nodes whose influence + zone polygons (`verts`) overlap, including the case where a node's + position falls inside another node's polygon. +* **Grid angle deviation** *(disabled by default)* – for a configurable + set of nodes, checks that each node's own incoming/outgoing edges are + mutually separated by multiples of 90 degrees (i.e. the node looks + like a right-angle grid corner/cross/T, regardless of how the node's + local neighbourhood is oriented relative to the rest of the map). + Edges whose bearing deviates from the node's best-fit local + right-angle pattern by more than a configurable threshold (default 5 + degrees) are flagged. See + [Grid angle deviation check](#grid-angle-deviation-check) below. +* **SVG rendering** – a full-map SVG image with nodes as circles, + edges colour-coded by action, bidirectional edges drawn as plain + lines (no arrow head), and unidirectional edges drawn with an arrow + head indicating direction of travel. +* **Minification** – writes a smaller, semantically-identical copy of + the map by collapsing repeated data structures (e.g. shared + `properties` or `verts` blocks) into named YAML anchors, and + optionally stripping nodes/edges unreachable from a given node. +* **Merging** – combines two or more maps into a single schema-valid + map, reprojecting node positions into the first map's GPS origin, + deduplicating node/edge names, and merging metadata (see + [`merge` command](#merge-command) below). +* **Grid alignment** – in a separate mode (the `grid-align` command, + as opposed to a `check`), the tool can reposition the nodes selected + for the grid angle deviation check so that their own incident edges + become mutually right-angled, and save the adjusted map (see + [`grid-align` command](#grid-align-command) below). + +## Usage + +```bash +# Full human-readable analysis report +ros2 run topological_navigation map_analyser.py analyse my_map.tmap2.yaml + +# Full report + SVG rendering +ros2 run topological_navigation map_analyser.py analyse my_map.tmap2.yaml --svg my_map.svg + +# CI-friendly validity check (exit code reflects the result) +ros2 run topological_navigation map_analyser.py check my_map.tmap2.yaml + +# Treat disconnected sub-maps as an error, and skip the influence-zone check +ros2 run topological_navigation map_analyser.py check my_map.tmap2.yaml \ + --sub-map-separation=error --influence-zone-overlap=false + +# SVG rendering only +ros2 run topological_navigation map_analyser.py svg my_map.tmap2.yaml -o my_map.svg + +# Minify (writes my_map.min.tmap2.yaml alongside the input by default) +ros2 run topological_navigation map_analyser.py minify my_map.tmap2.yaml + +# Merge two or more maps into one (writes map_a.merged.tmap2.yaml by default) +ros2 run topological_navigation map_analyser.py merge map_a.tmap2.yaml map_b.tmap2.yaml -o merged.tmap2.yaml + +# Check that nodes named Row* have mutually right-angled edges +ros2 run topological_navigation map_analyser.py check my_map.tmap2.yaml \ + --grid-angle-deviation=error --grid-angle-filter "name:Row*" + +# Reposition the nodes matched by the filter to minimise the deviation of +# their own edges from a 90 degree multiple of one another +# (writes my_map.gridalign.tmap2.yaml alongside the input by default) +ros2 run topological_navigation map_analyser.py grid-align my_map.tmap2.yaml \ + --grid-angle-filter "name:Row*" +``` + +## Running without ROS 2 + +`map_analyser.py` (and the `map_merger.py`/`validate_map.py`/ +`convert_tmap.py` modules it builds on) have no ROS 2 runtime +dependency — they only import pure-Python packages, so the whole +`ros2 run topological_navigation map_analyser.py ...` prefix above can +be replaced with a plain `python3 .../map_analyser.py ...` call, with +no ROS 2 workspace build or `source install/setup.bash` required. This +is useful for running the tool in a plain `venv`, in CI (see +`.github/workflows/map-analyser.yaml`), or on a machine that doesn't +have ROS 2 installed at all. + +```bash +# From the repository root +python3 -m venv .venv +source .venv/bin/activate +pip install -r requirements.txt + +# Then call the script directly, with the same subcommands/options as above +python3 topological_navigation/topological_navigation/map_analyser.py analyse my_map.tmap2.yaml +python3 topological_navigation/topological_navigation/map_analyser.py check my_map.tmap2.yaml +python3 topological_navigation/topological_navigation/map_analyser.py merge map_a.tmap2.yaml map_b.tmap2.yaml -o merged.tmap2.yaml +``` + +The only dependencies are `pyyaml`, `jsonschema`, `networkx` and (for +the `merge` subcommand) `pyproj`, all listed in +[requirements.txt](../../requirements.txt) at the repository root. + +## Configuring check severities + +Each of the checks can be independently turned off, or have its +severity set to `warning` or `error`, via a `--={false,warning,error}` +switch on the `analyse`/`check` subcommands: + +| Switch | Check | Default severity | +|--------|-------|-------------------| +| `--schema-check` | Schema compliance | `error` | +| `--orphaned-node` | Orphaned nodes | `error` | +| `--sub-map-separation` | Disconnected sub-maps | `warning` | +| `--influence-zone-overlap` | Overlapping influence zones | `warning` | +| `--grid-angle-deviation` | Grid angle deviation | disabled (`false`) | + +* `false` (also accepted: `off`, `disable`, `disabled`, `none`) disables + the check entirely: it is neither run nor printed in the report. +* `warning` runs the check and prints its result, but a failure does not + affect the `check` command's exit code. +* `error` (also accepted: `true`, `on`) runs the check and a failure + causes `check` to exit with code `1`. + +Example: fail CI only on schema errors and orphaned nodes, ignore +disconnected sub-maps and influence zone overlaps entirely: + +```bash +map_analyser.py check my_map.tmap2.yaml \ + --sub-map-separation=false --influence-zone-overlap=false +``` + +## Grid angle deviation check + +Many topological maps are expected to have nodes that look locally +like right-angle grid corners/crosses/T-junctions, e.g. rows in a +field, aisles in a warehouse — even if the whole layout is rotated +relative to the map's x/y axes, or different areas of the map are +rotated relative to one another. The grid-angle-deviation check looks +at the bearing of every edge incident to a node (both incoming and +outgoing) and flags any edge whose direction deviates by more than a +threshold from the *node's own* best-fit right-angle pattern (i.e. the +angle **between** that node's edges), since such edges often indicate +a mapping mistake. It does **not** compare edge bearings to the map's +global 0/90/180/270 degree axes: a node whose edges point at, say, +30/120/210/300 degrees passes the check just as well as one whose +edges point at 0/90/180/270, because in both cases every edge is a +90-degree multiple away from every other edge at that node. A node +needs at least two incident edges for there to be an angle between +edges to check; nodes with zero or one incident edge are never +flagged. + +This check is **disabled by default**, since not every map (or every +node in a map) is expected to have right-angled edges. Enable it with +`--grid-angle-deviation=warning` (report only) or +`--grid-angle-deviation=error` (also fail `check`), and restrict which +nodes it applies to with one or more `--grid-angle-filter`/ +`--grid-angle-exclude` switches: + +| Switch | Meaning | Default | +|--------|---------|---------| +| `--grid-angle-threshold DEG` | Maximum allowed deviation (degrees) of an edge from the node's own best-fit 90 degree multiple pattern before it is flagged | `5.0` | +| `--grid-angle-filter FILTER` | Select nodes expected to have mutually right-angled edges. Repeatable; the selected set is the union (OR) of every match | every node | +| `--grid-angle-exclude FILTER` | Remove nodes matching `FILTER` from the selected set (applied after all `--grid-angle-filter` matches are unioned). Repeatable | none | + +Both `--grid-angle-filter` and `--grid-angle-exclude` accept the same +`FILTER` syntax, which is a single term or a boolean expression +combining several terms: + +* `name:` – matches node names against a shell-style wildcard + pattern (`*`, `?`, `[seq]`), e.g. `name:Row*` or `name:Junction?`. +* `tag:` – matches any of the node's `meta.tag` entries against + a shell-style wildcard pattern, e.g. `tag:row_entry`. +* `property:` – matches nodes whose `properties` dict has a + truthy value at `` (dotted for nested keys, e.g. + `property:roboflow.enabled`). +* `property:=` – matches nodes whose `properties` dict has + a value at `` that case-insensitively equals `` as a + string, e.g. `property:semantics=row_entry` or `property:field=1`. + +Terms can be combined with `and`, `or`, `not` (case-insensitive) and +parentheses to express arbitrary logical combinations, e.g. select +every node with roboflow enabled that is in field 1 or field 2: + +``` +property:roboflow.enabled and (property:field=1 or property:field=2) +``` + +Operator precedence, from lowest to highest, is `or`, `and`, `not`; +use parentheses to override it. A `FILTER` with no operators behaves +exactly like a single term as before. + +If no `--grid-angle-filter` is given, every node in the map is +selected (minus any `--grid-angle-exclude` matches). Multiple +`--grid-angle-filter` switches are combined with OR (disjunction); the +final selected set is that disjunction minus every node matched by any +`--grid-angle-exclude`. + +```bash +# Only check nodes whose name starts with "Row", ignoring the parking bay +map_analyser.py check my_map.tmap2.yaml --grid-angle-deviation=error \ + --grid-angle-filter "name:Row*" --grid-angle-exclude "name:RowParking" + +# Only check nodes explicitly tagged as grid-aligned via a property +map_analyser.py check my_map.tmap2.yaml --grid-angle-deviation=error \ + --grid-angle-filter "property:grid_aligned" + +# Only check nodes with roboflow enabled that are in field 1 or 2 +map_analyser.py check my_map.tmap2.yaml --grid-angle-deviation=error \ + --grid-angle-filter "property:roboflow.enabled and (property:field=1 or property:field=2)" + +# Use a looser 10 degree threshold +map_analyser.py check my_map.tmap2.yaml --grid-angle-deviation=warning \ + --grid-angle-threshold 10 +``` + +## `grid-align` command + +`grid-align` automatically repositions the nodes selected by +`--grid-angle-filter`/`--grid-angle-exclude` (same syntax as the +grid-angle-deviation check above) to minimise the deviation of their +incident edges from a 90 degree multiple of one another, and writes +the result to a new map file. Nodes not selected by the filters (i.e. +the neighbours used as reference points) are never moved. + +```bash +map_analyser.py grid-align my_map.tmap2.yaml +map_analyser.py grid-align my_map.tmap2.yaml -o aligned.tmap2.yaml +map_analyser.py grid-align my_map.tmap2.yaml --grid-angle-filter "name:Row*" +map_analyser.py grid-align my_map.tmap2.yaml --grid-angle-threshold 10 +``` + +If `-o`/`--output` is omitted, the output path is derived from the +input file by inserting `.gridalign` before the extension, e.g. +`my_map.tmap2.yaml` -> `my_map.gridalign.tmap2.yaml`. + +For each selected node, the node's own best-fit local right-angle +pattern is first computed from the bearings of all of its own +incident edges (before any node is moved). Every neighbour it shares +an edge with (incoming or outgoing) is then classified as lying +roughly "along" or "across" that local pattern, and the node is moved +onto the average alignment of those neighbours within that same +locally-oriented frame (e.g. a node with one neighbour roughly along +its pattern and one neighbour roughly across it is moved to share +each neighbour's corresponding coordinate in that frame). This works +the same way regardless of how the node's local neighbourhood happens +to be rotated relative to the rest of the map — it never snaps nodes +onto the map's global x/y axes. Neighbouring nodes themselves are +never moved by this process, even if they are also part of the +selected set: each selected node is repositioned independently, in a +single pass, based on the original (pre-alignment) positions of all +its neighbours. + +If, after being repositioned, a node still has at least one incident +edge outside the angle threshold (e.g. because its neighbours are not +themselves consistently aligned), the node is left at its **original** +position and reported as **unresolved**; these nodes are listed in the +report and the command exits with code `1` (the output map is still +written with whatever adjustments could be made to the other nodes). + +```bash +$ map_analyser.py grid-align my_map.tmap2.yaml --grid-angle-filter "name:Row*" +Grid-align report: my_map.tmap2.yaml -> my_map.gridalign.tmap2.yaml +============================================================ + Angle threshold: 5 deg + Nodes adjusted: 2 + - Row1Start: (1.200, 0.950) -> (1.200, 1.000) [max deviation 4.2 deg -> 0.0 deg] + - Row1End: (11.100, 1.050) -> (11.100, 1.000) [max deviation 3.1 deg -> 0.0 deg] + Unresolved nodes: 1 (could not be aligned): + - Row2End + Schema check on output: PASS: Validation successful +``` + +`grid-align` shares the `--schema`/`-s` switch with the other commands +(to validate against a non-default schema file) and, like `minify`, +re-parses and schema-validates its own output before reporting +success. + +## `minify` command + +Topological maps often contain many repeated data structures (e.g. the +same `properties` dict or influence-zone `verts` polygon reused across +dozens of nodes/edges). `minify` rewrites the map into an equivalent but +smaller file by finding these repeated subtrees and replacing them with +YAML anchors/aliases, collected under a top-level `__yaml_anchors:` key +(configurable via `--anchors-key`). + +```bash +map_analyser.py minify my_map.tmap2.yaml +map_analyser.py minify my_map.tmap2.yaml -o compact.tmap2.yaml +map_analyser.py minify my_map.tmap2.yaml --strip-unreachable Charging +``` + +If `-o`/`--output` is omitted, the output path is derived from the +input file by inserting `.min` before the extension, e.g. +`my_map.tmap2.yaml` -> `my_map.min.tmap2.yaml`. + +Anchor names are chosen from the map's schema/content (e.g. +`properties_row_entry`, `verts_2x2`) rather than being generic +auto-generated ids, so the minified file stays human-readable. + +| Switch | Meaning | Default | +|--------|---------|---------| +| `--anchors` / `--no-anchors` | Collapse repeated subtrees into named anchors | enabled | +| `--anchors-key KEY` | Top-level key name to collect anchors under | `__yaml_anchors` | +| `--strip-comments` | Drop the file's leading comment block | disabled (comments kept) | +| `--flowstyle` | Emit compact flow-style YAML instead of block style | disabled | +| `--min-size N` | Minimum serialised size (chars) of a subtree to qualify for anchoring | `100` | +| `--min-occurrences N` | Minimum number of repeats required for a subtree to qualify for anchoring | `5` | +| `--strip-unreachable NODE` | Also drop nodes/edges not reachable via a directed path from `NODE` | disabled | + +Notes: + +* Only the leading top-of-file comment block is preserved; inline/ + per-node comments are not (the tool re-serialises the map from its + parsed data structure, like the rest of this codebase). +* `--strip-unreachable NODE` computes the directed descendants of + `NODE` (plus `NODE` itself) and keeps only those. This guarantees + the result has no orphaned nodes (other than possibly `NODE` itself, + if nothing points back to it) and is a single connected sub-map, so + it always passes the `orphaned-node` and `sub-map-separation` checks. +* The tool re-parses its own output and schema-validates the written file, to catch any minification bug; it logs a summary of the size savings achieved. + +## `merge` command + +Combines two or more `.tmap2.yaml` maps into a single schema-valid map, +for example when several fields/sites were mapped independently and +need to be navigated as one graph. + +```bash +map_analyser.py merge map_a.tmap2.yaml map_b.tmap2.yaml +map_analyser.py merge map_a.tmap2.yaml map_b.tmap2.yaml -o merged.tmap2.yaml +map_analyser.py merge map_a.tmap2.yaml map_b.tmap2.yaml map_c.tmap2.yaml --name my_merged_map +map_analyser.py merge map_a.tmap2.yaml map_b.tmap2.yaml --connect-closest +``` + +If `-o`/`--output` is omitted, the output path is derived from the +first input file by inserting `.merged` before the extension, e.g. +`map_a.tmap2.yaml` -> `map_a.merged.tmap2.yaml`. + +Merge rules: + +* **Reference origin** \u2013 the first map's `meta.origin` (GPS + latitude/longitude/altitude) is used as the reference frame. Every + other map's nodes are reprojected (via `pyproj`, using an azimuthal + equidistant projection centred on the reference point) into metres + offset from that origin, and shifted accordingly. If a map has no + real GPS origin (missing, or `latitude`/`longitude` both `0`), its + positions are merged unchanged and a warning is recorded; if the + *reference* map itself has no real origin, reprojection is skipped + for all maps. +* **Node/edge name deduplication** \u2013 node names and edge IDs must be + globally unique in the merged map. Colliding names from the second + and subsequent maps are renamed with a numeric suffix (`WP1` -> + `WP1_2` -> `WP1_3`, ...), a warning is recorded for each rename, and + every edge referencing a renamed node is updated to point at the new + name. +* **Connecting the maps** – by default, each input map remains its own + disconnected sub-map in the merged graph (see `--sub-map-separation` + above). Pass `--connect-closest` to automatically link every map to + the growing merged map with a new bidirectional edge between their + closest pair of nodes (straight-line distance in the merged/ + reprojected frame), producing a single connected graph. The action + and action type used for these edges default to `navigate_to_pose` / + `nav2_msgs/action/NavigateToPose` and can be overridden with + `--connect-action` / `--connect-action-type`. Connecting edge IDs are + named `connect__`; the merge report lists every + connecting edge under `[Connecting edges]` with the distance covered. +* **Metadata merge** – top-level keys (`name`, `metric_map`, + `pointset`, `transformation`, `definitions`, `actions`, + `navigation_config_file`) and `meta` subkeys use + first-map-precedence: the first map's value is kept and a warning is + recorded if a later map defines a conflicting value. Two exceptions: + `meta.origin` always comes from the reference map, and + `meta.fields` (field/boundary definitions) are concatenated across + all maps with `field_number` renumbered sequentially to avoid + collisions. `meta.last_updated` is always regenerated. +* **Schema validity** \u2013 the merged output is always re-validated + against `config/tmap-schema.yaml` before the command reports + success; the merge report includes a `[Schema validation of merged + output]` section. + +The `--name` argument overrides the merged map's +`name`/`metric_map`/`pointset` fields (otherwise the first map's values +are kept, per the metadata merge rule above). + +## `check` command exit codes + +The `check` command is designed for use in a GitHub Actions workflow: + +| Exit code | Meaning | +|-----------|---------| +| `0` | Map is valid | +| `1` | Map is invalid | +| `2` | Map file not found, or another error occurred while loading it | + +With the default severities, a map is considered **valid** if: + +1. It is compliant with the JSON schema. +2. It has no orphaned nodes (nodes unreachable via any incoming edge). +3. No two influence zones overlap, and no node's position falls + inside another node's influence zone. + +Disconnected sub-maps are **not** treated as a validity failure: they +are printed as a warning in the report, since it is often expected for +a map to contain isolated auxiliary nodes (e.g. no-go zones, topic +localisation markers) that are not part of the main navigable graph. + +## Example GitHub workflow + +See `.github/workflows/map-analyser.yaml` for a workflow that runs +`map_analyser.py check` against every `.tmap2.yaml`/fixture map in the +repository and uploads the generated SVG files as a workflow artefact. diff --git a/topological_navigation/doc/NAVIGATION2.md b/topological_navigation/doc/NAVIGATION2.md new file mode 100644 index 00000000..7b0749ce --- /dev/null +++ b/topological_navigation/doc/NAVIGATION2.md @@ -0,0 +1,587 @@ +# navigation2.py: Map-Driven Topological Navigation Server + +This document describes the ROS 2 node implemented in `topological_navigation/scripts/navigation2.py`, including how it interacts with the rest of the topological navigation stack. + +## Purpose + +`navigation2.py` is the execution engine for topological navigation: + +- Accepts high-level goals (`GotoNode`, `ExecutePolicyMode`) +- Plans graph routes using NetworkX +- Converts route edges into executable action segments +- Dynamically builds Nav2 action goals from map-defined templates +- Executes each segment through ROS 2 `ActionClient`s +- Publishes route, status, edge, boundary, and timing telemetry + +The script is **map-driven**: action behavior, action server bindings, and behavior tree templates come from the topological map YAML (`definitions` + `actions` sections). + +--- + +## Runtime Context in the Stack + +`navigation2.py` depends on two upstream nodes at startup: + +1. **Map manager (`map_manager2.py`)** + - Publishes `/topological_map_2` (latched / transient local) + - Provides the full map content used to build route graph and action config + +2. **Localisation (`localisation2.py`)** + - Publishes `closest_node`, `current_node`, `closest_edges` (latched) + - Supplies robot topological position and closest-edge heuristic input + +Typical launch order (see `launch/topological_navigation.launch.py`): map manager -> localisation -> navigation server. + +--- + +## ROS Interfaces Exposed by navigation2.py + +## Subscriptions + +- `/topological_map_2` (`std_msgs/String`, transient local) +- `closest_node` (`std_msgs/String`, transient local) +- `closest_edges` (`topological_navigation_msgs/ClosestEdges`, transient local) +- `current_node` (`std_msgs/String`, transient local) + +## Publishers + +- `topological_navigation/Statistics` (`topological_navigation_msgs/NavStatistics`, latched) +- `topological_navigation/Route` (`topological_navigation_msgs/TopologicalRoute`, best effort) +- `current_edge` (`std_msgs/String`, latched) +- `/boundary_checker` (`geometry_msgs/PolygonStamped`, latched) +- `/robot_operation_current_status` (`std_msgs/String`, latched) +- `topological_navigation/move_action_status` (`std_msgs/String`, latched) +- Action feedback topics for both action servers + +## Action servers + +- `/` (`topological_navigation_msgs/action/GotoNode`) +- `/topological_navigation/execute_policy_mode` (`topological_navigation_msgs/action/ExecutePolicyMode`) + +## Service client + +- `//set_parameters` (`rcl_interfaces/srv/SetParameters`) + - Used to push per-segment ROS 2 parameters (goal tolerances, action + parameters) and restore previous values after segment completion +- `//get_parameters` (`rcl_interfaces/srv/GetParameters`) + - Used to query current ROS 2 parameter values so they can be saved and + restored around each segment + +--- + +## Main Lifecycle + +### 1) Construction and state initialization + +`TopologicalNavServer` initializes: + +- State machine (`NavStateMachine`) from `navigation_graph.py` +- Internal map/graph buffers (`_tmap`, `_graph`, pending map update buffer) +- Runtime flags (cancel/preempt/goal reached) +- QoS profiles (`_latch`, `_best`) +- Route/status/statistics publishers + +### 2) Blocking wait for first map + +The node subscribes to `/topological_map_2` and blocks until first map arrives. + +On first map application: + +- YAML parsed with `_FloatSafeLoader` +- Graph built via `build_graph_from_tmap()` (from `networkx_utils.py`) +- Map ID fields cached (`_topol_map`) +- Map-driven action configuration loaded (`_load_map_config`) + +### 3) Build map-driven action clients + +From map `actions` section: + +- Dynamically imports each `action_type` +- Creates/reuses `ActionClient`s by `action_server` +- Resolves behavior tree template references (`${definitions.}` -> temp XML file) + +Result: `self._action_clients[action_name] = {client, action_class, config}`. + +### 4) Blocking wait for localisation + +Subscribes to `closest_node` and blocks until first localisation message. + +Then subscribes to `closest_edges` and `current_node` for continuous updates. + +### 5) Action servers become READY + +Creates both action servers and transitions state machine to `READY`. + +--- + +## Route Planning and Execution Flow + +Before either action entry point can plan or execute a route, the robot pose +must be available in the coarse main-map frame and occupy a known-free (`0`) +cell in the published main occupancy grid. Unknown (`-1`), occupied (`100`), +and out-of-grid positions are outside. This check fails closed: the server +does not plan a route, generate `/topo_map_route_segment`, or send a Nav2 goal +when the pose cannot be proven to be inside the main map. The latched operation +status is set to `OUTSIDE_MAIN_MAP`, `ROBOT_POSE_UNAVAILABLE`, or +`MAIN_MAP_UNAVAILABLE`, as appropriate. + +## Goal entry points + +- `GotoNode`: plan from current estimated origin to target +- `ExecutePolicyMode`: execute caller-provided route (after sanity checks) + +## Origin determination + +`_determine_origin(target)` priority: + +1. `current_node` if known +2. Closest-edge heuristic if edge distance <= `max_dist_to_closest_edge` +3. `closest_node` + +For equal-distance dual edges, compares route distance from candidate sources. + +## Route planning + +Uses `plan_route()` from `navigation_graph.py` with parameters: + +- `route_algorithm`: `astar` (default) or `dijkstra` +- `route_weight_attr`: edge attribute used as cost (default `weight`) + +## Segment generation + +From planned nodes: + +1. `get_route_edges()` to expand node list into edge dicts +2. `merge_action_segments()` to group consecutive compatible edges + - Controlled by map action config `composable` + - Edges with empty or absent `properties` are *transparent*: they merge freely + into any segment regardless of that segment's parameters + - Two edges that each carry different non-empty `properties` force a split, + ensuring each resulting segment has a consistent parameter set + +## Segment execution + +For each segment: + +- Transition to action-specific execution state (`ACTION_TO_STATE`) +- Publish boundary polygon when boundary properties exist +- Apply ROS 2 parameters at segment entrance and restore them after exit (`_apply_segment_parameters` / `_restore_segment_parameters`), on the goal-checker node and on any node named by `set_ros_params` +- Build goal dynamically from map template (`_build_segment_goal`) +- Dispatch goal with `_send_nav2_goal` +- Publish move status + nav statistics +- Fail/cancel handling updates state machine and feedback +- Parameters are restored in a `try/finally` block, so they are always + undone regardless of segment outcome (success, failure, cancellation) + +--- + +## Mid-Navigation Map Updates + +`navigation2.py` supports runtime map updates with deferred application: + +- Incoming map messages are buffered (`_pending_map_msg`) +- If robot is navigating, update is postponed to safe points (between segments) +- At safe point, `_apply_pending_map()` rebuilds graph/config +- Remaining route validity checked by `_validate_remaining_route()` + +If remaining nodes/edges no longer exist: + +- Current execution returns `False` +- `_map_updated_during_nav` is set +- `_navigate()` triggers a full replan from current situation + +This design avoids mutating route structures while a segment is in flight. + +--- + +## Boundary Polygon Behavior + +Boundary publishing is delegated to `compute_boundary_polygon()` in `navigation_graph.py`. + +Trigger condition: + +- Any edge in segment contains `properties.boundary_left` or `properties.boundary_right` + +Behavior: + +- Computes corridor polygon around segment waypoints +- Publishes to `/boundary_checker` in node nav frame +- Publishes empty polygon when no boundary applies (clears stale boundary) + +Defaults controlled by parameters: + +- `default_boundary_left` +- `default_boundary_right` + +--- + +## Map Schema Expectations Relevant to navigation2.py + +Although validation is performed upstream in map manager, `navigation2.py` expects: + +- `nodes[*].node.name` +- `nodes[*].node.pose.{position,orientation}` +- `nodes[*].node.edges[*].{edge_id,node,action}` +- `actions` dictionary with per-action config +- Optional `definitions` dictionary for inline BT XML +- Optional `navigation_config_file` path pointing at a second YAML file + that contains the top-level `definitions` and `actions` sections +- `transformation.topo_frame_id` (or fallback) for pose frame defaults + +The recommended sidecar name is `topological_navigation_config.yaml`. It can +be referenced from the map with `navigation_config_file` or passed explicitly +to launch/CLI tools with `navigation_config_file` / +`--navigation-config-file`. Relative sidecar paths are resolved against the +main map file. + +Action config shape (typical): + +```yaml +actions: + navigate_to_pose: + action_type: nav2_msgs.action.NavigateToPose + action_server: /navigate_to_pose + composable: false + action_goal_template: + pose: + header: + frame_id: ${node.nav_frame} + pose: ${node.pose} + behavior_tree: ${definitions.default_bt} +``` + +The optional `ros_parameters` key in an action config maps **edge property +names** to **ROS 2 parameter names** on the goal-checker node. When a segment +is entered the navigation server reads the current parameter values, applies the +values from the segment's edge properties, and restores the originals after the +segment exits — regardless of whether the segment succeeded, failed, or was +cancelled. + +```yaml +actions: + row_traversal: + composable: true + action_type: nav2_msgs.action.NavigateThroughPoses + action_server: /navigate_through_poses + ros_parameters: + # edge property name → ROS 2 parameter path on goal_checker_node + max_speed: FollowPath.max_robot_speed + action_goal_template: + poses: + - header: + frame_id: ${node.nav_frame} + pose: ${node.pose} + behavior_tree: ${definitions.row_traversal_bt} +``` + +With this config, an edge that carries `properties: {max_speed: 0.3}` will +cause the server to set `FollowPath.max_robot_speed = 0.3` before executing the +segment and restore the previous value afterwards. + +Edge `properties` are optional on every edge. Edges without properties (or +with empty properties `{}`) are *transparent* from a parameter perspective — +they inherit the effective parameters of the segment they are merged into. This +means you only need to set parameters on the **first edge of an aisle** and they +will apply for the entire aisle segment: + +```yaml +# Entry edge – carries the speed limit for the whole aisle +- edge_id: N3_N4 + action: row_traversal + node: N4 + properties: + max_speed: 0.3 # applied for the whole N3→N4→N5 segment + +# Subsequent edge – no properties, inherits max_speed: 0.3 +- edge_id: N4_N5 + action: row_traversal + node: N5 + # properties: {} (absent or empty — transparent) +``` + +--- + +## Dynamic ROS 2 Parameter Binding + +`navigation2.py` applies two categories of ROS 2 parameters at segment +entrance and restores them after exit. + +### Node-level goal tolerances + +If the **target node** of a segment carries `xy_goal_tolerance` or +`yaw_goal_tolerance` in its `properties`, those values are pushed to the +goal-checker node before the segment executes: + +```yaml +nodes: + - node: + name: TightDockingNode + properties: + xy_goal_tolerance: 0.02 + yaw_goal_tolerance: 0.01 +``` + +The node-level parameters that receive these values are configurable: + +- `xy_tolerance_param` (default `goal_checker.xy_goal_tolerance`) +- `yaw_tolerance_param` (default `goal_checker.yaw_goal_tolerance`) + +### Edge-level action parameters + +Any edge property listed in an action's `ros_parameters` map is pushed before +the segment runs. The mapping is `{edge_property_name: ros2_param_name}`. +Only properties actually present in the segment's effective parameters (see +segment merging rules) are applied. + +### Arbitrary node parameters — `set_ros_params` + +`ros_parameters` can only target the goal-checker node and only forwards values +that come from an edge property. `set_ros_params` lifts both restrictions: it +sets **constant values** on **any node**, for the duration of the segment. + +Declare it on the action to apply it to every edge using that action: + +```yaml +actions: + row_traversal: + composable: true + action_type: nav2_msgs.action.NavigateThroughPoses + action_server: /navigate_through_poses + set_ros_params: + collision_monitor: + FootprintApproach.enabled: false + action_goal_template: ... +``` + +…and/or on an individual edge to override the action-level value. The merge is +per node **and** per parameter, so an edge can flip one parameter while keeping +the rest of the action's defaults: + +```yaml +- edge_id: N3_N4 + action: row_traversal + node: N4 + properties: + set_ros_params: + collision_monitor: + FootprintApproach.enabled: true # override just for this segment +``` + +Three authoring styles are accepted in both places: + +| Style | Example | +|---|---| +| Node-keyed mapping | `{collision_monitor: {FootprintApproach.enabled: false}}` | +| Flat mapping (goal-checker node) | `{FollowPath.max_robot_speed: 0.3}` | +| List of entries | `[{node: collision_monitor, param: FootprintApproach.enabled, value: false}]` | + +List entries accept either `param` + `value` or a `params` mapping, and the +`node` may be written with or without a leading `/`. Values may be `bool`, +`int`, `float` or `str`. + +Parameter clients for non-goal-checker nodes are created on first use and +cached. As with the other sources, the previous values are read back before the +change and restored when the segment exits. The precedence order when several +sources set the same parameter is: + +1. node goal tolerances → 2. `ros_parameters` → 3. action `set_ros_params` → +4. edge `set_ros_params` (highest). + +Worked examples: [SET_ROS_PARAMS.md](SET_ROS_PARAMS.md). + +### Save / restore guarantee + +Before any parameter is changed, its current value is queried via +`GetParameters`. After the segment exits (in a `try/finally`), the saved +values are restored via `SetParameters`. Both operations are best-effort: +if the parameter service is unavailable the segment still executes with the +currently configured values and no restoration is attempted. + +--- + +## Module Interaction Details + +## With `networkx_utils.py` + +- `build_graph_from_tmap()` provides normalized graph attributes used by planner and goal builders: + - Node coordinates, orientation, properties, `nav_frame` + - Edge metadata (`edge_id`, `action`, `action_type`, `properties`, `weight`) + +`navigation2.py` relies on these attributes for: + +- shortest-path planning +- route edge extraction +- dynamic pose generation +- frame resolution +- property-based tolerances + +## With `navigation_graph.py` + +Directly uses: + +- `NavState`, `NavStateMachine`, `ACTION_TO_STATE` +- `plan_route()` +- `get_route_edges()` +- `merge_action_segments()` +- `compute_boundary_polygon()` +- `get_route_distance()` + +This module holds most pure planning/state logic; `navigation2.py` orchestrates ROS I/O and action execution. + +## With `tmap_utils.py` + +Uses: + +- `get_node_from_tmap2()` as fallback when graph-based node lookup fails +- `get_edge_from_id_tmap2()` for policy-mode route edge resolution and segment preflight + +## With `localisation2.py` + +Consumes localisation outputs: + +- `closest_node` for route start fallback +- `current_node` for strongest origin evidence +- `closest_edges` for edge-based origin heuristic + +If localisation is unavailable, server intentionally blocks during startup waiting for first message. + +## With `map_manager2.py` + +Depends on `/topological_map_2` as source of truth. + +QoS compatibility is important: + +- map manager publishes with transient local durability +- navigation server subscribes with transient local durability +- late joiner still receives latest map + +--- + +## Concurrency and Thread Safety + +Key mechanisms: + +- `MultiThreadedExecutor` +- Reentrant callback groups for map and action servers +- `_map_lock` (`RLock`) protecting pending/current map mutation + +Design choice: + +- Nav2 futures are polled with `time.sleep()` in `_send_nav2_goal` +- avoids `spin_once()` conflict with external executor ownership + +--- + +## Parameters + +Declared and loaded in `_declare_parameters()` / `_load_parameters()`: + +- `max_dist_to_closest_edge` (double, default `1.0`) +- `default_boundary_left` (double, default `0.5`) +- `default_boundary_right` (double, default `0.5`) +- `route_algorithm` (string, `astar`|`dijkstra`, default `astar`) +- `route_weight_attr` (string, default `weight`) +- `goal_checker_node` (string, default `controller_server`) +- `xy_tolerance_param` (string, default `goal_checker.xy_goal_tolerance`) +- `yaw_tolerance_param` (string, default `goal_checker.yaw_goal_tolerance`) + +--- + +## Failure/Recovery Semantics + +Common failure points and behavior: + +- Missing target node -> immediate `FAILED` +- No route found -> immediate `FAILED` +- Action type import failure in map config -> action skipped/unavailable +- Nav2 server unavailable -> segment `FAILED` +- Mid-route map invalidates remaining path -> force replan +- Cancel/preempt -> propagate cancel to Nav2 and transition `CANCELLED` + +Statistics are still published on failed segments when sufficient context exists. + +--- + +## Extension Guide + +Safe extension points: + +1. **New edge action types** + - Add action definition to map `actions` + - Ensure `action_type` import path is valid + - Provide compatible `action_goal_template` + +2. **Custom route costs** + - Add edge property used as weight + - Set `route_weight_attr` accordingly + +3. **Boundary behavior tuning** + - Use edge properties `boundary_left/right` + - or change default boundary parameters + +4. **Goal tolerance policies** + - Provide per-node tolerances in node `properties` + - map to correct Nav2 parameter names via `xy_tolerance_param` / `yaw_tolerance_param` + +5. **Dynamic ROS 2 parameters per segment** + - Add a `ros_parameters` key to the relevant action config + - Map edge property names to ROS 2 parameter paths on the goal-checker node + - Set the desired property on the entry edge of each aisle / segment + - Edges without properties are transparent and inherit the segment's values + +6. **Parameters on other nodes (e.g. disabling a collision-monitor polygon)** + - Add `set_ros_params` to the action config for the global default + - Override it in an edge's `properties` where a specific segment differs + +--- + +## Backward Compatibility with Existing Topological Maps + +This release is **fully backward compatible**. Existing maps that do not use +edge `properties` or the `ros_parameters` action key will behave identically +to previous versions: + +| Map feature | Behaviour | +|---|---| +| Edges with no `properties` key | Treated as empty (`{}`); transparent — always merge with adjacent same-action edges | +| Edges with `properties: {}` | Same as above | +| Edges with `properties: null` | Normalised to `{}`; same as above | +| `ros_parameters` absent from action config | No dynamic parameters are applied or restored | +| `set_ros_params` absent from action config and edge properties | No dynamic parameters are applied or restored | +| Node `properties` without `xy_goal_tolerance` / `yaw_goal_tolerance` | No tolerance change | + +**No changes to map YAML files are required.** + +The only behaviour change relative to the *prior* implementation is that the +old `_set_goal_tolerances` / `_tolerance_set_cb` pair (which only set, never +restored) has been replaced by `_apply_segment_parameters` / +`_restore_segment_parameters`, which additionally saves the previous values and +restores them after each segment. For maps that relied on goal tolerances +being *permanent* (i.e. set once and left) this means tolerances now reset to +their pre-segment values after each segment. If you want a tolerance to +persist across segments, either set it identically on every relevant node or +configure it as the static default in your Nav2 controller configuration. + +--- + +## Operational Tips + +- If node hangs at startup, confirm latched map/localisation topics are present. +- If planning fails unexpectedly, verify edge directionality in map graph. +- If frame mismatches occur, check map `transformation.topo_frame_id`, node `nav_frame`, and Nav2 frame expectations. +- For policy execution, ensure route starts at current/closest node. + +--- + +## Related Files + +- `topological_navigation/scripts/navigation2.py` +- `topological_navigation/navigation_graph.py` +- `topological_navigation/networkx_utils.py` +- `topological_navigation/scripts/localisation2.py` +- `topological_navigation/scripts/map_manager2.py` +- `topological_navigation/tmap_utils.py` +- `topological_navigation/launch/topological_navigation.launch.py` + +--- + +Last Updated: 2026-09-02 diff --git a/topological_navigation/doc/SET_ROS_PARAMS.md b/topological_navigation/doc/SET_ROS_PARAMS.md new file mode 100644 index 00000000..e2e09153 --- /dev/null +++ b/topological_navigation/doc/SET_ROS_PARAMS.md @@ -0,0 +1,172 @@ +# Setting ROS 2 Parameters from Edge Actions (`set_ros_params`) + +`set_ros_params` lets a topological edge action change ROS 2 parameters on **any +node** while a segment executes, and restores the previous values when the +segment exits (success, failure, or cancellation). + +It can be declared in two places: + +| Where | Scope | +|---|---| +| Action config (`actions:` in the tmap or in the sidecar config file) | Global — every edge that uses that action | +| Edge `properties` in the topomap | Override for that segment only | + +The edge-level declaration is merged over the action-level one **per node and +per parameter**, so an edge can flip a single parameter and still inherit the +rest of the action defaults. + +--- + +## 1. Global — per action + +In [`config/topological_navigation_config.yaml`](../config/topological_navigation_config.yaml) +(or the inline `actions:` section of the tmap): + +```yaml +actions: + row_traversal: + composable: true + action_type: nav2_msgs.action.NavigateThroughPoses + action_server: /navigate_through_poses + set_ros_params: + collision_monitor: + FootprintApproach.enabled: false + action_goal_template: + poses: + - header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.row_traversal_bt}' +``` + +Every `row_traversal` segment now disables `FootprintApproach` on +`/collision_monitor` for the duration of the segment and re-enables it (restores +the pre-segment value) afterwards. + +Several nodes and parameters can be set at once: + +```yaml + set_ros_params: + collision_monitor: + FootprintApproach.enabled: false + PolygonSlow.action_type: none + controller_server: + FollowPath.max_robot_speed: 0.4 +``` + +--- + +## 2. Per edge — in the topomap + +The same key inside an edge's `properties`: + +```yaml +nodes: + - node: + name: N3 + edges: + # Re-enable it for this row only (action default was false) + - edge_id: N3_N4 + action: row_traversal + node: N4 + properties: + set_ros_params: + collision_monitor: + FootprintApproach.enabled: true + + # No declaration -> inherits the action-level default (false) + - edge_id: N3_N9 + action: row_traversal + node: N9 +``` + +> **Segment merging:** consecutive edges with the same action are merged into a +> single goal, and only the **first non-empty** `properties` dict in the segment +> is used. Put `set_ros_params` on the **entry edge** of the row; subsequent +> edges without properties are transparent and inherit it. + +--- + +## 3. Accepted syntaxes + +All three styles work in both the action config and the edge properties. + +**Node-keyed mapping** (recommended): + +```yaml +set_ros_params: + collision_monitor: + FootprintApproach.enabled: false +``` + +**List of entries** — `param`/`value` or a `params` mapping; the node name may +be written with or without a leading `/`: + +```yaml +set_ros_params: + - node: /collision_monitor + param: FootprintApproach.enabled + value: false + - node: controller_server + params: + FollowPath.max_robot_speed: 0.4 +``` + +**Flat mapping** — targets the goal-checker node (`goal_checker_node` +parameter, default `controller_server`): + +```yaml +set_ros_params: + FollowPath.max_robot_speed: 0.4 +``` + +Supported value types: `bool`, `int`, `float`, `str`. + +--- + +## 4. Precedence + +When more than one source sets the same parameter, the last one wins: + +1. Node `properties` goal tolerances (`xy_goal_tolerance` / `yaw_goal_tolerance`) +2. Action `ros_parameters` (edge property → goal-checker parameter mapping) +3. Action `set_ros_params` +4. Edge `properties.set_ros_params` — highest priority + +--- + +## 5. Verifying + +Parameter clients for non-goal-checker nodes are created on first use and +cached. Watch the navigation server log: + +``` +[PARAM] Parameter clients created for node 'collision_monitor' +[PARAM] Segment 'row_traversal': setting ['FootprintApproach.enabled'] on 'collision_monitor' +[PARAM] Restoring 1 parameter(s) on 1 node(s) to pre-segment values +``` + +Or query the target node directly while the robot is in the row: + +```bash +ros2 param get /collision_monitor FootprintApproach.enabled +``` + +All parameter operations are best-effort: if the target node's parameter +services are unavailable the segment still executes with the currently +configured values. + +--- + +## 6. `set_ros_params` vs `ros_parameters` + +| | `ros_parameters` | `set_ros_params` | +|---|---|---| +| Target node | goal-checker node only | any node | +| Value source | an edge property | a constant in the config / edge | +| Declared in | action config only | action config and/or edge properties | + +Use `ros_parameters` when the value varies per edge (e.g. `max_speed`), and +`set_ros_params` when a fixed setting must hold while an action runs. + +See also [NAVIGATION2.md](NAVIGATION2.md) — *Dynamic ROS 2 Parameter Binding*. diff --git a/topological_navigation/doc/TOPO_STATS.md b/topological_navigation/doc/TOPO_STATS.md new file mode 100644 index 00000000..e13cef89 --- /dev/null +++ b/topological_navigation/doc/TOPO_STATS.md @@ -0,0 +1,247 @@ +# Topological Navigation Statistics CLI + +`topo_stats.py` is a stand-alone command-line tool for inspecting the +SQLite database of stored topological maps and recorded traversal +statistics produced by the navigation server (`nav_stats_db.py`). Like +`map_analyser.py`, it requires no ROS 2 runtime -- it only depends on +`pyyaml`, `networkx` (via `networkx_utils.py`) and, for the `coverage` +command's node filters, the helpers shared with `map_analyser.py` -- so +it can be run locally or in CI. + +```bash +ros2 run topological_navigation topo_stats.py /data/nav_stats.db [sub-command] [options] +# or, without ROS 2: +python3 topological_navigation/topological_navigation/scripts/topo_stats.py \ + /data/nav_stats.db [sub-command] [options] +``` + +There are three top-level commands: [`map`](#map-command), +[`traversals`](#traversals-command) and [`coverage`](#coverage-command). + +## `map` command + +Operations on the `topological_maps` table (each row is one version of +a map, keyed by a short SHA-1 hash of its YAML content). + +| Sub-command | Description | +|-------------|-------------| +| `list` | List all stored maps as a Markdown table. | +| `show ` | Show metadata (name, hash, GPS origin, added_at) for one map. | +| `export ` | Print the stored map's full YAML to stdout. | +| `import ` | Import a `.tmap2.yaml` file into the database. | +| `rm ` | Delete a stored map. | +| `stats ` | Road-network statistics (node/edge counts, total length, bounding-box area). | +| `merge [ ...]` | Merge one or more other database files' maps and traversals into this database. | + +`` is either a map's `map_name` or its `map_hash`. + +```bash +topo_stats.py nav_stats.db map list +topo_stats.py nav_stats.db map show my_field_map +topo_stats.py nav_stats.db map export my_field_map > my_field_map.tmap2.yaml +topo_stats.py nav_stats.db map import /path/to/map.yaml +topo_stats.py nav_stats.db map rm my_field_map +topo_stats.py nav_stats.db map stats my_field_map +``` + +### `map merge` sub-command + +Each run of the navigation system typically records its traversals +into its own database file. Before computing coverage across multiple +runs (see [`coverage`](#coverage-command) below), merge all the run +databases into one: + +```bash +topo_stats.py site.db map merge run2.db run3.db run4.db +``` + +Merging is idempotent for maps: a map already present in the target +database (matched by `map_hash`) is skipped, so merging the same +source database more than once does not duplicate map rows. Traversal +records are always appended (each historical traversal is a distinct +event), so merging the same source twice **will** duplicate its +traversal rows -- only merge each run's database once. + +## `traversals` command + +Analyses the `traversals` table recorded by the navigation server for +a **single** map. + +| Sub-command | Description | +|-------------|-------------| +| `summary` | Overview of traversal counts per map (Markdown table). | +| `edge_stats ` | Per-edge statistics for one map (YAML output). | +| `map_stats ` | Whole-map traversal statistics, with optional top-N failure/success/aborted edge lists (YAML output). | + +All three accept an optional `--filter "SQL_EXPR"` applied as a SQL +`WHERE` expression against the `traversals` table, e.g.: + +```bash +topo_stats.py nav_stats.db traversals summary --filter "start_time > '2024-01-01'" +topo_stats.py nav_stats.db traversals edge_stats my_field_map --filter "status = 'success'" +topo_stats.py nav_stats.db traversals map_stats my_field_map \ + --filter "start_time BETWEEN '2024-01-01' AND '2024-06-01'" \ + --topn_failures=5 --topn_success=5 --topn_aborted=5 +``` + +## `coverage` command + +Computes **route sign-off coverage**: for a set of selected edges +(across one or more maps), how many have at least a configurable +minimum number of recorded *successful* traversals ("covered"), and +how many traversals each edge has recorded in total. This supports a +mapping/deployment QA workflow where a site is only signed off once a +sufficient fraction of its routes have been demonstrably (and +repeatedly) tested. + +| Sub-command | Description | +|-------------|-------------| +| `summary` | Brief Markdown coverage summary (overall + per-tag). | +| `report` | Comprehensive Markdown sign-off report (overall/per-tag/per-edge tables, plus a list of uncovered edges), to stdout or a file. | +| `svg` | Full-map SVG, edges colour-coded by coverage. | + +### Selecting maps + +Every `coverage` sub-command requires exactly one of: + +| Switch | Meaning | +|--------|---------| +| `-m, --map MAP_ID` | Include this map (repeatable, name or hash). | +| `-a, --all` | Include every map stored in the database. | + +When more than one map is selected, their graphs are merged first: +nodes and edges that share the same name/`edge_id` across maps are +treated as a single node/edge for coverage purposes (e.g. a shared +headland or connecting route recorded once in each of several +per-field databases is not double-counted). + +### Selecting nodes (and their incident edges) + +By default every edge in the selected map(s) is included in the +report. To restrict the report to a subset -- e.g. only the rows of +one crop, or only nodes tagged for a particular semantic -- pass one +or more `--filter`/`--exclude` node selectors, using the same DSL as +`map_analyser.py`'s `--grid-angle-filter`: + +* `name:` -- node name matches a shell-style wildcard, e.g. `name:Row*`. +* `tag:` -- any of the node's `meta.tag` entries matches a + shell-style wildcard, e.g. `tag:row_entry` or `tag:vineyard_*`. +* `property:[=]` -- the node's `properties` dict has + (optionally, a specific value at) the given (dotted) key, e.g. + `property:roboflow.enabled` or `property:field=1`. + +Each `--filter`/`--exclude` value can combine several of the terms +above with `and`, `or`, `not` (case-insensitive) and parentheses to +express arbitrary logical combinations, e.g. select nodes that have +roboflow enabled *and* are in field 1 or field 2: + +``` +property:roboflow.enabled and (property:field=1 or property:field=2) +``` + +Operator precedence, from lowest to highest, is `or`, `and`, `not`; +use parentheses to override it. A `--filter`/`--exclude` value with no +operators behaves exactly like a single term. + +A node is selected if it matches any `--filter` (or if no `--filter` +is given, every node is selected), minus any node matched by +`--exclude`. **An edge is selected -- and therefore counted towards +coverage -- if either of its endpoint nodes is selected**, so +filtering by, say, `tag:row_entry` also pulls in the edges leaving the +row-entry nodes towards their neighbours, not just edges between two +row-entry nodes. + +An additional `--sql-filter "SQL_EXPR"` restricts which traversal rows +count towards coverage (e.g. a time window), analogous to +`traversals`' `--filter`. + +### Sign-off threshold (`--min-success`) + +An edge only counts as **covered** once it has at least `--min-success` +recorded successful traversals (default: **2**). This threshold is +configurable per invocation with `--min-success N` on every `coverage` +sub-command (`summary`, `report` and `svg`), and applies consistently +to the covered/uncovered counts, the per-tag breakdown, the "Uncovered +Edges" list and the SVG colour-coding (an edge with at least one, but +fewer than `--min-success`, successes is drawn amber rather than +green -- see the `coverage svg` colour table below). + +```bash +# Require at least 3 successful traversals before an edge counts as signed off +topo_stats.py site.db coverage report -a --min-success 3 -o signoff.md + +# A single successful traversal is enough (more permissive than the default) +topo_stats.py site.db coverage summary -a --min-success 1 +``` + +```bash +# Coverage across every stored map, filtered to nodes tagged row_entry +topo_stats.py site.db coverage summary -a --filter "tag:row_entry" + +# Sign-off report for two named maps, excluding a decommissioned row +topo_stats.py site.db coverage report -m field_a -m field_b \ + --filter "name:Row*" --exclude "name:RowZ*" -o signoff.md + +# Sign-off report restricted to nodes with roboflow enabled in field 1 or 2 +topo_stats.py site.db coverage report -a \ + --filter "property:roboflow.enabled and (property:field=1 or property:field=2)" \ + -o field_1_2_signoff.md + +# Coverage for tunnel 17, but only where roboflow is enabled +topo_stats.py site.db coverage summary -a \ + --filter "property:tunnel=17 and property:roboflow.enabled" + +# SVG for a single map, restricted to a time window +topo_stats.py site.db coverage svg -m field_a -o coverage.svg \ + --sql-filter "start_time > '2024-06-01'" +``` + +### `coverage summary` + +Prints a short Markdown table to stdout: total/covered/uncovered +selected edges, overall coverage percentage, traversal/outcome +counts, and a per-tag breakdown (one row per distinct `meta.tag` value +found on any selected node). + +### `coverage report` + +A comprehensive Markdown report suitable as sign-off evidence, +containing: + +1. An **Overall Coverage** table (same metrics as `summary`, plus + traversal counts split by outcome). +2. A **Coverage by Tag** table. +3. A **Per-Edge Detail** table listing every selected edge's id, + endpoints, action, traversal/outcome counts and covered status. +4. An **Uncovered Edges** list naming every selected edge with fewer + than `--min-success` recorded successful traversals -- the concrete + list of routes that still need to be driven before sign-off. + +Pass `-o/--output FILE` to write the report to a file instead of +stdout. + +### `coverage svg` + +Renders the full merged map as an SVG (`-o/--output FILE` is +required), colour-coding edges by coverage: + +| Colour | Meaning | +|--------|---------| +| Green | Selected edge with at least `--min-success` (default 2) successful traversals -- signed off. | +| Amber | Selected edge with at least one, but fewer than `--min-success`, successful traversals. | +| Red | Selected edge with zero successful traversals. | +| Grey | Edge (or node) not selected by the `--filter`/`--exclude` node selectors. | + +Every node and edge in the map is still drawn -- unselected ones are +simply faded to grey rather than omitted -- so the SVG always shows +the whole map in context, with a legend explaining the colour scale. +An optional `--title "..."` is rendered at the top of the image. + +## Running without ROS 2 + +None of `topo_stats.py`, `nav_stats_db.py` or `coverage_analysis.py` +import any ROS 2 packages, so the `ros2 run topological_navigation +topo_stats.py ...` prefix above can be replaced with a plain `python3 +.../topo_stats.py ...` call in a venv or CI job that has no ROS 2 +installation, exactly as described for `map_analyser.py` in +[MAP_ANALYSER.md](MAP_ANALYSER.md#running-without-ros-2). diff --git a/topological_navigation/doc/WEB_APP.md b/topological_navigation/doc/WEB_APP.md new file mode 100644 index 00000000..c0ef7057 --- /dev/null +++ b/topological_navigation/doc/WEB_APP.md @@ -0,0 +1,157 @@ +# Topological Navigation Web App + +`topological_web_app.py` (package `topological_navigation_visual`) is a ROS 2 +node that serves a browser-based UI for monitoring and commanding a robot on a +topological map. It works on desktops, tablets and phones, needs no internet +connection, and serves everything from a single port (default **8083**). + +```bash +ros2 run topological_navigation_visual topological_web_app.py +# then open http://:8083/ +``` + +The web app is started by default by +`ros2 launch topological_navigation topological_navigation.launch.py` +(disable it with `web_app:=false`, change the port with `web_app_port:=`). + +## Features + +- **Map graph.** The current topological map (`/topological_map_2`) is drawn + as a graph at the nodes' metric positions. You can zoom with the mouse wheel + or pinch, and pan by dragging. **Fit map** and **Centre on robot** reset the + view. +- **Roboflow nodes.** A node whose properties contain `roboflow.enabled: true` + (or the shorthand `roboflow: true`) is drawn in green instead of blue. +- **Node details on hover.** Hovering a node shows its name, pose, outgoing + edges (with their actions) and the full `properties` dictionary. +- **Live robot position.** The panel shows the current node and the closest + node. The map shows the robot's metric pose, looked up in TF between the + map frame and `base_frame`, as a dark disc with a heading arrow. +- **Speed.** Linear speed (m/s) and turn rate (rad/s) are taken from the + odometry topic. +- **Destination and current goal.** The *destination* is the final target of + the navigation goal. The *current goal* is the node the robot is heading for + on the current edge. The current edge is highlighted in red. +- **Send the robot.** Clicking a node and confirming sends a `GotoNode` goal. +- **Cancel.** **Cancel goal** cancels the active navigation, including goals + sent by other clients such as the CLI or RViz. +- **Route highlighting.** While the robot is navigating, the planned route + (`/topological_navigation/Route`) is highlighted in orange. + +## Stateless, synchronised clients + +The backend holds all state. Browsers keep only purely visual state, such as +the zoom level or the hovered node. They render whatever the backend pushes +over a [Server-Sent Events](https://developer.mozilla.org/docs/Web/API/Server-sent_events) +stream. Every client that has the page open shows the same map, robot, goal +and route. A goal sent or cancelled from one browser, or from outside the web +app, appears in all of them right away. Clients reconnect automatically if the +connection drops. + +## HTTP API + +| Method | Path | Description | +|--------|------|-------------| +| `GET` | `/` | The web UI | +| `GET` | `/api/state` | JSON snapshot of robot and navigation state | +| `GET` | `/api/map` | JSON graph of the current map (`nodes`, `edges`, `frame`, `name`) | +| `GET` | `/api/events` | SSE stream with `map` events (when the map changes) and `state` events (rate-limited by `update_rate`) | +| `POST` | `/api/goto` | Body `{"node": ""}`: send the robot to a node (`202`, `404` for unknown node, `503` if the action server is unavailable) | +| `POST` | `/api/cancel` | Cancel all goals on the navigation action server | + +POST requests must use `Content-Type: application/json`. + +## Offline assets + +The front end uses [React](https://react.dev/) 18 with +[htm](https://github.com/developit/htm) as a build-free JSX alternative, and +[cytoscape.js](https://js.cytoscape.org/) for the graph view. The +production builds of these libraries are bundled in +`topological_navigation_visual/web/vendor/` (licences in +`THIRD_PARTY_LICENSES.txt`) and installed as Python package data. Nothing is +loaded from the internet, and no Node.js or npm build step is needed. + +## Deploying behind a reverse proxy (URL prefix) + +All URLs used by the page (assets, API and event stream) are **relative**, so +the app can be served under any URL prefix, such as +`https://example.org/robot1/topo/`. If the page is opened without the trailing +slash, it redirects to the URL with one so that relative paths resolve below +the prefix. Configure the proxy to strip the prefix and to not buffer the +event stream. For example, with nginx: + +```nginx +location /robot1/topo/ { + proxy_pass http://robot1:8083/; # trailing slash strips the prefix + proxy_http_version 1.1; + proxy_set_header Connection ""; + proxy_buffering off; # required for Server-Sent Events + proxy_read_timeout 1h; +} +``` + +## Parameters + +| Parameter | Type | Default | Description | +|-----------|------|---------|-------------| +| `port` | int | `8083` | HTTP port serving both the UI and the API | +| `host` | string | `"0.0.0.0"` | Interface to bind to (use `127.0.0.1` to restrict to local access) | +| `odom_topic` | string | `"/odometry/global"` | `nav_msgs/Odometry` topic for the speed display | +| `base_frame` | string | `"base_link"` | Robot frame looked up in TF for the metric position | +| `map_frame` | string | `""` | Fixed frame for the TF lookup; empty uses the map's `transformation.topo_frame_id` (or `map`) | +| `action_name` | string | `"/topological_navigation"` | `GotoNode` action server used to send and cancel goals | +| `pose_rate` | double | `5.0` | Rate (Hz) of the TF pose lookup | +| `update_rate` | double | `10.0` | Maximum rate (Hz) at which state updates are pushed to each client | +| `web_root` | string | `""` | Directory with an alternative front end; empty uses the bundled assets | + +## ROS interfaces + +**Subscribed topics** + +| Topic | Type | Purpose | +|-------|------|---------| +| `/topological_map_2` | `std_msgs/String` | Topological map (JSON) | +| `/current_node`, `/closest_node` | `std_msgs/String` | Topological localisation | +| `` | `nav_msgs/Odometry` | Robot speed | +| `/topological_navigation/Route` | `TopologicalRoute` | Planned route (highlighted while navigating) | +| `/current_edge` | `std_msgs/String` | Edge currently being traversed | +| `/topological_navigation/move_action_status` | `std_msgs/String` | Current goal and final destination (JSON) | +| `/robot_operation_current_status` | `std_msgs/String` | Navigation status (e.g. `EXECUTING`, `SUCCEEDED`) | +| `/_action/status` | `action_msgs/GoalStatusArray` | Detects active goals, including those from other clients | + +**TF:** `` → `base_frame`. + +**Action and service clients** + +| Name | Type | Purpose | +|------|------|---------| +| `` | `topological_navigation_msgs/action/GotoNode` | Send the robot to the clicked node | +| `/_action/cancel_goal` | `action_msgs/srv/CancelGoal` | Cancel all active goals | + +## Security note + +The web app has no authentication. Anyone who can reach the port can send the +robot to a node or cancel navigation. On untrusted networks, bind it to +`127.0.0.1` (`host` parameter) and put an authenticating reverse proxy in +front of it. + +## Development + +Edit `web/app.js`, `web/style.css` or `web/index.html` directly; there is no +build step. With `colcon build --symlink-install`, reloading the browser is +enough to pick up edits to existing files. New files are only served after a +node restart, because the server indexes the allowed static files at startup +and never maps request paths directly onto the filesystem. The backend is split into ROS-independent modules +that can be tested with plain `pytest`: + +- `web_state.py`: thread-safe state store and map conversion +- `web_server.py`: HTTP server, static files, SSE and command endpoints + +```bash +cd topological_navigation_visual +python -m pytest test/test_web_state.py test/test_web_server.py -v +``` + +--- + +**Last Updated**: 2026-10-12 diff --git a/topological_navigation/launch/manual_topomapping.launch.py b/topological_navigation/launch/manual_topomapping.launch.py deleted file mode 100644 index cc84a844..00000000 --- a/topological_navigation/launch/manual_topomapping.launch.py +++ /dev/null @@ -1,42 +0,0 @@ -''' -Author: Ibrahim Hroob 2024 -''' -import os -from launch import LaunchDescription -from launch.actions import DeclareLaunchArgument -from launch.substitutions import LaunchConfiguration -from launch_ros.actions import Node - -def generate_launch_description(): - return LaunchDescription([ - # Declare the launch arguments - DeclareLaunchArgument('tmap', default_value='test.yaml'), - DeclareLaunchArgument('tmap_dir', default_value='/home/ros/tmap'), - DeclareLaunchArgument('node_thresh', default_value='0.5'), - DeclareLaunchArgument('lock_btn', default_value='6'), - DeclareLaunchArgument('add_btn', default_value='1'), - DeclareLaunchArgument('remove_btn', default_value='2'), - DeclareLaunchArgument('gen_map_btn', default_value='3'), - DeclareLaunchArgument('topic_joy', default_value='/joy'), - DeclareLaunchArgument('topic_pose', default_value='/gps_base/odometry'), - - # Launch the manual_topomapping node - Node( - package='topological_navigation', - executable='manual_topomapping.py', - name='manual_topomapping', - output='screen', - parameters=[{ - 'tmap' : LaunchConfiguration('tmap'), - 'tmap_dir' : LaunchConfiguration('tmap_dir'), - 'site_name' : LaunchConfiguration('tmap'), - 'node_thresh': LaunchConfiguration('node_thresh'), - 'lock_btn' : LaunchConfiguration('lock_btn'), - 'add_btn' : LaunchConfiguration('add_btn'), - 'remove_btn' : LaunchConfiguration('remove_btn'), - 'gen_map_btn': LaunchConfiguration('gen_map_btn'), - 'topic_joy' : LaunchConfiguration('topic_joy'), - 'topic_pose' : LaunchConfiguration('topic_pose'), - }] - ), - ]) diff --git a/topological_navigation/launch/minimal_topological_navigation.launch b/topological_navigation/launch/minimal_topological_navigation.launch deleted file mode 100644 index b1867534..00000000 --- a/topological_navigation/launch/minimal_topological_navigation.launch +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/topological_navigation/launch/reconf_at_edges_server.launch b/topological_navigation/launch/reconf_at_edges_server.launch deleted file mode 100644 index 17b4d80e..00000000 --- a/topological_navigation/launch/reconf_at_edges_server.launch +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/topological_navigation/launch/topo_nav_global.launch b/topological_navigation/launch/topo_nav_global.launch deleted file mode 100644 index bfdb1b5d..00000000 --- a/topological_navigation/launch/topo_nav_global.launch +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/topological_navigation/launch/topo_nav_local.launch b/topological_navigation/launch/topo_nav_local.launch deleted file mode 100644 index b842e275..00000000 --- a/topological_navigation/launch/topo_nav_local.launch +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/topological_navigation/launch/topological_map_visualise.launch b/topological_navigation/launch/topological_map_visualise.launch deleted file mode 100644 index 7580bc48..00000000 --- a/topological_navigation/launch/topological_map_visualise.launch +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/topological_navigation/launch/topological_navigation.launch b/topological_navigation/launch/topological_navigation.launch deleted file mode 100644 index 85307e30..00000000 --- a/topological_navigation/launch/topological_navigation.launch +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $(arg move_base_actions) - - - - - - - - - - - - - - - - diff --git a/topological_navigation/launch/topological_navigation.launch.py b/topological_navigation/launch/topological_navigation.launch.py new file mode 100644 index 00000000..d01d8c90 --- /dev/null +++ b/topological_navigation/launch/topological_navigation.launch.py @@ -0,0 +1,304 @@ +#!/usr/bin/env python3 +# Copyright (c) 2026, topological_navigation contributors +# Licensed under the MIT License. +"""Launch the full topological navigation stack with simulation. + +Launches (some components start in parallel): + 1. Map Manager -- loads and publishes the topological map + 2. Localisation and fake Nav2 simulator + 3. Topological navigation server + 4. Topological map visualiser + 5. RViz and topological web app + +Usage +----- +Default (Riseholme map):: + + ros2 launch topological_navigation topological_navigation.launch.py + +Custom map file:: + + ros2 launch topological_navigation topological_navigation.launch.py \ + map_path:=/absolute/path/to/my_map.tmap2.yaml + +Split map and navigation config files:: + + ros2 launch topological_navigation topological_navigation.launch.py \ + map_path:=/absolute/path/to/my_map.tmap2.yaml \ + navigation_config_file:=/absolute/path/to/topological_navigation_config.yaml + +Disable RViz and/or the fake Nav2 server:: + + ros2 launch topological_navigation topological_navigation.launch.py \ + rviz:=false fake_nav2:=false + +Disable the web app or change its port:: + + ros2 launch topological_navigation topological_navigation.launch.py \ + web_app:=false + ros2 launch topological_navigation topological_navigation.launch.py \ + web_app_port:=8090 + +Configure the simulated robot speed and other fake Nav2 parameters:: + + ros2 launch topological_navigation topological_navigation.launch.py \ + robot_speed:=1.2 angular_speed:=2.0 goal_tolerance:=0.1 + +Nodes are started in sequence using event handlers (triggered when the +previous node's process starts) rather than fixed timers, so the stack +comes up as soon as each prerequisite node is actually running. +""" + +import os + +from ament_index_python.packages import get_package_share_directory +from launch import LaunchDescription +from launch.actions import DeclareLaunchArgument, RegisterEventHandler +from launch.conditions import IfCondition +from launch.event_handlers import OnProcessStart +from launch.substitutions import LaunchConfiguration +from launch_ros.actions import Node +from launch_ros.parameter_descriptions import ParameterValue + + +def generate_launch_description(): + topo_nav_share = get_package_share_directory('topological_navigation') + + # --- Default paths --- + default_map = os.path.join( + topo_nav_share, 'config', 'riseholme.tmap3.yaml', + ) + default_rviz = os.path.join( + topo_nav_share, 'rviz', 'topological_navigation.rviz', + ) + + default_navigation_config_file = os.path.join( + topo_nav_share, 'config', 'topological_navigation_config.yaml', + ) + + # ================================================================= + # Launch arguments + # ================================================================= + launch_args = [ + DeclareLaunchArgument( + 'map_path', default_value=default_map, + description=( + 'Absolute path to a .tmap2.yaml or .tmap3.yaml topological map' + ), + ), + DeclareLaunchArgument( + 'navigation_config_file', + default_value=default_navigation_config_file, + description=( + 'Optional path to topological_navigation_config.yaml containing ' + 'the actions and definitions sections' + ), + ), + DeclareLaunchArgument( + 'rviz_config', default_value=default_rviz, + description='Path to the RViz config file', + ), + DeclareLaunchArgument( + 'rviz', default_value='true', + description='Launch RViz (true/false)', + ), + DeclareLaunchArgument( + 'fake_nav2', default_value='true', + description='Launch the fake Nav2 simulator server (true/false)', + ), + # --- Fake Nav2 simulator parameters (passed through to + # topological_nav_simulator/fake_nav2_server) --- + DeclareLaunchArgument( + 'robot_speed', default_value='1.5', + description='Simulated robot linear speed (m/s)', + ), + DeclareLaunchArgument( + 'angular_speed', default_value='4.0', + description='Simulated robot angular speed (rad/s)', + ), + DeclareLaunchArgument( + 'goal_tolerance', default_value='0.15', + description='Distance tolerance for reaching goals (m)', + ), + DeclareLaunchArgument( + 'update_rate', default_value='30.0', + description='TF and marker publish rate (Hz)', + ), + DeclareLaunchArgument( + 'web_app', default_value='true', + description='Launch the topological navigation web app (true/false)', + ), + DeclareLaunchArgument( + 'web_app_port', default_value='8083', + description='HTTP port of the topological navigation web app', + ), + DeclareLaunchArgument( + 'initial_x', default_value='25.75', + description='Initial robot X position', + ), + DeclareLaunchArgument( + 'initial_y', default_value='2.8', + description='Initial robot Y position', + ), + DeclareLaunchArgument( + 'initial_yaw', default_value='0.0', + description='Initial robot yaw (radians)', + ), + DeclareLaunchArgument( + 'map_frame', default_value='map', + description='Map TF frame', + ), + DeclareLaunchArgument( + 'odom_frame', default_value='odom', + description='Odometry TF frame', + ), + DeclareLaunchArgument( + 'base_frame', default_value='base_link', + description='Robot base TF frame', + ), + ] + + # ================================================================= + # 1. Map Manager + # ================================================================= + map_manager_node = Node( + package='topological_navigation', + executable='map_manager2.py', + name='topological_map_manager_2', + output='screen', + arguments=[ + LaunchConfiguration('map_path'), + '--navigation-config-file', + LaunchConfiguration('navigation_config_file'), + ], + ) + + # ================================================================= + # 2. Localisation + # ================================================================= + localisation_node = Node( + package='topological_navigation', + executable='localisation2.py', + name='topological_localisation', + output='screen', + ) + + # ================================================================= + # 3. Fake Nav2 simulator + # ================================================================= + fake_nav2_node = Node( + package='topological_nav_simulator', + executable='fake_nav2_server', + name='fake_nav2_server', + output='screen', + condition=IfCondition(LaunchConfiguration('fake_nav2')), + parameters=[{ + 'robot_speed': LaunchConfiguration('robot_speed'), + 'angular_speed': LaunchConfiguration('angular_speed'), + 'goal_tolerance': LaunchConfiguration('goal_tolerance'), + 'update_rate': LaunchConfiguration('update_rate'), + 'initial_x': LaunchConfiguration('initial_x'), + 'initial_y': LaunchConfiguration('initial_y'), + 'initial_yaw': LaunchConfiguration('initial_yaw'), + 'map_frame': LaunchConfiguration('map_frame'), + 'odom_frame': LaunchConfiguration('odom_frame'), + 'base_frame': LaunchConfiguration('base_frame'), + }], + ) + + # ================================================================= + # 4. Topological navigation server + # ================================================================= + navigation_node = Node( + package='topological_navigation', + executable='navigation2.py', + name='topological_navigation', + output='screen', + parameters=[{ + 'coarse_white_extension_m': 4.0, + 'route_white_extension_m': 2.0, + 'metric_map_resolution': 1.0, + 'route_segment_resolution': 0.05, + 'route_segment_border_width': 0.25, + 'route_segment_padding': 0.0, + }], + ) + + # ================================================================= + # 5. Topological map visualiser + # ================================================================= + visualiser_node = Node( + package='topological_navigation_visual', + executable='topological_map_visualiser.py', + name='topological_map_visualiser', + output='screen', + parameters=[{ + 'edit_mode': True, + }], + ) + + # ================================================================= + # 6. RViz + # ================================================================= + rviz_node = Node( + package='rviz2', + executable='rviz2', + name='rviz2', + output='screen', + condition=IfCondition(LaunchConfiguration('rviz')), + arguments=[ + '-d', LaunchConfiguration('rviz_config'), + ], + ) + + # ================================================================= + # 7. Topological web app + # ================================================================= + web_app_node = Node( + package='topological_navigation_visual', + executable='topological_web_app.py', + name='topological_web_app', + output='screen', + condition=IfCondition(LaunchConfiguration('web_app')), + parameters=[{ + 'port': ParameterValue( + LaunchConfiguration('web_app_port'), value_type=int, + ), + 'base_frame': LaunchConfiguration('base_frame'), + }], + ) + + # ================================================================= + # Process-start events order the launches; they do not wait for the + # preceding node's ROS interfaces or other prerequisites to be ready. + # ================================================================= + event_handlers = [ + RegisterEventHandler( + OnProcessStart( + target_action=map_manager_node, + on_start=[localisation_node, fake_nav2_node], + ), + ), + RegisterEventHandler( + OnProcessStart( + target_action=localisation_node, + on_start=[navigation_node], + ), + ), + RegisterEventHandler( + OnProcessStart( + target_action=navigation_node, + on_start=[visualiser_node], + ), + ), + RegisterEventHandler( + OnProcessStart( + target_action=visualiser_node, + on_start=[rviz_node, web_app_node], + ), + ), + ] + + return LaunchDescription( + launch_args + [map_manager_node] + event_handlers, + ) diff --git a/topological_navigation/launch/topological_navigation_empty_map.launch b/topological_navigation/launch/topological_navigation_empty_map.launch deleted file mode 100644 index 8db6ac7e..00000000 --- a/topological_navigation/launch/topological_navigation_empty_map.launch +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/topological_navigation/launch/topological_restrictions_multirobot.launch b/topological_navigation/launch/topological_restrictions_multirobot.launch deleted file mode 100644 index 1e7c2a39..00000000 --- a/topological_navigation/launch/topological_restrictions_multirobot.launch +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/topological_navigation/package.xml b/topological_navigation/package.xml index b0d2b3e7..b2989af4 100644 --- a/topological_navigation/package.xml +++ b/topological_navigation/package.xml @@ -2,12 +2,13 @@ topological_navigation - 3.0.5 - The ros2 topological_navigation package + 5.0.0 + The ros2 topological_navigation package (ROS1 support removed in v5.0.0) Marc Hanheide James R Heselden + Ibrahim Hroob Jaime Pulido Fentanes Adam Binch @@ -19,24 +20,36 @@ ament_flake8 ament_pep257 python3-pytest + python3-pytest-cov + python3-pytest-mock launch_pytest + python3-hypothesis ament_cmake + python3-networkx + python3-scipy + python3-numpy + python3-jsonschema + python3-pil + python3-yaml + python3-pyproj geometry_msgs std_msgs + std_srvs nav_msgs sensor_msgs - actionlib_msgs + action_msgs visualization_msgs topological_navigation_msgs nav2_msgs + topological_nav_simulator tf_transformations + tf2_ros launch_pytest ament_python - diff --git a/topological_navigation/rviz/topological_navigation.rviz b/topological_navigation/rviz/topological_navigation.rviz new file mode 100644 index 00000000..25e4a63b --- /dev/null +++ b/topological_navigation/rviz/topological_navigation.rviz @@ -0,0 +1,215 @@ +Panels: + - Class: rviz_common/Displays + Help Height: 78 + Name: Displays + Property Tree Widget: + Expanded: + - /Global Options1 + - /Status1 + - /MarkerArray1 + - /MarkerArray1/Topic1 + Splitter Ratio: 0.5 + Tree Height: 406 + - Class: rviz_common/Selection + Name: Selection + - Class: rviz_common/Tool Properties + Expanded: + - /2D Goal Pose1 + - /Publish Point1 + Name: Tool Properties + Splitter Ratio: 0.5886790156364441 + - Class: rviz_common/Views + Expanded: + - /Current View1 + Name: Views + Splitter Ratio: 0.5 + - Class: rviz_common/Time + Experimental: false + Name: Time + SyncMode: 0 + SyncSource: "" +Visualization Manager: + Class: "" + Displays: + - Alpha: 0.5 + Cell Size: 1 + Class: rviz_default_plugins/Grid + Color: 160; 160; 164 + Enabled: true + Line Style: + Line Width: 0.029999999329447746 + Value: Lines + Name: Grid + Normal Cell Count: 0 + Offset: + X: 0 + Y: 0 + Z: 0 + Plane: XY + Plane Cell Count: 10 + Reference Frame: + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: MarkerArray + Namespaces: + /route_edges: true + /route_endpoints: true + /route_label: true + /route_nodes: true + Topic: + Depth: 5 + Durability Policy: Transient Local + History Policy: Keep Last + Reliability Policy: Reliable + Value: /topological_route_visualisation + Value: true + - Class: rviz_default_plugins/InteractiveMarkers + Enable Transparency: true + Enabled: true + Interactive Markers Namespace: /topological_map_editor + Name: InteractiveMarkers + Show Axes: false + Show Descriptions: true + Show Visual Aids: false + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: MarkerArray + Namespaces: + virtual_robot: true + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /virtual_robot/markers + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: MarkerArray + Namespaces: + /edges: true + /legend: true + /names: true + /nodes: true + /zones: true + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /topological_map_visualisation + Value: true + - Class: rviz_default_plugins/MarkerArray + Enabled: true + Name: MarkerArray + Namespaces: + /route_edges: true + /route_endpoints: true + /route_label: true + /route_nodes: true + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /topological_route_visualisation + Value: true + - Alpha: 1 + Class: rviz_default_plugins/Polygon + Color: 25; 255; 0 + Enabled: true + Name: Polygon + Topic: + Depth: 5 + Durability Policy: Volatile + Filter size: 10 + History Policy: Keep Last + Reliability Policy: Reliable + Value: /boundary_checker + Value: true + Enabled: true + Global Options: + Background Color: 48; 48; 48 + Fixed Frame: map + Frame Rate: 30 + Name: root + Tools: + - Class: rviz_default_plugins/Interact + Hide Inactive Objects: true + - Class: rviz_default_plugins/MoveCamera + - Class: rviz_default_plugins/Select + - Class: rviz_default_plugins/FocusCamera + - Class: rviz_default_plugins/Measure + Line color: 128; 128; 0 + - Class: rviz_default_plugins/SetInitialPose + Covariance x: 0.25 + Covariance y: 0.25 + Covariance yaw: 0.06853891909122467 + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /initialpose + - Class: rviz_default_plugins/SetGoal + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /goal_pose + - Class: rviz_default_plugins/PublishPoint + Single click: true + Topic: + Depth: 5 + Durability Policy: Volatile + History Policy: Keep Last + Reliability Policy: Reliable + Value: /clicked_point + Transformation: + Current: + Class: rviz_default_plugins/TF + Value: true + Views: + Current: + Class: rviz_default_plugins/Orbit + Distance: 17.686002731323242 + Enable Stereo Rendering: + Stereo Eye Separation: 0.05999999865889549 + Stereo Focal Distance: 1 + Swap Stereo Eyes: false + Value: false + Focal Point: + X: 5.104556083679199 + Y: 0.9502983093261719 + Z: 0.5616544485092163 + Focal Shape Fixed Size: true + Focal Shape Size: 0.05000000074505806 + Invert Z Axis: false + Name: Current View + Near Clip Distance: 0.009999999776482582 + Pitch: 1.0697963237762451 + Target Frame: + Value: Orbit (rviz) + Yaw: 2.1703968048095703 + Saved: ~ +Window Geometry: + Displays: + collapsed: false + Height: 697 + Hide Left Dock: false + Hide Right Dock: false + QMainWindow State: 000000ff00000000fd0000000400000000000001560000021ffc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003b0000021f000000c700fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000021ffc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000003b0000021f000000a000fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000051d0000003efc0100000002fb0000000800540069006d006501000000000000051d0000025300fffffffb0000000800540069006d00650100000000000004500000000000000000000002ac0000021f00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + Selection: + collapsed: false + Time: + collapsed: false + Tool Properties: + collapsed: false + Views: + collapsed: false + Width: 1309 + X: 0 + Y: 0 diff --git a/topological_navigation/setup.py b/topological_navigation/setup.py index 1b61be9c..f767a1a2 100644 --- a/topological_navigation/setup.py +++ b/topological_navigation/setup.py @@ -6,57 +6,43 @@ setup( name=package_name, - version='3.0.5', + version='5.0.0', # Major version bump - ROS1 code removed packages=find_packages(), data_files=[ ('share/ament_index/resource_index/packages', ['resource/' + package_name]), ('share/' + package_name, ['package.xml']), ('share/' + package_name + '/config/', glob('config/*', recursive=True)), - ('share/' + package_name + '/launch/', glob('launch/*', recursive=True)) + ('share/' + package_name + '/config/', + glob('test/fixtures/*.yaml')), + ('share/' + package_name + '/launch/', glob('launch/*', recursive=True)), + ('share/' + package_name + '/rviz/', glob('rviz/*', recursive=True)), ], - install_requires=['setuptools'], + install_requires=['setuptools', 'Pillow', 'PyYAML'], zip_safe=True, - maintainer='Adam Binch', - maintainer_email='abinch@sagarobotics.com', - description='The ros2 topological_navigation package', + maintainer='Ibrahim Hroob', + maintainer_email='ihroob@lincoln.ac.uk', + description='ROS2 topological navigation package (ROS1 support removed in v4.0.0)', license='MIT', tests_require=['pytest', 'launch-pytest'], entry_points={ 'console_scripts': [ - 'get_simple_policy2.py = topological_navigation.scripts.get_simple_policy2:main', + # Core ROS2 Navigation Nodes + 'navigation2.py = topological_navigation.scripts.navigation2:main', 'localisation2.py = topological_navigation.scripts.localisation2:main', - 'manual_edge_predictions.py = topological_navigation.scripts.manual_edge_predictions:main', 'map_manager2.py = topological_navigation.scripts.map_manager2:main', - 'map_manager.py = topological_navigation.scripts.map_manager:main', - 'map_publisher.py = topological_navigation.scripts.map_publisher:main', - 'mean_based_prediction.py = topological_navigation.scripts.mean_based_prediction:main', - 'nav_client.py = topological_navigation.scripts.nav_client:main', - 'navigation.py = topological_navigation.scripts.navigation:main', - 'navigation2.py = topological_navigation.scripts.navigation2:main', - 'navstats_logger.py = topological_navigation.scripts.navstats_logger:main', - 'reconf_at_edges_server.py = topological_navigation.scripts.reconf_at_edges_server:main', - 'restrictions_manager.py = topological_navigation.scripts.restrictions_manager:main', - 'search_route.py = topological_navigation.scripts.search_route:main', - 'speed_based_prediction.py = topological_navigation.scripts.speed_based_prediction:main', - 'test_top_pred.py = topological_navigation.scripts.test_top_pred:main', - 'topological_prediction.py = topological_navigation.scripts.topological_prediction:main', - 'topological_transform_publisher.py = topological_navigation.scripts.topological_transform_publisher:main', - 'travel_time_estimator.py = topological_navigation.scripts.travel_time_estimator:main', - 'visualise_map2.py = topological_navigation.scripts.visualise_map2:main', - 'visualise_map.py = topological_navigation.scripts.visualise_map:main', - 'visualise_map_ros2.py = topological_navigation.scripts.visualise_map_ros2:main', - 'topomap_marker.py = topological_navigation.topomap_marker:main', - 'topomap_marker2.py = topological_navigation.topomap_marker2:main', - 'policy_marker.py = topological_navigation.policy_marker:main', + + # Supporting Utilities 'manual_topomapping.py = topological_navigation.scripts.manual_topomapping:main', - 'occupancy_checker.py = topological_navigation.scripts.occupancy_checker:main', - 'topological_visual.py = topological_navigation.scripts.topological_visual:main', + 'map_recorder.py = topological_navigation.scripts.map_recorder:main', + 'validate_map.py = topological_navigation.validate_map:main', + 'topo_stats.py = topological_navigation.scripts.topo_stats:main', + 'map_analyser.py = topological_navigation.map_analyser:main', + + # Map conversion + 'convert_tmap.py = topological_navigation.convert_tmap:main', + 'topomap_to_map_image.py = topological_navigation.topomap_to_map_image:main', ], }, ) - - - - diff --git a/topological_navigation/test/__init__.py b/topological_navigation/test/__init__.py new file mode 100644 index 00000000..7b58e2e9 --- /dev/null +++ b/topological_navigation/test/__init__.py @@ -0,0 +1 @@ +"""Test package for topological_navigation.""" diff --git a/topological_navigation/test/conf/network_autogen.tmap2.yaml b/topological_navigation/test/conf/network_autogen.tmap2.yaml deleted file mode 100644 index eca3a7c9..00000000 --- a/topological_navigation/test/conf/network_autogen.tmap2.yaml +++ /dev/null @@ -1,14393 +0,0 @@ -meta: - last_updated: 2022-06-23_13-10-11 -metric_map: riseholme -name: strawberry_polytunnel -nodes: -- meta: - map: riseholme - node: WayPoint140 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint140_WayPoint74 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint74 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint140_WayPoint141 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint141 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint140_WayPoint142 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint142 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: WayPoint140 - parent_frame: map - pose: - orientation: - w: 0.7897749049165983 - x: 0.0 - y: 0.0 - z: -0.6133967717260812 - position: - x: 20.7508434296 - y: -4.37950954437 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.389276951551 - y: 0.63791257143 - - x: -0.725811064243 - y: 0.177953019738 - - x: -0.63791257143 - y: -0.389276951551 - - x: -0.177953019738 - y: -0.725811064243 - - x: 0.389276951551 - y: -0.63791257143 - - x: 0.725811064243 - y: -0.177953019738 - - x: 0.63791257143 - y: 0.389276951551 - - x: 0.177953019738 - y: 0.725811064243 -- meta: - map: riseholme - node: WayPoint141 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint141_WayPoint73 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint73 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint141_WayPoint140 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint140 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint141_WayPoint144 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint144 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: WayPoint141 - parent_frame: map - pose: - orientation: - w: 0.8029703158157347 - x: 0.0 - y: 0.0 - z: -0.5960190197626072 - position: - x: 23.3039474487 - y: -3.95409524918 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.389276951551 - y: 0.63791257143 - - x: -0.725811064243 - y: 0.177953019738 - - x: -0.63791257143 - y: -0.389276951551 - - x: -0.177953019738 - y: -0.725811064243 - - x: 0.389276951551 - y: -0.63791257143 - - x: 0.725811064243 - y: -0.177953019738 - - x: 0.63791257143 - y: 0.389276951551 - - x: 0.177953019738 - y: 0.725811064243 -- meta: - map: riseholme - node: WayPoint142 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint142_WayPoint140 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint140 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint142_WayPoint66 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint66 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint142_WayPoint56 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint56 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: WayPoint142 - parent_frame: map - pose: - orientation: - w: 0.7798152577689397 - x: 0.0 - y: 0.0 - z: -0.6260097153804901 - position: - x: 17.9042915344 - y: -4.71533472061 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.389276951551 - y: 0.63791257143 - - x: -0.725811064243 - y: 0.177953019738 - - x: -0.63791257143 - y: -0.389276951551 - - x: -0.177953019738 - y: -0.725811064243 - - x: 0.389276951551 - y: -0.63791257143 - - x: 0.725811064243 - y: -0.177953019738 - - x: 0.63791257143 - y: 0.389276951551 - - x: 0.177953019738 - y: 0.725811064243 -- meta: - map: riseholme - node: WayPoint143 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint143_WayPoint68 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint68 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 -# - action: NavigateToPose -# action_type: geometry_msgs/PoseStamped -# config: [] -# edge_id: WayPoint143_WayPoint144 -# fail_policy: fail -# fluid_navigation: true -# goal: -# target_pose: -# header: -# frame_id: $node.parent_frame -# pose: $node.pose -# node: WayPoint144 -# recovery_behaviours_config: '' -# restrictions_planning: 'True' -# restrictions_runtime: 'True' - localise_by_topic: '' - name: WayPoint143 - parent_frame: map - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 28.45 - y: -1.7 - z: 1.65918641401e-05 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.389276951551 - y: 0.63791257143 - - x: -0.528169989586 - y: 0.208579674363 - - x: -0.44027146697 - y: -0.358650296926 - - x: -0.177953019738 - y: -0.725811064243 - - x: 0.389276951551 - y: -0.63791257143 - - x: 0.528169989586 - y: -0.208579674363 - - x: 0.44027146697 - y: 0.358650296926 - - x: 0.177953019738 - y: 0.725811064243 -- meta: - map: riseholme - node: WayPoint56 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint56_WayPoint142 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint142 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint56_WayPoint63 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint63 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint56_WayPoint66 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint66 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint56_r8.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint56_r7.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint56_r9-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint56_r8-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint56_r7-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: WayPoint56 - parent_frame: map - pose: - orientation: - w: 0.7339387165828536 - x: 0.0 - y: 0.0 - z: -0.6792156949752515 - position: - x: 15.3362770081 - y: -7.2246799469 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.389276951551 - y: 0.63791257143 - - x: -0.725811064243 - y: 0.177953019738 - - x: -0.63791257143 - y: -0.389276951551 - - x: -0.504145145416 - y: -1.52811074257 - - x: 1.00579595566 - y: -1.26752996445 - - x: 0.725811064243 - y: -0.177953019738 - - x: 0.63791257143 - y: 0.389276951551 - - x: 0.177953019738 - y: 0.725811064243 -- meta: - map: riseholme - node: WayPoint63 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint63_WayPoint56 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint56 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint63_r9.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint63_r10-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint63_r9-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: WayPoint63 - parent_frame: map - pose: - orientation: - w: 0.7553558324223075 - x: 0.0 - y: 0.0 - z: -0.6553148605255362 - position: - x: 12.4204454422 - y: -7.72864294052 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.389276951551 - y: 0.63791257143 - - x: -0.725811064243 - y: 0.177953019738 - - x: -0.63791257143 - y: -0.389276951551 - - x: -0.426953971386 - y: -1.58275640011 - - x: 0.954951286316 - y: -1.36671674252 - - x: 0.725811064243 - y: -0.177953019738 - - x: 0.63791257143 - y: 0.389276951551 - - x: 0.177953019738 - y: 0.725811064243 -- meta: - map: riseholme - node: WayPoint66 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint66_WayPoint142 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint142 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint66_WayPoint56 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint56 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint66_WayPoint74 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint74 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint66_r6.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint66_r6-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint66_r7-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: WayPoint66 - parent_frame: map - pose: - orientation: - w: 0.7141335628529389 - x: 0.0 - y: 0.0 - z: -0.7000094673695261 - position: - x: 18.2440853119 - y: -6.72151565552 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.389276951551 - y: 0.63791257143 - - x: -0.725811064243 - y: 0.177953019738 - - x: -0.63791257143 - y: -0.389276951551 - - x: -0.65414917469 - y: -1.57640635967 - - x: 0.991357862949 - y: -1.31524348259 - - x: 0.725811064243 - y: -0.177953019738 - - x: 0.63791257143 - y: 0.389276951551 - - x: 0.177953019738 - y: 0.725811064243 -- meta: - map: riseholme - node: WayPoint67 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint67_WayPoint73 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint73 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint67_r1.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint67_r1-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint67_r2-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint67_WayPoint144 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint144 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: WayPoint67 - parent_frame: map - pose: - orientation: - w: 0.7031461383733332 - x: 0.0 - y: 0.0 - z: -0.7110453628923188 - position: - x: 26.2929611206 - y: -5.31065368652 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.389276951551 - y: 0.63791257143 - - x: -0.725811064243 - y: 0.177953019738 - - x: -0.63791257143 - y: -0.389276951551 - - x: -0.639109969139 - y: -1.66431057453 - - x: 0.955555677414 - y: -1.47564923763 - - x: 0.725811064243 - y: -0.177953019738 - - x: 0.63791257143 - y: 0.389276951551 - - x: 0.177953019738 - y: 0.725811064243 -- meta: - map: riseholme - node: WayPoint68 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint68_WayPoint69 - fail_policy: fail - fluid_navigation: false - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint69 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 -# - action: NavigateToPose -# action_type: geometry_msgs/PoseStamped -# config: [] -# edge_id: WayPoint68_WayPoint143 -# fail_policy: fail -# fluid_navigation: true -# goal: -# target_pose: -# header: -# frame_id: $node.parent_frame -# pose: $node.pose -# node: WayPoint143 -# recovery_behaviours_config: '' -# restrictions_planning: 'True' -# restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint68_WayPoint144 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint144 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: WayPoint68 - parent_frame: map - pose: - orientation: - w: -0.0611201941617971 - x: -0.0 - y: 0.0 - z: 0.9981304132555145 - position: - x: 26.75 - y: 2.799999999999997 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.268447875977 - y: 0.700840473175 - - x: -1.01734352112 - y: 0.270284175873 - - x: -1.08588027954 - y: -0.547501802444 - - x: -0.496746063232 - y: -1.16582393646 - - x: 0.359563827515 - y: -1.04076695442 - - x: 0.839046478271 - y: -0.112289190292 - - x: 0.823705673218 - y: 0.478964328766 - - x: 0.357343673706 - y: 0.908497810364 -- meta: - map: riseholme - node: WayPoint69 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint69_WayPoint68 - fail_policy: fail - fluid_navigation: false - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint68 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint69_WayPoint70 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint70 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint69_WayPoint71 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint71 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint69_WayPoint72 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint72 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint69_s0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: s0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: 'True' - localise_by_topic: '' - name: WayPoint69 - parent_frame: map - pose: - orientation: - w: 0.9967937200314319 - x: 0.0 - y: 0.0 - z: 0.08001424689328425 - position: - x: 21.0161151886 - y: 1.9613897800400002 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.389276951551 - y: 0.63791257143 - - x: -0.725811064243 - y: 0.177953019738 - - x: -0.63791257143 - y: -0.389276951551 - - x: -0.177953019738 - y: -0.725811064243 - - x: 0.389276951551 - y: -0.63791257143 - - x: 0.725811064243 - y: -0.177953019738 - - x: 0.63791257143 - y: 0.389276951551 - - x: 0.177953019738 - y: 0.725811064243 -- meta: - map: riseholme - node: WayPoint70 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint70_WayPoint69 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint69 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint70_dock-2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: dock-2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: 'True' - localise_by_topic: '' - name: WayPoint70 - parent_frame: map - pose: - orientation: - w: 0.9971259382326672 - x: 0.0 - y: 0.0 - z: 0.07576188556011103 - position: - x: 19.257296070401097 - y: 0.3913308268742269 - z: 0.0 - properties: - xy_goal_tolerance: 0.8 - yaw_goal_tolerance: 7.0 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.389276951551 - y: 0.63791257143 - - x: -0.725811064243 - y: 0.177953019738 - - x: -0.63791257143 - y: -0.389276951551 - - x: -0.177953019738 - y: -0.725811064243 - - x: 0.389276951551 - y: -0.63791257143 - - x: 0.725811064243 - y: -0.177953019738 - - x: 0.63791257143 - y: 0.389276951551 - - x: 0.177953019738 - y: 0.725811064243 -- meta: - map: riseholme - node: WayPoint71 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint71_WayPoint69 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint69 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint71_dock-1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: dock-1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: 'True' - localise_by_topic: '' - name: WayPoint71 - parent_frame: map - pose: - orientation: - w: 0.997458317983662 - x: 0.0 - y: 0.0 - z: 0.07125239564536533 - position: - x: 18.9572960704011 - y: 1.9913308268742353 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.389276951551 - y: 0.63791257143 - - x: -0.725811064243 - y: 0.177953019738 - - x: -0.63791257143 - y: -0.389276951551 - - x: -0.177953019738 - y: -0.725811064243 - - x: 0.389276951551 - y: -0.63791257143 - - x: 0.725811064243 - y: -0.177953019738 - - x: 0.63791257143 - y: 0.389276951551 - - x: 0.177953019738 - y: 0.725811064243 -- meta: - map: riseholme - node: WayPoint72 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint72_WayPoint69 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint69 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint72_dock-0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: dock-0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: 'True' - localise_by_topic: '' - name: WayPoint72 - parent_frame: map - pose: - orientation: - w: 0.9981387030430853 - x: 0.0 - y: 0.0 - z: 0.0609846660027559 - position: - x: 18.7072960704011 - y: 3.4913308268742353 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.389276951551 - y: 0.63791257143 - - x: -0.725811064243 - y: 0.177953019738 - - x: -0.63791257143 - y: -0.389276951551 - - x: -0.177953019738 - y: -0.725811064243 - - x: 0.389276951551 - y: -0.63791257143 - - x: 0.725811064243 - y: -0.177953019738 - - x: 0.63791257143 - y: 0.389276951551 - - x: 0.177953019738 - y: 0.725811064243 -- meta: - map: riseholme - node: WayPoint73 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint73_WayPoint67 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint67 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint73_WayPoint74 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint74 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint73_WayPoint141 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint141 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint73_r3.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint73_r2.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint73_r4-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint73_r3-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint73_r2-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: WayPoint73 - parent_frame: map - pose: - orientation: - w: 0.689354695246495 - x: 0.0 - y: 0.0 - z: -0.7244239809266477 - position: - x: 23.6688137054 - y: -5.80918359756 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.389276951551 - y: 0.63791257143 - - x: -0.725811064243 - y: 0.177953019738 - - x: -0.63791257143 - y: -0.389276951551 - - x: -0.567866265774 - y: -1.61818635464 - - x: 0.967507243156 - y: -1.30801534653 - - x: 0.725811064243 - y: -0.177953019738 - - x: 0.63791257143 - y: 0.389276951551 - - x: 0.177953019738 - y: 0.725811064243 -- meta: - map: riseholme - node: WayPoint74 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint74_WayPoint66 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint66 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint74_WayPoint73 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint73 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint74_WayPoint140 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint140 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint74_r4.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint74_r5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint74_r4-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: WayPoint74 - parent_frame: map - pose: - orientation: - w: 0.8173953878542746 - x: 0.0 - y: 0.0 - z: -0.5760770607432308 - position: - x: 21.1509933472 - y: -6.20381689072 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: -0.389276951551 - y: 0.63791257143 - - x: -0.725811064243 - y: 0.177953019738 - - x: -0.63791257143 - y: -0.389276951551 - - x: -0.567870855331 - y: -1.61818492413 - - x: 1.00797331333 - y: -1.34632718563 - - x: 0.725811064243 - y: -0.177953019738 - - x: 0.63791257143 - y: 0.389276951551 - - x: 0.177953019738 - y: 0.725811064243 -- meta: - map: riseholme - node: dock-0 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: dock-0_WayPoint72 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint72 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: dock-0 - parent_frame: map - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 16.557296070401094 - y: 3.141330826874227 - z: 1.65918641401e-05 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.689999997616 - y: 0.287000000477 - - x: 0.287000000477 - y: 0.689999997616 - - x: -0.287000000477 - y: 0.689999997616 - - x: -0.689999997616 - y: 0.287000000477 - - x: -0.689999997616 - y: -0.287000000477 - - x: -0.287000000477 - y: -0.689999997616 - - x: 0.287000000477 - y: -0.689999997616 - - x: 0.689999997616 - y: -0.287000000477 -- meta: - map: riseholme - node: dock-1 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: dock-1_WayPoint71 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint71 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: dock-1 - parent_frame: map - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 16.757296070401097 - y: 1.691330826874224 - z: 1.65918641401e-05 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.689999997616 - y: 0.287000000477 - - x: 0.287000000477 - y: 0.689999997616 - - x: -0.287000000477 - y: 0.689999997616 - - x: -0.689999997616 - y: 0.287000000477 - - x: -0.689999997616 - y: -0.287000000477 - - x: -0.287000000477 - y: -0.689999997616 - - x: 0.287000000477 - y: -0.689999997616 - - x: 0.689999997616 - y: -0.287000000477 -- meta: - map: riseholme - node: dock-2 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: dock-2_WayPoint70 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint70 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: dock-2 - parent_frame: map - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 17.007296070401097 - y: 0.04133082687423256 - z: 1.65918641401e-05 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: 'True' - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.689999997616 - y: 0.287000000477 - - x: 0.287000000477 - y: 0.689999997616 - - x: -0.287000000477 - y: 0.689999997616 - - x: -0.689999997616 - y: 0.287000000477 - - x: -0.689999997616 - y: -0.287000000477 - - x: -0.287000000477 - y: -0.689999997616 - - x: 0.287000000477 - y: -0.689999997616 - - x: 0.689999997616 - y: -0.287000000477 -- meta: - map: riseholme - node: r5.7-ca - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-ca_r5.7-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-ca_r6.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r5.7-ca - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 19.528250846806248 - y: -9.350509289576738 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r5.7-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-cb_r5.7-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-cb_r5.7-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.7-cb - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 20.049999999999997 - y: -12.9125 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r5.7-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-c0_r5.7-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-c0_r5.7-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.7-c0 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 20.497500000000002 - y: -15.8875 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r5.7-c1 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-c1_r5.7-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-c1_r5.7-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.7-c1 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 20.9425 - y: -18.855 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r5.7-c2 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-c2_r5.7-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-c2_r5.7-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.7-c2 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 21.3725 - y: -21.8325 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r5.7-c3 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-c3_r5.7-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-c3_r5.7-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.7-c3 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 21.7975 - y: -24.822499999999998 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r5.7-c4 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-c4_r5.7-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-c4_r5.7-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.7-c4 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 22.23 - y: -27.785 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r5.7-c5 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-c5_r5.7-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-c5_r5.7-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.7-c5 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 22.657500000000002 - y: -30.7025 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r5.7-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-cy_r5.7-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-cy_r5.7-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-cz - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.7-cy - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 23.1 - y: -33.615 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r5.7-cz - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.7-cz_r5.7-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.7-cz - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 23.62174915319375 - y: -37.17699071042326 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r6.5-ca - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-ca_r6.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-ca_WayPoint66 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint66 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-ca_r7.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-ca_r5.7-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.7-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r6.5-ca - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 18.252493548747736 - y: -9.694890412504861 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r6.5-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-cb_r6.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-cb_r6.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r6.5-cb - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 18.77 - y: -13.2575 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r6.5-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-c0_r6.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-c0_r6.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r6.5-c0 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 19.217499999999998 - y: -16.225 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r6.5-c1 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-c1_r6.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-c1_r6.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r6.5-c1 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 19.645 - y: -19.1875 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r6.5-c2 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-c2_r6.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-c2_r6.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r6.5-c2 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 20.075000000000003 - y: -22.1725 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r6.5-c3 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-c3_r6.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-c3_r6.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r6.5-c3 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 20.5175 - y: -25.1475 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r6.5-c4 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-c4_r6.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-c4_r6.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r6.5-c4 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 20.942500000000003 - y: -28.1125 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r6.5-c5 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-c5_r6.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-c5_r6.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r6.5-c5 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 21.35 - y: -30.9625 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r6.5-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-cy_r6.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-cy_r6.5-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-cz - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r6.5-cy - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 21.7375 - y: -33.6625 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r6.5-cz - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6.5-cz_r6.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r6.5-cz - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 22.255006451252264 - y: -37.22510958749514 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r7.5-ca - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-ca_r7.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-ca_WayPoint56 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint56 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-ca_r8.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-ca_r6.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r7.5-ca - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 16.920934013541007 - y: -9.87584942170954 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r7.5-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-cb_r7.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-cb_r7.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r7.5-cb - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 17.445 - y: -13.4375 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r7.5-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-c0_r7.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-c0_r7.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r7.5-c0 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 17.8975 - y: -16.4 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r7.5-c1 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-c1_r7.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-c1_r7.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r7.5-c1 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 18.330000000000002 - y: -19.377499999999998 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r7.5-c2 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-c2_r7.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-c2_r7.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r7.5-c2 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 18.7675 - y: -22.375000000000004 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r7.5-c3 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-c3_r7.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-c3_r7.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r7.5-c3 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 19.2125 - y: -25.34 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r7.5-c4 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-c4_r7.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-c4_r7.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r7.5-c4 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 19.6375 - y: -28.305 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r7.5-c5 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-c5_r7.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-c5_r7.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r7.5-c5 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 20.049999999999997 - y: -31.15 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r7.5-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-cy_r7.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-cy_r7.5-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-cz - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r7.5-cy - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 20.462500000000002 - y: -33.849999999999994 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r7.5-cz - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7.5-cz_r7.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r7.5-cz - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 20.986565986458995 - y: -37.411650578290455 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r8.5-ca - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-ca_r8.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-ca_WayPoint56 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint56 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-ca_r9.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-ca_r7.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r8.5-ca - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 15.580958737071159 - y: -10.061214516016259 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r8.5-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-cb_r8.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-cb_r8.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r8.5-cb - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 16.107499999999998 - y: -13.622499999999999 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r8.5-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-c0_r8.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-c0_r8.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r8.5-c0 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 16.5575 - y: -16.5825 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r8.5-c1 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-c1_r8.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-c1_r8.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r8.5-c1 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 16.995 - y: -19.5625 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r8.5-c2 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-c2_r8.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-c2_r8.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r8.5-c2 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 17.4425 - y: -22.552500000000002 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r8.5-c3 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-c3_r8.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-c3_r8.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r8.5-c3 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 17.8875 - y: -25.53 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r8.5-c4 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-c4_r8.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-c4_r8.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r8.5-c4 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 18.317500000000003 - y: -28.505000000000003 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r8.5-c5 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-c5_r8.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-c5_r8.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r8.5-c5 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 18.73 - y: -31.362499999999997 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r8.5-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-cy_r8.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-cy_r8.5-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-cz - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r8.5-cy - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 19.137500000000003 - y: -34.0625 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r8.5-cz - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8.5-cz_r8.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r8.5-cz - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 19.66404126292884 - y: -37.62378548398374 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r9.5-ca - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-ca_r9.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-ca_WayPoint63 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint63 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-ca_r10.3-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-ca_r8.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r9.5-ca - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 14.258157714437713 - y: -10.248390087675054 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r9.5-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-cb_r9.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-cb_r9.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r9.5-cb - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 14.782499999999999 - y: -13.81 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r9.5-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-c0_r9.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-c0_r9.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r9.5-c0 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 15.23 - y: -16.770000000000003 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r9.5-c1 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-c1_r9.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-c1_r9.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r9.5-c1 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 15.677499999999998 - y: -19.7725 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r9.5-c2 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-c2_r9.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-c2_r9.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r9.5-c2 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 16.125 - y: -22.762499999999996 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r9.5-c3 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-c3_r9.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-c3_r9.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r9.5-c3 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 16.5625 - y: -25.724999999999998 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r9.5-c4 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-c4_r9.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-c4_r9.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r9.5-c4 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 16.990000000000002 - y: -28.7025 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r9.5-c5 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-c5_r9.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-c5_r9.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r9.5-c5 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 17.4025 - y: -31.575000000000003 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r9.5-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-cy_r9.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-cy_r9.5-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-cz - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r9.5-cy - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 17.799999999999997 - y: -34.272499999999994 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r9.5-cz - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9.5-cz_r9.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r9.5-cz - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 18.32434228556228 - y: -37.83410991232494 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r10.3-ca - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-ca_r10.3-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-ca_r9.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r10.3-ca - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 12.921362395974217 - y: -10.255786415270013 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r10.3-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-cb_r10.3-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-cb_r10.3-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r10.3-cb - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 13.445000000000002 - y: -13.817499999999999 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r10.3-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-c0_r10.3-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-c0_r10.3-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r10.3-c0 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 13.895 - y: -16.7875 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r10.3-c1 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-c1_r10.3-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-c1_r10.3-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r10.3-c1 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 14.35 - y: -19.822499999999998 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r10.3-c2 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-c2_r10.3-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-c2_r10.3-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r10.3-c2 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 14.7975 - y: -22.83 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r10.3-c3 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-c3_r10.3-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-c3_r10.3-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r10.3-c3 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 15.2225 - y: -25.78 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r10.3-c4 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-c4_r10.3-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-c4_r10.3-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r10.3-c4 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 15.6475 - y: -28.7525 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r10.3-c5 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-c5_r10.3-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-c5_r10.3-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r10.3-c5 - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 16.08 - y: -31.6875 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r10.3-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-cy_r10.3-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-cy_r10.3-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-cz - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r10.3-cy - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 16.502499999999998 - y: -34.5375 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r10.3-cz - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10.3-cz_r10.3-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10.3-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r10.3-cz - parent_frame: map - pose: - orientation: - w: 0.7566142743603234 - x: 0.0 - y: 0.0 - z: -0.6538614836754045 - position: - x: 17.026137604025784 - y: -38.09921358472999 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3839717361251064 - y: -0.6411198818013286 - - x: 0.5264215248037732 - y: -0.212953957097135 - - x: 0.4432315207951729 - y: 0.3549856737865013 - - x: 0.1839678947585299 - y: 0.724309885809929 - - x: -0.3839717361251064 - y: 0.6411198818013286 - - x: -0.5264215248037732 - y: 0.212953957097135 - - x: -0.4432315207951729 - y: -0.3549856737865013 - - x: -0.1839678947585299 - y: -0.724309885809929 -- meta: - map: riseholme - node: r0.7-ca - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-ca_r0.7-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-ca_r1.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r0.7-ca - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 27.478100868522482 - y: -8.216267445778325 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r0.7-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-cb_r0.7-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-cb_r0.7-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r0.7-cb - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 28.005000000000003 - y: -11.7775 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r0.7-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-c0_r0.7-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-c0_r0.7-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r0.7-c0 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 28.4425 - y: -14.760000000000002 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r0.7-c1 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-c1_r0.7-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-c1_r0.7-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r0.7-c1 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 28.865000000000002 - y: -17.72 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r0.7-c2 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-c2_r0.7-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-c2_r0.7-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r0.7-c2 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 29.295 - y: -20.6775 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r0.7-c3 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-c3_r0.7-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-c3_r0.7-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r0.7-c3 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 29.747500000000002 - y: -23.655 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r0.7-c4 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-c4_r0.7-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-c4_r0.7-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r0.7-c4 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 30.1975 - y: -26.6625 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r0.7-c5 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-c5_r0.7-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-c5_r0.7-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r0.7-c5 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 30.635 - y: -29.575 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r0.7-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-cy_r0.7-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-cy_r0.7-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-cz - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r0.7-cy - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 31.0475 - y: -32.385 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r0.7-cz - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r0.7-cz_r0.7-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r0.7-cz - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 31.57439913147752 - y: -35.94623255422167 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r1.5-ca - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-ca_r1.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-ca_WayPoint67 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint67 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-ca_r0.7-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r0.7-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-ca_r2.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r1.5-ca - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 26.169302720038942 - y: -8.551459754026677 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r1.5-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-cb_r1.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-cb_r1.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r1.5-cb - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 26.697499999999998 - y: -12.1125 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r1.5-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-c0_r1.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-c0_r1.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r1.5-c0 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 27.150000000000002 - y: -15.075 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r1.5-c1 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-c1_r1.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-c1_r1.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r1.5-c1 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 27.585 - y: -18.022499999999997 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r1.5-c2 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-c2_r1.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-c2_r1.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r1.5-c2 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 28.020000000000003 - y: -20.985 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r1.5-c3 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-c3_r1.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-c3_r1.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r1.5-c3 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 28.47 - y: -23.962500000000002 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r1.5-c4 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-c4_r1.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-c4_r1.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r1.5-c4 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 28.9225 - y: -26.9625 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r1.5-c5 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-c5_r1.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-c5_r1.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r1.5-c5 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 29.335 - y: -29.7975 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r1.5-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-cy_r1.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-cy_r1.5-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-cz - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r1.5-cy - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 29.7075 - y: -32.46 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r1.5-cz - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1.5-cz_r1.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r1.5-cz - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 30.235697279961055 - y: -36.021040245973325 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r2.5-ca - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-ca_r2.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-ca_WayPoint73 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint73 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-ca_r3.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-ca_r1.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r2.5-ca - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 24.843474656987834 - y: -8.739082676268534 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r2.5-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-cb_r2.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-cb_r2.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r2.5-cb - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 25.3725 - y: -12.299999999999999 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r2.5-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-c0_r2.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-c0_r2.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r2.5-c0 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 25.825000000000003 - y: -15.2725 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r2.5-c1 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-c1_r2.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-c1_r2.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r2.5-c1 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 26.26 - y: -18.22 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r2.5-c2 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-c2_r2.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-c2_r2.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r2.5-c2 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 26.6975 - y: -21.197499999999998 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r2.5-c3 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-c3_r2.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-c3_r2.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r2.5-c3 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 27.1475 - y: -24.1625 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r2.5-c4 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-c4_r2.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-c4_r2.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r2.5-c4 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 27.597499999999997 - y: -27.1375 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r2.5-c5 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-c5_r2.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-c5_r2.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r2.5-c5 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 28.01 - y: -29.972500000000004 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r2.5-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-cy_r2.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-cy_r2.5-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-cz - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r2.5-cy - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 28.384999999999998 - y: -32.635000000000005 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r2.5-cz - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2.5-cz_r2.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r2.5-cz - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 28.914025343012163 - y: -36.19591732373147 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r3.5-ca - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-ca_r3.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-ca_WayPoint73 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint73 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-ca_r4.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-ca_r2.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r3.5-ca - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 23.548916109785623 - y: -8.926146922803511 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r3.5-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-cb_r3.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-cb_r3.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r3.5-cb - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 24.075000000000003 - y: -12.4875 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r3.5-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-c0_r3.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-c0_r3.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r3.5-c0 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 24.5125 - y: -15.4725 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r3.5-c1 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-c1_r3.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-c1_r3.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r3.5-c1 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 24.935 - y: -18.4225 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r3.5-c2 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-c2_r3.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-c2_r3.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r3.5-c2 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 25.3725 - y: -21.3875 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r3.5-c3 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-c3_r3.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-c3_r3.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r3.5-c3 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 25.8225 - y: -24.3375 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r3.5-c4 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-c4_r3.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-c4_r3.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r3.5-c4 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 26.2725 - y: -27.3125 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r3.5-c5 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-c5_r3.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-c5_r3.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r3.5-c5 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 26.687500000000004 - y: -30.1625 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r3.5-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-cy_r3.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-cy_r3.5-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-cz - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r3.5-cy - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 27.0625 - y: -32.824999999999996 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r3.5-cz - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3.5-cz_r3.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r3.5-cz - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 27.58858389021438 - y: -36.38635307719649 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r4.5-ca - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-ca_r4.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-ca_WayPoint74 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint74 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-ca_r5.3-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-ca_r3.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r4.5-ca - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 22.24675567404429 - y: -9.118228618319929 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r4.5-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-cb_r4.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-cb_r4.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r4.5-cb - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 22.769999999999996 - y: -12.68 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r4.5-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-c0_r4.5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-c0_r4.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r4.5-c0 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 23.205000000000002 - y: -15.669999999999998 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r4.5-c1 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-c1_r4.5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-c1_r4.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r4.5-c1 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 23.625 - y: -18.6175 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r4.5-c2 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-c2_r4.5-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-c2_r4.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r4.5-c2 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 24.07 - y: -21.57 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r4.5-c3 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-c3_r4.5-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-c3_r4.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r4.5-c3 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 24.515 - y: -24.5325 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r4.5-c4 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-c4_r4.5-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-c4_r4.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r4.5-c4 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 24.95 - y: -27.5075 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r4.5-c5 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-c5_r4.5-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-c5_r4.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r4.5-c5 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 25.36 - y: -30.349999999999998 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r4.5-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-cy_r4.5-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-cy_r4.5-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-cz - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r4.5-cy - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 25.749999999999996 - y: -33.025 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r4.5-cz - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4.5-cz_r4.5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r4.5-cz - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 26.2732443259557 - y: -36.586771381680066 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r5.3-ca - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-ca_r5.3-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-ca_r4.5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4.5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r5.3-ca - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 20.873122296269567 - y: -9.160895302138318 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r5.3-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-cb_r5.3-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-ca - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-cb_r5.3-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.3-cb - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 21.3975 - y: -12.7225 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r5.3-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-c0_r5.3-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-cb - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-c0_r5.3-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.3-c0 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 21.845000000000002 - y: -15.7075 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r5.3-c1 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-c1_r5.3-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-c0 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-c1_r5.3-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.3-c1 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 22.2875 - y: -18.6725 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r5.3-c2 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-c2_r5.3-c1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-c1 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-c2_r5.3-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.3-c2 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 22.72 - y: -21.64 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r5.3-c3 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-c3_r5.3-c2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-c2 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-c3_r5.3-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.3-c3 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 23.1475 - y: -24.6175 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r5.3-c4 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-c4_r5.3-c3 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-c3 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-c4_r5.3-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.3-c4 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 23.5775 - y: -27.580000000000002 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r5.3-c5 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-c5_r5.3-c4 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-c4 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-c5_r5.3-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.3-c5 - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 24.005000000000003 - y: -30.490000000000002 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r5.3-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-cy_r5.3-c5 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-c5 - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-cy_r5.3-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-cz - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.3-cy - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 24.462500000000002 - y: -33.39 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r5.3-cz - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5.3-cz_r5.3-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5.3-cy - recovery_behaviours_config: '' - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - localise_by_topic: '' - name: r5.3-cz - parent_frame: map - pose: - orientation: - w: 0.7570868080527051 - x: 0.0 - y: 0.0 - z: -0.6533142927202545 - position: - x: 24.986877703730435 - y: -36.95160469786168 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 6.28 - restrictions_planning: robot_short - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.3848983733954697 - y: -0.6405640008159993 - - x: 0.526728899032632 - y: -0.21219254591980724 - - x: 0.44271775959631 - y: 0.3556262011692642 - - x: 0.18292037369360176 - y: 0.7245751402523212 - - x: -0.3848983733954697 - y: 0.6405640008159993 - - x: -0.526728899032632 - y: 0.21219254591980724 - - x: -0.44271775959631 - y: -0.3556262011692642 - - x: -0.18292037369360176 - y: -0.7245751402523212 -- meta: - map: riseholme - node: r1-ca - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1-ca_WayPoint67 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint67 - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1-ca_r1-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1-ca_r2-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r1-ca - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 26.871219635 - y: -8.57828330994 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r1-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1-c0_r1-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1-c0_r1-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r1-c0 - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 28.9023780823 - y: -22.3284606934 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r1-cz - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1-cz_r2-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1-cz_r1-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r1-cz - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 30.894743677585105 - y: -35.94505645705402 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r2-ca - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2-ca_r3-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2-ca_WayPoint73 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint73 - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2-ca_WayPoint67 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint67 - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2-ca_r2-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2-ca_r1-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r2-ca - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 25.519826889 - y: -8.80274772644 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r2-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2-c0_r2-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2-c0_r2-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r2-c0 - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 27.5617446899 - y: -22.5340423584 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r2-cz - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2-cz_r1-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2-cz_r3-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2-cz_r2-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r2-cz - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 29.598967310385106 - y: -36.14810134845402 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r3-ca - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3-ca_r4-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3-ca_r2-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3-ca_WayPoint73 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint73 - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3-ca_r3-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r3-ca - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 24.2120990753 - y: -9.00120162964 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r3-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3-c0_r3-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3-c0_r3-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r3-c0 - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 26.240644455 - y: -22.7276000977 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: robot_tall - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r3-cz - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3-cz_r2-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3-cz_r4-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3-cz_r3-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r3-cz - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 28.250984903785106 - y: -36.33979751545402 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r4-ca - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4-ca_r5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4-ca_r3-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4-ca_WayPoint74 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint74 - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4-ca_WayPoint73 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint73 - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4-ca_r4-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r4-ca - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 22.9220657349 - y: -9.20281600952 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r4-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4-c0_r4-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4-c0_r4-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r4-c0 - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 24.954082489 - y: -22.946100235 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r4-cz - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4-cz_r3-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4-cz_r5-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4-cz_r4-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r4-cz - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 26.945385691085104 - y: -36.55604125935402 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r5-ca - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5-ca_r4-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5-ca_WayPoint74 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint74 - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5-ca_r5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r5-ca - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 21.6146430969 - y: -9.41316413879 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r5-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5-c0_r5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5-c0_r5-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r5-c0 - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 23.6351661682 - y: -23.1455612183 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r5-cz - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5-cz_r4-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5-cz_r5-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r5-cz - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 25.635498758785104 - y: -36.75929977375402 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r6-ca - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6-ca_r7-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6-ca_WayPoint66 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint66 - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6-ca_r6-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r6-ca - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 18.9433765411 - y: -9.84392356873 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r6-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6-c0_r6-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6-c0_r6-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r6-c0 - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 20.937664032 - y: -23.5692234039 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r6-cz - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6-cz_r7-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6-cz_r6-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r6-cz - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 22.915657755385105 - y: -37.193175811354024 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r7-ca - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7-ca_r8-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7-ca_r6-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7-ca_WayPoint56 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint56 - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7-ca_WayPoint66 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint66 - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7-ca_r7-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r7-ca - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 17.6317653656 - y: -10.0511760712 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r7-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7-c0_r7-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7-c0_r7-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r7-c0 - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 19.6318664551 - y: -23.7595119476 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r7-cz - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7-cz_r8-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7-cz_r6-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7-cz_r7-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r7-cz - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 21.636023279585103 - y: -37.37216140705402 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r8-ca - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8-ca_r9-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8-ca_r7-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8-ca_WayPoint56 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint56 - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8-ca_r8-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r8-ca - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 16.2781791687 - y: -10.2434005737 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r8-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8-c0_r8-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8-c0_r8-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r8-c0 - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 18.3280582428 - y: -23.942522049 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r8-cz - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8-cz_r9-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8-cz_r7-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8-cz_r8-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r8-cz - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 20.374644037685105 - y: -37.56874801585402 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r9-ca - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9-ca_r10-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9-ca_r8-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9-ca_WayPoint63 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint63 - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9-ca_WayPoint56 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint56 - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9-ca_r9-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r9-ca - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 14.9655475616 - y: -10.4636011124 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r9-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9-c0_r9-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9-c0_r9-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r9-c0 - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 16.9808979034 - y: -24.1296234131 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r9-cz - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9-cz_r10-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9-cz_r8-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9-cz_r9-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r9-cz - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 18.982176538885106 - y: -37.76452590895402 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r10-ca - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10-ca_r9-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9-ca - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10-ca_WayPoint63 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint63 - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10-ca_r10-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r10-ca - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 13.6513690948 - y: -10.6481618881 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r10-c0 - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10-c0_r10-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10-c0_r10-cb - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10-cb - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r10-c0 - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 15.6664028168 - y: -24.3333568573 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r10-cz - pointset: riseholme_restrict - node: - edges: - - action: row_change - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10-cz_r9-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9-cz - recovery_behaviours_config: '' - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10-cz_r10-cy - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10-cy - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r10-cz - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 17.671026941785104 - y: -37.94117309525402 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r1-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1-cb_r1-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1-cb_r1-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r1-cb - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 27.8867988586 - y: -15.4533720017 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r1-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1-cy_r1-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r1-cy_r1-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r1-cz - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r1-cy - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 29.8985608799 - y: -29.1367585752 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r2-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2-cb_r2-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2-cb_r2-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r2-cb - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 26.5407857894 - y: -15.6683950424 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r2-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2-cy_r2-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r2-cy_r2-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r2-cz - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r2-cy - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 28.5803560001 - y: -29.3410718534 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r3-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3-cy_r3-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3-cy_r3-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3-cz - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r3-cy - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 27.2458146794 - y: -29.5336988066 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r4-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4-cy_r4-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4-cz - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4-cy_r4-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r4-cy - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 25.94973409 - y: -29.7510707472 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r5-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5-cy_r5-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5-cz - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5-cy_r5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r5-cy - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 24.6353324635 - y: -29.952430496 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r3-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3-cb_r3-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r3-cb_r3-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r3-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r3-cb - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 25.2263717651 - y: -15.8644008637 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: robot_tall - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r4-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4-cb_r4-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r4-cb_r4-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r4-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r4-cb - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 23.938074112 - y: -16.0744581223 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r5-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5-cb_r5-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r5-cb_r5-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r5-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r5-cb - parent_frame: map - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 22.60000000000001 - y: -16.2793626785 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r6-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6-cy_r6-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6-cy_r6-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6-cz - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r6-cy - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 21.9266608937 - y: -30.3811996076 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r7-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7-cy_r7-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7-cz - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7-cy_r7-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r7-cy - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 20.6339448673 - y: -30.5658366773 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r8-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8-cy_r8-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8-cz - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8-cy_r8-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r8-cy - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 19.3513511402 - y: -30.7556350324 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r9-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9-cy_r9-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9-cz - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9-cy_r9-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r9-cy - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 17.9815372211 - y: -30.947074661 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r10-cy - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10-cy_r10-cz - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10-cz - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10-cy_r10-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r10-cy - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 16.6687148793 - y: -31.1372649763 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r6-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6-cb_r6-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r6-cb_r6-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r6-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r6-cb - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 19.9405202866 - y: -16.7065734863 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r7-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7-cb_r7-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r7-cb_r7-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r7-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r7-cb - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 18.6318159103 - y: -16.9053440094 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r8-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8-cb_r8-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r8-cb_r8-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r8-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r8-cb - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 17.3031187058 - y: -17.0929613114 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r9-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9-cb_r9-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r9-cb_r9-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r9-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r9-cb - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 15.9732227325 - y: -17.2966122627 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: r10-cb - pointset: riseholme_restrict - node: - edges: - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10-cb_r10-c0 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10-c0 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: row_traversal - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: r10-cb_r10-ca - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: r10-ca - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: r10-cb - parent_frame: map - pose: - orientation: - w: 0.756889507045039 - x: 0.0 - y: 0.0 - z: -0.6535428632653851 - position: - x: 14.6588859558 - y: -17.4907593727 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: robot_tall - restrictions_runtime: obstacleFree_1 - verts: - - x: 0.384511440992 - y: -0.640796363354 - - x: 0.526600658894 - y: -0.212510615587 - - x: 0.442932456732 - y: 0.35535877943 - - x: 0.183357924223 - y: 0.724464535713 - - x: -0.384511440992 - y: 0.640796363354 - - x: -0.526600658894 - y: 0.212510615587 - - x: -0.442932456732 - y: -0.35535877943 - - x: -0.183357924223 - y: -0.724464535713 -- meta: - map: riseholme - node: WayPoint144 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint144_WayPoint141 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint141 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint144_WayPoint143 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint143 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: WayPoint144_WayPoint67 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint67 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: WayPoint144 - parent_frame: map - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 26.0 - y: -2.8000000000000114 - z: 0.0 - properties: - xy_goal_tolerance: 0.35 - yaw_goal_tolerance: 6.29 - restrictions_planning: 'True' - restrictions_runtime: 'True' - verts: - - x: 0.689999997616 - y: 0.287000000477 - - x: 0.287000000477 - y: 0.689999997616 - - x: -0.287000000477 - y: 0.689999997616 - - x: -0.689999997616 - y: 0.287000000477 - - x: -0.689999997616 - y: -0.287000000477 - - x: -0.287000000477 - y: -0.689999997616 - - x: 0.287000000477 - y: -0.689999997616 - - x: 0.689999997616 - y: -0.287000000477 -- meta: - map: riseholme - node: s0 - pointset: riseholme_restrict - node: - edges: - - action: NavigateToPose - action_type: geometry_msgs/PoseStamped - config: [] - edge_id: s0_WayPoint72 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint72 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: s0 - parent_frame: map - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 20.650000000000006 - y: 3.799999999999997 - z: 0.0 - properties: - xy_goal_tolerance: 0.35 - yaw_goal_tolerance: 6.29 - restrictions_planning: 'True' - restrictions_runtime: 'True' - verts: - - x: 0.689999997616 - y: 0.287000000477 - - x: 0.287000000477 - y: 0.689999997616 - - x: -0.287000000477 - y: 0.689999997616 - - x: -0.689999997616 - y: 0.287000000477 - - x: -0.689999997616 - y: -0.287000000477 - - x: -0.287000000477 - y: -0.689999997616 - - x: 0.287000000477 - y: -0.689999997616 - - x: 0.689999997616 - y: -0.287000000477 -pointset: riseholme_restrict -transformation: - child: topo_map - parent: map - rotation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - translation: - x: 0.0 - y: 0.0 - z: 0.0 diff --git a/topological_navigation/test/conftest.py b/topological_navigation/test/conftest.py new file mode 100644 index 00000000..bf86d0d4 --- /dev/null +++ b/topological_navigation/test/conftest.py @@ -0,0 +1,385 @@ +""" +Pytest configuration for topological_navigation tests. + +This file ensures that the topological_navigation package can be imported +during testing by adding the source directory to the Python path and +invalidating any stale module cache. +""" + +import sys +import types +from pathlib import Path + +# The ROS package directory containing the actual Python package. +# Layout: topological_navigation/ (ROS pkg) -> topological_navigation/ (python pkg) +_pkg_dir = str(Path(__file__).resolve().parent.parent) + +# Insert BEFORE anything else to win over the outer __init__.py +if _pkg_dir not in sys.path: + sys.path.insert(0, _pkg_dir) + +# Invalidate the root cached module so Python re-discovers from the correct path. +# Only remove the root module – submodules will be imported fresh. +# We must not remove test.conftest itself. +_stale = 'topological_navigation' +if _stale in sys.modules: + _cached_file = getattr(sys.modules[_stale], '__file__', '') or '' + # Only invalidate if the cached module points to the wrong location + if 'topological_navigation/topological_navigation' not in _cached_file: + del sys.modules[_stale] + + +def _install_ros_test_stubs(): + """Install minimal ROS 2 module stubs for pure unit-test collection.""" + + class _BaseMsg: + def __init__(self, **kwargs): + for key, value in kwargs.items(): + setattr(self, key, value) + + def _module(name): + module = types.ModuleType(name) + sys.modules[name] = module + return module + + # action_msgs.msg ------------------------------------------------- + action_msgs = _module('action_msgs') + action_msgs.msg = _module('action_msgs.msg') + + class GoalStatus: + STATUS_UNKNOWN = 0 + STATUS_ACCEPTED = 1 + STATUS_EXECUTING = 2 + STATUS_CANCELING = 3 + STATUS_SUCCEEDED = 4 + STATUS_CANCELED = 5 + STATUS_ABORTED = 6 + + action_msgs.msg.GoalStatus = GoalStatus + + # geometry_msgs.msg ---------------------------------------------- + geometry_msgs = _module('geometry_msgs') + geometry_msgs.msg = _module('geometry_msgs.msg') + + class Point32(_BaseMsg): + def __init__(self, x=0.0, y=0.0, z=0.0): + super().__init__(x=x, y=y, z=z) + + class PoseStamped(_BaseMsg): + def __init__(self): + super().__init__( + header=types.SimpleNamespace(frame_id='', stamp=None), + pose=types.SimpleNamespace( + position=types.SimpleNamespace(x=0.0, y=0.0, z=0.0), + orientation=types.SimpleNamespace( + x=0.0, y=0.0, z=0.0, w=1.0, + ), + ), + ) + + class Pose(_BaseMsg): + def __init__(self): + super().__init__( + position=types.SimpleNamespace(x=0.0, y=0.0, z=0.0), + orientation=types.SimpleNamespace( + x=0.0, y=0.0, z=0.0, w=1.0, + ), + ) + + class PolygonStamped(_BaseMsg): + def __init__(self): + super().__init__( + header=types.SimpleNamespace(frame_id='', stamp=None), + polygon=types.SimpleNamespace(points=[]), + ) + + geometry_msgs.msg.Point32 = Point32 + geometry_msgs.msg.Pose = Pose + geometry_msgs.msg.PolygonStamped = PolygonStamped + geometry_msgs.msg.PoseStamped = PoseStamped + + # nav_msgs.msg --------------------------------------------------- + nav_msgs = _module('nav_msgs') + nav_msgs.msg = _module('nav_msgs.msg') + + class OccupancyGrid(_BaseMsg): + def __init__(self): + super().__init__( + header=types.SimpleNamespace(frame_id='', stamp=None), + info=types.SimpleNamespace( + resolution=0.0, + width=0, + height=0, + origin=types.SimpleNamespace( + position=types.SimpleNamespace(x=0.0, y=0.0, z=0.0), + orientation=types.SimpleNamespace( + x=0.0, y=0.0, z=0.0, w=1.0, + ), + ), + ), + data=[], + ) + + nav_msgs.msg.OccupancyGrid = OccupancyGrid + + # rcl_interfaces -------------------------------------------------- + rcl_interfaces = _module('rcl_interfaces') + rcl_interfaces.msg = _module('rcl_interfaces.msg') + rcl_interfaces.srv = _module('rcl_interfaces.srv') + + class ParameterType: + PARAMETER_NOT_SET = 0 + PARAMETER_BOOL = 1 + PARAMETER_INTEGER = 2 + PARAMETER_DOUBLE = 3 + PARAMETER_STRING = 4 + PARAMETER_BYTE_ARRAY = 5 + PARAMETER_BOOL_ARRAY = 6 + PARAMETER_INTEGER_ARRAY = 7 + PARAMETER_DOUBLE_ARRAY = 8 + PARAMETER_STRING_ARRAY = 9 + + class ParameterValue(_BaseMsg): + def __init__(self, **kwargs): + self.type = ParameterType.PARAMETER_NOT_SET + self.bool_value = False + self.integer_value = 0 + self.double_value = 0.0 + self.string_value = '' + for key, value in kwargs.items(): + setattr(self, key, value) + + class RclParameter(_BaseMsg): + pass + + class SetParameters: + class Request(_BaseMsg): + def __init__(self): + super().__init__(parameters=[]) + + class Response(_BaseMsg): + def __init__(self): + super().__init__(results=[]) + + class GetParameters: + class Request(_BaseMsg): + def __init__(self): + super().__init__(names=[]) + + class Response(_BaseMsg): + def __init__(self): + super().__init__(values=[]) + + class SetParametersResult(_BaseMsg): + def __init__(self, successful=False, reason=''): + super().__init__(successful=successful, reason=reason) + + rcl_interfaces.msg.Parameter = RclParameter + rcl_interfaces.msg.ParameterType = ParameterType + rcl_interfaces.msg.ParameterValue = ParameterValue + rcl_interfaces.msg.SetParametersResult = SetParametersResult + rcl_interfaces.srv.SetParameters = SetParameters + rcl_interfaces.srv.GetParameters = GetParameters + + # rclpy ----------------------------------------------------------- + rclpy = _module('rclpy') + rclpy.action = _module('rclpy.action') + rclpy.callback_groups = _module('rclpy.callback_groups') + rclpy.executors = _module('rclpy.executors') + rclpy.node = _module('rclpy.node') + rclpy.qos = _module('rclpy.qos') + + class Node: + pass + + class Parameter: + class Type: + STRING = 1 + DOUBLE = 2 + BOOL = 3 + INTEGER = 4 + + class _ActionEndpoint: + def __init__(self, *args, **kwargs): + pass + + class CancelResponse: + ACCEPT = 1 + REJECT = 2 + + class _Group: + def __init__(self, *args, **kwargs): + pass + + class MultiThreadedExecutor: + def __init__(self, *args, **kwargs): + pass + + class _QoSValue: + def __init__(self, value): + self.value = value + + class QoSProfile: + def __init__(self, *args, **kwargs): + pass + + rclpy.Parameter = Parameter + rclpy.init = lambda *args, **kwargs: None + rclpy.ok = lambda: False + rclpy.shutdown = lambda: None + rclpy.spin = lambda *args, **kwargs: None + rclpy.spin_once = lambda *args, **kwargs: None + rclpy.spin_until_future_complete = lambda *args, **kwargs: None + rclpy.get_default_context = lambda: types.SimpleNamespace( + on_shutdown=lambda *args, **kwargs: None, + ) + rclpy.node.Node = Node + rclpy.action.ActionClient = _ActionEndpoint + rclpy.action.ActionServer = _ActionEndpoint + rclpy.action.CancelResponse = CancelResponse + rclpy.callback_groups.MutuallyExclusiveCallbackGroup = _Group + rclpy.callback_groups.ReentrantCallbackGroup = _Group + rclpy.executors.MultiThreadedExecutor = MultiThreadedExecutor + rclpy.qos.DurabilityPolicy = types.SimpleNamespace(TRANSIENT_LOCAL=1) + rclpy.qos.HistoryPolicy = types.SimpleNamespace(KEEP_LAST=1) + rclpy.qos.QoSHistoryPolicy = types.SimpleNamespace(KEEP_LAST=1) + rclpy.qos.QoSProfile = QoSProfile + rclpy.qos.ReliabilityPolicy = types.SimpleNamespace( + RELIABLE=_QoSValue(1), BEST_EFFORT=_QoSValue(2), + ) + + # std_msgs.msg ---------------------------------------------------- + std_msgs = _module('std_msgs') + std_msgs.msg = _module('std_msgs.msg') + + class String(_BaseMsg): + def __init__(self, data=''): + super().__init__(data=data) + + std_msgs.msg.String = String + + # topological_navigation_msgs ------------------------------------ + topo_msgs = _module('topological_navigation_msgs') + topo_msgs.action = _module('topological_navigation_msgs.action') + topo_msgs.msg = _module('topological_navigation_msgs.msg') + + class GotoNode: + class Feedback(_BaseMsg): + pass + + class Result(_BaseMsg): + def __init__(self, success=False): + super().__init__(success=success) + + class ExecutePolicyMode: + class Feedback(_BaseMsg): + pass + + class Result(_BaseMsg): + def __init__(self, success=False): + super().__init__(success=success) + + class ClosestEdges(_BaseMsg): + def __init__(self): + super().__init__(edge_ids=[], distances=[]) + + class NavStatistics(_BaseMsg): + pass + + class TopologicalRoute(_BaseMsg): + def __init__(self): + super().__init__(nodes=[], edge_id=[]) + + topo_msgs.action.GotoNode = GotoNode + topo_msgs.action.ExecutePolicyMode = ExecutePolicyMode + topo_msgs.msg.ClosestEdges = ClosestEdges + topo_msgs.msg.NavStatistics = NavStatistics + topo_msgs.msg.TopologicalRoute = TopologicalRoute + + # tf2_ros ----------------------------------------------------------- + tf2_ros = _module('tf2_ros') + tf2_ros.buffer = _module('tf2_ros.buffer') + tf2_ros.transform_listener = _module('tf2_ros.transform_listener') + + class TransformException(Exception): + pass + + class Buffer: + def __init__(self, *args, **kwargs): + pass + + class TransformListener: + def __init__(self, *args, **kwargs): + pass + + tf2_ros.TransformException = TransformException + tf2_ros.buffer.Buffer = Buffer + tf2_ros.transform_listener.TransformListener = TransformListener + + +try: + import rclpy # noqa: F401 +except ModuleNotFoundError: + _install_ros_test_stubs() + +try: + import numpy as _np + if not hasattr(_np, 'float_'): + _np.float_ = _np.float64 + if not hasattr(_np, 'int'): + _np.int = int + if not hasattr(_np, 'int_'): + _np.int_ = _np.int64 + if not hasattr(_np, 'complex'): + _np.complex = complex +except Exception: + pass + +try: + import scipy.special # noqa: F401 +except Exception: + scipy = sys.modules.get('scipy') + if scipy is None: + scipy = types.ModuleType('scipy') + sys.modules['scipy'] = scipy + scipy.special = types.ModuleType('scipy.special') + scipy.special.zeta = lambda *_args, **_kwargs: 0.0 + sys.modules['scipy.special'] = scipy.special + +try: + import scipy.spatial # noqa: F401 +except Exception: + scipy = sys.modules.get('scipy') + if scipy is None: + scipy = types.ModuleType('scipy') + sys.modules['scipy'] = scipy + scipy.spatial = types.ModuleType('scipy.spatial') + + class _KDTree: + def __init__(self, data): + import numpy as np + self.data = np.asarray(data, dtype=float) + + def query(self, points, k=1): + import numpy as np + query_points = np.asarray(points, dtype=float) + if query_points.ndim == 1: + query_points = query_points.reshape(1, -1) + + all_distances = [] + all_indices = [] + for point in query_points: + distances = np.linalg.norm(self.data - point, axis=1) + indices = np.argsort(distances)[:k] + all_distances.append(distances[indices]) + all_indices.append(indices) + + all_distances = np.asarray(all_distances) + all_indices = np.asarray(all_indices) + if k == 1: + return all_distances[:, 0], all_indices[:, 0] + return all_distances, all_indices + + scipy.spatial.KDTree = _KDTree + scipy.spatial.cKDTree = _KDTree + sys.modules['scipy.spatial'] = scipy.spatial diff --git a/topological_navigation/test/fixtures/README.md b/topological_navigation/test/fixtures/README.md new file mode 100644 index 00000000..8ce1f01f --- /dev/null +++ b/topological_navigation/test/fixtures/README.md @@ -0,0 +1,164 @@ +# Test Fixture YAML Files + +This directory contains topological map YAML fixtures for testing the localisation system. + +## Files + +### 1. simple_map.yaml +**Purpose:** Basic functionality testing with minimal complexity + +**Characteristics:** +- **Nodes:** 2 (WP1, WP2) +- **Edges:** 1 (WP1 → WP2) +- **Polygon shapes:** Square influence zones +- **Features:** + - Basic NavigateToPose action + - Simple node properties (xy_goal_tolerance, yaw_goal_tolerance) + - Edge properties (max_speed) + +**Use cases:** +- Basic graph construction tests +- Simple KD-tree queries +- Basic point-in-polygon checks +- Edge distance calculations with minimal edges + +### 2. complex_map.yaml +**Purpose:** Comprehensive testing with realistic map structure + +**Characteristics:** +- **Nodes:** 10 (Entry, Junction1, Junction2, Row1Start, Row1End, Row2Start, Row2End, Exit, NoGoZone, TopicLocaliseNode) +- **Edges:** Multiple edges forming a connected graph +- **Polygon shapes:** Square influence zones (various sizes) +- **Features:** + - Multiple edge types (NavigateToPose, RowOperation) + - Agricultural navigation patterns (row operations) + - Node tags (entry_point, row_entry, row_exit, exit_point, no_go) + - No-go node (NoGoZone with no_go: true property) + - Topic-based localization (TopicLocaliseNode with localise_by_topic JSON config) + - Roboflow integration properties + - Various node properties and semantics + +**Use cases:** +- Complex graph traversal +- Multiple node filtering (no-go, topic-based) +- Realistic localization scenarios +- Edge action testing +- Tag-based node queries +- Agricultural navigation testing + +### 3. polygon_shapes_map.yaml +**Purpose:** Point-in-polygon algorithm testing with diverse polygon geometries + +**Characteristics:** +- **Nodes:** 10 nodes with different polygon shapes +- **Edges:** None (focused on polygon testing) +- **Polygon shapes:** + 1. **TriangleNode** - Equilateral triangle (3 vertices) + 2. **PentagonNode** - Regular pentagon (5 vertices) + 3. **HexagonNode** - Regular hexagon (6 vertices) + 4. **LShapeNode** - Concave L-shaped polygon (6 vertices) + 5. **IrregularNode** - Asymmetric irregular polygon (5 vertices) + 6. **TinyNode** - Very small square (0.2m x 0.2m) for precision testing + 7. **LargeNode** - Very large square (20m x 20m) for scale testing + 8. **RectangleNode** - Non-square rectangle (6m x 2m) + 9. **EmptyVertsNode** - Empty verts list (edge case) + 10. **StarNode** - Complex concave star shape (10 vertices) + +**Use cases:** +- Point-in-polygon algorithm validation +- Convex polygon testing (triangle, pentagon, hexagon, rectangle) +- Concave polygon testing (L-shape, star) +- Edge case testing (empty verts, tiny polygon, large polygon) +- Irregular polygon testing +- Ray-casting algorithm correctness verification + +## Testing Guidelines + +### Unit Tests +When writing unit tests, use these fixtures as follows: + +1. **simple_map.yaml** - For basic functionality tests where you need minimal complexity +2. **complex_map.yaml** - For integration tests and realistic scenarios +3. **polygon_shapes_map.yaml** - For point-in-polygon specific tests + +### Example Usage + +```python +import yaml +from pathlib import Path + +# Load fixture +fixture_path = Path(__file__).parent / 'fixtures' / 'simple_map.yaml' +with open(fixture_path, 'r') as f: + map_data = yaml.safe_load(f) + +# Use in tests +def test_graph_construction(): + graph = build_graph_from_tmap(map_data) + assert graph.number_of_nodes() == 2 + assert graph.number_of_edges() == 1 +``` + +### Point-in-Polygon Test Cases + +The `polygon_shapes_map.yaml` fixture enables comprehensive testing: + +```python +# Test point inside triangle +pose_inside = create_pose(0.0, 0.5) # Inside TriangleNode +assert point_in_poly_nx(graph, 'TriangleNode', pose_inside) == True + +# Test point outside triangle +pose_outside = create_pose(5.0, 5.0) # Outside TriangleNode +assert point_in_poly_nx(graph, 'TriangleNode', pose_outside) == False + +# Test concave polygon (L-shape) +pose_in_concave = create_pose(0.5, 11.5) # Inside L-shape +assert point_in_poly_nx(graph, 'LShapeNode', pose_in_concave) == True + +# Test empty verts edge case +pose_any = create_pose(20.0, -10.0) +assert point_in_poly_nx(graph, 'EmptyVertsNode', pose_any) == False +``` + +## Maintenance + +When adding new fixtures: +1. Follow the existing YAML structure +2. Use descriptive node names +3. Document the purpose in this README +4. Ensure valid topological map format (schema2.json compliant) +5. Add corresponding test cases + +## Validation + +All fixtures should validate against `topological_navigation/config/schema2.json`. + +To validate manually: +```bash +# Install jsonschema if needed +pip install jsonschema pyyaml + +# Validate fixture +python -c " +import yaml +import json +from jsonschema import validate + +with open('topological_navigation/config/schema2.json') as f: + schema = json.load(f) + +with open('topological_navigation/test/fixtures/simple_map.yaml') as f: + data = yaml.safe_load(f) + +validate(instance=data, schema=schema) +print('Valid!') +" +``` + +## References + +- Requirements: `/home/ibrahim/.kiro/specs/localisation-networkx-refactor/requirements.md` +- Design: `/home/ibrahim/.kiro/specs/localisation-networkx-refactor/design.md` +- Schema: `topological_navigation/config/schema2.json` +- AGENTS.md: Project development guidelines diff --git a/topological_navigation/test/fixtures/complex_map.yaml b/topological_navigation/test/fixtures/complex_map.yaml new file mode 100644 index 00000000..98694c9f --- /dev/null +++ b/topological_navigation/test/fixtures/complex_map.yaml @@ -0,0 +1,426 @@ +meta: + last_updated: 01-01-2026_00-00-00 + origin: + latitude: 0.0 + longitude: 0.0 + altitude: 0.0 + +metric_map: complex_test_map +name: complex_test_map +pointset: complex_test_map + +transformation: + topo_frame_id: complex_test_map + parent: map + rotation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + translation: + x: 0.0 + y: 0.0 + z: 0.0 + +definitions: + default_bt: | + + + + + + + + + row_traversal_bt: | + + + + + + + + + +actions: + navigate_to_pose: + composable: false + action_type: nav2_msgs.action.NavigateToPose + action_server: /navigate_to_pose + action_goal_template: + pose: + header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.default_bt}' + + row_traversal: + composable: true + action_type: nav2_msgs.action.NavigateThroughPoses + action_server: /navigate_through_poses + action_goal_template: + poses: + - header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.row_traversal_bt}' + +nodes: + - meta: + map: complex_test_map + node: Entry + pointset: complex_test_map + tag: ['entry_point'] + node: + edges: + - action: navigate_to_pose + edge_id: Entry_Junction1 + node: Junction1 + properties: + max_speed: 0.8 + - action: navigate_to_pose + edge_id: Entry_Row1Start + node: Row1Start + name: Entry + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + semantics: entry + verts: + - x: -1.0 + y: -1.0 + - x: 1.0 + y: -1.0 + - x: 1.0 + y: 1.0 + - x: -1.0 + y: 1.0 + + - meta: + map: complex_test_map + node: Junction1 + pointset: complex_test_map + node: + edges: + - action: navigate_to_pose + edge_id: Junction1_Row1Start + node: Row1Start + - action: navigate_to_pose + edge_id: Junction1_Row2Start + node: Row2Start + - action: navigate_to_pose + edge_id: Junction1_Exit + node: Exit + name: Junction1 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 5.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.5 + verts: + - x: -1.5 + y: -1.5 + - x: 1.5 + y: -1.5 + - x: 1.5 + y: 1.5 + - x: -1.5 + y: 1.5 + + - meta: + map: complex_test_map + node: Row1Start + pointset: complex_test_map + tag: ['row_entry'] + node: + edges: + - action: row_traversal + edge_id: Row1Start_Row1End + node: Row1End + properties: + max_speed: 0.3 + row_type: vineyard + roboflow: + enabled: true + confidence: 0.7 + name: Row1Start + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: 0.707 + position: + x: 5.0 + y: 5.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.2 + yaw_goal_tolerance: 0.05 + semantics: row_entry + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: complex_test_map + node: Row1End + pointset: complex_test_map + tag: ['row_exit'] + node: + edges: + - action: navigate_to_pose + edge_id: Row1End_Junction2 + node: Junction2 + name: Row1End + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: 0.707 + position: + x: 15.0 + y: 5.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.2 + semantics: row_exit + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: complex_test_map + node: Row2Start + pointset: complex_test_map + tag: ['row_entry'] + node: + edges: + - action: row_traversal + edge_id: Row2Start_Row2End + node: Row2End + properties: + max_speed: 0.3 + row_type: vineyard + name: Row2Start + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: 0.707 + position: + x: 5.0 + y: -5.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.2 + yaw_goal_tolerance: 0.05 + semantics: row_entry + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: complex_test_map + node: Row2End + pointset: complex_test_map + tag: ['row_exit'] + node: + edges: + - action: navigate_to_pose + edge_id: Row2End_Junction2 + node: Junction2 + name: Row2End + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: 0.707 + position: + x: 15.0 + y: -5.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.2 + semantics: row_exit + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: complex_test_map + node: Junction2 + pointset: complex_test_map + node: + edges: + - action: navigate_to_pose + edge_id: Junction2_Exit + node: Exit + name: Junction2 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 20.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.5 + verts: + - x: -1.5 + y: -1.5 + - x: 1.5 + y: -1.5 + - x: 1.5 + y: 1.5 + - x: -1.5 + y: 1.5 + + - meta: + map: complex_test_map + node: Exit + pointset: complex_test_map + tag: ['exit_point'] + node: + edges: [] + name: Exit + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 25.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + semantics: exit + verts: + - x: -1.0 + y: -1.0 + - x: 1.0 + y: -1.0 + - x: 1.0 + y: 1.0 + - x: -1.0 + y: 1.0 + + - meta: + map: complex_test_map + node: NoGoZone + pointset: complex_test_map + tag: ['no_go'] + node: + edges: [] + name: NoGoZone + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 10.0 + y: 10.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + no_go: true + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: complex_test_map + node: TopicLocaliseNode + pointset: complex_test_map + node: + edges: [] + localise_by_topic: '{"topic": "/special_zone", "field": "data", "val": "active", "localise_anywhere": true, "persistency": 5}' + name: TopicLocaliseNode + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 10.0 + y: -10.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 diff --git a/topological_navigation/test/fixtures/mergeable_map_a.yaml b/topological_navigation/test/fixtures/mergeable_map_a.yaml new file mode 100644 index 00000000..a62bcb6f --- /dev/null +++ b/topological_navigation/test/fixtures/mergeable_map_a.yaml @@ -0,0 +1,68 @@ +meta: + last_updated: 01-01-2026_00-00-00 + origin: + latitude: 51.5000000 + longitude: -0.1000000 + altitude: 10.0 + fields: + - name: boundary_a + field_number: 1 + gnss_fence_coords: + - - 51.5000000 + - -0.1000000 + - - 51.5001000 + - -0.1000000 + +metric_map: mergeable_map_a +name: mergeable_map_a +pointset: mergeable_map_a + +transformation: + topo_frame_id: map_a_frame + parent: map + rotation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + translation: + x: 0.0 + y: 0.0 + z: 0.0 + +nodes: + - meta: + map: mergeable_map_a + node: WP1 + pointset: mergeable_map_a + node: + name: WP1 + nav_frame: map + pose: + orientation: {w: 1.0, x: 0.0, y: 0.0, z: 0.0} + position: {x: 0.0, y: 0.0, z: 0.0} + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + edges: + - edge_id: WP1_WP2 + node: WP2 + action: navigate_to_pose + action_type: nav2_msgs/action/NavigateToPose + properties: + max_speed: 0.5 + + - meta: + map: mergeable_map_a + node: WP2 + pointset: mergeable_map_a + node: + name: WP2 + nav_frame: map + pose: + orientation: {w: 1.0, x: 0.0, y: 0.0, z: 0.0} + position: {x: 5.0, y: 0.0, z: 0.0} + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + edges: [] diff --git a/topological_navigation/test/fixtures/mergeable_map_b.yaml b/topological_navigation/test/fixtures/mergeable_map_b.yaml new file mode 100644 index 00000000..1fe51795 --- /dev/null +++ b/topological_navigation/test/fixtures/mergeable_map_b.yaml @@ -0,0 +1,68 @@ +meta: + last_updated: 02-02-2026_00-00-00 + origin: + latitude: 51.5010000 + longitude: -0.0990000 + altitude: 15.0 + fields: + - name: boundary_b + field_number: 1 + gnss_fence_coords: + - - 51.5010000 + - -0.0990000 + - - 51.5011000 + - -0.0990000 + +metric_map: mergeable_map_b +name: mergeable_map_b +pointset: mergeable_map_b + +transformation: + topo_frame_id: map_b_frame + parent: map + rotation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + translation: + x: 0.0 + y: 0.0 + z: 0.0 + +nodes: + - meta: + map: mergeable_map_b + node: WP1 + pointset: mergeable_map_b + node: + name: WP1 + nav_frame: map + pose: + orientation: {w: 1.0, x: 0.0, y: 0.0, z: 0.0} + position: {x: 0.0, y: 0.0, z: 0.0} + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + edges: + - edge_id: WP1_WP2 + node: WP2 + action: navigate_to_pose + action_type: nav2_msgs/action/NavigateToPose + properties: + max_speed: 0.5 + + - meta: + map: mergeable_map_b + node: WP2 + pointset: mergeable_map_b + node: + name: WP2 + nav_frame: map + pose: + orientation: {w: 1.0, x: 0.0, y: 0.0, z: 0.0} + position: {x: 0.0, y: 5.0, z: 0.0} + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + edges: [] diff --git a/topological_navigation/test/fixtures/mixed_actions_map.yaml b/topological_navigation/test/fixtures/mixed_actions_map.yaml new file mode 100644 index 00000000..4daddfcb --- /dev/null +++ b/topological_navigation/test/fixtures/mixed_actions_map.yaml @@ -0,0 +1,323 @@ +meta: + last_updated: 08-03-2026_12-00-00 + origin: + latitude: 53.268642038 + longitude: -0.524509505881 + altitude: 0 + +metric_map: mixed_test_map +name: mixed_test_map +pointset: mixed_test_map + +# All nodes default to topo_frame_id ("mixed_test_map") +transformation: + topo_frame_id: mixed_test_map + parent: map + rotation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + translation: + x: 0.0 + y: 0.0 + z: 0.0 + +definitions: + default_bt: | + + + + + + + + + goal_align_bt: | + + + + + + + + + row_traversal_bt: | + + + + + + + + + +actions: + navigate_to_pose: + composable: false + action_type: nav2_msgs.action.NavigateToPose + action_server: /navigate_to_pose + action_goal_template: + pose: + header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.default_bt}' + + navigate_to_poses: + composable: true + action_type: nav2_msgs.action.NavigateThroughPoses + action_server: /navigate_through_poses + action_goal_template: + poses: + - header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.default_bt}' + + goal_align: + composable: false + action_type: nav2_msgs.action.NavigateToPose + action_server: /navigate_to_pose + action_goal_template: + pose: + header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.goal_align_bt}' + + row_traversal: + composable: true + action_type: nav2_msgs.action.NavigateThroughPoses + action_server: /navigate_through_poses + action_goal_template: + poses: + - header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.row_traversal_bt}' + +nodes: + # N1 -- navigate_to_pose --> N2 -- navigate_to_pose --> N3 + # N3 -- row_traversal --> N4 -- row_traversal --> N5 + # N5 -- goal_align --> N6 + + - meta: + map: mixed_test_map + node: N1 + pointset: mixed_test_map + node: + edges: + - action: navigate_to_pose + edge_id: N1_N2 + node: N2 + name: N1 + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + verts: + - x: -1.0 + y: -1.0 + - x: 1.0 + y: -1.0 + - x: 1.0 + y: 1.0 + - x: -1.0 + y: 1.0 + + - meta: + map: mixed_test_map + node: N2 + pointset: mixed_test_map + node: + edges: + - action: navigate_to_pose + edge_id: N2_N3 + node: N3 + - action: navigate_to_pose + edge_id: N2_N1 + node: N1 + name: N2 + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 3.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + verts: + - x: -1.0 + y: -1.0 + - x: 1.0 + y: -1.0 + - x: 1.0 + y: 1.0 + - x: -1.0 + y: 1.0 + + - meta: + map: mixed_test_map + node: N3 + pointset: mixed_test_map + node: + edges: + - action: row_traversal + edge_id: N3_N4 + node: N4 + properties: + boundary_left: 0.4 + boundary_right: 0.6 + - action: navigate_to_pose + edge_id: N3_N2 + node: N2 + name: N3 + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 6.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.1 + yaw_goal_tolerance: 0.05 + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: mixed_test_map + node: N4 + pointset: mixed_test_map + node: + edges: + - action: row_traversal + edge_id: N4_N5 + node: N5 + properties: + boundary_left: 0.4 + boundary_right: 0.6 + - action: row_traversal + edge_id: N4_N3 + node: N3 + properties: + boundary_left: 0.4 + boundary_right: 0.6 + name: N4 + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 9.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.1 + yaw_goal_tolerance: 0.05 + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: mixed_test_map + node: N5 + pointset: mixed_test_map + node: + edges: + - action: goal_align + edge_id: N5_N6 + node: N6 + - action: row_traversal + edge_id: N5_N4 + node: N4 + name: N5 + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: 0.707 + position: + x: 12.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.05 + yaw_goal_tolerance: 0.02 + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 + + - meta: + map: mixed_test_map + node: N6 + pointset: mixed_test_map + node: + edges: + - action: goal_align + edge_id: N6_N5 + node: N5 + name: N6 + nav_frame: map # override: use 'map' instead of topo_frame_id + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: 0.707 + position: + x: 15.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.05 + yaw_goal_tolerance: 0.02 + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 diff --git a/topological_navigation/test/fixtures/polygon_shapes_map.yaml b/topological_navigation/test/fixtures/polygon_shapes_map.yaml new file mode 100644 index 00000000..5d45b4a3 --- /dev/null +++ b/topological_navigation/test/fixtures/polygon_shapes_map.yaml @@ -0,0 +1,372 @@ +meta: + last_updated: 01-01-2026_00-00-00 + origin: + latitude: 0.0 + longitude: 0.0 + altitude: 0.0 + +metric_map: polygon_shapes_test_map +name: polygon_shapes_test_map +pointset: polygon_shapes_test_map + +transformation: + topo_frame_id: polygon_shapes_test_map + parent: map + rotation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + translation: + x: 0.0 + y: 0.0 + z: 0.0 + +definitions: + default_bt: | + + + + + + + + + +actions: + navigate_to_pose: + composable: false + action_type: nav2_msgs.action.NavigateToPose + action_server: /navigate_to_pose + action_goal_template: + pose: + header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.default_bt}' + +nodes: + # Triangle polygon + - meta: + map: polygon_shapes_test_map + node: TriangleNode + pointset: polygon_shapes_test_map + node: + edges: [] + name: TriangleNode + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + verts: + - x: 0.0 + y: 2.0 + - x: -1.732 + y: -1.0 + - x: 1.732 + y: -1.0 + + # Pentagon polygon + - meta: + map: polygon_shapes_test_map + node: PentagonNode + pointset: polygon_shapes_test_map + node: + edges: [] + name: PentagonNode + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 10.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + verts: + - x: 0.0 + y: 2.0 + - x: 1.902 + y: 0.618 + - x: 1.176 + y: -1.618 + - x: -1.176 + y: -1.618 + - x: -1.902 + y: 0.618 + + # Hexagon polygon + - meta: + map: polygon_shapes_test_map + node: HexagonNode + pointset: polygon_shapes_test_map + node: + edges: [] + name: HexagonNode + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 20.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + verts: + - x: 1.0 + y: 0.0 + - x: 0.5 + y: 0.866 + - x: -0.5 + y: 0.866 + - x: -1.0 + y: 0.0 + - x: -0.5 + y: -0.866 + - x: 0.5 + y: -0.866 + + # L-shaped (concave) polygon + - meta: + map: polygon_shapes_test_map + node: LShapeNode + pointset: polygon_shapes_test_map + node: + edges: [] + name: LShapeNode + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 10.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + verts: + - x: 0.0 + y: 0.0 + - x: 2.0 + y: 0.0 + - x: 2.0 + y: 1.0 + - x: 1.0 + y: 1.0 + - x: 1.0 + y: 3.0 + - x: 0.0 + y: 3.0 + + # Irregular polygon (asymmetric) + - meta: + map: polygon_shapes_test_map + node: IrregularNode + pointset: polygon_shapes_test_map + node: + edges: [] + name: IrregularNode + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 10.0 + y: 10.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + verts: + - x: 0.0 + y: 0.0 + - x: 3.0 + y: 0.5 + - x: 2.5 + y: 2.0 + - x: 1.0 + y: 2.5 + - x: -0.5 + y: 1.5 + + # Very small polygon (stress test) + - meta: + map: polygon_shapes_test_map + node: TinyNode + pointset: polygon_shapes_test_map + node: + edges: [] + name: TinyNode + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 20.0 + y: 10.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.05 + verts: + - x: -0.1 + y: -0.1 + - x: 0.1 + y: -0.1 + - x: 0.1 + y: 0.1 + - x: -0.1 + y: 0.1 + + # Large polygon (stress test) + - meta: + map: polygon_shapes_test_map + node: LargeNode + pointset: polygon_shapes_test_map + node: + edges: [] + name: LargeNode + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: -10.0 + z: 0.0 + properties: + xy_goal_tolerance: 2.0 + verts: + - x: -10.0 + y: -10.0 + - x: 10.0 + y: -10.0 + - x: 10.0 + y: 10.0 + - x: -10.0 + y: 10.0 + + # Rectangle (non-square) + - meta: + map: polygon_shapes_test_map + node: RectangleNode + pointset: polygon_shapes_test_map + node: + edges: [] + name: RectangleNode + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 10.0 + y: -10.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + verts: + - x: -3.0 + y: -1.0 + - x: 3.0 + y: -1.0 + - x: 3.0 + y: 1.0 + - x: -3.0 + y: 1.0 + + # Empty verts (edge case for testing) + - meta: + map: polygon_shapes_test_map + node: EmptyVertsNode + pointset: polygon_shapes_test_map + node: + edges: [] + name: EmptyVertsNode + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 20.0 + y: -10.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + verts: [] + + # Star-shaped polygon (complex concave) + - meta: + map: polygon_shapes_test_map + node: StarNode + pointset: polygon_shapes_test_map + node: + edges: [] + name: StarNode + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 30.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + verts: + - x: 0.0 + y: 2.0 + - x: 0.588 + y: 0.618 + - x: 1.902 + y: 0.618 + - x: 0.951 + y: -0.191 + - x: 1.176 + y: -1.618 + - x: 0.0 + y: -0.809 + - x: -1.176 + y: -1.618 + - x: -0.951 + y: -0.191 + - x: -1.902 + y: 0.618 + - x: -0.588 + y: 0.618 + diff --git a/topological_navigation/test/fixtures/riseholme.tmap3.yaml b/topological_navigation/test/fixtures/riseholme.tmap3.yaml new file mode 100644 index 00000000..01777e59 --- /dev/null +++ b/topological_navigation/test/fixtures/riseholme.tmap3.yaml @@ -0,0 +1,4530 @@ +meta: + last_updated: 07-15-2026_13-26-26 + origin: + latitude: 53.268642038 + longitude: -0.524509505881 + altitude: 0 +metric_map: riseholme +name: riseholme +pointset: riseholme +transformation: + topo_frame_id: riseholme + parent: map + rotation: + w: 1 + x: 0 + y: 0 + z: 0 + translation: + x: 0 + y: 0 + z: 0 +nodes: + - meta: + map: riseholme + node: t1-a4-c0 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a4-c0_t1-a4-cb + node: t1-a4-cb + - action: row_traversal + edge_id: t1-a4-c0_t1-a4-c1 + node: t1-a4-c1 + name: t1-a4-c0 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 23.133585 + y: -15.683673 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r4.5-c0 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a3-c0 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a3-c0_t1-a3-cb + node: t1-a3-cb + - action: row_traversal + edge_id: t1-a3-c0_t1-a3-c1 + node: t1-a3-c1 + name: t1-a3-c0 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 24.441082 + y: -15.486186 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r3.5-c0 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a2-c0 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a2-c0_t1-a2-cb + node: t1-a2-cb + - action: row_traversal + edge_id: t1-a2-c0_t1-a2-c1 + node: t1-a2-c1 + name: t1-a2-c0 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 25.753578 + y: -15.2862 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r2.5-c0 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a1-c0 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a1-c0_t1-a1-cb + node: t1-a1-cb + - action: row_traversal + edge_id: t1-a1-c0_t1-a1-c1 + node: t1-a1-c1 + name: t1-a1-c0 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 27.078575 + y: -15.088714 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r1.5-c0 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t2-a4-cb + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: t2-a4-cb_t2-a4-ca + node: t2-a4-ca + - action: row_traversal + edge_id: t2-a4-cb_t2-a4-c0 + node: t2-a4-c0 + name: t2-a4-cb + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614282 + x: 0 + y: 0 + z: -0.653861475 + position: + x: 14.589253426 + y: -12.49104023 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r9.5-cb + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a3-cb + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: t2-a3-cb_t2-a3-ca + node: t2-a3-ca + - action: row_traversal + edge_id: t2-a3-cb_t2-a3-c0 + node: t2-a3-c0 + name: t2-a3-cb + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614282 + x: 0 + y: 0 + z: -0.653861475 + position: + x: 15.911572456 + y: -12.285264969 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r8.5-cb + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a2-cb + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: t2-a2-cb_t2-a2-ca + node: t2-a2-ca + - action: row_traversal + edge_id: t2-a2-cb_t2-a2-c0 + node: t2-a2-c0 + name: t2-a2-cb + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614282 + x: 0 + y: 0 + z: -0.653861475 + position: + x: 17.253984451 + y: -12.133831024 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r7.5-cb + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a1-cb + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: t2-a1-cb_t2-a1-ca + node: t2-a1-ca + - action: row_traversal + edge_id: t2-a1-cb_t2-a1-c0 + node: t2-a1-c0 + name: t2-a1-cb + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614282 + x: 0 + y: 0 + z: -0.653861475 + position: + x: 18.582494736 + y: -11.977831841 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: t2-a1-cb + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t1-a4-cb + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: t1-a4-cb_t1-a4-ca + node: t1-a4-ca + - action: row_traversal + edge_id: t1-a4-cb_t1-a4-c0 + node: t1-a4-c0 + name: t1-a4-cb + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.75708681 + x: 0 + y: 0 + z: -0.65331429 + position: + x: 22.475885391 + y: -11.188367844 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r4.5-cb + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a3-cb + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: t1-a3-cb_t1-a3-ca + node: t1-a3-ca + - action: row_traversal + edge_id: t1-a3-cb_t1-a3-c0 + node: t1-a3-c0 + name: t1-a3-cb + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.75708681 + x: 0 + y: 0 + z: -0.65331429 + position: + x: 23.78515625 + y: -11.02477169 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r3.5-cb + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a2-cb + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: t1-a2-cb_t1-a2-ca + node: t1-a2-ca + - action: row_traversal + edge_id: t1-a2-cb_t1-a2-c0 + node: t1-a2-c0 + name: t1-a2-cb + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.75708681 + x: 0 + y: 0 + z: -0.65331429 + position: + x: 25.083076477 + y: -10.840136528 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r2.5-cb + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a1-cb + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: t1-a1-cb_t1-a1-ca + node: t1-a1-ca + - action: row_traversal + edge_id: t1-a1-cb_t1-a1-c0 + node: t1-a1-c0 + name: t1-a1-cb + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.75708681 + x: 0 + y: 0 + z: -0.65331429 + position: + x: 26.406053543 + y: -10.638991356 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r1.5-cb + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t2-a4-ca + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a4-ca_t2-a4-cb + node: t2-a4-cb + - action: navigate_through_poses + edge_id: t2-a4-ca_WayPoint10 + node: WayPoint10 + name: t2-a4-ca + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 14.258127 + y: -10.248433 + z: 0 + properties: + xy_goal_tolerance: 0.8 + yaw_goal_tolerance: 0.150 + roboflow: + enabled: false + roboflow_name: r9.5-ca + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a3-ca + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a3-ca_t2-a3-cb + node: t2-a3-cb + - action: navigate_through_poses + edge_id: t2-a3-ca_WayPoint9 + node: WayPoint9 + name: t2-a3-ca + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 15.580926 + y: -10.061266 + z: 0 + properties: + xy_goal_tolerance: 0.8 + yaw_goal_tolerance: 0.150 + roboflow: + enabled: false + roboflow_name: r8.5-ca + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a2-ca + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a2-ca_t2-a2-cb + node: t2-a2-cb + - action: navigate_through_poses + edge_id: t2-a2-ca_WayPoint8 + node: WayPoint8 + name: t2-a2-ca + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 16.920899 + y: -9.87591 + z: 0 + properties: + xy_goal_tolerance: 0.8 + yaw_goal_tolerance: 0.150 + roboflow: + enabled: false + roboflow_name: r7.5-ca + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a1-ca + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a1-ca_t2-a1-cb + node: t2-a1-cb + - action: navigate_through_poses + edge_id: t2-a1-ca_WayPoint7 + node: WayPoint7 + name: t2-a1-ca + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.737277337 + x: 0 + y: 0 + z: -0.675590208 + position: + x: 18.252456 + y: -9.69496 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r6.5-ca + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t1-a4-ca + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a4-ca_t1-a4-cb + node: t1-a4-cb + - action: navigate_through_poses + edge_id: t1-a4-ca_WayPoint6 + node: WayPoint6 + name: t1-a4-ca + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 22.175374 + y: -9.131892 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r4.5-ca + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a3-ca + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a3-ca_t1-a3-cb + node: t1-a3-cb + - action: navigate_through_poses + edge_id: t1-a3-ca_WayPoint5 + node: WayPoint5 + name: t1-a3-ca + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 23.477533 + y: -8.939823 + z: 0 + properties: + xy_goal_tolerance: 0.8 + yaw_goal_tolerance: 0.150 + roboflow: + enabled: false + roboflow_name: r3.5-ca + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a2-ca + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a2-ca_t1-a2-cb + node: t1-a2-cb + - action: navigate_through_poses + edge_id: t1-a2-ca_WayPoint4 + node: WayPoint4 + name: t1-a2-ca + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 24.77209 + y: -8.752772 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r2.5-ca + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a1-ca + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a1-ca_t1-a1-cb + node: t1-a1-cb + - action: navigate_through_poses + edge_id: t1-a1-ca_WayPoint3 + node: WayPoint3 + name: t1-a1-ca + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.737277337 + x: 0 + y: 0 + z: -0.675590208 + position: + x: 26.097917 + y: -8.565163 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r1.5-ca + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: WayPoint10 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: WayPoint10_WayPoint9 + node: WayPoint9 + - action: navigate_through_poses + edge_id: WayPoint10_t2-a4-ca + node: t2-a4-ca + name: WayPoint10 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.737277337 + x: 0 + y: 0 + z: -0.675590208 + position: + x: 13.857959 + y: -7.512923 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: WayPoint63 + verts: + - x: -0.389276952 + y: 0.637912571 + - x: -0.725811064 + y: 0.17795302 + - x: -0.637912571 + y: -0.389276952 + - x: -0.426953971 + y: -1.5827564 + - x: 0.954951286 + y: -1.366716743 + - x: 0.725811064 + y: -0.17795302 + - x: 0.637912571 + y: 0.389276952 + - x: 0.17795302 + y: 0.725811064 + - meta: + map: riseholme + node: WayPoint9 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: WayPoint9_WayPoint10 + node: WayPoint10 + - action: navigate_through_poses + edge_id: WayPoint9_t2-a3-ca + node: t2-a3-ca + - action: navigate_through_poses + edge_id: WayPoint9_WayPoint8 + node: WayPoint8 + name: WayPoint9 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.737277337 + x: 0 + y: 0 + z: -0.675590208 + position: + x: 15.204028 + y: -7.310899 + z: 0 + properties: + xy_goal_tolerance: 0.3 + # This is a connector hand-off, not a requested terminal pose. The + # incoming and outgoing aisle paths require a direction change that a + # 4WS Ackermann base cannot complete in-place at this coordinate. + yaw_goal_tolerance: 0.150 + roboflow: + enabled: false + roboflow_name: WayPoint56 + verts: + - x: -0.389276952 + y: 0.637912571 + - x: -0.725811064 + y: 0.17795302 + - x: -0.637912571 + y: -0.389276952 + - x: -0.504145145 + y: -1.528110743 + - x: 1.005795956 + y: -1.267529964 + - x: 0.725811064 + y: -0.17795302 + - x: 0.637912571 + y: 0.389276952 + - x: 0.17795302 + y: 0.725811064 + - meta: + map: riseholme + node: WayPoint7 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: WayPoint7_t2-a1-ca + node: t2-a1-ca + - action: navigate_through_poses + edge_id: WayPoint7_WayPoint8 + node: WayPoint8 + - action: navigate_through_poses + edge_id: WayPoint7_QC + node: QC + name: WayPoint7 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.737277337 + x: 0 + y: 0 + z: -0.675590208 + position: + x: 17.838252 + y: -6.92087 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: WayPoint66 + verts: + - x: -0.389276952 + y: 0.637912571 + - x: -0.725811064 + y: 0.17795302 + - x: -0.637912571 + y: -0.389276952 + - x: -0.654149175 + y: -1.57640636 + - x: 0.991357863 + y: -1.315243483 + - x: 0.725811064 + y: -0.17795302 + - x: 0.637912571 + y: 0.389276952 + - x: 0.17795302 + y: 0.725811064 + - meta: + map: riseholme + node: WayPoint5 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: WayPoint5_WayPoint6 + node: WayPoint6 + - action: navigate_through_poses + edge_id: WayPoint5_t1-a3-ca + node: t1-a3-ca + - action: navigate_through_poses + edge_id: WayPoint5_WayPoint4 + node: WayPoint4 + name: WayPoint5 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.737277337 + x: 0 + y: 0 + z: -0.675590208 + position: + x: 23.080998 + y: -6.13956 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: WayPoint73 + verts: + - x: -0.389276952 + y: 0.637912571 + - x: -0.725811064 + y: 0.17795302 + - x: -0.637912571 + y: -0.389276952 + - x: -0.567866266 + y: -1.618186355 + - x: 0.967507243 + y: -1.308015347 + - x: 0.725811064 + y: -0.17795302 + - x: 0.637912571 + y: 0.389276952 + - x: 0.17795302 + y: 0.725811064 + - meta: + map: riseholme + node: WayPoint6 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: WayPoint6_WayPoint5 + node: WayPoint5 + - action: navigate_through_poses + edge_id: WayPoint6_t1-a4-ca + node: t1-a4-ca + - action: navigate_through_poses + edge_id: WayPoint6_QC + node: QC + name: WayPoint6 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.737277337 + x: 0 + y: 0 + z: -0.675590208 + position: + x: 21.711411 + y: -6.31297 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: WayPoint74 + verts: + - x: -0.389276952 + y: 0.637912571 + - x: -0.725811064 + y: 0.17795302 + - x: -0.637912571 + y: -0.389276952 + - x: -0.639209645 + y: -1.63174519 + - x: 0.936634523 + y: -1.359887451 + - x: 0.725811064 + y: -0.17795302 + - x: 0.637912571 + y: 0.389276952 + - x: 0.17795302 + y: 0.725811064 + - meta: + map: riseholme + node: WayPoint3 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: WayPoint3_t1-a1-ca + node: t1-a1-ca + - action: navigate_through_poses + edge_id: WayPoint3_WayPoint2 + node: WayPoint2 + - action: navigate_through_poses + edge_id: WayPoint3_WayPoint4 + node: WayPoint4 + name: WayPoint3 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.737277337 + x: 0 + y: 0 + z: -0.675590208 + position: + x: 25.684737 + y: -5.736575 + z: 0 + properties: + xy_goal_tolerance: 0.12 + yaw_goal_tolerance: 0.08 + roboflow: + enabled: false + roboflow_name: WayPoint67 + verts: + - x: -0.389276952 + y: 0.637912571 + - x: -0.725811064 + y: 0.17795302 + - x: -0.637912571 + y: -0.389276952 + - x: -0.639109969 + y: -1.664310575 + - x: 0.955555677 + y: -1.475649238 + - x: 0.725811064 + y: -0.17795302 + - x: 0.637912571 + y: 0.389276952 + - x: 0.17795302 + y: 0.725811064 + - meta: + map: riseholme + node: WayPoint2 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: WayPoint2_WayPoint3 + node: WayPoint3 + - action: navigate_through_poses + edge_id: WayPoint2_WayPoint1 + node: WayPoint1 + name: WayPoint2 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.689354695 + x: 0 + y: 0 + z: -0.724423981 + position: + x: 25.999985 + y: -2.800142 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: WayPoint144 + verts: + - x: 0.689999998 + y: 0.287 + - x: 0.287 + y: 0.689999998 + - x: -0.287 + y: 0.689999998 + - x: -0.689999998 + y: 0.287 + - x: -0.689999998 + y: -0.287 + - x: -0.287 + y: -0.689999998 + - x: 0.287 + y: -0.689999998 + - x: 0.689999998 + y: -0.287 + - meta: + map: riseholme + node: Office + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: Office_WayPoint1 + node: WayPoint1 + name: Office + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.707106781 + x: 0 + y: 0 + z: -0.707106781 + position: + x: 25.750015 + y: 2.799861 + z: 0 + properties: + xy_goal_tolerance: 0.12 + yaw_goal_tolerance: 0.08 + roboflow: + enabled: true + roboflow_name: Office Drop Off + verts: + - x: -0.268447876 + y: 0.700840473 + - x: -1.017343521 + y: 0.270284176 + - x: -1.08588028 + y: -0.547501802 + - x: -0.496746063 + y: -1.165823936 + - x: 0.359563828 + y: -1.040766954 + - x: 0.839046478 + y: -0.11228919 + - x: 0.823705673 + y: 0.478964329 + - x: 0.357343674 + y: 0.90849781 + - meta: + map: riseholme + node: t2-a4-cz + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a4-cz_t2-a4-cy + node: t2-a4-cy + name: t2-a4-cz + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 18.324196 + y: -37.834181 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r9.5-cz + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a3-cz + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a3-cz_t2-a3-cy + node: t2-a3-cy + name: t2-a3-cz + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 19.663886 + y: -37.623867 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r8.5-cz + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a2-cz + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a2-cz_t2-a2-cy + node: t2-a2-cy + name: t2-a2-cz + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 20.986401 + y: -37.411743 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r7.5-cz + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a1-cz + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a1-cz_t2-a1-cy + node: t2-a1-cy + name: t2-a1-cz + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 22.254832 + y: -37.225214 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r6.5-cz + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t1-a4-cz + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a4-cz_t1-a4-cy + node: t1-a4-cy + name: t1-a4-cz + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 26.201704 + y: -36.600476 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r4.5-cz + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a3-cz + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a3-cz_t1-a3-cy + node: t1-a3-cy + name: t1-a3-cz + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 27.517034 + y: -36.400073 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r3.5-cz + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a2-cz + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a2-cz_t1-a2-cy + node: t1-a2-cy + name: t1-a2-cz + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 28.842467 + y: -36.209653 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r2.5-cz + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a1-cz + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a1-cz_t1-a1-cy + node: t1-a1-cy + name: t1-a1-cz + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 30.16413 + y: -36.034792 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r1.5-cz + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t2-a4-cy + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a4-cy_t2-a4-c5 + node: t2-a4-c5 + - action: row_traversal + edge_id: t2-a4-cy_t2-a4-cz + node: t2-a4-cz + name: t2-a4-cy + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 17.799872 + y: -34.272567 + z: 0 + properties: + xy_goal_tolerance: 0.12 + yaw_goal_tolerance: 0.08 + roboflow: + enabled: true + roboflow_name: Tunnel 2 - Aisle 4 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a3-cy + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a3-cy_t2-a3-c5 + node: t2-a3-c5 + - action: row_traversal + edge_id: t2-a3-cy_t2-a3-cz + node: t2-a3-cz + name: t2-a3-cy + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 19.137363 + y: -34.062577 + z: 0 + properties: + xy_goal_tolerance: 0.12 + yaw_goal_tolerance: 0.08 + roboflow: + enabled: true + roboflow_name: Tunnel 2 - Aisle 3 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a2-cy + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a2-cy_t2-a2-c5 + node: t2-a2-c5 + - action: row_traversal + edge_id: t2-a2-cy_t2-a2-cz + node: t2-a2-cz + name: t2-a2-cy + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 20.462354 + y: -33.850088 + z: 0 + properties: + xy_goal_tolerance: 0.12 + yaw_goal_tolerance: 0.08 + roboflow: + enabled: true + roboflow_name: Tunnel 2 - Aisle 2 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a1-cy + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a1-cy_t2-a1-c5 + node: t2-a1-c5 + - action: row_traversal + edge_id: t2-a1-cy_t2-a1-cz + node: t2-a1-cz + name: t2-a1-cy + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 21.737346 + y: -33.662599 + z: 0 + properties: + xy_goal_tolerance: 0.12 + yaw_goal_tolerance: 0.08 + roboflow: + enabled: true + roboflow_name: Tunnel 2 - Aisle 1 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t1-a4-cy + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a4-cy_t1-a4-c5 + node: t1-a4-c5 + - action: row_traversal + edge_id: t1-a4-cy_t1-a4-cz + node: t1-a4-cz + name: t1-a4-cy + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 25.678483 + y: -33.038699 + z: 0 + properties: + xy_goal_tolerance: 0.12 + yaw_goal_tolerance: 0.08 + roboflow: + enabled: true + roboflow_name: Tunnel 1 - Aisle 4 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a3-cy + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a3-cy_t1-a3-c5 + node: t1-a3-c5 + - action: row_traversal + edge_id: t1-a3-cy_t1-a3-cz + node: t1-a3-cz + name: t1-a3-cy + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 26.990975 + y: -32.838714 + z: 0 + properties: + xy_goal_tolerance: 0.12 + yaw_goal_tolerance: 0.08 + roboflow: + enabled: true + roboflow_name: Tunnel 1 - Aisle 3 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a2-cy + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a2-cy_t1-a2-c5 + node: t1-a2-c5 + - action: row_traversal + edge_id: t1-a2-cy_t1-a2-cz + node: t1-a2-cz + name: t1-a2-cy + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 28.313467 + y: -32.648729 + z: 0 + properties: + xy_goal_tolerance: 0.12 + yaw_goal_tolerance: 0.08 + roboflow: + enabled: true + roboflow_name: Tunnel 1 - Aisle 2 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a1-cy + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a1-cy_t1-a1-c5 + node: t1-a1-c5 + - action: row_traversal + edge_id: t1-a1-cy_t1-a1-cz + node: t1-a1-cz + name: t1-a1-cy + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 29.635959 + y: -32.473745 + z: 0 + properties: + xy_goal_tolerance: 0.12 + yaw_goal_tolerance: 0.08 + roboflow: + enabled: true + roboflow_name: Tunnel 1 - Aisle 1 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t2-a4-c5 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a4-c5_t2-a4-c4 + node: t2-a4-c4 + - action: row_traversal + edge_id: t2-a4-c5_t2-a4-cy + node: t2-a4-cy + name: t2-a4-c5 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 17.402384 + y: -31.575064 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r9.5-c5 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a3-c5 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a3-c5_t2-a3-c4 + node: t2-a3-c4 + - action: row_traversal + edge_id: t2-a3-c5_t2-a3-cy + node: t2-a3-cy + name: t2-a3-c5 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 18.729876 + y: -31.362574 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r8.5-c5 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a2-c5 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a2-c5_t2-a2-c4 + node: t2-a2-c4 + - action: row_traversal + edge_id: t2-a2-c5_t2-a2-cy + node: t2-a2-cy + name: t2-a2-c5 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 20.049869 + y: -31.150085 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: t2-a2-c5 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a1-c5 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a1-c5_t2-a1-c4 + node: t2-a1-c4 + - action: row_traversal + edge_id: t2-a1-c5_t2-a1-cy + node: t2-a1-cy + name: t2-a1-c5 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 21.349861 + y: -30.962596 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r6.5-c5 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t1-a4-c5 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a4-c5_t1-a4-c4 + node: t1-a4-c4 + - action: row_traversal + edge_id: t1-a4-c5_t1-a4-cy + node: t1-a4-cy + name: t1-a4-c5 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 25.2885 + y: -30.363695 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r4.5-c5 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a3-c5 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a3-c5_t1-a3-c4 + node: t1-a3-c4 + - action: row_traversal + edge_id: t1-a3-c5_t1-a3-cy + node: t1-a3-cy + name: t1-a3-c5 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 26.615992 + y: -30.176209 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r3.5-c5 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a2-c5 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a2-c5_t1-a2-c4 + node: t1-a2-c4 + - action: row_traversal + edge_id: t1-a2-c5_t1-a2-cy + node: t1-a2-cy + name: t1-a2-c5 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 27.938485 + y: -29.986224 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r2.5-c5 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a1-c5 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a1-c5_t1-a1-c4 + node: t1-a1-c4 + - action: row_traversal + edge_id: t1-a1-c5_t1-a1-cy + node: t1-a1-cy + name: t1-a1-c5 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 29.263478 + y: -29.81124 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r1.5-c5 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t2-a4-c4 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a4-c4_t2-a4-c3 + node: t2-a4-c3 + - action: row_traversal + edge_id: t2-a4-c4_t2-a4-c5 + node: t2-a4-c5 + name: t2-a4-c4 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 16.989897 + y: -28.702561 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r9.5-c4 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a3-c4 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a3-c4_t2-a3-c3 + node: t2-a3-c3 + - action: row_traversal + edge_id: t2-a3-c4_t2-a3-c5 + node: t2-a3-c5 + name: t2-a3-c4 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 18.31739 + y: -28.505071 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r8.5-c4 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a2-c4 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a2-c4_t2-a2-c3 + node: t2-a2-c3 + - action: row_traversal + edge_id: t2-a2-c4_t2-a2-c5 + node: t2-a2-c5 + name: t2-a2-c4 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 19.637383 + y: -28.305081 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r7.5-c4 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a1-c4 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a1-c4_t2-a1-c3 + node: t2-a1-c3 + - action: row_traversal + edge_id: t2-a1-c4_t2-a1-c5 + node: t2-a1-c5 + name: t2-a1-c4 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 20.942376 + y: -28.112592 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r6.5-c4 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t1-a4-c4 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a4-c4_t1-a4-c3 + node: t1-a4-c3 + - action: row_traversal + edge_id: t1-a4-c4_t1-a4-c5 + node: t1-a4-c5 + name: t1-a4-c4 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 24.878517 + y: -27.52119 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r4.5-c4 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a3-c4 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a3-c4_t1-a3-c3 + node: t1-a3-c3 + - action: row_traversal + edge_id: t1-a3-c4_t1-a3-c5 + node: t1-a3-c5 + name: t1-a3-c4 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 26.201011 + y: -27.326205 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r3.5-c4 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a2-c4 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a2-c4_t1-a2-c3 + node: t1-a2-c3 + - action: row_traversal + edge_id: t1-a2-c4_t1-a2-c5 + node: t1-a2-c5 + name: t1-a2-c4 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 27.526004 + y: -27.15122 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r2.5-c4 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a1-c4 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a1-c4_t1-a1-c3 + node: t1-a1-c3 + - action: row_traversal + edge_id: t1-a1-c4_t1-a1-c5 + node: t1-a1-c5 + name: t1-a1-c4 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 28.850998 + y: -26.976235 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r1.5-c4 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t2-a4-c3 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a4-c3_t2-a4-c2 + node: t2-a4-c2 + - action: row_traversal + edge_id: t2-a4-c3_t2-a4-c4 + node: t2-a4-c4 + name: t2-a4-c3 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 16.56241 + y: -25.725058 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r9.5-c3 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a3-c3 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a3-c3_t2-a3-c2 + node: t2-a3-c2 + - action: row_traversal + edge_id: t2-a3-c3_t2-a3-c4 + node: t2-a3-c4 + name: t2-a3-c3 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 17.887404 + y: -25.530067 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r8.5-c3 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a2-c3 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a2-c3_t2-a2-c2 + node: t2-a2-c2 + - action: row_traversal + edge_id: t2-a2-c3_t2-a2-c4 + node: t2-a2-c4 + name: t2-a2-c3 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 19.212398 + y: -25.340078 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r7.5-c3 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a1-c3 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a1-c3_t2-a1-c2 + node: t2-a1-c2 + - action: row_traversal + edge_id: t2-a1-c3_t2-a1-c4 + node: t2-a1-c4 + name: t2-a1-c3 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 20.517391 + y: -25.147589 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r6.5-c3 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t1-a4-c3 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a4-c3_t1-a4-c2 + node: t1-a4-c2 + - action: row_traversal + edge_id: t1-a4-c3_t1-a4-c4 + node: t1-a4-c4 + name: t1-a4-c3 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 24.443535 + y: -24.546186 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r4.5-c3 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a3-c3 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a3-c3_t1-a3-c2 + node: t1-a3-c2 + - action: row_traversal + edge_id: t1-a3-c3_t1-a3-c4 + node: t1-a3-c4 + name: t1-a3-c3 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 25.751029 + y: -24.3512 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r3.5-c3 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a2-c3 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a2-c3_t1-a2-c2 + node: t1-a2-c2 + - action: row_traversal + edge_id: t1-a2-c3_t1-a2-c4 + node: t1-a2-c4 + name: t1-a2-c3 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 27.076024 + y: -24.176214 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r2.5-c3 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a1-c3 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a1-c3_t1-a1-c2 + node: t1-a1-c2 + - action: row_traversal + edge_id: t1-a1-c3_t1-a1-c4 + node: t1-a1-c4 + name: t1-a1-c3 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 28.398518 + y: -23.97623 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r1.5-c3 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t2-a4-c2 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a4-c2_t2-a4-c1 + node: t2-a4-c1 + - action: row_traversal + edge_id: t2-a4-c2_t2-a4-c3 + node: t2-a4-c3 + name: t2-a4-c2 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 16.124923 + y: -22.762555 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r9.5-c2 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a3-c2 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a3-c2_t2-a3-c1 + node: t2-a3-c1 + - action: row_traversal + edge_id: t2-a3-c2_t2-a3-c3 + node: t2-a3-c3 + name: t2-a3-c2 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 17.442417 + y: -22.552564 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r8.5-c2 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a2-c2 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a2-c2_t2-a2-c1 + node: t2-a2-c1 + - action: row_traversal + edge_id: t2-a2-c2_t2-a2-c3 + node: t2-a2-c3 + name: t2-a2-c2 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 18.767412 + y: -22.375074 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r7.5-c2 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a1-c2 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a1-c2_t2-a1-c1 + node: t2-a1-c1 + - action: row_traversal + edge_id: t2-a1-c2_t2-a1-c3 + node: t2-a1-c3 + name: t2-a1-c2 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 20.074906 + y: -22.172585 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r6.5-c2 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t1-a4-c2 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a4-c2_t1-a4-c1 + node: t1-a4-c1 + - action: row_traversal + edge_id: t1-a4-c2_t1-a4-c3 + node: t1-a4-c3 + name: t1-a4-c2 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 23.998552 + y: -21.583681 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r4.5-c2 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a3-c2 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a3-c2_t1-a3-c1 + node: t1-a3-c1 + - action: row_traversal + edge_id: t1-a3-c2_t1-a3-c3 + node: t1-a3-c3 + name: t1-a3-c2 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 25.301047 + y: -21.401195 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r3.5-c2 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a2-c2 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a2-c2_t1-a2-c1 + node: t1-a2-c1 + - action: row_traversal + edge_id: t1-a2-c2_t1-a2-c3 + node: t1-a2-c3 + name: t1-a2-c2 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 26.626042 + y: -21.211209 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r2.5-c2 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a1-c2 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a1-c2_t1-a1-c1 + node: t1-a1-c1 + - action: row_traversal + edge_id: t1-a1-c2_t1-a1-c3 + node: t1-a1-c3 + name: t1-a1-c2 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 27.948538 + y: -20.998725 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r1.5-c2 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t2-a4-c1 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a4-c1_t2-a4-c0 + node: t2-a4-c0 + - action: row_traversal + edge_id: t2-a4-c1_t2-a4-c2 + node: t2-a4-c2 + name: t2-a4-c1 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 15.677435 + y: -19.772552 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r9.5-c1 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a3-c1 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a3-c1_t2-a3-c0 + node: t2-a3-c0 + - action: row_traversal + edge_id: t2-a3-c1_t2-a3-c2 + node: t2-a3-c2 + name: t2-a3-c1 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 16.99493 + y: -19.562561 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r8.5-c1 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a2-c1 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a2-c1_t2-a2-c0 + node: t2-a2-c0 + - action: row_traversal + edge_id: t2-a2-c1_t2-a2-c2 + node: t2-a2-c2 + name: t2-a2-c1 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 18.329925 + y: -19.377571 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r7.5-c1 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a1-c1 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a1-c1_t2-a1-c0 + node: t2-a1-c0 + - action: row_traversal + edge_id: t2-a1-c1_t2-a1-c2 + node: t2-a1-c2 + name: t2-a1-c1 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 19.644921 + y: -19.187581 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r6.5-c1 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t1-a4-c1 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a4-c1_t1-a4-c0 + node: t1-a4-c0 + - action: row_traversal + edge_id: t1-a4-c1_t1-a4-c2 + node: t1-a4-c2 + name: t1-a4-c1 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 23.553569 + y: -18.631177 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r4.5-c1 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a3-c1 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a3-c1_t1-a3-c0 + node: t1-a3-c0 + - action: row_traversal + edge_id: t1-a3-c1_t1-a3-c2 + node: t1-a3-c2 + name: t1-a3-c1 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 24.863565 + y: -18.43619 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r3.5-c1 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a2-c1 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a2-c1_t1-a2-c0 + node: t1-a2-c0 + - action: row_traversal + edge_id: t1-a2-c1_t1-a2-c2 + node: t1-a2-c2 + name: t1-a2-c1 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 26.188561 + y: -18.233705 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r2.5-c1 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t1-a1-c1 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t1-a1-c1_t1-a1-c0 + node: t1-a1-c0 + - action: row_traversal + edge_id: t1-a1-c1_t1-a1-c2 + node: t1-a1-c2 + name: t1-a1-c1 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.757086808 + x: 0 + y: 0 + z: -0.653314293 + position: + x: 27.513557 + y: -18.036219 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r1.5-c1 + verts: + - x: 0.384898373 + y: -0.640564001 + - x: 0.526728899 + y: -0.212192546 + - x: 0.44271776 + y: 0.355626201 + - x: 0.182920374 + y: 0.72457514 + - x: -0.384898373 + y: 0.640564001 + - x: -0.526728899 + y: 0.212192546 + - x: -0.44271776 + y: -0.355626201 + - x: -0.182920374 + y: -0.72457514 + - meta: + map: riseholme + node: t2-a4-c0 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a4-c0_t2-a4-cb + node: t2-a4-cb + - action: row_traversal + edge_id: t2-a4-c0_t2-a4-c1 + node: t2-a4-c1 + name: t2-a4-c0 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 15.229946 + y: -16.770049 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r9.5-c0 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a3-c0 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a3-c0_t2-a3-cb + node: t2-a3-cb + - action: row_traversal + edge_id: t2-a3-c0_t2-a3-c1 + node: t2-a3-c1 + name: t2-a3-c0 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 16.557442 + y: -16.582558 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r8.5-c0 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a2-c0 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a2-c0_t2-a2-cb + node: t2-a2-cb + - action: row_traversal + edge_id: t2-a2-c0_t2-a2-c1 + node: t2-a2-c1 + name: t2-a2-c0 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 17.897438 + y: -16.400067 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r7.5-c0 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: t2-a1-c0 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: row_traversal + edge_id: t2-a1-c0_t2-a1-cb + node: t2-a1-cb + - action: row_traversal + edge_id: t2-a1-c0_t2-a1-c1 + node: t2-a1-c1 + name: t2-a1-c0 + nav_frame: ${transformation.topo_frame_id} + pose: + orientation: + w: 0.756614274 + x: 0 + y: 0 + z: -0.653861484 + position: + x: 19.217434 + y: -16.225078 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: r6.5-c0 + verts: + - x: 0.383971736 + y: -0.641119882 + - x: 0.526421525 + y: -0.212953957 + - x: 0.443231521 + y: 0.354985674 + - x: 0.183967895 + y: 0.724309886 + - x: -0.383971736 + y: 0.641119882 + - x: -0.526421525 + y: 0.212953957 + - x: -0.443231521 + y: -0.354985674 + - x: -0.183967895 + y: -0.724309886 + - meta: + map: riseholme + node: WayPoint4 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: WayPoint4_WayPoint3 + node: WayPoint3 + - action: navigate_through_poses + edge_id: WayPoint4_WayPoint5 + node: WayPoint5 + - action: navigate_through_poses + edge_id: WayPoint4_t1-a2-ca + node: t1-a2-ca + name: WayPoint4 + pose: + orientation: + w: 0.737277337 + x: 0 + y: 0 + z: -0.675590208 + position: + x: 24.350278 + y: -5.946787 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: '' + verts: + - x: -0.389276952 + y: 0.637912571 + - x: -0.725811064 + y: 0.17795302 + - x: -0.637912571 + y: -0.389276952 + - x: -0.639109969 + y: -1.664310575 + - x: 0.955555677 + y: -1.475649238 + - x: 0.725811064 + y: -0.17795302 + - x: 0.637912571 + y: 0.389276952 + - x: 0.17795302 + y: 0.725811064 + nav_frame: ${transformation.topo_frame_id} + - meta: + map: riseholme + node: WayPoint8 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: WayPoint8_WayPoint7 + node: WayPoint7 + - action: navigate_through_poses + edge_id: WayPoint8_WayPoint9 + node: WayPoint9 + - action: navigate_through_poses + edge_id: WayPoint8_t2-a2-ca + node: t2-a2-ca + name: WayPoint8 + pose: + orientation: + w: 0.737277337 + x: 0 + y: 0 + z: -0.675590208 + position: + x: 16.514982 + y: -7.094865 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: '' + verts: + - x: -0.389276952 + y: 0.637912571 + - x: -0.725811064 + y: 0.17795302 + - x: -0.637912571 + y: -0.389276952 + - x: -0.639109969 + y: -1.664310575 + - x: 0.955555677 + y: -1.475649238 + - x: 0.725811064 + y: -0.17795302 + - x: 0.637912571 + y: 0.389276952 + - x: 0.17795302 + y: 0.725811064 + nav_frame: ${transformation.topo_frame_id} + - meta: + map: riseholme + node: WayPoint1 + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: WayPoint1_Office + node: Office + - action: navigate_through_poses + edge_id: WayPoint1_WayPoint2 + node: WayPoint2 + name: WayPoint1 + pose: + orientation: + w: 0.722700862 + x: 0 + y: 0 + z: -0.691160954 + position: + x: 25.86562 + y: 0.209999 + z: 0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.20 + roboflow: + enabled: false + roboflow_name: '' + verts: + - x: 0.638 + y: 0.562 + - x: 0.054 + y: 0.848 + - x: -0.562 + y: 0.638 + - x: -0.848 + y: 0.054 + - x: -0.638 + y: -0.562 + - x: -0.054 + y: -0.848 + - x: 0.562 + y: -0.638 + - x: 0.848 + y: -0.054 + nav_frame: ${transformation.topo_frame_id} + - meta: + map: riseholme + node: QC + pointset: riseholme + tag: + - node_semantic::indoor + node: + edges: + - action: navigate_through_poses + edge_id: QC_WayPoint6 + node: WayPoint6 + - action: navigate_through_poses + edge_id: QC_WayPoint7 + node: WayPoint7 + name: QC + pose: + orientation: + w: 0.077762377 + x: 0 + y: 0 + z: -0.996971922 + position: + x: 19.59994 + y: -6.64437 + z: 0 + properties: + # Live Ackermann approaches converge repeatably at 0.15-0.19 m from + # this pose while satisfying the strict heading. A 0.12 m checker + # causes indefinite multi-arc corrections at the QC boundary. + xy_goal_tolerance: 0.20 + yaw_goal_tolerance: 0.08 + roboflow: + enabled: true + roboflow_name: Quality Control + verts: + - x: 0.638 + y: 0.562 + - x: 0.054 + y: 0.848 + - x: -0.562 + y: 0.638 + - x: -0.848 + y: 0.054 + - x: -0.638 + y: -0.562 + - x: -0.054 + y: -0.848 + - x: 0.562 + y: -0.638 + - x: 0.848 + y: -0.054 + nav_frame: ${transformation.topo_frame_id} diff --git a/topological_navigation/test/fixtures/simple_map.yaml b/topological_navigation/test/fixtures/simple_map.yaml new file mode 100644 index 00000000..63dc16b2 --- /dev/null +++ b/topological_navigation/test/fixtures/simple_map.yaml @@ -0,0 +1,113 @@ +meta: + last_updated: 01-01-2026_00-00-00 + origin: + latitude: 0.0 + longitude: 0.0 + altitude: 0.0 + +metric_map: simple_test_map +name: simple_test_map +pointset: simple_test_map + +transformation: + topo_frame_id: simple_test_map + parent: map + rotation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + translation: + x: 0.0 + y: 0.0 + z: 0.0 + +definitions: + default_bt: | + + + + + + + + + +actions: + navigate_to_pose: + composable: false + action_type: nav2_msgs.action.NavigateToPose + action_server: /navigate_to_pose + action_goal_template: + pose: + header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.default_bt}' + +nodes: + - meta: + map: simple_test_map + node: WP1 + pointset: simple_test_map + node: + edges: + - action: navigate_to_pose + edge_id: WP1_WP2 + node: WP2 + properties: + max_speed: 0.5 + name: WP1 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 1.0 + x: 0.0 + y: 0.0 + z: 0.0 + position: + x: 0.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.3 + yaw_goal_tolerance: 0.1 + verts: + - x: -1.0 + y: -1.0 + - x: 1.0 + y: -1.0 + - x: 1.0 + y: 1.0 + - x: -1.0 + y: 1.0 + + - meta: + map: simple_test_map + node: WP2 + pointset: simple_test_map + node: + edges: [] + name: WP2 + nav_frame: '${transformation.topo_frame_id}' + pose: + orientation: + w: 0.707 + x: 0.0 + y: 0.0 + z: 0.707 + position: + x: 5.0 + y: 0.0 + z: 0.0 + properties: + xy_goal_tolerance: 0.5 + verts: + - x: -0.5 + y: -0.5 + - x: 0.5 + y: -0.5 + - x: 0.5 + y: 0.5 + - x: -0.5 + y: 0.5 diff --git a/topological_navigation/test/static_transformer.py b/topological_navigation/test/static_transformer.py index dc4bf50f..0b1d141b 100644 --- a/topological_navigation/test/static_transformer.py +++ b/topological_navigation/test/static_transformer.py @@ -10,7 +10,7 @@ def main(): broadcaster = tf2_ros.StaticTransformBroadcaster(node) static_transform_stamped = TransformStamped() - static_transform_stamped.header.frame_id = 'topo_map' + static_transform_stamped.header.frame_id = 'simple_test_map' static_transform_stamped.child_frame_id = 'base_link' static_transform_stamped.transform.translation.x = 0.0 diff --git a/topological_navigation/test/test_convert_tmap.py b/topological_navigation/test/test_convert_tmap.py new file mode 100644 index 00000000..22c4940e --- /dev/null +++ b/topological_navigation/test/test_convert_tmap.py @@ -0,0 +1,245 @@ +"""Tests for convert_tmap module. + +Covers _map_action_name, _convert_node, _convert_transformation, and +convert_tmap. +""" + +import pytest + +from topological_navigation.convert_tmap import ( + _map_action_name, + _convert_node, + _convert_transformation, + convert_tmap, +) + + +# ---------- _map_action_name ------------------------------------------ + +class TestMapActionName: + """Tests for CamelCase -> snake_case mapping.""" + + def test_known_actions(self): + assert _map_action_name("NavigateToPose") == "navigate_to_pose" + assert _map_action_name("RowOperation") == "row_traversal" + assert _map_action_name("GoalAlign") == "goal_align" + + def test_already_snake_case_known(self): + """Known lowercase forms also map correctly via the dict.""" + assert _map_action_name("RowTraversal") == "row_traversal" + + def test_unknown_camel_case(self): + """Unknown CamelCase names are converted to snake_case.""" + result = _map_action_name("CustomBehavior") + assert result == "custom_behavior" + + def test_unknown_single_word(self): + """Single-word names stay lowercase.""" + assert _map_action_name("stop") == "stop" + + +# ---------- _convert_node --------------------------------------------- + +class TestConvertNode: + """Tests for converting a single node entry.""" + + @pytest.fixture + def old_node(self): + return { + "meta": { + "map": "test", + "node": "A", + "pointset": "test", + "tag": "old_tag", + }, + "node": { + "name": "A", + "pose": {"position": {"x": 1, "y": 2, "z": 0}, + "orientation": {"w": 1, "x": 0, "y": 0, "z": 0}}, + "edges": [ + { + "action": "NavigateToPose", + "action_type": "nav2_msgs/action/NavigateToPose", + "edge_id": "A_B", + "node": "B", + } + ], + "properties": {"xy_goal_tolerance": 0.3}, + "verts": [{"x": -1, "y": -1}, {"x": 1, "y": 1}], + "localise_by_topic": "some_topic", + "parent_frame": "map", + }, + } + + def test_action_type_removed(self, old_node): + """action_type must be removed from converted edges.""" + result = _convert_node(old_node) + for edge in result["node"]["edges"]: + assert "action_type" not in edge + + def test_action_name_mapped(self, old_node): + """Edge action names are converted to snake_case.""" + result = _convert_node(old_node) + assert result["node"]["edges"][0]["action"] == "navigate_to_pose" + + def test_localise_by_topic_removed(self, old_node): + """localise_by_topic is stripped from the node.""" + result = _convert_node(old_node) + assert "localise_by_topic" not in result["node"] + + def test_parent_frame_removed(self, old_node): + """parent_frame is stripped from the node.""" + result = _convert_node(old_node) + assert "parent_frame" not in result["node"] + + def test_tag_removed_from_meta(self, old_node): + """tag is stripped from the meta.""" + result = _convert_node(old_node) + assert "tag" not in result["meta"] + + def test_properties_preserved(self, old_node): + """Node properties are kept as-is.""" + result = _convert_node(old_node) + assert result["node"]["properties"]["xy_goal_tolerance"] == 0.3 + + def test_verts_preserved(self, old_node): + """Influence zone vertices are kept.""" + result = _convert_node(old_node) + assert len(result["node"]["verts"]) == 2 + + def test_core_fields(self, old_node): + """Name and pose are preserved.""" + result = _convert_node(old_node) + assert result["node"]["name"] == "A" + assert "pose" in result["node"] + + +# ---------- _convert_transformation ----------------------------------- + +class TestConvertTransformation: + """Tests for transformation block conversion.""" + + def test_child_renamed(self): + """'child' key becomes 'topo_frame_id'.""" + result = _convert_transformation({"child": "map"}) + assert result["topo_frame_id"] == "map" + assert "child" not in result + + def test_already_new_format(self): + """If topo_frame_id is already there (no child), it's preserved.""" + result = _convert_transformation({"topo_frame_id": "map"}) + assert result["topo_frame_id"] == "map" + + def test_extra_keys_preserved(self): + """Other transformation keys are kept.""" + result = _convert_transformation({ + "child": "map", + "rotation": {"w": 1.0}, + "translation": {"x": 0.0}, + }) + assert "rotation" in result + assert "translation" in result + + +# ---------- convert_tmap (integration) --------------------------------- + +class TestConvertTmap: + """Integration test for full tmap conversion.""" + + @pytest.fixture + def old_map(self): + return { + "meta": {"last_updated": "01-01-2026"}, + "metric_map": "test_map", + "name": "test_map", + "pointset": "test_map", + "transformation": { + "child": "test_map", + "parent": "map", + "rotation": {"w": 1.0, "x": 0.0, "y": 0.0, "z": 0.0}, + "translation": {"x": 0.0, "y": 0.0, "z": 0.0}, + }, + "nodes": [ + { + "meta": {"map": "test_map", "node": "A", "pointset": "test_map"}, + "node": { + "name": "A", + "pose": {"position": {"x": 0, "y": 0, "z": 0}, + "orientation": {"w": 1, "x": 0, "y": 0, "z": 0}}, + "edges": [ + { + "action": "NavigateToPose", + "action_type": "nav2_msgs/action/NavigateToPose", + "edge_id": "A_B", + "node": "B", + }, + { + "action": "RowOperation", + "action_type": "nav2_msgs/action/NavigateThroughPoses", + "edge_id": "A_C", + "node": "C", + }, + ], + "verts": [{"x": -1, "y": -1}, {"x": 1, "y": 1}], + }, + }, + { + "meta": {"map": "test_map", "node": "B", "pointset": "test_map"}, + "node": { + "name": "B", + "pose": {"position": {"x": 5, "y": 0, "z": 0}, + "orientation": {"w": 1, "x": 0, "y": 0, "z": 0}}, + "edges": [], + }, + }, + { + "meta": {"map": "test_map", "node": "C", "pointset": "test_map"}, + "node": { + "name": "C", + "pose": {"position": {"x": 0, "y": 5, "z": 0}, + "orientation": {"w": 1, "x": 0, "y": 0, "z": 0}}, + "edges": [], + }, + }, + ], + } + + def test_top_level_keys(self, old_map): + """Converted map has expected top-level keys.""" + result = convert_tmap(old_map) + for key in ("meta", "transformation", "nodes"): + assert key in result + + def test_no_top_level_actions_or_definitions(self, old_map): + """The current converter does not emit action configuration.""" + result = convert_tmap(old_map) + assert "actions" not in result + assert "definitions" not in result + + def test_transformation_converted(self, old_map): + """Transformation block has topo_frame_id.""" + result = convert_tmap(old_map) + assert "topo_frame_id" in result["transformation"] + + def test_node_count_preserved(self, old_map): + """All nodes are carried over.""" + result = convert_tmap(old_map) + assert len(result["nodes"]) == len(old_map["nodes"]) + + def test_edges_have_no_action_type(self, old_map): + """Converted edges must not contain action_type.""" + result = convert_tmap(old_map) + for node_entry in result["nodes"]: + for edge in node_entry["node"]["edges"]: + assert "action_type" not in edge + + def test_edge_actions_are_snake_case(self, old_map): + """Converted edge actions use snake_case.""" + result = convert_tmap(old_map) + edge = result["nodes"][0]["node"]["edges"][0] + assert edge["action"] == "navigate_to_pose" + + def test_empty_nodes(self): + """Converting a map with no nodes still produces valid output.""" + result = convert_tmap({"nodes": [], "transformation": {}}) + assert result["nodes"] == [] diff --git a/topological_navigation/test/test_coverage_analysis.py b/topological_navigation/test/test_coverage_analysis.py new file mode 100644 index 00000000..cb087bd8 --- /dev/null +++ b/topological_navigation/test/test_coverage_analysis.py @@ -0,0 +1,277 @@ +"""Tests for ``coverage_analysis.py`` -- route sign-off coverage computation.""" + +import pytest + +from topological_navigation.coverage_analysis import ( + DEFAULT_MIN_SUCCESS_TRAVERSALS, + build_merged_graph_for_maps, + compute_coverage, + generate_coverage_svg, + merge_graphs, + render_markdown_report, + render_markdown_summary, + resolve_map_hashes, +) +from topological_navigation.nav_stats_db import NavStatsDB, compute_map_hash +from topological_navigation.networkx_utils import build_graph_from_tmap + +_MAP_YAML = """\ +meta: + origin: + latitude: 51.0 + longitude: 0.0 +name: TestMap +pointset: testmap +nodes: + - meta: + node: WP1 + map: testmap + pointset: testmap + tag: ["zone_a"] + node: + name: WP1 + edges: + - edge_id: WP1_WP2 + node: WP2 + action: navigate_to_pose + pose: + position: {x: 0.0, y: 0.0, z: 0.0} + orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0} + - meta: + node: WP2 + map: testmap + pointset: testmap + tag: ["zone_b"] + node: + name: WP2 + edges: + - edge_id: WP2_WP3 + node: WP3 + action: navigate_to_pose + pose: + position: {x: 10.0, y: 0.0, z: 0.0} + orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0} + - meta: + node: WP3 + map: testmap + pointset: testmap + tag: ["zone_b"] + node: + name: WP3 + edges: [] + pose: + position: {x: 20.0, y: 0.0, z: 0.0} + orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0} +""" + +_MAP_HASH = compute_map_hash(_MAP_YAML) + + +def _make_db(tmp_path, add_traversals=True): + db = NavStatsDB(str(tmp_path / "stats.db")) + db.store_map(_MAP_YAML) + if add_traversals: + db.record_traversal( + map_name="TestMap", map_hash=_MAP_HASH, edge_id="WP1_WP2", + origin="WP1", target="WP2", status="success", duration_s=5.0, + ) + db.record_traversal( + map_name="TestMap", map_hash=_MAP_HASH, edge_id="WP1_WP2", + origin="WP1", target="WP2", status="success", duration_s=5.0, + ) + return db + + +# --------------------------------------------------------------------------- +# merge_graphs +# --------------------------------------------------------------------------- + +def test_merge_graphs_dedups_nodes_and_edges(): + import yaml + tmap = yaml.safe_load(_MAP_YAML) + g1 = build_graph_from_tmap(tmap) + g2 = build_graph_from_tmap(tmap) + merged = merge_graphs([g1, g2]) + assert merged.number_of_nodes() == 3 + assert merged.number_of_edges() == 2 + + +# --------------------------------------------------------------------------- +# compute_coverage +# --------------------------------------------------------------------------- + +def test_compute_coverage_basic(tmp_path): + db = _make_db(tmp_path) + graph = build_merged_graph_for_maps(db, ["TestMap"]) + hashes = resolve_map_hashes(db, ["TestMap"]) + report = compute_coverage(graph, db, hashes) + s = report.summary() + assert s["total_edges"] == 2 + assert s["covered_edges"] == 1 + assert s["uncovered_edges"] == 1 + assert s["coverage_pct"] == 50.0 + db.close() + + +def test_compute_coverage_with_name_filter(tmp_path): + db = _make_db(tmp_path) + graph = build_merged_graph_for_maps(db, ["TestMap"]) + hashes = resolve_map_hashes(db, ["TestMap"]) + report = compute_coverage(graph, db, hashes, filters=["name:WP1"]) + s = report.summary() + # Only WP1_WP2 is incident to WP1 + assert s["total_edges"] == 1 + assert s["covered_edges"] == 1 + db.close() + + +def test_compute_coverage_with_tag_filter(tmp_path): + db = _make_db(tmp_path) + graph = build_merged_graph_for_maps(db, ["TestMap"]) + hashes = resolve_map_hashes(db, ["TestMap"]) + report = compute_coverage(graph, db, hashes, filters=["tag:zone_b"]) + s = report.summary() + # WP2 and WP3 carry zone_b, so both edges are incident (WP1_WP2 via WP2, + # WP2_WP3 via both) + assert s["total_edges"] == 2 + db.close() + + +def test_compute_coverage_tag_summary(tmp_path): + db = _make_db(tmp_path) + graph = build_merged_graph_for_maps(db, ["TestMap"]) + hashes = resolve_map_hashes(db, ["TestMap"]) + report = compute_coverage(graph, db, hashes) + tags = report.tag_summary() + assert "zone_a" in tags + assert "zone_b" in tags + assert tags["zone_a"]["total_edges"] == 1 + assert tags["zone_a"]["covered_edges"] == 1 + assert tags["zone_b"]["total_edges"] == 2 + assert tags["zone_b"]["covered_edges"] == 1 + db.close() + + +def test_compute_coverage_no_traversals(tmp_path): + db = _make_db(tmp_path, add_traversals=False) + graph = build_merged_graph_for_maps(db, ["TestMap"]) + hashes = resolve_map_hashes(db, ["TestMap"]) + report = compute_coverage(graph, db, hashes) + s = report.summary() + assert s["total_edges"] == 2 + assert s["covered_edges"] == 0 + assert s["coverage_pct"] == 0.0 + db.close() + + +def test_default_min_success_threshold_is_two(): + assert DEFAULT_MIN_SUCCESS_TRAVERSALS == 2 + + +def test_compute_coverage_default_min_success_is_two(tmp_path): + # _make_db records exactly 2 successful traversals for WP1_WP2. + db = _make_db(tmp_path) + graph = build_merged_graph_for_maps(db, ["TestMap"]) + hashes = resolve_map_hashes(db, ["TestMap"]) + report = compute_coverage(graph, db, hashes) + edge = next(e for e in report.edges if e.edge_id == "WP1_WP2") + assert edge.min_success == 2 + assert edge.covered is True + db.close() + + +def test_compute_coverage_min_success_configurable_raises_threshold(tmp_path): + # With only 2 successes, requiring 3 should make the edge uncovered. + db = _make_db(tmp_path) + graph = build_merged_graph_for_maps(db, ["TestMap"]) + hashes = resolve_map_hashes(db, ["TestMap"]) + report = compute_coverage(graph, db, hashes, min_success=3) + s = report.summary() + edge = next(e for e in report.edges if e.edge_id == "WP1_WP2") + assert edge.covered is False + assert s["covered_edges"] == 0 + db.close() + + +def test_compute_coverage_min_success_configurable_lowers_threshold(tmp_path): + # With min_success=1, a single success is already enough to be covered. + db = _make_db(tmp_path) + graph = build_merged_graph_for_maps(db, ["TestMap"]) + hashes = resolve_map_hashes(db, ["TestMap"]) + report = compute_coverage(graph, db, hashes, min_success=1) + edge = next(e for e in report.edges if e.edge_id == "WP1_WP2") + assert edge.covered is True + db.close() + + +def test_compute_coverage_rejects_non_positive_min_success(tmp_path): + db = _make_db(tmp_path) + graph = build_merged_graph_for_maps(db, ["TestMap"]) + hashes = resolve_map_hashes(db, ["TestMap"]) + with pytest.raises(ValueError): + compute_coverage(graph, db, hashes, min_success=0) + db.close() + + +def test_resolve_map_hashes_not_found(tmp_path): + db = _make_db(tmp_path) + try: + resolve_map_hashes(db, ["nonexistent"]) + assert False, "expected ValueError" + except ValueError: + pass + db.close() + + +# --------------------------------------------------------------------------- +# Markdown rendering +# --------------------------------------------------------------------------- + +def test_render_markdown_summary(tmp_path): + db = _make_db(tmp_path) + graph = build_merged_graph_for_maps(db, ["TestMap"]) + hashes = resolve_map_hashes(db, ["TestMap"]) + report = compute_coverage(graph, db, hashes) + md = render_markdown_summary(report) + assert "Coverage Summary" in md + assert "50.0" in md + db.close() + + +def test_render_markdown_report_lists_uncovered_edges(tmp_path): + db = _make_db(tmp_path) + graph = build_merged_graph_for_maps(db, ["TestMap"]) + hashes = resolve_map_hashes(db, ["TestMap"]) + report = compute_coverage(graph, db, hashes) + md = render_markdown_report(report, map_names=["TestMap"]) + assert "WP2_WP3" in md + assert "Uncovered Edges" in md + db.close() + + +# --------------------------------------------------------------------------- +# SVG rendering +# --------------------------------------------------------------------------- + +def test_generate_coverage_svg(tmp_path): + db = _make_db(tmp_path) + graph = build_merged_graph_for_maps(db, ["TestMap"]) + hashes = resolve_map_hashes(db, ["TestMap"]) + report = compute_coverage(graph, db, hashes) + out_path = tmp_path / "out.svg" + svg = generate_coverage_svg(graph, report, str(out_path)) + assert " 0 + assert len(dists) > 0 + + def test_empty_when_no_graph(self, simple_map_data, simple_graph, simple_kdtree): + loc = _make_loc_node(simple_map_data, simple_graph, simple_kdtree) + loc._graph = None + edge_ids, dists = loc.get_edge_distances_to_pose(_make_pose()) + assert edge_ids == [] + assert len(dists) == 0 + + +# --------------------------------------------------------------------------- +# Test: _publish_topics +# --------------------------------------------------------------------------- + +class TestPublishTopics: + """Test the _publish_topics method (latched and non-latched modes).""" + + def test_latched_publishes_on_change(self, simple_map_data, simple_graph, simple_kdtree): + loc = _make_loc_node(simple_map_data, simple_graph, simple_kdtree) + loc.only_latched = True + + loc._publish_topics("WP1", 1.5, "WP1", ["e1"], [0.5], "tag1") + + loc.wp_pub.publish.assert_called_once() + loc.wd_pub.publish.assert_called_once() + loc.cn_pub.publish.assert_called_once() + loc.tag_pub.publish.assert_called_once() + + def test_latched_no_publish_when_same(self, simple_map_data, simple_graph, simple_kdtree): + loc = _make_loc_node(simple_map_data, simple_graph, simple_kdtree) + loc.only_latched = True + + # First publish sets the state + loc._publish_topics("WP1", 1.5, "WP1", ["e1"], [0.5], "tag1") + loc.wp_pub.reset_mock() + loc.cn_pub.reset_mock() + + # Same values → no publish + loc._publish_topics("WP1", 1.5, "WP1", ["e1"], [0.5], "tag1") + loc.wp_pub.publish.assert_not_called() + loc.cn_pub.publish.assert_not_called() + + def test_non_latched_always_publishes(self, simple_map_data, simple_graph, simple_kdtree): + loc = _make_loc_node(simple_map_data, simple_graph, simple_kdtree) + loc.only_latched = False + + loc._publish_topics("WP1", 1.5, "WP1", ["e1"], [0.5]) + loc.wp_pub.publish.assert_called_once() + + # Same values → still publishes + loc.wp_pub.reset_mock() + loc._publish_topics("WP1", 1.5, "WP1", ["e1"], [0.5]) + loc.wp_pub.publish.assert_called_once() + + def test_edge_ids_sorted_when_dists_equal(self, simple_map_data, simple_graph, simple_kdtree): + loc = _make_loc_node(simple_map_data, simple_graph, simple_kdtree) + loc.only_latched = False + + loc._publish_topics("WP1", 1.0, "WP1", ["b_edge", "a_edge"], [1.0, 1.0]) + # After the call, stored edge_ids should be sorted + assert loc.closest_edge_ids == ["a_edge", "b_edge"] + + +# --------------------------------------------------------------------------- +# Test: _map_callback +# --------------------------------------------------------------------------- + +class TestMapCallback: + """Test _map_callback builds graph and KD-tree correctly.""" + + def _make_bare_loc(self): + """Create a bare TopologicalNavLoc without ROS init.""" + from topological_navigation.scripts.localisation2 import TopologicalNavLoc + + with patch.object(TopologicalNavLoc, '__init__', lambda self, *a, **kw: None): + loc = TopologicalNavLoc.__new__(TopologicalNavLoc) + + loc.rec_map = False + loc._graph = None + loc._kdtree = None + loc._kdtree_node_names = [] + loc.names_by_topic = [] + loc.nodes_by_topic = [] + loc.loc_by_topic = [] + loc.nogos = [] + loc.with_tags = False + loc._map_lock = Lock() + loc.get_logger = MagicMock(return_value=MagicMock()) + return loc + + def test_builds_graph_and_kdtree(self, simple_map_data): + loc = self._make_bare_loc() + + msg = String() + msg.data = yaml.dump(simple_map_data) + loc._map_callback(msg) + + assert loc.rec_map is True + assert loc._graph is not None + assert loc._graph.number_of_nodes() == 2 + assert loc._kdtree is not None + assert len(loc._kdtree_node_names) == 2 + assert loc.tmap_frame == 'simple_test_map' + + def test_update_replaces_graph(self, simple_map_data): + """Calling _map_callback again should update (not skip).""" + loc = self._make_bare_loc() + + msg = String() + msg.data = yaml.dump(simple_map_data) + loc._map_callback(msg) + assert loc.rec_map is True + old_graph = loc._graph + + # Second call should update, not skip + loc._map_callback(msg) + assert loc.rec_map is True + assert loc._graph is not None + assert loc._graph.number_of_nodes() == 2 + + def test_handles_bad_map_data(self): + loc = self._make_bare_loc() + + msg = String() + msg.data = yaml.dump({'transformation': {'topo_frame_id': 'test'}, 'nodes': []}) + loc._map_callback(msg) + + # Should not set rec_map because graph build returned None (empty nodes) + assert loc.rec_map is False + + +# --------------------------------------------------------------------------- +# Test: localise_pose_cb +# --------------------------------------------------------------------------- + +class TestLocalisePoseCb: + """Test the localise_pose service callback.""" + + def test_returns_nodes(self, simple_map_data, simple_graph, simple_kdtree): + loc = _make_loc_node(simple_map_data, simple_graph, simple_kdtree) + + req = MagicMock() + req.pose = _make_pose(0.0, 0.0) + res = MagicMock() + res.current_node = '' + res.closest_node = '' + + result = loc.localise_pose_cb(req, res) + + # At origin, should be inside WP1's influence zone + assert result.current_node != 'none' + assert result.closest_node == 'WP1' + + def test_returns_none_when_no_graph(self, simple_map_data, simple_graph, simple_kdtree): + loc = _make_loc_node(simple_map_data, simple_graph, simple_kdtree) + loc._graph = None + + req = MagicMock() + req.pose = _make_pose() + res = MagicMock() + + result = loc.localise_pose_cb(req, res) + assert result.current_node == 'none' + assert result.closest_node == 'none' + + def test_closest_node_far_from_all(self, simple_map_data, simple_graph, simple_kdtree): + loc = _make_loc_node(simple_map_data, simple_graph, simple_kdtree) + + req = MagicMock() + req.pose = _make_pose(100.0, 100.0) + res = MagicMock() + res.current_node = '' + res.closest_node = '' + + result = loc.localise_pose_cb(req, res) + # Should still return a closest node even if far away + assert result.closest_node in ('WP1', 'WP2') + # Should NOT be inside any influence zone + assert result.current_node == 'none' diff --git a/topological_navigation/test/test_map_analyser.py b/topological_navigation/test/test_map_analyser.py new file mode 100644 index 00000000..be70a371 --- /dev/null +++ b/topological_navigation/test/test_map_analyser.py @@ -0,0 +1,1196 @@ +"""Unit tests for the map_analyser module. + +Covers geometry helpers (polygon overlap / point-in-polygon), graph +analysis (orphaned nodes, disconnected components, statistics), +grid-angle-deviation node filtering/detection/alignment, SVG +generation, and the top-level ``analyse_map`` / CLI ``check`` +behaviour. +""" + +import math +import os + +import networkx as nx +import pytest + +import yaml + +from topological_navigation.map_analyser import ( + DEFAULT_ANCHORS_KEY, + DEFAULT_GRID_ANGLE_THRESHOLD_DEG, + AnalysisResult, + GridAlignResult, + MinifyResult, + analyse_map, + build_arg_parser, + compute_edge_bearing, + compute_grid_alignment_adjustments, + compute_statistics, + find_disconnected_components, + find_grid_angle_deviations, + find_orphaned_nodes, + find_overlapping_influence_zones, + generate_svg, + get_node_polygon, + grid_align_map, + grid_angle_deviation, + is_bidirectional_edge, + main, + minify_map, + node_matches_filter, + node_matches_filter_expression, + parse_node_filter, + parse_node_filter_expression, + point_in_polygon, + polygons_overlap, + select_nodes_by_filters, +) +from topological_navigation.tmap_utils import CustomSafeLoader, load_tmap2_file + + +FIXTURES = os.path.join(os.path.dirname(__file__), "fixtures") +SIMPLE_MAP = os.path.join(FIXTURES, "simple_map.yaml") +COMPLEX_MAP = os.path.join(FIXTURES, "complex_map.yaml") +MIXED_ACTIONS_MAP = os.path.join(FIXTURES, "mixed_actions_map.yaml") +POLYGON_SHAPES_MAP = os.path.join(FIXTURES, "polygon_shapes_map.yaml") + + +# --------------------------------------------------------------------------- +# Geometry helpers +# --------------------------------------------------------------------------- + +class TestPointInPolygon: + def test_point_inside_square(self): + square = [(-1, -1), (1, -1), (1, 1), (-1, 1)] + assert point_in_polygon((0, 0), square) is True + + def test_point_outside_square(self): + square = [(-1, -1), (1, -1), (1, 1), (-1, 1)] + assert point_in_polygon((5, 5), square) is False + + def test_degenerate_polygon_returns_false(self): + assert point_in_polygon((0, 0), [(0, 0), (1, 1)]) is False + + +class TestPolygonsOverlap: + def test_overlapping_squares(self): + a = [(-1, -1), (1, -1), (1, 1), (-1, 1)] + b = [(0, 0), (2, 0), (2, 2), (0, 2)] + assert polygons_overlap(a, b) is True + + def test_disjoint_squares(self): + a = [(-1, -1), (1, -1), (1, 1), (-1, 1)] + b = [(10, 10), (12, 10), (12, 12), (10, 12)] + assert polygons_overlap(a, b) is False + + def test_fully_contained_polygon(self): + outer = [(-5, -5), (5, -5), (5, 5), (-5, 5)] + inner = [(-1, -1), (1, -1), (1, 1), (-1, 1)] + assert polygons_overlap(outer, inner) is True + + def test_empty_polygon_never_overlaps(self): + square = [(-1, -1), (1, -1), (1, 1), (-1, 1)] + assert polygons_overlap(square, []) is False + + +class TestGetNodePolygon: + def test_translates_verts_by_node_position(self): + graph = nx.DiGraph() + graph.add_node( + "N1", x=10.0, y=5.0, + verts=[{"x": -1.0, "y": -1.0}, {"x": 1.0, "y": -1.0}, + {"x": 1.0, "y": 1.0}, {"x": -1.0, "y": 1.0}], + ) + poly = get_node_polygon(graph, "N1") + assert poly == [(9.0, 4.0), (11.0, 4.0), (11.0, 6.0), (9.0, 6.0)] + + def test_no_verts_returns_empty_list(self): + graph = nx.DiGraph() + graph.add_node("N1", x=0.0, y=0.0, verts=[]) + assert get_node_polygon(graph, "N1") == [] + + +# --------------------------------------------------------------------------- +# Graph analysis +# --------------------------------------------------------------------------- + +class TestFindOrphanedNodes: + def test_simple_map_has_one_orphan(self): + result = analyse_map(SIMPLE_MAP) + assert result.orphaned_nodes == ["WP1"] + + def test_mixed_actions_map_has_no_orphans(self): + result = analyse_map(MIXED_ACTIONS_MAP) + assert result.orphaned_nodes == [] + + def test_isolated_node_is_orphaned(self): + graph = nx.DiGraph() + graph.add_node("A", x=0.0, y=0.0, verts=[]) + assert find_orphaned_nodes(graph) == ["A"] + + +class TestFindDisconnectedComponents: + def test_fully_connected_map_is_single_component(self): + result = analyse_map(MIXED_ACTIONS_MAP) + assert len(result.disconnected_components) == 1 + + def test_disconnected_graph_has_multiple_components(self): + graph = nx.DiGraph() + graph.add_node("A", x=0.0, y=0.0, verts=[]) + graph.add_node("B", x=1.0, y=0.0, verts=[]) + components = find_disconnected_components(graph) + assert len(components) == 2 + + +class TestIsBidirectionalEdge: + def test_bidirectional_pair(self): + graph = nx.DiGraph() + graph.add_edge("A", "B") + graph.add_edge("B", "A") + assert is_bidirectional_edge(graph, "A", "B") is True + + def test_unidirectional_pair(self): + graph = nx.DiGraph() + graph.add_edge("A", "B") + assert is_bidirectional_edge(graph, "A", "B") is False + + +class TestComputeStatistics: + def test_mixed_actions_map_statistics(self): + result = analyse_map(MIXED_ACTIONS_MAP) + stats = result.statistics + assert stats["num_nodes"] == 6 + assert stats["num_edges"] == 10 + assert stats["bidirectional_edge_count"] == 5 + assert stats["unidirectional_edge_count"] == 0 + assert stats["action_counts"] == { + "navigate_to_pose": 4, "row_traversal": 4, "goal_align": 2, + } + assert stats["total_edge_length"] == pytest.approx(30.0) + + +class TestFindOverlappingInfluenceZones: + def test_polygon_shapes_map_has_overlaps(self): + result = analyse_map(POLYGON_SHAPES_MAP) + pairs = {frozenset((o["node_a"], o["node_b"])) for o in result.overlaps} + assert frozenset({"TriangleNode", "LargeNode"}) in pairs + assert frozenset({"PentagonNode", "LargeNode"}) in pairs + assert frozenset({"LargeNode", "RectangleNode"}) in pairs + + def test_simple_map_has_no_overlaps(self): + result = analyse_map(SIMPLE_MAP) + assert result.overlaps == [] + + +# --------------------------------------------------------------------------- +# Node filtering (name/property, used by grid-angle-deviation / grid-align) +# --------------------------------------------------------------------------- + +def _make_filter_graph() -> "nx.DiGraph": + graph = nx.DiGraph() + graph.add_node( + "RowA1", x=0.0, y=0.0, + properties={"semantics": "row_entry", "roboflow": {"enabled": True}}, + ) + graph.add_node("RowA2", x=1.0, y=0.0, properties={"semantics": "row_exit"}) + graph.add_node("Junction1", x=2.0, y=0.0, properties={}) + return graph + + +def _make_field_filter_graph() -> "nx.DiGraph": + """Graph with 'field'/'tunnel'/'roboflow.enabled' properties as raised in + issue feedback, for testing boolean filter expressions.""" + graph = nx.DiGraph() + graph.add_node( + "A", x=0.0, y=0.0, + properties={"roboflow": {"enabled": True}, "field": 1, "tunnel": 17}, + ) + graph.add_node( + "B", x=1.0, y=0.0, + properties={"roboflow": {"enabled": True}, "field": 2, "tunnel": 18}, + ) + graph.add_node( + "C", x=2.0, y=0.0, + properties={"roboflow": {"enabled": False}, "field": 1, "tunnel": 17}, + ) + graph.add_node( + "D", x=3.0, y=0.0, + properties={"roboflow": {"enabled": True}, "field": 3, "tunnel": 19}, + ) + return graph + + +class TestParseNodeFilter: + def test_parses_name_filter(self): + node_filter = parse_node_filter("name:Row*") + assert node_filter.kind == "name" + assert node_filter.pattern == "Row*" + + def test_parses_property_presence_filter(self): + node_filter = parse_node_filter("property:roboflow.enabled") + assert node_filter.kind == "property" + assert node_filter.key == "roboflow.enabled" + assert node_filter.value is None + + def test_parses_property_value_filter(self): + node_filter = parse_node_filter("property:semantics=row_entry") + assert node_filter.kind == "property" + assert node_filter.key == "semantics" + assert node_filter.value == "row_entry" + + def test_missing_colon_raises(self): + with pytest.raises(ValueError): + parse_node_filter("bogus-spec") + + def test_unknown_filter_type_raises(self): + with pytest.raises(ValueError): + parse_node_filter("foo:bar") + + def test_empty_name_pattern_raises(self): + with pytest.raises(ValueError): + parse_node_filter("name:") + + def test_empty_property_key_raises(self): + with pytest.raises(ValueError): + parse_node_filter("property:") + + +class TestNodeMatchesFilter: + def test_name_glob_matches(self): + graph = _make_filter_graph() + assert node_matches_filter(graph, "RowA1", parse_node_filter("name:Row*")) is True + assert node_matches_filter(graph, "Junction1", parse_node_filter("name:Row*")) is False + + def test_property_presence_matches(self): + graph = _make_filter_graph() + node_filter = parse_node_filter("property:roboflow.enabled") + assert node_matches_filter(graph, "RowA1", node_filter) is True + assert node_matches_filter(graph, "RowA2", node_filter) is False + + def test_property_value_matches_case_insensitively(self): + graph = _make_filter_graph() + node_filter = parse_node_filter("property:semantics=ROW_EXIT") + assert node_matches_filter(graph, "RowA2", node_filter) is True + assert node_matches_filter(graph, "RowA1", node_filter) is False + + def test_missing_property_key_does_not_match(self): + graph = _make_filter_graph() + node_filter = parse_node_filter("property:nosuchkey") + assert node_matches_filter(graph, "RowA1", node_filter) is False + + +class TestSelectNodesByFilters: + def test_no_filters_selects_all_nodes(self): + graph = _make_filter_graph() + assert select_nodes_by_filters(graph) == set(graph.nodes()) + + def test_single_name_filter(self): + graph = _make_filter_graph() + assert select_nodes_by_filters(graph, filters=["name:Row*"]) == {"RowA1", "RowA2"} + + def test_disjunction_of_multiple_filters(self): + graph = _make_filter_graph() + selected = select_nodes_by_filters(graph, filters=["name:RowA1", "name:Junction1"]) + assert selected == {"RowA1", "Junction1"} + + def test_exclude_filter_removes_matches(self): + graph = _make_filter_graph() + selected = select_nodes_by_filters( + graph, filters=["name:Row*"], exclude_filters=["name:RowA2"] + ) + assert selected == {"RowA1"} + + def test_exclude_without_include_applies_to_all_nodes(self): + graph = _make_filter_graph() + selected = select_nodes_by_filters(graph, exclude_filters=["name:Junction1"]) + assert selected == {"RowA1", "RowA2"} + + +class TestParseNodeFilterExpression: + def test_bare_term_behaves_like_single_filter(self): + expr = parse_node_filter_expression("name:Row*") + assert expr == ("leaf", parse_node_filter("name:Row*")) + + def test_and_combination(self): + graph = _make_field_filter_graph() + expr = parse_node_filter_expression("property:roboflow.enabled and property:field=1") + assert node_matches_filter_expression(graph, "A", expr) is True + assert node_matches_filter_expression(graph, "C", expr) is False # roboflow disabled + assert node_matches_filter_expression(graph, "B", expr) is False # field=2 + + def test_or_combination(self): + graph = _make_field_filter_graph() + expr = parse_node_filter_expression("property:field=1 or property:field=2") + assert node_matches_filter_expression(graph, "A", expr) is True + assert node_matches_filter_expression(graph, "B", expr) is True + assert node_matches_filter_expression(graph, "C", expr) is True + assert node_matches_filter_expression(graph, "D", expr) is False + + def test_not_negates(self): + graph = _make_field_filter_graph() + expr = parse_node_filter_expression("not property:roboflow.enabled") + assert node_matches_filter_expression(graph, "C", expr) is True + assert node_matches_filter_expression(graph, "A", expr) is False + + def test_and_or_precedence_with_parentheses(self): + graph = _make_field_filter_graph() + expr = parse_node_filter_expression( + "property:roboflow.enabled and (property:field=1 or property:field=2)" + ) + assert node_matches_filter_expression(graph, "A", expr) is True + assert node_matches_filter_expression(graph, "B", expr) is True + assert node_matches_filter_expression(graph, "C", expr) is False # roboflow disabled + assert node_matches_filter_expression(graph, "D", expr) is False # field=3 + + def test_and_binds_tighter_than_or_without_parentheses(self): + # "a or b and c" == "a or (b and c)" + graph = _make_field_filter_graph() + expr = parse_node_filter_expression( + "property:tunnel=19 or property:roboflow.enabled and property:field=1" + ) + assert node_matches_filter_expression(graph, "A", expr) is True # roboflow & field=1 + assert node_matches_filter_expression(graph, "D", expr) is True # tunnel=19 + assert node_matches_filter_expression(graph, "B", expr) is False + + def test_case_insensitive_operators(self): + graph = _make_field_filter_graph() + expr = parse_node_filter_expression("property:field=1 AND property:roboflow.enabled") + assert node_matches_filter_expression(graph, "A", expr) is True + + def test_unbalanced_parenthesis_raises(self): + with pytest.raises(ValueError): + parse_node_filter_expression("(property:field=1") + + def test_trailing_operator_raises(self): + with pytest.raises(ValueError): + parse_node_filter_expression("property:field=1 and") + + def test_empty_expression_raises(self): + with pytest.raises(ValueError): + parse_node_filter_expression("") + + +class TestSelectNodesByFiltersWithExpressions: + def test_select_nodes_by_combined_expression(self): + graph = _make_field_filter_graph() + selected = select_nodes_by_filters( + graph, + filters=["property:roboflow.enabled and (property:field=1 or property:field=2)"], + ) + assert selected == {"A", "B"} + + def test_exclude_with_combined_expression(self): + graph = _make_field_filter_graph() + selected = select_nodes_by_filters( + graph, + filters=["property:roboflow.enabled"], + exclude_filters=["property:field=3"], + ) + assert selected == {"A", "B"} + + +# --------------------------------------------------------------------------- +# Grid angle deviation +# --------------------------------------------------------------------------- +# +# The grid-angle-deviation check is about the angle *between* a node's own +# edges, not about the edges' absolute orientation relative to the map's +# global x/y axes: a node whose edges are mutually at right angles must +# never be flagged, no matter how the whole map (or just that node's local +# neighbourhood) happens to be rotated. + +def _axis_aligned_graph() -> "nx.DiGraph": + graph = nx.DiGraph() + graph.add_node("A", x=0.0, y=0.0) + graph.add_node("B", x=10.0, y=0.0) # due east of A + graph.add_node("C", x=0.0, y=10.0) # due north of A + graph.add_edge( + "A", "B", edge_id="A_B", action="navigate_to_pose", action_type="", properties={}, weight=1.0 + ) + graph.add_edge( + "A", "C", edge_id="A_C", action="navigate_to_pose", action_type="", properties={}, weight=1.0 + ) + return graph + + +def _bearing_graph(center: str, center_pos, edges) -> "nx.DiGraph": + """Build a star graph: *center* at *center_pos*, with one outgoing edge + to a node placed at each ``(name, bearing_deg)`` pair in *edges* + (10 units away from the centre).""" + graph = nx.DiGraph() + graph.add_node(center, x=center_pos[0], y=center_pos[1]) + for name, bearing in edges: + x = center_pos[0] + 10.0 * math.cos(math.radians(bearing)) + y = center_pos[1] + 10.0 * math.sin(math.radians(bearing)) + graph.add_node(name, x=x, y=y) + graph.add_edge( + center, name, edge_id=f"{center}_{name}", action="navigate_to_pose", + action_type="", properties={}, weight=1.0, + ) + return graph + + +class TestGridAngleDeviationHelpers: + def test_grid_angle_deviation_zero_on_cardinal_directions(self): + for bearing in (0.0, 90.0, 180.0, 270.0, 360.0): + assert grid_angle_deviation(bearing) == pytest.approx(0.0, abs=1e-9) + + def test_grid_angle_deviation_max_at_45_degrees(self): + assert grid_angle_deviation(45.0) == pytest.approx(45.0) + assert grid_angle_deviation(135.0) == pytest.approx(45.0) + + def test_grid_angle_deviation_uses_reference_phase(self): + """A bearing that is a 90-degree multiple away from a non-zero + reference phase (i.e. a locally-rotated grid) has zero deviation, + not a deviation relative to the global 0/90/180/270 axes.""" + assert grid_angle_deviation(120.0, reference_phase_deg=30.0) == pytest.approx(0.0, abs=1e-9) + assert grid_angle_deviation(30.0, reference_phase_deg=30.0) == pytest.approx(0.0, abs=1e-9) + assert grid_angle_deviation(75.0, reference_phase_deg=30.0) == pytest.approx(45.0) + + def test_compute_edge_bearing(self): + graph = _axis_aligned_graph() + assert compute_edge_bearing(graph, "A", "B") == pytest.approx(0.0) + assert compute_edge_bearing(graph, "A", "C") == pytest.approx(90.0) + assert compute_edge_bearing(graph, "B", "A") == pytest.approx(180.0) + + +class TestFindGridAngleDeviations: + def test_axis_aligned_grid_has_no_deviations(self): + graph = _axis_aligned_graph() + assert find_grid_angle_deviations(graph) == [] + + def test_rotated_but_mutually_perpendicular_edges_have_no_deviations(self): + """Edges at 30/120/210/300 degrees are all still 90-degree + multiples *of one another*, even though none of them lines up + with the global 0/90/180/270 directions.""" + graph = _bearing_graph("A", (0.0, 0.0), [ + ("B", 30.0), ("C", 120.0), ("D", 210.0), ("E", 300.0), + ]) + assert find_grid_angle_deviations(graph) == [] + + def test_single_edge_node_is_never_flagged(self): + """A lone diagonal edge has no other edge at the same node to + measure an angle against, so it must not be flagged even though + its absolute bearing is 45 degrees away from the global grid.""" + graph = nx.DiGraph() + graph.add_node("A", x=0.0, y=0.0) + graph.add_node("B", x=10.0, y=10.0) # 45 degrees + graph.add_edge( + "A", "B", edge_id="A_B", action="navigate_to_pose", action_type="", properties={}, weight=1.0 + ) + assert find_grid_angle_deviations(graph) == [] + + def test_odd_edge_out_is_flagged_among_consistent_edges(self): + """Two edges at right angles to each other plus one diagonal edge: + only the diagonal edge is inconsistent with the other two, so only + it should be flagged.""" + graph = _bearing_graph("A", (0.0, 0.0), [ + ("East", 0.0), ("North", 90.0), ("Diag", 45.0), + ]) + findings = find_grid_angle_deviations(graph) + assert {f["node"] for f in findings} == {"A"} + assert {f["neighbour"] for f in findings} == {"Diag"} + assert findings[0]["deviation_deg"] == pytest.approx(45.0) + assert findings[0]["edge_ids"] == ["A_Diag"] + + def test_incoming_edge_is_considered(self): + """Incoming edges must contribute to the local reference phase and + be checked, exactly like outgoing edges: here East (outgoing) and + North (incoming) reinforce each other at a right angle, so the + diagonal incoming edge is the only one flagged.""" + graph = nx.DiGraph() + graph.add_node("A", x=0.0, y=0.0) + graph.add_node("East", x=10.0, y=0.0) + graph.add_node("North", x=0.0, y=10.0) + graph.add_node("Diag", x=10.0, y=10.0) + graph.add_edge( + "A", "East", edge_id="A_East", action="navigate_to_pose", action_type="", properties={}, weight=1.0 + ) + graph.add_edge( + "North", "A", edge_id="North_A", action="navigate_to_pose", action_type="", properties={}, weight=1.0 + ) + graph.add_edge( + "Diag", "A", edge_id="Diag_A", action="navigate_to_pose", action_type="", properties={}, weight=1.0 + ) + + findings = find_grid_angle_deviations(graph, nodes=["A"]) + assert len(findings) == 1 + assert findings[0]["node"] == "A" + assert findings[0]["neighbour"] == "Diag" + + def test_threshold_suppresses_small_deviations(self): + """East and North reinforce a right angle; C drifts 10 degrees off + North, so it is the only edge whose deviation grows with the + threshold.""" + graph = _bearing_graph("A", (0.0, 0.0), [ + ("East", 0.0), ("North", 90.0), ("C", 100.0), + ]) + + assert find_grid_angle_deviations(graph, threshold_deg=10.0) == [] + findings = find_grid_angle_deviations(graph, threshold_deg=5.0) + assert len(findings) == 1 + assert findings[0]["neighbour"] == "C" + + def test_nodes_argument_restricts_scope(self): + graph = _bearing_graph("A", (0.0, 0.0), [("East", 0.0), ("Diag", 45.0)]) + graph.add_node("Z", x=100.0, y=100.0) + graph.add_node("Z2", x=110.0, y=145.0) + graph.add_edge( + "Z", "Z2", edge_id="Z_Z2", action="navigate_to_pose", action_type="", properties={}, weight=1.0 + ) + + findings = find_grid_angle_deviations(graph, nodes=["A"]) + assert {f["node"] for f in findings} == {"A"} + + +class TestComputeGridAlignmentAdjustments: + def test_already_aligned_node_is_left_untouched(self): + graph = _axis_aligned_graph() + adjustments, unresolved = compute_grid_alignment_adjustments(graph, ["A"]) + assert adjustments == [] + assert unresolved == [] + + def test_already_aligned_but_rotated_node_is_left_untouched(self): + graph = _bearing_graph("A", (0.0, 0.0), [("B", 30.0), ("C", 120.0)]) + adjustments, unresolved = compute_grid_alignment_adjustments(graph, ["A"]) + assert adjustments == [] + assert unresolved == [] + + def test_node_without_edges_is_skipped(self): + graph = nx.DiGraph() + graph.add_node("Isolated", x=0.0, y=0.0) + adjustments, unresolved = compute_grid_alignment_adjustments(graph, ["Isolated"]) + assert adjustments == [] + assert unresolved == [] + + def test_single_edge_node_is_skipped(self): + """With only one edge there is no angle between edges to correct, + so the node must be left untouched even if its lone edge is + diagonal.""" + graph = nx.DiGraph() + graph.add_node("A", x=0.0, y=0.0) + graph.add_node("B", x=10.0, y=10.0) + graph.add_edge( + "A", "B", edge_id="A_B", action="navigate_to_pose", action_type="", properties={}, weight=1.0 + ) + adjustments, unresolved = compute_grid_alignment_adjustments(graph, ["A"]) + assert adjustments == [] + assert unresolved == [] + + def test_corner_node_with_two_perpendicular_neighbours(self): + graph = nx.DiGraph() + graph.add_node("Corner", x=1.0, y=1.0) + graph.add_node("East", x=10.0, y=0.0) + graph.add_node("North", x=0.0, y=10.0) + graph.add_edge( + "Corner", "East", edge_id="c_e", action="navigate_to_pose", + action_type="", properties={}, weight=1.0, + ) + graph.add_edge( + "Corner", "North", edge_id="c_n", action="navigate_to_pose", + action_type="", properties={}, weight=1.0, + ) + + adjustments, unresolved = compute_grid_alignment_adjustments(graph, ["Corner"]) + assert unresolved == [] + assert len(adjustments) == 1 + new_x, new_y = adjustments[0].new_position + assert new_y == pytest.approx(0.0) # aligned with East + assert new_x == pytest.approx(0.0) # aligned with North + + def test_corner_node_resolved_relative_to_a_rotated_local_grid(self): + """The two neighbours are already 90 degrees apart, just not + aligned to the global x/y axes; the node should be moved onto + that (rotated) right angle rather than the global one.""" + graph = nx.DiGraph() + graph.add_node("Corner", x=2.0, y=1.0) + for name, bearing in (("N1", 30.0), ("N2", 120.0)): + x = 10.0 * math.cos(math.radians(bearing)) + y = 10.0 * math.sin(math.radians(bearing)) + graph.add_node(name, x=x, y=y) + graph.add_edge( + "Corner", name, edge_id=f"c_{name}", action="navigate_to_pose", + action_type="", properties={}, weight=1.0, + ) + + adjustments, unresolved = compute_grid_alignment_adjustments(graph, ["Corner"]) + assert unresolved == [] + assert len(adjustments) == 1 + new_x, new_y = adjustments[0].new_position + b1 = compute_edge_bearing(graph, "Corner", "N1") + # compute_edge_bearing reads from the (unmodified) graph, so + # recompute the post-move bearings from the new position directly. + bearing_n1 = math.degrees(math.atan2( + graph.nodes["N1"]["y"] - new_y, graph.nodes["N1"]["x"] - new_x + )) % 360.0 + bearing_n2 = math.degrees(math.atan2( + graph.nodes["N2"]["y"] - new_y, graph.nodes["N2"]["x"] - new_x + )) % 360.0 + assert (bearing_n2 - bearing_n1) % 360.0 == pytest.approx(90.0) + assert adjustments[0].max_deviation_after == pytest.approx(0.0, abs=1e-6) + + def test_conflicting_neighbours_are_left_unresolved(self): + """Three fixed neighbours where one is genuinely inconsistent with + the other two cannot be reconciled by moving a single node.""" + graph = _bearing_graph("A", (0.0, 0.0), [ + ("East", 0.0), ("North", 90.0), ("Diag", 45.0), + ]) + + adjustments, unresolved = compute_grid_alignment_adjustments( + graph, ["A"], threshold_deg=DEFAULT_GRID_ANGLE_THRESHOLD_DEG + ) + assert adjustments == [] + assert unresolved == ["A"] + # Neighbours must never be modified, even when unresolved. + assert graph.nodes["East"]["x"] == pytest.approx(10.0) + assert graph.nodes["East"]["y"] == pytest.approx(0.0) + + +# --------------------------------------------------------------------------- +# SVG generation +# --------------------------------------------------------------------------- + +class TestGenerateSvg: + def test_generates_valid_svg_file(self, tmp_path): + from topological_navigation.networkx_utils import build_graph_from_tmap + from topological_navigation.tmap_utils import load_tmap2_file + graph = build_graph_from_tmap(load_tmap2_file(MIXED_ACTIONS_MAP)) + + out = tmp_path / "map.svg" + svg = generate_svg(graph, str(out), title="test") + + assert out.is_file() + assert svg.startswith("") + # Bidirectional edges must not reference an arrow marker. + assert 'marker-end="url(#arrow-2ca02c)"' not in svg.split("")[0] + + def test_directional_edges_get_arrow_marker(self, tmp_path): + from topological_navigation.networkx_utils import build_graph_from_tmap + from topological_navigation.tmap_utils import load_tmap2_file + graph = build_graph_from_tmap(load_tmap2_file(SIMPLE_MAP)) + + out = tmp_path / "simple.svg" + svg = generate_svg(graph, str(out)) + assert 'marker-end="url(#arrow-' in svg + + def test_raises_on_empty_graph(self, tmp_path): + graph = nx.DiGraph() + with pytest.raises(ValueError): + generate_svg(graph, str(tmp_path / "empty.svg")) + + def test_output_is_well_formed_xml(self, tmp_path): + """The generated document must always be parseable XML.""" + import xml.etree.ElementTree as ET + from topological_navigation.networkx_utils import build_graph_from_tmap + from topological_navigation.tmap_utils import load_tmap2_file + graph = build_graph_from_tmap(load_tmap2_file(COMPLEX_MAP)) + + out = tmp_path / "complex.svg" + svg = generate_svg(graph, str(out), title="A & B \"title\"") + ET.fromstring(svg) # raises ParseError if malformed + + def test_special_characters_in_names_are_escaped(self, tmp_path): + """Node/action/edge names with XML metacharacters must not break the SVG.""" + import xml.etree.ElementTree as ET + + graph = nx.DiGraph() + graph.add_node("N<1>", x=0.0, y=0.0, verts=[]) + graph.add_node('N&"2', x=5.0, y=0.0, verts=[]) + graph.add_edge( + "N<1>", 'N&"2', + edge_id="e<1>&'2\"", action="go & ", + action_type="", properties={}, weight=1.0, + ) + + out = tmp_path / "special.svg" + svg = generate_svg(graph, str(out), title="Map <1> & \"2\"") + + # Must parse as valid XML despite the special characters. + ET.fromstring(svg) + # Raw metacharacters must not appear unescaped in text content. + assert "<1>" not in svg + assert "go & " not in svg + assert "<1>" in svg + + def test_non_finite_node_coordinates_do_not_break_svg(self, tmp_path): + """NaN/Inf coordinates must be sanitised, not leak into the markup.""" + import re + import xml.etree.ElementTree as ET + + graph = nx.DiGraph() + graph.add_node("A", x=float("nan"), y=float("inf"), verts=[]) + graph.add_node("B", x=1.0, y=1.0, verts=[]) + graph.add_edge( + "A", "B", edge_id="A_B", action="navigate_to_pose", + action_type="", properties={}, weight=1.0, + ) + + out = tmp_path / "nonfinite.svg" + svg = generate_svg(graph, str(out)) + + ET.fromstring(svg) + # Every numeric-looking attribute value must be a finite number; + # a loose whole-document substring search would false-positive on + # unrelated text (e.g. font-family names), so inspect attribute + # values directly instead. + for value in re.findall(r'"(-?\d[\d.eE+-]*)"', svg): + assert value.lower() not in ("nan", "inf", "-inf", "infinity", "-infinity") + assert math.isfinite(float(value)) + + def test_degenerate_width_height_do_not_break_svg(self, tmp_path): + """A width/height smaller than 2x margin must not produce an invalid document.""" + import xml.etree.ElementTree as ET + from topological_navigation.networkx_utils import build_graph_from_tmap + from topological_navigation.tmap_utils import load_tmap2_file + graph = build_graph_from_tmap(load_tmap2_file(SIMPLE_MAP)) + + out = tmp_path / "tiny.svg" + svg = generate_svg(graph, str(out), width=10, height=10, margin=40.0) + + ET.fromstring(svg) + + def test_all_nodes_at_same_position_do_not_break_svg(self, tmp_path): + """A single point (zero span) map must still render valid SVG.""" + import xml.etree.ElementTree as ET + + graph = nx.DiGraph() + graph.add_node("A", x=3.0, y=3.0, verts=[]) + graph.add_node("B", x=3.0, y=3.0, verts=[]) + + out = tmp_path / "single_point.svg" + svg = generate_svg(graph, str(out)) + + ET.fromstring(svg) + + +# --------------------------------------------------------------------------- +# analyse_map / AnalysisResult +# --------------------------------------------------------------------------- + +class TestAnalyseMap: + def test_valid_map_reports_valid(self): + result = analyse_map(MIXED_ACTIONS_MAP) + assert isinstance(result, AnalysisResult) + assert result.is_valid is True + + def test_map_with_orphan_is_invalid(self): + result = analyse_map(SIMPLE_MAP) + assert result.is_valid is False + + def test_map_with_overlap_is_invalid(self): + result = analyse_map(POLYGON_SHAPES_MAP) + assert result.is_valid is False + + def test_disconnected_submaps_alone_do_not_invalidate(self): + # complex_map has disconnected submaps AND orphans (NoGoZone / + # TopicLocaliseNode are isolated nodes), so build a graph by hand + # to isolate the "disconnected-only" scenario. + graph = nx.DiGraph() + graph.add_node("A", x=0.0, y=0.0, verts=[]) + graph.add_node("B", x=0.0, y=0.0, verts=[]) + graph.add_edge("A", "B", action="navigate_to_pose", action_type="", properties={}, weight=1.0) + graph.add_node("C", x=100.0, y=100.0, verts=[]) + graph.add_node("D", x=100.0, y=101.0, verts=[]) + graph.add_edge("C", "D", action="navigate_to_pose", action_type="", properties={}, weight=1.0) + + components = find_disconnected_components(graph) + orphans = find_orphaned_nodes(graph) + overlaps = find_overlapping_influence_zones(graph) + + assert len(components) == 2 + assert orphans == ["A", "C"] # sources of each sub-map have no incoming edges... but that's expected + # Sanity: components alone shouldn't be conflated with validity; + # validity is computed from schema + orphans + overlaps only. + result = AnalysisResult( + map_file="dummy", + schema_valid=True, + schema_message="ok", + orphaned_nodes=[], + disconnected_components=components, + statistics=compute_statistics(graph), + overlaps=overlaps, + ) + assert result.is_valid is True + + def test_generates_svg_when_path_given(self, tmp_path): + out = tmp_path / "out.svg" + result = analyse_map(MIXED_ACTIONS_MAP, svg_path=str(out)) + assert result.svg_path == str(out) + assert out.is_file() + + def test_format_report_contains_all_sections(self): + result = analyse_map(MIXED_ACTIONS_MAP) + report = result.format_report() + for section in ( + "[Schema validation]", "[Orphaned nodes]", + "[Disconnected sub-maps]", "[Overlapping influence zones]", + "[Grid angle deviation]", "[Statistics]", + ): + assert section in report + + +class TestAnalyseMapGridAngleDeviation: + """COMPLEX_MAP contains genuinely diagonal (45 deg) edges around + Entry/Row1Start/Row1End/Row2End/Junction2 (see test/fixtures/README.md); + these are used here to exercise the (disabled-by-default) check.""" + + def test_disabled_by_default(self): + result = analyse_map(COMPLEX_MAP) + assert result.grid_angle_deviations == [] + assert result.check_severities["grid-angle-deviation"] is None + + def test_enabled_finds_deviations(self): + result = analyse_map(COMPLEX_MAP, check_severities={"grid-angle-deviation": "warning"}) + assert len(result.grid_angle_deviations) > 0 + assert "Row1Start" in {d["node"] for d in result.grid_angle_deviations} + + def test_error_severity_makes_map_invalid(self): + result = analyse_map( + COMPLEX_MAP, + check_severities={ + "schema": None, "orphaned-node": None, + "sub-map-separation": None, "influence-zone-overlap": None, + "grid-angle-deviation": "error", + }, + ) + assert result.is_valid is False + + def test_warning_severity_does_not_invalidate_map(self): + result = analyse_map( + COMPLEX_MAP, + check_severities={ + "schema": None, "orphaned-node": None, + "sub-map-separation": None, "influence-zone-overlap": None, + "grid-angle-deviation": "warning", + }, + ) + assert len(result.grid_angle_deviations) > 0 + assert result.is_valid is True + + def test_filter_restricts_selected_nodes(self): + result = analyse_map( + COMPLEX_MAP, + check_severities={"grid-angle-deviation": "warning"}, + grid_angle_filters=["name:Row1*"], + ) + nodes = {d["node"] for d in result.grid_angle_deviations} + assert nodes and nodes <= {"Row1Start", "Row1End"} + + def test_exclude_filter_removes_matches(self): + result = analyse_map( + COMPLEX_MAP, + check_severities={"grid-angle-deviation": "warning"}, + grid_angle_exclude_filters=["name:Row1Start"], + ) + assert "Row1Start" not in {d["node"] for d in result.grid_angle_deviations} + + def test_looser_threshold_clears_deviations(self): + result = analyse_map( + COMPLEX_MAP, + check_severities={"grid-angle-deviation": "warning"}, + grid_angle_threshold_deg=60.0, + ) + assert result.grid_angle_deviations == [] + + def test_format_report_shows_skipped_when_disabled(self): + result = analyse_map(COMPLEX_MAP) + report = result.format_report() + section = report.split("[Grid angle deviation]")[1].split("[Statistics]")[0] + assert "SKIPPED" in section + + +# --------------------------------------------------------------------------- +# Minification +# --------------------------------------------------------------------------- + +class TestMinifyMap: + def test_default_anchors_produce_smaller_valid_roundtrip(self, tmp_path): + out = tmp_path / "out.min.yaml" + result = minify_map(COMPLEX_MAP, output_file=str(out)) + + assert isinstance(result, MinifyResult) + assert out.is_file() + assert result.minified_size <= result.original_size + assert result.schema_valid is True + + with open(out, encoding="utf-8") as fh: + reparsed = yaml.load(fh, Loader=CustomSafeLoader) + reparsed_body = {k: v for k, v in reparsed.items() if k != DEFAULT_ANCHORS_KEY} + assert reparsed_body == load_tmap2_file(COMPLEX_MAP) + + def test_low_thresholds_create_anchors(self, tmp_path): + out = tmp_path / "out.min.yaml" + result = minify_map( + COMPLEX_MAP, output_file=str(out), min_size=1, min_occurrences=2 + ) + assert result.anchors_created > 0 + assert result.occurrences_collapsed >= result.anchors_created * 2 + + with open(out, encoding="utf-8") as fh: + text = fh.read() + assert f"{DEFAULT_ANCHORS_KEY}:" in text + assert "&" in text # at least one anchor definition + assert "*" in text # at least one alias reference + + def test_no_anchors_disables_anchor_section(self, tmp_path): + out = tmp_path / "out.min.yaml" + result = minify_map( + COMPLEX_MAP, output_file=str(out), anchors=False, min_size=1, min_occurrences=2 + ) + assert result.anchors_created == 0 + assert result.occurrences_collapsed == 0 + + with open(out, encoding="utf-8") as fh: + text = fh.read() + assert f"{DEFAULT_ANCHORS_KEY}:" not in text + + def test_strip_comments_removes_leading_banner(self, tmp_path): + out_kept = tmp_path / "kept.min.yaml" + out_stripped = tmp_path / "stripped.min.yaml" + minify_map(COMPLEX_MAP, output_file=str(out_kept), strip_comments=False) + minify_map(COMPLEX_MAP, output_file=str(out_stripped), strip_comments=True) + + with open(COMPLEX_MAP, encoding="utf-8") as fh: + original_first_line = fh.readline() + + if original_first_line.lstrip().startswith("#"): + assert out_kept.read_text().startswith("#") + assert not out_stripped.read_text().startswith("#") + + def test_strip_unreachable_removes_isolated_nodes_and_stays_valid(self, tmp_path): + graph_before = load_tmap2_file(COMPLEX_MAP) + node_names = [n["node"]["name"] for n in graph_before["nodes"]] + start = node_names[0] + + out = tmp_path / "out.min.yaml" + result = minify_map(COMPLEX_MAP, output_file=str(out), strip_unreachable_from=start) + + assert result.stripped_nodes >= 0 + analysis = analyse_map(str(out)) + assert analysis.orphaned_nodes == [] or analysis.orphaned_nodes == [start] + assert len(analysis.disconnected_components) <= 1 + + def test_strip_unreachable_raises_for_unknown_node(self, tmp_path): + out = tmp_path / "out.min.yaml" + with pytest.raises(ValueError): + minify_map(COMPLEX_MAP, output_file=str(out), strip_unreachable_from="NoSuchNode") + + def test_derives_output_path_when_not_given(self, tmp_path): + src = tmp_path / "my_map.tmap2.yaml" + src.write_text(open(COMPLEX_MAP, encoding="utf-8").read()) + result = minify_map(str(src)) + expected = tmp_path / "my_map.min.tmap2.yaml" + assert result.output_file == str(expected) + assert expected.is_file() + + def test_format_report_contains_key_figures(self, tmp_path): + out = tmp_path / "out.min.yaml" + result = minify_map(COMPLEX_MAP, output_file=str(out), min_size=1, min_occurrences=2) + report = result.format_report() + assert "Original size" in report + assert "Minified size" in report + assert "Reduction" in report + assert "Anchors created" in report + + def test_minifying_an_already_minified_file_is_idempotent(self, tmp_path): + pass1 = tmp_path / "pass1.min.yaml" + pass2 = tmp_path / "pass2.min.yaml" + minify_map(COMPLEX_MAP, output_file=str(pass1), min_size=1, min_occurrences=2) + assert f"{DEFAULT_ANCHORS_KEY}:" in pass1.read_text() + + result2 = minify_map(str(pass1), output_file=str(pass2), min_size=1, min_occurrences=2) + assert result2.schema_valid is True + assert pass2.read_text() == pass1.read_text() + + def test_custom_anchors_key_is_used_instead_of_default(self, tmp_path): + out = tmp_path / "out.min.yaml" + result = minify_map( + COMPLEX_MAP, output_file=str(out), anchors_key="custom_key", min_size=1, min_occurrences=2 + ) + assert result.anchors_created > 0 + + text = out.read_text() + assert "custom_key:" in text + assert f"{DEFAULT_ANCHORS_KEY}:" not in text + + with open(out, encoding="utf-8") as fh: + reparsed = yaml.load(fh, Loader=CustomSafeLoader) + reparsed_body = {k: v for k, v in reparsed.items() if k != "custom_key"} + assert reparsed_body == load_tmap2_file(COMPLEX_MAP) + + +# --------------------------------------------------------------------------- +# Grid alignment +# --------------------------------------------------------------------------- + +class TestGridAlignMap: + def test_writes_output_and_reports_schema_validity(self, tmp_path): + out = tmp_path / "aligned.yaml" + result = grid_align_map(COMPLEX_MAP, output_file=str(out), filters=["name:Row1*"]) + + assert isinstance(result, GridAlignResult) + assert out.is_file() + assert result.schema_valid is True + + def test_derives_output_path_when_not_given(self, tmp_path): + src = tmp_path / "my_map.tmap2.yaml" + src.write_text(open(COMPLEX_MAP, encoding="utf-8").read()) + result = grid_align_map(str(src)) + expected = tmp_path / "my_map.gridalign.tmap2.yaml" + assert result.output_file == str(expected) + assert expected.is_file() + + def test_unresolved_nodes_are_listed_and_left_unmoved(self, tmp_path): + out = tmp_path / "aligned.yaml" + original = load_tmap2_file(COMPLEX_MAP) + original_position = next( + n["node"]["pose"]["position"] for n in original["nodes"] if n["node"]["name"] == "Row1Start" + ) + + result = grid_align_map(COMPLEX_MAP, output_file=str(out), filters=["name:Row1Start"]) + + assert "Row1Start" in result.unresolved_nodes + assert result.adjustments == [] + + aligned = load_tmap2_file(str(out)) + aligned_position = next( + n["node"]["pose"]["position"] for n in aligned["nodes"] if n["node"]["name"] == "Row1Start" + ) + assert aligned_position == original_position + + def test_format_report_contains_key_sections(self, tmp_path): + out = tmp_path / "aligned.yaml" + result = grid_align_map(COMPLEX_MAP, output_file=str(out), filters=["name:Row1*"]) + report = result.format_report() + assert "Angle threshold" in report + assert "Nodes adjusted" in report + assert "Unresolved nodes" in report + + def test_raises_for_map_with_no_nodes_field(self, tmp_path): + out = tmp_path / "aligned.yaml" + empty = tmp_path / "empty.yaml" + empty.write_text("meta: {}\n") + with pytest.raises(ValueError): + grid_align_map(str(empty), output_file=str(out)) + + +# --------------------------------------------------------------------------- +# CLI +# --------------------------------------------------------------------------- + +class TestCli: + def test_check_exits_zero_for_valid_map(self, capsys): + with pytest.raises(SystemExit) as exc_info: + main(["check", MIXED_ACTIONS_MAP]) + assert exc_info.value.code == 0 + + def test_check_exits_one_for_invalid_map(self, capsys): + with pytest.raises(SystemExit) as exc_info: + main(["check", SIMPLE_MAP]) + assert exc_info.value.code == 1 + + def test_check_exits_two_for_missing_file(self, capsys): + with pytest.raises(SystemExit) as exc_info: + main(["check", "/no/such/file.yaml"]) + assert exc_info.value.code == 2 + + def test_svg_command_writes_file(self, tmp_path, capsys): + out = tmp_path / "cli_out.svg" + main(["svg", MIXED_ACTIONS_MAP, "-o", str(out)]) + assert out.is_file() + + def test_analyse_command_prints_report(self, capsys): + main(["analyse", MIXED_ACTIONS_MAP]) + captured = capsys.readouterr() + assert "Map analysis report" in captured.out + + def test_build_arg_parser_requires_subcommand(self): + parser = build_arg_parser() + with pytest.raises(SystemExit): + parser.parse_args([]) + + def test_minify_command_writes_file_and_prints_report(self, tmp_path, capsys): + out = tmp_path / "cli_out.min.yaml" + main(["minify", COMPLEX_MAP, "-o", str(out)]) + assert out.is_file() + captured = capsys.readouterr() + assert "Minify report" in captured.out + + def test_minify_command_exits_two_for_missing_file(self, capsys): + with pytest.raises(SystemExit) as exc_info: + main(["minify", "/no/such/file.yaml"]) + assert exc_info.value.code == 2 + + def test_minify_command_exits_two_for_bad_strip_unreachable(self, tmp_path, capsys): + out = tmp_path / "cli_out.min.yaml" + with pytest.raises(SystemExit) as exc_info: + main(["minify", COMPLEX_MAP, "-o", str(out), "--strip-unreachable", "NoSuchNode"]) + assert exc_info.value.code == 2 + + def test_check_grid_angle_deviation_disabled_by_default(self, capsys): + with pytest.raises(SystemExit) as exc_info: + main([ + "check", COMPLEX_MAP, + "--orphaned-node=false", "--sub-map-separation=false", + "--influence-zone-overlap=false", + ]) + assert exc_info.value.code == 0 + captured = capsys.readouterr() + assert "SKIPPED" in captured.out + + def test_check_grid_angle_deviation_error_severity_fails(self, capsys): + with pytest.raises(SystemExit) as exc_info: + main([ + "check", COMPLEX_MAP, "--grid-angle-deviation=error", + "--orphaned-node=false", "--sub-map-separation=false", + "--influence-zone-overlap=false", + ]) + assert exc_info.value.code == 1 + captured = capsys.readouterr() + assert "Grid angle deviation" in captured.out + + def test_check_grid_angle_deviation_warning_passes(self, capsys): + with pytest.raises(SystemExit) as exc_info: + main([ + "check", COMPLEX_MAP, "--grid-angle-deviation=warning", + "--orphaned-node=false", "--sub-map-separation=false", + "--influence-zone-overlap=false", + ]) + assert exc_info.value.code == 0 + + def test_check_grid_angle_filter_restricts_failures(self, capsys): + with pytest.raises(SystemExit) as exc_info: + main([ + "check", COMPLEX_MAP, "--grid-angle-deviation=error", + "--orphaned-node=false", "--sub-map-separation=false", + "--influence-zone-overlap=false", + "--grid-angle-filter", "name:NoSuchNode*", + ]) + assert exc_info.value.code == 0 + + def test_grid_align_command_writes_file_and_prints_report(self, tmp_path, capsys): + out = tmp_path / "aligned.yaml" + main([ + "grid-align", COMPLEX_MAP, "-o", str(out), + "--grid-angle-filter", "name:Exit", + ]) + assert out.is_file() + captured = capsys.readouterr() + assert "Grid-align report" in captured.out + + def test_grid_align_command_exits_one_when_unresolved(self, tmp_path, capsys): + out = tmp_path / "aligned.yaml" + with pytest.raises(SystemExit) as exc_info: + main([ + "grid-align", COMPLEX_MAP, "-o", str(out), + "--grid-angle-filter", "name:Row1Start", + ]) + assert exc_info.value.code == 1 + captured = capsys.readouterr() + assert "Row1Start" in captured.out + + def test_grid_align_command_exits_two_for_missing_file(self, capsys): + with pytest.raises(SystemExit) as exc_info: + main(["grid-align", "/no/such/file.yaml"]) + assert exc_info.value.code == 2 diff --git a/topological_navigation/test/test_map_merger.py b/topological_navigation/test/test_map_merger.py new file mode 100644 index 00000000..ddd13f92 --- /dev/null +++ b/topological_navigation/test/test_map_merger.py @@ -0,0 +1,320 @@ +"""Unit tests for the map_merger module. + +Covers GPS reprojection, zero-origin handling, node/edge name +deduplication, meta/fields merging, schema validity of merged output, and +CLI behaviour. +""" + +import os + +import pytest +from pyproj import Transformer + +from topological_navigation.map_analyser import analyse_map, main as analyser_main +from topological_navigation.map_merger import MergeResult, merge_maps +from topological_navigation.tmap_utils import load_tmap2_file + + +FIXTURES = os.path.join(os.path.dirname(__file__), "fixtures") +SIMPLE_MAP = os.path.join(FIXTURES, "simple_map.yaml") +COMPLEX_MAP = os.path.join(FIXTURES, "complex_map.yaml") +MERGE_A = os.path.join(FIXTURES, "mergeable_map_a.yaml") +MERGE_B = os.path.join(FIXTURES, "mergeable_map_b.yaml") + + +def _expected_offset(ref_lat, ref_lon, lat, lon): + """Independent re-computation of the expected (east, north) offset for assertions.""" + aeqd_crs = f"+proj=aeqd +lat_0={ref_lat} +lon_0={ref_lon} +datum=WGS84 +units=m +no_defs" + transformer = Transformer.from_crs("EPSG:4326", aeqd_crs, always_xy=True) + return transformer.transform(lon, lat) + + +def _node(tmap, name): + for entry in tmap["nodes"]: + if entry["node"]["name"] == name: + return entry + raise KeyError(name) + + +class TestReprojection: + def test_reference_map_positions_unchanged(self, tmp_path): + out = tmp_path / "merged.yaml" + merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + merged = load_tmap2_file(str(out)) + + wp1 = _node(merged, "WP1") + assert wp1["node"]["pose"]["position"]["x"] == pytest.approx(0.0) + assert wp1["node"]["pose"]["position"]["y"] == pytest.approx(0.0) + + def test_second_map_positions_reprojected(self, tmp_path): + out = tmp_path / "merged.yaml" + result = merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + assert isinstance(result, MergeResult) + merged = load_tmap2_file(str(out)) + + east, north = _expected_offset(51.5000000, -0.1000000, 51.5010000, -0.0990000) + + wp1_2 = _node(merged, "WP1_2") + assert wp1_2["node"]["pose"]["position"]["x"] == pytest.approx(east, abs=1e-3) + assert wp1_2["node"]["pose"]["position"]["y"] == pytest.approx(north, abs=1e-3) + assert wp1_2["node"]["pose"]["position"]["z"] == pytest.approx(5.0) # 15 - 10 altitude diff + + wp2_2 = _node(merged, "WP2_2") + assert wp2_2["node"]["pose"]["position"]["x"] == pytest.approx(east, abs=1e-3) + assert wp2_2["node"]["pose"]["position"]["y"] == pytest.approx(5.0 + north, abs=1e-3) + + offsets_by_file = {f: (e, n, a, r) for f, e, n, a, r in result.per_map_offsets} + assert offsets_by_file[MERGE_A][3] is False + assert offsets_by_file[MERGE_B][3] is True + + def test_zero_origin_maps_merge_unchanged(self, tmp_path): + out = tmp_path / "merged.yaml" + result = merge_maps([SIMPLE_MAP, COMPLEX_MAP], output_file=str(out)) + merged = load_tmap2_file(str(out)) + + wp1 = _node(merged, "WP1") + assert wp1["node"]["pose"]["position"]["x"] == pytest.approx(0.0) + assert wp1["node"]["pose"]["position"]["y"] == pytest.approx(0.0) + assert any("no real GPS origin" in w for w in result.warnings) + + +class TestNameDeduplication: + def test_colliding_node_names_are_suffixed(self, tmp_path): + out = tmp_path / "merged.yaml" + result = merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + merged = load_tmap2_file(str(out)) + + names = [entry["node"]["name"] for entry in merged["nodes"]] + assert names == ["WP1", "WP2", "WP1_2", "WP2_2"] + assert (MERGE_B, "WP1", "WP1_2") in result.node_renames + assert (MERGE_B, "WP2", "WP2_2") in result.node_renames + + def test_edge_target_rewritten_after_node_rename(self, tmp_path): + out = tmp_path / "merged.yaml" + merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + merged = load_tmap2_file(str(out)) + + wp1_2 = _node(merged, "WP1_2") + assert wp1_2["node"]["edges"][0]["node"] == "WP2_2" + + def test_colliding_edge_ids_are_suffixed(self, tmp_path): + out = tmp_path / "merged.yaml" + result = merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + merged = load_tmap2_file(str(out)) + + wp1 = _node(merged, "WP1") + wp1_2 = _node(merged, "WP1_2") + assert wp1["node"]["edges"][0]["edge_id"] == "WP1_WP2" + assert wp1_2["node"]["edges"][0]["edge_id"] == "WP1_WP2_2" + assert (MERGE_B, "WP1_WP2", "WP1_WP2_2") in result.edge_renames + + def test_per_node_meta_rewritten_to_merged_identity(self, tmp_path): + out = tmp_path / "merged.yaml" + merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + merged = load_tmap2_file(str(out)) + + wp1_2 = _node(merged, "WP1_2") + assert wp1_2["meta"]["map"] == "mergeable_map_a" + assert wp1_2["meta"]["pointset"] == "mergeable_map_a" + assert wp1_2["meta"]["node"] == "WP1_2" + + +class TestMetaMerge: + def test_fields_concatenated_and_renumbered(self, tmp_path): + out = tmp_path / "merged.yaml" + result = merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + merged = load_tmap2_file(str(out)) + + fields = merged["meta"]["fields"] + assert [f["name"] for f in fields] == ["boundary_a", "boundary_b"] + assert [f["field_number"] for f in fields] == [1, 2] + assert result.fields_merged == 2 + + def test_transformation_conflict_keeps_first_and_warns(self, tmp_path): + out = tmp_path / "merged.yaml" + result = merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + merged = load_tmap2_file(str(out)) + + assert merged["transformation"]["topo_frame_id"] == "map_a_frame" + assert any("transformation" in w for w in result.warnings) + + def test_origin_is_always_reference_maps_origin(self, tmp_path): + out = tmp_path / "merged.yaml" + merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + merged = load_tmap2_file(str(out)) + + assert merged["meta"]["origin"]["latitude"] == pytest.approx(51.5) + assert merged["meta"]["origin"]["longitude"] == pytest.approx(-0.1) + + def test_last_updated_is_regenerated(self, tmp_path): + out = tmp_path / "merged.yaml" + merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + merged = load_tmap2_file(str(out)) + + assert merged["meta"]["last_updated"] not in ("01-01-2026_00-00-00", "02-02-2026_00-00-00") + + def test_name_override(self, tmp_path): + out = tmp_path / "merged.yaml" + merge_maps([MERGE_A, MERGE_B], output_file=str(out), name="custom_name") + merged = load_tmap2_file(str(out)) + + assert merged["name"] == "custom_name" + assert merged["metric_map"] == "custom_name" + assert merged["pointset"] == "custom_name" + + +class TestSchemaValidity: + def test_merged_output_is_schema_valid(self, tmp_path): + out = tmp_path / "merged.yaml" + result = merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + assert result.schema_valid is True + + def test_analyse_map_reports_no_new_orphans_or_overlaps(self, tmp_path): + out = tmp_path / "merged.yaml" + merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + analysis = analyse_map(str(out)) + + # Each source map already has WP1 as an orphan (no incoming edges); + # merging must not introduce any orphans beyond the renamed originals. + assert set(analysis.orphaned_nodes) == {"WP1", "WP1_2"} + assert analysis.overlaps == [] + + def test_invalid_input_raises(self, tmp_path): + bad = tmp_path / "bad.yaml" + bad.write_text("name: bad\n") # missing required schema fields + with pytest.raises(ValueError): + merge_maps([MERGE_A, str(bad)], output_file=str(tmp_path / "out.yaml")) + + def test_single_file_raises(self): + with pytest.raises(ValueError): + merge_maps([MERGE_A]) + + +class TestDerivedOutputPath: + def test_default_output_path_derived_from_first_input(self, tmp_path): + src_a = tmp_path / "site_a.tmap2.yaml" + src_a.write_text(open(MERGE_A, encoding="utf-8").read()) + src_b = tmp_path / "site_b.tmap2.yaml" + src_b.write_text(open(MERGE_B, encoding="utf-8").read()) + + result = merge_maps([str(src_a), str(src_b)]) + expected = tmp_path / "site_a.merged.tmap2.yaml" + assert result.output_file == str(expected) + assert expected.is_file() + + +class TestFormatReport: + def test_format_report_contains_all_sections(self, tmp_path): + out = tmp_path / "merged.yaml" + result = merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + report = result.format_report() + for section in ( + "[Reference origin]", "[Per-map reprojection offsets]", + "[Node renames]", "[Edge renames]", "[Connecting edges]", "[Warnings]", + "[Schema validation of merged output]", + ): + assert section in report + + +class TestConnectClosest: + def test_disabled_by_default(self, tmp_path): + out = tmp_path / "merged.yaml" + result = merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + assert result.connecting_edges == [] + + def test_adds_one_bidirectional_edge_between_closest_nodes(self, tmp_path): + out = tmp_path / "merged.yaml" + result = merge_maps([MERGE_A, MERGE_B], output_file=str(out), connect_closest=True) + + assert len(result.connecting_edges) == 1 + node_a, node_b, edge_id_ab, edge_id_ba, dist = result.connecting_edges[0] + assert node_a in ("WP1", "WP2") + assert node_b in ("WP1_2", "WP2_2") + assert dist > 0 + + merged = load_tmap2_file(str(out)) + edges_a = {e["edge_id"]: e for e in _node(merged, node_a)["node"]["edges"]} + edges_b = {e["edge_id"]: e for e in _node(merged, node_b)["node"]["edges"]} + assert edges_a[edge_id_ab]["node"] == node_b + assert edges_b[edge_id_ba]["node"] == node_a + assert edges_a[edge_id_ab]["action"] == "navigate_to_pose" + assert edges_a[edge_id_ab]["action_type"] == "nav2_msgs/action/NavigateToPose" + + def test_connecting_edge_is_actually_the_closest_pair(self, tmp_path): + out = tmp_path / "merged.yaml" + result = merge_maps([MERGE_A, MERGE_B], output_file=str(out), connect_closest=True) + merged = load_tmap2_file(str(out)) + + a_names = ("WP1", "WP2") + b_names = ("WP1_2", "WP2_2") + + def pos(name): + p = _node(merged, name)["node"]["pose"]["position"] + return p["x"], p["y"], p["z"] + + def dist(n1, n2): + p1, p2 = pos(n1), pos(n2) + return sum((c1 - c2) ** 2 for c1, c2 in zip(p1, p2)) ** 0.5 + + expected_dist = min(dist(a, b) for a in a_names for b in b_names) + _, _, _, _, actual_dist = result.connecting_edges[0] + assert actual_dist == pytest.approx(expected_dist, abs=1e-6) + + def test_merged_map_becomes_a_single_connected_component(self, tmp_path): + out = tmp_path / "merged.yaml" + merge_maps([MERGE_A, MERGE_B], output_file=str(out), connect_closest=True) + analysis = analyse_map(str(out)) + assert len(analysis.disconnected_components) == 1 + + def test_without_connect_closest_stays_disconnected(self, tmp_path): + out = tmp_path / "merged.yaml" + merge_maps([MERGE_A, MERGE_B], output_file=str(out)) + analysis = analyse_map(str(out)) + assert len(analysis.disconnected_components) == 2 + + def test_custom_connect_action(self, tmp_path): + out = tmp_path / "merged.yaml" + merge_maps( + [MERGE_A, MERGE_B], output_file=str(out), connect_closest=True, + connect_action="custom_action", connect_action_type="custom_pkg/action/Custom", + ) + merged = load_tmap2_file(str(out)) + connecting = [ + edge + for entry in merged["nodes"] + for edge in entry["node"]["edges"] + if edge["edge_id"].startswith("connect_") + ] + assert connecting + for edge in connecting: + assert edge["action"] == "custom_action" + assert edge["action_type"] == "custom_pkg/action/Custom" + + def test_cli_connect_closest_flag(self, tmp_path): + out = tmp_path / "cli_merged.yaml" + analyser_main(["merge", MERGE_A, MERGE_B, "-o", str(out), "--connect-closest"]) + merged = load_tmap2_file(str(out)) + assert any( + edge["edge_id"].startswith("connect_") + for entry in merged["nodes"] + for edge in entry["node"]["edges"] + ) + + +class TestCli: + def test_merge_command_writes_file_and_prints_report(self, tmp_path, capsys): + out = tmp_path / "cli_merged.yaml" + analyser_main(["merge", MERGE_A, MERGE_B, "-o", str(out)]) + assert out.is_file() + captured = capsys.readouterr() + assert "Merge report" in captured.out + + def test_merge_command_requires_two_files(self, capsys): + with pytest.raises(SystemExit) as exc_info: + analyser_main(["merge", MERGE_A]) + assert exc_info.value.code == 2 + + def test_merge_command_exits_two_for_missing_file(self, capsys): + with pytest.raises(SystemExit) as exc_info: + analyser_main(["merge", MERGE_A, "/no/such/file.yaml"]) + assert exc_info.value.code == 2 diff --git a/topological_navigation/test/test_map_recorder_utils.py b/topological_navigation/test/test_map_recorder_utils.py new file mode 100644 index 00000000..f34817cd --- /dev/null +++ b/topological_navigation/test/test_map_recorder_utils.py @@ -0,0 +1,322 @@ +"""Tests for map_recorder_utils module (map recording core logic).""" + +import pytest + +from topological_navigation.map_recorder_utils import ( + MAP_SOURCE_PROPERTY_VALUE, + MapRecorderCore, + distance_xy, + find_loop_closure_node, + init_topomap, + make_bidirectional_edges, + make_node_dict, + topomap_from_source, +) + + +# ---------- Fixtures ---------------------------------------------------- + +SQUARE_VERTS = [ + {"x": -0.5, "y": -0.5}, + {"x": 0.5, "y": -0.5}, + {"x": 0.5, "y": 0.5}, + {"x": -0.5, "y": 0.5}, +] + + +@pytest.fixture +def template_node(): + return { + "meta": {"map": "map_2d", "node": "NodeName", "pointset": "PointSet"}, + "node": { + "edges": [], + "name": "NodeName", + "nav_frame": "map", + "pose": { + "orientation": {"w": 1.0, "x": 0.0, "y": 0.0, "z": 0.0}, + "position": {"x": 0.0, "y": 0.0, "z": 0.0}, + }, + "properties": {"xy_goal_tolerance": 0.3, "yaw_goal_tolerance": 6.29}, + "verts": [dict(v) for v in SQUARE_VERTS], + }, + } + + +@pytest.fixture +def template_edge(): + return { + "action": "navigate_to_pose", + "edge_id": "origin_destination", + "node": "destination", + "properties": {}, + } + + +@pytest.fixture +def template_action(): + return { + "definitions": {"default_bt": ""}, + "actions": { + "navigate_to_pose": { + "action_type": "nav2_msgs.action.NavigateToPose", + } + }, + } + + +@pytest.fixture +def recorder(template_node, template_edge, template_action): + return MapRecorderCore( + template_node, template_edge, template_action, + pointset="test_map", site_name="test_map", + ) + + +def pose(x, y, z=0.0): + return {"x": x, "y": y, "z": z} + + +# ---------- init_topomap / topomap_from_source --------------------------- + +def test_init_topomap_empty(template_action): + tmap = init_topomap("my_map", "site", template_action) + assert tmap["nodes"] == [] + assert tmap["pointset"] == "my_map" + assert tmap["actions"] == template_action["actions"] + + +def test_topomap_from_source_inherits_metadata(template_action): + source = { + "metric_map": "site_a", + "name": "site_a", + "pointset": "site_a", + "transformation": {"topo_frame_id": "site_a", "parent": "map"}, + "actions": {"custom_action": {}}, + } + tmap = topomap_from_source(source, "", "", template_action) + assert tmap["pointset"] == "site_a" + assert tmap["transformation"]["topo_frame_id"] == "site_a" + assert tmap["actions"] == {"custom_action": {}} + + +def test_topomap_from_source_none(template_action): + tmap = topomap_from_source(None, "my_map", "site", template_action) + assert tmap["pointset"] == "my_map" + + +# ---------- distance_xy --------------------------------------------------- + +def test_distance_xy(): + assert distance_xy(pose(0, 0), pose(3, 4)) == pytest.approx(5.0) + assert distance_xy(pose(1, 1), pose(1, 1)) == 0.0 + + +# ---------- make_node_dict / make_bidirectional_edges ---------------------- + +def test_make_node_dict_sets_position_and_properties(template_node): + node_dict = make_node_dict( + template_node, "node0", pose(1.0, 2.0), "test_map", "test_map", + extra_properties={"map": {"source": "recording"}}, + ) + nd = node_dict["node"] + assert nd["name"] == "node0" + assert nd["pose"]["position"] == {"x": 1.0, "y": 2.0, "z": 0.0} + assert nd["properties"]["map"] == {"source": "recording"} + # Template defaults are preserved alongside the new property. + assert nd["properties"]["xy_goal_tolerance"] == 0.3 + + +def test_make_bidirectional_edges(template_edge): + fwd, rev = make_bidirectional_edges(template_edge, "node0", "node1") + assert fwd["edge_id"] == "node0_node1" + assert fwd["node"] == "node1" + assert rev["edge_id"] == "node1_node0" + assert rev["node"] == "node0" + + +# ---------- find_loop_closure_node ----------------------------------------- + +def test_find_loop_closure_node_inside_zone(template_node, template_action): + tmap = init_topomap("test_map", "test_map", template_action) + tmap["nodes"].append( + make_node_dict(template_node, "node0", pose(0.0, 0.0), "test_map", "test_map") + ) + assert find_loop_closure_node(tmap, pose(0.1, 0.1)) == "node0" + assert find_loop_closure_node(tmap, pose(5.0, 5.0)) is None + + +def test_find_loop_closure_node_empty_map(template_action): + tmap = init_topomap("test_map", "test_map", template_action) + assert find_loop_closure_node(tmap, pose(0.0, 0.0)) is None + + +# ---------- MapRecorderCore: add_node -------------------------------------- + +def test_add_node_creates_first_node(recorder): + name, created, _ = recorder.add_node(pose(0.0, 0.0), node_distance=1.0) + assert created is True + assert name == "node0" + assert recorder.num_nodes() == 1 + assert recorder.last_node_name() == "node0" + + node = recorder._get_node("node0")["node"] + assert node["properties"]["map"]["source"] == MAP_SOURCE_PROPERTY_VALUE + assert node["edges"] == [] + + +def test_add_node_respects_node_distance(recorder): + recorder.add_node(pose(0.0, 0.0), node_distance=1.0) + name, created, msg = recorder.add_node(pose(0.2, 0.0), node_distance=1.0) + assert created is False + assert name == "node0" + assert "too close" in msg + assert recorder.num_nodes() == 1 + + +def test_add_node_creates_bidirectional_edge_to_previous_node(recorder): + recorder.add_node(pose(0.0, 0.0), node_distance=1.0) + name, created, _ = recorder.add_node(pose(2.0, 0.0), node_distance=1.0) + assert created is True + assert name == "node1" + + node0 = recorder._get_node("node0")["node"] + node1 = recorder._get_node("node1")["node"] + assert any(e["node"] == "node1" for e in node0["edges"]) + assert any(e["node"] == "node0" for e in node1["edges"]) + + +def test_add_node_far_apart_not_linked_directly(recorder): + """Only successive nodes are linked, not every pair.""" + recorder.add_node(pose(0.0, 0.0), node_distance=1.0) + recorder.add_node(pose(2.0, 0.0), node_distance=1.0) + recorder.add_node(pose(4.0, 0.0), node_distance=1.0) + + node0 = recorder._get_node("node0")["node"] + node2 = recorder._get_node("node2")["node"] + assert not any(e["node"] == "node2" for e in node0["edges"]) + assert not any(e["node"] == "node0" for e in node2["edges"]) + + +def test_add_node_force_bypasses_distance_check(recorder): + recorder.add_node(pose(0.0, 0.0), node_distance=5.0) + # (1.0, 1.0) is outside node0's influence zone but well within the 5m + # node_distance threshold, so only `force=True` allows a new node here. + name, created, _ = recorder.add_node(pose(1.0, 1.0), node_distance=5.0, force=True) + assert created is True + assert name == "node1" + + +def test_add_node_loop_closure_links_existing_node(recorder): + recorder.add_node(pose(0.0, 0.0), node_distance=1.0) # node0 + recorder.add_node(pose(2.0, 0.0), node_distance=1.0) # node1 + recorder.add_node(pose(4.0, 0.0), node_distance=1.0) # node2 + + # Driving back close to node0's influence zone should reuse node0, + # not create a new node, and link node2 <-> node0. + name, created, msg = recorder.add_node(pose(0.05, 0.05), node_distance=1.0) + assert created is False + assert name == "node0" + assert "loop closure" in msg + assert recorder.num_nodes() == 3 # unique nodes: node0, node1, node2 + assert recorder.num_visits() == 4 # visits include the repeated node0 + + node0 = recorder._get_node("node0")["node"] + node2 = recorder._get_node("node2")["node"] + assert any(e["node"] == "node0" for e in node2["edges"]) + assert any(e["node"] == "node2" for e in node0["edges"]) + + +def test_add_node_stays_in_same_zone_does_not_duplicate(recorder): + recorder.add_node(pose(0.0, 0.0), node_distance=1.0) + name, created, msg = recorder.add_node(pose(0.05, 0.05), node_distance=0.0, force=True) + assert created is False + assert name == "node0" + assert recorder.num_nodes() == 1 + + +# ---------- MapRecorderCore: delete_last_node ------------------------------ + +def test_delete_last_node(recorder): + recorder.add_node(pose(0.0, 0.0), node_distance=1.0) + recorder.add_node(pose(2.0, 0.0), node_distance=1.0) + + success, _ = recorder.delete_last_node() + assert success is True + assert recorder.num_nodes() == 1 + assert recorder.last_node_name() == "node0" + + node0 = recorder._get_node("node0")["node"] + assert node0["edges"] == [] + + +def test_delete_last_node_empty_map(recorder): + success, msg = recorder.delete_last_node() + assert success is False + assert "no nodes" in msg + + +def test_delete_last_node_after_loop_closure_keeps_reused_node(recorder): + """Undoing a loop-closure "visit" must not delete the still-referenced node.""" + recorder.add_node(pose(0.0, 0.0), node_distance=1.0) # node0 + recorder.add_node(pose(2.0, 0.0), node_distance=1.0) # node1 + recorder.add_node(pose(4.0, 0.0), node_distance=1.0) # node2 + + name, created, _ = recorder.add_node(pose(0.05, 0.05), node_distance=1.0) + assert created is False + assert name == "node0" + assert recorder.num_nodes() == 3 + assert recorder.num_visits() == 4 + + success, message = recorder.delete_last_node() + assert success is True + assert "node0" in message + # node0 must still exist (it is still referenced by the earlier visit). + assert recorder._get_node("node0") is not None + assert recorder.num_nodes() == 3 + assert recorder.num_visits() == 3 + assert recorder.last_node_name() == "node2" + + # The loop-closure edge between node2 and node0 must have been undone. + node0 = recorder._get_node("node0")["node"] + node2 = recorder._get_node("node2")["node"] + assert not any(e["node"] == "node0" for e in node2["edges"]) + assert not any(e["node"] == "node2" for e in node0["edges"]) + # But node0's original edge to node1 (from the first pass) is untouched. + assert any(e["node"] == "node1" for e in node0["edges"]) + + +# ---------- MapRecorderCore: reset / load ---------------------------------- + +def test_reset_clears_map(recorder): + recorder.add_node(pose(0.0, 0.0), node_distance=1.0) + recorder.reset() + assert recorder.num_nodes() == 0 + assert recorder.tmap["nodes"] == [] + + +def test_load_seeds_map_for_extension(recorder, template_action): + source_tmap = init_topomap("existing_map", "existing_map", template_action) + source_tmap["nodes"].append( + make_node_dict(recorder.template_node, "existing0", pose(10.0, 10.0), + "existing_map", "existing_map") + ) + + recorder.load(source_tmap) + assert recorder.num_nodes() == 1 + assert recorder.last_node_name() == "existing0" + + name, created, _ = recorder.add_node(pose(12.0, 10.0), node_distance=1.0) + assert created is True + assert name == "node1" + + existing0 = recorder._get_node("existing0")["node"] + assert any(e["node"] == "node1" for e in existing0["edges"]) + + +# ---------- MapRecorderCore: to_yaml ---------------------------------------- + +def test_to_yaml_round_trips(recorder): + recorder.add_node(pose(0.0, 0.0), node_distance=1.0) + yaml_text = recorder.to_yaml() + assert "node0" in yaml_text + assert "pointset: test_map" in yaml_text diff --git a/topological_navigation/test/test_nav_stats_db.py b/topological_navigation/test/test_nav_stats_db.py new file mode 100644 index 00000000..9b27b22d --- /dev/null +++ b/topological_navigation/test/test_nav_stats_db.py @@ -0,0 +1,481 @@ +"""Tests for ``nav_stats_db.py`` -- SQLite traversal statistics persistence.""" + +import json +import tempfile +import os +from datetime import datetime + +import pytest + +from topological_navigation.nav_stats_db import NavStatsDB, compute_map_hash + + +# --------------------------------------------------------------------------- +# Fixtures +# --------------------------------------------------------------------------- + +@pytest.fixture +def tmp_db(tmp_path): + """Return an open NavStatsDB backed by a temporary file.""" + db = NavStatsDB(str(tmp_path / "test_stats.db")) + yield db + db.close() + + +# --------------------------------------------------------------------------- +# compute_map_hash +# --------------------------------------------------------------------------- + +def test_compute_map_hash_deterministic(): + h1 = compute_map_hash("some map yaml content") + h2 = compute_map_hash("some map yaml content") + assert h1 == h2 + + +def test_compute_map_hash_differs_for_different_content(): + h1 = compute_map_hash("map_a: true") + h2 = compute_map_hash("map_b: true") + assert h1 != h2 + + +def test_compute_map_hash_short(): + h = compute_map_hash("x") + assert len(h) == 12 + assert all(c in "0123456789abcdef" for c in h) + + +# --------------------------------------------------------------------------- +# Database creation +# --------------------------------------------------------------------------- + +def test_db_file_created(tmp_path): + db_path = str(tmp_path / "new.db") + db = NavStatsDB(db_path) + db.close() + assert os.path.isfile(db_path) + + +def test_db_parent_dirs_created(tmp_path): + db_path = str(tmp_path / "deep" / "nested" / "stats.db") + db = NavStatsDB(db_path) + db.close() + assert os.path.isfile(db_path) + + +def test_db_can_be_reopened(tmp_path): + """Existing database is opened and reused without error.""" + db_path = str(tmp_path / "reopen.db") + db1 = NavStatsDB(db_path) + db1.record_traversal( + map_name="map1", map_hash="abc", edge_id="A_B", + origin="A", target="B", status="success", + ) + db1.close() + + db2 = NavStatsDB(db_path) + ids = db2.edge_ids() + db2.close() + assert "A_B" in ids + + +# --------------------------------------------------------------------------- +# record_traversal +# --------------------------------------------------------------------------- + +def test_record_returns_rowid(tmp_db): + rowid = tmp_db.record_traversal( + map_name="test_map", map_hash="hash1", edge_id="A_B", + origin="A", target="B", status="success", + ) + assert isinstance(rowid, int) + assert rowid >= 1 + + +def test_record_and_query(tmp_db): + tmp_db.record_traversal( + map_name="mymap", map_hash="hh", edge_id="N1_N2", + origin="N1", target="N2", status="success", + start_time=datetime(2024, 1, 1, 12, 0, 0), + end_time=datetime(2024, 1, 1, 12, 0, 30), + duration_s=30.0, + edge_length=10.0, + ) + rows = tmp_db.query("SELECT * FROM traversals") + assert len(rows) == 1 + r = rows[0] + assert r["map_name"] == "mymap" + assert r["edge_id"] == "N1_N2" + assert r["status"] == "success" + assert abs(r["duration_s"] - 30.0) < 0.001 + assert abs(r["avg_speed"] - 10.0 / 30.0) < 0.0001 + + +def test_record_failed_with_reason(tmp_db): + tmp_db.record_traversal( + map_name="map", map_hash="h", edge_id="X_Y", + origin="X", target="Y", status="failed", + failure_reason="timeout", + ) + rows = tmp_db.query("SELECT failure_reason, status FROM traversals") + assert rows[0]["failure_reason"] == "timeout" + assert rows[0]["status"] == "failed" + + +def test_record_segment(tmp_db): + tmp_db.record_traversal( + map_name="map", map_hash="h", edge_id="A_B", + origin="A", target="C", status="success", + is_segment=True, + segment_edges=["A_B", "B_C"], + ) + rows = tmp_db.query("SELECT is_segment, segment_edges FROM traversals") + assert rows[0]["is_segment"] == 1 + decoded = json.loads(rows[0]["segment_edges"]) + assert decoded == ["A_B", "B_C"] + + +def test_record_no_segment(tmp_db): + tmp_db.record_traversal( + map_name="map", map_hash="h", edge_id="A_B", + origin="A", target="B", status="success", + ) + rows = tmp_db.query("SELECT is_segment, segment_edges FROM traversals") + assert rows[0]["is_segment"] == 0 + assert rows[0]["segment_edges"] is None + + +def test_avg_speed_none_when_no_length(tmp_db): + tmp_db.record_traversal( + map_name="map", map_hash="h", edge_id="A_B", + origin="A", target="B", status="success", + duration_s=10.0, + ) + rows = tmp_db.query("SELECT avg_speed FROM traversals") + assert rows[0]["avg_speed"] is None + + +def test_avg_speed_none_when_zero_duration(tmp_db): + tmp_db.record_traversal( + map_name="map", map_hash="h", edge_id="A_B", + origin="A", target="B", status="success", + duration_s=0.0, + edge_length=5.0, + ) + rows = tmp_db.query("SELECT avg_speed FROM traversals") + assert rows[0]["avg_speed"] is None + + +def test_duration_derived_from_timestamps(tmp_db): + t0 = datetime(2024, 6, 1, 10, 0, 0) + t1 = datetime(2024, 6, 1, 10, 0, 45) + tmp_db.record_traversal( + map_name="map", map_hash="h", edge_id="A_B", + origin="A", target="B", status="success", + start_time=t0, end_time=t1, + ) + rows = tmp_db.query("SELECT duration_s FROM traversals") + assert abs(rows[0]["duration_s"] - 45.0) < 0.001 + + +def test_multiple_records(tmp_db): + for i in range(5): + tmp_db.record_traversal( + map_name="map", map_hash="h", edge_id="A_B", + origin="A", target="B", status="success", + duration_s=float(10 + i), + ) + rows = tmp_db.query("SELECT COUNT(*) AS cnt FROM traversals") + assert rows[0]["cnt"] == 5 + + +# --------------------------------------------------------------------------- +# edge_ids +# --------------------------------------------------------------------------- + +def test_edge_ids_empty(tmp_db): + assert tmp_db.edge_ids() == [] + + +def test_edge_ids_sorted(tmp_db): + for eid in ["Z_A", "A_B", "M_N"]: + tmp_db.record_traversal( + map_name="m", map_hash="h", edge_id=eid, + origin="x", target="y", status="success", + ) + assert tmp_db.edge_ids() == ["A_B", "M_N", "Z_A"] + + +def test_edge_ids_with_filter(tmp_db): + tmp_db.record_traversal( + map_name="mapA", map_hash="h", edge_id="A_B", + origin="A", target="B", status="success", + ) + tmp_db.record_traversal( + map_name="mapB", map_hash="h", edge_id="C_D", + origin="C", target="D", status="success", + ) + ids = tmp_db.edge_ids(where="map_name = 'mapA'") + assert ids == ["A_B"] + + +# --------------------------------------------------------------------------- +# edge_stats +# --------------------------------------------------------------------------- + +def test_edge_stats_counts(tmp_db): + for status in ["success", "success", "failed", "aborted"]: + tmp_db.record_traversal( + map_name="m", map_hash="h", edge_id="E1_E2", + origin="E1", target="E2", status=status, duration_s=10.0, + ) + s = tmp_db.edge_stats("E1_E2") + assert s["total"] == 4 + assert s["success"] == 2 + assert s["failed"] == 1 + assert s["aborted"] == 1 + + +def test_edge_stats_avg_duration(tmp_db): + for d in [10.0, 20.0, 30.0]: + tmp_db.record_traversal( + map_name="m", map_hash="h", edge_id="X_Y", + origin="X", target="Y", status="success", duration_s=d, + ) + s = tmp_db.edge_stats("X_Y") + assert abs(s["avg_duration_s"] - 20.0) < 0.001 + assert abs(s["min_duration_s"] - 10.0) < 0.001 + assert abs(s["max_duration_s"] - 30.0) < 0.001 + + +def test_edge_stats_unknown_edge(tmp_db): + s = tmp_db.edge_stats("nonexistent") + assert s == {} + + +def test_edge_stats_with_filter(tmp_db): + tmp_db.record_traversal( + map_name="mapA", map_hash="h", edge_id="A_B", + origin="A", target="B", status="success", duration_s=5.0, + ) + tmp_db.record_traversal( + map_name="mapB", map_hash="h", edge_id="A_B", + origin="A", target="B", status="failed", duration_s=8.0, + ) + # With filter only mapA + s = tmp_db.edge_stats("A_B", where="map_name = 'mapA'") + assert s["total"] == 1 + assert s["success"] == 1 + + +# --------------------------------------------------------------------------- +# store_map / get_map / list_maps / delete_map +# --------------------------------------------------------------------------- + +_SIMPLE_YAML = """\ +meta: + origin: + latitude: 51.2096 + longitude: 0.4946 +name: Test Field +pointset: test_field +nodes: [] +""" + +_ANOTHER_YAML = """\ +meta: + origin: + latitude: 53.2686 + longitude: -0.5245 +name: Another Map +pointset: another_map +nodes: [] +""" + + +def test_store_map_returns_hash(tmp_db): + h = tmp_db.store_map(_SIMPLE_YAML) + expected = compute_map_hash(_SIMPLE_YAML) + assert h == expected + + +def test_store_map_idempotent(tmp_db): + """Storing the same map twice should produce exactly one row.""" + tmp_db.store_map(_SIMPLE_YAML) + tmp_db.store_map(_SIMPLE_YAML) + rows = tmp_db.query("SELECT COUNT(*) AS cnt FROM topological_maps") + assert rows[0]["cnt"] == 1 + + +def test_store_map_extracts_metadata(tmp_db): + tmp_db.store_map(_SIMPLE_YAML) + rows = tmp_db.query("SELECT * FROM topological_maps") + assert len(rows) == 1 + r = rows[0] + assert r["map_name"] == "Test Field" + assert abs(r["latitude"] - 51.2096) < 1e-4 + assert abs(r["longitude"] - 0.4946) < 1e-4 + + +def test_store_map_stores_full_yaml(tmp_db): + tmp_db.store_map(_SIMPLE_YAML) + rows = tmp_db.query("SELECT map_data FROM topological_maps") + assert rows[0]["map_data"] == _SIMPLE_YAML + + +def test_get_map_by_hash(tmp_db): + h = tmp_db.store_map(_SIMPLE_YAML) + m = tmp_db.get_map(h) + assert m is not None + assert m["map_hash"] == h + assert m["map_name"] == "Test Field" + + +def test_get_map_by_name(tmp_db): + tmp_db.store_map(_SIMPLE_YAML) + m = tmp_db.get_map("Test Field") + assert m is not None + assert m["map_name"] == "Test Field" + + +def test_get_map_not_found(tmp_db): + assert tmp_db.get_map("nonexistent") is None + + +def test_list_maps_empty(tmp_db): + assert tmp_db.list_maps() == [] + + +def test_list_maps_multiple(tmp_db): + tmp_db.store_map(_SIMPLE_YAML) + tmp_db.store_map(_ANOTHER_YAML) + maps = tmp_db.list_maps() + assert len(maps) == 2 + names = {m["map_name"] for m in maps} + assert "Test Field" in names + assert "Another Map" in names + + +def test_delete_map_by_hash(tmp_db): + h = tmp_db.store_map(_SIMPLE_YAML) + count = tmp_db.delete_map(h) + assert count == 1 + assert tmp_db.get_map(h) is None + + +def test_delete_map_by_name(tmp_db): + tmp_db.store_map(_SIMPLE_YAML) + count = tmp_db.delete_map("Test Field") + assert count == 1 + assert tmp_db.get_map("Test Field") is None + + +def test_delete_map_not_found(tmp_db): + count = tmp_db.delete_map("nonexistent") + assert count == 0 + + +def test_store_map_added_at_populated(tmp_db): + tmp_db.store_map(_SIMPLE_YAML) + rows = tmp_db.query("SELECT added_at FROM topological_maps") + assert rows[0]["added_at"] is not None + assert len(rows[0]["added_at"]) > 0 + + +# --------------------------------------------------------------------------- +# merge_from +# --------------------------------------------------------------------------- + +def test_merge_from_copies_maps_and_traversals(tmp_path): + src_path = str(tmp_path / "src.db") + dst_path = str(tmp_path / "dst.db") + + src = NavStatsDB(src_path) + h = src.store_map(_SIMPLE_YAML) + src.record_traversal( + map_name="Test Field", map_hash=h, edge_id="A_B", + origin="A", target="B", status="success", duration_s=5.0, + ) + src.close() + + dst = NavStatsDB(dst_path) + result = dst.merge_from(src_path) + assert result["maps_added"] == 1 + assert result["maps_skipped"] == 0 + assert result["traversals_added"] == 1 + + assert dst.get_map("Test Field") is not None + trav = dst.query("SELECT * FROM traversals") + assert len(trav) == 1 + assert trav[0]["edge_id"] == "A_B" + dst.close() + + +def test_merge_from_skips_existing_maps(tmp_path): + src_path = str(tmp_path / "src.db") + dst_path = str(tmp_path / "dst.db") + + src = NavStatsDB(src_path) + src.store_map(_SIMPLE_YAML) + src.close() + + dst = NavStatsDB(dst_path) + dst.store_map(_SIMPLE_YAML) # already present with the same hash + result = dst.merge_from(src_path) + assert result["maps_added"] == 0 + assert result["maps_skipped"] == 1 + + maps = dst.list_maps() + assert len(maps) == 1 + dst.close() + + +def test_merge_from_is_additive_for_traversals(tmp_path): + """Merging the same source twice should double the traversal count.""" + src_path = str(tmp_path / "src.db") + dst_path = str(tmp_path / "dst.db") + + src = NavStatsDB(src_path) + h = src.store_map(_SIMPLE_YAML) + src.record_traversal( + map_name="Test Field", map_hash=h, edge_id="A_B", + origin="A", target="B", status="success", duration_s=5.0, + ) + src.close() + + dst = NavStatsDB(dst_path) + dst.merge_from(src_path) + dst.merge_from(src_path) + trav = dst.query("SELECT * FROM traversals") + assert len(trav) == 2 + dst.close() + + +def test_merge_from_multiple_sources(tmp_path): + src1_path = str(tmp_path / "src1.db") + src2_path = str(tmp_path / "src2.db") + dst_path = str(tmp_path / "dst.db") + + src1 = NavStatsDB(src1_path) + h1 = src1.store_map(_SIMPLE_YAML) + src1.record_traversal( + map_name="Test Field", map_hash=h1, edge_id="A_B", + origin="A", target="B", status="success", duration_s=5.0, + ) + src1.close() + + src2 = NavStatsDB(src2_path) + h2 = src2.store_map(_ANOTHER_YAML) + src2.record_traversal( + map_name="Another Map", map_hash=h2, edge_id="C_D", + origin="C", target="D", status="failed", duration_s=5.0, + ) + src2.close() + + dst = NavStatsDB(dst_path) + dst.merge_from(src1_path) + dst.merge_from(src2_path) + + assert len(dst.list_maps()) == 2 + trav = dst.query("SELECT edge_id FROM traversals ORDER BY edge_id") + assert [r["edge_id"] for r in trav] == ["A_B", "C_D"] + dst.close() diff --git a/topological_navigation/test/test_navigation2.py b/topological_navigation/test/test_navigation2.py new file mode 100644 index 00000000..7aad843a --- /dev/null +++ b/topological_navigation/test/test_navigation2.py @@ -0,0 +1,1095 @@ +"""Targeted tests for ``navigation2.py`` action-server behavior.""" + +from datetime import datetime + +import pytest +import networkx as nx +from types import SimpleNamespace + +from rclpy import Parameter +from rclpy.action import CancelResponse + +from topological_navigation.navigation_graph import ActionSegment, NavState +from topological_navigation.scripts import navigation2 as navigation2_module +from topological_navigation.scripts.navigation2 import ( + TopologicalNavServer, + _make_ros_param_value, + _merge_ros_param_specs, + _normalise_ros_param_spec, + _ros_param_value, +) + + +class _DummyLogger: + """Minimal logger stub for unit tests.""" + + def debug(self, _msg): + pass + + def info(self, _msg): + pass + + def warning(self, _msg): + pass + + def error(self, _msg): + pass + + +class _DummyStateMachine: + """Small state-machine stub used by action callback tests.""" + + def __init__(self, terminal=False): + self.terminal = terminal + self.reset_called = False + self.state = None + self.transitions = [] + + def transition(self, state): + self.transitions.append(state) + self.state = state + return True + + def is_terminal(self): + return self.terminal + + def reset(self): + self.reset_called = True + return True + + +class _FakeGotoGoalHandle: + """Simple goal handle double for ``GotoNode`` callbacks.""" + + def __init__(self, target='WP2', no_orientation=False): + self.request = SimpleNamespace( + target=target, + no_orientation=no_orientation, + ) + self.feedback = [] + self.final_state = None + + def publish_feedback(self, msg): + self.feedback.append(msg) + + def succeed(self): + self.final_state = 'succeeded' + + def abort(self): + self.final_state = 'aborted' + + def canceled(self): + self.final_state = 'canceled' + + +class _FakePolicyGoalHandle: + """Simple goal handle double for ``ExecutePolicyMode`` callbacks.""" + + def __init__(self, route): + self.request = SimpleNamespace(route=route) + self.feedback = [] + self.final_state = None + + def publish_feedback(self, msg): + self.feedback.append(msg) + + def succeed(self): + self.final_state = 'succeeded' + + def abort(self): + self.final_state = 'aborted' + + def canceled(self): + self.final_state = 'canceled' + + +class _FakePolicyGraph: + """Small graph stub supporting get_route_edges-style access.""" + + def __init__(self, edges): + self._edges = list(edges) + + def has_edge(self, src, tgt): + return (src, tgt) in self._edges + + def __contains__(self, node): + return any(node in edge for edge in self._edges) + + def __getitem__(self, src): + edge_map = {} + for u, v in self._edges: + if u != src: + continue + edge_map[v] = { + 'edge_id': '%s_%s' % (u, v), + 'source': u, + 'target': v, + 'properties': {}, + } + return edge_map + + +def _make_server(): + """Create a partially constructed ``TopologicalNavServer`` for unit tests.""" + server = TopologicalNavServer.__new__(TopologicalNavServer) + server.get_logger = lambda: _DummyLogger() + server._sm = _DummyStateMachine() + server._navigation_activated = False + server._cancelled = False + server._preempted = False + server._no_orientation = False + server._target = 'none' + server._current_target = 'none' + server._current_node = 'WP1' + server._closest_node = 'WP1' + server._tmap = { + 'nodes': [ + { + 'node': { + 'name': 'WP1', + 'edges': [ + {'edge_id': 'WP1_WP2', 'node': 'WP2'}, + ], + }, + }, + ], + } + server._graph = _FakePolicyGraph([('WP1', 'WP2')]) + server._topol_map = 'test_map' + server._global_metric_map_bounds = None + server._global_metric_map = None + server._map_actions = {} + server._map_definitions = {} + server._bt_files = {} + server._action_clients = {} + server._xy_tolerance_param = 'goal_checker.xy_goal_tolerance' + server._yaw_tolerance_param = 'goal_checker.yaw_goal_tolerance' + server._goal_checker_node = 'controller_server' + server._param_clients = {} + server._publish_status = lambda *_args, **_kwargs: None + server._publish_route = lambda *_args, **_kwargs: None + server._publish_route_segment_metric_map = ( + lambda *_args, **_kwargs: True + ) + server._execute_route = lambda *_args, **_kwargs: True + server._ensure_robot_within_main_map = lambda *_args, **_kwargs: True + server._cancel_nav2_goal = lambda *_args, **_kwargs: None + server._navigate = lambda *_args, **_kwargs: True + return server + + +def _make_closest_edge_server(edges, closest_edge_ids, distances, target): + """Create a server double for closest-edge route planning tests.""" + server = _make_server() + server._current_node = 'none' + server._closest_node = 'A' + server._max_dist_to_closest_edge = 1.0 + server._closest_edges = SimpleNamespace( + edge_ids=closest_edge_ids, + distances=distances, + ) + server._route_algorithm = 'astar' + server._route_weight = 'weight' + server._graph = nx.DiGraph() + for node, x in [('A', 0.0), ('X', 1.0), ('B', 2.0), ('C', 3.0)]: + server._graph.add_node(node, x=x, y=0.0) + for source, destination, edge_id in edges: + server._graph.add_edge( + source, destination, edge_id=edge_id, weight=1.0, + ) + server._test_target = target + return server + + +def test_closest_edge_is_preserved_as_first_route_segment(): + """A threshold-qualified edge and its action must remain in the route.""" + server = _make_closest_edge_server( + [ + ('A', 'X', 'A_X'), + ('X', 'B', 'X_B'), + ], + ['A_X'], + [0.1], + 'B', + ) + + route = server._route_from_closest_edge('B') + + assert route == ['A', 'X', 'B'] + + +def test_bidirectional_closest_edge_selects_direction_toward_goal(): + """Equal-distance reverse edges choose the shorter continuation route.""" + server = _make_closest_edge_server( + [ + ('A', 'B', 'A_B'), + ('B', 'A', 'B_A'), + ('B', 'C', 'B_C'), + ], + ['A_B', 'B_A'], + [0.1, 0.1], + 'C', + ) + + route = server._route_from_closest_edge('C') + + assert route == ['A', 'B', 'C'] + + +def test_closest_edge_outside_threshold_returns_no_forced_route(): + """The existing closest-node route fallback remains available.""" + server = _make_closest_edge_server( + [('A', 'B', 'A_B')], + ['A_B'], + [1.1], + 'B', + ) + + assert server._route_from_closest_edge('B') is None + + +def test_cancel_goto_callback_accepts_cancel(): + """Cancel requests should be accepted and forwarded to Nav2.""" + server = _make_server() + calls = [] + server._cancel_nav2_goal = lambda *_args, **_kwargs: calls.append('cancel') + + result = server._cancel_goto_cb(None) + + assert result == CancelResponse.ACCEPT + assert server._cancelled is True + assert calls == ['cancel'] + + +def test_exec_goto_success_publishes_feedback_and_succeeds(): + """Successful ``GotoNode`` execution should publish feedback and succeed.""" + server = _make_server() + goal_handle = _FakeGotoGoalHandle(target='WP2', no_orientation=True) + + result = server._exec_goto_cb(goal_handle) + + assert result.success is True + assert goal_handle.final_state == 'succeeded' + assert goal_handle.feedback + assert goal_handle.feedback[0].route == 'Planning...' + assert goal_handle.feedback[0].__class__.__name__.endswith('Feedback') + + +def test_exec_goto_cancelled_marks_goal_canceled(): + """Cancelled ``GotoNode`` executions should not be reported as aborted.""" + server = _make_server() + goal_handle = _FakeGotoGoalHandle(target='WP2') + + def _cancelled_nav(_target): + server._cancelled = True + return False + + server._navigate = _cancelled_nav + + result = server._exec_goto_cb(goal_handle) + + assert result.success is False + assert goal_handle.final_state == 'canceled' + + +def test_exec_policy_invalid_route_aborts_goal(): + """Invalid policy routes should abort the action instead of succeeding false.""" + server = _make_server() + route = SimpleNamespace(source=['WP1', 'WP2'], edge_id=['edge_only_once']) + goal_handle = _FakePolicyGoalHandle(route) + + result = server._exec_policy_cb(goal_handle) + + assert result.success is False + assert goal_handle.final_state == 'aborted' + + +def test_exec_policy_success_enters_planning_and_sets_target(): + """Valid policy execution should enter PLANNING before running the route.""" + server = _make_server() + route = SimpleNamespace(source=['WP1'], edge_id=['WP1_WP2']) + goal_handle = _FakePolicyGoalHandle(route) + observed = {} + + def _execute_route(route_nodes, target): + observed['route_nodes'] = route_nodes + observed['target'] = target + observed['server_target'] = server._target + return True + + server._execute_route = _execute_route + + result = server._exec_policy_cb(goal_handle) + + assert result.success is True + assert goal_handle.final_state == 'succeeded' + assert observed['route_nodes'] == ['WP1', 'WP2'] + assert observed['target'] == 'WP2' + assert observed['server_target'] == 'WP2' + assert NavState.PLANNING in server._sm.transitions + + +def test_load_map_config_clears_stale_action_clients_when_actions_missing(): + """Maps without ``actions`` should not retain stale clients from older maps.""" + server = _make_server() + server._tmap = {} + server._action_clients = {'stale': object()} + + server._load_map_config() + + assert server._action_clients == {} + assert server._bt_files == {} + + +# ===================================================================== +# ROS 2 parameter value helpers +# ===================================================================== + + +class _FakeGraph: + """Minimal networkx-compatible graph stub for unit tests.""" + + def __init__(self, node_data): + self.nodes = node_data + + def __contains__(self, item): + return item in self.nodes + + +class TestRosParamHelpers: + """Unit tests for _ros_param_value and _make_ros_param_value.""" + + def _pv(self, value): + """Round-trip: build ParameterValue then read it back.""" + from rcl_interfaces.msg import ParameterValue, ParameterType + pv = _make_ros_param_value(value) + return _ros_param_value(pv), pv + + def test_double_roundtrip(self): + val, pv = self._pv(3.14) + assert abs(val - 3.14) < 1e-9 + + def test_int_roundtrip(self): + val, pv = self._pv(42) + assert val == 42 + + def test_bool_roundtrip(self): + val, pv = self._pv(True) + assert val is True + + def test_string_roundtrip(self): + val, pv = self._pv('hello') + assert val == 'hello' + + def test_unsupported_type_returns_none(self): + from rcl_interfaces.msg import ParameterValue + # An unset ParameterValue has type 0 (PARAMETER_NOT_SET) + pv = ParameterValue() + assert _ros_param_value(pv) is None + + def test_make_unsupported_type_returns_unset(self): + from rcl_interfaces.msg import ParameterType + pv = _make_ros_param_value([1, 2, 3]) # list not supported + assert pv.type == ParameterType.PARAMETER_NOT_SET + + +# ===================================================================== +# set_ros_params spec normalisation +# ===================================================================== + + +class TestNormaliseRosParamSpec: + """Accepted authoring styles for ``set_ros_params``.""" + + def test_none_returns_empty(self): + assert _normalise_ros_param_spec(None, 'controller_server') == {} + + def test_node_keyed_mapping(self): + spec = {'collision_monitor': {'FootprintApproach.enabled': False}} + assert _normalise_ros_param_spec(spec, 'controller_server') == { + 'collision_monitor': {'FootprintApproach.enabled': False}, + } + + def test_flat_mapping_uses_default_node(self): + spec = {'FollowPath.max_robot_speed': 0.3} + assert _normalise_ros_param_spec(spec, 'controller_server') == { + 'controller_server': {'FollowPath.max_robot_speed': 0.3}, + } + + def test_list_entries_with_param_and_params(self): + spec = [ + {'node': '/collision_monitor', + 'param': 'FootprintApproach.enabled', 'value': False}, + {'node': 'controller_server', + 'params': {'FollowPath.max_robot_speed': 0.3}}, + {'param': 'some.param', 'value': 1}, + ] + assert _normalise_ros_param_spec(spec, 'controller_server') == { + 'collision_monitor': {'FootprintApproach.enabled': False}, + 'controller_server': { + 'FollowPath.max_robot_speed': 0.3, + 'some.param': 1, + }, + } + + def test_merge_override_wins_per_parameter(self): + base = {'collision_monitor': {'a': 1, 'b': 2}} + override = {'collision_monitor': {'b': 3}, 'other': {'c': 4}} + merged = _merge_ros_param_specs(base, override) + assert merged == { + 'collision_monitor': {'a': 1, 'b': 3}, + 'other': {'c': 4}, + } + assert base == {'collision_monitor': {'a': 1, 'b': 2}} + + +# ===================================================================== +# _apply_segment_parameters / _restore_segment_parameters +# ===================================================================== + + +class TestApplyRestoreSegmentParameters: + """Parameter save/restore behaviour in isolation from Nav2.""" + + def _make_segment(self, target='WP2', edge_props=None, action='navigate_to_pose'): + """Build an ActionSegment stub.""" + props = edge_props if edge_props is not None else {} + return ActionSegment( + action_type=action, + edge_ids=['e1'], + source_nodes=['WP1'], + target_nodes=[target], + edge_data=[{'edge_id': 'e1', 'source': 'WP1', + 'target': target, 'properties': props}], + ) + + def test_no_params_returns_empty(self): + """Segment with no relevant properties -> no parameters set.""" + server = _make_server() + # Use a dict-of-dicts with a nodes accessor (networkx-style) + server._graph = _FakeGraph({'WP2': {'properties': {}, 'name': 'WP2'}}) + server._get_ros_params_sync = lambda names, node=None: {} + server._set_ros_params_async = lambda _d, node=None: None + + seg = self._make_segment() + prev = server._apply_segment_parameters(seg) + assert prev == {} + + def test_node_tolerances_queried_and_set(self): + """xy/yaw goal tolerances from node properties are queried and set.""" + server = _make_server() + server._graph = _FakeGraph({ + 'WP2': { + 'name': 'WP2', + 'properties': { + 'xy_goal_tolerance': 0.1, + 'yaw_goal_tolerance': 0.05, + }, + }, + }) + queried_names = [] + set_calls = [] + + def _fake_get(names, node=None): + queried_names.extend(names) + return {n: 0.5 for n in names} # pretend current value is 0.5 + + server._get_ros_params_sync = _fake_get + server._set_ros_params_async = ( + lambda d, node=None: set_calls.append((node, dict(d))) + ) + + seg = self._make_segment() + prev = server._apply_segment_parameters(seg) + + # Both tolerance param names should have been queried + assert 'goal_checker.xy_goal_tolerance' in queried_names + assert 'goal_checker.yaw_goal_tolerance' in queried_names + + # The returned dict contains the old values (0.5 faked above) + gc = prev['controller_server'] + assert gc.get('goal_checker.xy_goal_tolerance') == 0.5 + assert gc.get('goal_checker.yaw_goal_tolerance') == 0.5 + + # SetParameters was called with new values + assert len(set_calls) == 1 + node, params = set_calls[0] + assert node == 'controller_server' + assert params['goal_checker.xy_goal_tolerance'] == pytest.approx(0.1) + assert params['goal_checker.yaw_goal_tolerance'] == pytest.approx(0.05) + + def test_edge_ros_parameters_queried_and_set(self): + """Edge properties mapped via ros_parameters are queried and applied.""" + server = _make_server() + server._graph = _FakeGraph({}) # no node in graph -> no tolerance params + server._action_clients = { + 'row_traversal': { + 'client': None, + 'action_class': None, + 'config': { + 'ros_parameters': { + 'max_speed': 'FollowPath.max_robot_speed', + }, + }, + }, + } + + queried_names = [] + set_calls = [] + + def _fake_get(names, node=None): + queried_names.extend(names) + return {'FollowPath.max_robot_speed': 1.0} + + server._get_ros_params_sync = _fake_get + server._set_ros_params_async = ( + lambda d, node=None: set_calls.append((node, dict(d))) + ) + + seg = self._make_segment( + target='WP2', + edge_props={'max_speed': 0.3}, + action='row_traversal', + ) + prev = server._apply_segment_parameters(seg) + + assert 'FollowPath.max_robot_speed' in queried_names + assert prev['controller_server'].get( + 'FollowPath.max_robot_speed') == pytest.approx(1.0) + assert set_calls[0][1]['FollowPath.max_robot_speed'] == pytest.approx(0.3) + + def test_action_set_ros_params_applied_to_other_node(self): + """Action-level set_ros_params targets an arbitrary node.""" + server = _make_server() + server._graph = _FakeGraph({}) + server._action_clients = { + 'row_traversal': { + 'config': { + 'set_ros_params': { + 'collision_monitor': { + 'FootprintApproach.enabled': False, + }, + }, + }, + }, + } + set_calls = [] + server._get_ros_params_sync = ( + lambda names, node=None: {n: True for n in names} + ) + server._set_ros_params_async = ( + lambda d, node=None: set_calls.append((node, dict(d))) + ) + + seg = self._make_segment(action='row_traversal') + prev = server._apply_segment_parameters(seg) + + assert set_calls == [ + ('collision_monitor', {'FootprintApproach.enabled': False}), + ] + assert prev == { + 'collision_monitor': {'FootprintApproach.enabled': True}, + } + + def test_edge_set_ros_params_overrides_action_level(self): + """Edge-level set_ros_params wins over the action-level default.""" + server = _make_server() + server._graph = _FakeGraph({}) + server._action_clients = { + 'row_traversal': { + 'config': { + 'set_ros_params': { + 'collision_monitor': { + 'FootprintApproach.enabled': False, + 'polygon_slow.action_type': 'slowdown', + }, + }, + }, + }, + } + set_calls = [] + server._get_ros_params_sync = lambda names, node=None: {} + server._set_ros_params_async = ( + lambda d, node=None: set_calls.append((node, dict(d))) + ) + + seg = self._make_segment( + action='row_traversal', + edge_props={ + 'set_ros_params': [ + { + 'node': '/collision_monitor', + 'param': 'FootprintApproach.enabled', + 'value': True, + }, + ], + }, + ) + server._apply_segment_parameters(seg) + + assert len(set_calls) == 1 + node, params = set_calls[0] + assert node == 'collision_monitor' + assert params['FootprintApproach.enabled'] is True + assert params['polygon_slow.action_type'] == 'slowdown' + + def test_restore_calls_set_with_prev_values(self): + """_restore_segment_parameters sends saved values via SetParameters.""" + server = _make_server() + set_calls = [] + server._set_ros_params_async = ( + lambda d, node=None: set_calls.append((node, dict(d))) + ) + + prev = { + 'controller_server': { + 'goal_checker.xy_goal_tolerance': 0.5, + 'goal_checker.yaw_goal_tolerance': 0.2, + }, + 'collision_monitor': {'FootprintApproach.enabled': True}, + } + server._restore_segment_parameters(prev) + + assert len(set_calls) == 2 + assert dict(set_calls) == prev + + def test_restore_empty_is_noop(self): + """_restore_segment_parameters({}) must not call SetParameters.""" + server = _make_server() + set_calls = [] + server._set_ros_params_async = lambda d, node=None: set_calls.append(d) + + server._restore_segment_parameters({}) + assert set_calls == [] + + def test_get_ros_params_sync_unavailable_service(self): + """_get_ros_params_sync returns {} when service is not ready.""" + server = _make_server() + + class _FakeClient: + def service_is_ready(self): + return False + + server._get_params_client = _FakeClient() + server._set_params_client = _FakeClient() + + result = server._get_ros_params_sync(['some_param']) + assert result == {} + + def test_get_ros_params_sync_empty_names(self): + """_get_ros_params_sync with empty list returns {} immediately.""" + server = _make_server() + # No client needed – should return before touching it + result = server._get_ros_params_sync([]) + assert result == {} + + +# ---------------------------------------------------------------------- +# Dynamic (runtime) parameter callback +# ---------------------------------------------------------------------- +def _param(name, value, ptype): + """Build a parameter double exposing name/value/type_.""" + return SimpleNamespace(name=name, value=value, type_=ptype) + + +def test_parameters_callback_updates_route_algorithm(): + """A valid algorithm change should be applied and accepted.""" + server = _make_server() + result = server._parameters_callback( + [_param('route_algorithm', 'dijkstra', Parameter.Type.STRING)] + ) + assert result.successful is True + assert server._route_algorithm == 'dijkstra' + + +def test_parameters_callback_rejects_unknown_algorithm(): + """An unknown algorithm must be rejected without mutating state.""" + server = _make_server() + server._route_algorithm = 'astar' + result = server._parameters_callback( + [_param('route_algorithm', 'bfs', Parameter.Type.STRING)] + ) + assert result.successful is False + assert server._route_algorithm == 'astar' + + +def test_parameters_callback_rejects_negative_max_dist(): + """A negative origin distance must be rejected.""" + server = _make_server() + result = server._parameters_callback( + [_param('max_dist_to_closest_edge', -1.0, Parameter.Type.DOUBLE)] + ) + assert result.successful is False + + +def test_parameters_callback_rejects_empty_weight_attr(): + """An empty weight attribute name must be rejected.""" + server = _make_server() + result = server._parameters_callback( + [_param('route_weight_attr', '', Parameter.Type.STRING)] + ) + assert result.successful is False + + +def test_parameters_callback_updates_numeric_and_weight_params(): + """Valid numeric/string updates should all be applied.""" + server = _make_server() + result = server._parameters_callback([ + _param('max_dist_to_closest_edge', 2.5, Parameter.Type.DOUBLE), + _param('coarse_white_extension_m', 4.7, Parameter.Type.DOUBLE), + _param('route_white_extension_m', 2.8, Parameter.Type.DOUBLE), + _param('route_weight_attr', 'cost', Parameter.Type.STRING), + ]) + assert result.successful is True + assert server._max_dist_to_closest_edge == 2.5 + assert server._coarse_white_extension_m == 4.7 + assert server._route_white_extension_m == 2.8 + assert server._route_weight == 'cost' + + +def test_parameters_callback_updates_metric_map_parameters(): + """Metric map generation parameters should accept valid updates.""" + server = _make_server() + result = server._parameters_callback([ + _param('metric_map_resolution', 1.0, Parameter.Type.DOUBLE), + _param('route_segment_resolution', 0.05, Parameter.Type.DOUBLE), + _param('route_segment_border_width', 0.3, Parameter.Type.DOUBLE), + _param('route_segment_padding', 0.2, Parameter.Type.DOUBLE), + ]) + assert result.successful is True + assert server._metric_map_resolution == 1.0 + assert server._route_segment_resolution == 0.05 + assert server._route_segment_border_width == 0.3 + assert server._route_segment_padding == 0.2 + + +def test_parameters_callback_rejects_invalid_metric_map_values(): + """Invalid metric map values should be rejected.""" + server = _make_server() + + result = server._parameters_callback([ + _param('metric_map_resolution', 0.0, Parameter.Type.DOUBLE), + ]) + assert result.successful is False + + result = server._parameters_callback([ + _param('route_segment_resolution', -0.1, Parameter.Type.DOUBLE), + ]) + assert result.successful is False + + result = server._parameters_callback([ + _param('route_segment_border_width', -0.1, Parameter.Type.DOUBLE), + ]) + assert result.successful is False + + result = server._parameters_callback([ + _param('route_segment_padding', -0.1, Parameter.Type.DOUBLE), + ]) + assert result.successful is False + + result = server._parameters_callback([ + _param('coarse_white_extension_m', -0.1, Parameter.Type.DOUBLE), + ]) + assert result.successful is False + + result = server._parameters_callback([ + _param('route_white_extension_m', -0.1, Parameter.Type.DOUBLE), + ]) + assert result.successful is False + + +@pytest.mark.parametrize( + ('robot_position', 'expected_route_start', 'expected_publish_count'), + [ + ((3.5, -1.25), (3.5, -1.25), 1), + ((5.0, -1.25), None, 0), + ], +) +def test_route_segment_map_validates_robot_position( + monkeypatch, robot_position, expected_route_start, expected_publish_count, +): + """Do not create a local metric map when the robot is outside.""" + server = _make_server() + server._global_metric_map_bounds = (0.0, -2.0, 5.0, 2.0) + server._global_metric_map = SimpleNamespace( + info=SimpleNamespace( + resolution=1.0, + width=5, + height=4, + origin=SimpleNamespace( + position=SimpleNamespace(x=0.0, y=-2.0), + ), + ), + data=[0] * 20, + ) + server._route_white_extension_m = 2.0 + server._route_segment_border_width = 0.25 + server._route_segment_resolution = 0.05 + server._route_segment_padding = 0.0 + server._base_frame = 'base_link' + server._publish_status = lambda *_args, **_kwargs: None + del server._ensure_robot_within_main_map + del server._publish_route_segment_metric_map + server._raster_to_occupancy_grid = lambda raster, frame: (raster, frame) + + server._robot_position_in_frame = ( + lambda frame_id: robot_position + ) + published = [] + server._route_segment_map_pub = SimpleNamespace( + publish=lambda msg: published.append(msg), + ) + + geometry = SimpleNamespace(frame_id='map') + raster = SimpleNamespace( + image=SimpleNamespace(width=10, height=20), + resolution=0.05, + ) + captured = {} + monkeypatch.setattr( + navigation2_module, + 'geometry_from_tmap', + lambda tmap, apply_transform: geometry, + ) + monkeypatch.setattr( + navigation2_module, + 'route_specs_from_edge_data', + lambda edges, default_left_m, default_right_m: ('spec',), + ) + + def _capture_rasterize(_geometry, _specs, **kwargs): + captured.update(kwargs) + return raster + + monkeypatch.setattr( + navigation2_module, + 'rasterize_route_geometry', + _capture_rasterize, + ) + + server._publish_route_segment_metric_map([{'source': 'A', 'target': 'B'}]) + + assert captured.get('route_start') == expected_route_start + assert len(published) == expected_publish_count + + +def test_navigate_outside_main_map_does_not_plan_or_publish(monkeypatch): + """An outside robot must be rejected before route planning starts.""" + server = _make_server() + server._ensure_robot_within_main_map = lambda: False + server._determine_origin = lambda target: 'WP1' + server._publish_route_segment_metric_map = lambda edges: pytest.fail( + 'local metric map must not be created', + ) + monkeypatch.setattr( + navigation2_module, + 'plan_route', + lambda *args, **kwargs: pytest.fail('route must not be planned'), + ) + + result = TopologicalNavServer._navigate(server, 'WP2') + + assert result is False + assert NavState.FAILED in server._sm.transitions + + +def test_outside_main_map_publishes_explicit_status(): + """The operator-facing status should identify the containment failure.""" + server = _make_server() + del server._ensure_robot_within_main_map + server._global_metric_map_bounds = (0.0, -2.0, 5.0, 2.0) + server._global_metric_map = SimpleNamespace( + info=SimpleNamespace( + resolution=1.0, + width=5, + height=4, + origin=SimpleNamespace( + position=SimpleNamespace(x=0.0, y=-2.0), + ), + ), + data=[0] * 20, + ) + statuses = [] + server._publish_status = statuses.append + + result = server._ensure_robot_within_main_map('map', (5.0, 0.0)) + + assert result is False + assert statuses == ['OUTSIDE_MAIN_MAP'] + + +@pytest.mark.parametrize('occupancy', [-1, 100]) +def test_unknown_or_occupied_main_map_cell_is_outside(occupancy): + """Only a known-free coarse-map cell can authorize navigation.""" + server = _make_server() + server._global_metric_map = SimpleNamespace( + info=SimpleNamespace( + resolution=1.0, + width=2, + height=2, + origin=SimpleNamespace( + position=SimpleNamespace(x=0.0, y=0.0), + ), + ), + data=[occupancy, 0, 0, 0], + ) + + assert server._position_within_global_metric_map((0.5, 0.5)) is False + assert server._position_within_global_metric_map((1.5, 0.5)) is True + + +def test_policy_outside_main_map_does_not_create_local_map(): + """A supplied policy route is also rejected when the robot is outside.""" + server = _make_server() + server._ensure_robot_within_main_map = lambda: False + server._publish_route_segment_metric_map = lambda edges: pytest.fail( + 'local metric map must not be created', + ) + server._execute_route = lambda *args: pytest.fail( + 'route must not be executed', + ) + route = SimpleNamespace(source=['WP1'], edge_id=['WP1_WP2']) + goal_handle = _FakePolicyGoalHandle(route) + + result = server._exec_policy_cb(goal_handle) + + assert result.success is False + assert goal_handle.final_state == 'aborted' + + +def _make_segment_graph(nodes): + """Build a real DiGraph with x positions, one edge per consecutive node.""" + graph = nx.DiGraph() + for i, node in enumerate(nodes): + graph.add_node(node, x=float(i), y=0.0) + for u, v in zip(nodes, nodes[1:]): + graph.add_edge(u, v, weight=1.0) + return graph + + +def _make_stats_server(nodes, current_node): + """Server double wired up for ``_log_segment_edges``/``_execute_segment`` tests.""" + server = _make_server() + server._graph = _make_segment_graph(nodes) + server._current_node = current_node + server._map_hash = 'test-hash' + server._stat = None + server._pending_segment = None + server._published = [] + server._publish_stats = lambda: server._published.append(server._stat) + return server + + +def _make_test_segment(nodes, edge_ids): + return ActionSegment( + action_type='NavigateToPose', + edge_ids=list(edge_ids), + source_nodes=list(nodes[:-1]), + target_nodes=list(nodes[1:]), + edge_data=[{} for _ in edge_ids], + ) + + +def test_log_segment_edges_success_logs_every_edge(): + """A fully successful segment gets one 'success' row per edge.""" + nodes = ['WP1', 'WP2', 'WP3', 'WP4'] + server = _make_stats_server(nodes, current_node='WP4') + segment = _make_test_segment(nodes, ['e12', 'e23', 'e34']) + start, end = datetime.now(), datetime.now() + + server._log_segment_edges(segment, True, 'none', start, end) + + assert [s.edge_id for s in server._published] == ['e12', 'e23', 'e34'] + assert all(s.status == 'success' for s in server._published) + assert all(s.is_segment for s in server._published) + assert all(s.segment_edge_ids == ['e12', 'e23', 'e34'] for s in server._published) + + +def test_log_segment_edges_partial_failure_leaves_remaining_edges_unlogged(): + """Completed edges are logged success, the failing edge failed, the rest absent.""" + nodes = ['WP1', 'WP2', 'WP3', 'WP4', 'WP5'] + # Robot got as far as WP2 (1 completed edge) before the segment failed. + server = _make_stats_server(nodes, current_node='WP2') + segment = _make_test_segment(nodes, ['e12', 'e23', 'e34', 'e45']) + start, end = datetime.now(), datetime.now() + + server._log_segment_edges(segment, False, 'aborted_by_costmap', start, end) + + assert [s.edge_id for s in server._published] == ['e12', 'e23'] + assert server._published[0].status == 'success' + assert server._published[1].status == 'failed' + assert server._published[1].failure_reason == 'aborted_by_costmap' + + +def test_log_segment_edges_cancelled_marks_boundary_edge_aborted(): + """A cancelled segment marks the in-flight edge 'aborted', not 'failed'.""" + nodes = ['WP1', 'WP2', 'WP3'] + server = _make_stats_server(nodes, current_node='WP1') + segment = _make_test_segment(nodes, ['e12', 'e23']) + start, end = datetime.now(), datetime.now() + + server._log_segment_edges(segment, False, 'cancelled', start, end) + + assert len(server._published) == 1 + assert server._published[0].edge_id == 'e12' + assert server._published[0].status == 'aborted' + + +def test_execute_segment_exception_logs_failure_and_returns_false(): + """An unhandled exception mid-goal still yields a DB row, not a crash.""" + nodes = ['WP1', 'WP2'] + server = _make_stats_server(nodes, current_node='WP1') + segment = _make_test_segment(nodes, ['e12']) + segment.edge_data = [{'source': 'WP1', 'target': 'WP2', 'edge_id': 'e12'}] + server._tmap = { + 'nodes': [{'node': {'name': 'WP1', 'edges': [ + {'edge_id': 'e12', 'node': 'WP2'}, + ]}}], + } + server._topol_map = 'test_map' + server._action_clients = {'NavigateToPose': {'client': object()}} + server._apply_segment_parameters = lambda _seg: {} + server._restore_segment_parameters = lambda _prev: None + server._build_segment_goal = lambda _seg, _is_final: object() + server._publish_current_edge = lambda *_a, **_kw: None + server._publish_segment_boundary = lambda *_a, **_kw: None + server._goal_reached = False + status_events = [] + server._publish_move_status = lambda *args: status_events.append( + ('status', args), + ) + + def _raise(*_a, **_kw): + status_events.append(('dispatch', None)) + raise RuntimeError('nav2 client exploded') + + server._send_nav2_goal = _raise + + result = server._execute_segment(segment, True, 0, 1) + + assert result is False + assert server._pending_segment is None + assert status_events == [ + ('status', ('WP2', 'NavigateToPose', 'EXECUTING')), + ('dispatch', None), + ] + assert len(server._published) == 1 + assert server._published[0].status == 'failed' + assert 'nav2 client exploded' in server._published[0].failure_reason + + +def test_on_shutdown_flushes_pending_segment(): + """A segment still in flight at shutdown is logged instead of dropped.""" + nodes = ['WP1', 'WP2'] + server = _make_stats_server(nodes, current_node='WP1') + segment = _make_test_segment(nodes, ['e12']) + server._pending_segment = (segment, datetime.now()) + server._navigation_activated = False + server._stats_db = None + + server._on_shutdown() + + assert server._pending_segment is None + assert len(server._published) == 1 + assert server._published[0].status == 'failed' + assert server._published[0].failure_reason == 'shutdown' diff --git a/topological_navigation/test/test_navigation_graph.py b/topological_navigation/test/test_navigation_graph.py new file mode 100644 index 00000000..fd5c3ce6 --- /dev/null +++ b/topological_navigation/test/test_navigation_graph.py @@ -0,0 +1,809 @@ +"""Tests for ``navigation_graph.py``. + +Covers the pure-Python navigation-graph module: +- NavStateMachine transitions (valid and invalid) +- plan_route (A* via NetworkX) +- get_route_edges +- merge_action_segments +- compute_boundary_polygon +- get_route_distance +- ActionSegment dataclass +""" + +import math +import os + +import networkx as nx +import pytest +import yaml + +from topological_navigation.navigation_graph import ( + ACTION_TO_STATE, + ActionSegment, + NavState, + NavStateMachine, + VALID_TRANSITIONS, + _edge_params, + compute_boundary_polygon, + get_route_distance, + get_route_edges, + merge_action_segments, + plan_route, +) +from topological_navigation.networkx_utils import build_graph_from_tmap + + +# ===================================================================== +# Fixtures +# ===================================================================== + + +def _make_node(name, x, y, z=0.0, verts=None, props=None): + """Tiny helper to build a graph node attribute dict.""" + return dict( + x=float(x), y=float(y), z=float(z), + name=name, parent_frame='map', + orientation={'x': 0.0, 'y': 0.0, 'z': 0.0, 'w': 1.0}, + verts=verts or [], properties=props or {}, + ) + + +@pytest.fixture +def simple_graph(): + """Linear graph: A -> B -> C -> D. + + A(0,0) --[Nav]--> B(2,0) --[Row]--> C(4,0) --[Row]--> D(6,0) + """ + G = nx.DiGraph() + G.add_node('A', **_make_node('A', 0, 0)) + G.add_node('B', **_make_node('B', 2, 0)) + G.add_node('C', **_make_node('C', 4, 0)) + G.add_node('D', **_make_node('D', 6, 0)) + + G.add_edge('A', 'B', edge_id='A_B', + action='NavigateToPose', + action_type='nav2_msgs/action/NavigateToPose', + properties={}, weight=1.0) + G.add_edge('B', 'C', edge_id='B_C', + action='row_traversal', + action_type='nav2_msgs/action/NavigateToPose', + properties={'boundary_left': 0.3, 'boundary_right': 0.4}, + weight=1.0) + G.add_edge('C', 'D', edge_id='C_D', + action='row_traversal', + action_type='nav2_msgs/action/NavigateToPose', + properties={'boundary_left': 0.3, 'boundary_right': 0.4}, + weight=1.0) + return G + + +@pytest.fixture +def mixed_graph(): + """Graph with all three action types. + + N1 -[Nav]-> N2 -[Nav]-> N3 -[Row]-> N4 -[Row]-> N5 -[Align]-> N6 + """ + G = nx.DiGraph() + positions = { + 'N1': (0, 0), 'N2': (2, 0), 'N3': (4, 0), + 'N4': (6, 0), 'N5': (8, 0), 'N6': (10, 0), + } + for name, (x, y) in positions.items(): + G.add_node(name, **_make_node(name, x, y)) + + edges = [ + ('N1', 'N2', 'NavigateToPose'), + ('N2', 'N3', 'NavigateToPose'), + ('N3', 'N4', 'row_traversal'), + ('N4', 'N5', 'row_traversal'), + ('N5', 'N6', 'goal_align'), + ] + for src, tgt, action in edges: + G.add_edge(src, tgt, + edge_id='%s_%s' % (src, tgt), + action=action, + action_type='nav2_msgs/action/NavigateToPose', + properties={}, weight=1.0) + return G + + +@pytest.fixture +def mixed_actions_tmap(): + """Load the mixed_actions_map.yaml fixture as a dict.""" + here = os.path.dirname(__file__) + path = os.path.join(here, 'fixtures', 'mixed_actions_map.yaml') + with open(path, 'r') as f: + return yaml.safe_load(f) + + +# ===================================================================== +# NavStateMachine tests +# ===================================================================== + + +class TestNavStateMachine: + """Validate state machine transitions.""" + + def test_initial_state_is_idle(self): + sm = NavStateMachine() + assert sm.state == NavState.IDLE + + def test_valid_startup_sequence(self): + sm = NavStateMachine() + assert sm.transition(NavState.WAITING_FOR_MAP) + assert sm.transition(NavState.WAITING_FOR_LOCALISATION) + assert sm.transition(NavState.READY) + assert sm.state == NavState.READY + + def test_planning_to_executing(self): + sm = NavStateMachine() + sm.transition(NavState.WAITING_FOR_MAP) + sm.transition(NavState.WAITING_FOR_LOCALISATION) + sm.transition(NavState.READY) + assert sm.transition(NavState.PLANNING) + assert sm.transition(NavState.EXECUTING_NAVIGATE_TO_POSE) + assert sm.is_executing() + assert not sm.is_terminal() + + def test_execute_to_succeed_to_ready(self): + sm = NavStateMachine() + sm.transition(NavState.WAITING_FOR_MAP) + sm.transition(NavState.WAITING_FOR_LOCALISATION) + sm.transition(NavState.READY) + sm.transition(NavState.PLANNING) + sm.transition(NavState.EXECUTING_NAVIGATE_TO_POSE) + assert sm.transition(NavState.SUCCEEDED) + assert sm.is_terminal() + assert sm.reset() + assert sm.state == NavState.READY + + def test_execute_to_failed(self): + sm = NavStateMachine() + sm.transition(NavState.WAITING_FOR_MAP) + sm.transition(NavState.WAITING_FOR_LOCALISATION) + sm.transition(NavState.READY) + sm.transition(NavState.PLANNING) + sm.transition(NavState.EXECUTING_ROW_TRAVERSAL) + assert sm.transition(NavState.FAILED) + assert sm.is_terminal() + + def test_execute_to_cancelled(self): + sm = NavStateMachine() + sm.transition(NavState.WAITING_FOR_MAP) + sm.transition(NavState.WAITING_FOR_LOCALISATION) + sm.transition(NavState.READY) + sm.transition(NavState.PLANNING) + sm.transition(NavState.EXECUTING_GOAL_ALIGN) + assert sm.transition(NavState.CANCELLED) + assert sm.is_terminal() + + def test_execute_to_different_execute(self): + """Can transition directly between executing states (recovery/segment switch).""" + sm = NavStateMachine() + sm.transition(NavState.WAITING_FOR_MAP) + sm.transition(NavState.WAITING_FOR_LOCALISATION) + sm.transition(NavState.READY) + sm.transition(NavState.PLANNING) + sm.transition(NavState.EXECUTING_ROW_TRAVERSAL) + assert sm.transition(NavState.EXECUTING_NAVIGATE_TO_POSE) + + def test_invalid_transition_returns_false(self): + sm = NavStateMachine() + # IDLE -> READY is invalid (must go via WAITING_FOR_*) + assert not sm.transition(NavState.READY) + assert sm.state == NavState.IDLE + + def test_invalid_skip_waiting(self): + sm = NavStateMachine() + sm.transition(NavState.WAITING_FOR_MAP) + # Cannot skip WAITING_FOR_LOCALISATION + assert not sm.transition(NavState.READY) + + def test_switch_between_executing_states(self): + """Can move directly between executing states (segment switch).""" + sm = NavStateMachine() + sm.transition(NavState.WAITING_FOR_MAP) + sm.transition(NavState.WAITING_FOR_LOCALISATION) + sm.transition(NavState.READY) + sm.transition(NavState.PLANNING) + sm.transition(NavState.EXECUTING_NAVIGATE_TO_POSE) + assert sm.transition(NavState.EXECUTING_ROW_TRAVERSAL) + assert sm.transition(NavState.EXECUTING_GOAL_ALIGN) + assert sm.transition(NavState.EXECUTING_NAVIGATE_TO_POSE) + + def test_all_action_to_state_mappings_exist(self): + for action, state in ACTION_TO_STATE.items(): + assert isinstance(state, NavState) + assert 'EXECUTING' in state.value + + def test_all_states_have_transitions_defined(self): + for state in NavState: + assert state in VALID_TRANSITIONS + + +# ===================================================================== +# plan_route tests +# ===================================================================== + + +class TestPlanRoute: + """Route planning via NetworkX A*.""" + + def test_direct_route(self, simple_graph): + route = plan_route(simple_graph, 'A', 'D') + assert route == ['A', 'B', 'C', 'D'] + + def test_partial_route(self, simple_graph): + route = plan_route(simple_graph, 'B', 'D') + assert route == ['B', 'C', 'D'] + + def test_same_origin_target(self, simple_graph): + route = plan_route(simple_graph, 'A', 'A') + assert route == ['A'] + + def test_no_route_reverse(self, simple_graph): + """No backward edges -> no route D to A.""" + route = plan_route(simple_graph, 'D', 'A') + assert route is None + + def test_unknown_origin(self, simple_graph): + route = plan_route(simple_graph, 'X', 'D') + assert route is None + + def test_unknown_target(self, simple_graph): + route = plan_route(simple_graph, 'A', 'X') + assert route is None + + def test_avoid_edges(self, simple_graph): + """With A->B avoided, add alternative A->C to enable a bypass.""" + simple_graph.add_edge('A', 'C', edge_id='A_C', + action='NavigateToPose', properties={}, + weight=10.0) + route = plan_route(simple_graph, 'A', 'D', avoid_edges=['A_B']) + assert route is not None + assert route[0] == 'A' + # Must bypass B via the new A->C edge + assert 'C' in route + + def test_avoid_all_paths(self, simple_graph): + """If the only path's edges are all avoided, return None.""" + route = plan_route( + simple_graph, 'A', 'D', + avoid_edges=['A_B'], + ) + assert route is None + + def test_weighted_preference(self): + """A* should prefer the cheaper route.""" + G = nx.DiGraph() + G.add_node('S', **_make_node('S', 0, 0)) + G.add_node('M', **_make_node('M', 5, 0)) + G.add_node('T', **_make_node('T', 10, 0)) + G.add_node('D', **_make_node('D', 5, 5)) + G.add_edge('S', 'M', edge_id='SM', action='NavigateToPose', + properties={}, weight=1.0) + G.add_edge('M', 'T', edge_id='MT', action='NavigateToPose', + properties={}, weight=1.0) + G.add_edge('S', 'D', edge_id='SD', action='NavigateToPose', + properties={}, weight=100.0) + G.add_edge('D', 'T', edge_id='DT', action='NavigateToPose', + properties={}, weight=100.0) + route = plan_route(G, 'S', 'T') + assert route == ['S', 'M', 'T'] + + +# ===================================================================== +# get_route_edges tests +# ===================================================================== + + +class TestGetRouteEdges: + """Extract edge data from route node list.""" + + def test_full_route(self, simple_graph): + edges = get_route_edges(simple_graph, ['A', 'B', 'C', 'D']) + assert len(edges) == 3 + assert edges[0]['edge_id'] == 'A_B' + assert edges[0]['source'] == 'A' + assert edges[0]['target'] == 'B' + assert edges[2]['edge_id'] == 'C_D' + + def test_single_edge(self, simple_graph): + edges = get_route_edges(simple_graph, ['A', 'B']) + assert len(edges) == 1 + assert edges[0]['action'] == 'NavigateToPose' + + def test_empty_route(self, simple_graph): + assert get_route_edges(simple_graph, []) == [] + + def test_single_node(self, simple_graph): + assert get_route_edges(simple_graph, ['A']) == [] + + def test_actions_preserved(self, simple_graph): + edges = get_route_edges(simple_graph, ['A', 'B', 'C']) + assert edges[0]['action'] == 'NavigateToPose' + assert edges[1]['action'] == 'row_traversal' + + +# ===================================================================== +# merge_action_segments tests +# ===================================================================== + + +class TestMergeActionSegments: + """Merge consecutive same-action edges into segments.""" + + def test_mixed_actions(self, mixed_graph): + route = ['N1', 'N2', 'N3', 'N4', 'N5', 'N6'] + edges = get_route_edges(mixed_graph, route) + segments = merge_action_segments(edges) + + assert len(segments) == 3 + + # NavigateToPose x2 + assert segments[0].action_type == 'NavigateToPose' + assert segments[0].num_edges == 2 + assert segments[0].first_source == 'N1' + assert segments[0].last_target == 'N3' + + # row_traversal x2 + assert segments[1].action_type == 'row_traversal' + assert segments[1].num_edges == 2 + assert segments[1].first_source == 'N3' + assert segments[1].last_target == 'N5' + + # goal_align x1 + assert segments[2].action_type == 'goal_align' + assert segments[2].num_edges == 1 + assert segments[2].first_source == 'N5' + assert segments[2].last_target == 'N6' + + def test_single_action_type(self, simple_graph): + edges = get_route_edges(simple_graph, ['B', 'C', 'D']) + segments = merge_action_segments(edges) + assert len(segments) == 1 + assert segments[0].action_type == 'row_traversal' + assert segments[0].num_edges == 2 + + def test_empty_edges(self): + assert merge_action_segments([]) == [] + + def test_alternating_never_merges(self): + edges = [ + {'edge_id': 'e1', 'source': 'A', 'target': 'B', + 'action': 'NavigateToPose', 'properties': {}}, + {'edge_id': 'e2', 'source': 'B', 'target': 'C', + 'action': 'row_traversal', 'properties': {}}, + {'edge_id': 'e3', 'source': 'C', 'target': 'D', + 'action': 'NavigateToPose', 'properties': {}}, + ] + segments = merge_action_segments(edges) + assert len(segments) == 3 + assert all(s.num_edges == 1 for s in segments) + + def test_all_same_type_single_segment(self): + edges = [ + {'edge_id': 'e%d' % i, 'source': 'n%d' % i, + 'target': 'n%d' % (i + 1), 'action': 'goal_align', + 'properties': {}} + for i in range(5) + ] + segments = merge_action_segments(edges) + assert len(segments) == 1 + assert segments[0].num_edges == 5 + + def test_edge_ids_preserved(self, mixed_graph): + edges = get_route_edges(mixed_graph, ['N1', 'N2', 'N3']) + segments = merge_action_segments(edges) + assert segments[0].edge_ids == ['N1_N2', 'N2_N3'] + + +# ===================================================================== +# merge_action_segments – property-consistency splitting tests +# ===================================================================== + + +class TestMergeActionSegmentsPropertySplitting: + """Consecutive same-action edges with differing properties must split.""" + + def _make_edge(self, src, tgt, action, props): + return { + 'edge_id': '%s_%s' % (src, tgt), + 'source': src, + 'target': tgt, + 'action': action, + 'properties': props, + } + + def test_same_props_merge(self): + """Identical properties -> single segment.""" + edges = [ + self._make_edge('A', 'B', 'row_traversal', {'speed': 0.5}), + self._make_edge('B', 'C', 'row_traversal', {'speed': 0.5}), + ] + segments = merge_action_segments(edges) + assert len(segments) == 1 + assert segments[0].num_edges == 2 + + def test_different_props_split(self): + """Different properties -> two segments, even with same action.""" + edges = [ + self._make_edge('A', 'B', 'row_traversal', {'speed': 0.5}), + self._make_edge('B', 'C', 'row_traversal', {'speed': 0.3}), + ] + segments = merge_action_segments(edges) + assert len(segments) == 2 + assert segments[0].num_edges == 1 + assert segments[1].num_edges == 1 + assert segments[0].parameters == {'speed': 0.5} + assert segments[1].parameters == {'speed': 0.3} + + def test_absent_vs_empty_props_merge(self): + """Absent and empty-dict properties are both normalised to {}.""" + edges = [ + {'edge_id': 'e1', 'source': 'A', 'target': 'B', + 'action': 'row_traversal'}, # no 'properties' key + {'edge_id': 'e2', 'source': 'B', 'target': 'C', + 'action': 'row_traversal', 'properties': {}}, # explicit empty + ] + segments = merge_action_segments(edges) + assert len(segments) == 1, ( + "Absent and empty properties should be treated as identical" + ) + + def test_none_props_treated_as_empty(self): + """None properties are normalised to {} and match explicit {}.""" + edges = [ + {'edge_id': 'e1', 'source': 'A', 'target': 'B', + 'action': 'row_traversal', 'properties': None}, + {'edge_id': 'e2', 'source': 'B', 'target': 'C', + 'action': 'row_traversal', 'properties': {}}, + ] + segments = merge_action_segments(edges) + assert len(segments) == 1 + + def test_three_way_split(self): + """Three consecutive edges with three different property sets.""" + edges = [ + self._make_edge('A', 'B', 'row_traversal', {'speed': 0.5}), + self._make_edge('B', 'C', 'row_traversal', {'speed': 0.3}), + self._make_edge('C', 'D', 'row_traversal', {'speed': 0.1}), + ] + segments = merge_action_segments(edges) + assert len(segments) == 3 + assert [s.parameters['speed'] for s in segments] == [0.5, 0.3, 0.1] + + def test_partial_split_then_merge(self): + """A-B-C all have speed 0.5, D has speed 0.3, E has speed 0.5 again.""" + edges = [ + self._make_edge('A', 'B', 'row_traversal', {'speed': 0.5}), + self._make_edge('B', 'C', 'row_traversal', {'speed': 0.5}), + self._make_edge('C', 'D', 'row_traversal', {'speed': 0.3}), + self._make_edge('D', 'E', 'row_traversal', {'speed': 0.5}), + ] + segments = merge_action_segments(edges) + # A->B->C merged, then C->D separate, then D->E separate + assert len(segments) == 3 + assert segments[0].num_edges == 2 + assert segments[1].num_edges == 1 + assert segments[2].num_edges == 1 + + def test_action_type_change_still_splits(self): + """Action type change splits even when properties are the same.""" + edges = [ + self._make_edge('A', 'B', 'row_traversal', {'speed': 0.5}), + self._make_edge('B', 'C', 'navigate_to_pose', {'speed': 0.5}), + ] + segments = merge_action_segments(edges) + assert len(segments) == 2 + + def test_empty_and_nonempty_props_merge(self): + """Empty ({}) properties are transparent and merge with non-empty.""" + edges = [ + self._make_edge('A', 'B', 'row_traversal', {}), + self._make_edge('B', 'C', 'row_traversal', {'speed': 0.5}), + ] + segments = merge_action_segments(edges) + assert len(segments) == 1 + assert segments[0].parameters == {'speed': 0.5} + + def test_nonempty_then_empty_props_merge(self): + """Non-empty followed by empty merges; parameters come from non-empty edge.""" + edges = [ + self._make_edge('A', 'B', 'row_traversal', {'speed': 0.5}), + self._make_edge('B', 'C', 'row_traversal', {}), + ] + segments = merge_action_segments(edges) + assert len(segments) == 1 + assert segments[0].parameters == {'speed': 0.5} + + def test_empty_between_same_nonempty_merge(self): + """Empty edge between two edges with the same non-empty params stays one segment.""" + edges = [ + self._make_edge('A', 'B', 'row_traversal', {'speed': 0.5}), + self._make_edge('B', 'C', 'row_traversal', {}), + self._make_edge('C', 'D', 'row_traversal', {'speed': 0.5}), + ] + segments = merge_action_segments(edges) + assert len(segments) == 1 + assert segments[0].parameters == {'speed': 0.5} + + def test_empty_between_different_nonempty_split(self): + """Empty edge between two edges with different non-empty params still splits.""" + edges = [ + self._make_edge('A', 'B', 'row_traversal', {'speed': 0.5}), + self._make_edge('B', 'C', 'row_traversal', {}), + self._make_edge('C', 'D', 'row_traversal', {'speed': 0.3}), + ] + segments = merge_action_segments(edges) + assert len(segments) == 2 + assert segments[0].parameters == {'speed': 0.5} + assert segments[1].parameters == {'speed': 0.3} + + +# ===================================================================== +# _edge_params helper tests +# ===================================================================== + + +class TestEdgeParams: + """Unit tests for the _edge_params normalisation helper.""" + + def test_returns_properties(self): + edge = {'properties': {'a': 1}} + assert _edge_params(edge) == {'a': 1} + + def test_absent_key_returns_empty(self): + assert _edge_params({}) == {} + + def test_none_value_returns_empty(self): + assert _edge_params({'properties': None}) == {} + + def test_empty_dict_returns_empty(self): + assert _edge_params({'properties': {}}) == {} + + +# ===================================================================== +# compute_boundary_polygon tests +# ===================================================================== + + +class TestComputeRowBoundary: + """Compute corridor polygons for RowTraversal segments.""" + + def test_single_edge_horizontal(self, simple_graph): + """B(2,0) -> C(4,0): horizontal edge, polygon should be a + rectangle centred along the x-axis.""" + edges = get_route_edges(simple_graph, ['B', 'C']) + segments = merge_action_segments(edges) + assert len(segments) == 1 + + poly = compute_boundary_polygon( + simple_graph, segments[0], + default_left=0.5, default_right=0.5, + ) + # Rectangle: 2 left + 2 right = 4 points + assert len(poly) == 4 + + # Left points (first half) should be above y=0 + left_y = [p[1] for p in poly[:2]] + assert all(y > 0 for y in left_y) + + # Right points (second half) should be below y=0 + right_y = [p[1] for p in poly[2:]] + assert all(y < 0 for y in right_y) + + def test_custom_distances_from_properties(self, simple_graph): + """B->C edge has boundary_left=0.3, boundary_right=0.4.""" + edges = get_route_edges(simple_graph, ['B', 'C']) + segments = merge_action_segments(edges) + + poly = compute_boundary_polygon(simple_graph, segments[0]) + + # Left offset should be 0.3 (y = +0.3 for horizontal edge) + assert abs(poly[0][1] - 0.3) < 0.01 + # Right offset should be -0.4 + assert abs(poly[3][1] + 0.4) < 0.01 + + def test_merged_edges_more_points(self, simple_graph): + """B->C->D: two edges merged -> 3 waypoints -> 6 points.""" + edges = get_route_edges(simple_graph, ['B', 'C', 'D']) + segments = merge_action_segments(edges) + + poly = compute_boundary_polygon( + simple_graph, segments[0], + default_left=0.5, default_right=0.5, + ) + assert len(poly) == 6 + + def test_empty_segment_returns_empty(self, simple_graph): + segment = ActionSegment(action_type='row_traversal') + poly = compute_boundary_polygon(simple_graph, segment) + assert poly == [] + + def test_polygon_is_closed_corridor(self, simple_graph): + """All left points should be on one side, right on the other.""" + edges = get_route_edges(simple_graph, ['B', 'C', 'D']) + segments = merge_action_segments(edges) + poly = compute_boundary_polygon( + simple_graph, segments[0], + default_left=1.0, default_right=1.0, + ) + # For horizontal edges, left = positive y, right = negative y + n_wp = 3 # three waypoints + left_pts = poly[:n_wp] + right_pts = poly[n_wp:] + assert all(p[1] > 0 for p in left_pts) + assert all(p[1] < 0 for p in right_pts) + + def test_diagonal_edge(self): + """45-degree edge: verify perpendicular offset direction.""" + G = nx.DiGraph() + G.add_node('P', **_make_node('P', 0, 0)) + G.add_node('Q', **_make_node('Q', 1, 1)) + G.add_edge('P', 'Q', edge_id='PQ', action='row_traversal', + properties={}, weight=1.0) + + edges = get_route_edges(G, ['P', 'Q']) + segments = merge_action_segments(edges) + poly = compute_boundary_polygon( + G, segments[0], default_left=1.0, default_right=1.0, + ) + assert len(poly) == 4 + + # Verify the width: distance from left to right at each + # waypoint should be left_dist + right_dist = 2.0 + for i in range(2): + lx, ly = poly[i] + rx, ry = poly[3 - i] + dist = math.hypot(rx - lx, ry - ly) + assert abs(dist - 2.0) < 0.01 + + +# ===================================================================== +# get_route_distance tests +# ===================================================================== + + +class TestGetRouteDistance: + """Total Euclidean distance along a route.""" + + def test_full_route(self, simple_graph): + dist = get_route_distance(simple_graph, ['A', 'B', 'C', 'D']) + assert abs(dist - 6.0) < 0.01 # 2 + 2 + 2 + + def test_single_edge(self, simple_graph): + dist = get_route_distance(simple_graph, ['A', 'B']) + assert abs(dist - 2.0) < 0.01 + + def test_single_node(self, simple_graph): + assert get_route_distance(simple_graph, ['A']) == 0.0 + + def test_empty_route(self, simple_graph): + assert get_route_distance(simple_graph, []) == 0.0 + + +# ===================================================================== +# ActionSegment dataclass tests +# ===================================================================== + + +class TestActionSegment: + """Properties and edge case handling.""" + + def test_empty_segment(self): + seg = ActionSegment(action_type='NavigateToPose') + assert seg.is_empty + assert seg.first_source is None + assert seg.last_target is None + assert seg.num_edges == 0 + + def test_populated_segment(self): + seg = ActionSegment( + action_type='row_traversal', + edge_ids=['e1', 'e2'], + source_nodes=['A', 'B'], + target_nodes=['B', 'C'], + edge_data=[{'edge_id': 'e1'}, {'edge_id': 'e2'}], + ) + assert not seg.is_empty + assert seg.first_source == 'A' + assert seg.last_target == 'C' + assert seg.num_edges == 2 + + # ------------------------------------------------------------------ + # ActionSegment.parameters tests + # ------------------------------------------------------------------ + + def test_parameters_empty_segment(self): + """Empty segment has no parameters.""" + seg = ActionSegment(action_type='row_traversal') + assert seg.parameters == {} + + def test_parameters_from_first_edge(self): + """parameters returns the first edge's properties dict.""" + seg = ActionSegment( + action_type='row_traversal', + edge_ids=['e1', 'e2'], + source_nodes=['A', 'B'], + target_nodes=['B', 'C'], + edge_data=[ + {'edge_id': 'e1', 'properties': {'speed': 0.5, 'zone': 'row'}}, + {'edge_id': 'e2', 'properties': {'speed': 0.5, 'zone': 'row'}}, + ], + ) + assert seg.parameters == {'speed': 0.5, 'zone': 'row'} + + def test_parameters_absent_properties_key(self): + """Edge data without 'properties' key -> empty dict.""" + seg = ActionSegment( + action_type='row_traversal', + edge_ids=['e1'], + source_nodes=['A'], + target_nodes=['B'], + edge_data=[{'edge_id': 'e1'}], + ) + assert seg.parameters == {} + + def test_parameters_none_properties(self): + """properties=None is normalised to {}.""" + seg = ActionSegment( + action_type='row_traversal', + edge_ids=['e1'], + source_nodes=['A'], + target_nodes=['B'], + edge_data=[{'edge_id': 'e1', 'properties': None}], + ) + assert seg.parameters == {} + + +# ===================================================================== +# Integration: build_graph_from_tmap + plan_route +# ===================================================================== + + +class TestIntegrationWithBuildGraph: + """End-to-end: YAML fixture -> NetworkX graph -> route planning.""" + + def test_build_and_plan_route(self, mixed_actions_tmap): + graph = build_graph_from_tmap(mixed_actions_tmap) + assert graph is not None + assert graph.number_of_nodes() == 6 + + route = plan_route(graph, 'N1', 'N6') + assert route is not None + assert route[0] == 'N1' + assert route[-1] == 'N6' + + def test_merge_from_yaml(self, mixed_actions_tmap): + graph = build_graph_from_tmap(mixed_actions_tmap) + route = plan_route(graph, 'N1', 'N6') + edges = get_route_edges(graph, route) + segments = merge_action_segments(edges) + + # Expect 3 segments: Nav(2), Row(2), Align(1) + assert len(segments) == 3 + types = [s.action_type for s in segments] + assert types == ['NavigateToPose', 'row_traversal', 'goal_align'] + + def test_boundary_from_yaml_props(self, mixed_actions_tmap): + """The YAML defines boundary_left=0.4 and boundary_right=0.6 + on the first row_traversal edge (N3->N4).""" + graph = build_graph_from_tmap(mixed_actions_tmap) + route = plan_route(graph, 'N1', 'N6') + edges = get_route_edges(graph, route) + segments = merge_action_segments(edges) + + row_seg = [s for s in segments + if s.action_type == 'row_traversal'][0] + poly = compute_boundary_polygon(graph, row_seg) + + # 3 waypoints (N3, N4, N5) -> 6 polygon points + assert len(poly) == 6 + + # Verify asymmetric boundary (left=0.4, right=0.6) + # For horizontal edges: left_pts have positive y, right negative y + left_y = poly[0][1] + right_y = poly[5][1] + assert abs(left_y - 0.4) < 0.01 + assert abs(right_y + 0.6) < 0.01 diff --git a/topological_navigation/test/test_navigationcore.py b/topological_navigation/test/test_navigationcore.py index f747d28d..e0dde16b 100644 --- a/topological_navigation/test/test_navigationcore.py +++ b/topological_navigation/test/test_navigationcore.py @@ -8,6 +8,7 @@ import pytest import rclpy from rclpy.node import Node +from rclpy.qos import QoSProfile, DurabilityPolicy, ReliabilityPolicy, HistoryPolicy from std_msgs.msg import String @launch_pytest.fixture @@ -23,18 +24,11 @@ def generate_test_description(): ), launch_ros.actions.Node( executable=sys.executable, - arguments=[str(path_to_test / '..' / 'topological_navigation'/'scripts' /'map_manager2.py'), str(path_to_test / 'conf' / 'network_autogen.tmap2.yaml')], + arguments=[str(path_to_test / '..' / 'topological_navigation'/'scripts' /'map_manager2.py'), str(path_to_test / 'fixtures' / 'simple_map.yaml')], additional_env={'PYTHONUNBUFFERED': '1'}, name='map_manager', output='screen', ), - launch_ros.actions.Node( - executable=sys.executable, - arguments=[str(path_to_test / '..' / 'topological_navigation'/'scripts'/'topological_transform_publisher.py')], - additional_env={'PYTHONUNBUFFERED': '1'}, - name='topological_transform_publisher', - output='screen', - ), launch_ros.actions.Node( executable=sys.executable, arguments=[str(path_to_test / '..' / 'topological_navigation'/ 'scripts'/'navigation2.py')], @@ -61,7 +55,10 @@ def test_check_if_topological_map_is_published(): msgs_received_flag = node.topmap_event_object.wait(timeout=40.0) assert msgs_received_flag, 'Did not receive topological map !' finally: - rclpy.shutdown() + try: + rclpy.shutdown() + except (RuntimeError, rclpy._rclpy_pybind11.RCLError): + pass @pytest.mark.launch(fixture=generate_test_description) def test_check_if_closest_node_is_published(): @@ -72,7 +69,10 @@ def test_check_if_closest_node_is_published(): msgs_received_flag = node.closest_node_event_object.wait(timeout=40.0) assert msgs_received_flag, 'Did not receive closest node info !' finally: - rclpy.shutdown() + try: + rclpy.shutdown() + except (RuntimeError, rclpy._rclpy_pybind11.RCLError): + pass @pytest.mark.launch(fixture=generate_test_description) def test_check_if_current_node_is_published(): @@ -83,7 +83,10 @@ def test_check_if_current_node_is_published(): msgs_received_flag = node.current_node_event_object.wait(timeout=40.0) assert msgs_received_flag, 'Did not receive current node info !' finally: - rclpy.shutdown() + try: + rclpy.shutdown() + except (RuntimeError, rclpy._rclpy_pybind11.RCLError): + pass class NavigationClient(Node): def __init__(self, name='test_node'): @@ -93,9 +96,21 @@ def __init__(self, name='test_node'): self.current_node_event_object = Event() def initialize(self): - self.topmap_sub = self.create_subscription(String, '/topological_map_2', self.topmap_sub_callback, 1) - self.closest_node_sub = self.create_subscription(String, 'closest_node', self.closest_node_callback, 1) - self.current_node_sub = self.create_subscription(String, 'current_node', self.current_node_callback, 1) + # Match the TRANSIENT_LOCAL durability used by the publishers + # (map_manager2, localisation2) so late-joining subscribers + # receive the last published message. + latched_qos = QoSProfile( + depth=1, + reliability=ReliabilityPolicy.RELIABLE, + history=HistoryPolicy.KEEP_LAST, + durability=DurabilityPolicy.TRANSIENT_LOCAL, + ) + self.topmap_sub = self.create_subscription( + String, '/topological_map_2', self.topmap_sub_callback, latched_qos) + self.closest_node_sub = self.create_subscription( + String, 'closest_node', self.closest_node_callback, latched_qos) + self.current_node_sub = self.create_subscription( + String, 'current_node', self.current_node_callback, latched_qos) self.ros_spin_thread = Thread(target=lambda node: rclpy.spin(node), args=(self,)) self.ros_spin_thread.start() diff --git a/topological_navigation/test/test_networkx_utils.py b/topological_navigation/test/test_networkx_utils.py new file mode 100644 index 00000000..98015fde --- /dev/null +++ b/topological_navigation/test/test_networkx_utils.py @@ -0,0 +1,1252 @@ +""" +Unit tests for networkx_utils module. + +Tests cover: +- Graph construction from topological map data +- KD-tree spatial indexing +- Point-in-polygon checks +- Edge distance calculations +- Localization logic +""" + +import pytest +import networkx as nx +import yaml +from pathlib import Path + +# Import the module to test +from topological_navigation.networkx_utils import build_graph_from_tmap + +# geometry_msgs is only available in a ROS 2 environment +try: + import geometry_msgs # noqa: F401 + _has_geometry_msgs = True +except ImportError: + _has_geometry_msgs = False + +_skip_no_geometry = pytest.mark.skipif( + not _has_geometry_msgs, reason='geometry_msgs not available' +) + + +# --------------------------------------------------------------------------- +# Module-level fixtures (available to all test classes) +# --------------------------------------------------------------------------- + +FIXTURE_DIR = Path(__file__).parent / 'fixtures' + + +@pytest.fixture +def simple_map_data(): + """Load simple map fixture.""" + with open(FIXTURE_DIR / 'simple_map.yaml', 'r') as f: + return yaml.safe_load(f) + + +@pytest.fixture +def complex_map_data(): + """Load complex map fixture.""" + with open(FIXTURE_DIR / 'complex_map.yaml', 'r') as f: + return yaml.safe_load(f) + + +class TestGraphConstruction: + """Tests for build_graph_from_tmap function.""" + + def test_simple_map_conversion(self, simple_map_data): + """Test conversion of simple map (2 nodes).""" + graph = build_graph_from_tmap(simple_map_data) + + assert graph is not None + assert isinstance(graph, nx.DiGraph) + assert graph.number_of_nodes() == 2 + assert graph.number_of_edges() == 1 + + # Check node names + assert 'WP1' in graph.nodes + assert 'WP2' in graph.nodes + + def test_complex_map_conversion(self, complex_map_data): + """Test conversion of complex map (10 nodes).""" + graph = build_graph_from_tmap(complex_map_data) + + assert graph is not None + assert isinstance(graph, nx.DiGraph) + assert graph.number_of_nodes() == 10 + assert graph.number_of_edges() > 0 + + # Check some node names + assert 'Entry' in graph.nodes + assert 'Exit' in graph.nodes + assert 'Junction1' in graph.nodes + + def test_node_attribute_preservation(self, simple_map_data): + """Test that node attributes are preserved correctly.""" + graph = build_graph_from_tmap(simple_map_data) + + # Check WP1 attributes + wp1_attrs = graph.nodes['WP1'] + assert wp1_attrs['name'] == 'WP1' + assert wp1_attrs['x'] == 0.0 + assert wp1_attrs['y'] == 0.0 + assert wp1_attrs['z'] == 0.0 + assert 'orientation' in wp1_attrs + assert wp1_attrs['orientation']['w'] == 1.0 + assert 'verts' in wp1_attrs + assert len(wp1_attrs['verts']) == 4 + assert wp1_attrs['parent_frame'] == 'map' + + # Check WP2 attributes + wp2_attrs = graph.nodes['WP2'] + assert wp2_attrs['x'] == 5.0 + assert wp2_attrs['y'] == 0.0 + + def test_edge_attribute_preservation(self, simple_map_data): + """Test that edge attributes are preserved correctly.""" + graph = build_graph_from_tmap(simple_map_data) + + # Check edge from WP1 to WP2 + assert graph.has_edge('WP1', 'WP2') + edge_attrs = graph.edges['WP1', 'WP2'] + + assert edge_attrs['edge_id'] == 'WP1_WP2' + assert edge_attrs['action'] == 'navigate_to_pose' + assert 'properties' in edge_attrs + assert 'weight' in edge_attrs + + def test_optional_properties_handling(self, complex_map_data): + """Test handling of optional properties dictionaries.""" + graph = build_graph_from_tmap(complex_map_data) + + # Check node with properties + entry_attrs = graph.nodes['Entry'] + assert 'properties' in entry_attrs + assert entry_attrs['properties']['xy_goal_tolerance'] == 0.3 + assert entry_attrs['properties']['semantics'] == 'entry' + + # Check edge with properties + edge_attrs = graph.edges['Row1Start', 'Row1End'] + assert 'properties' in edge_attrs + assert edge_attrs['properties']['max_speed'] == 0.3 + assert edge_attrs['properties']['row_type'] == 'vineyard' + + def test_missing_field_handling(self): + """Test handling of missing required fields.""" + # Map with missing 'nodes' field + invalid_map1 = {'name': 'test_map'} + assert build_graph_from_tmap(invalid_map1) is None + + # Map with invalid nodes structure + invalid_map2 = {'nodes': 'not_a_list'} + assert build_graph_from_tmap(invalid_map2) is None + + # Map with node missing 'name' -- only invalid node means 0 valid, + # so build_graph_from_tmap returns None. + invalid_map3 = { + 'nodes': [{ + 'node': { + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + } + } + }] + } + graph = build_graph_from_tmap(invalid_map3) + assert graph is None # No valid nodes -> returns None + + def test_invalid_data_handling(self): + """Test handling of completely invalid data.""" + # None input + assert build_graph_from_tmap(None) is None + + # String input + assert build_graph_from_tmap("invalid") is None + + # Empty dict + assert build_graph_from_tmap({}) is None + + def test_empty_map(self): + """Test handling of empty map (no nodes).""" + empty_map = {'nodes': []} + graph = build_graph_from_tmap(empty_map) + + # Empty nodes list -> 0 valid nodes -> returns None + assert graph is None + + def test_node_with_no_edges(self, simple_map_data): + """Test node with no outgoing edges.""" + graph = build_graph_from_tmap(simple_map_data) + + # WP2 has no edges + assert graph.out_degree('WP2') == 0 + assert list(graph.successors('WP2')) == [] + + def test_localise_by_topic_preservation(self, complex_map_data): + """Test that localise_by_topic configuration is preserved.""" + graph = build_graph_from_tmap(complex_map_data) + + # Check node with localise_by_topic + topic_node_attrs = graph.nodes['TopicLocaliseNode'] + assert 'localise_by_topic' in topic_node_attrs + assert topic_node_attrs['localise_by_topic'] != '' + assert '"topic"' in topic_node_attrs['localise_by_topic'] + + # Check node without localise_by_topic + entry_attrs = graph.nodes['Entry'] + assert entry_attrs['localise_by_topic'] == '' + + def test_meta_preservation(self, complex_map_data): + """Test that meta information is preserved.""" + graph = build_graph_from_tmap(complex_map_data) + + # Check node with tags + entry_attrs = graph.nodes['Entry'] + assert 'meta' in entry_attrs + assert 'tag' in entry_attrs['meta'] + assert 'entry_point' in entry_attrs['meta']['tag'] + + def test_edge_weight_default(self, simple_map_data): + """Test that edge weight defaults to 1.0.""" + graph = build_graph_from_tmap(simple_map_data) + + edge_attrs = graph.edges['WP1', 'WP2'] + assert edge_attrs['weight'] == 1.0 + + def test_graph_is_directed(self, simple_map_data): + """Test that returned graph is a DiGraph.""" + graph = build_graph_from_tmap(simple_map_data) + + assert isinstance(graph, nx.DiGraph) + assert graph.is_directed() + + def test_multiple_edges_from_node(self, complex_map_data): + """Test node with multiple outgoing edges.""" + graph = build_graph_from_tmap(complex_map_data) + + # Entry node has 2 edges + assert graph.out_degree('Entry') == 2 + successors = list(graph.successors('Entry')) + assert 'Junction1' in successors + assert 'Row1Start' in successors + + def test_self_loop_edge_handling(self): + """Test handling of self-loop edges (should be added to graph).""" + map_with_self_loop = { + 'nodes': [{ + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + }, + 'edges': [{ + 'edge_id': 'WP1_WP1', + 'node': 'WP1', + 'action': 'Wait' + }] + } + }] + } + + graph = build_graph_from_tmap(map_with_self_loop) + assert graph is not None + assert graph.has_edge('WP1', 'WP1') # Self-loop should be added + + +class TestErrorHandlingWithLogging: + """Tests for error handling with logging.""" + + class MockLogger: + """Mock logger for testing.""" + def __init__(self): + self.errors = [] + self.warnings = [] + + def error(self, msg): + self.errors.append(msg) + + def warning(self, msg): + self.warnings.append(msg) + + def test_invalid_map_type_logs_error(self): + """Test that invalid map type logs appropriate error.""" + logger = self.MockLogger() + result = build_graph_from_tmap("not a dict", logger=logger) + + assert result is None + assert len(logger.errors) == 1 + assert "Expected dictionary" in logger.errors[0] + + def test_missing_nodes_field_logs_error(self): + """Test that missing 'nodes' field logs error.""" + logger = self.MockLogger() + result = build_graph_from_tmap({'name': 'test'}, logger=logger) + + assert result is None + assert len(logger.errors) == 1 + assert "Missing required 'nodes' field" in logger.errors[0] + + def test_invalid_nodes_type_logs_error(self): + """Test that invalid 'nodes' type logs error.""" + logger = self.MockLogger() + result = build_graph_from_tmap({'nodes': 'not a list'}, logger=logger) + + assert result is None + assert len(logger.errors) == 1 + assert "'nodes' field must be a list" in logger.errors[0] + + def test_invalid_node_structure_logs_warning(self): + """Test that invalid node structure logs warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [ + 'not a dict', # Invalid node + { + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + } + } + } + ] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is not None + assert result.number_of_nodes() == 1 # Only valid node added + assert len(logger.warnings) >= 1 + assert any("Expected dictionary" in w for w in logger.warnings) + + def test_missing_node_field_logs_warning(self): + """Test that missing 'node' field logs warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [ + {'meta': {}}, # Missing 'node' field + { + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + } + } + } + ] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is not None + assert result.number_of_nodes() == 1 + assert len(logger.warnings) >= 1 + assert any("Missing 'node' field" in w for w in logger.warnings) + + def test_missing_name_field_logs_warning(self): + """Test that missing 'name' field logs warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [{ + 'node': { + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + } + } + }] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + # Single invalid node -> 0 valid nodes -> returns None + assert result is None + assert len(logger.warnings) >= 1 + assert any("Missing required 'name' field" in w for w in logger.warnings) + + def test_missing_pose_field_logs_warning(self): + """Test that missing 'pose' field logs warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [{ + 'node': { + 'name': 'WP1' + } + }] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is None # No valid nodes -> returns None + assert len(logger.warnings) >= 1 + assert any("Missing required 'pose' field" in w for w in logger.warnings) + + def test_missing_position_logs_warning(self): + """Test that missing 'position' in pose logs warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [{ + 'node': { + 'name': 'WP1', + 'pose': { + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + } + } + }] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is None # No valid nodes -> returns None + assert len(logger.warnings) >= 1 + assert any("Missing 'position' in pose" in w for w in logger.warnings) + + def test_missing_orientation_logs_warning(self): + """Test that missing 'orientation' in pose logs warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [{ + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0} + } + } + }] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is None # No valid nodes -> returns None + assert len(logger.warnings) >= 1 + assert any("Missing 'orientation' in pose" in w for w in logger.warnings) + + def test_missing_position_coordinates_logs_warning(self): + """Test that missing position coordinates log warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [{ + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 0, 'y': 0}, # Missing 'z' + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + } + } + }] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is None # No valid nodes -> returns None + assert len(logger.warnings) >= 1 + assert any("Missing position coordinates" in w for w in logger.warnings) + + def test_missing_orientation_components_logs_warning(self): + """Test that missing orientation components log warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [{ + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0} # Missing 'w' + } + } + }] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is None # No valid nodes -> returns None + assert len(logger.warnings) >= 1 + assert any("Missing orientation components" in w for w in logger.warnings) + + def test_invalid_coordinate_type_logs_warning(self): + """Test that invalid coordinate types log warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [{ + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 'not a number', 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + } + } + }] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is None # No valid nodes -> returns None + assert len(logger.warnings) >= 1 + assert any("Error converting coordinates to float" in w for w in logger.warnings) + + def test_invalid_edges_type_logs_warning(self): + """Test that invalid 'edges' type logs warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [{ + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + }, + 'edges': 'not a list' + } + }] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is not None + assert result.number_of_nodes() == 1 + assert len(logger.warnings) >= 1 + assert any("'edges' field must be a list" in w for w in logger.warnings) + + def test_invalid_edge_structure_logs_warning(self): + """Test that invalid edge structure logs warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [{ + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + }, + 'edges': ['not a dict'] + } + }] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is not None + assert result.number_of_nodes() == 1 + assert result.number_of_edges() == 0 + assert len(logger.warnings) >= 1 + assert any("Expected dictionary" in w for w in logger.warnings) + + def test_missing_edge_id_logs_warning(self): + """Test that missing edge_id logs warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [{ + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + }, + 'edges': [{ + 'node': 'WP2', + 'action': 'NavigateToPose' + }] + } + }] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is not None + assert result.number_of_edges() == 0 + assert len(logger.warnings) >= 1 + assert any("Missing 'edge_id'" in w for w in logger.warnings) + + def test_missing_edge_target_node_logs_warning(self): + """Test that missing edge target node logs warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [{ + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + }, + 'edges': [{ + 'edge_id': 'edge1', + 'action': 'NavigateToPose' + }] + } + }] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is not None + assert result.number_of_edges() == 0 + assert len(logger.warnings) >= 1 + assert any("Missing target 'node'" in w for w in logger.warnings) + + def test_missing_edge_action_logs_warning(self): + """Test that missing edge action logs warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [{ + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + }, + 'edges': [{ + 'edge_id': 'edge1', + 'node': 'WP2' + }] + } + }] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is not None + assert result.number_of_edges() == 0 + assert len(logger.warnings) >= 1 + assert any("Missing 'action'" in w for w in logger.warnings) + + def test_invalid_edge_properties_type_logs_warning(self): + """Test that invalid edge properties type logs warning.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [{ + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + }, + 'edges': [{ + 'edge_id': 'edge1', + 'node': 'WP2', + 'action': 'NavigateToPose', + 'properties': 'not a dict' + }] + } + }] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is not None + assert result.number_of_edges() == 1 + assert len(logger.warnings) >= 1 + assert any("'properties' must be a dictionary" in w for w in logger.warnings) + + def test_invalid_edge_weight_logs_warning(self): + """Test that invalid edge weight logs warning and uses default.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [{ + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + }, + 'edges': [{ + 'edge_id': 'edge1', + 'node': 'WP2', + 'action': 'NavigateToPose', + 'properties': {'weight': 'not a number'} + }] + } + }] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is not None + assert result.number_of_edges() == 1 + edge_attrs = result.edges['WP1', 'WP2'] + assert edge_attrs['weight'] == 1.0 # Default weight + assert len(logger.warnings) >= 1 + assert any("Error converting weight to float" in w for w in logger.warnings) + + def test_no_valid_nodes_logs_error(self): + """Test that map with no valid nodes logs error.""" + logger = self.MockLogger() + invalid_map = { + 'nodes': [ + {'invalid': 'data'}, + {'node': {'invalid': 'structure'}} + ] + } + result = build_graph_from_tmap(invalid_map, logger=logger) + + assert result is None + assert len(logger.errors) >= 1 + assert any("No valid nodes found" in e for e in logger.errors) + + def test_unexpected_exception_logs_error(self): + """Test that unexpected exceptions are caught and logged.""" + logger = self.MockLogger() + + # Create a map that will cause an unexpected error during processing + # This is a bit tricky to trigger, but we can test the exception handler exists + invalid_map = { + 'nodes': [{ + 'node': { + 'name': 'WP1', + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + } + } + }] + } + + # This should succeed normally + result = build_graph_from_tmap(invalid_map, logger=logger) + assert result is not None + + def test_partial_map_processing(self): + """Test that valid nodes are processed even when some nodes are invalid.""" + logger = self.MockLogger() + mixed_map = { + 'nodes': [ + { + 'node': { + 'name': 'ValidNode1', + 'pose': { + 'position': {'x': 0, 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + } + } + }, + { + 'node': { + 'name': 'InvalidNode', + 'pose': { + 'position': {'x': 'invalid', 'y': 0, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + } + } + }, + { + 'node': { + 'name': 'ValidNode2', + 'pose': { + 'position': {'x': 5, 'y': 5, 'z': 0}, + 'orientation': {'x': 0, 'y': 0, 'z': 0, 'w': 1} + } + } + } + ] + } + + result = build_graph_from_tmap(mixed_map, logger=logger) + + assert result is not None + assert result.number_of_nodes() == 2 # Only valid nodes + assert 'ValidNode1' in result.nodes + assert 'ValidNode2' in result.nodes + assert 'InvalidNode' not in result.nodes + assert len(logger.warnings) >= 1 # Warning for invalid node + + +if __name__ == '__main__': + pytest.main([__file__, '-v']) + + +class TestKDTreeConstruction: + """Tests for build_kdtree_from_graph function.""" + + @pytest.fixture + def simple_graph(self, simple_map_data): + """Build graph from simple map (uses module-level fixture).""" + return build_graph_from_tmap(simple_map_data) + + @pytest.fixture + def complex_graph(self, complex_map_data): + """Build graph from complex map (uses module-level fixture).""" + return build_graph_from_tmap(complex_map_data) + + def test_kdtree_construction_simple(self, simple_graph): + """Test KD-tree construction from simple graph.""" + from topological_navigation.networkx_utils import build_kdtree_from_graph + + kdtree, node_names = build_kdtree_from_graph(simple_graph) + + assert kdtree is not None + assert len(node_names) == 2 + assert 'WP1' in node_names + assert 'WP2' in node_names + + def test_kdtree_construction_complex(self, complex_graph): + """Test KD-tree construction from complex graph.""" + from topological_navigation.networkx_utils import build_kdtree_from_graph + + kdtree, node_names = build_kdtree_from_graph(complex_graph) + + assert kdtree is not None + assert len(node_names) == 10 + assert 'Entry' in node_names + assert 'Exit' in node_names + + def test_kdtree_none_graph(self): + """Test KD-tree construction with None graph.""" + from topological_navigation.networkx_utils import build_kdtree_from_graph + + kdtree, node_names = build_kdtree_from_graph(None) + + assert kdtree is None + assert node_names == [] + + def test_kdtree_empty_graph(self): + """Test KD-tree construction with empty graph.""" + from topological_navigation.networkx_utils import build_kdtree_from_graph + + empty_graph = nx.DiGraph() + kdtree, node_names = build_kdtree_from_graph(empty_graph) + + assert kdtree is None + assert node_names == [] + + +@_skip_no_geometry +class TestNearestNodeQuery: + """Tests for query_nearest_nodes function.""" + + @pytest.fixture + def simple_kdtree_setup(self, simple_map_data): + """Build graph and KD-tree from simple map.""" + from topological_navigation.networkx_utils import build_kdtree_from_graph + graph = build_graph_from_tmap(simple_map_data) + kdtree, node_names = build_kdtree_from_graph(graph) + return kdtree, node_names + + def test_query_single_nearest(self, simple_kdtree_setup): + """Test querying single nearest node.""" + from topological_navigation.networkx_utils import query_nearest_nodes + from geometry_msgs.msg import Pose + + kdtree, node_names = simple_kdtree_setup + + pose = Pose() + pose.position.x = 1.0 + pose.position.y = 0.0 + + results = query_nearest_nodes(kdtree, node_names, pose, k=1) + + assert len(results) == 1 + assert results[0]['node'] == 'WP1' + assert results[0]['dist'] > 0 + + def test_query_multiple_nearest(self, simple_kdtree_setup): + """Test querying multiple nearest nodes.""" + from topological_navigation.networkx_utils import query_nearest_nodes + from geometry_msgs.msg import Pose + + kdtree, node_names = simple_kdtree_setup + + pose = Pose() + pose.position.x = 2.5 + pose.position.y = 0.0 + + results = query_nearest_nodes(kdtree, node_names, pose, k=2) + + assert len(results) == 2 + assert all('node' in r and 'dist' in r for r in results) + + def test_query_none_kdtree(self): + """Test query with None KD-tree.""" + from topological_navigation.networkx_utils import query_nearest_nodes + from geometry_msgs.msg import Pose + + pose = Pose() + results = query_nearest_nodes(None, [], pose, k=1) + + assert results == [] + + +@_skip_no_geometry +class TestPointInPolygon: + """Tests for point_in_poly_nx function.""" + + @pytest.fixture + def polygon_graph(self): + """Create graph with polygon influence zones.""" + fixture_path = Path(__file__).parent / 'fixtures' / 'polygon_shapes_map.yaml' + with open(fixture_path, 'r') as f: + map_data = yaml.safe_load(f) + return build_graph_from_tmap(map_data) + + def test_point_inside_rectangle(self, polygon_graph): + """Test point inside RectangleNode influence zone. + + RectangleNode is at (10, -10) with verts [(-3,-1),(3,-1),(3,1),(-3,1)]. + So absolute point (10.5, -9.5) is relative (0.5, 0.5) -> inside. + """ + from topological_navigation.networkx_utils import point_in_poly_nx + from geometry_msgs.msg import Pose + + pose = Pose() + pose.position.x = 10.5 + pose.position.y = -9.5 + + result = point_in_poly_nx(polygon_graph, 'RectangleNode', pose) + assert result is True + + def test_point_outside_rectangle(self, polygon_graph): + """Test point outside RectangleNode influence zone.""" + from topological_navigation.networkx_utils import point_in_poly_nx + from geometry_msgs.msg import Pose + + pose = Pose() + pose.position.x = 50.0 + pose.position.y = 50.0 + + result = point_in_poly_nx(polygon_graph, 'RectangleNode', pose) + assert result is False + + def test_point_in_poly_none_graph(self): + """Test point-in-polygon with None graph.""" + from topological_navigation.networkx_utils import point_in_poly_nx + from geometry_msgs.msg import Pose + + pose = Pose() + result = point_in_poly_nx(None, 'node', pose) + + assert result is False + + +@_skip_no_geometry +class TestEdgeDistances: + """Tests for get_edge_distances_nx function.""" + + @pytest.fixture + def simple_graph(self, simple_map_data): + """Build graph from simple map (uses module-level fixture).""" + return build_graph_from_tmap(simple_map_data) + + def test_edge_distances_calculation(self, simple_graph): + """Test edge distance calculation.""" + from topological_navigation.networkx_utils import get_edge_distances_nx + from geometry_msgs.msg import Pose + + pose = Pose() + pose.position.x = 2.5 + pose.position.y = 1.0 + + edge_ids, distances = get_edge_distances_nx(simple_graph, pose) + + assert len(edge_ids) > 0 + assert len(distances) > 0 + assert len(edge_ids) == len(distances) + + def test_edge_distances_none_graph(self): + """Test edge distances with None graph.""" + from topological_navigation.networkx_utils import get_edge_distances_nx + from geometry_msgs.msg import Pose + import numpy as np + + pose = Pose() + edge_ids, distances = get_edge_distances_nx(None, pose) + + assert edge_ids == [] + assert len(distances) == 0 + + +@_skip_no_geometry +class TestCurrentNodeDetermination: + """Tests for determine_current_node function.""" + + @pytest.fixture + def localization_setup(self, simple_map_data): + """Build graph and KD-tree for localization.""" + from topological_navigation.networkx_utils import build_kdtree_from_graph + graph = build_graph_from_tmap(simple_map_data) + kdtree, node_names = build_kdtree_from_graph(graph) + return graph, kdtree, node_names + + def test_determine_current_inside_zone(self, localization_setup): + """Test determining current node when inside influence zone.""" + from topological_navigation.networkx_utils import determine_current_node + from geometry_msgs.msg import Pose + + graph, kdtree, node_names = localization_setup + + pose = Pose() + pose.position.x = 0.5 + pose.position.y = 0.5 + + current = determine_current_node(graph, kdtree, node_names, pose, [], []) + + assert current == 'WP1' + + def test_determine_current_outside_zones(self, localization_setup): + """Test determining current node when outside all zones.""" + from topological_navigation.networkx_utils import determine_current_node + from geometry_msgs.msg import Pose + + graph, kdtree, node_names = localization_setup + + pose = Pose() + pose.position.x = 100.0 + pose.position.y = 100.0 + + current = determine_current_node(graph, kdtree, node_names, pose, [], []) + + assert current == 'none' + + def test_determine_current_none_inputs(self): + """Test determine_current_node with None inputs.""" + from topological_navigation.networkx_utils import determine_current_node + from geometry_msgs.msg import Pose + + pose = Pose() + current = determine_current_node(None, None, [], pose, [], []) + + assert current == 'none' + + +@_skip_no_geometry +class TestClosestNodeDetermination: + """Tests for determine_closest_node function.""" + + @pytest.fixture + def localization_setup(self, simple_map_data): + """Build graph and KD-tree for localization.""" + from topological_navigation.networkx_utils import build_kdtree_from_graph + graph = build_graph_from_tmap(simple_map_data) + kdtree, node_names = build_kdtree_from_graph(graph) + return graph, kdtree, node_names + + def test_determine_closest_basic(self, localization_setup): + """Test determining closest node.""" + from topological_navigation.networkx_utils import determine_closest_node + from geometry_msgs.msg import Pose + + graph, kdtree, node_names = localization_setup + + pose = Pose() + pose.position.x = 1.0 + pose.position.y = 0.0 + + closest, dist = determine_closest_node(kdtree, node_names, graph, 'none', [], [], pose) + + assert closest == 'WP1' + assert dist > 0 + + def test_determine_closest_with_current(self, localization_setup): + """Test closest node when current node is set.""" + from topological_navigation.networkx_utils import determine_closest_node + from geometry_msgs.msg import Pose + + graph, kdtree, node_names = localization_setup + + pose = Pose() + pose.position.x = 0.5 + pose.position.y = 0.5 + + closest, dist = determine_closest_node(kdtree, node_names, graph, 'WP1', [], [], pose) + + assert closest == 'WP1' + + def test_determine_closest_none_kdtree(self): + """Test determine_closest_node with None KD-tree.""" + from topological_navigation.networkx_utils import determine_closest_node + from geometry_msgs.msg import Pose + + pose = Pose() + closest, dist = determine_closest_node(None, [], None, 'none', [], [], pose) + + assert closest == 'none' + assert dist == float('inf') + + +class TestTopicBasedLocalization: + """Tests for update_loc_by_topic_nx function.""" + + @pytest.fixture + def complex_graph(self, complex_map_data): + """Build graph from complex map.""" + return build_graph_from_tmap(complex_map_data) + + def test_update_loc_by_topic(self, complex_graph): + """Test extracting topic-based localization config.""" + from topological_navigation.networkx_utils import update_loc_by_topic_nx + + nodes_by_topic, names_by_topic = update_loc_by_topic_nx(complex_graph) + + assert len(nodes_by_topic) > 0 + assert len(names_by_topic) > 0 + assert 'TopicLocaliseNode' in names_by_topic + + def test_update_loc_by_topic_none_graph(self): + """Test update_loc_by_topic_nx with None graph.""" + from topological_navigation.networkx_utils import update_loc_by_topic_nx + + nodes, names = update_loc_by_topic_nx(None) + + assert nodes == [] + assert names == [] + + +# =========================================================================== +# Graph algorithm wrappers +# =========================================================================== + + +class TestComputeShortestPath: + """Tests for compute_shortest_path.""" + + @pytest.fixture + def weighted_graph(self): + """A -> B (1) -> C (2), A -> C (5).""" + from topological_navigation.networkx_utils import compute_shortest_path # noqa: F401 + import networkx as nx + G = nx.DiGraph() + G.add_edge('A', 'B', weight=1.0) + G.add_edge('B', 'C', weight=2.0) + G.add_edge('A', 'C', weight=5.0) + return G + + def test_shortest_via_intermediate(self, weighted_graph): + from topological_navigation.networkx_utils import compute_shortest_path + path = compute_shortest_path(weighted_graph, 'A', 'C') + assert path == ['A', 'B', 'C'] + + def test_same_node(self, weighted_graph): + from topological_navigation.networkx_utils import compute_shortest_path + assert compute_shortest_path(weighted_graph, 'A', 'A') == ['A'] + + def test_no_path(self, weighted_graph): + """C has no outgoing edges, so C->A should return [].""" + from topological_navigation.networkx_utils import compute_shortest_path + assert compute_shortest_path(weighted_graph, 'C', 'A') == [] + + def test_none_graph(self): + from topological_navigation.networkx_utils import compute_shortest_path + assert compute_shortest_path(None, 'A', 'B') == [] + + def test_missing_source(self, weighted_graph): + from topological_navigation.networkx_utils import compute_shortest_path + assert compute_shortest_path(weighted_graph, 'X', 'A') == [] + + def test_missing_target(self, weighted_graph): + from topological_navigation.networkx_utils import compute_shortest_path + assert compute_shortest_path(weighted_graph, 'A', 'X') == [] + + +class TestComputePathLength: + """Tests for compute_path_length.""" + + @pytest.fixture + def weighted_graph(self): + import networkx as nx + G = nx.DiGraph() + G.add_edge('A', 'B', weight=1.5) + G.add_edge('B', 'C', weight=2.5) + G.add_edge('A', 'C', weight=5.0) + return G + + def test_shortest_length(self, weighted_graph): + from topological_navigation.networkx_utils import compute_path_length + length = compute_path_length(weighted_graph, 'A', 'C') + assert length == pytest.approx(4.0) + + def test_same_node_zero(self, weighted_graph): + from topological_navigation.networkx_utils import compute_path_length + assert compute_path_length(weighted_graph, 'A', 'A') == 0.0 + + def test_no_path_inf(self, weighted_graph): + from topological_navigation.networkx_utils import compute_path_length + assert compute_path_length(weighted_graph, 'C', 'A') == float('inf') + + def test_none_graph_inf(self): + from topological_navigation.networkx_utils import compute_path_length + assert compute_path_length(None, 'A', 'B') == float('inf') + + +class TestCheckConnectivity: + """Tests for check_connectivity.""" + + @pytest.fixture + def directed_graph(self): + import networkx as nx + G = nx.DiGraph() + G.add_edge('A', 'B') + G.add_edge('B', 'C') + G.add_node('D') # isolated + return G + + def test_connected(self, directed_graph): + from topological_navigation.networkx_utils import check_connectivity + assert check_connectivity(directed_graph, 'A', 'C') is True + + def test_not_connected_reverse(self, directed_graph): + from topological_navigation.networkx_utils import check_connectivity + assert check_connectivity(directed_graph, 'C', 'A') is False + + def test_isolated_node(self, directed_graph): + from topological_navigation.networkx_utils import check_connectivity + assert check_connectivity(directed_graph, 'A', 'D') is False + + def test_same_node(self, directed_graph): + from topological_navigation.networkx_utils import check_connectivity + assert check_connectivity(directed_graph, 'A', 'A') is True + + def test_none_graph(self): + from topological_navigation.networkx_utils import check_connectivity + assert check_connectivity(None, 'A', 'B') is False + + def test_missing_node(self, directed_graph): + from topological_navigation.networkx_utils import check_connectivity + assert check_connectivity(directed_graph, 'X', 'A') is False + + +class TestGetNeighbors: + """Tests for get_neighbors.""" + + @pytest.fixture + def g(self): + import networkx as nx + G = nx.DiGraph() + G.add_edge('A', 'B') + G.add_edge('A', 'C') + G.add_edge('B', 'C') + return G + + def test_neighbors_of_hub(self, g): + from topological_navigation.networkx_utils import get_neighbors + assert sorted(get_neighbors(g, 'A')) == ['B', 'C'] + + def test_leaf_has_one_neighbor(self, g): + from topological_navigation.networkx_utils import get_neighbors + assert get_neighbors(g, 'B') == ['C'] + + def test_no_outgoing(self, g): + from topological_navigation.networkx_utils import get_neighbors + assert get_neighbors(g, 'C') == [] + + def test_none_graph(self): + from topological_navigation.networkx_utils import get_neighbors + assert get_neighbors(None, 'A') == [] + + def test_missing_node(self, g): + from topological_navigation.networkx_utils import get_neighbors + assert get_neighbors(g, 'X') == [] + + +# =========================================================================== +# normalize_action_name (navigation_graph) +# =========================================================================== + + +class TestNormalizeActionName: + """Tests for navigation_graph.normalize_action_name.""" + + def test_camel_to_canonical(self): + from topological_navigation.navigation_graph import normalize_action_name + assert normalize_action_name('NavigateToPose') == 'NavigateToPose' + + def test_snake_to_canonical(self): + from topological_navigation.navigation_graph import normalize_action_name + assert normalize_action_name('navigate_to_pose') == 'NavigateToPose' + + def test_row_traversal_cases(self): + from topological_navigation.navigation_graph import normalize_action_name + assert normalize_action_name('RowTraversal') == 'row_traversal' + assert normalize_action_name('row_traversal') == 'row_traversal' + + def test_goal_align_cases(self): + from topological_navigation.navigation_graph import normalize_action_name + assert normalize_action_name('GoalAlign') == 'goal_align' + assert normalize_action_name('goal_align') == 'goal_align' + + def test_unknown_returned_unchanged(self): + from topological_navigation.navigation_graph import normalize_action_name + assert normalize_action_name('SomethingNew') == 'SomethingNew' diff --git a/topological_navigation/test/test_tmap_utils.py b/topological_navigation/test/test_tmap_utils.py new file mode 100644 index 00000000..46d0b492 --- /dev/null +++ b/topological_navigation/test/test_tmap_utils.py @@ -0,0 +1,401 @@ +"""Tests for tmap_utils module.""" + +import pytest +import yaml + +from topological_navigation.tmap_utils import ( + DEFAULT_NAVIGATION_CONFIG_FILENAME, + NAVIGATION_CONFIG_FILE_KEY, + CustomSafeLoader, + NoAliasDumper, + get_edge_from_id_tmap2, + get_node_from_tmap2, + load_tmap2_file, + save_tmap2_file, +) + + +# ---------- Fixtures -------------------------------------------------- + +@pytest.fixture +def sample_tmap(): + """Build a minimal tmap2 structure for testing.""" + return { + "nodes": [ + { + "node": { + "name": "WP1", + "pose": { + "position": {"x": 1.0, "y": 2.0, "z": 0.0}, + "orientation": {"x": 0.0, "y": 0.0, "z": 0.0, "w": 1.0}, + }, + "edges": [ + { + "edge_id": "WP1_WP2", + "node": "WP2", + "action": "navigate_to_pose", + }, + { + "edge_id": "WP1_WP3", + "node": "WP3", + "action": "row_traversal", + }, + ], + } + }, + { + "node": { + "name": "WP2", + "pose": { + "position": {"x": 5.0, "y": 0.0, "z": 0.0}, + "orientation": {"x": 0.0, "y": 0.0, "z": 0.0, "w": 1.0}, + }, + "edges": [], + } + }, + ] + } + + +# ---------- CustomSafeLoader ------------------------------------------ + +class TestCustomSafeLoader: + """Tests for CustomSafeLoader YAML loading.""" + + def test_int_pose_keys_converted_to_float(self): + """Int values for x, y, z, w are converted to float.""" + doc = "position:\n x: 1\n y: 2\n z: 0\n" + data = yaml.load(doc, Loader=CustomSafeLoader) + assert isinstance(data["position"]["x"], float) + assert isinstance(data["position"]["y"], float) + assert isinstance(data["position"]["z"], float) + + def test_float_values_remain_float(self): + """Already-float values remain unchanged.""" + doc = "x: 1.5\ny: 2.5\nz: 0.0\nw: 1.0\n" + data = yaml.load(doc, Loader=CustomSafeLoader) + assert data["x"] == 1.5 + assert data["w"] == 1.0 + + def test_tolerance_keys_converted(self): + """Tolerance keys with int values are converted to float.""" + doc = "xy_goal_tolerance: 1\nyaw_goal_tolerance: 2\n" + data = yaml.load(doc, Loader=CustomSafeLoader) + assert isinstance(data["xy_goal_tolerance"], float) + assert isinstance(data["yaw_goal_tolerance"], float) + + def test_non_pose_int_keys_unchanged(self): + """Keys other than pose/tolerance keep their original type.""" + doc = "capacity: 3\nname: test\n" + data = yaml.load(doc, Loader=CustomSafeLoader) + assert isinstance(data["capacity"], int) + assert isinstance(data["name"], str) + + def test_orientation_w_converted(self): + """Orientation quaternion w-component int is converted to float.""" + doc = "w: 1\n" + data = yaml.load(doc, Loader=CustomSafeLoader) + assert isinstance(data["w"], float) + assert data["w"] == 1.0 + + +# ---------- NoAliasDumper ---------------------------------------------- + +class TestNoAliasDumper: + """Tests for NoAliasDumper YAML output.""" + + def test_no_aliases_in_output(self): + """Duplicate objects are written without YAML anchors/aliases.""" + shared = {"x": 1.0, "y": 2.0} + data = {"a": shared, "b": shared} + output = yaml.dump(data, Dumper=NoAliasDumper) + assert "&" not in output + assert "*" not in output + + def test_roundtrip_preserves_data(self): + """Dump then load produces equivalent data.""" + data = {"nodes": [{"name": "A"}, {"name": "B"}]} + output = yaml.dump(data, Dumper=NoAliasDumper) + loaded = yaml.safe_load(output) + assert loaded == data + + +# ---------- split map IO ----------------------------------------------- + +class TestSplitMapIo: + """Tests for split map loading and saving.""" + + def test_load_tmap2_file_merges_navigation_config(self, tmp_path): + """Definitions/actions can be loaded from a sidecar YAML file.""" + config_path = tmp_path / DEFAULT_NAVIGATION_CONFIG_FILENAME + config_path.write_text( + yaml.safe_dump( + { + "definitions": {"default_bt": ""}, + "actions": { + "navigate_to_pose": { + "action_type": "nav2_msgs.action.NavigateToPose", + "action_server": "/navigate_to_pose", + "composable": False, + } + }, + } + ), + encoding="utf-8", + ) + main_path = tmp_path / "map.tmap2.yaml" + main_path.write_text( + yaml.safe_dump( + { + NAVIGATION_CONFIG_FILE_KEY: DEFAULT_NAVIGATION_CONFIG_FILENAME, + "meta": {"last_updated": "01-01-2026_00-00-00"}, + "metric_map": "test_map", + "name": "test_map", + "pointset": "test_map", + "nodes": [], + } + ), + encoding="utf-8", + ) + + loaded, layout = load_tmap2_file(main_path, return_layout=True) + + assert loaded["definitions"]["default_bt"] == "" + assert "navigate_to_pose" in loaded["actions"] + assert loaded[NAVIGATION_CONFIG_FILE_KEY] == DEFAULT_NAVIGATION_CONFIG_FILENAME + assert layout["section_sources"] == { + "definitions": "external", + "actions": "external", + } + + def test_load_tmap2_file_accepts_explicit_navigation_config(self, tmp_path): + """A caller can pass the actions/definitions sidecar separately.""" + config_path = tmp_path / DEFAULT_NAVIGATION_CONFIG_FILENAME + config_path.write_text( + yaml.safe_dump( + { + "definitions": {"default_bt": ""}, + "actions": { + "navigate_to_pose": { + "action_type": "nav2_msgs.action.NavigateToPose", + "action_server": "/navigate_to_pose", + "action_goal_template": { + "behavior_tree": "${definitions.default_bt}", + }, + } + }, + } + ), + encoding="utf-8", + ) + main_path = tmp_path / "map.tmap2.yaml" + main_path.write_text( + yaml.safe_dump( + { + "meta": {"last_updated": "01-01-2026_00-00-00"}, + "metric_map": "test_map", + "name": "test_map", + "pointset": "test_map", + "nodes": [], + } + ), + encoding="utf-8", + ) + + loaded, layout = load_tmap2_file( + main_path, + return_layout=True, + navigation_config_file=DEFAULT_NAVIGATION_CONFIG_FILENAME, + ) + + assert ( + loaded[NAVIGATION_CONFIG_FILE_KEY] + == DEFAULT_NAVIGATION_CONFIG_FILENAME + ) + assert loaded["definitions"]["default_bt"] == "" + assert "navigate_to_pose" in loaded["actions"] + assert layout["config_path"] == str(config_path) + assert layout["section_sources"] == { + "definitions": "external", + "actions": "external", + } + + def test_main_map_sections_take_precedence(self, tmp_path): + """Inline definitions/actions are kept when a sidecar file is present.""" + config_path = tmp_path / "nav_config.yaml" + config_path.write_text( + yaml.safe_dump( + { + "definitions": {"default_bt": ""}, + "actions": {"navigate_to_pose": {"action_server": "/external"}}, + } + ), + encoding="utf-8", + ) + main_path = tmp_path / "map.tmap2.yaml" + main_path.write_text( + yaml.safe_dump( + { + NAVIGATION_CONFIG_FILE_KEY: "nav_config.yaml", + "meta": {"last_updated": "01-01-2026_00-00-00"}, + "metric_map": "test_map", + "name": "test_map", + "pointset": "test_map", + "definitions": {"default_bt": ""}, + "actions": {"navigate_to_pose": {"action_server": "/inline"}}, + "nodes": [], + } + ), + encoding="utf-8", + ) + + loaded, layout = load_tmap2_file(main_path, return_layout=True) + + assert loaded["definitions"]["default_bt"] == "" + assert loaded["actions"]["navigate_to_pose"]["action_server"] == "/inline" + assert layout["section_sources"] == { + "definitions": "main", + "actions": "main", + } + + def test_save_tmap2_file_preserves_split_layout(self, tmp_path): + """Saving a split map keeps definitions/actions in the sidecar file.""" + main_path = tmp_path / "map.tmap2.yaml" + config_path = tmp_path / "nav_config.yaml" + tmap = { + NAVIGATION_CONFIG_FILE_KEY: "nav_config.yaml", + "meta": {"last_updated": "01-01-2026_00-00-00"}, + "metric_map": "test_map", + "name": "test_map", + "pointset": "test_map", + "definitions": {"default_bt": ""}, + "actions": { + "navigate_to_pose": { + "action_type": "nav2_msgs.action.NavigateToPose", + "action_server": "/navigate_to_pose", + "composable": False, + } + }, + "nodes": [], + } + layout = { + "main_path": str(main_path), + NAVIGATION_CONFIG_FILE_KEY: "nav_config.yaml", + "config_path": str(config_path), + "section_sources": { + "definitions": "external", + "actions": "external", + }, + } + + save_tmap2_file(tmap, main_path, layout=layout) + + main_data = yaml.safe_load(main_path.read_text(encoding="utf-8")) + config_data = yaml.safe_load(config_path.read_text(encoding="utf-8")) + reloaded = load_tmap2_file(main_path) + + assert main_data[NAVIGATION_CONFIG_FILE_KEY] == "nav_config.yaml" + assert "definitions" not in main_data + assert "actions" not in main_data + assert config_data["definitions"]["default_bt"] == "" + assert "navigate_to_pose" in config_data["actions"] + assert reloaded == tmap + + def test_save_tmap2_file_keeps_inline_sections_inline(self, tmp_path): + """Existing sidecar files are left alone when sections are sourced inline.""" + main_path = tmp_path / "map.tmap2.yaml" + config_path = tmp_path / "nav_config.yaml" + config_path.write_text( + yaml.safe_dump({"definitions": {"default_bt": ""}}), + encoding="utf-8", + ) + tmap = { + NAVIGATION_CONFIG_FILE_KEY: "nav_config.yaml", + "meta": {"last_updated": "01-01-2026_00-00-00"}, + "metric_map": "test_map", + "name": "test_map", + "pointset": "test_map", + "definitions": {"default_bt": ""}, + "actions": {"navigate_to_pose": {"action_server": "/inline"}}, + "nodes": [], + } + layout = { + "main_path": str(main_path), + NAVIGATION_CONFIG_FILE_KEY: "nav_config.yaml", + "config_path": str(config_path), + "section_sources": { + "definitions": "main", + "actions": "main", + }, + } + + save_tmap2_file(tmap, main_path, layout=layout) + + main_data = yaml.safe_load(main_path.read_text(encoding="utf-8")) + config_data = yaml.safe_load(config_path.read_text(encoding="utf-8")) + + assert main_data["definitions"]["default_bt"] == "" + assert main_data["actions"]["navigate_to_pose"]["action_server"] == "/inline" + assert config_data["definitions"]["default_bt"] == "" + + +# ---------- get_node_from_tmap2 ---------------------------------------- + +class TestGetNodeFromTmap2: + """Tests for get_node_from_tmap2.""" + + def test_existing_node(self, sample_tmap): + """Returns the matching node entry dict.""" + result = get_node_from_tmap2(sample_tmap, "WP1") + assert result is not None + assert result["node"]["name"] == "WP1" + + def test_second_node(self, sample_tmap): + """Can find a node that is not first in the list.""" + result = get_node_from_tmap2(sample_tmap, "WP2") + assert result is not None + assert result["node"]["name"] == "WP2" + + def test_nonexistent_node(self, sample_tmap): + """Returns None when node name is not in the map.""" + result = get_node_from_tmap2(sample_tmap, "MISSING") + assert result is None + + def test_empty_map(self): + """Returns None for an empty map.""" + result = get_node_from_tmap2({"nodes": []}, "WP1") + assert result is None + + +# ---------- get_edge_from_id_tmap2 ------------------------------------- + +class TestGetEdgeFromIdTmap2: + """Tests for get_edge_from_id_tmap2.""" + + def test_existing_edge(self, sample_tmap): + """Returns the matching edge dict.""" + result = get_edge_from_id_tmap2(sample_tmap, "WP1", "WP1_WP2") + assert result is not None + assert result["edge_id"] == "WP1_WP2" + assert result["node"] == "WP2" + + def test_second_edge(self, sample_tmap): + """Can find an edge that is not the first one.""" + result = get_edge_from_id_tmap2(sample_tmap, "WP1", "WP1_WP3") + assert result is not None + assert result["edge_id"] == "WP1_WP3" + + def test_nonexistent_edge(self, sample_tmap): + """Returns None when edge_id doesn't exist on the node.""" + result = get_edge_from_id_tmap2(sample_tmap, "WP1", "MISSING_EDGE") + assert result is None + + def test_nonexistent_node(self, sample_tmap): + """Returns None when node doesn't exist.""" + result = get_edge_from_id_tmap2(sample_tmap, "MISSING", "WP1_WP2") + assert result is None + + def test_node_with_no_edges(self, sample_tmap): + """Returns None when the node has an empty edges list.""" + result = get_edge_from_id_tmap2(sample_tmap, "WP2", "anything") + assert result is None diff --git a/topological_navigation/test/test_topo_stats.py b/topological_navigation/test/test_topo_stats.py new file mode 100644 index 00000000..16b8af60 --- /dev/null +++ b/topological_navigation/test/test_topo_stats.py @@ -0,0 +1,481 @@ +"""Tests for ``topo_stats.py`` – the topological navigation statistics CLI.""" + +import sys +import io +import tempfile +from pathlib import Path +from unittest.mock import patch + +import pytest +import yaml + +from topological_navigation.nav_stats_db import NavStatsDB, compute_map_hash + +# --------------------------------------------------------------------------- +# Minimal map YAML fixtures +# --------------------------------------------------------------------------- + +_MAP_YAML = """\ +meta: + origin: + latitude: 51.2096316575512 + longitude: 0.4946125429852941 +name: Driscoll Field +pointset: driscoll_field +nodes: + - meta: + node: WP1 + map: driscoll_field + pointset: driscoll_field + node: + name: WP1 + edges: + - edge_id: WP1_WP2 + node: WP2 + action: navigate_to_pose + properties: + max_speed: 0.5 + weight: 1.0 + pose: + position: {x: 0.0, y: 0.0, z: 0.0} + orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0} + - meta: + node: WP2 + map: driscoll_field + pointset: driscoll_field + node: + name: WP2 + edges: [] + pose: + position: {x: 10.0, y: 0.0, z: 0.0} + orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0} +""" + +_MAP_HASH = compute_map_hash(_MAP_YAML) + + +@pytest.fixture +def db_path(tmp_path): + return str(tmp_path / "stats.db") + + +@pytest.fixture +def populated_db(db_path): + """Database with one stored map and several traversal records.""" + db = NavStatsDB(db_path) + db.store_map(_MAP_YAML) + for status in ["success", "success", "failed", "aborted"]: + db.record_traversal( + map_name="Driscoll Field", + map_hash=_MAP_HASH, + edge_id="WP1_WP2", + origin="WP1", + target="WP2", + status=status, + duration_s=10.0, + edge_length=10.0, + ) + db.close() + return db_path + + +# --------------------------------------------------------------------------- +# Helper: run the CLI and capture stdout / exit code +# --------------------------------------------------------------------------- + +def _run(args, capsys=None): + """Run topo_stats main() with *args* (list of str). + + Returns (stdout_text, exit_code). + """ + from topological_navigation.scripts.topo_stats import main + + with patch("sys.argv", ["topo_stats"] + args): + try: + main() + except SystemExit as e: + exit_code = e.code or 0 + else: + exit_code = 0 + + captured = capsys.readouterr() if capsys else None + return (captured.out if captured else ""), exit_code + + +# --------------------------------------------------------------------------- +# map list +# --------------------------------------------------------------------------- + +def test_map_list_empty(db_path, capsys): + out, rc = _run([db_path, "map", "list"], capsys) + assert rc == 0 + assert "No maps" in out + + +def test_map_list_shows_map(populated_db, capsys): + out, rc = _run([populated_db, "map", "list"], capsys) + assert rc == 0 + assert "Driscoll Field" in out + assert _MAP_HASH in out + + +# --------------------------------------------------------------------------- +# map show +# --------------------------------------------------------------------------- + +def test_map_show(populated_db, capsys): + out, rc = _run([populated_db, "map", "show", "Driscoll Field"], capsys) + assert rc == 0 + data = yaml.safe_load(out) + assert data["map_name"] == "Driscoll Field" + assert data["map_hash"] == _MAP_HASH + assert abs(data["latitude"] - 51.2096316575512) < 1e-6 + + +def test_map_show_by_hash(populated_db, capsys): + out, rc = _run([populated_db, "map", "show", _MAP_HASH], capsys) + assert rc == 0 + data = yaml.safe_load(out) + assert data["map_hash"] == _MAP_HASH + + +def test_map_show_not_found(db_path, capsys): + _out, rc = _run([db_path, "map", "show", "nonexistent"], capsys) + assert rc == 1 + + +# --------------------------------------------------------------------------- +# map export / import +# --------------------------------------------------------------------------- + +def test_map_export(populated_db, capsys): + out, rc = _run([populated_db, "map", "export", "Driscoll Field"], capsys) + assert rc == 0 + assert "Driscoll Field" in out + parsed = yaml.safe_load(out) + assert parsed["name"] == "Driscoll Field" + + +def test_map_import_and_list(db_path, tmp_path, capsys): + # Write map to a temp YAML file + p = tmp_path / "mymap.yaml" + p.write_text(_MAP_YAML, encoding="utf-8") + _out, rc = _run([db_path, "map", "import", str(p)], capsys) + assert rc == 0 + out, rc2 = _run([db_path, "map", "list"], capsys) + assert rc2 == 0 + assert "Driscoll Field" in out + + +def test_map_import_missing_file(db_path, capsys): + _out, rc = _run([db_path, "map", "import", "/nonexistent/path.yaml"], capsys) + assert rc == 1 + + +# --------------------------------------------------------------------------- +# map rm +# --------------------------------------------------------------------------- + +def test_map_rm(populated_db, capsys): + _out, rc = _run([populated_db, "map", "rm", "Driscoll Field"], capsys) + assert rc == 0 + out2, rc2 = _run([populated_db, "map", "list"], capsys) + assert "Driscoll Field" not in out2 + + +def test_map_rm_not_found(db_path, capsys): + _out, rc = _run([db_path, "map", "rm", "nonexistent"], capsys) + assert rc == 1 + + +# --------------------------------------------------------------------------- +# map stats +# --------------------------------------------------------------------------- + +def test_map_stats(populated_db, capsys): + out, rc = _run([populated_db, "map", "stats", "Driscoll Field"], capsys) + assert rc == 0 + assert "num_nodes" in out + assert "num_edges" in out + assert "total_length_m" in out + assert "bbox_area_sqm" in out + # The simple map has 2 nodes, 1 edge, length=10.0 + assert "2" in out # num_nodes + assert "1" in out # num_edges + assert "10.0" in out + + +def test_map_stats_not_found(db_path, capsys): + _out, rc = _run([db_path, "map", "stats", "nonexistent"], capsys) + assert rc == 1 + + +# --------------------------------------------------------------------------- +# traversals summary +# --------------------------------------------------------------------------- + +def test_traversals_summary(populated_db, capsys): + out, rc = _run([populated_db, "traversals", "summary"], capsys) + assert rc == 0 + assert "Driscoll Field" in out + assert "4" in out # total traversals + + +def test_traversals_summary_empty(db_path, capsys): + out, rc = _run([db_path, "traversals", "summary"], capsys) + assert rc == 0 + assert "No traversal" in out + + +def test_traversals_summary_with_filter(populated_db, capsys): + out, rc = _run( + [populated_db, "traversals", "summary", "--filter", "status = 'success'"], + capsys, + ) + assert rc == 0 + assert "2" in out # 2 successes + + +# --------------------------------------------------------------------------- +# traversals edge_stats +# --------------------------------------------------------------------------- + +def test_edge_stats(populated_db, capsys): + out, rc = _run( + [populated_db, "traversals", "edge_stats", "Driscoll Field"], + capsys, + ) + assert rc == 0 + data = yaml.safe_load(out) + assert data["map_name"] == "Driscoll Field" + assert data["map_hash"] == _MAP_HASH + es = data["edge_statistics"]["WP1_WP2"] + assert es["total_traversals"] == 4 + assert es["success"] == 2 + assert es["failed"] == 1 + assert es["aborted"] == 1 + + +def test_edge_stats_with_filter(populated_db, capsys): + out, rc = _run( + [populated_db, "traversals", "edge_stats", "Driscoll Field", + "--filter", "status = 'success'"], + capsys, + ) + assert rc == 0 + data = yaml.safe_load(out) + es = data["edge_statistics"]["WP1_WP2"] + assert es["total_traversals"] == 2 + assert es["success"] == 2 + + +def test_edge_stats_map_not_found(db_path, capsys): + _out, rc = _run( + [db_path, "traversals", "edge_stats", "nonexistent"], + capsys, + ) + assert rc == 1 + + +# --------------------------------------------------------------------------- +# traversals map_stats +# --------------------------------------------------------------------------- + +def test_map_stats_traversals(populated_db, capsys): + out, rc = _run( + [populated_db, "traversals", "map_stats", "Driscoll Field"], + capsys, + ) + assert rc == 0 + data = yaml.safe_load(out) + assert data["map_name"] == "Driscoll Field" + assert data["map_hash"] == _MAP_HASH + assert data["total_traversals"] == 4 + assert data["outcomes"]["success"] == 2 + assert data["outcomes"]["failed"] == 1 + assert data["outcomes"]["aborted"] == 1 + assert data["outcomes"]["success_pct"] == 50.0 + + +def test_map_stats_traversals_topn(populated_db, capsys): + out, rc = _run( + [populated_db, "traversals", "map_stats", "Driscoll Field", + "--topn_failures=1", "--topn_success=1", "--topn_aborted=1"], + capsys, + ) + assert rc == 0 + data = yaml.safe_load(out) + assert "top_edges_by_failures" in data + assert "top_edges_by_success" in data + assert "top_edges_by_aborted" in data + assert data["top_edges_by_failures"][0]["edge_id"] == "WP1_WP2" + + +def test_map_stats_traversals_map_not_found(db_path, capsys): + _out, rc = _run( + [db_path, "traversals", "map_stats", "nonexistent"], + capsys, + ) + assert rc == 1 + + +# --------------------------------------------------------------------------- +# map merge +# --------------------------------------------------------------------------- + +def test_map_merge(populated_db, db_path, capsys): + _out, rc = _run([db_path, "map", "merge", populated_db], capsys) + assert rc == 0 + out, rc2 = _run([db_path, "map", "list"], capsys) + assert rc2 == 0 + assert "Driscoll Field" in out + out2, rc3 = _run([db_path, "traversals", "summary"], capsys) + assert rc3 == 0 + assert "4" in out2 + + +def test_map_merge_missing_source(db_path, capsys): + _out, rc = _run([db_path, "map", "merge", "/nonexistent/other.db"], capsys) + assert rc == 1 + + +# --------------------------------------------------------------------------- +# coverage summary +# --------------------------------------------------------------------------- + +def test_coverage_summary_single_map(populated_db, capsys): + out, rc = _run( + [populated_db, "coverage", "summary", "-m", "Driscoll Field"], + capsys, + ) + assert rc == 0 + assert "Coverage Summary" in out + assert "Selected edges | 1" in out + assert "Covered edges | 1" in out + + +def test_coverage_summary_all_maps(populated_db, capsys): + out, rc = _run( + [populated_db, "coverage", "summary", "-a"], + capsys, + ) + assert rc == 0 + assert "Coverage Summary" in out + + +def test_coverage_summary_requires_selection(populated_db, capsys): + _out, rc = _run([populated_db, "coverage", "summary"], capsys) + assert rc != 0 + + +def test_coverage_summary_map_not_found(populated_db, capsys): + _out, rc = _run( + [populated_db, "coverage", "summary", "-m", "nonexistent"], + capsys, + ) + assert rc == 1 + + +def test_coverage_summary_name_filter(populated_db, capsys): + out, rc = _run( + [populated_db, "coverage", "summary", "-m", "Driscoll Field", + "--filter", "name:WP1"], + capsys, + ) + assert rc == 0 + assert "Selected edges | 1" in out + + +def test_coverage_summary_name_filter_no_match(populated_db, capsys): + out, rc = _run( + [populated_db, "coverage", "summary", "-m", "Driscoll Field", + "--filter", "name:NoSuchNode*"], + capsys, + ) + assert rc == 0 + assert "Selected edges | 0" in out + + +def test_coverage_summary_default_min_success_is_two(populated_db, capsys): + # WP1_WP2 has exactly 2 recorded successes; default threshold covers it. + out, rc = _run( + [populated_db, "coverage", "summary", "-m", "Driscoll Field"], + capsys, + ) + assert rc == 0 + assert "Covered edges | 1" in out + + +def test_coverage_summary_min_success_raises_threshold(populated_db, capsys): + # Requiring 3 successes makes the (2-success) edge uncovered. + out, rc = _run( + [populated_db, "coverage", "summary", "-m", "Driscoll Field", + "--min-success", "3"], + capsys, + ) + assert rc == 0 + assert "Covered edges | 0" in out + + +def test_coverage_summary_min_success_lowers_threshold(populated_db, capsys): + out, rc = _run( + [populated_db, "coverage", "summary", "-m", "Driscoll Field", + "--min-success", "1"], + capsys, + ) + assert rc == 0 + assert "Covered edges | 1" in out + + +def test_coverage_summary_min_success_invalid_value(populated_db, capsys): + _out, rc = _run( + [populated_db, "coverage", "summary", "-m", "Driscoll Field", + "--min-success", "0"], + capsys, + ) + assert rc == 1 + + +# --------------------------------------------------------------------------- +# coverage report +# --------------------------------------------------------------------------- + +def test_coverage_report_stdout(populated_db, capsys): + out, rc = _run( + [populated_db, "coverage", "report", "-m", "Driscoll Field"], + capsys, + ) + assert rc == 0 + assert "Route Coverage Sign-off Report" in out + assert "WP1_WP2" in out + assert "Per-Edge Detail" in out + + +def test_coverage_report_to_file(populated_db, tmp_path, capsys): + out_file = tmp_path / "report.md" + _out, rc = _run( + [populated_db, "coverage", "report", "-m", "Driscoll Field", + "-o", str(out_file)], + capsys, + ) + assert rc == 0 + content = out_file.read_text(encoding="utf-8") + assert "Route Coverage Sign-off Report" in content + assert "WP1_WP2" in content + + +# --------------------------------------------------------------------------- +# coverage svg +# --------------------------------------------------------------------------- + +def test_coverage_svg(populated_db, tmp_path, capsys): + out_file = tmp_path / "coverage.svg" + _out, rc = _run( + [populated_db, "coverage", "svg", "-m", "Driscoll Field", + "-o", str(out_file)], + capsys, + ) + assert rc == 0 + content = out_file.read_text(encoding="utf-8") + assert " geometry.nodes["A"].point[0] + + origin_x, origin_y = raster.origin + top_y = origin_y + ((raster.image.height - 1) * raster.resolution) + robot_px = int(round((robot_position[0] - origin_x) / raster.resolution)) + robot_py = int(round((top_y - robot_position[1]) / raster.resolution)) + assert raster.image.getpixel((robot_px, robot_py)) == FREE_VALUE diff --git a/topological_navigation/test/test_validate_map.py b/topological_navigation/test/test_validate_map.py new file mode 100644 index 00000000..04b0b14d --- /dev/null +++ b/topological_navigation/test/test_validate_map.py @@ -0,0 +1,305 @@ +"""Tests for validate_map module. + +Covers find_schema_file, load_yaml_file, and validate_map. +""" + +import os +import tempfile +import textwrap + +import pytest +import yaml + +from topological_navigation.tmap_utils import ( + DEFAULT_NAVIGATION_CONFIG_FILENAME, + NAVIGATION_CONFIG_FILE_KEY, +) +from topological_navigation.validate_map import ( + find_schema_file, + find_navigation_config_schema_file, + load_yaml_file, + validate_map, +) + + +# ---------- Helpers / fixtures ----------------------------------------- + +_FIXTURES = os.path.join(os.path.dirname(__file__), "fixtures") +_CONFIG = os.path.join(os.path.dirname(__file__), os.pardir, "config") +_SCHEMA = os.path.join(_CONFIG, "tmap-schema.yaml") +_NAV_CONFIG_SCHEMA = os.path.join(_CONFIG, "navigation-config-schema.yaml") +_SIMPLE_MAP = os.path.join(_FIXTURES, "simple_map.yaml") +_COMPLEX_MAP = os.path.join(_FIXTURES, "complex_map.yaml") + + +def _write_tmp_yaml(data, suffix=".yaml"): + """Write *data* to a temp file and return its path.""" + fd, path = tempfile.mkstemp(suffix=suffix) + with os.fdopen(fd, "w") as fh: + yaml.dump(data, fh) + return path + + +# ---------- find_schema_file ------------------------------------------- + +class TestFindSchemaFile: + """Tests for find_schema_file.""" + + def test_returns_path_or_none(self): + """Function returns a string path or None.""" + result = find_schema_file() + assert result is None or isinstance(result, str) + + def test_returned_path_exists_if_not_none(self): + """If a path is returned, the file must exist.""" + result = find_schema_file() + if result is not None: + assert os.path.isfile(result) + + def test_navigation_config_schema_exists_if_found(self): + """The sidecar schema is discoverable in local/package installs.""" + result = find_navigation_config_schema_file() + assert result is None or os.path.isfile(result) + + +# ---------- load_yaml_file --------------------------------------------- + +class TestLoadYamlFile: + """Tests for load_yaml_file.""" + + def test_load_valid_yaml(self): + """Successfully loads a valid YAML file.""" + path = _write_tmp_yaml({"key": "value"}) + try: + data = load_yaml_file(path) + assert data == {"key": "value"} + finally: + os.unlink(path) + + def test_load_nonexistent_raises(self): + """Raises FileNotFoundError for a missing file.""" + with pytest.raises(FileNotFoundError): + load_yaml_file("/tmp/nonexistent_file_12345.yaml") + + def test_load_invalid_yaml_raises(self): + """Raises ValueError for syntactically broken YAML.""" + fd, path = tempfile.mkstemp(suffix=".yaml") + with os.fdopen(fd, "w") as fh: + fh.write(":\n - :\n bad: [unclosed\n") + try: + with pytest.raises(ValueError): + load_yaml_file(path) + finally: + os.unlink(path) + + +# ---------- validate_map ----------------------------------------------- + +class TestValidateMap: + """Tests for validate_map.""" + + @pytest.fixture(autouse=True) + def _skip_if_no_schema(self): + """Skip tests if schema file cannot be located.""" + if not os.path.isfile(_SCHEMA): + pytest.skip("tmap-schema.yaml not found") + + def test_simple_map_valid(self): + """simple_map.yaml should pass validation.""" + is_valid, msg = validate_map(_SIMPLE_MAP, _SCHEMA) + assert is_valid, msg + + def test_complex_map_valid(self): + """complex_map.yaml should pass validation.""" + is_valid, msg = validate_map(_COMPLEX_MAP, _SCHEMA) + assert is_valid, msg + + def test_verbose_flag(self, capsys): + """Verbose mode prints extra information.""" + validate_map(_SIMPLE_MAP, _SCHEMA, verbose=True) + captured = capsys.readouterr() + assert "Using schema" in captured.out + assert "Validating map" in captured.out + + def test_nonexistent_map(self): + """Validation fails gracefully for missing map file.""" + is_valid, msg = validate_map("/tmp/nonexistent.yaml", _SCHEMA) + assert not is_valid + assert "Error" in msg or "not found" in msg.lower() + + def test_invalid_map_content(self): + """Validation fails for a map that violates the schema.""" + bad = _write_tmp_yaml({"not_a_valid_map": True}) + try: + is_valid, _ = validate_map(bad, _SCHEMA) + assert not is_valid + finally: + os.unlink(bad) + + def test_schema_not_found(self): + """Returns failure when schema file cannot be found.""" + is_valid, msg = validate_map( + _SIMPLE_MAP, "/tmp/no_such_schema.yaml" + ) + assert not is_valid + + def test_schema_auto_detect(self): + """If schema is None, the function tries to auto-detect.""" + # We just verify it doesn't crash; the result depends on the + # runtime environment. + is_valid, msg = validate_map(_SIMPLE_MAP, schema_file=None) + # Either it found the schema and validated, or it didn't + assert isinstance(is_valid, bool) + assert isinstance(msg, str) + + def test_duplicate_node_names_warning(self): + """Duplicate node names generate a warning in the message.""" + data = yaml.safe_load(open(_SIMPLE_MAP)) + # Duplicate the first node + dup = dict(data["nodes"][0]) + data["nodes"].append(dup) + path = _write_tmp_yaml(data) + try: + is_valid, msg = validate_map(path, _SCHEMA) + # Should still be schema-valid but contain a warning + if is_valid: + assert "Duplicate" in msg or "Warning" in msg + finally: + os.unlink(path) + + def test_edge_to_nonexistent_node_warning(self): + """An edge targeting a missing node produces a warning.""" + data = yaml.safe_load(open(_SIMPLE_MAP)) + # Point the first edge to a non-existent node + data["nodes"][0]["node"]["edges"][0]["node"] = "GHOST" + path = _write_tmp_yaml(data) + try: + is_valid, msg = validate_map(path, _SCHEMA) + if is_valid: + assert "non-existent" in msg.lower() or "Warning" in msg + finally: + os.unlink(path) + + def test_split_map_valid(self, tmp_path): + """A main map can validate when actions/definitions live in a sidecar file.""" + config_path = tmp_path / DEFAULT_NAVIGATION_CONFIG_FILENAME + config_path.write_text( + yaml.safe_dump( + { + "definitions": {"default_bt": ""}, + "actions": { + "navigate_to_pose": { + "action_type": "nav2_msgs.action.NavigateToPose", + "action_server": "/navigate_to_pose", + "composable": False, + "action_goal_template": { + "behavior_tree": "${definitions.default_bt}", + }, + } + }, + } + ), + encoding="utf-8", + ) + main_path = tmp_path / "split_map.tmap2.yaml" + main_path.write_text( + yaml.safe_dump( + { + NAVIGATION_CONFIG_FILE_KEY: DEFAULT_NAVIGATION_CONFIG_FILENAME, + "meta": {"last_updated": "01-01-2026_00-00-00"}, + "metric_map": "test_map", + "name": "test_map", + "pointset": "test_map", + "nodes": [], + } + ), + encoding="utf-8", + ) + + is_valid, msg = validate_map(str(main_path), _SCHEMA) + + assert is_valid, msg + + def test_split_map_rejects_invalid_navigation_config(self, tmp_path): + """The actions/definitions sidecar is validated against its own schema.""" + config_path = tmp_path / DEFAULT_NAVIGATION_CONFIG_FILENAME + config_path.write_text( + yaml.safe_dump( + { + "definitions": {"default_bt": ""}, + "actions": { + "navigate_to_pose": { + "action_server": "/navigate_to_pose", + "action_goal_template": {}, + } + }, + } + ), + encoding="utf-8", + ) + main_path = tmp_path / "split_map.tmap2.yaml" + main_path.write_text( + yaml.safe_dump( + { + NAVIGATION_CONFIG_FILE_KEY: DEFAULT_NAVIGATION_CONFIG_FILENAME, + "meta": {"last_updated": "01-01-2026_00-00-00"}, + "metric_map": "test_map", + "name": "test_map", + "pointset": "test_map", + "nodes": [], + } + ), + encoding="utf-8", + ) + + is_valid, msg = validate_map( + str(main_path), + _SCHEMA, + navigation_config_schema_file=_NAV_CONFIG_SCHEMA, + ) + + assert not is_valid + assert "Navigation config validation failed" in msg + + def test_split_map_accepts_explicit_navigation_config(self, tmp_path): + """Validation accepts a sidecar path passed separately from the map.""" + config_path = tmp_path / DEFAULT_NAVIGATION_CONFIG_FILENAME + config_path.write_text( + yaml.safe_dump( + { + "definitions": {"default_bt": ""}, + "actions": { + "navigate_to_pose": { + "action_type": "nav2_msgs.action.NavigateToPose", + "action_server": "/navigate_to_pose", + "action_goal_template": { + "behavior_tree": "${definitions.default_bt}", + }, + } + }, + } + ), + encoding="utf-8", + ) + main_path = tmp_path / "split_map.tmap2.yaml" + main_path.write_text( + yaml.safe_dump( + { + "meta": {"last_updated": "01-01-2026_00-00-00"}, + "metric_map": "test_map", + "name": "test_map", + "pointset": "test_map", + "nodes": [], + } + ), + encoding="utf-8", + ) + + is_valid, msg = validate_map( + str(main_path), + _SCHEMA, + navigation_config_file=str(config_path), + navigation_config_schema_file=_NAV_CONFIG_SCHEMA, + ) + + assert is_valid, msg diff --git a/topological_navigation/tests/README.md b/topological_navigation/tests/README.md deleted file mode 100644 index 9b738a52..00000000 --- a/topological_navigation/tests/README.md +++ /dev/null @@ -1,171 +0,0 @@ -# Topological Navigation tests - -The topological navigation tests are designed to optimise the parameter set of the DWA planner and to check the functionalitites of topological navigation in its execute policy mode. The test are run automatically on our Jenkins server but can also be run locally on your machine to test a new paremeterset. - -## Run test - -Test for your whole worksapce can be run with `catkin_make test` which assumes that `strands_navigation` is present in your ros workspace. If you only want to run the test described here, use `catkin_make test --pkg topological_navigation`. This will only run the critical topological navigation tests. A set of supplementary tests can be run with: - -``` -roslaunch topological_navigation navigation_scenarios.test -rosrun topological_navigation topological_navigation_tester_supplementary.py -``` - -To run the testes from an installed version of topological_navigation do: - -``` -roslaunch topological_navigation navigation_scenarios.test -``` - -and - -``` -rosrun topological_navigation topological_navigation_tester_critical.py -``` - -for the critical tests or - -``` -rosrun topological_navigation topological_navigation_tester_supplementary.py -``` - -for the supplementary tests to test parameter sets. - -This will start all the tests and report the result to the terminal and a log file. - -## Test Scenarios, and Infrastructure - -### Infrastructure - -In order to run the tests, the commands above will start the following nodes: - -* `strands_morse` using the move_base_arena environment -* `mongodb_store` in test mode, creating a new and empty temporary datacentre -* `scitos_2d_navigation` with the correct slam map for the tests -* A static transform publisher with the transformation from `map` to `world` -* `topological_navigation`: - * `monitored_navigation` with all recovery behaviours disabled - * `map_manager.py` - * `fremenserver` - * `localisation.py` - * `navigation.py` - * `execute_policy_server.py` - * `visualise_map.py` - * `travel_time_estimator.py` - * `topological_prediction.py` - * `get_simple_policy.py` -* The test scneario server which is responsible for the test control -* The ros test file `topological_navigation_tester.py` - -### Test Scenarios - -All the test scnearios are based on a simple topological map that has to have a Node called `Start` and a node called `End`. The robot will always be teleported (in simulation) or pushed (on the real robot) to this node and then use policy execution to traverse the edges towards the node called `End`. If the node `End` cannot be reached, the navigation will fail and the scneario_server will trigger the graceful death behaviour, trying to navigate the robot back to the node `Start`. - -The topological maps used for the tests presented here can be found in `strands_morse/mba/maps` and are loaded into the datacentre (if they haven't already been inserted) by the scanario_server. Currently run tests are: - -**Static:** - -* System critical: - * `mb_test0`: Traversing a 2m wide l-shaped corridor. -* Supplementary: - * `mb_test1`: The robot starting 10cm away from a wall facing it straight on (0 degrees) - * `mb_test2`: The robot starting 10cm away from a wall facing it turned to the left (-45 degrees) - * `mb_test3`: The robot starting 10cm away from a wall facing it turned to the right (+45 degrees) - * `mb_test4`: Traversing a 1.55m wide straight corridor with .55m wide chairs on one side. - * `mb_test5`: Traversing a 2.1m wide straight corridor with .55m wide chairs on both sides. - * `mb_test6`: Cross a 80cm wide door. - * `mb_test7`: Cross a 70cm wide door. - * `mb_test8`: The robot is trapped in a corner and has to reach a goal behind it. - * `mb_test9`: Traverse a 1m wide straight corridor. - * `mb_test10`: Traverse a 1m wide l-shaped corridor. - * `mb_test11`: Wheelchair blocking an intermediate node in open space. - * `mb_test12`: Wheelchair blocking final node in open space. Graceful fail has to be tru to pass this test as the node itself can never be reached precisely. - * `mb_test13`: Human blocking an intermediate node in open space. - * `mb_test14`: Human blocking final node in open space. Graceful fail has to be tru to pass this test as the node itself can never be reached precisely. - * `mb_test15`: Non-SLAM map chairs on one side of 2m wide l-shaped corridor. - * `mb_test16`: Non-SLAM map wheelchairs on one side of 2m wide l-shaped corridor. - * `mb_test17`: Non-SLAM map wheelchairs block 2m wide l-shaped corridor after intermediate waypoint. Graceful fail has to be tru to pass this test as the node itself can never be reached. - * `mb_test18`: Non-SLAM map static humans block 2m wide l-shaped corridor after intermediate waypoint. Graceful fail has to be tru to pass this test as the node itself can never be reached. - -**Dynamic** - -Coming soon - -### Scenario Server control - -The scenario server can also be used without the unit test file for tests on the real robot. Running - -``` -roslaunch topological_navigation navigation_scenarios.test robot:=true map_dir:="path_to_topologicalmaps" -``` - -will start only the scneario server, the simple policy generation, and the joypad control. This assumes that everything on the robot, up to topological navigation, is running. The `map_dir` argument specifies a directory which holds the topological maps that you want to use for testing. If this is given, the maps will automatically inserted into the datacentre. If the maps have been inserted previously, the server will print a warning and skip the insertion. If the `map_dir` argument is omitted, no maps are inserted. The scneario server then offers 3 simple services: - -* `/scneario_server/load ` expects a string which is the name of the topological map you want to test. Keep in mind that this has to have the node `Start` and `End`. -* `/scenario_server/reset` is an empty service and is called to reset the data recording and the robot position. The robot position, however, cannot as easily be changed in real life as it can be in simulation, hence the robot has to be pushed to the starting node and then confirmed via the `A` button on the joypad. The reasoning behind having to push the robot is that the starting position might not be easily reachable via `move_base`. The server will print `+++ Please push the robot to 'Start' +++` where `Start` is the name of the starting node, until the node is reached. Once the node is reached, the server will print `+++ Please confirm correct positioning with A button on joypad: distance 0.65m 180.06deg +++` where distance represents the distance of the current `/robot_pose` to the metric coordinates of the node. In simulation this will just teleport the robot to the correct node. -* `/scneario_server/start` starts the policy execution. Returns - - ``` -bool nav_success -bool graceful_fail -bool human_success -float64 min_distance_to_human -float64 mean_speed -float64 distance_travelled -float64 travel_time - ``` - -**Joypad control** - -For convenience, a joypad control of the `reset` and `start` service is provided. The `load` service still has to be called manually to tell the server which map to use. The joypad control then offers an easy way to interact with the scenario server during the tests: - -* `A`: Toggle between `start` and `reset`. -* `B`: Confirm current selection. - -If in doubt, press `A` and look for the output on the terminal. - -**Creating Topological maps for testing** - -The topological map used for each test has to be a different one and the nodes have to conform to a specific naming scheme. By default, the start node has to be called `Start` and the goal has to be called `End`. This can be changed in `topologcial_navigation/tests/conf/scenario_server.yaml`. The easiest way to create these maps is: - -1. Start topological navigation with `roslaunch topological_navigation topologocal_navigation_empty_map.launch map:=` where `map_name` will be the name of your new map and cannot be the name of an existing one. -1. Drive the robot to the positions of the nodes you want to create and use the `add_rm_node` interactive marker in rviz to create a new node. -1. Use the interactive `edges` marker in rviz to delete unwanted edges. -1. Rename the start and end node to `Start` and `End` using `rosrun topological_utils rename_node ` -1. This map can now be loaded with `/scenario_server/load ` - - -**Creating scnearios with obstacles that are not in the SLAM map** - -For this purpose, there are `Chair`s, `OfficeChair`s, `WheelChair`s, and `StaticHuman`s present in the current test environment that can be positioned via topological nodes. The exact obstacle types are defined in the `conf/scenario_server.yaml` under `obstacle_types`; The names used have to be the variable name of the obstacle in the morse environment. Obstacle types have to be lower case, node names can be camel case to enhance readability. Currently, in the test environment, each object has 10 instances so you can only use 10 of any single object. The Objects are positioned according to topological nodes following a naming scheme: `ObstacleStaticHuman1` for example positions a static human model on this node. `Obstacle` is the `obstacle_node_prefix` defined in the `conf/scneario_server.yaml`, `StaticHuman` is the identifier of the obstacle type (if this omitted, an arbitrary object will be used), and `1` is just an arbitrary number to make the node name unique. When creating the topoligocal map, make sure that all edges from and to obstacle nodes are removed. Additionally, the nodes need to define a `localise_by_topic` json string so the robot will never localise itself based on these nodes. In the current simulation, we use the charging topic, because the robot will never charge and hence never localise itself at these nodes. We have to use an existing topic otherwise topological navigation fails. Example node: - -``` -- meta: - map: mb_arena - node: ObstacleStaticHuman1 - pointset: mb_test16 - node: - edges: [] - localise_by_topic: '{"topic": "battery_state", "field": "charging", "val": true}' - map: mb_arena - name: ObstacleStaticHuman1 - pointset: mb_test16 - pose: - orientation: - w: 0.816770076752 - ... - position: - x: -4.58532047272 - ... - verts: - - x: 0.689999997616 - y: 0.287000000477 - ... - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 -``` - -Where the important bit is the `localise_by_topic: '{"topic": "battery_state", "field": "charging", "val": true}'` entry. - -After the map has been loaded the obstacles will be spawned at (or better moved to) the respective nodes before the robot starts navigating. Before each test the arena is cleared to make sure that no obstacles linger. - diff --git a/topological_navigation/tests/conf/scenario_server.yaml b/topological_navigation/tests/conf/scenario_server.yaml deleted file mode 100644 index e9618d95..00000000 --- a/topological_navigation/tests/conf/scenario_server.yaml +++ /dev/null @@ -1,10 +0,0 @@ -robot_start_node: Start -robot_goal_node: End -obstacle_node_prefix: Obstacle -obstacle_types: - - chair - - officechair - - wheelchair - - statichuman -success_metrics: - nav_timeout: 60.0 # 0 for inf diff --git a/topological_navigation/tests/conf/test.tmap2 b/topological_navigation/tests/conf/test.tmap2 deleted file mode 100644 index ef103ad0..00000000 --- a/topological_navigation/tests/conf/test.tmap2 +++ /dev/null @@ -1,130 +0,0 @@ -meta: - last_updated: 2022-03-02_10-07-31 -metric_map: map_2d -name: new_map -nodes: -- meta: - map: map_2d - node: WayPoint1 - pointset: new_map - node: - edges: - - action: NavigateToPose - action_type: move_base_msgs/MoveBaseGoal - config: &id001 [] - edge_id: WayPoint1_WayPoint2 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint2 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: WayPoint1 - parent_frame: map - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: 'True' - verts: - - x: 0.692909649383465 - y: 0.2870125742738173 - - x: 0.2870125742738174 - y: 0.692909649383465 - - x: -0.2870125742738173 - y: 0.692909649383465 - - x: -0.692909649383465 - y: 0.28701257427381743 - - x: -0.6929096493834651 - y: -0.28701257427381727 - - x: -0.28701257427381777 - y: -0.6929096493834649 - - x: 0.2870125742738169 - y: -0.6929096493834652 - - x: 0.6929096493834649 - y: -0.28701257427381777 -- meta: - map: map_2d - node: WayPoint2 - pointset: new_map - node: - edges: - - action: NavigateToPose - action_type: move_base_msgs/MoveBaseGoal - config: *id001 - edge_id: WayPoint2_WayPoint1 - fail_policy: fail - fluid_navigation: true - goal: - target_pose: - header: - frame_id: $node.parent_frame - pose: $node.pose - node: WayPoint1 - recovery_behaviours_config: '' - restrictions_planning: 'True' - restrictions_runtime: 'True' - localise_by_topic: '' - name: WayPoint2 - parent_frame: map - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 10.0 - y: 10.0 - z: 0.0 - properties: - xy_goal_tolerance: 0.3 - yaw_goal_tolerance: 0.1 - restrictions_planning: 'True' - restrictions_runtime: 'True' - verts: - - x: 0.692909649383465 - y: 0.2870125742738173 - - x: 0.2870125742738174 - y: 0.692909649383465 - - x: -0.2870125742738173 - y: 0.692909649383465 - - x: -0.692909649383465 - y: 0.28701257427381743 - - x: -0.6929096493834651 - y: -0.28701257427381727 - - x: -0.28701257427381777 - y: -0.6929096493834649 - - x: 0.2870125742738169 - y: -0.6929096493834652 - - x: 0.6929096493834649 - y: -0.28701257427381777 -pointset: new_map -transformation: - child: topo_map - parent: map - rotation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - translation: - x: 0.0 - y: 0.0 - z: 0.0 diff --git a/topological_navigation/tests/map_manager.test b/topological_navigation/tests/map_manager.test deleted file mode 100644 index de63bccd..00000000 --- a/topological_navigation/tests/map_manager.test +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/topological_navigation/tests/map_manager_tester.py b/topological_navigation/tests/map_manager_tester.py deleted file mode 100755 index d343e8a0..00000000 --- a/topological_navigation/tests/map_manager_tester.py +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env python -""" -Created on Fri Jan 22 10:34:58 2021 - -@author: Adam Binch (abinch@sagarobotics.com) -""" -######################################################################################################### -import unittest, rostest -import rospy, json - -from std_msgs.msg import String -from topological_navigation_msgs.srv import GetEdgesBetweenNodes, GetEdgesBetweenNodesRequest - -PKG = "topological_navigation" - - -class MapManagerTester(unittest.TestCase): - - def __init__(self, *args): - super(MapManagerTester, self).__init__(*args) - rospy.init_node('map_manager_tester') - - self.map_received = False - rospy.Subscriber("/topological_map_2", String, self.map_callback) - - - def map_callback(self, msg): - self.tmap2 = json.loads(msg.data) - self.map_received = True - - - def test_map_manager(self): - - rospy.sleep(5.0) - self.assertTrue(self.map_received) - - try: - s = rospy.ServiceProxy("/topological_map_manager2/get_edges_between_nodes", GetEdgesBetweenNodes) - s.wait_for_service(timeout=5.0) - - req = GetEdgesBetweenNodesRequest() - req.nodea = "WayPoint1" - req.nodeb = "WayPoint2" - res = s(req) - - self.assertGreater(len(res.ids_a_to_b), 0) - self.assertGreater(len(res.ids_b_to_a), 0) - - self.assertEqual(res.ids_a_to_b[0], "WayPoint1_WayPoint2") - self.assertEqual(res.ids_b_to_a[0], "WayPoint2_WayPoint1") - - except (rospy.ServiceException, rospy.ROSInterruptException) as e: - rospy.logfatal(e) - self.assertTrue(False) -######################################################################################################### - - -######################################################################################################### -if __name__ == "__main__": - rostest.rosrun(PKG, "map_manager_tester", MapManagerTester) -######################################################################################################### \ No newline at end of file diff --git a/topological_navigation/tests/navigation_scenarios.test b/topological_navigation/tests/navigation_scenarios.test deleted file mode 100644 index f2b13f85..00000000 --- a/topological_navigation/tests/navigation_scenarios.test +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/topological_navigation/tests/navigation_test_joypad_control.py b/topological_navigation/tests/navigation_test_joypad_control.py deleted file mode 100755 index 489a6571..00000000 --- a/topological_navigation/tests/navigation_test_joypad_control.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -import rospy -from scitos_teleop.msg import action_buttons -from topological_navigation_msgs.srv import RunTopoNavTestScenario -from std_srvs.srv import Empty - - -class JoyPadControl(object): - _start = "start" - _reset = "reset" - - def __init__(self, name): - rospy.loginfo("Starting %s ..." % name) - self.action = self._start - rospy.Subscriber("/teleop_joystick/action_buttons", action_buttons, self.callback, queue_size=1) - rospy.loginfo("... done") - - def callback(self, msg): - if msg.A: - self.action = self._start if self.action == self._reset else self._reset - rospy.loginfo("+++ Current action '%s'. Press 'B' to confirm or 'A' to toggle. +++" % self.action) - elif msg.B: - if self.action == self._start: - try: - s = rospy.ServiceProxy("/scenario_server/start", RunTopoNavTestScenario) - s.wait_for_service() - rospy.loginfo(s()) - except (rospy.ServiceException, rospy.ROSInterruptException) as e: - rospy.logwarn(e) - elif self.action == self._reset: - try: - s = rospy.ServiceProxy("/scenario_server/reset", Empty) - s.wait_for_service() - s() - except (rospy.ServiceException, rospy.ROSInterruptException) as e: - rospy.logwarn(e) - - -if __name__ == "__main__": - rospy.init_node("navigation_test_joypad_control") - JoyPadControl(rospy.get_name()) - rospy.spin() diff --git a/topological_navigation/tests/scenario_server.py b/topological_navigation/tests/scenario_server.py deleted file mode 100755 index 95ce618f..00000000 --- a/topological_navigation/tests/scenario_server.py +++ /dev/null @@ -1,388 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -""" -Created on Tue Jul 14 11:10:28 2015 - -@author: cdondrup -""" - -import socket -import rospy -from std_srvs.srv import Empty, EmptyResponse -from std_msgs.msg import Header, String -import yaml -import numpy as np -from geometry_msgs.msg import PoseWithCovarianceStamped, Pose, PoseStamped, Point -import actionlib -import actionlib_msgs -from topological_navigation.msg import GotoNodeAction, GotoNodeGoal -from topological_navigation_msgs.msg import ExecutePolicyModeAction, ExecutePolicyModeGoal -from topological_navigation_msgs.srv import LoadTopoNavTestScenario, LoadTopoNavTestScenarioResponse, RunTopoNavTestScenario, RunTopoNavTestScenarioResponse, GetRouteTo -from roslib.packages import find_resource -import time -from topological_navigation_msgs.srv import GetTopologicalMap, GetTopologicalMapRequest -from tf import TransformListener -import tf.transformations as trans -from topological_navigation.load_maps_from_yaml import YamlMapLoader -from scitos_teleop.msg import action_buttons -from scitos_msgs.srv import EnableMotors, ResetBarrierStop, ResetMotorStop - -HOST = 'localhost' -PORT = 4000 -PKG = "topological_navigation" - - -class ScenarioServer(object): - _id = 0 - _loaded = False - _robot_poses = [] - _distances = [0,0] - - def __init__(self, name): - rospy.loginfo("Starting scenario server") - self.robot = rospy.get_param("~robot", False) - conf_file = find_resource("topological_navigation", "scenario_server.yaml")[0] - rospy.loginfo("Reading config file: %s ..." % conf_file) - with open(conf_file,'r') as f: - conf = yaml.load(f) - self._robot_start_node = conf["robot_start_node"] - self._robot_goal_node = conf["robot_goal_node"] - self._obstacle_node_prefix = conf["obstacle_node_prefix"] - self._obstacle_types = conf["obstacle_types"] - self._timeout = conf["success_metrics"]["nav_timeout"] - rospy.loginfo(" ... done") - self._insert_maps() - self.tf = TransformListener() - rospy.Service("~load", LoadTopoNavTestScenario, self.load_scenario) - self.reset_pose = self.reset_pose_robot if self.robot else self.reset_pose_sim - rospy.Service("~reset", Empty, self.reset) - rospy.Service("~start", RunTopoNavTestScenario, self.start) - rospy.loginfo("All done") - - def _insert_maps(self): - map_dir = rospy.get_param("~map_dir", "") - rospy.loginfo("Inserting maps into datacentre...") - if map_dir == "": - rospy.logwarn("No 'map_dir' given. Will not insert maps into datacentre and assume they are present already.") - return - y = YamlMapLoader() - y.insert_maps(y.read_maps(map_dir)) - rospy.loginfo("... done") - - def robot_callback(self, msg): - self._robot_poses.append(msg) - - def _connect_port(self, port): - """ Establish the connection with the given MORSE port""" - sock = None - - for res in socket.getaddrinfo(HOST, port, socket.AF_UNSPEC, socket.SOCK_STREAM): - af, socktype, proto, canonname, sa = res - try: - sock = socket.socket(af, socktype, proto) - except socket.error: - sock = None - continue - try: - sock.connect(sa) - except socket.error: - sock.close() - sock = None - continue - break - - return sock - - def _translate(self, msg, target_tf): - t = self.tf.getLatestCommonTime(target_tf, msg.header.frame_id) - msg.header.stamp=t - new_pose=self.tf.transformPose(target_tf,msg) - return new_pose - - def _clear_costmaps(self): - try: - s = rospy.ServiceProxy("move_base/clear_costmaps", Empty) - s.wait_for_service() - s() - except rospy.ServiceException as e: - rospy.logerr(e) - - def _init_nav(self, pose): - pub = rospy.Publisher('initialpose', PoseWithCovarianceStamped, queue_size=1) - rospy.sleep(1.0) - initialPose = PoseWithCovarianceStamped() - initialPose.header = pose.header - initialPose.pose.pose = pose.pose - p_cov = np.array([0.0]*36) - initialPose.pose.covariance = tuple(p_cov.ravel().tolist()) - pub.publish(initialPose) - - def _get_set_object_pose_command(self, agent, id, pose): - new_pose = self._translate( - msg=pose, - target_tf="/world" - ) - return 'id%d simulation set_object_pose ["%s", "[%f, %f, 0.1]", "[%f, %f, %f, %f]"]\n' \ - % (id, agent, new_pose.pose.position.x, new_pose.pose.position.y, \ - new_pose.pose.orientation.w, new_pose.pose.orientation.x, new_pose.pose.orientation.y, new_pose.pose.orientation.z) - - def robot_start_dist(self, msg): - self._distances = self._get_pose_distance(msg, self._robot_start_pose.pose) - - def reset_pose_robot(self): - rospy.loginfo("Enabling freerun ...") - try: - s = rospy.ServiceProxy("enable_motors", EnableMotors) - s.wait_for_service() - s(False) - except (rospy.ROSInterruptException, rospy.ServiceException) as e: - rospy.logwarn(e) - rospy.loginfo("... enabled") - - while self._robot_start_node != rospy.wait_for_message("current_node", String).data and not rospy.is_shutdown(): - rospy.loginfo("+++ Please push the robot to '%s' +++" % self._robot_start_node) - rospy.sleep(1) - rospy.loginfo("+++ Robot at '%s' +++" % self._robot_start_node) - - while not rospy.is_shutdown(): - sub = rospy.Subscriber("robot_pose", Pose, self.robot_start_dist) - rospy.loginfo("+++ Please confirm correct positioning with A button on joypad: distance %.2fm %.2fdeg +++" %(self._distances[0], self._distances[1])) - if self._robot_start_node != rospy.wait_for_message("current_node", String).data: - self.reset_pose() - return - try: - if rospy.wait_for_message("teleop_joystick/action_buttons", action_buttons, timeout=1.).A: - break - except rospy.ROSException: - pass - sub.unregister() - sub = None - rospy.loginfo("+++ Position confirmed +++") - - rospy.loginfo("Enabling motors, resetting motor stop and barrier stopped ...") - try: - s = rospy.ServiceProxy("enable_motors", EnableMotors) - s.wait_for_service() - s(True) - s = rospy.ServiceProxy("reset_motorstop", ResetMotorStop) - s.wait_for_service() - s() - s = rospy.ServiceProxy("reset_barrier_stop", ResetBarrierStop) - s.wait_for_service() - s() - except (rospy.ROSInterruptException, rospy.ServiceException) as e: - rospy.logwarn(e) - rospy.loginfo("... enabled and reset") - - def _send_socket(self, sock, agent, pose): - sock.send( - self._get_set_object_pose_command( - agent, - self._id, - pose - ) - ) - res = sock.recv(4096) - self._id += 1 - if "FAILURE" in res: - raise Exception(res) - - def _get_quaternion_distance(self, q1, q2): - q1 = (q1.x, q1.y, q1.z, q1.w) - q2 = (q2.x, q2.y, q2.z, q2.w) - return (trans.euler_from_quaternion(q1)[2] - trans.euler_from_quaternion(q2)[2]) * 180/np.pi - - def _get_euclidean_distance(self, p1, p2): - return np.sqrt(np.power(p2.x - p1.x, 2) + np.power(p2.y - p1.y, 2)) - - def _get_pose_distance(self, p1, p2): - e = self._get_euclidean_distance(p1.position, p2.position) - q = self._get_quaternion_distance(p1.orientation, p2.orientation) - return e, q - - def reset_pose_sim(self): - sock = self._connect_port(PORT) - if not sock: - raise Exception("Could not create socket connection to morse") - - # Clean up whole scene - # Create pose outside of map - clear_pose = PoseStamped( - header=Header(stamp=rospy.Time.now(), frame_id="map"), - pose=Pose(position=Point(x=20, y=20, z=0.01)) - ) - - # Moving obstacles to clear_pose - for obstacle in self._obstacle_types: - for idx in range(10): - self._send_socket(sock, obstacle+str(idx), clear_pose) - - # Setting robot and obstacles to correct position - self._send_socket(sock, "robot", self._robot_start_pose) - - if len(self._obstacle_poses) > 0: - for idx, d in enumerate(self._obstacle_poses): - try: - obstacle = max([x for x in self._obstacle_types if x in d["name"]], key=len) - except ValueError: - rospy.logwarn("No obstacle specified for obstacle node '%s', will use '%s'." % (d["name"], self._obstacle_types[0])) - obstacle = self._obstacle_types[0] - rospy.loginfo("Adding obstacle %s%i" % (obstacle,idx)) - self._send_socket(sock, obstacle+str(idx), d["pose"]) - else: - rospy.logwarn("No nodes starting with '%s' found in map. Assuming test without obstacles." % self._obstacle_node_prefix) - - sock.close() - - while not rospy.is_shutdown(): - rpose = rospy.wait_for_message("robot_pose", Pose) - rospy.loginfo("Setting initial amcl pose ...") - self._init_nav(self._robot_start_pose) - dist = self._get_pose_distance(rpose, self._robot_start_pose.pose) - if dist[0] < 0.1 and dist[1] < 10: - break - rospy.sleep(0.2) -# self._robot_start_pose.header.stamp = rospy.Time.now() - rospy.loginfo(" ... pose set.") - - def reset(self, req): - if not self._loaded: - rospy.logfatal("No scenario loaded!") - return EmptyResponse() - - self.client.cancel_all_goals() - - rospy.loginfo("Resetting robot position...") - - self.reset_pose() - - self._clear_costmaps() - rospy.loginfo("... reset successful") - return EmptyResponse() - - def graceful_fail(self): - res = False - closest_node = rospy.wait_for_message("closest_node", String).data - rospy.loginfo("Closest node: %s" % closest_node) - if closest_node != self._robot_start_node: - rospy.loginfo("Using policy execution from %s to %s" % (closest_node, self._robot_start_node)) - s = rospy.ServiceProxy("get_simple_policy/get_route_to", GetRouteTo) - s.wait_for_service() - policy = s(self._robot_start_node) - self.client.send_goal(ExecutePolicyModeGoal(route=policy.route)) - self.client.wait_for_result(timeout=rospy.Duration(self._timeout)) - res = self.client.get_state() == actionlib_msgs.msg.GoalStatus.SUCCEEDED - self.client.cancel_all_goals() - else: - rospy.loginfo("Using topo nav from %s to %s" % (closest_node, self._robot_start_node)) - rospy.loginfo("Starting topo nav client...") - client = actionlib.SimpleActionClient("topological_navigation", GotoNodeAction) - client.wait_for_server() - rospy.loginfo(" ... done") - client.send_goal(GotoNodeGoal(target=self._robot_start_node)) - client.wait_for_result(timeout=rospy.Duration(self._timeout)) - res = client.get_state() == actionlib_msgs.msg.GoalStatus.SUCCEEDED - client.cancel_all_goals() - return res - - def start(self, req): - rospy.loginfo("Starting test ...") - - if not self._loaded: - rospy.logfatal("No scenario loaded!") - return RunTopoNavTestScenarioResponse(False, False) - - self._robot_poses = [] - grace_res = False - sub = rospy.Subscriber("robot_pose", Pose, self.robot_callback) - rospy.loginfo("Sending goal to policy execution ...") - print(self._policy.route) - self.client.send_goal(ExecutePolicyModeGoal(route=self._policy.route)) - t = time.time() - rospy.loginfo("... waiting for result ...") - print(self._timeout) - nav_timeout = not self.client.wait_for_result(timeout=rospy.Duration(self._timeout)) - elapsed = time.time() - t - res = self.client.get_state() == actionlib_msgs.msg.GoalStatus.SUCCEEDED - rospy.loginfo("... policy execution finished") - self.client.cancel_all_goals() - if not res: - rospy.loginfo("Attempting graceful death ...") - grace_res = self.graceful_fail() - rospy.loginfo("... dead") - sub.unregister() - sub = None - distance = self.get_distance_travelled(self._robot_poses) - rospy.loginfo("... test done") - return RunTopoNavTestScenarioResponse( - nav_success=res, - nav_timeout=nav_timeout, - graceful_fail=grace_res, - human_success=False, - min_distance_to_human=0, - distance_travelled=distance, - travel_time=elapsed, - mean_speed=distance/elapsed - ) - - def get_distance_travelled(self, poses): - distance = 0.0 - for idx in range(len(poses))[1:]: - distance += self._get_euclidean_distance(poses[idx].position, poses[idx-1].position) - return distance - - def load_scenario(self, req): - # No try except to have exception break the test - s = rospy.ServiceProxy("/topological_map_manager/switch_topological_map", GetTopologicalMap) - s.wait_for_service() - topo_map = s(GetTopologicalMapRequest(pointset=req.pointset)).map - - self.pointset = req.pointset - - self._robot_start_pose = None - self._obstacle_poses = [] - found_end_node = False - for node in topo_map.nodes: - if node.name == self._robot_start_node: - self._robot_start_pose = PoseStamped( - header=Header(stamp=rospy.Time.now(), frame_id="map"), - pose=node.pose - ) - elif node.name == self._robot_goal_node: - found_end_node = True - elif node.name.startswith(self._obstacle_node_prefix): - self._obstacle_poses.append({ - "name": node.name.lower(), - "pose": PoseStamped( - header=Header(stamp=rospy.Time.now(), frame_id="map"), - pose=node.pose - ) - }) - - if self._robot_start_pose == None: - raise Exception("Topological map '%s' does not contain start node '%s'." % (req.pointset, self._robot_start_node)) - if not found_end_node: - raise Exception("Topological map '%s' does not contain goal node '%s'." % (req.pointset, self._robot_goal_node)) - - rospy.loginfo("Starting policy execution client...") - # Has to be done here because the policy execution server waits for a topo map. - self.client = actionlib.SimpleActionClient("topological_navigation/execute_policy_mode", ExecutePolicyModeAction) - self.client.wait_for_server() - rospy.loginfo(" ... started") - - self._loaded = True - self.reset(None) - - # No try except to have exception break the test - rospy.loginfo("Getting route ...") - s = rospy.ServiceProxy("get_simple_policy/get_route_to", GetRouteTo) - s.wait_for_service() - self._policy = s(self._robot_goal_node) - rospy.loginfo(" ... done") - - return LoadTopoNavTestScenarioResponse() - -if __name__ == "__main__": - rospy.init_node("scenario_server") - s = ScenarioServer(rospy.get_name()) - rospy.spin() diff --git a/topological_navigation/tests/topological_navigation_tester_critical.py b/topological_navigation/tests/topological_navigation_tester_critical.py deleted file mode 100755 index 5db7d5ef..00000000 --- a/topological_navigation/tests/topological_navigation_tester_critical.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python - -import unittest -import rospy -from topological_navigation_msgs.srv import LoadTopoNavTestScenario, RunTopoNavTestScenario - - -PKG = 'topological_navigation' - - -class TestTopologicalNavigation(unittest.TestCase): - _map_name = 'mb_test' - - def __init__(self, *args): - super(self.__class__, self).__init__(*args) - rospy.init_node('topological_navigation_tester') - - def _run(self, map_name): - try: - l = rospy.ServiceProxy("/scenario_server/load", LoadTopoNavTestScenario) - l.wait_for_service(timeout=60.) - l(map_name) - s = rospy.ServiceProxy("/scenario_server/start", RunTopoNavTestScenario) - s.wait_for_service(timeout=60.) - res = s() - except (rospy.ServiceException, rospy.ROSInterruptException) as e: - rospy.logfatal(e) - self.assertTrue(False) - return res - - def test_static_l_shaped_corridor_2m(self): - res = self._run(self._map_name+str(0)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - -if __name__ == '__main__': - import rostest - - rostest.rosrun(PKG, 'topological_navigation_tester', TestTopologicalNavigation) - diff --git a/topological_navigation/tests/topological_navigation_tester_supplementary.py b/topological_navigation/tests/topological_navigation_tester_supplementary.py deleted file mode 100755 index 19b82acc..00000000 --- a/topological_navigation/tests/topological_navigation_tester_supplementary.py +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env python - -import unittest -import rospy -from topological_navigation_msgs.srv import LoadTopoNavTestScenario, RunTopoNavTestScenario - - -PKG = 'topological_navigation' - - -class TestTopologicalNavigation(unittest.TestCase): - _map_name = 'mb_test' - - def __init__(self, *args): - super(self.__class__, self).__init__(*args) - rospy.init_node('topological_navigation_tester') - - def _run(self, map_name): - try: - l = rospy.ServiceProxy("/scenario_server/load", LoadTopoNavTestScenario) - l.wait_for_service(timeout=60.) - l(map_name) - s = rospy.ServiceProxy("/scenario_server/start", RunTopoNavTestScenario) - s.wait_for_service(timeout=60.) - res = s() - except (rospy.ServiceException, rospy.ROSInterruptException) as e: - rospy.logfatal(e) - self.assertTrue(False) - return res - - def test_static_facing_wall_10cm_distance_0_degrees_goal_behind(self): - res = self._run(self._map_name+str(1)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - def test_static_facing_wall_10cm_distance_minus_45_degrees_goal_behind(self): - res = self._run(self._map_name+str(2)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - def test_static_facing_wall_10cm_distance_plus_45_degrees_goal_behind(self): - res = self._run(self._map_name+str(3)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - def test_static_155cm_corridor_with_55cm_chairs_on_one_side(self): - res = self._run(self._map_name+str(4)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - def test_static_210cm_corridor_with_55cm_chairs_on_both_sides(self): - res = self._run(self._map_name+str(5)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - def test_static_80cm_wide_door(self): - res = self._run(self._map_name+str(6)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - def test_static_70cm_wide_door(self): - res = self._run(self._map_name+str(7)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - def test_static_trapped_in_corner(self): - res = self._run(self._map_name+str(8)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - def test_static_1m_striaght_corridor(self): - res = self._run(self._map_name+str(9)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - def test_static_1m_l_shaped_corridor(self): - res = self._run(self._map_name+str(10)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - def test_static_wheelchair_on_intermediate_point(self): - res = self._run(self._map_name+str(11)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - def test_static_wheelchair_on_end_point(self): - res = self._run(self._map_name+str(12)) - rospy.loginfo(res) - self.assertTrue(res.graceful_fail and not res.nav_timeout) # Cannot reach final node and navigation should fail without timeout - - def test_static_human_on_intermediate_point(self): - res = self._run(self._map_name+str(13)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - def test_static_human_on_end_point(self): - res = self._run(self._map_name+str(14)) - rospy.loginfo(res) - self.assertTrue(res.graceful_fail and not res.nav_timeout) # Cannot reach final node and navigation should fail without timeout - - def test_static_chairs_on_one_side_of_corridor(self): - res = self._run(self._map_name+str(15)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - def test_static_wheelchairs_on_one_side_of_corridor(self): - res = self._run(self._map_name+str(16)) - rospy.loginfo(res) - self.assertTrue(res.nav_success) - - def test_static_corridor_blocked_by_wheelchairs(self): - res = self._run(self._map_name+str(17)) - rospy.loginfo(res) - self.assertTrue(res.graceful_fail and not res.nav_timeout) # Cannot reach final node and navigation should fail without timeout - - def test_static_corridor_blocked_by_humans(self): - res = self._run(self._map_name+str(18)) - rospy.loginfo(res) - self.assertTrue(res.graceful_fail and not res.nav_timeout) # Cannot reach final node and navigation should fail without timeout - - -if __name__ == '__main__': - import rostest - - rostest.rosrun(PKG, 'topological_navigation_tester', TestTopologicalNavigation) - diff --git a/topological_navigation/tests/travel_time_estimator.test b/topological_navigation/tests/travel_time_estimator.test deleted file mode 100644 index 8736f20b..00000000 --- a/topological_navigation/tests/travel_time_estimator.test +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/topological_navigation/tests/travel_time_tester.py b/topological_navigation/tests/travel_time_tester.py deleted file mode 100755 index c035c003..00000000 --- a/topological_navigation/tests/travel_time_tester.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python - -import sys -import unittest -import topological_navigation.testing -import rospy -import math -from mongodb_store.message_store import MessageStoreProxy -from topological_navigation.publisher import map_publisher -from topological_navigation.publisher import map_publisher -from topological_navigation_msgs.srv import EstimateTravelTime - - -class TestTravelTimeEstimator(unittest.TestCase): -# class TestTravelTimeEstimator(): - def __init__(self, *args): - super(TestTravelTimeEstimator, self).__init__(*args) - rospy.init_node('test_travel_time_estimator') - - def test_travel_time_estimator(self): - - # create a test topological map - width = 5 - height = 5 - nodeSeparation = 10.0 - - test_nodes = topological_navigation.testing.create_cross_map(width = width, height = height, nodeSeparation = nodeSeparation) - self.assertEqual(len(test_nodes), width + height - 1) - startIndex = -(width/2) - endIndex = (width/2) - startNode = test_nodes['h_%s' % startIndex] - self.assertIsNotNone(startNode) - endNode = test_nodes['h_%s' % endIndex] - self.assertIsNotNone(endNode) - - # locally check distance - dist = math.hypot((startNode.pose.position.x-endNode.pose.position.x),(startNode.pose.position.y-endNode.pose.position.y)) - self.assertEqual(dist, (width - 1) * nodeSeparation ) - - # now insert the map into the database - msg_store = MessageStoreProxy(collection='topological_maps') - - meta = {} - meta['map'] = 'test_travel_time_estimator_map' - meta['pointset'] = 'test_travel_time_estimator_map' - - for (nodeName, node) in test_nodes.items(): - meta["node"] = nodeName - node.map = meta['map'] - node.pointset = meta['pointset'] - msg_store.insert(node,meta) - - # and publish the map - ps = map_publisher('test_travel_time_estimator_map') - - # now wait for the distance service - time_srv_name = 'topological_navigation/travel_time_estimator' - rospy.wait_for_service(time_srv_name, timeout=10) - time_srv = rospy.ServiceProxy(time_srv_name, EstimateTravelTime) - time_estimate = time_srv(startNode.name, endNode.name).travel_time - # the time should be (at least for now) at least as long as the straight-line distance at 1m/s - self.assertGreaterEqual(time_estimate.to_sec(), (width - 1) * nodeSeparation) - - -if __name__ == '__main__': - import rostest - PKG = 'topological_navigation' - rostest.rosrun(PKG, 'test_travel_time_estimator', TestTravelTimeEstimator) - diff --git a/topological_navigation/topological_navigation/convert_tmap.py b/topological_navigation/topological_navigation/convert_tmap.py new file mode 100644 index 00000000..fe1e54a9 --- /dev/null +++ b/topological_navigation/topological_navigation/convert_tmap.py @@ -0,0 +1,240 @@ +#!/usr/bin/env python +"""Convert legacy topological maps to the tmap3 format. + +The old format stores ``action_type`` on every edge and uses CamelCase +action names (e.g. ``NavigateToPose``, ``RowOperation``). Nodes carry +``localise_by_topic`` and ``parent_frame`` directly. The transformation +block uses ``child`` instead of ``topo_frame_id``. + +The new tmap3 format adds ``nav_frame`` to each node, renames +``transformation.child`` to ``transformation.topo_frame_id``, drops +legacy node fields (``localise_by_topic``, ``parent_frame``, +``restrictions_planning``, ``restrictions_runtime``), maps action names +to snake_case, and removes ``tag`` from node meta. +No top-level ``definitions`` or ``actions`` sections are emitted. + +Usage:: + + ros2 run topological_navigation convert_tmap.py input.yaml -o output.tmap3.yaml + ros2 run topological_navigation convert_tmap.py input.yaml # writes to stdout +""" + +import argparse +import os +import re +import sys + +import yaml + + +# ===================================================================== +# Action name mapping (old CamelCase -> new snake_case keys) +# ===================================================================== + +_ACTION_NAME_MAP = { + 'NavigateToPose': 'navigate_to_pose', + 'NavigateThroughPoses': 'navigate_through_poses', + 'FollowWaypoints': 'follow_waypoints', + 'RowOperation': 'row_traversal', + 'RowTraversal': 'row_traversal', + 'GoalAlign': 'goal_align', +} + + + + +# ===================================================================== +# Conversion helpers +# ===================================================================== + + +def _map_action_name(old_name): + """Map old CamelCase action name to new snake_case name.""" + if old_name in _ACTION_NAME_MAP: + return _ACTION_NAME_MAP[old_name] + # Fallback: convert CamelCase to snake_case + s1 = re.sub(r'(.)([A-Z][a-z]+)', r'\1_\2', old_name) + return re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', s1).lower() + + + + + +def _convert_node(node_entry): + """Convert a single node entry from old to tmap3 format. + + - Removes ``action_type`` from edges. + - Maps edge ``action`` names to snake_case. + - Adds ``nav_frame`` referencing the transformation topo_frame_id. + - Removes ``localise_by_topic``, ``parent_frame``, + ``restrictions_planning``, and ``restrictions_runtime``. + - Removes ``tag`` from meta. + """ + new_entry = {} + + # -- meta -------------------------------------------------------- + old_meta = node_entry.get('meta', {}) + new_meta = { + 'map': old_meta.get('map', ''), + 'node': old_meta.get('node', ''), + 'pointset': old_meta.get('pointset', ''), + } + new_entry['meta'] = new_meta + + # -- node -------------------------------------------------------- + old_node = node_entry.get('node', {}) + new_node = {} + + # Edges: convert action names, drop action_type + new_edges = [] + for edge in old_node.get('edges', []): + new_edge = { + 'action': _map_action_name(edge.get('action', '')), + 'edge_id': edge.get('edge_id', ''), + 'node': edge.get('node', ''), + } + props = edge.get('properties') + if props: + new_edge['properties'] = props + new_edges.append(new_edge) + new_node['edges'] = new_edges + + # Core fields + new_node['name'] = old_node.get('name', '') + new_node['nav_frame'] = '${transformation.topo_frame_id}' + new_node['pose'] = old_node.get('pose', {}) + + # Properties (keep as-is) + props = old_node.get('properties') + if props: + new_node['properties'] = props + + # Verts (influence zone) + verts = old_node.get('verts') + if verts: + new_node['verts'] = verts + + new_entry['node'] = new_node + return new_entry + + +def _convert_transformation(old_tf): + """Convert transformation block. + + Renames ``child`` to ``topo_frame_id`` if present. + """ + new_tf = {} + for k, v in old_tf.items(): + if k == 'child': + new_tf['topo_frame_id'] = v + else: + new_tf[k] = v + # Ensure topo_frame_id exists + if 'topo_frame_id' not in new_tf: + new_tf['topo_frame_id'] = old_tf.get( + 'child', old_tf.get('topo_frame_id', ''), + ) + return new_tf + + +def convert_tmap(old_data): + """Convert an old-format topological map dict to the tmap3 format. + + Parameters + ---------- + old_data : dict + Parsed YAML of an old-format topological map. + + Returns + ------- + dict + New tmap3-format topological map. + """ + new_data = {} + + # -- Top-level metadata ------------------------------------------ + new_data['meta'] = old_data.get('meta', {}) + + for key in ('metric_map', 'name', 'pointset'): + if key in old_data: + new_data[key] = old_data[key] + + # -- Transformation ---------------------------------------------- + old_tf = old_data.get('transformation', {}) + new_data['transformation'] = _convert_transformation(old_tf) + + # -- Nodes ------------------------------------------------------- + old_nodes = old_data.get('nodes', []) + new_data['nodes'] = [_convert_node(n) for n in old_nodes] + + return new_data + + +# ===================================================================== +# CLI +# ===================================================================== + +def main(args=None): + """Entry point for ``convert_tmap.py``.""" + parser = argparse.ArgumentParser( + description=( + 'Convert a legacy topological map YAML to the tmap3 format. ' + 'Recommended output extension: .tmap3.yaml' + ), + ) + parser.add_argument( + 'input', + help='Path to the old-format topological map YAML file.', + ) + parser.add_argument( + '-o', '--output', + default=None, + help=( + 'Output file path. If omitted, writes to stdout. ' + 'Recommended extension: .tmap3.yaml' + ), + ) + + parsed = parser.parse_args(args) + + # -- Load input -------------------------------------------------- + input_path = parsed.input + if not os.path.isfile(input_path): + print("Error: file not found: %s" % input_path, file=sys.stderr) + sys.exit(1) + + with open(input_path, 'r') as fh: + old_data = yaml.safe_load(fh) + + if not isinstance(old_data, dict): + print("Error: input is not a valid YAML mapping", file=sys.stderr) + sys.exit(1) + + # -- Convert ----------------------------------------------------- + new_data = convert_tmap(old_data) + + # -- Output ------------------------------------------------------ + output_yaml = yaml.dump( + new_data, + default_flow_style=False, + sort_keys=False, + allow_unicode=True, + width=120, + ) + + if parsed.output: + out_dir = os.path.dirname(parsed.output) + if out_dir: + os.makedirs(out_dir, exist_ok=True) + with open(parsed.output, 'w') as fh: + fh.write(output_yaml) + print( + "Converted: %s -> %s" % (input_path, parsed.output), + file=sys.stderr, + ) + else: + sys.stdout.write(output_yaml) + + +if __name__ == '__main__': + main() diff --git a/topological_navigation/topological_navigation/coverage_analysis.py b/topological_navigation/topological_navigation/coverage_analysis.py new file mode 100644 index 00000000..3c17c1db --- /dev/null +++ b/topological_navigation/topological_navigation/coverage_analysis.py @@ -0,0 +1,562 @@ +"""Route sign-off coverage analysis for topological maps. + +This module combines a (possibly merged, multi-map) topological graph with +recorded traversal statistics from :class:`~topological_navigation.nav_stats_db.NavStatsDB` +to compute *coverage*: how many of the selected edges have been +successfully traversed at least once, and how many times. + +This supports a quality-control / sign-off workflow: a site (a dedicated +map, or a set of maps considered together) can be marked as adequately +tested once a sufficient fraction of its edges have recorded successful +traversals. + +Node selection (which nodes -- and therefore which incident edges -- are +considered for the report) uses the same filter DSL as +:mod:`topological_navigation.map_analyser`'s grid-angle-deviation check: +``name:``, ``tag:`` or ``property:[=]``. + +No ROS 2 dependency is required; only ``networkx`` (via +:mod:`topological_navigation.networkx_utils`) and the filter helpers from +:mod:`topological_navigation.map_analyser`. +""" + +import math +from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional, Set, Tuple +from xml.sax.saxutils import escape as _xml_escape + +try: + import networkx as nx +except ImportError: # pragma: no cover - exercised only when nx missing + nx = None + +from topological_navigation.map_analyser import select_nodes_by_filters +from topological_navigation.networkx_utils import build_graph_from_tmap +from topological_navigation.nav_stats_db import NavStatsDB + + +# --------------------------------------------------------------------------- +# Graph merging +# --------------------------------------------------------------------------- + +def merge_graphs(graphs: List["nx.DiGraph"]) -> "nx.DiGraph": + """Merge multiple topological map graphs into one. + + Nodes and edges are matched by name/``edge_id``: when the same node (or + edge) appears in more than one graph, later graphs' attributes are + merged on top of (without discarding) earlier ones, and the node/edge + is only represented once in the merged graph. + """ + merged = nx.DiGraph() + for graph in graphs: + for node, data in graph.nodes(data=True): + if node in merged: + merged.nodes[node].update(data) + else: + merged.add_node(node, **data) + for u, v, data in graph.edges(data=True): + if merged.has_edge(u, v): + merged.edges[u, v].update(data) + else: + merged.add_edge(u, v, **data) + return merged + + +def build_merged_graph_for_maps(db: NavStatsDB, map_ids: List[str]) -> "nx.DiGraph": + """Load and merge the graphs for the given map identifiers (name or hash).""" + graphs = [] + for map_id in map_ids: + m = db.get_map(map_id) + if m is None: + raise ValueError("Map '%s' not found in database." % map_id) + import yaml + tmap = yaml.safe_load(m["map_data"]) or {} + graph = build_graph_from_tmap(tmap) + if graph is None: + raise ValueError("Map '%s' could not be parsed into a graph." % map_id) + graphs.append(graph) + if not graphs: + raise ValueError("No maps selected for coverage analysis.") + return merge_graphs(graphs) + + +def resolve_map_hashes(db: NavStatsDB, map_ids: List[str]) -> List[str]: + """Return the list of ``map_hash`` values corresponding to *map_ids*.""" + hashes = [] + for map_id in map_ids: + m = db.get_map(map_id) + if m is None: + raise ValueError("Map '%s' not found in database." % map_id) + hashes.append(m["map_hash"]) + return hashes + + +# --------------------------------------------------------------------------- +# Coverage computation +# --------------------------------------------------------------------------- + +#: Default minimum number of recorded successful traversals an edge needs +#: before it is considered "covered" (signed off). Configurable per-report +#: via ``compute_coverage(..., min_success=...)`` / the CLI's +#: ``--min-success`` option. +DEFAULT_MIN_SUCCESS_TRAVERSALS = 2 + + +@dataclass +class EdgeCoverage: + """Coverage information for a single edge.""" + + edge_id: str + origin: str + target: str + action: str + selected: bool + total: int = 0 + success: int = 0 + failed: int = 0 + aborted: int = 0 + min_success: int = DEFAULT_MIN_SUCCESS_TRAVERSALS + + @property + def covered(self) -> bool: + """True if the edge has at least :attr:`min_success` recorded + successful traversals (the configurable sign-off threshold).""" + return self.success >= self.min_success + + +@dataclass +class CoverageReport: + """Full coverage report for a set of maps/nodes.""" + + edges: List[EdgeCoverage] = field(default_factory=list) + tags: Dict[str, List[str]] = field(default_factory=dict) # tag -> selected edge_ids + min_success: int = DEFAULT_MIN_SUCCESS_TRAVERSALS + + @property + def selected_edges(self) -> List[EdgeCoverage]: + """Return only the edges selected by the node filters.""" + return [e for e in self.edges if e.selected] + + def summary(self) -> Dict[str, Any]: + """Return overall coverage counters for the selected edges.""" + selected = self.selected_edges + total_edges = len(selected) + covered_edges = sum(1 for e in selected if e.covered) + total_traversals = sum(e.total for e in selected) + total_success = sum(e.success for e in selected) + total_failed = sum(e.failed for e in selected) + total_aborted = sum(e.aborted for e in selected) + coverage_pct = round(100.0 * covered_edges / total_edges, 2) if total_edges else 0.0 + return { + "total_edges": total_edges, + "covered_edges": covered_edges, + "uncovered_edges": total_edges - covered_edges, + "coverage_pct": coverage_pct, + "total_traversals": total_traversals, + "total_success": total_success, + "total_failed": total_failed, + "total_aborted": total_aborted, + } + + def tag_summary(self) -> Dict[str, Dict[str, Any]]: + """Return per-tag coverage counters, keyed by tag value.""" + by_edge_id = {e.edge_id: e for e in self.edges} + result = {} + for tag, edge_ids in sorted(self.tags.items()): + edges = [by_edge_id[eid] for eid in edge_ids if eid in by_edge_id] + total_edges = len(edges) + covered_edges = sum(1 for e in edges if e.covered) + coverage_pct = ( + round(100.0 * covered_edges / total_edges, 2) if total_edges else 0.0 + ) + result[tag] = { + "total_edges": total_edges, + "covered_edges": covered_edges, + "uncovered_edges": total_edges - covered_edges, + "coverage_pct": coverage_pct, + "total_traversals": sum(e.total for e in edges), + } + return result + + +def _node_tags(graph: "nx.DiGraph", node: str) -> List[str]: + return list((graph.nodes[node].get("meta") or {}).get("tag") or []) + + +def compute_coverage( + graph: "nx.DiGraph", + db: NavStatsDB, + map_hashes: List[str], + filters: Optional[List[str]] = None, + exclude_filters: Optional[List[str]] = None, + where: Optional[str] = None, + min_success: int = DEFAULT_MIN_SUCCESS_TRAVERSALS, +) -> CoverageReport: + """Compute a :class:`CoverageReport` for *graph*. + + Parameters + ---------- + graph: + The (possibly merged) topological map graph. + db: + Database to read traversal statistics from. + map_hashes: + ``map_hash`` values to consider when aggregating traversal stats. + filters / exclude_filters: + Node filter DSL specs (``name:``, ``tag:`` or + ``property:[=]``) used to select which nodes (and + their incident edges) are counted for the report. All edges are + still returned (for SVG rendering) but marked ``selected=False`` + when neither endpoint is selected. + where: + Additional raw SQL WHERE expression applied to the traversals + table (e.g. a time-window filter). + min_success: + Minimum number of recorded successful traversals an edge needs + before it is considered "covered"/signed off (default + :data:`DEFAULT_MIN_SUCCESS_TRAVERSALS`). Must be a positive + integer. + """ + if min_success < 1: + raise ValueError("min_success must be a positive integer (got %r)" % (min_success,)) + + selected_nodes = select_nodes_by_filters(graph, filters, exclude_filters) + + if not map_hashes: + hash_clause = "1=0" + else: + placeholders = ", ".join("'%s'" % h.replace("'", "''") for h in map_hashes) + hash_clause = "map_hash IN (%s)" % placeholders + + sql_where = hash_clause + if where: + sql_where += " AND (" + where + ")" + + stats_rows = db.query( + """ + SELECT + edge_id, + COUNT(*) AS total, + SUM(CASE WHEN status='success' THEN 1 ELSE 0 END) AS success, + SUM(CASE WHEN status='failed' THEN 1 ELSE 0 END) AS failed, + SUM(CASE WHEN status='aborted' THEN 1 ELSE 0 END) AS aborted + FROM traversals + WHERE {where} + GROUP BY edge_id + """.format(where=sql_where) + ) + stats_by_edge = {r["edge_id"]: r for r in stats_rows} + + report = CoverageReport(min_success=min_success) + tag_edges: Dict[str, Set[str]] = {} + + for u, v, data in graph.edges(data=True): + edge_id = data.get("edge_id") or ("%s_%s" % (u, v)) + selected = (u in selected_nodes) or (v in selected_nodes) + s = stats_by_edge.get(edge_id, {}) + ec = EdgeCoverage( + edge_id=edge_id, + origin=u, + target=v, + action=data.get("action", "unknown"), + selected=selected, + total=int(s.get("total") or 0), + success=int(s.get("success") or 0), + failed=int(s.get("failed") or 0), + aborted=int(s.get("aborted") or 0), + min_success=min_success, + ) + report.edges.append(ec) + + if selected: + for node in (u, v): + if node not in selected_nodes: + continue + for tag in _node_tags(graph, node): + tag_edges.setdefault(tag, set()).add(edge_id) + + report.tags = {tag: sorted(eids) for tag, eids in tag_edges.items()} + return report + + +# --------------------------------------------------------------------------- +# Markdown report +# --------------------------------------------------------------------------- + +def render_markdown_summary(report: CoverageReport, title: str = "Coverage Summary") -> str: + """Render a brief Markdown summary of *report*.""" + s = report.summary() + lines = [ + "# %s" % title, + "", + "Sign-off threshold: an edge is considered covered once it has " + "at least %d recorded successful traversal(s)." % report.min_success, + "", + "| Metric | Value |", + "| --- | --- |", + "| Selected edges | %d |" % s["total_edges"], + "| Covered edges | %d |" % s["covered_edges"], + "| Uncovered edges | %d |" % s["uncovered_edges"], + "| Coverage | %.2f%% |" % s["coverage_pct"], + "| Total traversals | %d |" % s["total_traversals"], + "| Successful | %d |" % s["total_success"], + "| Failed | %d |" % s["total_failed"], + "| Aborted | %d |" % s["total_aborted"], + ] + tag_summary = report.tag_summary() + if tag_summary: + lines += ["", "## Coverage by tag", "", "| Tag | Edges | Covered | Coverage |", + "| --- | --- | --- | --- |"] + for tag, t in tag_summary.items(): + lines.append( + "| %s | %d | %d | %.2f%% |" + % (tag, t["total_edges"], t["covered_edges"], t["coverage_pct"]) + ) + return "\n".join(lines) + "\n" + + +def render_markdown_report( + report: CoverageReport, + title: str = "Route Coverage Sign-off Report", + map_names: Optional[List[str]] = None, +) -> str: + """Render a comprehensive Markdown report suitable as sign-off evidence.""" + s = report.summary() + lines = ["# %s" % title, ""] + if map_names: + lines += ["**Maps considered:** %s" % ", ".join(map_names), ""] + lines += [ + "**Sign-off threshold:** an edge is considered covered once it has " + "at least %d recorded successful traversal(s)." % report.min_success, + "", + ] + + lines += [ + "## Overall Coverage", + "", + "| Metric | Value |", + "| --- | --- |", + "| Selected edges | %d |" % s["total_edges"], + "| Covered edges (>=%d success) | %d |" % (report.min_success, s["covered_edges"]), + "| Uncovered edges | %d |" % s["uncovered_edges"], + "| Coverage | %.2f%% |" % s["coverage_pct"], + "| Total traversals | %d |" % s["total_traversals"], + "| Successful traversals | %d |" % s["total_success"], + "| Failed traversals | %d |" % s["total_failed"], + "| Aborted traversals | %d |" % s["total_aborted"], + "", + ] + + tag_summary = report.tag_summary() + if tag_summary: + lines += [ + "## Coverage by Tag", "", + "| Tag | Edges | Covered | Uncovered | Coverage | Traversals |", + "| --- | --- | --- | --- | --- | --- |", + ] + for tag, t in tag_summary.items(): + lines.append( + "| %s | %d | %d | %d | %.2f%% | %d |" + % (tag, t["total_edges"], t["covered_edges"], t["uncovered_edges"], + t["coverage_pct"], t["total_traversals"]) + ) + lines.append("") + + lines += [ + "## Per-Edge Detail", "", + "| Edge ID | Origin | Target | Action | Traversals | Success | Failed | Aborted | Covered |", + "| --- | --- | --- | --- | --- | --- | --- | --- | --- |", + ] + for e in sorted(report.selected_edges, key=lambda e: e.edge_id): + lines.append( + "| %s | %s | %s | %s | %d | %d | %d | %d | %s |" + % (e.edge_id, e.origin, e.target, e.action, e.total, e.success, + e.failed, e.aborted, "yes" if e.covered else "no") + ) + lines.append("") + + uncovered = [e for e in report.selected_edges if not e.covered] + if uncovered: + lines += ["## Uncovered Edges (require testing before sign-off)", ""] + for e in sorted(uncovered, key=lambda e: e.edge_id): + lines.append("- `%s` (%s -> %s, action: %s)" % (e.edge_id, e.origin, e.target, e.action)) + lines.append("") + + return "\n".join(lines) + "\n" + + +# --------------------------------------------------------------------------- +# SVG rendering +# --------------------------------------------------------------------------- + +_UNSELECTED_COLOUR = "#cccccc" +_UNCOVERED_COLOUR = "#d62728" # red - selected, never successfully traversed +_LOW_COVERAGE_COLOUR = "#ff9900" # amber - selected, some but not enough successes yet +_COVERED_COLOUR = "#2ca02c" # green - selected, signed off (>= min_success successes) + + +def _svg_text(value: Any) -> str: + return _xml_escape("" if value is None else str(value)) + + +def _finite_or(value: Any, default: float) -> float: + try: + number = float(value) + except (TypeError, ValueError): + return default + if math.isnan(number) or math.isinf(number): + return default + return number + + +def _edge_colour(ec: EdgeCoverage) -> str: + if not ec.selected: + return _UNSELECTED_COLOUR + if ec.success == 0: + return _UNCOVERED_COLOUR + if ec.success < ec.min_success: + return _LOW_COVERAGE_COLOUR + return _COVERED_COLOUR + + +def generate_coverage_svg( + graph: "nx.DiGraph", + report: CoverageReport, + output_path: str, + title: Optional[str] = None, + width: int = 1200, + height: int = 900, + margin: float = 40.0, +) -> str: + """Render *graph* as an SVG, colour-coded by coverage. + + Selected edges are coloured red (never successfully traversed), amber + (fewer than *report*'s ``min_success`` recorded successes) or green + (signed off: at least ``min_success`` successes). Unselected + edges/nodes are drawn in faint grey. + """ + node_names = list(graph.nodes()) + if not node_names: + raise ValueError("Cannot render SVG for an empty map") + + selected_nodes = {e.origin for e in report.edges if e.selected} | { + e.target for e in report.edges if e.selected + } + + xs = [_finite_or(graph.nodes[n].get("x"), 0.0) for n in node_names] + ys = [_finite_or(graph.nodes[n].get("y"), 0.0) for n in node_names] + min_x, max_x = min(xs), max(xs) + min_y, max_y = min(ys), max(ys) + + width = max(int(_finite_or(width, 1200)), 1) + height = max(int(_finite_or(height, 900)), 1) + margin = max(_finite_or(margin, 40.0), 0.0) + margin = min(margin, (width - 1) / 2.0, (height - 1) / 2.0) + margin = max(margin, 0.0) + + span_x = max(max_x - min_x, 1e-6) + span_y = max(max_y - min_y, 1e-6) + drawable_w = width - 2 * margin + drawable_h = height - 2 * margin + scale = min(drawable_w / span_x, drawable_h / span_y) + + positions = dict(zip(node_names, zip(xs, ys))) + + def to_px(point): + px = margin + (point[0] - min_x) * scale + py = margin + (max_y - point[1]) * scale + return px, py + + edge_px_lengths = [ + math.hypot(x2 - x1, y2 - y1) + for u, v in graph.edges() + for (x1, y1), (x2, y2) in [(to_px(positions[u]), to_px(positions[v]))] + if u != v + ] + if edge_px_lengths: + char_length = sum(edge_px_lengths) / len(edge_px_lengths) + else: + char_length = min(drawable_w, drawable_h) / max(math.sqrt(len(node_names)), 1.0) + + node_radius = max(1.0, min(char_length * 0.06, 6.0)) + edge_stroke_width = max(0.5, min(char_length * 0.04, 5.0)) + font_size = max(3.0, min(char_length * 0.09, 14.0)) + + svg_parts: List[str] = [] + svg_parts.append( + f'' + ) + svg_parts.append('') + + if title: + svg_parts.append( + f'' + f'{_svg_text(title)}' + ) + + edge_by_uv: Dict[Tuple[str, str], EdgeCoverage] = {(e.origin, e.target): e for e in report.edges} + + drawn: Set[Tuple[str, str]] = set() + for u, v in graph.edges(): + if (v, u) in drawn: + continue + drawn.add((u, v)) + ec = edge_by_uv.get((u, v)) + colour = _edge_colour(ec) if ec is not None else _UNSELECTED_COLOUR + + x1, y1 = to_px(positions[u]) + x2, y2 = to_px(positions[v]) + edge_id = ec.edge_id if ec is not None else "%s_%s" % (u, v) + traversal_info = "" + if ec is not None and ec.selected: + traversal_info = " - %d success / %d total" % (ec.success, ec.total) + + svg_parts.append( + f'' + f'{_svg_text(edge_id)}{_svg_text(traversal_info)}' + f'' + ) + + for node_name in node_names: + px, py = to_px(positions[node_name]) + selected = node_name in selected_nodes + colour = "steelblue" if selected else _UNSELECTED_COLOUR + svg_parts.append( + f'{_svg_text(node_name)}' + ) + svg_parts.append( + f'{_svg_text(node_name)}' + ) + + # --- legend -------------------------------------------------------- + legend = [ + (_COVERED_COLOUR, "Covered (>= %d successes)" % report.min_success), + (_LOW_COVERAGE_COLOUR, "Low coverage (< %d successes)" % report.min_success), + (_UNCOVERED_COLOUR, "Uncovered (0 successes)"), + (_UNSELECTED_COLOUR, "Not selected"), + ] + legend_y = height - 20 * len(legend) - 10 + for i, (colour, label) in enumerate(legend): + ly = legend_y + i * 20 + svg_parts.append( + f'' + ) + svg_parts.append( + f'{_svg_text(label)}' + ) + + svg_parts.append('') + svg_doc = "\n".join(svg_parts) + + with open(output_path, "w", encoding="utf-8") as fh: + fh.write(svg_doc) + + return svg_doc diff --git a/topological_navigation/topological_navigation/edge_action_manager.py b/topological_navigation/topological_navigation/edge_action_manager.py deleted file mode 100644 index dc02c713..00000000 --- a/topological_navigation/topological_navigation/edge_action_manager.py +++ /dev/null @@ -1,125 +0,0 @@ -#!/usr/bin/env python -""" -Created on Tue Apr 13 22:02:24 2021 -@author: Adam Binch (abinch@sagarobotics.com) - -""" -######################################################################################################### -import json, yaml -import operator, collections, copy - -from functools import reduce # forward compatibility for Python 3 -# from rospy_message_converter import message_converter -from actionlib_msgs.msg import GoalStatus - - -def _import(location, name): - mod = __import__(location, fromlist=[name]) - return getattr(mod, name) - - -class dict_tools(object): - - - def get_paths_from_nested_dict(self, nested): - paths = list(self.nested_dict_iter(nested)) - return [{"keys": item[0], "value": item[1]} for item in paths] - - - def nested_dict_iter(self, nested, prefix=""): - """ - Recursively loops through a nested dictionary. - For each inner-most value generates the list of keys needed to access it. - """ - for key, value in nested.items(): - path = "{},{}".format(prefix, key) - if isinstance(value, collections.Mapping): - for inner_key, inner_value in self.nested_dict_iter(value, path): - yield inner_key, inner_value - else: - yield path[1:].split(","), value - - - def getFromDict(self, dataDict, mapList): - return reduce(operator.getitem, mapList, dataDict) - - - def setInDict(self, dataDict, mapList, value): - self.getFromDict(dataDict, mapList[:-1])[mapList[-1]] = value - return dataDict -######################################################################################################### - - -######################################################################################################### -class EdgeActionManager(object): - - - def __init__(self): - - self.client = None - self.current_action = "none" - self.dt = dict_tools() - - - def initialise(self, edge, destination_node, origin_node=None): - - self.edge = yaml.safe_load(json.dumps(edge)) # no unicode in edge - self.destination_node = destination_node - self.origin_node = origin_node - - rospy.loginfo("Edge Action Manager: Processing edge {}".format(self.edge["edge_id"])) - - self.action_name = self.edge["action"] - if self.action_name != self.current_action: - self.preempt() - - action_type = self.edge["action_type"] - items = action_type.split("/") - package = items[0] - action_spec = items[1][:-4] + "Action" - - rospy.loginfo("Edge Action Manager: Importing {} from {}.msg".format(action_spec, package)) - action = _import(package+".msg", action_spec) - - rospy.loginfo("Edge Action Manager: Creating a {} client".format(self.action_name.upper())) - self.client = actionlib.SimpleActionClient(self.action_name, action) - self.client.wait_for_server() - - rospy.loginfo("Edge Action Manager: Constructing the goal") - self.construct_goal(action_type, copy.deepcopy(self.edge["goal"])) - - - def preempt(self): - - if self.client is not None: - status = self.client.get_state() - if status == GoalStatus.PENDING or status == GoalStatus.ACTIVE: - self.client.cancel_all_goals() - - - def construct_goal(self, action_type, goal_args): - - paths = self.dt.get_paths_from_nested_dict(goal_args) - - for item in paths: - value = item["value"] - - if isinstance(value, str): - - if value.startswith("$"): - _property = self.dt.getFromDict(self.destination_node, value[1:].split(".")) - goal_args = self.dt.setInDict(goal_args, item["keys"], _property) - - elif value.startswith("+") and self.origin_node is not None: - _property = self.dt.getFromDict(self.origin_node, value[1:].split(".")) - goal_args = self.dt.setInDict(goal_args, item["keys"], _property) - - self.goal = message_converter.convert_dictionary_to_ros_message(action_type, goal_args) - - - def execute(self): - - rospy.loginfo("Edge Action Manager: Executing the action...") - self.client.send_goal(self.goal) - self.current_action = self.action_name -######################################################################################################### \ No newline at end of file diff --git a/topological_navigation/topological_navigation/edge_action_manager2.py b/topological_navigation/topological_navigation/edge_action_manager2.py deleted file mode 100644 index 4c5f2b38..00000000 --- a/topological_navigation/topological_navigation/edge_action_manager2.py +++ /dev/null @@ -1,1079 +0,0 @@ -#!/usr/bin/env python -""" -Created on Tue Nov 5 22:02:24 2023 -@author: Geesara Kulathunga (ggeesara@gmail.com) - -""" -######################################################################################################### -import json, yaml -import operator, collections, copy -import rclpy -import numpy as np -from functools import reduce # forward compatibility for Python 3 -from rclpy.action import ActionClient -from action_msgs.msg import GoalStatus -from nav2_msgs.action import NavigateThroughPoses, NavigateToPose, FollowWaypoints, ComputePathToPose, ComputePathThroughPoses -from geometry_msgs.msg import PoseStamped -from nav_msgs.msg import Path -from nav_msgs.msg import Odometry -from topological_navigation.route_search2 import TopologicalRouteSearch2 -import math - -# from rospy_message_converter import message_converter -# from actionlib_msgs.msg import GoalStatus -from std_msgs.msg import Header -from builtin_interfaces.msg import Time -from action_msgs.msg import GoalStatus -from rclpy.qos import QoSProfile, HistoryPolicy, ReliabilityPolicy, DurabilityPolicy, QoSDurabilityPolicy -from rclpy.callback_groups import MutuallyExclusiveCallbackGroup, ReentrantCallbackGroup -from unique_identifier_msgs.msg import UUID -from rclpy.executors import SingleThreadedExecutor -from topological_navigation.scripts.actions_bt import ActionsType -from topological_navigation.scripts.param_processing import ParameterUpdaterNode -from topological_navigation.scripts.in_row_operations import RowOperations -from std_msgs.msg import String - - -try: - from collections.abc import Mapping -except ImportError: - from collections import Mapping - - -def _import(location, name): - mod = __import__(location, fromlist=[name]) - return getattr(mod, name) - - -class dict_tools(object): - - - def get_paths_from_nested_dict(self, nested): - paths = list(self.nested_dict_iter(nested)) - return [{"keys": item[0], "value": item[1]} for item in paths] - - - def nested_dict_iter(self, nested, prefix=""): - """ - Recursively loops through a nested dictionary. - For each inner-most value generates the list of keys needed to access it. - """ - for key, value in nested.items(): - path = "{},{}".format(prefix, key) - if isinstance(value, Mapping): - for inner_key, inner_value in self.nested_dict_iter(value, path): - yield inner_key, inner_value - else: - yield path[1:].split(","), value - - - def getFromDict(self, dataDict, mapList): - return reduce(operator.getitem, mapList, dataDict) - - - def setInDict(self, dataDict, mapList, value): - self.getFromDict(dataDict, mapList[:-1])[mapList[-1]] = value - return dataDict - - -class TopoNavEdgeActionMsg(): - - def __init__(self,): - pass - - - def setAction(self, action): - self.action = action - - - def setNavGoal(self, nav_goal): - self.nav_goal = nav_goal - - - def setSideEdges(self, side_edges, target_frame_id): - self.side_edges = side_edges - self.target_frame_id = target_frame_id - - - def getBoundary(self, ): - path = Path() - header = Header() - header.frame_id = self.target_frame_id - path.header = header - if(len(self.side_edges)>0): - for key, val in self.side_edges.items(): - for pose in val: - path.poses.append(pose) - return path - - - def getTargetFrameId(self, ): - return self.target_frame_id - - - def getAction(self): - return self.action - - - def getNavGoal(self): - return self.nav_goal - - - def setControlPluginParams(self, control_plugin_params): - self.control_plugin_params = control_plugin_params - - -######################################################################################################### - - - -######################################################################################################### -class EdgeActionManager(rclpy.node.Node): - - - def __init__(self, name="edge_action_manager"): - super().__init__(name) - self.client = None - self.current_action = "none" - self.dt = dict_tools() - - - def init(self, ACTIONS, route_search, update_params_control_server, inrow_step_size=3.0, intermediate_dis=0.7): - self.ACTIONS = ACTIONS - self.route_search = route_search - self.goal_handle = None - self.goal_response = None - self.internal_executor = SingleThreadedExecutor() - self.latching_qos = QoSProfile(depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL, reliability=ReliabilityPolicy.RELIABLE) - self.bt_trees = {} - self.in_row_operation = False - self.control_server_configs = [] - self.inrow_step_size = inrow_step_size - self.is_row_boundary_published = False - self.intermediate_dis = intermediate_dis - self.nav2_client_callback_group = MutuallyExclusiveCallbackGroup() - - self.update_params_control_server = update_params_control_server - self.current_robot_pose = None - self.odom_sub = self.create_subscription(Odometry, '/odometry/global', self.odom_callback, - QoSProfile(depth=1, reliability=ReliabilityPolicy.BEST_EFFORT)) - self.get_current_node_sub = self.create_subscription(String, 'closest_node', self.set_current_pose - , QoSProfile(depth=1, reliability=ReliabilityPolicy.BEST_EFFORT)) - - self.boundary_publisher = self.create_publisher(Path, '/boundary_checker', qos_profile=self.latching_qos) - self.robot_current_status_pub = self.create_publisher(String, '/robot_operation_current_status', qos_profile=self.latching_qos) - self.current_dest = self.create_publisher(String, '/topological_navigation/current_destination', qos_profile=self.latching_qos) - - self.robot_current_behavior_pub = None - self.current_node = None - self.action_status = 0 - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_AUTONOMOUS_NAVIGATION_STATE - self.executor_nav_client = SingleThreadedExecutor() - - - def set_current_pose(self, msg): - self.current_node = msg.data - - - def odom_callback(self, msg): - self.current_robot_pose = msg.pose - - - def get_nav_action_server_status(self, ): - return self.ACTIONS.status_mapping - - - def get_status_msg(self, status_code): - try: - return self.ACTIONS.status_mapping[status_code] - except Exception as e: - self.get_logger().error("Status code is invalid {}".format(status_code)) - return self.ACTIONS.status_mapping[0] - - def get_goal_cancel_error_msg(self, status_code): - try: - return self.ACTIONS.goal_cancel_error_codes[status_code] - except Exception as e: - self.get_logger().error("Goal cancel code {}".format(status_code)) - return self.ACTIONS.goal_cancel_error_codes[0] - - - def _adjust_orientations_for_next_wp(self, poses_dict): - """ - Adjusts the orientation of each pose to face the next one in the sequence. - The final pose's orientation is left unchanged. - """ - # Check if there are enough poses to perform the calculation - if len(poses_dict) < 2: - self.get_logger().warn("[_adjust_orientations_for_next_wp] Not enough poses to adjust orientations. Returning original poses.") - return poses_dict - - # 1. Create a flat list of the actual pose dictionaries. - # Sorting by key ensures the poses are in the correct sequential order. - flat_poses = [poses_dict[key][0] for key in sorted(poses_dict.keys())] - - # 2. Iterate up to the second-to-last pose to update its orientation - for i in range(len(flat_poses) - 1): - current_pos = flat_poses[i]['target_pose']['pose']['position'] - next_pos = flat_poses[i+1]['target_pose']['pose']['position'] - - # Calculate the yaw angle to face the next pose - delta_x = next_pos['x'] - current_pos['x'] - delta_y = next_pos['y'] - current_pos['y'] - yaw = math.atan2(delta_y, delta_x) - - # 3. Convert yaw to a quaternion and modify the orientation directly in the pose dictionary. - orientation = flat_poses[i]['target_pose']['pose']['orientation'] - orientation['w'] = math.cos(yaw / 2.0) - orientation['x'] = 0.0 - orientation['y'] = 0.0 - orientation['z'] = math.sin(yaw / 2.0) - self.get_logger().info("[_adjust_orientations_for_next_wp] Adjusted orientation for pose {} to face next goal".format(i)) - - return poses_dict - - - def _process_and_segment_edges(self, edge, destination_node, origin_node, is_execpolicy): - """ - Processes a list of edges, groups them into segments based on the policy. - """ - self.get_logger().warn(f"[_process_and_segment_edges] - {'EXECUTE-POLICY' if is_execpolicy else 'GO-TO-NODE'}") - - poses, actions, edge_ids = {}, {}, {} - segment = 0 - previous_action = "" - total_edges = len(edge) - - for index in range(total_edges): - edge_i, dest_i, origin_i = edge[index], destination_node[index], origin_node[index] - edge_i = yaml.safe_load(json.dumps(edge_i)) - current_action_base = edge_i["action"] - - # Determine the effective current action (common logic) - if index < (total_edges - 1): - next_edge_id = edge[index + 1]["edge_id"] - current_action = self.get_goal_align_if(edge_i["edge_id"], current_action_base, next_edge_id) - self.get_logger().debug(f"[_process_and_segment_edges] - intermediate edge {edge_i['edge_id']} -> action {current_action}") - else: - current_action = self.get_goal_align_if(edge_i["edge_id"], current_action_base) - self.get_logger().debug(f"[_process_and_segment_edges] - final edge {edge_i['edge_id']} -> action {current_action}") - - # Determine segment number based on the policy (the only differing logic) - if not is_execpolicy: - # Group by action: increment segment only when action changes - if previous_action != current_action: segment += 1 - else: - # One edge per segment - segment = index - - # Construct and append data (common logic) - self.get_logger().info(f"Processing edge {edge_i['edge_id']} for segment {segment}") - intermediate_goal = self.construct_goal(copy.deepcopy(edge_i["goal"]), dest_i, origin_i) - - if segment not in poses: - self.get_logger().debug(f"[_process_and_segment_edges] - Creating new segment {segment}") - poses[segment], actions[segment], edge_ids[segment] = [], [], [] - - poses[segment].append(intermediate_goal) - actions[segment].append(current_action) - edge_ids[segment].append(edge_i["edge_id"]) - - previous_action = current_action - - return poses, actions, edge_ids - - - def initialise(self, bt_trees, edge, destination_node, origin_node=None, - action_name=None, package="nav2_msgs.action", in_row_operation=False, is_execpolicy=False): - - self.bt_trees = bt_trees - self.in_row_operation = in_row_operation - if self.in_row_operation: - try: - from robot_behavior_msg.msg import RobotBehavior - self.robot_current_behavior_pub = self.create_publisher(RobotBehavior, '/robot_current_behavior', qos_profile=self.latching_qos) - except Exception as e: - self.get_logger().error("robot_behavior_msg.msg.RobotBehavior message type is not defined") - - if action_name is not None: - self.action_name = action_name - else: - self.edge = yaml.safe_load(json.dumps(edge)) # no unicode in edge - self.action_name = self.edge["action"] - - if (self.action_name == self.ACTIONS.ROW_TRAVERSAL or self.action_name == self.ACTIONS.ROW_CHANGE): - self.action_name = self.ACTIONS.NAVIGATE_TO_POSE #TODO change this to actual - - if self.action_name != self.current_action: - self.preempt() - - self.package = package - self.set_nav_client() - self.action_status = 0 - - if self.action_name == self.ACTIONS.NAVIGATE_TO_POSE: - self.destination_node = destination_node - self.origin_node = origin_node - self.get_logger().info(f"Processing edge {self.edge['edge_id']}") - self.get_logger().info("Constructing the goal") - target_pose = self.construct_goal(copy.deepcopy(edge["goal"]), destination_node, origin_node) - self.action_msgs = self.construct_navigate_to_pose_goal(target_pose) - - if self.action_name == self.ACTIONS.NAVIGATE_THROUGH_POSES: - - self.destination_node_str = {} - for item in destination_node: - name = item['node']['name'] - x_coord = item['node']['pose']['position']['x'] - y_coord = item['node']['pose']['position']['y'] - coordinates = (x_coord, y_coord) - self.destination_node_str[coordinates] = name - self.get_logger().warn(f"Destination nodes: {self.destination_node_str}") - - poses, actions, edge_ids = self._process_and_segment_edges(edge, destination_node, origin_node, is_execpolicy) - if is_execpolicy: poses = self._adjust_orientations_for_next_wp(poses) - - self.destination_node = destination_node[-1] - self.action_msgs, self.control_server_configs = self.construct_navigate_through_poses_goal(poses, actions, edge_ids, is_execpolicy=is_execpolicy) - - return True - - - def get_goal_align_if(self, edge_id, current_action, next_edge_id=None): - edges = edge_id.split("_") - if next_edge_id is not None: - next_edge_ids = next_edge_id.split("_") - if len(next_edge_ids) == 2: - next_goal_stage = next_edge_ids[1].split("-") - if len(next_goal_stage) == 2: - if (next_goal_stage[1] in self.ACTIONS.GOAL_ALIGN_INDEX) or (next_goal_stage[1] not in self.ACTIONS.GOAL_ALIGN_GOAL): - return current_action - elif len(next_goal_stage) == 1: - if(current_action == self.ACTIONS.ROW_TRAVERSAL): - return current_action - if len(edges) == 2: - goal = edges[1] - goal_stage = goal.split("-") - if len(goal_stage) == 2: - if goal_stage[1] in self.ACTIONS.GOAL_ALIGN_INDEX: - return self.ACTIONS.GOAL_ALIGN - return current_action - - - def set_nav_client(self): - self.action_server_name = self.get_action_server_name(self.action_name) - self.get_logger().info("Importing {} from {}".format(self.action_name, self.package)) - try: - action = _import(self.package, self.action_name) - except Exception as e: - self.get_logger().error("Still does not support action type: {}".format(self.action_name)) - return False - - self.get_logger().info("Creating a {} client".format(self.action_server_name)) - self.action = action - self.client = ActionClient(self, self.action, self.action_server_name, callback_group=self.nav2_client_callback_group) - - - def feedback_callback(self, feedback_msg): - self.nav_client_feedback = feedback_msg - return - - - def preempt_feedback_callback(self, feedback_msg): - self.nav_client_preempt_feedback = feedback_msg - self.get_logger().info("preempt: {} ".format(self.nav_client_preempt_feedback)) - return - - - def get_action_server_name(self, action_name): - action_topic = "" - for char in action_name: - if char.isupper(): - if(len(action_topic)>1): - action_topic += "_" - action_topic += char.lower() - else: - action_topic += char.lower() - else: - action_topic += char - return action_topic - - - def get_state(self,): - return self.action_status - - - def preempt(self, timeout_secs=2.0): - if self.client is not None: - if not self.client.server_is_ready(): - self.get_logger().info("Waiting for the action server {}...".format(self.action_server_name)) - self.client.wait_for_server(timeout_sec=2) - if not self.client.server_is_ready(): - self.get_logger().info("action server {} not responding ... can not perform any action".format(self.action_server_name)) - return True - if self.goal_handle is None: - self.get_logger().info("There is no goal to stop it is already cancelled with status {}".format(self.action_status)) - return True - - counter = 0 - - try: - cancel_future = self.goal_handle.cancel_goal_async() - rclpy.spin_until_future_complete(self, cancel_future, timeout_sec=5.0) - self.get_logger().info("Waiting till terminating the current preemption") - self.action_status = 5 - self.get_logger().info("The goal cancel error code {} ".format(self.get_goal_cancel_error_msg(cancel_future.result().return_code))) - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_NATURAL_STATE - self.publish_robot_current_status_msg(self.ACTIONS.NAVIGATE_THROUGH_POSES, self.robot_current_status) - return True - except Exception as e: - self.get_logger().error("Something wrong with Nav2 Control server {} while preempting {}".format(e, self.action_server_name)) - return True - - - def construct_goal(self, goal_args, destination_node, origin_node): - paths = self.dt.get_paths_from_nested_dict(goal_args) - for item in paths: - value = item["value"] - if isinstance(value, str): - if value.startswith("$"): - _property = self.dt.getFromDict(destination_node, value[1:].split(".")) - goal_args = self.dt.setInDict(goal_args, item["keys"], _property) - - elif value.startswith("+") and origin_node is not None: - _property = self.dt.getFromDict(origin_node, value[1:].split(".")) - goal_args = self.dt.setInDict(goal_args, item["keys"], _property) - goal = goal_args - return goal - - - def construct_navigate_to_pose_goal(self, goal): - action_msgs = self.get_navigate_to_pose_goal(goal["target_pose"]["header"]["frame_id"], goal["target_pose"]["pose"]) - return action_msgs - - - def get_navigate_to_pose_goal(self, frame_id, goal): - nav_goal = NavigateToPose.Goal() - target_pose = self.create_pose_stamped_msg(frame_id, goal) - nav_goal.pose = target_pose - action_msgs = [] - action_msg = TopoNavEdgeActionMsg() - self.get_logger().info("Action: {}".format(self.ACTIONS.NAVIGATE_TO_POSE)) - if(self.ACTIONS.NAVIGATE_TO_POSE in self.bt_trees): - nav_goal.behavior_tree = self.bt_trees[self.ACTIONS.NAVIGATE_TO_POSE] - self.get_logger().info("Bt_tree: {}".format(self.bt_trees[self.ACTIONS.NAVIGATE_TO_POSE])) - - action_msg.setAction(self.ACTIONS.NAVIGATE_TO_POSE) - action_msg.setNavGoal(nav_goal) - action_msgs.append(action_msg) - return action_msgs - - - def construct_navigate_through_poses_goal(self, goals, actions, edge_ids, is_execpolicy=False): - action_msgs, control_server_configs = self.get_navigate_through_poses_goal(goals, actions, edge_ids, is_execpolicy=is_execpolicy) - return action_msgs, control_server_configs - - - def check_edges_area_same(self, side_edges): - edge_poses = [] - if(len(side_edges) >= 2): - for key, val in side_edges.items(): - for pose in val: - edge_poses.append(np.array([pose.pose.position.x, pose.pose.position.y])) - if(len(edge_poses) == 2): - if(np.linalg.norm(edge_poses[0]-edge_poses[1]) < 0.001): - return True - return False - - def check_target_is_same(self, node1, node2): - target1 = np.array([node1["pose"]["position"]["x"], node1["pose"]["position"]["y"]]) - target2 = np.array([node2["pose"]["position"]["x"], node1["pose"]["position"]["y"]]) - if(np.linalg.norm(target1-target2) < 0.001): - return True - return False - - def two_smallest_indices(self, lst): - if len(lst) < 1: - return [] - if len(lst) < 2: - return [0] - lst_copy = lst[:] - min_index1 = lst_copy.index(min(lst_copy)) - lst_copy[min_index1] = float('inf') - min_index2 = lst_copy.index(min(lst_copy)) - return [min_index1, min_index2] - - def extract_number(self, s): - return float(s.split('-')[0][1:]) - - - def get_navigate_through_poses_goal(self, poses, actions, edge_ids, is_execpolicy=False): - - def handle_row_operation(): - self.target_row_edge_id = edge_id.split("_")[0] - tag_id = self.target_row_edge_id.split("-")[1] - self.target_row_edge_id = self.target_row_edge_id[:-1] + self.ACTIONS.ROW_START_INDEX - tag_id = tag_id[:-1] + self.ACTIONS.ROW_START_INDEX - - self.get_logger().info("Action in_row_operation ") - self.get_logger().info("Edge id and tag id {} {}".format(self.target_row_edge_id, tag_id)) - cen = self.route_search.get_node_from_tmap2(self.target_row_edge_id) - children = self.route_search.get_connected_nodes_tmap2(cen) - selected_row_edge_nodes = {} - for next_edge in children: - if(next_edge.startswith(self.ACTIONS.OUTSIDE_EDGE_START_INDEX)): - upper_nodes = self.route_search.get_node_from_tmap2(next_edge)["node"]["edges"] - for edges_all in upper_nodes: - if((self.ACTIONS.GOAL_ALIGN_INDEX[0] in edges_all["node"]) - and (self.target_row_edge_id not in edges_all["node"])): - - targte_pose = self.route_search.get_node_from_tmap2(edges_all["node"])["node"]["pose"] - targte_pose_x_y = np.array([targte_pose["position"]["x"], targte_pose["position"]["y"]]) - selected_row_edge_nodes[edges_all["node"]] = (targte_pose, targte_pose_x_y) - - center_pose = self.route_search.get_node_from_tmap2(self.target_row_edge_id)["node"]["pose"]["position"] - center_pose = np.array([center_pose["x"], center_pose["y"]]) - distance_vector = [] - distance_with_edge_ids = {} - index_dis = 0 - for the_key, the_value in selected_row_edge_nodes.items(): - distance_vector.append(np.linalg.norm(center_pose- the_value[1])) - distance_with_edge_ids[index_dis] = the_key - index_dis += 1 - min_indices = self.two_smallest_indices(distance_vector) - children = [] - for index in min_indices: - children.append(distance_with_edge_ids[index]) - - # Sort the list based on the extracted number in descending order - children = sorted(children, key=self.extract_number, reverse=True) - - self.get_logger().info("Children edges {}".format(children)) - - target_pose_frame_id = nodes[0]["target_pose"]["header"]["frame_id"] - last_goal = nodes[-1] - - if(len(nodes) > 1): - if(self.check_target_is_same(cen["node"], last_goal["target_pose"])): - last_goal = nodes[0] - - selected_last_node = last_goal - if(len(nodes) == 1): - edges = edge_id.split("_") - if(len(edges) == 2): - edge_0, edge_1 = edges[0], edges[1] - tag_0, tag_1 = edge_0.split("-")[1], edge_1.split("-")[1] - if(tag_1 == tag_id): - selected_last_node["target_pose"]["pose"] = self.route_search.get_node_from_tmap2(edge_0)["node"]["pose"] - elif(tag_0 == tag_id): - selected_last_node["target_pose"]["pose"] = self.route_search.get_node_from_tmap2(edge_1)["node"]["pose"] - elif(len(selected_last_node) == 0 and self.current_node is not None): - selected_last_node["target_pose"]["pose"] = self.route_search.get_node_from_tmap2(self.current_node)["node"]["pose"] - else: - self.get_logger().error("Cound not find bounday edge...") - - self.selected_edges = {} - for child in children: - if tag_id in child: - child_node = self.route_search.get_node_from_tmap2(child) - side_intermediate_pose = self.get_intermediate_pose(cen, child_node, target_pose_frame_id) - side_last_intermediate_pose = self.get_last_intermediate_pose(side_intermediate_pose, cen, selected_last_node) - self.selected_edges[child] = [side_intermediate_pose, side_last_intermediate_pose] - - if(len(self.selected_edges) == 1): - self.selected_edges["side_wall"] = self.get_intermediate_poses_interpolated(self.selected_edges, cen, selected_last_node) - - if(self.check_edges_area_same(self.selected_edges)): - edge_action_is_valid = True - self.get_logger().error("Bounday edges are same") - else: - edge_action_is_valid = True - if edge_action_is_valid: - action_msg.setSideEdges(self.selected_edges, target_pose_frame_id) - if self.is_row_boundary_published == False: - boundary_info = action_msg.getBoundary() - self.boundary_publisher.publish(boundary_info) - self.is_row_boundary_published = True - action = self.ACTIONS.ROW_OPERATION - return action, action_msg - - - control_server_configs = {} - action_msgs = [] - self.is_row_boundary_published = False - edge_action_is_valid = True - - - # ================================================================== - # IF in Execute-Policy Mode: relaxed yaw tolerance for all segments - # ================================================================== - if is_execpolicy: - control_server_configs = [] - - self.get_logger().debug("[get_navigate_through_poses_goal] Executing with Execute-policy logic.") - - for seg_i, nodes in poses.items(): - nav_goal = NavigateThroughPoses.Goal() - for pose in nodes: - target_pose = self.create_pose_stamped_msg(pose["target_pose"]["header"]["frame_id"], pose["target_pose"]["pose"]) - nav_goal.poses.append(target_pose) - - action = actions[seg_i][0] - edge_id = edge_ids[seg_i][0] - action_msg = TopoNavEdgeActionMsg() - - self.get_logger().info("seg: {}, action: {}, edge id: {} ".format(seg_i, action, edge_id)) - - - self.get_logger().info(f"Segment {seg_i} -- action {action}") - current_config = None - if action in self.ACTIONS.bt_tree_with_control_server_config: - controller_plugin = self.ACTIONS.bt_tree_with_control_server_config[action] - current_config = self.ACTIONS.planner_with_goal_checker_config[controller_plugin].copy() - - if action == self.ACTIONS.NAVIGATE_TO_POSE and seg_i < len(poses) - 1: - self.get_logger().info(f"Segment {seg_i} is intermediate NAVIGATE_TO_POSE. Relaxing yaw tolerance.") - current_config['goal_checker.yaw_goal_tolerance'] = 2 * math.pi - - control_server_configs.append(current_config) - - if current_config: - self.get_logger().warn(f"Segment {seg_i} | XY tol: {current_config['goal_checker.xy_goal_tolerance']} | Yaw tol: {current_config['goal_checker.yaw_goal_tolerance']}") - - - if action in self.bt_trees: - nav_goal.behavior_tree = self.bt_trees[action] - edge_action_is_valid = True - - if(action == self.ACTIONS.ROW_TRAVERSAL and self.in_row_operation == True and (len(nodes) > 0)): - self.get_logger().warn(f"Segment {seg_i} action == self.ACTIONS.ROW_TRAVERSAL and self.in_row_operation == True and (len(nodes) > 0)") - action, action_msg = handle_row_operation() - - self.get_logger().info(" Action {} Bt_tree : {}".format(action, nav_goal.behavior_tree)) - if edge_action_is_valid: - self.get_logger().warn(f"Segment {seg_i} edge_action_is_valid") - action_msg.setAction(action) - action_msg.setNavGoal(nav_goal) - action_msgs.append(action_msg) - - # ================================================================== - # ELSE (Go-To-Node Mode): Use the original logic - # ================================================================== - else: - - self.get_logger().debug("[get_navigate_through_poses_goal] Executing with Go-To-Node logic.") - - for seg_i, nodes in poses.items(): - nav_goal = NavigateThroughPoses.Goal() - for pose in nodes: - target_pose = self.create_pose_stamped_msg(pose["target_pose"]["header"]["frame_id"], pose["target_pose"]["pose"]) - nav_goal.poses.append(target_pose) - - action = actions[seg_i][0] - edge_id = edge_ids[seg_i][0] - action_msg = TopoNavEdgeActionMsg() - - self.get_logger().info("seg: {}, action: {}, edge id: {} ".format(seg_i, action, edge_id)) - - if action in self.ACTIONS.bt_tree_with_control_server_config: - controller_plugin = self.ACTIONS.bt_tree_with_control_server_config[action] - control_server_configs[action] = self.ACTIONS.planner_with_goal_checker_config[controller_plugin] - if(action in self.bt_trees): - nav_goal.behavior_tree = self.bt_trees[action] - edge_action_is_valid = True - - if(action == self.ACTIONS.ROW_TRAVERSAL and self.in_row_operation == True and (len(nodes) > 0)): - action, action_msg = handle_row_operation() - - self.get_logger().info(" Action {} Bt_tree : {}".format(action, nav_goal.behavior_tree)) - if edge_action_is_valid: - action_msg.setAction(action) - action_msg.setNavGoal(nav_goal) - action_msgs.append(action_msg) - - self.get_logger().debug("[get_navigate_through_poses_goal] - Control server configs: {}".format(control_server_configs)) - return action_msgs, control_server_configs - - - def get_intermediate_poses_interpolated(self, side_poses, center_pose, last_pose): - - header = Header() - # header.stamp = self.get_clock().now().to_msg() - header.frame_id = last_pose["target_pose"]["header"]["frame_id"] - - side_edge_key = list(side_poses)[0] - side_front = side_poses[side_edge_key][0].pose.position - side_back = side_poses[side_edge_key][1].pose.position - center_pose = center_pose["node"]["pose"] - last_pose = last_pose["target_pose"]['pose'] - - side_front_opposite = PoseStamped() - side_front_opposite.header = header - side_front_opposite.pose.position.x = center_pose["position"]["x"] + -1.0*(side_front.x-center_pose["position"]["x"]) - side_front_opposite.pose.position.y = center_pose["position"]["y"] + -1.0*(side_front.y-center_pose["position"]["y"]) - side_front_opposite.pose.position.z = center_pose["position"]["z"] - side_front_opposite.pose.orientation.w = center_pose["orientation"]["w"] - side_front_opposite.pose.orientation.x = center_pose["orientation"]["x"] - side_front_opposite.pose.orientation.y = center_pose["orientation"]["y"] - side_front_opposite.pose.orientation.z = center_pose["orientation"]["z"] - - side_back_opposite = PoseStamped() - side_back_opposite.header = header - side_back_opposite.pose.position.x = last_pose["position"]["x"] + -1.0*(side_back.x-last_pose["position"]["x"]) - side_back_opposite.pose.position.y = last_pose["position"]["y"] + -1.0*(side_back.y-last_pose["position"]["y"]) - side_back_opposite.pose.position.z = last_pose["position"]["z"] - side_back_opposite.pose.orientation.w = last_pose["orientation"]["w"] - side_back_opposite.pose.orientation.x = last_pose["orientation"]["x"] - side_back_opposite.pose.orientation.y = last_pose["orientation"]["y"] - side_back_opposite.pose.orientation.z = last_pose["orientation"]["z"] - - return [side_front_opposite, side_back_opposite] - - def get_last_intermediate_pose(self, side_intermediate_pose, center_pose, last_pose): - header = Header() - # header.stamp = self.get_clock().now().to_msg() - header.frame_id = last_pose["target_pose"]["header"]["frame_id"] - target_pose = PoseStamped() - target_pose.header = header - intermediate_pose = side_intermediate_pose.pose.position - center_pose = center_pose["node"]["pose"] - last_pose = last_pose["target_pose"]['pose'] - target_pose.pose.position.x = last_pose["position"]["x"] + (intermediate_pose.x - center_pose["position"]["x"]) - target_pose.pose.position.y = last_pose["position"]["y"] + (intermediate_pose.y - center_pose["position"]["y"]) - target_pose.pose.position.z = center_pose["position"]["z"] - target_pose.pose.orientation.w = center_pose["orientation"]["w"] - target_pose.pose.orientation.x = center_pose["orientation"]["x"] - target_pose.pose.orientation.y = center_pose["orientation"]["y"] - target_pose.pose.orientation.z = center_pose["orientation"]["z"] - return target_pose - - - def get_intermediate_pose(self, pose1, pose2, header_frame_id, dev_factor=1.0): - header = Header() - # header.stamp = self.get_clock().now().to_msg() - header.frame_id = header_frame_id - target_pose = PoseStamped() - target_pose.header = header - pose1 = pose1["node"]["pose"] - pose2 = pose2["node"]["pose"] - if(dev_factor > 1.0): - target_pose.pose.position.x = (pose1["position"]["x"] + pose2["position"]["x"])/2.0 - target_pose.pose.position.y = (pose1["position"]["y"] + pose2["position"]["y"])/2.0 - else: - target_pose.pose.position.x = pose2["position"]["x"] - target_pose.pose.position.y = pose2["position"]["y"] - - target_pose.pose.position.z = pose1["position"]["z"] - target_pose.pose.orientation.w = pose1["orientation"]["w"] - target_pose.pose.orientation.x = pose1["orientation"]["x"] - target_pose.pose.orientation.y = pose1["orientation"]["y"] - target_pose.pose.orientation.z = pose1["orientation"]["z"] - return target_pose - - def create_pose_stamped_msg(self, frame_id, goal): - header = Header() - # header.stamp = self.get_clock().now().to_msg() - header.frame_id = frame_id - target_pose = PoseStamped() - target_pose.header = header - desired_target_pose = goal - target_pose.pose.position.x = desired_target_pose["position"]["x"] - target_pose.pose.position.y = desired_target_pose["position"]["y"] - target_pose.pose.position.z = desired_target_pose["position"]["z"] - target_pose.pose.orientation.w = desired_target_pose["orientation"]["w"] - target_pose.pose.orientation.x = desired_target_pose["orientation"]["x"] - target_pose.pose.orientation.y = desired_target_pose["orientation"]["y"] - target_pose.pose.orientation.z = desired_target_pose["orientation"]["z"] - return target_pose - - def crete_pose_stamped_msg_from_position(self, frame_id, goal): - header = Header() - # header.stamp = self.get_clock().now().to_msg() - header.frame_id = frame_id - target_pose = PoseStamped() - target_pose.header = header - target_pose.pose = goal.pose - return target_pose - - def get_result(self, ): - return self.goal_response - - def execute_row_operation_one_step(self, next_goal, target_pose_frame_id): - target_goal = NavigateThroughPoses.Goal() - if(self.ACTIONS.ROW_TRAVERSAL in self.bt_trees): - target_goal.behavior_tree = self.bt_trees[self.ACTIONS.ROW_TRAVERSAL] - self.get_logger().info("Row traversal BT path {}".format(target_goal.behavior_tree)) - else: - self.get_logger().info("Row traversal BT path not found") - target_pose = self.crete_pose_stamped_msg_from_position(target_pose_frame_id, next_goal) - target_goal.poses.append(target_pose) - - controller_plugin = self.ACTIONS.bt_tree_with_control_server_config[self.ACTIONS.ROW_TRAVERSAL] - - control_server_config = self.ACTIONS.planner_with_goal_checker_config[controller_plugin] - self.get_logger().info(" Control params {}".format(control_server_config)) - self.update_params_control_server.set_params(control_server_config) - - send_goal_future = self.client.send_goal_async(target_goal, feedback_callback=self.feedback_callback) - goal_accepted = self.send_goal_request(send_goal_future, self.ACTIONS.ROW_OPERATION) - if(goal_accepted == False): - return False - processed_goal = self.processing_goal_request(self.ACTIONS.ROW_OPERATION) - return processed_goal - - def send_goal_request(self, send_goal_future, msg): - while rclpy.ok(): - try: - # rclpy.spin_once(self) - # print("send_goal_future ", send_goal_future) - rclpy.spin_once(self, executor=self.executor_nav_client, timeout_sec=0.5) - # rclpy.spin_until_future_complete(self, send_goal_future, executor=self.executor_nav_client, timeout_sec=2.0) - if send_goal_future.done(): - self.goal_handle = send_goal_future.result() - break - except Exception as e: - self.get_logger().error("Nav2 server got some unexpected errors : {} while executing send_goal_request {}".format(e, msg)) - return False - - if not self.goal_handle.accepted: - self.get_logger().error('The goal rejected: {}'.format(msg)) - return False - self.get_logger().info('The goal accepted for {}'.format(msg)) - return True - - def processing_goal_request(self, target_action): - if self.goal_handle is None: - self.get_logger().error("Something wrong with the goal request, there is no goal to process {}".format(self.action_status)) - return True - self.goal_get_result_future = self.goal_handle.get_result_async() - self.get_logger().info("Waiting for {} action to complete".format(self.action_server_name)) - while rclpy.ok(): - try: - # rclpy.spin_once(self) - # print("goal_get_result_future ", self.goal_get_result_future) - rclpy.spin_once(self, executor=self.executor_nav_client, timeout_sec=1.5) - # rclpy.spin_until_future_complete(self, self.goal_get_result_future, executor=self.executor_nav_client, timeout_sec=2.0) - if self.goal_get_result_future.done(): - status = self.goal_get_result_future.result().status - self.action_status = status - self.get_logger().info("Executing the action response with status {}".format(self.get_status_msg(self.action_status))) - self.current_action = self.action_name - self.goal_response = self.goal_get_result_future.result() - if((self.get_status_msg(self.action_status) == "STATUS_EXECUTING") or (self.get_status_msg(self.action_status) == "STATUS_SUCCEEDED")): - self.get_logger().info("action is completed {}".format(target_action)) - break - if target_action in self.ACTIONS.ABORT_NOT_CONTINUE: - self.get_logger().info("action is not completed {}".format(target_action)) - return False - else: - self.get_logger().info("action is not completed {}. Executing next actions...".format(target_action)) - break - except Exception as e: - # self.goal_handle = Nosne - self.get_logger().error("Nav2 server got some unexpected errors: {} while executing processing_goal_request {}".format(e, target_action)) - return False - return True - - def execute_row_operation(self,): - target_goal = NavigateThroughPoses.Goal() - if(self.ACTIONS.ROW_OPERATION in self.bt_trees): - target_goal.behavior_tree = self.bt_trees[self.ACTIONS.ROW_OPERATION] - self.get_logger().info("Row operation BT path {}".format(target_goal.behavior_tree)) - else: - self.get_logger().error("Row operation BT is not provided {}") - return False - send_goal_future = self.client.send_goal_async(target_goal) - goal_accepted = self.send_goal_request(send_goal_future, self.ACTIONS.ROW_OPERATION) - if(goal_accepted == False): - return False - processed_goal = self.processing_goal_request(self.ACTIONS.ROW_OPERATION) - return processed_goal - - def execute_row_recovery(self, intermediate_pose, target_pose_frame_id): - target_goal = NavigateThroughPoses.Goal() - if(self.ACTIONS.ROW_RECOVERY in self.bt_trees): - target_goal.behavior_tree = self.bt_trees[self.ACTIONS.ROW_RECOVERY] - self.get_logger().info("Row recovery BT path {}".format(target_goal.behavior_tree)) - else: - self.get_logger().error("Row recovery BT is not provided {}") - return False - target_pose = self.crete_pose_stamped_msg_from_position(target_pose_frame_id, intermediate_pose) - target_goal.poses.append(target_pose) - send_goal_future = self.client.send_goal_async(target_goal) - goal_accepted = self.send_goal_request(send_goal_future, self.ACTIONS.ROW_RECOVERY) - if(goal_accepted == False): - return False - processed_goal = self.processing_goal_request(self.ACTIONS.ROW_RECOVERY) - return processed_goal - - def publish_robot_current_status_msg(self, action, status): - msg = String() - msg.data = status - self.robot_current_status_pub.publish(msg) - if self.robot_current_behavior_pub is not None: - from robot_behavior_msg.msg import RobotBehavior - robot_behavir = RobotBehavior() - robot_behavir.message = status - robot_behavir.behavior_code = self.ACTIONS.getCodeForRobotCurrentStatus(status) - self.robot_current_behavior_pub.publish(robot_behavir) - - def execute_row_operation_action(self, action_msg): - nav_goal = action_msg.getNavGoal() - boundary_info = action_msg.getBoundary() - target_frame_id = action_msg.getTargetFrameId() - self.boundary_publisher.publish(boundary_info) - self.is_row_boundary_published = False - - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_NATURAL_STATE - self.publish_robot_current_status_msg(self.ACTIONS.NAVIGATE_THROUGH_POSES, self.robot_current_status) - self.in_row_inter_pose = nav_goal.poses - - if len(self.in_row_inter_pose) > 0: - self.get_logger().info("Executing action : {} ".format(self.ACTIONS.ROW_OPERATION)) - while rclpy.ok(): - try: - # rclpy.spin_once(self) - # print("send_goal_future self.current_robot_pose ", self.current_robot_pose) - rclpy.spin_once(self, executor=self.executor_nav_client, timeout_sec=0.5) - if(self.current_robot_pose is not None): - # self.get_logger().info("Robot current pose: {}".format(self.current_robot_pose)) - break - except Exception as e: - self.allowed_row_operation = False - self.get_logger().error("Could not set the current pose of the robot {}".format(e, self.ACTIONS.ROW_OPERATION)) - return False - - if(len(self.in_row_inter_pose)==1): - self.in_row_inter_pose = [self.current_robot_pose, self.in_row_inter_pose[0]] - - self.get_logger().info(" ==========start executing in row operaitons============") - inrow_opt = RowOperations(self.in_row_inter_pose, self.inrow_step_size, intermediate_dis=self.intermediate_dis) - robot_init_pose = self.current_robot_pose - - if inrow_opt.isPlanCalculated(): - while True: - robot_init_pose = self.current_robot_pose - next_goal, intermediate_pose, get_to_goal = inrow_opt.getNextGoal(robot_init_pose) - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_PREPARATION_STATE - if(self.current_node is not None): - node_id = self.current_node.split("-") - if (len(node_id) == 2): - node_id = node_id[1] - if(node_id.startswith(self.ACTIONS.ROW_COLUMN_START_INDEX)): - if (self.ACTIONS.ROW_START_INDEX not in node_id): - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_AUTONOMOUS_HARVESTING_STATE - - self.publish_robot_current_status_msg(self.ACTIONS.ROW_OPERATION, self.robot_current_status) - done_operation = self.execute_row_operation() - self.get_logger().info("done_operation {} ".format(done_operation)) - # target_goal = NavigateThroughPoses.Goal() - self.get_logger().info("Robot current pose: {},{}" - .format(next_goal.pose.position.x, next_goal.pose.position.y)) - if(self.intermediate_dis > 0.0): - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_PREPARATION_STATE - self.publish_robot_current_status_msg(self.ACTIONS.ROW_RECOVERY, self.robot_current_status) - get_proper_alignment = self.execute_row_recovery(intermediate_pose, target_frame_id) - if(get_proper_alignment == False): - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_DISABLE_STATE - self.publish_robot_current_status_msg(self.ACTIONS.ROW_RECOVERY, self.robot_current_status) - return False - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_AUTONOMOUS_NAVIGATION_STATE - self.publish_robot_current_status_msg(self.ACTIONS.ROW_TRAVERSAL, self.robot_current_status) - step_moved = self.execute_row_operation_one_step(next_goal, target_frame_id) - if(step_moved == False): - if(self.intermediate_dis > 0.0): - intermediate_pose, _ = inrow_opt.getNextIntermediateGoal(self.current_robot_pose) - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_AUTONOMOUS_RECOVERY_STATE - self.publish_robot_current_status_msg(self.ACTIONS.ROW_RECOVERY, self.robot_current_status) - get_proper_alignment = self.execute_row_recovery(intermediate_pose, target_frame_id) - if(get_proper_alignment == False): - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_DISABLE_STATE - self.publish_robot_current_status_msg(self.ACTIONS.ROW_RECOVERY, self.robot_current_status) - return False - else: - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_AUTONOMOUS_NAVIGATION_STATE - self.publish_robot_current_status_msg(self.ACTIONS.ROW_TRAVERSAL, self.robot_current_status) - step_moved = self.execute_row_operation_one_step(next_goal, target_frame_id) - if(step_moved == False): - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_DISABLE_STATE - self.publish_robot_current_status_msg(self.ACTIONS.ROW_TRAVERSAL, self.robot_current_status) - return False - else: - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_AUTONOMOUS_NAVIGATION_STATE - self.publish_robot_current_status_msg(self.ACTIONS.ROW_TRAVERSAL, self.robot_current_status) - step_moved = self.execute_row_operation_one_step(next_goal, target_frame_id) - if(step_moved == False): - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_DISABLE_STATE - self.publish_robot_current_status_msg(self.ACTIONS.ROW_TRAVERSAL, self.robot_current_status) - return False - if(get_to_goal): - if step_moved: - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_NATURAL_STATE - self.publish_robot_current_status_msg(self.ACTIONS.ROW_TRAVERSAL, self.robot_current_status) - self.get_logger().info("Reach to the final goal {},{}" - .format(next_goal.pose.position.x, next_goal.pose.position.y)) - - else: - self.get_logger().error("Can not reach to the final goal {},{}" - .format(next_goal.pose.position.x, next_goal.pose.position.y)) - break - return True - - - def execute(self): - self.get_logger().warn("===========================================Executing action===========================================") - if not self.client.server_is_ready(): - self.get_logger().info("Waiting for the action server {}...".format(self.action_server_name)) - self.client.wait_for_server(timeout_sec=2) - - if not self.client.server_is_ready(): - self.get_logger().info("action server {} not responding ... can not perform any action".format(self.action_server_name)) - return - - self.get_logger().info("Number of actions : {} ".format(len(self.action_msgs))) - for index, action_msg in enumerate(self.action_msgs): - target_goal, target_action = action_msg.getNavGoal(), action_msg.getAction() - self.get_logger().warn("Executing action : {} ".format(target_action)) - - # Publish segment destination for visualisation purposes - current_destination = (target_goal.poses[-1].pose.position.x, target_goal.poses[-1].pose.position.y) - self.get_logger().warn("Current destination : {} ".format(self.destination_node_str[current_destination])) - self.current_dest.publish(String(data=self.destination_node_str[current_destination])) - - # Handles both lists and dictionaries - control_server_config = None - if isinstance(self.control_server_configs, list): - # New exec_policy mode - if index < len(self.control_server_configs): - control_server_config = self.control_server_configs[index] - elif isinstance(self.control_server_configs, dict): - # Original go-to-node mode - if target_action in self.control_server_configs: - control_server_config = self.control_server_configs[target_action] - - # If a valid config was found, apply it. - if control_server_config: - self.get_logger().info(f"Applying parameters for segment {index}: {control_server_config}") - self.update_params_control_server.set_params(control_server_config) - - if (target_action == self.ACTIONS.ROW_OPERATION): - row_operation_is_completed = self.execute_row_operation_action(action_msg) - if(row_operation_is_completed == False): - return False - else: - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_AUTONOMOUS_NAVIGATION_STATE - self.publish_robot_current_status_msg(self.ACTIONS.NAVIGATE_THROUGH_POSES, self.robot_current_status) - send_goal_future = self.client.send_goal_async(target_goal, feedback_callback=self.feedback_callback) - goal_accepted = self.send_goal_request(send_goal_future, target_action) - if(goal_accepted == False): - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_DISABLE_STATE - self.publish_robot_current_status_msg(self.ACTIONS.NAVIGATE_THROUGH_POSES, self.robot_current_status) - return False - processed_goal = self.processing_goal_request(target_action) - if(processed_goal == False): - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_DISABLE_STATE - self.publish_robot_current_status_msg(self.ACTIONS.NAVIGATE_THROUGH_POSES, self.robot_current_status) - return processed_goal - self.robot_current_status = self.ACTIONS.ROBOT_STATUS_NATURAL_STATE - self.publish_robot_current_status_msg(self.ACTIONS.NAVIGATE_THROUGH_POSES, self.robot_current_status) - return True diff --git a/topological_navigation/topological_navigation/edge_controller.py b/topological_navigation/topological_navigation/edge_controller.py deleted file mode 100644 index 9eefb0f1..00000000 --- a/topological_navigation/topological_navigation/edge_controller.py +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy -import math -import tf - -from geometry_msgs.msg import Pose -from geometry_msgs.msg import Point - -from visualization_msgs.msg import * -from interactive_markers.interactive_marker_server import * - -from topological_navigation_msgs.msg import TopologicalNode -from topological_navigation_msgs.msg import TopologicalMap -from topological_navigation.topological_map import * - - - -class edge_controllers(object): - - def __init__(self) : - self.in_feedback=False - #self.timer = Timer(1.0, self.timer_callback) - #map_name = rospy.get_param('topological_map_name', 'top_map') - self.map_update = rospy.Publisher('/update_map', std_msgs.msg.Time, queue_size=10) - - self._edge_server = InteractiveMarkerServer("/topological_map_edges") - rospy.Subscriber('/topological_map', TopologicalMap, self.MapCallback) - - - def update_map(self, msg) : - print("updating edge controllers...") - - self.topo_map = topological_map(msg.name, msg=msg) - self._edge_server.clear() - self._edge_server.applyChanges() - - for node in self.topo_map.nodes : - for i in node.edges : - ind = self.topo_map._get_node_index(i['node']) - V1=Point() - V2=Point() - V1= (node._get_pose()).position - V2= (self.topo_map.nodes[ind]._get_pose()).position - edge_name=node.name+"_"+self.topo_map.nodes[ind].name - self._edge_marker(edge_name, V1, V2, edge_name) - - - """ - MapCallback - - This function receives the Topological Map - """ - def MapCallback(self, msg) : - self.update_map(msg) - - - - def makeEmptyMarker(self, dummyBox=True ): - int_marker = InteractiveMarker() - int_marker.header.frame_id = "map" - int_marker.scale = 1 - return int_marker - - - - def makeBox(self, msg ): - marker = Marker() - - marker.type = Marker.ARROW - marker.scale.x = msg.scale * 0.45 - marker.scale.y = msg.scale * 0.25 - marker.scale.z = msg.scale * 0.15 - marker.lifetime.secs = 3 - marker.color.r = 0.8 - marker.color.g = 0.1 - marker.color.b = 0.0 - marker.color.a = 1.0 - - return marker - - - - def _edge_marker(self, marker_name, point1, point2, marker_description="edge marker") : - marker = self.makeEmptyMarker() - marker.name = marker_name - #marker.description = marker_description - - control = InteractiveMarkerControl() - - control.interaction_mode = InteractiveMarkerControl.BUTTON - control.always_visible = True - - control.markers.append( self.makeBox( marker ) ) - marker.controls.append(control) - - self._edge_server.insert(marker, self.feedback_cb) - self._edge_server.applyChanges() - - pose = Pose() - - pose.position.x = (point1.x+point2.x)/2 - pose.position.y = (point1.y+point2.y)/2 - pose.position.z = ((point1.z+point2.z)/2)+0.15 - angle = math.atan2((point2.y-point1.y),(point2.x-point1.x)) - qat = tf.transformations.quaternion_from_euler(0, 0, angle) - pose.orientation.w = qat[3] - pose.orientation.x = qat[0] - pose.orientation.y = qat[1] - pose.orientation.z = qat[2] - - if pose is not None: - self._edge_server.setPose( marker.name, pose ) - self._edge_server.applyChanges() - - - - def feedback_cb(self, feedback): - self.topo_map.remove_edge(feedback.marker_name) - self._edge_server.erase(feedback.marker_name) - self._edge_server.applyChanges() - self.map_update.publish(rospy.Time.now()) - - - - def clear(): - self._edge_server.clear() - self._edge_server.applyChanges() - - - - def __del__(self): - del self._edge_server diff --git a/topological_navigation/topological_navigation/edge_reconfigure_manager.py b/topological_navigation/topological_navigation/edge_reconfigure_manager.py deleted file mode 100644 index 1789571d..00000000 --- a/topological_navigation/topological_navigation/edge_reconfigure_manager.py +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env python -""" -Created on Wed Feb 10 15:58:34 2021 - -@author: Adam Binch (abinch@sagarobotics.com) -""" -############################################################################################################# -import rospy, dynamic_reconfigure.client -from topological_navigation_msgs.srv import ReconfAtEdges - - -class EdgeReconfigureManager(object): - - - def __init__(self): - - self.active = False - - self.edge = {} - self.initial_config = {} - self.edge_config = {} - self.namespaces = [] - - self.current_edge_group = "none" - self.edge_groups = rospy.get_param("/edge_nav_reconfig_groups", {}) - - - def register_edge(self, edge): - - self.active = False - self.edge = edge - - namespaces = [] - if "config" in edge: - namespaces = [param["namespace"] for param in edge["config"]] - - self.namespaces = list(set(namespaces)) - if self.namespaces: - self.active = True - rospy.loginfo("Edge Reconfigure Manager: Processing edge {}".format(edge["edge_id"])) - - - def initialise(self): - - self.initial_config = {} - self.edge_config = {} - - for namespace in self.namespaces: - rospy.loginfo("Edge Reconfigure Manager: Getting initial configuration for {}".format(namespace)) - - client = dynamic_reconfigure.client.Client(namespace, timeout=2.0) - try: - config = client.get_configuration() - - except rospy.ServiceException as e: - rospy.logwarn("Edge Reconfigure Manager: Caught service exception: {}".format(e)) - continue - - self.initial_config[namespace] = {} - self.edge_config[namespace] = {} - - for param in self.edge["config"]: - if param["namespace"] == namespace: - self.edge_config[namespace][param["name"]] = param["value"] - - reset = True if "reset" not in param else param["reset"] - if reset: - self.initial_config[namespace][param["name"]] = config[param["name"]] - - - def reconfigure(self): - """ - If using the new map then edge reconfigure is done using settings in the map. - """ - for namespace in self.edge_config: - rospy.loginfo("Edge Reconfigure Manager: Setting {} = {}".format(namespace, self.edge_config[namespace])) - self.update(namespace, self.edge_config[namespace]) - - - def _reset(self): - """ - Used to reset edge params to their default values when the action has completed (only if using the new map) - """ - for namespace in self.initial_config: - if self.initial_config[namespace]: - rospy.loginfo("Edge Reconfigure Manager: Resetting {} = {}".format(namespace, self.initial_config[namespace])) - self.update(namespace, self.initial_config[namespace]) - - - def update(self, namespace, params): - - client = dynamic_reconfigure.client.Client(namespace, timeout=2.0) - try: - client.update_configuration(params) - - except rospy.ServiceException as e: - rospy.logwarn("Edge Reconfigure Manager: Caught service exception: {}".format(e)) - - - def srv_reconfigure(self, edge_id): - """ - If using the old map then edge reconfigure is done via a service. - """ - edge_group = "none" - for group in self.edge_groups: - print("Check Edge: ", edge_id, "in ", group) - if edge_id in self.edge_groups[group]["edges"]: - edge_group = group - break - - print("current group: ", self.current_edge_group) - print("edge group: ", edge_group) - - if edge_group is not self.current_edge_group: - print("RECONFIGURING EDGE: ", edge_id) - print("TO ", edge_group) - try: - rospy.wait_for_service("reconf_at_edges", timeout=3) - reconf_at_edges = rospy.ServiceProxy("reconf_at_edges", ReconfAtEdges) - resp1 = reconf_at_edges(edge_id) - print(resp1.success) - if resp1.success: - self.current_edge_group = edge_group - except rospy.ServiceException as e: - rospy.logerr("Service call failed: %s" % e) - print("-------") -############################################################################################################# \ No newline at end of file diff --git a/topological_navigation/topological_navigation/edge_reconfigure_manager2.py b/topological_navigation/topological_navigation/edge_reconfigure_manager2.py deleted file mode 100644 index 332bcc21..00000000 --- a/topological_navigation/topological_navigation/edge_reconfigure_manager2.py +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env python -""" -Created on Tue Nov 5 22:02:24 2023 -@author: Geesara Kulathunga (ggeesara@gmail.com) - -""" -############################################################################################################# -import rclpy -from topological_navigation_msgs.srv import ReconfAtEdges -from topological_navigation.scripts.param_processing import ParameterUpdaterNode -from rclpy import Parameter -from rclpy.callback_groups import ReentrantCallbackGroup - -class EdgeReconfigureManager(rclpy.node.Node): - def __init__(self): - super().__init__("edge_conguration_manager") - self.active = False - self.edge = {} - self.initial_config = {} - self.edge_config = {} - self.namespaces = [] - self.current_edge_group = "none" - self.declare_parameter("/edge_nav_reconfig_groups", Parameter.Type.STRING_ARRAY) - self.edge_groups = self.get_parameter_or("/edge_nav_reconfig_groups", Parameter('str', Parameter.Type.STRING_ARRAY, [])).value - self.callback_group = ReentrantCallbackGroup() - self.reconf_at_edges = self.create_client(ReconfAtEdges, '/reconf_at_edges') - - - def register_edge(self, edge): - self.active = False - self.edge = edge - namespaces = [] - if "config" in edge: - namespaces = [param["namespace"] for param in edge["config"]] - self.namespaces = list(set(namespaces)) - if self.namespaces: - self.active = True - self.get_logger().info("Edge Reconfigure Manager: Processing edge {}".format(edge["edge_id"])) - - - def initialise(self): - - self.initial_config = {} - self.edge_config = {} - for namespace in self.namespaces: - self.get_logger().info("Edge Reconfigure Manager: Getting initial configuration for {}".format(namespace)) - client = ParameterUpdaterNode(namespace) - try: - config = client.get_params() - except Exception as e: - self.get_logger().warning("Edge Reconfigure Manager: Caught service exception: {}".format(e)) - continue - - self.initial_config[namespace] = {} - self.edge_config[namespace] = {} - - for param in self.edge["config"]: - if param["namespace"] == namespace: - self.edge_config[namespace][param["name"]] = param["value"] - - reset = True if "reset" not in param else param["reset"] - if reset: - self.initial_config[namespace][param["name"]] = config[param["name"]] - - - def reconfigure(self): - """ - If using the new map then edge reconfigure is done using settings in the map. - """ - for namespace in self.edge_config: - self.get_logger().info("Edge Reconfigure Manager: Setting {} = {}".format(namespace, self.edge_config[namespace])) - self.update(namespace, self.edge_config[namespace]) - - - def _reset(self): - """ - Used to reset edge params to their default values when the action has completed (only if using the new map) - """ - for namespace in self.initial_config: - if self.initial_config[namespace]: - self.get_logger().info("Edge Reconfigure Manager: Resetting {} = {}".format(namespace, self.initial_config[namespace])) - self.update(namespace, self.initial_config[namespace]) - - - def update(self, namespace, params): - client = ParameterUpdaterNode(namespace) - try: - client.get_params() - client.set_params(params) - except Exception as e: - self.get_logger().warning("Edge Reconfigure Manager: Caught service exception: {}".format(e)) - - - def srv_reconfigure(self, edge_id): - """ - If using the old map then edge reconfigure is done via a service. - """ - edge_group = "none" - for group in self.edge_groups: - self.get_logger().info("Check Edge: ", edge_id, "in ", group) - if edge_id in self.edge_groups[group]["edges"]: - edge_group = group - break - - self.get_logger().info("current group: ", self.current_edge_group) - self.get_logger().info("edge group: ", edge_group) - - if edge_group is not self.current_edge_group: - self.get_logger().info("RECONFIGURING EDGE: ", edge_id) - self.get_logger().info("TO ", edge_group) - self.req_get = ReconfAtEdges.Request() - self.req_get.edge_id = edge_id - self.future = self.reconf_at_edges.call_async(self.req_get) - while rclpy.ok(): - rclpy.spin_once(self) - if self.future.done(): - try: - response = self.future.result() - if response.success: - self.current_edge_group = edge_group - break - except Exception as e: - self.get_logger().error("Error while reconfiguring the edge {}".format(e)) - pass - -############################################################################################################# \ No newline at end of file diff --git a/topological_navigation/topological_navigation/edge_std.py b/topological_navigation/topological_navigation/edge_std.py deleted file mode 100644 index fa947fb3..00000000 --- a/topological_navigation/topological_navigation/edge_std.py +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy -import math -import tf -import numpy - -import matplotlib as mpl -import matplotlib.cm as cm - -from geometry_msgs.msg import Pose -from geometry_msgs.msg import Point - -from visualization_msgs.msg import * - -from topological_navigation_msgs.msg import TopologicalNode -from topological_navigation.topological_map import * -from topological_navigation_msgs.msg import NavRoute - - -class edges_std_marker(object): - - def __init__(self, map_name) : - self.map_name = map_name - self.route_nodes = NavRoute() - self.updating=True - self.update_map(map_name) - - - def update_map(self,map_name) : - - self.topo_map = topological_map(self.map_name) - - self.map_edges = MarkerArray() - - total = len(self.route_nodes.source) - - if total > 0: - self.maxval= numpy.nanmax(self.route_nodes.prob)+0.000001 - #self.minval= numpy.min(self.route_nodes.prob)-0.000001 - else : - self.maxval= 0 - self.minval= 0 - counter=0 - total = len(self.route_nodes.source) - - while counter < total : - inds = self.topo_map._get_node_index(self.route_nodes.source[counter]) - indt = self.topo_map._get_node_index(self.route_nodes.target[counter]) - point1=Point() - point2=Point() - point1= (self.topo_map.nodes[inds]._get_pose()).position - point2= (self.topo_map.nodes[indt]._get_pose()).position - val = self.route_nodes.prob[counter] - #val = val/maxval - if not math.isnan(val) : - self.create_edge(point1, point2, val) - counter+=1 - - idn = 0 - for m in self.map_edges.markers: - m.id = idn - idn += 1 - self.updating=False - - - def create_edge(self, point1, point2, val): - norm = mpl.colors.Normalize(vmin=0.0, vmax=self.maxval) - cmap = cm.YlOrRd - m = cm.ScalarMappable(norm=norm, cmap=cmap) - - marker = Marker() - marker.header.frame_id = "map" - marker.type = marker.ARROW - pose = Pose() - -# pose.position.x = (point1.x+point2.x)/2 -# pose.position.y = (point1.y+point2.y)/2 -# pose.position.z = (point1.z+point2.z)/2 - pose.position.x = point1.x - pose.position.y = point1.y - pose.position.z = point1.z - angle = math.atan2((point2.y-point1.y),(point2.x-point1.x)) - - qat = tf.transformations.quaternion_from_euler(0, 0, angle) - pose.orientation.w = qat[3] - pose.orientation.x = qat[0] - pose.orientation.y = qat[1] - pose.orientation.z = qat[2] - - r = math.hypot((point2.y-point1.y),(point2.x-point1.x))/3.0 - marker.scale.x = r - marker.scale.y = 0.2 - marker.scale.z = 0.2 - - #val = float(counter)/float(total) - v = m.to_rgba(1.0-val) - marker.color.a = v[3] - marker.color.r = v[0] - marker.color.g = v[1] - marker.color.b = v[2] - marker.pose = pose - self.map_edges.markers.append(marker) - - - def received_route(self, route): - self.route_nodes = route - self.clear() - self.update_map(self.topo_map) - - def clear(self): - self.updating=True - del self.map_edges \ No newline at end of file diff --git a/topological_navigation/topological_navigation/goto.py b/topological_navigation/topological_navigation/goto.py deleted file mode 100644 index f4fba5c6..00000000 --- a/topological_navigation/topological_navigation/goto.py +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy -import math -import tf -import actionlib -from threading import Timer - - -from geometry_msgs.msg import Pose -from geometry_msgs.msg import Point - -from visualization_msgs.msg import * -from interactive_markers.interactive_marker_server import * - -from topological_navigation_msgs.msg import TopologicalMap, GotoNodeGoal, GotoNodeAction -from topological_navigation.topological_map import * - - - -class go_to_controllers(object): - - def __init__(self) : - self.in_feedback=False - #self.timer = Timer(1.0, self.timer_callback) - #map_name = rospy.get_param('topological_map_name', 'top_map') - self._goto_server = InteractiveMarkerServer("go_to_node") - self.client = actionlib.SimpleActionClient('topological_navigation', GotoNodeAction) - self.client.wait_for_server() - rospy.Subscriber('topological_map', TopologicalMap, self.MapCallback) - rospy.loginfo(" ... Go to Initialised") - - - def update_map(self, map_msg) : - print("updating goto controllers...") - #self.topo_map = topological_map(map_name) - self._goto_server.clear() - for i in map_msg.nodes : - self.create_marker(i.name, i.pose, i.name) - - """ - MapCallback - - This function receives the Topological Map - """ - def MapCallback(self, msg) : - self.update_map(msg) - - - - def makeEmptyMarker(self, dummyBox=True ) : - int_marker = InteractiveMarker() - int_marker.header.frame_id = "map" - int_marker.scale = 1 - return int_marker - - - def makeBox(self, msg ): - marker = Marker() - - marker.type = Marker.ARROW - marker.scale.x = msg.scale * 0.5 - marker.scale.y = msg.scale * 0.25 - marker.scale.z = msg.scale * 0.15 - marker.lifetime.secs = 3 - marker.color.r = 0.1 - marker.color.g = 0.8 - marker.color.b = 0.1 - marker.color.a = 1.0 - return marker - - - def create_marker(self, marker_name, pos, marker_description="goto marker") : - # create an interactive marker for our server - - marker = self.makeEmptyMarker() - marker.name = marker_name - marker.description = marker_name - - control = InteractiveMarkerControl() - - control.interaction_mode = InteractiveMarkerControl.BUTTON - control.always_visible = True - - control.markers.append( self.makeBox( marker ) ) - marker.controls.append(control) - - self._goto_server.insert(marker, self.feedback_cb) - self._goto_server.applyChanges() - - if pos is not None: - pos.position.z=pos.position.z+0.15 - self._goto_server.setPose( marker.name, pos ) - self._goto_server.applyChanges() - - - - def feedback_cb(self, feedback): - if not self.in_feedback : - self.in_feedback=True - print('GOTO: '+str(feedback.marker_name)) - self.client.cancel_all_goals() - navgoal = GotoNodeGoal() - navgoal.target = feedback.marker_name - #navgoal.origin = orig - # Sends the goal to the action server. - self.client.send_goal(navgoal) -# self.update_needed=True - self.timer = Timer(1.0, self.timer_callback) - self.timer.start() - - - def timer_callback(self) : - self.in_feedback = False - - def clear(): - self._goto_server.clear() - self._goto_server.applyChanges() - - - def __del__(self): - del self._goto_server diff --git a/topological_navigation/topological_navigation/load_maps_from_yaml.py b/topological_navigation/topological_navigation/load_maps_from_yaml.py deleted file mode 100644 index dcdd3c7c..00000000 --- a/topological_navigation/topological_navigation/load_maps_from_yaml.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- -""" -Created on Wed Nov 4 10:56:07 2015 - -@author: cdondrup -""" - -import rospy -import yaml -import mongodb_store.util as dc_util -from mongodb_store.message_store import MessageStoreProxy -from topological_navigation_msgs.msg import TopologicalNode -from topological_navigation.topological_map import topological_map -import os - - -class YamlMapLoader(object): - def __init__(self): - self.msg_store = MessageStoreProxy(collection='topological_maps') - - def get_maps(self): - """ - Queries the database and returns details of the available topological maps. - :return: A dictionary where each key is the name of a topological map and each - item is a dictionary of details. Details are: - "number_nodes" ; integer - "edge_actions" : list of action server names used for traversal - "last_modified" : datetime.datetime object for the last time a node was inserted - """ - maps = dict() - - nodes = self.msg_store.query(TopologicalNode._type) - - for node in nodes: - pointset = node[1]["pointset"] - if not maps.has_key(pointset): - maps[pointset] = {"number_nodes": 0, "edge_actions": set(), "last_modified": ""} - maps[pointset]["number_nodes"] += 1 - if (maps[pointset]["last_modified"] == "" or - node[1]["inserted_at"] > maps[pointset]["last_modified"]): - maps[pointset]["last_modified"] = node[1]["inserted_at"] - for edge in node[0].edges: - maps[pointset]["edge_actions"].add(edge.action) - - return maps - - def _load_yaml(self, filename): - rospy.loginfo("loading %s"%filename) - with open(filename, 'r') as f: - return yaml.load(f) - - def read_maps(self, p): - data = [] - if os.path.isdir(p): - for f in os.listdir(p): - if f.endswith(".yaml"): - data.append(self._load_yaml(p+'/'+f)) - else: - data.append(self._load_yaml(p)) - return data - - def insert_maps(self, data, new_pointset=None, force=False): - current_maps = self.get_maps() - for idx, tmap in enumerate(data): - pointset = None - if new_pointset != None: # If there are more than one map, it takes the custom pointset and appends an index - pointset = new_pointset+str(idx+1) if len(data) > 1 else new_pointset - first_node = True - for i in tmap: - try: - meta = i['meta'] - meta['pointset'] = pointset if pointset != None else meta['pointset'] - if meta['pointset'] in current_maps and first_node: - first_node = False - if not force: - rospy.logwarn("Map '%s' already in datacentre, skipping! Use -f to force override or change pointset name with --pointset" % meta['pointset']) - break - else: - topo_map = topological_map(meta['pointset']) - topo_map.delete_map() - elif first_node: - first_node = False - rospy.loginfo("Inserting map: %s" % meta['pointset']) - msgv = dc_util.dictionary_to_message(i['node'], TopologicalNode) - self.msg_store.insert(msgv,meta) - except TypeError: - pass # Not a topo map \ No newline at end of file diff --git a/topological_navigation/topological_navigation/manager.py b/topological_navigation/topological_navigation/manager.py deleted file mode 100644 index ea9f25d6..00000000 --- a/topological_navigation/topological_navigation/manager.py +++ /dev/null @@ -1,1011 +0,0 @@ -#!/usr/bin/env python -import math -import rospy -import sys -import pymongo -import json -import yaml -import re -import uuid -import std_msgs.msg -import os - -from topological_navigation_msgs.msg import * -from topological_navigation_msgs.srv import * -from mongodb_store.message_store import MessageStoreProxy -from topological_navigation.manager2 import map_manager_2 -from rospy_message_converter import message_converter -from topological_navigation.tmap_utils import get_node_names_from_edge_id - - -def node_dist(node1,node2): - dist = math.sqrt((node1.pose.position.x - node2.pose.position.x)**2 + (node1.pose.position.y - node2.pose.position.y)**2 ) - return dist - - -class map_manager(object): - - - def __init__(self): - - #This service returns any given map - self.get_map_srv=rospy.Service('/topological_map_publisher/get_topological_map', topological_navigation_msgs.srv.GetTopologicalMap, self.get_topological_map_cb) - #This service switches topological map - self.switch_map_srv=rospy.Service('/topological_map_manager/switch_topological_map', topological_navigation_msgs.srv.GetTopologicalMap, self.switch_topological_map_cb) - #This service adds a node - self.add_node_srv=rospy.Service('/topological_map_manager/add_topological_node', topological_navigation_msgs.srv.AddNode, self.add_topological_node_cb) - #This service deletes a node - self.remove_node_srv=rospy.Service('/topological_map_manager/remove_topological_node', topological_navigation_msgs.srv.RmvNode, self.remove_node_cb) - #This service adds content to a node - self.add_content_to_node_srv=rospy.Service('/topological_map_manager/add_content_to_node', topological_navigation_msgs.srv.AddContent, self.add_content_cb) - self.update_node_name_srv = rospy.Service("/topological_map_manager/update_node_name", topological_navigation_msgs.srv.UpdateNodeName, self.update_node_name_cb) - self.update_node_waypoint_srv = rospy.Service("/topological_map_manager/update_node_pose", topological_navigation_msgs.srv.AddNode, self.update_node_waypoint_cb) - self.update_node_tolerance_srv = rospy.Service("/topological_map_manager/update_node_tolerance", topological_navigation_msgs.srv.UpdateNodeTolerance, self.update_node_tolerance_cb) - #This service adds a tag to the meta information of a list of nodes - self.get_tag_srv=rospy.Service('/topological_map_manager/get_tags', topological_navigation_msgs.srv.GetTags, self.get_tags_cb) - #This service adds gets all tags from the meta information of a node - self.get_node_tag_srv=rospy.Service('/topological_map_manager/get_node_tags', topological_navigation_msgs.srv.GetNodeTags, self.get_node_tags_cb) - #This service adds gets all tags from the meta information of a node - self.modify_tag_srv=rospy.Service('/topological_map_manager/modify_node_tags', topological_navigation_msgs.srv.ModifyTag, self.modify_tag_cb) - #This service adds a tag to the meta information of a list of nodes - self.add_tag_srv=rospy.Service('/topological_map_manager/add_tag_to_node', topological_navigation_msgs.srv.AddTag, self.add_tag_cb) - #This service removes a tag from the meta information of a list of nodes - self.rm_tag_srv=rospy.Service('/topological_map_manager/rm_tag_from_node', topological_navigation_msgs.srv.AddTag, self.rm_tag_cb) - #This service returns a list of nodes that have a given tag - self.get_tagged_srv=rospy.Service('/topological_map_manager/get_tagged_nodes', topological_navigation_msgs.srv.GetTaggedNodes, self.get_tagged_cb) - #This service returns a list of edges_ids between two nodes - self.get_node_edges_srv=rospy.Service('/topological_map_manager/get_edges_between_nodes', topological_navigation_msgs.srv.GetEdgesBetweenNodes, self.get_edges_between_cb) - #adds edge between two nodes - self.add_edges_srv=rospy.Service('/topological_map_manager/add_edges_between_nodes', topological_navigation_msgs.srv.AddEdge, self.add_edge_cb) - self.update_edge_srv=rospy.Service('/topological_map_manager/update_edge', topological_navigation_msgs.srv.UpdateEdgeLegacy, self.update_edge_cb) - self.remove_edge_srv=rospy.Service('/topological_map_manager/remove_edge', topological_navigation_msgs.srv.AddEdge, self.remove_edge_cb) - - self.manager2 = map_manager_2() - - - def init_map(self, name, load=True, load_from_file=False): - - self.name = name - self.load_from_file = load_from_file - self.map_ok = True - self.yaw_goal_tolerance = 0.1 - self.xy_goal_tolerance = 0.3 - - if load: - if not load_from_file: - self.nodes = self.loadMap(name) - else: - self.nodes, self.tmap = self.load_map_from_file(name) - rospy.set_param('topological_map_path', os.path.split(name)[0]) - rospy.set_param('topological_map_filename', os.path.split(name)[1]) - - self.names = self.create_list_of_nodes() - self.tmap_to_tmap2() # convert map to new format - else: - self.nodes = topological_navigation_msgs.msg.TopologicalMap() - self.nodes.name = name - self.nodes.pointset = name - self.names=[] - - rospy.set_param('topological_map_name', self.nodes.pointset) - self.map_pub = rospy.Publisher('/topological_map', topological_navigation_msgs.msg.TopologicalMap, latch=True, queue_size=1) - self.last_updated = rospy.Time.now() - self.map_pub.publish(self.nodes) - - rospy.Subscriber('/update_map', std_msgs.msg.Time, self.updateCallback) - - - def updateCallback(self, msg) : -# if msg.data > self.last_updated : - self.nodes = self.loadMap(self.name) - self.tmap_to_tmap2() - self.last_updated = rospy.Time.now() - self.map_pub.publish(self.nodes) - self.names = self.create_list_of_nodes() - rospy.set_param('topological_map_name', self.nodes.pointset) - - - def get_tags_cb(self, req): - """ - get tags callback - This function is the callback for the get tags service - It returns a list of available tags in the map - """ - tt = self.get_tags_from_file() if self.load_from_file else self.get_tags_from_mongo() - return tt - - - def get_tags_from_mongo(self): - - host = rospy.get_param("mongodb_host") - port = rospy.get_param("mongodb_port") - client = pymongo.MongoClient(host, port) - - db=client.message_store - collection=db["topological_maps"] - available = collection.find({"pointset": self.nodes.name}).distinct("_meta.tag") - tt=[] - #for i in available: - tt.append(available) - return tt - - - def get_tags_from_file(self): - tt = [tag for node in self.tmap if "tag" in node["meta"] for tag in node["meta"]["tag"]] - return [set(tt)] - - - def get_node_tags_cb(self, req): - """ - get node tags callback - This function is the callback for the get node tags service - It returns a list of a node's tags - """ - succeded, tags = self.get_node_tags_from_file(req) if self.load_from_file else self.get_node_tags_from_mongo(req) - return succeded, tags - - - def get_node_tags_from_mongo(self, req): - #rospy.loginfo('Adding Tag '+msg.tag+' to '+str(msg.node)) - succeded = True - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"name" : req.node_name, "pointset": self.nodes.name} - query_meta = {} - query_meta["pointset"] = self.nodes.name - query_meta["map"] = self.nodes.map - - #print query, query_meta - available = msg_store.query(topological_navigation_msgs.msg.TopologicalNode._type, query, query_meta) - #print len(available) - if len(available) == 1: - # The meta information for a node is in the second part of the tuple - # returned by the message store query - if 'tag' in available[0][1]: - tags = available[0][1]['tag'] - else: - tags = [] - else: - succeded = False - tags = [] - - return succeded, tags - - - def get_node_tags_from_file(self, req): - - num_available = 0 - for node in self.tmap: - if node["meta"]["node"] == req.node_name and node["node"]["name"] == req.node_name: - if "tag" in node["meta"]: - tags = node["meta"]["tag"] - else: - tags = [] - - num_available+=1 - - if num_available == 1: - succeded = True - else: - succeded = False - tags = [] - - return succeded, tags - - - def get_tagged_nodes(self, tag): - """ - get tagged nodes callback - This function is the callback for the get tagged nodes service - Returns a list of node names that have a specific tag - """ - mm = self.get_tagged_nodes_from_file(tag) if self.load_from_file else self.get_tagged_nodes_from_mongo(tag) - return mm - - - def get_tagged_nodes_from_mongo(self, tag): - mm=[] - a=[] - - #db.topological_maps.find({ "_meta.tag":"AAA" }) - - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"_meta.tag": tag, "pointset": self.nodes.name} - query_meta = {} - query_meta["pointset"] = self.nodes.name - query_meta["map"] = self.nodes.map - - #print query, query_meta - available = msg_store.query(topological_navigation_msgs.msg.TopologicalNode._type, query, query_meta) - #print len(available) - for i in available: - nname= i[1]['node'] - a.append(nname) - - mm.append(a) - - return mm - - - def get_tagged_nodes_from_file(self, tag): - mm = [] - a=[] - - for node in self.tmap: - if "tag" in node["meta"]: - if tag in node["meta"]["tag"]: - a.append(node["node"]["name"]) - - mm.append(a) - - return mm - - - def get_tagged_cb(self, msg): - return self.get_tagged_nodes(msg.tag) - - - def add_content_cb(self, req): - #print req - data = json.loads(req.content) - #print data - - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"name" : req.node, "pointset": self.nodes.name} - query_meta = {} - query_meta["pointset"] = self.nodes.name - query_meta["map"] = self.nodes.map - - #print query, query_meta - available = msg_store.query(topological_navigation_msgs.msg.TopologicalNode._type, query, query_meta) - #print len(available) - if len(available) != 1: - succeded = False - meta_out = None - print('there are no nodes or more than 1 with that name') - else: - succeded = True - for i in available: - msgid= i[1]['_id'] - if 'contains' in i[1]: - if type(data) is list : - for j in data: - if 'category' in j and 'name' in j : - i[1]['contains'].append(j) - elif type(data) is dict : - if 'category' in data and 'name' in data : - i[1]['contains'].append(data) - else: - a=[] - if type(data) is list : - for j in data: - if 'category' in j and 'name' in j : - a.append(j) - elif type(data) is dict : - if 'category' in data and 'name' in data : - a.append(data) - i[1]['contains']=a - meta_out = str(i[1]) - print("Updating %s--%s" %(i[0].pointset, i[0].name)) - msg_store.update_id(msgid, i[0], i[1], upsert = False) - - return succeded, meta_out - - - def add_tag_cb(self, msg): - """ - add tag callback - This function adds the callback for the add tags service - It adds tag to a node in the map - """ - succeded, meta_out = self.add_tag_to_file(msg) if self.load_from_file else self.add_tag_to_mongo(msg) - #rospy.loginfo('Adding Tag '+msg.tag+' to '+str(msg.node)) - return succeded, meta_out - - - def add_tag_to_mongo(self, msg): - succeded = True - meta_out = None - for j in msg.node: - - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"name" : j, "pointset": self.nodes.name} - query_meta = {} - query_meta["pointset"] = self.nodes.name - query_meta["map"] = self.nodes.map - - #print query, query_meta - available = msg_store.query(topological_navigation_msgs.msg.TopologicalNode._type, query, query_meta) - #print len(available) - for i in available: - msgid= i[1]['_id'] - if 'tag' in i[1]: - if not msg.tag in i[1]['tag']: - i[1]['tag'].append(msg.tag) - else: - a=[] - a.append(msg.tag) - i[1]['tag']=a - meta_out = str(i[1]) - - msg_store.update_id(msgid, i[0], i[1], upsert = False) - #print trstr - if len(available) == 0: - succeded = False - - return succeded, meta_out - - - def add_tag_to_file(self, msg): - succeded = False - meta_out = None - for j in msg.node: - for node in self.tmap: - if j == node["meta"]["node"] and j == node["node"]["name"]: - succeded = True - if "tag" in node["meta"]: - if msg.tag not in node["meta"]["tag"]: - node["meta"]["tag"].append(msg.tag) - else: - a = [] - a.append(msg.tag) - node["meta"][ "tag"] = a - meta_out = str(node["meta"]) - return succeded, meta_out - - - def rm_tag_cb(self, msg): - #rospy.loginfo('Adding Tag '+msg.tag+' to '+str(msg.node)) - succeded = True - for j in msg.node: - - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"name" : j, "pointset": self.nodes.name} - query_meta = {} - query_meta["pointset"] = self.nodes.name - query_meta["map"] = self.nodes.map - - #print query, query_meta - available = msg_store.query(topological_navigation_msgs.msg.TopologicalNode._type, query, query_meta) - #print len(available) - succeded = False - meta_out = None - for i in available: - msgid= i[1]['_id'] - if 'tag' in i[1]: - if msg.tag in i[1]['tag']: - print('removing tag') - i[1]['tag'].remove(msg.tag) - print('new list of tags') - print(i[1]['tag']) - msg_store.update_id(msgid, i[0], i[1], upsert = False) - succeded = True - meta_out = str(i[1]) - - return succeded, meta_out - - - def modify_tag_cb(self, msg): - succeded = True - meta_out = None - for node in msg.node: - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"name" : node, "pointset": self.nodes.name} - query_meta = {} - query_meta["pointset"] = self.nodes.name - query_meta["map"] = self.nodes.map - - #print query, query_meta - available = msg_store.query(topological_navigation_msgs.msg.TopologicalNode._type, query, query_meta) - #print len(available) - for node_plus_meta in available: - msgid= node_plus_meta[1]['_id'] - if 'tag' in node_plus_meta[1]: - if not msg.tag in node_plus_meta[1]['tag']: - continue - else: - tag_ind = node_plus_meta[1]['tag'].index(msg.tag) - node_plus_meta[1]['tag'][tag_ind] = msg.new_tag - meta_out = str(node_plus_meta[1]) - - msg_store.update_id(msgid, node_plus_meta[0], node_plus_meta[1], upsert = True) - if len(available) == 0: - succeded = False - - return succeded, meta_out - - - def get_topological_map_cb(self, req): - nodes = self.loadMap(req.pointset) - print("Returning Map %s"%req.pointset) - nodes.nodes.sort(key=lambda node: node.name) - return nodes - - - def switch_topological_map_cb(self, req): - self.nodes=[] - if not self.load_from_file: - self.nodes = self.loadMap(req.pointset) - self.name = req.pointset - print("Returning Map {}".format(req.pointset)) - else: - rospy.set_param('topological_map_filename', req.pointset) - path = rospy.get_param('topological_map_path') - f = path + "/" + req.pointset - self.nodes, self.tmap = self.load_map_from_file(f) - self.name = f - print("Returning Map {}".format(f)) - #nodes.nodes.sort(key=lambda node: node.name) - self.names = self.create_list_of_nodes() - self.map_pub.publish(self.nodes) - self.tmap_to_tmap2() # convert map to new format - - rospy.set_param('topological_map_name', self.nodes.pointset) - return self.nodes - - - def get_new_name(self): - namesnum=[] - for i in self.names : - if i.startswith('WayPoint') : - nam = i.strip('WayPoint') - namesnum.append(int(nam)) - namesnum.sort() - if namesnum: - nodname = 'WayPoint%d'%(int(namesnum[-1])+1) - else : - nodname = 'WayPoint1' - return nodname - - - def add_edge_cb(self, req): - return self.add_edge(req.origin, req.destination, req.action, req.edge_id) - - - def add_edge(self, or_waypoint, de_waypoint, action, edge_id) : - - rospy.loginfo('Adding Edge from '+or_waypoint+' to '+de_waypoint+' using '+action) - node_name = or_waypoint - - #nodeindx = self._get_node_index(edged[0]) - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"name" : node_name, "pointset": self.nodes.name} - query_meta = {} - query_meta["pointset"] = self.nodes.name - query_meta["map"] = self.nodes.map - - #print query, query_meta - available = msg_store.query(topological_navigation_msgs.msg.TopologicalNode._type, query, query_meta) - #print len(available) - if len(available) == 1 : - eids = [] - for i in available[0][0].edges : - eids.append(i.edge_id) - - if not edge_id or edge_id in eids: - test=0 - eid = '%s_%s' %(or_waypoint, de_waypoint) - while eid in eids: - eid = '%s_%s_%03d' %(or_waypoint, de_waypoint, test) - test += 1 - else: - eid=edge_id - - edge = topological_navigation_msgs.msg.Edge() - edge.node = de_waypoint - edge.action = action - edge.top_vel = 0.55 - edge.edge_id = eid - edge.map_2d = available[0][0].map - - available[0][0].edges.append(edge) - - #print available[0][0] - msg_store.update(available[0][0], query_meta, query, upsert=True) - return True - else : - rospy.logerr("Impossible to store in DB "+str(len(available))+" waypoints found after query") - rospy.logerr("Available data: "+str(available)) - return False - - - def generate_circle_vertices(self, radius=0.75, number=8): - separation_angle = 2 * math.pi / number - start_angle = separation_angle / 2 - current_angle = start_angle - points = [] - for i in range(0, number): - points.append((math.cos(current_angle) * radius, math.sin(current_angle) * radius)) - current_angle += separation_angle - - return points - - - def add_topological_node_cb(self, req): - return self.add_topological_node(req.name, req.pose, req.add_close_nodes) - - - def add_topological_node(self, node_name, node_pose, add_close_nodes, dist=8.0): - #Get New Node Name - if node_name: - name = node_name - else: - name = self.get_new_name() - - rospy.loginfo('Creating Node: '+name) - - if name in self.names: - rospy.logerr("Node already exists, try another name") - return False - - #Create Message store - msg_store = MessageStoreProxy(collection='topological_maps') - - meta = {} - meta["map"] = self.nodes.map - meta["pointset"] = self.nodes.name - meta["node"] = name - - node = topological_navigation_msgs.msg.TopologicalNode() - node.name = name - node.map = self.nodes.map - node.pointset = self.name - node.pose = node_pose - node.yaw_goal_tolerance = self.yaw_goal_tolerance - node.xy_goal_tolerance = self.xy_goal_tolerance - node.localise_by_topic = '' - vertices=self.generate_circle_vertices() - for j in vertices : - v = topological_navigation_msgs.msg.Vertex() - v.x = float(j[0]) - v.y = float(j[1]) - node.verts.append(v) - - if add_close_nodes: - close_nodes = [] - for i in self.nodes.nodes: - ndist = node_dist(node, i) - if ndist < dist : - if i.name != 'ChargingPoint': - close_nodes.append(i.name) - - - for i in close_nodes: - e = topological_navigation_msgs.msg.Edge() - e.node = i - e.action = 'move_base' - eid = '%s_%s' %(node.name, i) - e.edge_id = eid - e.top_vel =0.55 - e.map_2d = node.map - node.edges.append(e) - - for i in close_nodes: - self.add_edge(i, node.name, 'move_base', '') - - msg_store.insert(node,meta) - return True - - - def update_node_name_cb(self, req): - return self.update_node_name(req.node_name, req.new_name) - - - def update_node_name(self, node_name, new_name): - if new_name in self.names: - return False, "node with name {0} already exists".format(new_name) - - msg_store = MessageStoreProxy(collection='topological_maps') - # The query retrieves the node name with the given name from the given pointset. - query = {"name": node_name, "pointset": self.name} - # The meta-information is some additional information about the specific - # map that we are interested in (?) - query_meta = {} - query_meta["pointset"] = self.name - query_meta["map"] = self.nodes.map - # This returns a tuple containing the object, if it exists, and some - # information about how it's stored in the database. - available = msg_store.query(TopologicalNode._type, query, query_meta) - - if len(available) == 1: - available[0][0].name = new_name - # Also need to update all edges which involve the renamed node - allnodes_query = {"pointset": self.name} - allnodes_query_meta = {} - allnodes_query_meta["pointset"] = self.name - allnodes_query_meta["map"] = self.nodes.map - # this produces a list of tuples, each with [0] as the node, [1] as database info - allnodes_available = msg_store.query(TopologicalNode._type, {}, allnodes_query_meta) - - # Check the edges of each node for a reference to the node to be - # renamed, and change the edge id if there is one. Enumerate the - # values so that we can edit the objects in place to send them back - # to the database. - for node_ind, node_tpl in enumerate(allnodes_available): - for edge_ind, edge in enumerate(node_tpl[0].edges): - # change names of the edges in other nodes, and update their values in the database - if node_tpl[0].name != node_name and node_name in edge.edge_id: - allnodes_available[node_ind][0].edges[edge_ind].edge_id = edge.edge_id.replace(node_name, new_name) - # must also update the name of the node this edge goes to - allnodes_available[node_ind][0].edges[edge_ind].node = new_name - curnode_query = {"name": node_tpl[0].name, "pointset": self.name} - msg_store.update(allnodes_available[node_ind][0], allnodes_query_meta, curnode_query, upsert=True) - - # update all edge ids for this node - for edge_ind, edge in enumerate(available[0][0].edges): - available[0][0].edges[edge_ind].edge_id = edge.edge_id.replace(node_name, new_name) - - msg_store.update(available[0][0], query_meta, query, upsert=True) - return True, "" - else: - rospy.logerr("Impossible to store in DB "+str(len(available))+" waypoints found after query") - rospy.logerr("Available data: "+str(available)) - return False, "multiple nodes with the name existed, or node not found" - - - def update_node_waypoint_cb(self, req): - return self.update_node_waypoint(req.name, req.pose) - - - def update_node_waypoint(self, name, pose): - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"name": name, "pointset": self.name} - query_meta = {} - query_meta["pointset"] = self.name - query_meta["map"] = self.nodes.map - available = msg_store.query(TopologicalNode._type, query, query_meta) - if len(available) == 1: - positionZ=available[0][0].pose.position.z - available[0][0].pose = pose - available[0][0].pose.position.z = positionZ - msg_store.update(available[0][0], query_meta, query, upsert=True) - return True - else: - rospy.logerr("Impossible to store in DB "+str(len(available))+" waypoints found after query") - rospy.logerr("Available data: "+str(available)) - return False - - - def update_node_tolerance_cb(self, req): - return self.update_node_tolerance(req.node_name, req.xy_tolerance, req.yaw_tolerance) - - - def update_node_tolerance(self, name, new_xy, new_yaw): - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"name": name, "pointset": self.name} - query_meta = {} - query_meta["pointset"] = self.name - query_meta["map"] = self.nodes.map - available = msg_store.query(TopologicalNode._type, query, query_meta) - if len(available) == 1: - available[0][0].xy_goal_tolerance = new_xy - available[0][0].yaw_goal_tolerance = new_yaw - - msg_store.update(available[0][0], query_meta, query, upsert=True) - return True, "" - else: - rospy.logerr("Impossible to store in DB "+str(len(available))+" waypoints found after query") - rospy.logerr("Available data: "+str(available)) - return False, "" - - - def remove_node_cb(self, req): - res = self.remove_node(req.name) - return res - - - def remove_node(self, node_name) : - rospy.loginfo('Removing Node: '+node_name) - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"name" : node_name, "pointset": self.nodes.name} - query_meta = {} - query_meta["pointset"] = self.nodes.name - query_meta["map"] = self.nodes.map - - available = msg_store.query(TopologicalNode._type, query, query_meta) - - node_found = False - if len(available) == 1 : - node_found = True - rm_id = str(available[0][1]['_id']) - print(rm_id) - else : - rospy.logerr("Node not found "+str(len(available))+" waypoints found after query") - #rospy.logerr("Available data: "+str(available)) - - if node_found : - query_meta = {} - query_meta["pointset"] = self.nodes.name - edges_to_rm = [] - message_list = msg_store.query(TopologicalNode._type, {}, query_meta) - for i in message_list: - for j in i[0].edges : - if j.node == node_name : - edge_rm = j.edge_id - edges_to_rm.append(edge_rm) - - for k in edges_to_rm : - print('remove: '+k) - self.remove_edge(k) - - msg_store.delete(rm_id) - return True - else: - return False - - - def remove_edge_cb(self, req): - return self.remove_edge(req.edge_id) - - - def remove_edge(self, edge_name) : - #print 'removing edge: '+edge_name - rospy.loginfo('Removing Edge: '+edge_name) - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"edges.edge_id" : edge_name, "pointset": self.nodes.name} - query_meta = {} - query_meta["pointset"] = self.nodes.name - query_meta["map"] = self.nodes.map - available = msg_store.query(TopologicalNode._type, query, query_meta) - - if len(available) >= 1 : - for i in available : - print(i[0]) - for j in i[0].edges: - if j.edge_id == edge_name : - i[0].edges.remove(j) - msg_store.update(i[0], query_meta, query, upsert=True) - return True - else : - rospy.logerr("Impossible to store in DB "+str(len(available))+" waypoints found after query") - rospy.logerr("Available data: "+str(available)) - return False - - - def update_edge_cb(self, req): - return self.update_edge(req.edge_id, req.action, req.top_vel) - - - def update_edge(self, edge_id, action, top_vel): - msg_store = MessageStoreProxy(collection='topological_maps') - # The query retrieves the node name with the given name from the given pointset. - node_name, _ = get_node_names_from_edge_id(self.nodes, edge_id) - query = {"name": node_name, "pointset": self.name} - # The meta-information is some additional information about the specific - # map that we are interested in (?) - query_meta = {} - query_meta["pointset"] = self.name - query_meta["map"] = self.nodes.map - # This returns a tuple containing the object, if it exists, and some - # information about how it's stored in the database. - available = msg_store.query(TopologicalNode._type, query, query_meta) - if len(available) == 1: - for edge in available[0][0].edges: - if edge.edge_id == edge_id: - edge.action = action or edge.action - edge.top_vel = top_vel or edge.top_vel - - msg_store.update(available[0][0], query_meta, query, upsert=True) - return True, "" - else: - rospy.logerr("Impossible to store in DB "+str(len(available))+" waypoints found after query") - rospy.logerr("Available data: "+str(available)) - return False, "no edge found or multiple edges found" - - - def get_edges_between(self, nodea, nodeb): - ab=[] - ba=[] - for i in self.nodes.nodes: - if nodea == i.name: - for j in i.edges: - if j.node == nodeb: - ab.append(j.edge_id) - if nodeb == i.name: - for j in i.edges: - if j.node == nodea: - ba.append(j.edge_id) - return ab, ba - - def get_edges_between_cb(self, req): - return self.get_edges_between(req.nodea, req.nodeb) - - - def loadMap(self, point_set) : - msg_store = MessageStoreProxy(collection='topological_maps') - points = topological_navigation_msgs.msg.TopologicalMap() - points.name = point_set - points.pointset = point_set - - query_meta = {} - query_meta["pointset"] = point_set - - ntries=1 - map_found=False - - #Tries to load the map for a minute if not it quits - while not map_found : - available = len(msg_store.query(topological_navigation_msgs.msg.TopologicalNode._type, {}, query_meta)) - if available <= 0 : - rospy.logerr("Desired pointset '"+point_set+"' not in datacentre, try :"+str(ntries)) - if ntries <=10 : - ntries+=1 - rospy.sleep(rospy.Duration.from_sec(6)) - else : - raise Exception("Can't find waypoints.") - return points - #We just want to raise the exception not quit - #sys.exit(2) - else: - map_found=True - - query_meta = {} - query_meta["pointset"] = point_set - - message_list = msg_store.query(topological_navigation_msgs.msg.TopologicalNode._type, {}, query_meta) - - points.name = point_set - points.pointset = point_set - for i in message_list: - b = i[0] - points.nodes.append(b) - - points.map = points.nodes[0].map - self.map_check(points) - - return points - - - def load_map_from_file(self, filename): - points = topological_navigation_msgs.msg.TopologicalMap() - - with open(filename, 'r') as f: - try: - tmap = yaml.safe_load(f) - except Exception as exc: - print(exc) - return points - - - point_set = tmap[0]["node"]["pointset"] - points.name = point_set - points.pointset = point_set - points.map, tmap[0]["node"] = self.set_val(tmap[0]["node"], "map", "map") # optional - - for node in tmap: - msg = topological_navigation_msgs.msg.TopologicalNode() - msg.name = node["node"]["name"] - msg.map, node["node"] = self.set_val(node["node"], "map", "map") # optional - msg.pointset = node["node"]["pointset"] - - msg.pose.position.x = node["node"]["pose"]["position"]["x"] - msg.pose.position.y = node["node"]["pose"]["position"]["y"] - msg.pose.position.z = node["node"]["pose"]["position"]["z"] - - msg.pose.orientation.x = node["node"]["pose"]["orientation"]["x"] - msg.pose.orientation.y = node["node"]["pose"]["orientation"]["y"] - msg.pose.orientation.z = node["node"]["pose"]["orientation"]["z"] - msg.pose.orientation.w = node["node"]["pose"]["orientation"]["w"] - - msg.yaw_goal_tolerance = node["node"]["yaw_goal_tolerance"] - msg.xy_goal_tolerance = node["node"]["xy_goal_tolerance"] - - msgs_verts = [] - for v in node["node"]["verts"]: - msg_v = topological_navigation_msgs.msg.Vertex() - msg_v.x = v["x"] - msg_v.y = v["y"] - msgs_verts.append(msg_v) - msg.verts = msgs_verts - - msgs_edges = [] - for e in node["node"]["edges"]: - msg_e = topological_navigation_msgs.msg.Edge() - msg_e.edge_id = e["edge_id"] - msg_e.node = e["node"] - msg_e.action = e["action"] - msg_e.top_vel, e = self.set_val(e, "top_vel", 0.55) # optional - msg_e.map_2d, e = self.set_val(e, "map_2d", "map") # optional - msg_e.inflation_radius, e = self.set_val(e, "inflation_radius", 0.0) # optional - msg_e.recovery_behaviours_config, e = self.set_val(e, "recovery_behaviours_config", "") # optional - msgs_edges.append(msg_e) - msg.edges = msgs_edges - - msg.localise_by_topic, node["node"] = self.set_val(node["node"], "localise_by_topic", "") # optional - points.nodes.append(msg) - - self.map_check(points) - return points, tmap - - - def set_val(self, d, key, def_val): - - if key in d: - val = d[key] - else: - val = def_val - d[key] = def_val - - return val, d - - - def map_check(self, nodes): - - self.map_ok = True - - # check that all nodes have the same pointset - pointsets = [node.pointset for node in nodes.nodes] - if len(set(pointsets)) > 1: - rospy.logwarn("multiple poinsets found: {}".format(set(pointsets))) - self.map_ok = False - - # check for duplicate node names - names = [node.name for node in nodes.nodes] - names.sort() - for name in set(names): - n = names.count(name) - if n > 1: - rospy.logwarn("{} instances of node with name '{}' found".format(n, name)) - self.map_ok = False - - sep = "_" + str(uuid.uuid4()) + "_" - edge_ids = [node.name + sep + e.node for node in nodes.nodes for e in node.edges] - edge_ids.sort() - - # check for duplicate edges - for e in set(edge_ids): - edge_nodes = re.match("(.*)" + sep + "(.*)", e).groups() - origin = edge_nodes[0] - destination = edge_nodes[1] - - n = edge_ids.count(e) - if n > 1: - rospy.logwarn("{} instances of edge with origin '{}' and destination '{}' found".format(n, origin, destination)) - self.map_ok = False - - # check that an edge's destination node exists - for e in set(edge_ids): - edge_nodes = re.match("(.*)" + sep + "(.*)", e).groups() - origin = edge_nodes[0] - destination = edge_nodes[1] - - if destination not in names: - rospy.logwarn("edge with origin '{}' has a destination '{}' that does not exist".format(origin, destination)) - self.map_ok = False - - - def create_list_of_nodes(self): - names=[] - for i in self.nodes.nodes : - names.append(i.name) - names.sort() - return names - - - def tmap_to_tmap2(self): - - filename = "" - if self.load_from_file: - filename = os.path.splitext(self.name)[0] + ".tmap2" - - self.manager2.init_map(name=self.nodes.name, metric_map=self.nodes.map, pointset=self.nodes.pointset, filename=filename, load=False) - - for node in self.nodes.nodes: - - pose = message_converter.convert_ros_message_to_dictionary(node.pose) - verts = [message_converter.convert_ros_message_to_dictionary(vert) for vert in node.verts] - - properties = {} - properties["xy_goal_tolerance"] = node.xy_goal_tolerance - properties["yaw_goal_tolerance"] = node.yaw_goal_tolerance - - req = topological_navigation_msgs.srv.GetNodeTags() - req.node_name = node.name - tags = self.get_node_tags_cb(req)[1] - - self.manager2.add_node(node.name, pose, node.localise_by_topic, verts, properties, tags) - - for edge in node.edges: - self.manager2.add_edge_to_node(node.name, edge.node, edge.action, edge.edge_id, [], edge.recovery_behaviours_config) - - self.manager2.update() -################################################################################################################### \ No newline at end of file diff --git a/topological_navigation/topological_navigation/manager2.py b/topological_navigation/topological_navigation/manager2.py deleted file mode 100644 index 49795cea..00000000 --- a/topological_navigation/topological_navigation/manager2.py +++ /dev/null @@ -1,1538 +0,0 @@ - #!/usr/bin/env python3 -""" -Created on Tue Sep 29 16:06:36 2020 - -@author: Adam Binch (abinch@sagarobotics.com) -""" -######################################################################################################### -import yaml, datetime, json -import re, uuid, copy, os -import multiprocessing, math -import importlib -import traceback - -import rclpy -from rclpy.parameter import Parameter -import rosidl_runtime_py -import tf2_ros -from rclpy.qos import QoSProfile, HistoryPolicy, ReliabilityPolicy, DurabilityPolicy -from ament_index_python.packages import get_package_share_directory -from topological_navigation_msgs.msg import * -import topological_navigation_msgs.msg -import std_msgs.msg -from geometry_msgs.msg import Vector3, Quaternion, TransformStamped, Pose - -from std_srvs.srv import Trigger, Empty -import topological_navigation_msgs.srv as tn_srv - -import topological_navigation -from topological_navigation.tmap_utils import get_node_names_from_edge_id_2 - - -def pose_dist(pose1, pose2): - return math.sqrt((pose1["position"]["x"] - pose2["position"]["x"])**2 + (pose1["position"]["y"] - pose2["position"]["y"])**2) - -class NoAliasDumper(yaml.SafeDumper): - def ignore_aliases(self, data): - return True -######################################################################################################### - - -# this ensures that all the poses and translates -# are float-type and not int-type as there is an -# assertion in ros2 messages (vector3, pose etc.) -# for float-type [x,y,z,w] keys. -class CustomSafeLoader(yaml.SafeLoader): - def construct_mapping(self, node, deep=False): - mapping = super().construct_mapping(node, deep=deep) - - # this can be extended to test the validity of the tmap2 - # as well at load time (or add missing keys) - for key in ['x', 'y', 'z', 'w']: - if key in mapping and isinstance(mapping[key], int): - mapping[key] = float(mapping[key]) - - return mapping - - -######################################################################################################### -class map_manager_2(rclpy.node.Node): - - def __init__(self, advertise_srvs=True): - super().__init__('topological_map_manager_2') - - self.cache_maps = self.get_parameter_or("~cache_topological_maps", Parameter('bool', Parameter.Type.BOOL, False)).value - self.auto_write = self.get_parameter_or("~auto_write_topological_maps", Parameter('bool', Parameter.Type.BOOL, False)).value - - package_path = get_package_share_directory('topological_navigation') - nav_config = str(os.path.join(package_path, 'config', 'navigation_goal.yaml')) - - self.nav_config = str(self.get_parameter_or("nav_config", Parameter('str', Parameter.Type.STRING, nav_config)).value) - self.get_logger().info("cache_topological_maps: {}".format(self.cache_maps)) - self.get_logger().info("auto_write_topological_maps: {}".format(self.auto_write)) - self.get_logger().info("nav config file: {}".format(self.nav_config)) - - self.cache_dir = os.path.join(os.path.expanduser("~"), ".ros", "topological_maps") - if not os.path.exists(self.cache_dir): - os.mkdir(self.cache_dir) - - self.goal_mappings = {} - - with open(self.nav_config, "r") as f: - self.move_base_goal = yaml.safe_load(f)["topological_navigation/navigation_goal"] - - if advertise_srvs: - self.advertise() - - - def advertise(self): - - # Services that retrieve information from the map - self.get_map_srv = self.create_service(Trigger, '/topological_map_manager2/get_topological_map', self.get_topological_map_cb) - - self.get_tagged_srv = self.create_service(tn_srv.GetTaggedNodes, '/topological_map_manager2/get_tagged_nodes', self.get_tagged_cb) - self.get_tag_srv = self.create_service(tn_srv.GetTags, '/topological_map_manager2/get_tags', self.get_tags_cb) - self.get_node_tag_srv = self.create_service(tn_srv.GetNodeTags, '/topological_map_manager2/get_node_tags', self.get_node_tags_cb) - self.get_node_edges_srv = self.create_service(tn_srv.GetEdgesBetweenNodes, '/topological_map_manager2/get_edges_between_nodes', self.get_edges_between_cb) - - # Services that modify the map - self.write_map_srv = self.create_service(tn_srv.WriteTopologicalMap, '/topological_map_manager2/write_topological_map', self.write_topological_map_cb) - self.switch_map_srv = self.create_service(tn_srv.WriteTopologicalMap, '/topological_map_manager2/switch_topological_map', self.switch_topological_map_cb) - - self.add_node_srv = self.create_service(tn_srv.AddNode, '/topological_map_manager2/add_topological_node', self.add_topological_node_cb) - self.remove_node_srv = self.create_service(tn_srv.RmvNode, '/topological_map_manager2/remove_topological_node', self.remove_node_cb) - - self.add_edges_srv = self.create_service(tn_srv.AddEdge, '/topological_map_manager2/add_edges_between_nodes', self.add_edge_cb) - self.remove_edge_srv = self.create_service(tn_srv.AddEdge, '/topological_map_manager2/remove_edge', self.remove_edge_cb) - - self.add_content_to_node_srv = self.create_service(tn_srv.AddContent, '/topological_map_manager2/add_content_to_node', self.add_content_cb) - - self.update_node_name_srv = self.create_service(tn_srv.UpdateNodeName, "/topological_map_manager2/update_node_name", self.update_node_name_cb) - self.update_node_waypoint_srv = self.create_service(tn_srv.AddNode, "/topological_map_manager2/update_node_pose", self.update_node_waypoint_cb) - self.update_node_tolerance_srv = self.create_service(tn_srv.UpdateNodeTolerance, "/topological_map_manager2/update_node_tolerance", self.update_node_tolerance_cb) - - self.modify_tag_srv = self.create_service(tn_srv.ModifyTag, '/topological_map_manager2/modify_node_tags', self.modify_tag_cb) - self.add_tag_srv = self.create_service(tn_srv.AddTag, '/topological_map_manager2/add_tag_to_node', self.add_tag_cb) - self.rm_tag_srv = self.create_service(tn_srv.AddTag, '/topological_map_manager2/rm_tag_from_node', self.rm_tag_cb) - - self.add_param_to_edge_config_srv = self.create_service(tn_srv.UpdateEdgeConfig, '/topological_map_manager2/add_param_to_edge_config', self.add_param_to_edge_config_cb) - self.rm_param_from_edge_config_srv = self.create_service(tn_srv.UpdateEdgeConfig, '/topological_map_manager2/rm_param_from_edge_config', self.rm_param_from_edge_config_cb) - self.rm_param_from_topological_map_srv = self.create_service(tn_srv.UpdateEdgeConfig, '/topological_map_manager2/rm_param_from_topological_map', self.rm_param_from_topological_map_cb) - - self.update_node_restrictions_srv = self.create_service(tn_srv.UpdateRestrictions, '/topological_map_manager2/update_node_restrictions', self.update_node_restrictions_cb) - self.update_edge_restrictions_srv = self.create_service(tn_srv.UpdateRestrictions, '/topological_map_manager2/update_edge_restrictions', self.update_edge_restrictions_cb) - - self.update_edge_srv = self.create_service(tn_srv.UpdateEdge, '/topological_map_manager2/update_edge', self.update_edge_cb) - self.update_action_srv = self.create_service(tn_srv.UpdateAction, '/topological_map_manager2/update_action', self.update_action_cb) - - self.add_datum_srv = self.create_service(tn_srv.AddDatum, '/topological_map_manager2/add_datum', self.add_datum_cb) - - self.update_fail_policy_srv = self.create_service(tn_srv.UpdateFailPolicy, '/topological_map_manager2/update_fail_policy', self.update_fail_policy_cb) - self.set_influence_zone_srv = self.create_service(tn_srv.SetInfluenceZone, '/topological_map_manager2/set_node_influence_zone', self.set_influence_zone_cb) - - self.clear_nodes_srv = self.create_service(Empty, '/topological_map_manager2/clear_topological_nodes', self.clear_nodes_cb) - - # Services for modifying the map quickly - self.add_nodes_srv = self.create_service(tn_srv.AddNodeArray, '/topological_map_manager2/add_topological_node_multi', self.add_topological_nodes_cb) - self.add_edges_srv = self.create_service(tn_srv.AddEdgeArray, '/topological_map_manager2/add_edges_between_nodes_multi', self.add_edges_cb) - self.add_params_to_edges_srv = self.create_service(tn_srv.UpdateEdgeConfigArray, '/topological_map_manager2/add_param_to_edge_config_multi', self.add_params_to_edges_cb) - self.set_influence_zones_srv = self.create_service(tn_srv.SetInfluenceZoneArray, '/topological_map_manager2/set_node_influence_zone_multi', self.set_influence_zones_cb) - - - def init_map(self, name="new_map", metric_map="map_2d", pointset="new_map", transformation="default", filename="", load=True): - - self.name = name - self.metric_map = metric_map - self.pointset = pointset - - if transformation == "default": - self.transformation = {} - self.transformation["rotation"] = {} - self.transformation["rotation"]["w"] = 1.0 - self.transformation["rotation"]["x"] = 0.0 - self.transformation["rotation"]["y"] = 0.0 - self.transformation["rotation"]["z"] = 0.0 - self.transformation["translation"] = {} - self.transformation["translation"]["x"] = 0.0 - self.transformation["translation"]["y"] = 0.0 - self.transformation["translation"]["z"] = 0.0 - self.transformation["child"] = "topo_map" - self.transformation["parent"] = "map" - else: - self.transformation = transformation - - self.filename = filename - if not self.filename: - self.filename = os.path.join(self.cache_dir, self.name + ".tmap2") - - self.loaded = False - self.load = load - if self.load: - self.load_map(self.filename) - else: - self.tmap2 = {} - self.tmap2["name"] = self.name - self.tmap2["metric_map"] = self.metric_map - self.tmap2["pointset"] = self.pointset - self.tmap2["transformation"] = self.transformation - self.tmap2["meta"] = {} - self.tmap2["meta"]["last_updated"] = self.get_time() - self.tmap2["nodes"] = [] - self.declare_parameter('topological_map2_name', self.pointset) - self.declare_parameter('topological_map2_filename', os.path.split(self.filename)[1]) - self.declare_parameter('topological_map2_path', os.path.split(self.filename)[0]) - - - qos = QoSProfile(depth=10, - reliability=ReliabilityPolicy.RELIABLE, - history=HistoryPolicy.KEEP_LAST, - durability=DurabilityPolicy.TRANSIENT_LOCAL) - self.map_pub = self.create_publisher(std_msgs.msg.String, '/topological_map_2', qos) - self.map_pub.publish(std_msgs.msg.String(data=json.dumps(self.tmap2))) - self.names = self.create_list_of_nodes() - - self.broadcaster = tf2_ros.transform_broadcaster.TransformBroadcaster(self) - self.broadcast_transform() - - self.convert_to_legacy = self.get_parameter_or("~convert_to_legacy", Parameter('bool', Parameter.Type.BOOL, True)).get_parameter_value() - - if self.tmap2 and self.convert_to_legacy: - self.points_pub = self.create_publisher(topological_navigation_msgs.msg.TopologicalMap, '/topological_map', qos) - self.tmap2_to_tmap() - self.points_pub.publish(self.points) - - # self.create_timer(10.0, self.topnav_map_pub_callback) - - - # def topnav_map_pub_callback(self, ): - # if self.tmap2: - # self.map_pub.publish(std_msgs.msg.String(data=json.dumps(self.tmap2))) - # else: - # self.get_logger().warning('there is no topological map...', skip_first=True) - - def get_time(self): - return datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S') - - - def load_map(self, filename): - - def loader(filename, transporter): - try: - with open(filename, "r") as f: - # transporter["tmap2"] = yaml.safe_load(f) - transporter["tmap2"] = yaml.load(f, Loader = CustomSafeLoader) - except Exception as e: - self.get_logger().error(e) - transporter["tmap2"] = {} - - - self.loaded = False - self.get_logger().info("Loading Topological Map {} ...".format(filename)) - - transporter = multiprocessing.Manager().dict() - p = multiprocessing.Process(target=loader, args=(filename, transporter)) - p.start() - p.join() - - self.tmap2 = transporter["tmap2"] - if not self.tmap2: - return - - e1 = "Loaded map is {} and should be {}." - e2 = " You may be attemting to load a legacy map using topological_navigation/map_manager2.py." \ - " In that case please use topological_navigation/map_manager.py instead." - - map_type = type(self.tmap2) - if map_type is list: - self.get_logger().error((e1+e2).format(map_type, dict)) - self.tmap2 = {} - return - elif map_type is not dict: - self.get_logger().error(e1.format(map_type, dict)) - self.tmap2 = {} - return - - self.loaded = True - - self.name = self.tmap2["name"] - self.metric_map = self.tmap2["metric_map"] - self.pointset = self.tmap2["pointset"] - self.transformation = self.tmap2["transformation"] - - self.names = self.create_list_of_nodes() - - self.declare_parameter('topological_map2_name', self.pointset) - self.declare_parameter('topological_map2_filename', os.path.split(self.filename)[1]) - self.declare_parameter('topological_map2_path', os.path.split(self.filename)[0]) - - self.get_logger().info("Done") - - self.map_check() - - if self.cache_maps: - self.get_logger().info("Caching the map...") - self.write_topological_map(os.path.join(self.cache_dir, os.path.basename(self.filename))) - - - def write_topological_map(self, filename, no_alias=False): - - self.get_logger().info("Writing map to {} ...".format(filename)) - - nodes = copy.deepcopy(self.tmap2["nodes"]) - nodes.sort(key=lambda node: node["node"]["name"]) - self.tmap2["nodes"] = nodes - - if no_alias: - self.get_logger().info("Disabling anchors and aliases in topological map yaml ...") - yml = yaml.dump(self.tmap2, default_flow_style=False, Dumper=NoAliasDumper) - else: - yml = yaml.safe_dump(self.tmap2, default_flow_style=False) - - fh = open(filename, "w") - fh.write(str(yml)) - fh.close - - self.get_logger().info("Done") - - - def update(self, update_time=True): - - if update_time: - self.tmap2["meta"]["last_updated"] = self.get_time() - - self.map_pub.publish(std_msgs.msg.String(json.dumps(self.tmap2))) - self.names = self.create_list_of_nodes() - self.map_check() - - if self.tmap2 and self.convert_to_legacy: - self.tmap2_to_tmap() - self.points_pub.publish(self.points) - - - def broadcast_transform(self): - - trans, rot = Vector3(), Quaternion() - rosidl_runtime_py.set_message_fields(trans, self.transformation["translation"]) - rosidl_runtime_py.set_message_fields(rot, self.transformation["rotation"]) - - msg = TransformStamped() - msg.header.stamp = self.get_clock().now().to_msg() - msg.header.frame_id = self.transformation["parent"] - msg.child_frame_id = self.transformation["child"] - msg.transform.translation = trans - msg.transform.rotation = rot - - self.broadcaster.sendTransform(msg) - - - def create_list_of_nodes(self): - - names = [] - if "nodes" in self.tmap2: - names = [node["node"]["name"] for node in self.tmap2["nodes"]] - names.sort() - return names - - - def get_topological_map_cb(self, req): - """ - Returns the topological map - """ - ans = Trigger.response() - ans.success = True - ans.message = json.dumps(self.tmap2) - - return ans - - - def switch_topological_map_cb(self, req): - """ - Changes the topological map - """ - self.declare_parameter('topological_map2_filename', req.filename) - path = self.get_parameter("topological_map2_path").get_parameter_value() - self.filename = path + "/" + req.filename - - self.load_map(self.filename) - self.update(False) - self.broadcast_transform() - - return True, json.dumps(self.tmap2) - - - def get_tagged_cb(self, req, res): - """ - Returns a list of nodes that have a given tag - """ - res.nodes=[] - for node in self.tmap2["nodes"]: - if "tag" in node["meta"]: - if req.tag in node["meta"]["tag"]: - res.nodes.append(node["node"]["name"]) - return res - - - def get_tags_cb(self, req): - """ - Returns a list of available tags in the map - """ - tags = [tag for node in self.tmap2["nodes"] if "tag" in node["meta"] for tag in node["meta"]["tag"]] - return [set(tags)] - - - def get_node_tags_cb(self, req): - """ - Returns a list of a node's tags - """ - num_available = 0 - for node in self.tmap2["nodes"]: - if node["node"]["name"] == req.node_name: - if "tag" in node["meta"]: - tags = node["meta"]["tag"] - else: - tags = [] - - num_available+=1 - - succeded = True - if num_available != 1: - succeded = False - tags = [] - - return succeded, tags - - - def get_edges_between_cb(self, req): - """ - Returns a list of the ids of edges from nodea to nodeb and vice-versa - """ - return self.get_edges_between(req.nodea, req.nodeb) - - - def get_edges_between(self, nodea, nodeb): - - ab=[]; ba=[] - for node in self.tmap2["nodes"]: - if nodea == node["node"]["name"]: - for edge in node["node"]["edges"]: - if edge["node"] == nodeb: - ab.append(edge["edge_id"]) - if nodeb == node["node"]["name"]: - for edge in node["node"]["edges"]: - if edge["node"] == nodea: - ba.append(edge["edge_id"]) - - return ab, ba - - - def write_topological_map_cb(self, req): - """ - Saves the topological map to a yaml file - """ - filename = req.filename - if not filename: - path = self.get_parameter("topological_map2_path").get_parameter_value() - fname = self.get_parameter_or("topological_map2_filename").get_parameter_value() - filename = path + "/" + fname - - try: - message = "Writing map to {}".format(filename) - self.write_topological_map(filename, req.no_alias) - success = True - except Exception as message: - success = False - - return success, str(message) - - - def add_topological_node_cb(self, req): - """ - Adds a node to the topological map - """ - return self.add_topological_node(req.name, req.pose, req.add_close_nodes) - - - def add_topological_node(self, node_name, node_pose, add_close_nodes, dist=8.0, update=True, write_map=True): - - if node_name: - name = node_name - else: - name = self.get_new_name() - - self.get_logger().info("Creating Node {}".format(name)) - - if name in self.names: - self.get_logger().error("Node {} already exists, try another name".format(name)) - return False - - pose = rosidl_runtime_py.message_to_ordereddict(node_pose) - - close_nodes = [] - if add_close_nodes: - for node in self.tmap2["nodes"]: - ndist = pose_dist(pose, node["node"]["pose"]) - if ndist < dist : - if node["node"]["name"] != "ChargingPoint": - close_nodes.append(node["node"]["name"]) - - self.add_node(name, pose) - - for close_node in close_nodes: - self.add_edge(name, close_node, "move_base", "", update=False, write_map=False) - self.add_edge(close_node, name, "move_base", "", update=False, write_map=False) - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - - return True - - - def get_new_name(self): - - namesnum=[] - for i in self.names : - if i.startswith('WayPoint') : - nam = i.strip('WayPoint') - namesnum.append(int(nam)) - namesnum.sort() - if namesnum: - nodname = 'WayPoint%d'%(int(namesnum[-1])+1) - else : - nodname = 'WayPoint1' - - return nodname - - - def add_node(self, name, pose, localise_by_topic="", verts="default", properties="default", tags=[], - restrictions_planning="True", restrictions_runtime="True"): - - if "orientation" not in pose: - pose["orientation"] = {} - pose["orientation"]["w"] = 1.0 - pose["orientation"]["x"] = 0.0 - pose["orientation"]["y"] = 0.0 - pose["orientation"]["z"] = 0.0 - - node = {} - node["meta"] = {} - node["meta"]["map"] = self.metric_map - node["meta"]["node"] = name - node["meta"]["pointset"] = self.pointset - if tags: - node["meta"]["tag"] = tags - - node["node"] = {} - node["node"]["edges"] = [] - node["node"]["localise_by_topic"] = localise_by_topic - node["node"]["name"] = name - node["node"]["pose"] = pose - - if verts == "default": - node["node"]["verts"] = self.generate_circle_vertices() - else: - node["node"]["verts"] = verts - - if properties == "default": - node["node"]["properties"] = {} - node["node"]["properties"]["xy_goal_tolerance"] = 0.3 - node["node"]["properties"]["yaw_goal_tolerance"] = 0.1 - else: - node["node"]["properties"] = properties - - node["node"]["restrictions_planning"] = restrictions_planning - node["node"]["restrictions_runtime"] = restrictions_runtime - - node["node"]["parent_frame"] = self.transformation["parent"] - - self.tmap2["nodes"].append(node) - - - def generate_circle_vertices(self, radius=0.75, number=8): - - separation_angle = 2 * math.pi / number - start_angle = separation_angle / 2 - current_angle = start_angle - points = [] - for i in range(0, number): - points.append({"x": math.cos(current_angle) * radius, "y": math.sin(current_angle) * radius}) - current_angle += separation_angle - - return points - - - def add_edge_cb(self, req): - """ - Adds an edge to a topological node - """ - return self.add_edge(req.origin, req.destination, req.action, req.action_type, req.edge_id) - - - def add_edge(self, origin, destination, action, action_type, edge_id, update=True, write_map=True): - - self.get_logger().info("Adding Edge from {} to {} using {}".format(origin, destination, action)) - - num_available, index = self.get_instances_of_node(origin) - - if num_available == 1 : - eids = [] - for edge in self.tmap2["nodes"][index]["node"]["edges"]: - eids.append(edge["edge_id"]) - - if edge_id == edge["edge_id"]: - self.get_logger().error("Error adding edge to node {}. Edge already exists.".format(origin)) - return False - - if not edge_id or edge_id in eids: - test=0 - eid = '%s_%s' %(origin, destination) - while eid in eids: - eid = '%s_%s_%03d' %(origin, destination, test) - test += 1 - else: - eid=edge_id - - self.add_edge_to_node(origin, destination, action, eid, action_type=action_type) - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True - else: - self.get_logger().error("Error adding edge to node {}. {} instances of node with name {} found".format(origin, num_available, origin)) - return False - - - def add_edge_to_node(self, origin, destination, action="", edge_id="default", config=[], - recovery_behaviours_config="", action_type="", goal=None, fail_policy="fail", - restrictions_planning="True", restrictions_runtime="True", fluid_navigation=True): - - edge = {} - edge["action"] = action - - - if edge_id == "default": - edge["edge_id"] = origin + "_" + destination - else: - edge["edge_id"] = edge_id - - edge["node"] = destination - edge["config"] = config - edge["recovery_behaviours_config"] = recovery_behaviours_config - - if not action_type: - action_type = "move_base_msgs/MoveBaseGoal" - - the_action_type, the_goal = self.set_goal(action, action_type, goal) - - edge["action_type"] = the_action_type - edge["goal"] = the_goal - - edge["fail_policy"] = fail_policy - edge["restrictions_planning"] = restrictions_planning - edge["restrictions_runtime"] = restrictions_runtime - edge["fluid_navigation"] = fluid_navigation - - for node in self.tmap2["nodes"]: - if node["node"]["name"] == origin: - node["node"]["edges"].append(edge) - - - def set_goal(self, action, action_type, _goal=None): - - if action in self.goal_mappings and action_type == self.goal_mappings[action]["action_type"]: - goal = self.goal_mappings[action]["goal"] - else: - if _goal is not None: - goal = _goal - else: - try: - package = action_type.split("/")[0] - goal_def = action_type.split("/")[1] - - _file = self.get_parameter(f"~{action_type}", Parameter('str', Parameter.Type.STRING, "")).get_parameter_value() - if not _file: - package_object = importlib.import_module(package) - _file = os.path.join(package_object.__path__[0], '..', 'config', f"{goal_def}.yaml") - with open(_file, "r") as f: - goal = yaml.safe_load(f) - except: - action_type = self.move_base_goal["action_type"] - goal = self.move_base_goal["goal"] - - self.goal_mappings[action] = {"action_type": action_type, "goal": goal} - - return action_type, goal - - - def set_action_type(self, action): - - package = action + "_msgs" - items = [item[0].upper() + item[1:] for item in action.split("_")] - goal_type = "".join(items) + "Goal" - action_type = package + "/" + goal_type - - return action_type - - - def remove_node_cb(self, req): - """ - Removes a node from the topological map - """ - return self.remove_node(req.name) - - - def remove_node(self, node_name, update=True, write_map=True): - - self.get_logger().info("Removing Node {}".format(node_name)) - - num_available, rm_id = self.get_instances_of_node(node_name) - - if num_available == 1: - del self.tmap2["nodes"][rm_id] - - for node in self.tmap2["nodes"]: - for edge in node["node"]["edges"]: - if edge["node"] == node_name: - self.remove_edge(edge["edge_id"], False) - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True - else: - self.get_logger().error("Error removing node {}. {} instances of node with name {} found".format(node_name, num_available, node_name)) - return False - - - def remove_edge_cb(self, req): - """ - Removes an edge from a topological node - """ - return self.remove_edge(req.edge_id) - - - def remove_edge(self, edge_name, update=True, write_map=True): - - self.get_logger().info("Removing Edge {}".format(edge_name)) - - num_available = 0 - for node in self.tmap2["nodes"]: - for edge in node["node"]["edges"]: - if edge["edge_id"] == edge_name: - num_available+=1 - - if num_available >= 1: - for node in self.tmap2["nodes"]: - edges = copy.deepcopy(node["node"]["edges"]) - edges_new = list(filter(lambda edge: edge["edge_id"] != edge_name, edges)) - node["node"]["edges"] = edges_new - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True - else: - self.get_logger().error("No edges with id {} found".format(edge_name)) - return False - - - def add_content_cb(self, req): - """ - Adds content to a node's meta information - """ - data = json.loads(req.content) - - num_available, index = self.get_instances_of_node(req.node) - - if num_available != 1: - succeded = False - meta_out = None - self.get_logger().error("There are no nodes or more than one with name {}".format(req.node)) - else: - succeded = True - node_meta = self.tmap2["nodes"][index]["meta"] - if "contains" in node_meta: - if type(data) is list: - for j in data: - if "category" in j and "name" in j: - node_meta['contains'].append(j) - elif type(data) is dict: - if "category" in data and "name" in data: - node_meta["contains"].append(data) - else: - a=[] - if type(data) is list: - for j in data: - if "category" in j and "name" in j: - a.append(j) - elif type(data) is dict: - if "category" in data and "name" in data: - a.append(data) - node_meta["contains"] = a - meta_out = str(node_meta) - - self.get_logger().info("Updating %s--%s" %(self.tmap2["name"], req.node)) - self.update() - if self.auto_write: - self.write_topological_map(self.filename) - - return succeded, meta_out - - - def update_node_name_cb(self, req): - """ - Changes a node's name and updates edges which involve the renamed node - """ - return self.update_node_name(req.node_name, req.new_name) - - - def update_node_name(self, node_name, new_name, update=True, write_map=True): - if new_name in self.names: - return False, "node with name {0} already exists".format(new_name) - - num_available, index = self.get_instances_of_node(node_name) - - if num_available == 1: - # update all the edges which involve the renamed node - for node in self.tmap2["nodes"]: - for edge in node["node"]["edges"]: - if node["node"]["name"] == node_name: - edge["edge_id"] = new_name + "_" + edge["node"] - if edge["node"] == node_name: - edge["node"] = new_name - edge["edge_id"] = node["node"]["name"] + "_" + new_name - - the_node = copy.deepcopy(self.tmap2["nodes"][index]) - the_node["meta"]["node"] = new_name - the_node["node"]["name"] = new_name - self.tmap2["nodes"][index] = the_node - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True, "" - else: - return False, "Multiple nodes with name {} found, or it does not exist".format(node_name) - - - def update_node_waypoint_cb(self, req): - """ - Updates a node's pose - """ - return self.update_node_waypoint(req.name, req.pose) - - - def update_node_waypoint(self, name, pose_msg, update=True, write_map=True): - - num_available, index = self.get_instances_of_node(name) - - if num_available == 1: - pose = rosidl_runtime_py.message_to_ordereddict(pose_msg) - - self.tmap2["nodes"][index]["node"]["pose"] = pose - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True - else: - self.get_logger().error("Error updating the pose of node {}. {} instances of node with name {} found".format(name, num_available, name)) - return False - - - def update_node_tolerance_cb(self, req): - """ - Update node tolerances - """ - return self.update_node_tolerance(req.node_name, req.xy_tolerance, req.yaw_tolerance) - - - def update_node_tolerance(self, name, new_xy, new_yaw, update=True, write_map=True): - - num_available, index = self.get_instances_of_node(name) - - if num_available == 1: - the_node = copy.deepcopy(self.tmap2["nodes"][index]) - - if "properties" in the_node["node"]: - the_node["node"]["properties"]["xy_goal_tolerance"] = new_xy - the_node["node"]["properties"]["yaw_goal_tolerance"] = new_yaw - else: - properties = {} - properties["xy_goal_tolerance"] = new_xy - properties["yaw_goal_tolerance"] = new_yaw - the_node["node"]["properties"] = properties - - self.tmap2["nodes"][index] = the_node - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True, "" - else: - self.get_logger().error("Error updating the tolerance of node {}. {} instances of node with name {} found".format(name, num_available, name)) - return False, "" - - - def modify_tag_cb(self, msg): - """ - Changes the tag belonging to a node or a list of nodes - """ - succeded = True - meta_out = None - for node_name in msg.node: - available = [i for i, node in enumerate(self.tmap2["nodes"]) if node["node"]["name"] == node_name] - - for i in available: - meta = self.tmap2["nodes"][i]["meta"] - if "tag" in meta: - if not msg.tag in meta["tag"]: - continue - else: - tag_ind = meta["tag"].index(msg.tag) - meta["tag"][tag_ind] = msg.new_tag - - meta_out = str(meta) - - if len(available) == 0: - succeded = False - - if succeded: - self.update() - if self.auto_write: - self.write_topological_map(self.filename) - - return succeded, meta_out - - - def add_tag_cb(self, msg): - """ - Adds a tag to nodes in the map - """ - succeded = False - meta_out = None - for j in msg.node: - for node in self.tmap2["nodes"]: - if j == node["node"]["name"]: - succeded = True - if "tag" in node["meta"]: - if msg.tag not in node["meta"]["tag"]: - node["meta"]["tag"].append(msg.tag) - else: - a = [] - a.append(msg.tag) - node["meta"][ "tag"] = a - meta_out = str(node["meta"]) - - if succeded: - self.update() - if self.auto_write: - self.write_topological_map(self.filename) - - return succeded, meta_out - - - def rm_tag_cb(self, msg): - """ - Remove a tag from nodes in the map - """ - succeded = True - for node_name in msg.node: - available = [i for i, node in enumerate(self.tmap2["nodes"]) if node["node"]["name"] == node_name] - - succeded = False - meta_out = None - for i in available: - meta = self.tmap2["nodes"][i]["meta"] - if "tag" in meta: - if msg.tag in meta["tag"]: - print('removing tag') - meta["tag"].remove(msg.tag) - print('new list of tags') - print(meta["tag"]) - succeded = True - meta_out = str(meta) - - if succeded: - self.update() - if self.auto_write: - self.write_topological_map(self.filename) - - return succeded, meta_out - - - def add_param_to_edge_config_cb(self, req): - """ - Update edge reconfigure parameters. - """ - return self.add_param_to_edge_config(req.edge_id, req.namespace, req.name, req.value, req.value_is_string, req.not_reset) - - - def add_param_to_edge_config(self, edge_id, namespace, name, value, value_is_string, not_reset, update=True, write_map=True): - - if not value: - return False, "no value provided" - - if not value_is_string: - value = eval(value) - - node_name, _ = get_node_names_from_edge_id_2(self.tmap2, edge_id) - num_available, index = self.get_instances_of_node(node_name) - - param = {"namespace":namespace, "name":name, "value":value, "reset":not not_reset} - - if num_available == 1: - the_node = copy.deepcopy(self.tmap2["nodes"][index]) - msg = "" - for edge in the_node["node"]["edges"]: - if edge["edge_id"] == edge_id: - - config = copy.deepcopy(edge["config"]) - config = [i for i in config if not (i["namespace"] == param["namespace"] and i["name"] == param["name"])] - - self.get_logger().info("Adding param {} to edge {}".format(param, edge["edge_id"])) - config.append(param) - edge["config"] = config - - msg = "edge action is {} and edge config is {}".format(edge["action"], edge["config"]) - - self.tmap2["nodes"][index] = the_node - if update: - self.update() - if write_map and self.auto_write: - self.write_topological_map(self.filename) - - return True, msg - else: - self.get_logger().error("Cannot update edge {}. {} instances of node with name {} found".format(edge_id, num_available, node_name)) - return False, "No edge found or multiple edges found" - - - def rm_param_from_edge_config_cb(self, req): - """ - Remove a param from an edge's config. - """ - return self.rm_param_from_edge_config(req.edge_id, req.namespace, req.name) - - - def rm_param_from_edge_config(self, edge_id, namespace, name, update=True, write_map=True): - - node_name, _ = get_node_names_from_edge_id_2(self.tmap2, edge_id) - num_available, index = self.get_instances_of_node(node_name) - - if num_available == 1: - the_node = copy.deepcopy(self.tmap2["nodes"][index]) - msg = "" - for edge in the_node["node"]["edges"]: - if edge["edge_id"] == edge_id: - - config = copy.deepcopy(edge["config"]) - config = [i for i in config if not (i["namespace"] == namespace and i["name"] == name)] - - edge["config"] = config - msg = "edge action is {} and edge config is {}".format(edge["action"], edge["config"]) - - self.tmap2["nodes"][index] = the_node - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - - return True, msg - else: - self.get_logger().error("Cannot update edge {}. {} instances of node with name {} found".format(edge_id, num_available, node_name)) - return False, "No edge found or multiple edges found" - - - def rm_param_from_topological_map_cb(self, req): - """ - Remove all instances of a param from the topological map. - """ - return self.rm_param_from_topological_map(req.namespace, req.name) - - - def rm_param_from_topological_map(self, namespace, name, update=True, write_map=True): - - success = False - for node in self.tmap2["nodes"]: - for edge in node["node"]["edges"]: - config0 = copy.deepcopy(edge["config"]) - config0 = [i for i in config0 if (i["namespace"] == namespace and i["name"] == name)] - if config0: - success = True - - config = copy.deepcopy(edge["config"]) - config = [i for i in config if not (i["namespace"] == namespace and i["name"] == name)] - edge["config"] = config - - if success: - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True, "" - else: - return False, "parameter not found in topological map" - - - def update_node_restrictions_cb(self, req): - """ - Update a node's restrictions - """ - return self.update_node_restrictions(req.name, req.restrictions_planning, req.restrictions_runtime, req.update_edges) - - - def update_node_restrictions(self, node_name, restrictions_planning, restrictions_runtime, update_edges, update=True, write_map=True): - - num_available, index = self.get_instances_of_node(node_name) - - if num_available == 1: - if restrictions_planning: - self.tmap2["nodes"][index]["node"]["restrictions_planning"] = restrictions_planning - if restrictions_runtime: - self.tmap2["nodes"][index]["node"]["restrictions_runtime"] = restrictions_runtime - - edge_ids = [] - for node in self.tmap2["nodes"]: - for edge in node["node"]["edges"]: - if node["node"]["name"] == node_name or edge["node"] == node_name: - edge_ids.append(edge["edge_id"]) - - if restrictions_planning and update_edges: - for edge_id in set(edge_ids): - self.update_edge_restrictions(edge_id, restrictions_planning, "", False) - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True, "" - else: - self.get_logger().error("Error updating the restrictions of node {}. {} instances of node with name {} found".format(node_name, num_available, node_name)) - return False, "" - - - def update_edge_restrictions_cb(self, req): - """ - Update an edge's restrictions - """ - return self.update_edge_restrictions(req.name, req.restrictions_planning, req.restrictions_runtime) - - - def update_edge_restrictions(self, edge_id, restrictions_planning, restrictions_runtime, update=True, write_map=True): - - node_name, _ = get_node_names_from_edge_id_2(self.tmap2, edge_id) - num_available, index = self.get_instances_of_node(node_name) - - if num_available == 1: - the_node = copy.deepcopy(self.tmap2["nodes"][index]) - for edge in the_node["node"]["edges"]: - if edge["edge_id"] == edge_id: - if restrictions_planning: - edge["restrictions_planning"] = restrictions_planning - if restrictions_runtime: - edge["restrictions_runtime"] = restrictions_runtime - - self.tmap2["nodes"][index] = the_node - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True, "" - else: - self.get_logger().error("Error updating the restrictions of edge {}. {} instances of node with name {} found".format(edge_id, num_available, node_name)) - return False, "" - - - def update_edge_cb(self, req): - """ - Updates an edge's args (action, action type, goal etc) - """ - return self.update_edge(req.edge_id, req.action_name, req.action_type, req.goal, req.fail_policy, req.not_fluid) - - - def update_edge(self, edge_id, action_name, action_type, goal, fail_policy, not_fluid, update=True, write_map=True): - - node_name, _ = get_node_names_from_edge_id_2(self.tmap2, edge_id) - num_available, index = self.get_instances_of_node(node_name) - - if num_available == 1: - the_node = copy.deepcopy(self.tmap2["nodes"][index]) - for edge in the_node["node"]["edges"]: - if edge["edge_id"] == edge_id: - if action_name: - edge["action"] = action_name - if action_type: - edge["action_type"] = action_type - if goal: - edge["goal"] = json.loads(goal) - elif action_type and not goal: - _action_type, _goal = self.set_goal(action_name, action_type) - edge["action_type"] = _action_type - edge["goal"] = _goal - if fail_policy: - edge["fail_policy"] = fail_policy - if not_fluid: - edge["fluid_navigation"] = False - else: - edge["fluid_navigation"] = True - - self.tmap2["nodes"][index] = the_node - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True - else: - self.get_logger().error("Cannot update edge {}. {} instances of node with name {} found".format(edge_id, num_available, node_name)) - return False - - - def update_action_cb(self, req): - """ - Updates the action type and goal for all action_name edges - """ - return self.update_action(req.action_name, req.action_type, req.goal) - - - def update_action(self, action_name, action_type, goal, update=True, write_map=True): - - success = False - for node in self.tmap2["nodes"]: - for edge in node["node"]["edges"]: - if edge["action"] == action_name: - if action_type: - edge["action_type"] = action_type - if goal: - edge["goal"] = json.loads(goal) - elif action_type and not goal: - _action_type, _goal = self.set_goal(action_name, action_type) - edge["action_type"] = _action_type - edge["goal"] = _goal - success = True - - if success: - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - - return success - - - def add_datum_cb(self, req): - """ - Adds GNSS latitude/longitude to the topological map's top-level meta info - """ - return self.add_datum(req.latitude, req.longitude) - - - def add_datum(self, latitude, longitude, update=True, write_map=True): - - try: - self.tmap2["meta"]["datum_latitude"] = latitude - self.tmap2["meta"]["datum_longitude"] = longitude - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True - - except Exception as e: - self.get_logger().error(e) - return False - - - def update_fail_policy_cb(self, req): - """ - Update he fail policy of all edges in the map - """ - return self.update_fail_policy(req.fail_policy) - - - def update_fail_policy(self, fail_policy, update=True, write_map=True): - - if not fail_policy: - return False - - try: - for node in self.tmap2["nodes"]: - for edge in node["node"]["edges"]: - edge["fail_policy"] = fail_policy - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True - - except Exception as e: - self.get_logger().error(e) - return False - - - def set_influence_zone_cb(self, req): - """ - Set the influence zone (vertices) of a node - """ - return self.set_influence_zone(req.name, req.vertices_x, req.vertices_y) - - - def set_influence_zone(self, node_name, vertices_x, vertices_y, update=True, write_map=True): - - num_available, index = self.get_instances_of_node(node_name) - - if num_available == 1: - - if len(vertices_x) < 3 or len(vertices_y) < 3 or len(vertices_x) != len(vertices_y): - self.get_logger().error("Invalid node vertices") - return False - else: - verts = [{"x":x, "y":y} for x, y in zip(vertices_x, vertices_y)] - - self.tmap2["nodes"][index]["node"]["verts"] = verts - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True - else: - self.get_logger().error("Error updating the influence zone of node {}. {} instances of node with name {} found".format(node_name, num_available, node_name)) - return False - - - def clear_nodes_cb(self, req): - """ - Remove all nodes from the topological map - """ - self.clear_nodes() - - ans = Empty.response() - return ans - - - def clear_nodes(self, update=True, write_map=True): - - self.tmap2["nodes"] = [] - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - - - def add_topological_nodes_cb(self, req): - """ - Add a list of nodes to the topological map - """ - return self.add_topological_nodes(req.data) - - - def add_topological_nodes(self, data, update=True, write_map=True): - - for item in data: - success = self.add_topological_node(item.name, item.pose, add_close_nodes=False, update=False, write_map=False) - if not success: - return False - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True - - - def add_edges_cb(self, req): - """ - Add a list of edges to the topological map - """ - return self.add_edges(req.data) - - - def add_edges(self, data, update=True, write_map=True): - - for item in data: - success = self.add_edge(item.origin, item.destination, item.action, item.action_type, item.edge_id, update=False, write_map=False) - if not success: - return False - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True - - - def add_params_to_edges_cb(self, req): - """ - Add parameters to a list of edges - """ - return self.add_params_to_edges(req.data) - - - def add_params_to_edges(self, data, update=True, write_map=True): - - for item in data: - success,_ = self.add_param_to_edge_config(item.edge_id, item.namespace, item.name, item.value, item.value_is_string, item.not_reset, update=False, write_map=False) - if not success: - return False - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True - - - def set_influence_zones_cb(self, req): - """ - Set the influence zone of a list of edges - """ - return self.set_influence_zones(req.data) - - - def set_influence_zones(self, data, update=True, write_map=True): - - for item in data: - success = self.set_influence_zone(item.name, item.vertices_x, item.vertices_y, update=False, write_map=False) - if not success: - return False - - if update: - self.update() - if self.auto_write and write_map: - self.write_topological_map(self.filename) - return True - - - def get_instances_of_node(self, node_name): - - num_available = 0 - index = None - for i, node in enumerate(self.tmap2["nodes"]): - if node["node"]["name"] == node_name: - num_available+=1 - index = i - - return num_available, index - - - def map_check(self): - - self.map_ok = True - - # check that all nodes have the same pointset - pointsets = [node["meta"]["pointset"] for node in self.tmap2["nodes"]] - if len(set(pointsets)) > 1: - self.get_logger().warn("Multiple poinsets found in meta info: {}".format(set(pointsets))) - self.map_ok = False - - # check for duplicate node names - names = self.create_list_of_nodes() - for name in set(names): - n = names.count(name) - if n > 1: - self.get_logger().warn("{} instances of node with name '{}' found".format(n, name)) - self.map_ok = False - - sep = "_" + str(uuid.uuid4()) + "_" - edge_ids = [node["node"]["name"] + sep + edge["node"] for node in self.tmap2["nodes"] for edge in node["node"]["edges"]] - edge_ids.sort() - - # check for duplicate edges - for edge in set(edge_ids): - edge_nodes = re.match("(.*)" + sep + "(.*)", edge).groups() - origin = edge_nodes[0] - destination = edge_nodes[1] - - n = edge_ids.count(edge) - if n > 1: - self.get_logger().warn("{} instances of edge with origin '{}' and destination '{}' found".format(n, origin, destination)) - self.map_ok = False - - # check that an edge's destination node exists - for edge in set(edge_ids): - edge_nodes = re.match("(.*)" + sep + "(.*)", edge).groups() - origin = edge_nodes[0] - destination = edge_nodes[1] - - if destination not in names: - self.get_logger().warn("Edge with origin '{}' has a destination '{}' that does not exist".format(origin, destination)) - self.map_ok = False - - # check if a node has an edge to itself - for node in self.tmap2["nodes"]: - for edge in node["node"]["edges"]: - if node["node"]["name"] == edge["node"]: - self.get_logger().warn("Edge with id '{}' has a destination '{}' equal to its origin".format(edge["edge_id"], edge["node"])) - self.map_ok = False - - - def tmap2_to_tmap(self): - self.points = map_manager_2.convert_tmap2_to_tmap(self.tmap2, self.pointset, self.metric_map) - - - @classmethod - def convert_tmap2_to_tmap(cls, tmap2, pointset, metric_map): - points = topological_navigation_msgs.msg.TopologicalMap() - - try: - point_set = pointset - points.name = point_set - points.pointset = point_set - points.map = metric_map - - for node in tmap2["nodes"]: - msg = topological_navigation_msgs.msg.TopologicalNode() - msg.name = node["node"]["name"] - msg.map = metric_map - msg.pointset = point_set - - msg.pose = Pose() - rosidl_runtime_py.set_message_fields(msg.pose, node["node"]["pose"]) - - msg.yaw_goal_tolerance = node["node"]["properties"]["yaw_goal_tolerance"] - msg.xy_goal_tolerance = node["node"]["properties"]["xy_goal_tolerance"] - - msgs_verts = [] - for v in node["node"]["verts"]: - msg_v = topological_navigation_msgs.msg.Vertex() - msg_v.x = v["x"] - msg_v.y = v["y"] - msgs_verts.append(msg_v) - msg.verts = msgs_verts - - msgs_edges = [] - for e in node["node"]["edges"]: - msg_e = topological_navigation_msgs.msg.Edge() - msg_e.edge_id = e["edge_id"] - msg_e.node = e["node"] - msg_e.action = e["action"] - msg_e.top_vel = 0.55 - msg_e.map_2d = metric_map - msg_e.inflation_radius = 0.0 - msg_e.recovery_behaviours_config = e["recovery_behaviours_config"] - msgs_edges.append(msg_e) - msg.edges = msgs_edges - - msg.localise_by_topic = node["node"]["localise_by_topic"] - points.nodes.append(msg) - - except Exception as e: - print(traceback.format_exc()) - print("Cannot convert map to the legacy format. The conversion requires all fields of the legacy map to be set.") - points = topological_navigation_msgs.msg.TopologicalMap() - - return points -######################################################################################################### diff --git a/topological_navigation/topological_navigation/map_analyser.py b/topological_navigation/topological_navigation/map_analyser.py new file mode 100644 index 00000000..d3512c36 --- /dev/null +++ b/topological_navigation/topological_navigation/map_analyser.py @@ -0,0 +1,2209 @@ +#!/usr/bin/env python3 +"""Standalone topological map analyser. + +Analyses a ``.tmap2.yaml`` topological map file and reports: + +* schema compliance (delegated to :mod:`topological_navigation.validate_map`) +* orphaned nodes (nodes with no incoming edges, i.e. unreachable) +* disconnected sub-maps (weakly connected components) +* map statistics (node/edge counts, total/average edge length, action + type breakdown, bidirectional edge count, etc.) +* overlapping influence zones (node polygons that overlap, or a node + whose position falls inside another node's polygon) +* grid angle deviation (disabled by default) - flags edges whose angle + to a node's *other* edges deviates too far from a multiple of 90 + degrees, for nodes that are expected to have mutually right-angled + edges (regardless of the map's overall orientation) + +It can also render an SVG representation of the whole map, with +bidirectional edges drawn without arrow heads, directional edges drawn +with an arrow head indicating direction, and edges colour-coded by +their action name. + +It can produce a smaller, semantically identical copy of a map +by collapsing repeated node/edge sub-structures (e.g. shared +``properties``, ``verts`` or ``orientation`` dicts) into named YAML +anchors, and/or by dropping nodes/edges unreachable from a given node. + +Finally, it can reposition nodes to reduce grid angle deviation (the +``grid-align`` command) and save the adjusted map. + +This tool has no ROS 2 runtime dependency: it only needs ``pyyaml``, +``jsonschema`` and ``networkx`` (plus ``numpy`` and ``scipy`` via +:mod:`topological_navigation.networkx_utils`) and can therefore be used in CI (e.g. a +GitHub Actions workflow) without a ROS 2 environment. + +Usage:: + + python3 map_analyser.py analyse map.tmap2.yaml [--svg out.svg] + python3 map_analyser.py check map.tmap2.yaml + python3 map_analyser.py svg map.tmap2.yaml -o out.svg + python3 map_analyser.py minify map.tmap2.yaml [--anchors] [--strip-unreachable NODE] + python3 map_analyser.py merge map_a.tmap2.yaml map_b.tmap2.yaml -o merged.tmap2.yaml + python3 map_analyser.py grid-align map.tmap2.yaml --grid-angle-filter "name:Row*" + +Each check can be individually turned off or have its severity changed +between "warning" (printed, exit code unaffected) and "error" (printed, +exit code 1) via ``--={false,warning,error}`` switches, e.g. +``--sub-map-separation=error`` or ``--influence-zone-overlap=false``. +Defaults: schema/orphaned-node = error, sub-map-separation/ +influence-zone-overlap = warning, grid-angle-deviation = disabled. + +The grid-angle-deviation check (and the ``grid-align`` command) select +which nodes are expected to have mutually right-angled edges via +repeatable ``--grid-angle-filter``/``--grid-angle-exclude`` switches, +each of the form ``name:``, ``tag:`` or +``property:[=]``; the selected set is the union of every +``--grid-angle-filter`` match (or every node, if none given), minus any +``--grid-angle-exclude`` match. + +Exit codes for the ``check`` command: + 0 - Map is valid + 1 - Map is invalid + 2 - File not found or other error +""" + +import argparse +import fnmatch +import itertools +import logging +import math +import os +import re +import sys +from collections import Counter, defaultdict +from copy import deepcopy +from dataclasses import dataclass, field +from typing import Any, Dict, Iterable, List, Optional, Set, Tuple +from xml.sax.saxutils import escape as _xml_escape + +try: + import networkx as nx +except ImportError: + print("Error: networkx is required. Install with: pip install networkx") + sys.exit(2) + +try: + import yaml +except ImportError: + print("Error: PyYAML is required. Install with: pip install pyyaml") + sys.exit(2) + +from topological_navigation.map_merger import merge_maps +from topological_navigation.networkx_utils import build_graph_from_tmap +from topological_navigation.tmap_utils import CustomSafeLoader, NoAliasDumper, load_tmap2_file +from topological_navigation.validate_map import validate_map + +_LOGGER = logging.getLogger(__name__) + + +Point = Tuple[float, float] + +# Identifiers for the individual "check" tests, and the severity each one +# is treated with by default when computing overall map validity: +# "error" - a failure makes the map INVALID (non-zero exit code) +# "warning" - a failure is printed but does not affect validity/exit code +# None - the check is disabled entirely (not run, not printed) +DEFAULT_CHECK_SEVERITY: Dict[str, Optional[str]] = { + "schema": "error", + "orphaned-node": "error", + "sub-map-separation": "warning", + "influence-zone-overlap": "warning", + # Disabled by default: most maps do not expect their nodes to have + # mutually right-angled edges, so this check must be explicitly opted + # into via --grid-angle-deviation. + "grid-angle-deviation": None, +} + +# Top-level YAML key under which minify_map() collects collapsed anchors; +# double-underscore prefix keeps it visually distinct from real map data. +DEFAULT_ANCHORS_KEY = "__yaml_anchors" + +# Default maximum allowed deviation (degrees) of the angle between a node's +# edges from a multiple of 90 degrees before it is flagged by the +# grid-angle-deviation check / grid-align command. +DEFAULT_GRID_ANGLE_THRESHOLD_DEG = 5.0 + + +def _parse_severity(value: str) -> Optional[str]: + """Parse a ``--=`` CLI value into a check severity.""" + normalised = str(value).strip().lower() + if normalised in ("false", "off", "disable", "disabled", "none"): + return None + if normalised in ("warning", "warn"): + return "warning" + if normalised in ("error", "true", "on"): + return "error" + raise argparse.ArgumentTypeError( + f"invalid severity {value!r} (expected one of: false, warning, error)" + ) + +# Deterministic, high-contrast colour palette used to colour-code edges by +# their action name. Falls back to a hash-based colour for unknown actions +# so that any number of custom action names still gets a stable colour. +_ACTION_COLOURS = { + "navigate_to_pose": "#1f77b4", + "row_traversal": "#2ca02c", + "goal_align": "#ff7f0e", + "dock": "#9467bd", + "undock": "#8c564b", +} +_FALLBACK_PALETTE = [ + "#e377c2", "#7f7f7f", "#bcbd22", "#17becf", "#d62728", +] + +# Colours used to highlight nodes that failed a check, keyed by that check's +# configured severity (see DEFAULT_CHECK_SEVERITY / -- switches). +_SEVERITY_COLOURS = { + "error": "#d62728", # red + "warning": "#ff9900", # amber +} + + +def _colour_for_action(action: str) -> str: + """Return a stable hex colour for an action name.""" + action = str(action) if action is not None else "unknown" + if action in _ACTION_COLOURS: + return _ACTION_COLOURS[action] + index = sum(ord(c) for c in action) % len(_FALLBACK_PALETTE) + return _FALLBACK_PALETTE[index] + + +def _svg_text(value: Any) -> str: + """Escape *value* for safe inclusion as SVG/XML element text content. + + Any user-controlled string (node names, action names, edge ids, map + titles, ...) must be escaped before being embedded in generated SVG + markup, otherwise characters such as ``&``, ``<`` or ``>`` would + produce invalid/unparseable XML. + """ + return _xml_escape("" if value is None else str(value)) + + +def _finite_or(value: Any, default: float) -> float: + """Coerce *value* to a finite float, falling back to *default* otherwise.""" + try: + number = float(value) + except (TypeError, ValueError): + return default + if math.isnan(number) or math.isinf(number): + return default + return number + + +# ===================================================================== +# Geometry helpers +# ===================================================================== + +def get_node_polygon(graph: "nx.DiGraph", node_name: str) -> List[Point]: + """Return the absolute (x, y) polygon vertices of a node's influence zone. + + Influence zone vertices are stored relative to the node position (see + :func:`topological_navigation.networkx_utils.build_graph_from_tmap`), so + they are translated by the node's (x, y) position here. Returns an + empty list if the node has no ``verts`` defined. + """ + attrs = graph.nodes[node_name] + x, y = attrs.get("x", 0.0), attrs.get("y", 0.0) + verts = attrs.get("verts", []) or [] + return [(x + v["x"], y + v["y"]) for v in verts] + + +def _ccw(a: Point, b: Point, c: Point) -> bool: + return (c[1] - a[1]) * (b[0] - a[0]) > (c[0] - a[0]) * (b[1] - a[1]) + + +def _segments_intersect(a1: Point, a2: Point, b1: Point, b2: Point) -> bool: + """Return True if segment a1-a2 properly crosses segment b1-b2.""" + return ( + _ccw(a1, b1, b2) != _ccw(a2, b1, b2) + and _ccw(a1, a2, b1) != _ccw(a1, a2, b2) + ) + + +def point_in_polygon(point: Point, polygon: List[Point]) -> bool: + """Ray-casting point-in-polygon test for a generic simple polygon.""" + if len(polygon) < 3: + return False + + x, y = point + inside = False + n = len(polygon) + p1x, p1y = polygon[0] + for i in range(n + 1): + p2x, p2y = polygon[i % n] + if y > min(p1y, p2y): + if y <= max(p1y, p2y): + if x <= max(p1x, p2x): + if p1y != p2y: + xints = (y - p1y) * (p2x - p1x) / (p2y - p1y) + p1x + if p1x == p2x or x <= xints: + inside = not inside + p1x, p1y = p2x, p2y + return inside + + +def polygons_overlap(poly_a: List[Point], poly_b: List[Point]) -> bool: + """Return True if two (possibly non-convex) simple polygons overlap. + + Detects both edge-crossing overlaps and full containment (one polygon + entirely inside the other, which produces no edge crossings). + """ + if len(poly_a) < 3 or len(poly_b) < 3: + return False + + for i in range(len(poly_a)): + a1, a2 = poly_a[i], poly_a[(i + 1) % len(poly_a)] + for j in range(len(poly_b)): + b1, b2 = poly_b[j], poly_b[(j + 1) % len(poly_b)] + if _segments_intersect(a1, a2, b1, b2): + return True + + if point_in_polygon(poly_a[0], poly_b) or point_in_polygon(poly_b[0], poly_a): + return True + + return False + + +def find_overlapping_influence_zones(graph: "nx.DiGraph") -> List[Dict[str, Any]]: + """Find pairs of nodes whose influence zone polygons overlap. + + Also flags cases where a node's *position* falls inside another + node's influence zone polygon, even if the polygons themselves do + not otherwise overlap (e.g. missing/degenerate polygon on the first + node). + + Returns: + List of dicts: ``{'node_a': str, 'node_b': str, 'reason': str}``. + """ + overlaps: List[Dict[str, Any]] = [] + node_names = list(graph.nodes()) + polygons = {n: get_node_polygon(graph, n) for n in node_names} + + for node_a, node_b in itertools.combinations(node_names, 2): + poly_a, poly_b = polygons[node_a], polygons[node_b] + reasons = [] + + if poly_a and poly_b and polygons_overlap(poly_a, poly_b): + reasons.append("influence zones overlap") + else: + pos_a = (graph.nodes[node_a]["x"], graph.nodes[node_a]["y"]) + pos_b = (graph.nodes[node_b]["x"], graph.nodes[node_b]["y"]) + if poly_b and point_in_polygon(pos_a, poly_b): + reasons.append(f"'{node_a}' is inside '{node_b}' influence zone") + if poly_a and point_in_polygon(pos_b, poly_a): + reasons.append(f"'{node_b}' is inside '{node_a}' influence zone") + + if reasons: + overlaps.append({ + "node_a": node_a, + "node_b": node_b, + "reason": "; ".join(reasons), + }) + + return overlaps + + +# ===================================================================== +# Graph analysis +# ===================================================================== + +def find_orphaned_nodes(graph: "nx.DiGraph") -> List[str]: + """Return nodes with no incoming edges (unreachable from any other node).""" + return sorted(n for n in graph.nodes() if graph.in_degree(n) == 0) + + +def find_disconnected_components(graph: "nx.DiGraph") -> List[Set[str]]: + """Return the weakly connected components of the graph. + + A single-element list means the map is fully connected. More than + one component indicates disconnected sub-maps. + """ + return [set(c) for c in nx.weakly_connected_components(graph)] + + +def is_bidirectional_edge(graph: "nx.DiGraph", u: str, v: str) -> bool: + """Return True if edges u->v and v->u both exist.""" + return graph.has_edge(u, v) and graph.has_edge(v, u) + + +def _edge_length(graph: "nx.DiGraph", u: str, v: str) -> float: + ux, uy = graph.nodes[u]["x"], graph.nodes[u]["y"] + vx, vy = graph.nodes[v]["x"], graph.nodes[v]["y"] + return math.hypot(vx - ux, vy - uy) + + +def compute_statistics(graph: "nx.DiGraph") -> Dict[str, Any]: + """Gather summary statistics for the map graph.""" + num_nodes = graph.number_of_nodes() + num_edges = graph.number_of_edges() + + lengths = [_edge_length(graph, u, v) for u, v in graph.edges()] + total_length = sum(lengths) + + action_counts: Counter = Counter() + for _, _, data in graph.edges(data=True): + action_counts[data.get("action", "unknown")] += 1 + + seen = set() + bidirectional_count = 0 + for u, v in graph.edges(): + if (v, u) in seen: + continue + if is_bidirectional_edge(graph, u, v): + bidirectional_count += 1 + seen.add((u, v)) + + components = find_disconnected_components(graph) + + return { + "num_nodes": num_nodes, + "num_edges": num_edges, + "total_edge_length": total_length, + "average_edge_length": (total_length / num_edges) if num_edges else 0.0, + "action_counts": dict(action_counts), + "bidirectional_edge_count": bidirectional_count, + "unidirectional_edge_count": num_edges - 2 * bidirectional_count, + "num_connected_components": len(components), + "orphaned_node_count": len(find_orphaned_nodes(graph)), + } + + +# ===================================================================== +# Node filtering (used by the grid-angle-deviation check / grid-align) +# ===================================================================== + +@dataclass +class NodeFilter: + """A single node selection criterion. + + Parsed from a ``name:``, ``tag:`` or + ``property:[=]`` spec string by :func:`parse_node_filter`. + """ + + kind: str # "name", "tag" or "property" + pattern: Optional[str] = None # glob pattern, for kind == "name" or "tag" + key: Optional[str] = None # dotted property key, for kind == "property" + value: Optional[str] = None # expected value (as string); None means "any value" + + +def parse_node_filter(spec: str) -> NodeFilter: + """Parse a ``name:``, ``tag:`` or ``property:[=]`` filter spec string. + + ``name:`` matches node names via shell-style wildcards (see + :mod:`fnmatch`), e.g. ``"name:Row*"``. ``tag:`` matches any of the + node's ``meta.tag`` entries via the same shell-style wildcards, e.g. + ``"tag:node_semantic::indoor"`` or ``"tag:node_semantic::*"``. + ``property:[=]`` matches a (optionally dotted, for nested + properties) key in the node's ``properties`` dict, e.g. + ``"property:semantics=row_entry"`` or ``"property:roboflow.enabled"`` + (presence-only, any truthy value). + """ + if ":" not in spec: + raise ValueError( + f"Invalid node filter {spec!r}: expected 'name:', 'tag:' or " + "'property:[=]'" + ) + kind, _, rest = spec.partition(":") + kind = kind.strip().lower() + if kind == "name": + if not rest: + raise ValueError(f"Invalid node filter {spec!r}: empty glob pattern") + return NodeFilter(kind="name", pattern=rest) + if kind == "tag": + if not rest: + raise ValueError(f"Invalid node filter {spec!r}: empty glob pattern") + return NodeFilter(kind="tag", pattern=rest) + if kind == "property": + if not rest: + raise ValueError(f"Invalid node filter {spec!r}: empty property key") + key, sep, value = rest.partition("=") + return NodeFilter(kind="property", key=key, value=value if sep else None) + raise ValueError( + f"Invalid node filter {spec!r}: unknown filter type {kind!r} " + "(expected 'name', 'tag' or 'property')" + ) + + +def _lookup_nested(mapping: Optional[Dict[str, Any]], dotted_key: str) -> Tuple[Any, bool]: + """Look up a dotted key path (e.g. ``"roboflow.enabled"``) in a nested dict. + + Returns ``(value, found)``. + """ + obj: Any = mapping or {} + for part in dotted_key.split("."): + if not isinstance(obj, dict) or part not in obj: + return None, False + obj = obj[part] + return obj, True + + +def node_matches_filter(graph: "nx.DiGraph", node_name: str, node_filter: NodeFilter) -> bool: + """Return True if *node_name* matches *node_filter*.""" + if node_filter.kind == "name": + return fnmatch.fnmatch(node_name, node_filter.pattern) + if node_filter.kind == "tag": + tags = (graph.nodes[node_name].get("meta") or {}).get("tag") or [] + return any(fnmatch.fnmatch(str(tag), node_filter.pattern) for tag in tags) + if node_filter.kind == "property": + props = graph.nodes[node_name].get("properties") or {} + value, found = _lookup_nested(props, node_filter.key) + if not found: + return False + if node_filter.value is None: + return bool(value) + return str(value).strip().lower() == node_filter.value.strip().lower() + return False + + +# --------------------------------------------------------------------- +# Boolean filter expressions: combine name:/tag:/property: terms with +# 'and'/'or'/'not' and parentheses, e.g. +# "property:roboflow.enabled and (property:field=1 or property:field=2)" +# --------------------------------------------------------------------- + +_FILTER_TOKEN_RE = re.compile( + r"""\s*(?:(?P\()|(?P\))|(?P(?i:and|or|not)\b)|(?P[^\s()]+))""" +) + + +def _tokenize_filter_expression(spec: str) -> List[Tuple[str, str]]: + """Tokenize a filter expression into ``(kind, value)`` pairs. + + *kind* is one of ``"("``, ``")"``, ``"op"`` (value is the lower-cased + ``and``/``or``/``not`` keyword) or ``"term"`` (value is the raw + ``name:``/``tag:``/``property:`` spec string). + """ + tokens: List[Tuple[str, str]] = [] + pos = 0 + length = len(spec) + while pos < length: + match = _FILTER_TOKEN_RE.match(spec, pos) + if not match or match.end() == pos: + if spec[pos:].strip() == "": + break + raise ValueError(f"Invalid filter expression {spec!r} near position {pos}") + pos = match.end() + if match.group("lparen"): + tokens.append(("(", "(")) + elif match.group("rparen"): + tokens.append((")", ")")) + elif match.group("op"): + tokens.append(("op", match.group("op").lower())) + elif match.group("term"): + tokens.append(("term", match.group("term"))) + return tokens + + +class _FilterExpressionParser: + """Recursive-descent parser for boolean filter expressions. + + Grammar (lowest to highest precedence): ``or`` > ``and`` > ``not`` > + parenthesised/leaf terms. Produces a tuple-based AST: ``("leaf", + NodeFilter)``, ``("not", node)``, ``("and", lhs, rhs)`` or ``("or", + lhs, rhs)``. + """ + + def __init__(self, tokens: List[Tuple[str, str]], spec: str) -> None: + self.tokens = tokens + self.spec = spec + self.pos = 0 + + def _peek(self) -> Optional[Tuple[str, str]]: + return self.tokens[self.pos] if self.pos < len(self.tokens) else None + + def _advance(self) -> Tuple[str, str]: + tok = self.tokens[self.pos] + self.pos += 1 + return tok + + def parse(self) -> Any: + if not self.tokens: + raise ValueError(f"Invalid filter expression {self.spec!r}: empty expression") + node = self._parse_or() + if self._peek() is not None: + raise ValueError( + f"Invalid filter expression {self.spec!r}: unexpected trailing token " + f"{self._peek()[1]!r}" + ) + return node + + def _parse_or(self) -> Any: + node = self._parse_and() + while self._peek() == ("op", "or"): + self._advance() + node = ("or", node, self._parse_and()) + return node + + def _parse_and(self) -> Any: + node = self._parse_not() + while self._peek() == ("op", "and"): + self._advance() + node = ("and", node, self._parse_not()) + return node + + def _parse_not(self) -> Any: + if self._peek() == ("op", "not"): + self._advance() + return ("not", self._parse_not()) + return self._parse_atom() + + def _parse_atom(self) -> Any: + tok = self._peek() + if tok is None: + raise ValueError(f"Invalid filter expression {self.spec!r}: unexpected end of expression") + if tok[0] == "(": + self._advance() + node = self._parse_or() + closing = self._peek() + if closing != (")", ")"): + raise ValueError(f"Invalid filter expression {self.spec!r}: missing closing ')'") + self._advance() + return node + if tok[0] == "term": + self._advance() + return ("leaf", parse_node_filter(tok[1])) + raise ValueError(f"Invalid filter expression {self.spec!r}: unexpected token {tok[1]!r}") + + +def parse_node_filter_expression(spec: str) -> Any: + """Parse a boolean node filter expression string into an AST. + + Supports single terms (``"name:"``, ``"tag:"``, + ``"property:[=]"``, see :func:`parse_node_filter`) combined + with ``and``/``or``/``not`` (case-insensitive) and parentheses, e.g.:: + + "property:roboflow.enabled and (property:field=1 or property:field=2)" + + Operator precedence, from lowest to highest: ``or``, ``and``, ``not``. + A bare spec string with no operators behaves exactly as a single + :func:`parse_node_filter` term. + """ + tokens = _tokenize_filter_expression(spec) + return _FilterExpressionParser(tokens, spec).parse() + + +def node_matches_filter_expression(graph: "nx.DiGraph", node_name: str, expr: Any) -> bool: + """Return True if *node_name* matches the parsed filter expression *expr*. + + *expr* is an AST produced by :func:`parse_node_filter_expression`. + """ + kind = expr[0] + if kind == "leaf": + return node_matches_filter(graph, node_name, expr[1]) + if kind == "not": + return not node_matches_filter_expression(graph, node_name, expr[1]) + if kind == "and": + return node_matches_filter_expression(graph, node_name, expr[1]) and node_matches_filter_expression( + graph, node_name, expr[2] + ) + if kind == "or": + return node_matches_filter_expression(graph, node_name, expr[1]) or node_matches_filter_expression( + graph, node_name, expr[2] + ) + raise ValueError(f"Unknown filter expression node kind {kind!r}") + + +def select_nodes_by_filters( + graph: "nx.DiGraph", + filters: Optional[List[str]] = None, + exclude_filters: Optional[List[str]] = None, +) -> Set[str]: + """Return the set of node names selected by *filters*/*exclude_filters*. + + Each entry in *filters*/*exclude_filters* may be a single term (e.g. + ``"tag:row_entry"``) or a boolean expression combining several terms + with ``and``/``or``/``not`` and parentheses (see + :func:`parse_node_filter_expression`), e.g.:: + + "property:roboflow.enabled and (property:field=1 or property:field=2)" + + The selected set is the disjunction (union) of every positive filter + match, minus every negative (*exclude_filters*) match. If *filters* is + empty/None, every node in the graph is selected before exclusions are + applied. + """ + include = [parse_node_filter_expression(f) for f in (filters or [])] + exclude = [parse_node_filter_expression(f) for f in (exclude_filters or [])] + + if include: + selected = { + n for n in graph.nodes() if any(node_matches_filter_expression(graph, n, e) for e in include) + } + else: + selected = set(graph.nodes()) + + if exclude: + selected -= { + n for n in graph.nodes() if any(node_matches_filter_expression(graph, n, e) for e in exclude) + } + + return selected + + +# ===================================================================== +# Grid angle deviation +# ===================================================================== + +def _incident_edges( + graph: "nx.DiGraph", node: str +) -> Dict[str, List[Tuple[str, str, Dict[str, Any]]]]: + """Return ``{neighbour_name: [(u, v, edge_data), ...]}`` for every edge + connecting *node* to a neighbour, in either direction (outgoing or + incoming).""" + incident: Dict[str, List[Tuple[str, str, Dict[str, Any]]]] = defaultdict(list) + for u, v, data in graph.out_edges(node, data=True): + if v != node: + incident[v].append((u, v, data)) + for u, v, data in graph.in_edges(node, data=True): + if u != node: + incident[u].append((u, v, data)) + return incident + + +def compute_edge_bearing(graph: "nx.DiGraph", u: str, v: str) -> float: + """Return the bearing, in degrees ``[0, 360)``, of the straight line from + node *u* to node *v*.""" + ux, uy = graph.nodes[u]["x"], graph.nodes[u]["y"] + vx, vy = graph.nodes[v]["x"], graph.nodes[v]["y"] + return math.degrees(math.atan2(vy - uy, vx - ux)) % 360.0 + + +def _local_grid_phase(bearings_deg: Iterable[float]) -> float: + """Return the best-fit "local grid" phase, in ``[0, 90)``, implied by a + set of edge bearings around a single node. + + This check is about the angle *between* a node's edges, not about how + those edges are oriented relative to the map's global x/y axes: a node + whose edges point at 30/120/210/300 degrees is just as "grid-aligned" + as one whose edges point at 0/90/180/270, because in both cases the + edges are mutually separated by multiples of 90 degrees. Folding every + bearing modulo 90 collapses the four cardinal-equivalent directions + onto a single value; if the edges are mutually consistent, all folded + values are (near) identical regardless of the node's absolute + rotation. The circular mean of those folded values is therefore the + best-fit local grid orientation for the node, used as the reference + against which each edge's individual deviation is measured. + """ + phases = [b % 90.0 for b in bearings_deg] + if not phases: + return 0.0 + # The folded values lie on a circle with a period of 90 degrees rather + # than 360; scaling by 4 maps that period onto a full circle so the + # standard circular-mean trick (via atan2 of summed sin/cos) applies, + # then the result is scaled back down. + sin_sum = sum(math.sin(math.radians(p * 4.0)) for p in phases) + cos_sum = sum(math.cos(math.radians(p * 4.0)) for p in phases) + if abs(sin_sum) < 1e-9 and abs(cos_sum) < 1e-9: + # Perfectly ambiguous (e.g. two edges exactly 45 degrees apart, so + # there is no better-fitting phase than any other); fall back to a + # plain average rather than an arbitrary atan2(0, 0) == 0. + return (sum(phases) / len(phases)) % 90.0 + return (math.degrees(math.atan2(sin_sum, cos_sum)) / 4.0) % 90.0 + + +def grid_angle_deviation(bearing_deg: float, reference_phase_deg: float = 0.0) -> float: + """Return how far *bearing_deg* is from being a multiple of 90 degrees + away from *reference_phase_deg*. + + The result is always in ``[0, 45]``. With the default + ``reference_phase_deg=0`` this measures alignment with the global + 0/90/180/270 degree directions; passing the node-specific phase from + :func:`_local_grid_phase` instead measures alignment relative to the + *local* grid implied by a node's own edges (i.e. the angle *between* + edges), independent of the map's overall orientation. + """ + remainder = (bearing_deg - reference_phase_deg) % 90.0 + return min(remainder, 90.0 - remainder) + + +def find_grid_angle_deviations( + graph: "nx.DiGraph", + threshold_deg: float = DEFAULT_GRID_ANGLE_THRESHOLD_DEG, + nodes: Optional[Iterable[str]] = None, +) -> List[Dict[str, Any]]: + """Find edges whose angle to their node's other edges deviates too far + from a multiple of 90 degrees. + + For every node in *nodes* (or every node in the graph, if *nodes* is + None) that has at least two incident edges (whether the node is the + edge's source or target), the best-fit local grid phase is computed + from all of that node's edge bearings (see :func:`_local_grid_phase`), + and each edge is flagged if its :func:`grid_angle_deviation` relative + to that phase exceeds *threshold_deg*. This is a check of the angles + *between* a node's own edges, not of their absolute orientation: a + node whose edges are mutually at right angles is never flagged, no + matter how the whole map is rotated. Nodes with fewer than two edges + have no angle between edges to evaluate and are skipped. + + Returns a list of dicts: ``{'node', 'neighbour', 'bearing_deg', + 'deviation_deg', 'edge_ids'}``, sorted by node then neighbour name. + """ + findings: List[Dict[str, Any]] = [] + candidates = sorted(nodes) if nodes is not None else sorted(graph.nodes()) + for node in candidates: + if node not in graph: + continue + incident = _incident_edges(graph, node) + if len(incident) < 2: + continue + bearings = {neighbour: compute_edge_bearing(graph, node, neighbour) for neighbour in incident} + reference_phase = _local_grid_phase(bearings.values()) + for neighbour, edges in sorted(incident.items()): + bearing = bearings[neighbour] + deviation = grid_angle_deviation(bearing, reference_phase) + if deviation > threshold_deg: + edge_ids = sorted({data.get("edge_id") or f"{u}->{v}" for u, v, data in edges}) + findings.append({ + "node": node, + "neighbour": neighbour, + "bearing_deg": bearing, + "deviation_deg": deviation, + "edge_ids": edge_ids, + }) + return findings + + +@dataclass +class GridAlignmentAdjustment: + """A single node position change computed by + :func:`compute_grid_alignment_adjustments`.""" + + node: str + old_position: Point + new_position: Point + max_deviation_before: float + max_deviation_after: float + + +def compute_grid_alignment_adjustments( + graph: "nx.DiGraph", + nodes: Iterable[str], + threshold_deg: float = DEFAULT_GRID_ANGLE_THRESHOLD_DEG, +) -> Tuple[List[GridAlignmentAdjustment], List[str]]: + """Compute new positions for *nodes* that align their incident edges to + a local right-angle grid, i.e. minimise the angle *between* each + node's own edges relative to multiples of 90 degrees. + + For each node, the best-fit local grid phase is first computed from + all of its edge bearings (see :func:`_local_grid_phase`); this is the + orientation of the node's *own* right-angle grid, which need not + match the map's global x/y axes. Each incident edge (incoming or + outgoing) is then classified as running "along" or "across" that + local phase, and the node is moved to the position that would make + edges in each group exactly consistent with one another (analogous to + averaging the y of "horizontal" neighbours and the x of "vertical" + neighbours, but in a frame rotated to the node's own local phase + rather than the global axes). Neighbour positions are never modified, + and nodes already within *threshold_deg* on every incident edge (or + with fewer than two incident edges, i.e. nothing to compare) are left + untouched. + + Returns ``(adjustments, unresolved)``: + + * *adjustments* - :class:`GridAlignmentAdjustment` for every node that + was moved and, after the move, satisfies *threshold_deg* on every + incident edge. + * *unresolved* - node names that have at least one edge outside + *threshold_deg* which could not be fixed by a single coherent move + (e.g. neighbours that conflict along the same local axis, or edges + that are inherently at odds with one another). + """ + adjustments: List[GridAlignmentAdjustment] = [] + unresolved: List[str] = [] + + for node in sorted(set(nodes)): + if node not in graph: + continue + incident = _incident_edges(graph, node) + if len(incident) < 2: + continue # nothing to align without at least two edges to compare + + orig_x = graph.nodes[node]["x"] + orig_y = graph.nodes[node]["y"] + + bearings = {neighbour: compute_edge_bearing(graph, node, neighbour) for neighbour in incident} + reference_phase = _local_grid_phase(bearings.values()) + + deviations_before = [grid_angle_deviation(b, reference_phase) for b in bearings.values()] + max_before = max(deviations_before) + if max_before <= threshold_deg: + continue # already compliant, nothing to do + + # Work in a frame rotated by reference_phase, so that the node's own + # local grid becomes axis-aligned: "along" the phase direction maps + # onto the u-axis, "across" it (phase + 90) maps onto the w-axis. + theta = math.radians(reference_phase) + cos_t, sin_t = math.cos(theta), math.sin(theta) + + along_us = [] # neighbour u-coordinates, for edges running across the phase axis + across_ws = [] # neighbour w-coordinates, for edges running along the phase axis + for neighbour, bearing in bearings.items(): + neighbour_x = graph.nodes[neighbour]["x"] + neighbour_y = graph.nodes[neighbour]["y"] + neighbour_u = neighbour_x * cos_t + neighbour_y * sin_t + neighbour_w = -neighbour_x * sin_t + neighbour_y * cos_t + + # Classify the edge as (closer to) running along the phase + # direction or across it (phase + 90): the residual mod 180 is + # near 0/180 for "along", near 90 for "across". + residual = (bearing - reference_phase) % 180.0 + dist_along = min(residual, 180.0 - residual) + dist_across = abs(residual - 90.0) + if dist_along <= dist_across: + across_ws.append(neighbour_w) + else: + along_us.append(neighbour_u) + + orig_u = orig_x * cos_t + orig_y * sin_t + orig_w = -orig_x * sin_t + orig_y * cos_t + new_u = (sum(along_us) / len(along_us)) if along_us else orig_u + new_w = (sum(across_ws) / len(across_ws)) if across_ws else orig_w + + new_x = new_u * cos_t - new_w * sin_t + new_y = new_u * sin_t + new_w * cos_t + + deviations_after = [] + for neighbour in incident: + neighbour_x = graph.nodes[neighbour]["x"] + neighbour_y = graph.nodes[neighbour]["y"] + bearing = math.degrees(math.atan2(neighbour_y - new_y, neighbour_x - new_x)) % 360.0 + deviations_after.append(grid_angle_deviation(bearing, reference_phase)) + max_after = max(deviations_after) if deviations_after else 0.0 + + if max_after <= threshold_deg: + adjustments.append(GridAlignmentAdjustment( + node=node, + old_position=(orig_x, orig_y), + new_position=(new_x, new_y), + max_deviation_before=max_before, + max_deviation_after=max_after, + )) + else: + unresolved.append(node) + + return adjustments, unresolved + + +# ===================================================================== +# SVG generation +# ===================================================================== + +def generate_svg( + graph: "nx.DiGraph", + output_path: str, + title: Optional[str] = None, + width: int = 1200, + height: int = 900, + margin: float = 40.0, + node_highlights: Optional[Dict[str, str]] = None, +) -> str: + """Render the topological map graph as an SVG file. + + Bidirectional edges (edge exists in both directions) are drawn as + plain lines with no arrow head. Directional edges are drawn with an + arrow head indicating the direction of travel. Edges are + colour-coded by their ``action`` name. + + Args: + graph: Graph built by :func:`build_graph_from_tmap`. + output_path: Path to write the ``.svg`` file to. + title: Optional title rendered at the top of the image. + width, height: Output image size in pixels. + margin: Margin in pixels around the map content. + node_highlights: Optional ``{node_name: 'error'|'warning'}`` mapping + (see :func:`compute_node_highlights`) used to colour nodes that + failed the influence-zone-overlap or grid-angle-deviation checks; + unlisted nodes are drawn in the default colour. + + Returns: + The SVG document as a string (also written to ``output_path``). + """ + node_highlights = node_highlights or {} + node_names = list(graph.nodes()) + if not node_names: + raise ValueError("Cannot render SVG for an empty map") + + # Coerce every node coordinate to a finite float. Missing/NaN/Inf + # coordinates would otherwise propagate into the generated markup as + # literal "nan"/"inf" attribute values, which is not valid SVG. + xs = [_finite_or(graph.nodes[n].get("x"), 0.0) for n in node_names] + ys = [_finite_or(graph.nodes[n].get("y"), 0.0) for n in node_names] + min_x, max_x = min(xs), max(xs) + min_y, max_y = min(ys), max(ys) + + # Guard against degenerate output sizes (e.g. width/height smaller than + # 2x margin) which would otherwise make the map area negative and + # produce a non-finite or negative scale factor. + width = max(int(_finite_or(width, 1200)), 1) + height = max(int(_finite_or(height, 900)), 1) + margin = max(_finite_or(margin, 40.0), 0.0) + margin = min(margin, (width - 1) / 2.0, (height - 1) / 2.0) + margin = max(margin, 0.0) + + span_x = max(max_x - min_x, 1e-6) + span_y = max(max_y - min_y, 1e-6) + drawable_w = width - 2 * margin + drawable_h = height - 2 * margin + scale = min(drawable_w / span_x, drawable_h / span_y) + + # Sanitized (x, y) position per node, reused for every draw call below + # so that a single NaN/Inf coordinate is normalised once rather than + # risking re-reading the raw (possibly non-finite) graph attribute. + positions: Dict[str, Point] = dict(zip(node_names, zip(xs, ys))) + + def to_px(point: Point) -> Point: + px = margin + (point[0] - min_x) * scale + # SVG y grows downward; flip so the map is drawn "north up". + py = margin + (max_y - point[1]) * scale + return px, py + + # Characteristic pixel spacing between connected nodes, used below to + # scale marker/line/font sizes so they stay clearly visible regardless + # of the map's physical scale or node density. Falls back to an + # estimate from the drawable area and node count for edgeless maps. + edge_px_lengths = [ + math.hypot(x2 - x1, y2 - y1) + for u, v in graph.edges() + for (x1, y1), (x2, y2) in [(to_px(positions[u]), to_px(positions[v]))] + if u != v + ] + if edge_px_lengths: + char_length = sum(edge_px_lengths) / len(edge_px_lengths) + else: + char_length = min(drawable_w, drawable_h) / max(math.sqrt(len(node_names)), 1.0) + + node_radius = max(1.0, min(char_length * 0.06, 6.0)) + highlight_radius = node_radius * 1.5 + edge_stroke_width = max(0.5, min(char_length * 0.03, 4.0)) + font_size = max(3.0, min(char_length * 0.09, 14.0)) + + svg_parts: List[str] = [] + svg_parts.append( + f'' + ) + svg_parts.append('') + + if title: + svg_parts.append( + f'' + f'{_svg_text(title)}' + ) + + # Arrow-head markers, one per colour used by a directional edge. + used_colours = sorted({ + _colour_for_action(data.get("action", "unknown")) + for u, v, data in graph.edges(data=True) + if not is_bidirectional_edge(graph, u, v) + }) + svg_parts.append('') + for colour in used_colours: + marker_id = f"arrow-{colour.lstrip('#')}" + svg_parts.append( + f'' + f'' + f'' + ) + svg_parts.append('') + + # --- edges ----------------------------------------------------------- + drawn: Set[Tuple[str, str]] = set() + for u, v, data in graph.edges(data=True): + if (v, u) in drawn: + continue + drawn.add((u, v)) + + action = data.get("action", "unknown") + colour = _colour_for_action(action) + bidirectional = is_bidirectional_edge(graph, u, v) + + x1, y1 = to_px(positions[u]) + x2, y2 = to_px(positions[v]) + + marker_attr = "" + if not bidirectional: + marker_id = f"arrow-{colour.lstrip('#')}" + marker_attr = f' marker-end="url(#{marker_id})"' + + svg_parts.append( + f'' + f'{_svg_text(data.get("edge_id", ""))} ({_svg_text(action)})' + f'' + ) + + # --- nodes ------------------------------------------------------------- + for node_name in node_names: + px, py = to_px(positions[node_name]) + severity = node_highlights.get(node_name) + colour = _SEVERITY_COLOURS.get(severity, "steelblue") + radius = highlight_radius if severity else node_radius + svg_parts.append( + f'{_svg_text(node_name)}' + ) + svg_parts.append( + f'{_svg_text(node_name)}' + ) + + # --- legend -------------------------------------------------------- + actions = sorted({ + str(data.get("action", "unknown") or "unknown") + for _, _, data in graph.edges(data=True) + }) + used_severities = sorted(set(node_highlights.values()), reverse=True) # error before warning + legend_y = height - 20 * (len(actions) + len(used_severities)) - 10 + for i, severity in enumerate(used_severities): + colour = _SEVERITY_COLOURS.get(severity, "steelblue") + ly = legend_y + i * 20 + svg_parts.append( + f'' + ) + svg_parts.append( + f'Node {_svg_text(severity)}' + ) + legend_y += 20 * len(used_severities) + for i, action in enumerate(actions): + colour = _colour_for_action(action) + ly = legend_y + i * 20 + svg_parts.append( + f'' + ) + svg_parts.append( + f'{_svg_text(action)}' + ) + + svg_parts.append('') + svg_doc = "\n".join(svg_parts) + + with open(output_path, "w", encoding="utf-8") as fh: + fh.write(svg_doc) + + return svg_doc + + +# ===================================================================== +# Top-level analysis +# ===================================================================== + +@dataclass +class AnalysisResult: + """Aggregated results of analysing a topological map.""" + + map_file: str + schema_valid: bool + schema_message: str + orphaned_nodes: List[str] = field(default_factory=list) + disconnected_components: List[Set[str]] = field(default_factory=list) + statistics: Dict[str, Any] = field(default_factory=dict) + overlaps: List[Dict[str, Any]] = field(default_factory=list) + grid_angle_deviations: List[Dict[str, Any]] = field(default_factory=list) + grid_angle_threshold_deg: float = DEFAULT_GRID_ANGLE_THRESHOLD_DEG + grid_angle_nodes_checked: int = 0 + grid_angle_nodes_total: int = 0 + svg_path: Optional[str] = None + check_severities: Dict[str, Optional[str]] = field( + default_factory=lambda: dict(DEFAULT_CHECK_SEVERITY) + ) + + def _status_label(self, check_id: str, failed: bool) -> str: + """Return PASS/WARNING/FAIL/SKIPPED for *check_id* given its severity.""" + severity = self.check_severities.get(check_id, DEFAULT_CHECK_SEVERITY.get(check_id)) + if severity is None: + return "SKIPPED" + if not failed: + return "PASS" + return "FAIL" if severity == "error" else "WARNING" + + @property + def is_valid(self) -> bool: + """A map is valid unless a check whose severity is "error" failed. + + Checks whose severity is "warning" are reported but do not affect + validity; checks whose severity is ``None`` are disabled entirely. + """ + failures = { + "schema": not self.schema_valid, + "orphaned-node": bool(self.orphaned_nodes), + "sub-map-separation": len(self.disconnected_components) > 1, + "influence-zone-overlap": bool(self.overlaps), + "grid-angle-deviation": bool(self.grid_angle_deviations), + } + return not any( + failed and self.check_severities.get(check_id) == "error" + for check_id, failed in failures.items() + ) + + def format_report(self) -> str: + """Return a human-readable, multi-section analysis report.""" + lines = [f"Map analysis report: {self.map_file}", "=" * 60] + + lines.append("") + lines.append("[Schema validation]") + label = self._status_label("schema", not self.schema_valid) + if label == "SKIPPED": + lines.append(" SKIPPED: check disabled") + else: + lines.append(f" {label}: {self.schema_message}") + + lines.append("") + lines.append("[Orphaned nodes]") + label = self._status_label("orphaned-node", bool(self.orphaned_nodes)) + if label == "SKIPPED": + lines.append(" SKIPPED: check disabled") + elif self.orphaned_nodes: + lines.append(f" {label}: {len(self.orphaned_nodes)} orphaned node(s) found:") + for n in self.orphaned_nodes: + lines.append(f" - {n}") + else: + lines.append(f" {label}: No orphaned nodes found") + + lines.append("") + lines.append("[Disconnected sub-maps]") + submaps_failed = len(self.disconnected_components) > 1 + label = self._status_label("sub-map-separation", submaps_failed) + if label == "SKIPPED": + lines.append(" SKIPPED: check disabled") + elif submaps_failed: + lines.append( + f" {label}: {len(self.disconnected_components)} disconnected " + "sub-map(s) found:" + ) + for i, comp in enumerate(self.disconnected_components, start=1): + lines.append(f" - sub-map {i}: {sorted(comp)}") + else: + lines.append(f" {label}: Map is fully connected") + + lines.append("") + lines.append("[Overlapping influence zones]") + label = self._status_label("influence-zone-overlap", bool(self.overlaps)) + if label == "SKIPPED": + lines.append(" SKIPPED: check disabled") + elif self.overlaps: + lines.append(f" {label}: {len(self.overlaps)} overlap(s) found:") + for o in self.overlaps: + lines.append(f" - {o['node_a']} <-> {o['node_b']}: {o['reason']}") + else: + lines.append(f" {label}: No overlapping influence zones found") + + lines.append("") + lines.append("[Grid angle deviation]") + label = self._status_label("grid-angle-deviation", bool(self.grid_angle_deviations)) + if label == "SKIPPED": + lines.append(" SKIPPED: check disabled (enable with --grid-angle-deviation=warning|error)") + elif self.grid_angle_deviations: + lines.append( + f" {label}: {len(self.grid_angle_deviations)} edge(s) deviate more than " + f"{self.grid_angle_threshold_deg:g} deg from a 90 deg multiple of another edge " + f"at the same node ({self.grid_angle_nodes_checked} of " + f"{self.grid_angle_nodes_total} node(s) checked):" + ) + by_node: Dict[str, List[Dict[str, Any]]] = defaultdict(list) + for d in self.grid_angle_deviations: + by_node[d["node"]].append(d) + for node in sorted(by_node): + findings = by_node[node] + edge_descs = ", ".join( + f"'{d['neighbour']}' (deviation={d['deviation_deg']:.1f} deg)" for d in findings + ) + edge_ids = ", ".join(sorted({eid for d in findings for eid in d["edge_ids"]})) + lines.append(f" - Node '{node}': {edge_descs} [{edge_ids}]") + else: + lines.append( + f" {label}: No irregular grid angles found ({self.grid_angle_nodes_checked} of " + f"{self.grid_angle_nodes_total} node(s) checked)" + ) + + lines.append("") + lines.append("[Statistics]") + stats = self.statistics + lines.append(f" Nodes: {stats.get('num_nodes', 0)}") + lines.append(f" Edges: {stats.get('num_edges', 0)}") + lines.append(f" Total edge length: {stats.get('total_edge_length', 0.0):.2f} m") + lines.append(f" Average edge length: {stats.get('average_edge_length', 0.0):.2f} m") + lines.append(f" Bidirectional edges: {stats.get('bidirectional_edge_count', 0)}") + lines.append(f" Unidirectional edges: {stats.get('unidirectional_edge_count', 0)}") + lines.append(" Actions:") + for action, count in sorted(stats.get("action_counts", {}).items()): + lines.append(f" - {action}: {count}") + + if self.svg_path: + lines.append("") + lines.append(f"[SVG] Generated at {self.svg_path}") + + return "\n".join(lines) + + +def compute_node_highlights( + overlaps: List[Dict[str, Any]], + grid_angle_deviations: List[Dict[str, Any]], + check_severities: Dict[str, Optional[str]], +) -> Dict[str, str]: + """Return ``{node_name: 'error'|'warning'}`` for nodes that failed the + influence-zone-overlap or grid-angle-deviation checks, for use as the + ``node_highlights`` argument to :func:`generate_svg`. + + A node's severity is that of whichever failing check it is worst under; + ``'error'`` always wins over ``'warning'`` if a node fails both. + """ + highlights: Dict[str, str] = {} + + def _mark(node: str, severity: Optional[str]) -> None: + if severity is None or highlights.get(node) == "error": + return + highlights[node] = severity + + overlap_severity = check_severities.get("influence-zone-overlap") + for o in overlaps: + _mark(o["node_a"], overlap_severity) + _mark(o["node_b"], overlap_severity) + + grid_severity = check_severities.get("grid-angle-deviation") + for d in grid_angle_deviations: + _mark(d["node"], grid_severity) + + return highlights + + +def analyse_map( + map_file: str, + schema_file: Optional[str] = None, + svg_path: Optional[str] = None, + check_severities: Optional[Dict[str, Optional[str]]] = None, + grid_angle_threshold_deg: float = DEFAULT_GRID_ANGLE_THRESHOLD_DEG, + grid_angle_filters: Optional[List[str]] = None, + grid_angle_exclude_filters: Optional[List[str]] = None, +) -> AnalysisResult: + """Run the full map analysis pipeline and return an :class:`AnalysisResult`. + + *check_severities* optionally overrides the default severity (see + :data:`DEFAULT_CHECK_SEVERITY`) for each check; a severity of ``None`` + disables that check so it is neither run nor reported. The + grid-angle-deviation check (disabled by default) additionally accepts + *grid_angle_threshold_deg* (maximum allowed deviation, in degrees, of + the angle between a node's edges from a 90-degree multiple) and + *grid_angle_filters*/*grid_angle_exclude_filters* + (see :func:`select_nodes_by_filters`) to restrict which nodes it applies to. + """ + severities = dict(DEFAULT_CHECK_SEVERITY) + if check_severities: + severities.update(check_severities) + + if severities["schema"] is not None: + is_valid, message = validate_map(map_file, schema_file) + else: + is_valid, message = True, "Skipped (check disabled)" + + tmap_data = load_tmap2_file(map_file) + graph = build_graph_from_tmap(tmap_data) + + if graph is None: + return AnalysisResult( + map_file=map_file, + schema_valid=is_valid, + schema_message=message, + orphaned_nodes=[], + disconnected_components=[], + statistics={}, + overlaps=[], + grid_angle_deviations=[], + grid_angle_threshold_deg=grid_angle_threshold_deg, + check_severities=severities, + ) + + overlaps: List[Dict[str, Any]] = ( + find_overlapping_influence_zones(graph) + if severities["influence-zone-overlap"] is not None + else [] + ) + + grid_angle_deviations: List[Dict[str, Any]] = [] + grid_angle_nodes_checked = 0 + if severities["grid-angle-deviation"] is not None: + selected_nodes = select_nodes_by_filters(graph, grid_angle_filters, grid_angle_exclude_filters) + grid_angle_nodes_checked = len(selected_nodes) + grid_angle_deviations = find_grid_angle_deviations( + graph, threshold_deg=grid_angle_threshold_deg, nodes=selected_nodes + ) + + result = AnalysisResult( + map_file=map_file, + schema_valid=is_valid, + schema_message=message, + orphaned_nodes=find_orphaned_nodes(graph) if severities["orphaned-node"] is not None else [], + disconnected_components=( + find_disconnected_components(graph) + if severities["sub-map-separation"] is not None + else [] + ), + statistics=compute_statistics(graph), + overlaps=overlaps, + grid_angle_deviations=grid_angle_deviations, + grid_angle_threshold_deg=grid_angle_threshold_deg, + grid_angle_nodes_checked=grid_angle_nodes_checked, + grid_angle_nodes_total=graph.number_of_nodes(), + check_severities=severities, + ) + + if svg_path: + node_highlights = compute_node_highlights(overlaps, grid_angle_deviations, severities) + generate_svg(graph, svg_path, title=os.path.basename(map_file), node_highlights=node_highlights) + result.svg_path = svg_path + + return result + + +# ===================================================================== +# Minification +# ===================================================================== + + +def _canonical_key(node: Any) -> Any: + """Hashable, order-independent-for-dicts structural signature of *node*.""" + if isinstance(node, dict): + return ("dict", tuple(sorted((k, _canonical_key(v)) for k, v in node.items()))) + if isinstance(node, list): + return ("list", tuple(_canonical_key(v) for v in node)) + return ("scalar", type(node).__name__, node) + + +def _estimate_size(node: Any) -> int: + """Cheap, library-independent character-size estimate, used only for thresholding.""" + if isinstance(node, dict): + return 2 + sum(len(str(k)) + 2 + _estimate_size(v) for k, v in node.items()) + if isinstance(node, list): + return 2 + sum(_estimate_size(v) + 2 for v in node) + return len(str(node)) + + +def _collect_signatures( + node: Any, + path: List[str], + counts: Dict[Any, int], + representative: Dict[Any, Any], + first_path: Dict[Any, List[str]], +) -> None: + """Bottom-up walk recording, for every dict/list subtree: its occurrence count, + a representative instance, and the context path of its first occurrence (the + latter is used to name anchors sensibly, e.g. "properties" or "verts").""" + if isinstance(node, dict): + for k, v in node.items(): + _collect_signatures(v, path + [str(k)], counts, representative, first_path) + sig = _canonical_key(node) + counts[sig] += 1 + representative.setdefault(sig, node) + first_path.setdefault(sig, path) + elif isinstance(node, list): + for v in node: + _collect_signatures(v, path, counts, representative, first_path) + sig = _canonical_key(node) + counts[sig] += 1 + representative.setdefault(sig, node) + first_path.setdefault(sig, path) + + +def _rebuild_with_anchors( + node: Any, + mergeable_sigs: Set[Any], + representative: Dict[Any, Any], + cache: Dict[Any, Any], +) -> Any: + """Rebuild *node*, replacing any mergeable subtree with a single shared object (by + identity) so the YAML dumper emits it once with an anchor and aliases it elsewhere.""" + if isinstance(node, dict): + sig = _canonical_key(node) + if sig in mergeable_sigs: + if sig not in cache: + rep = representative[sig] + cache[sig] = { + k: _rebuild_with_anchors(v, mergeable_sigs, representative, cache) + for k, v in rep.items() + } + return cache[sig] + return {k: _rebuild_with_anchors(v, mergeable_sigs, representative, cache) for k, v in node.items()} + if isinstance(node, list): + sig = _canonical_key(node) + if sig in mergeable_sigs: + if sig not in cache: + rep = representative[sig] + cache[sig] = [_rebuild_with_anchors(v, mergeable_sigs, representative, cache) for v in rep] + return cache[sig] + return [_rebuild_with_anchors(v, mergeable_sigs, representative, cache) for v in node] + return node + + +def _kind_for_path(path: List[str]) -> str: + """Return the most specific context label (last path element) for naming, e.g. 'verts'.""" + return path[-1] if path else "shared" + + +def _slug(text: Any) -> str: + """Turn *text* into a short, YAML-key-safe, lowercase identifier fragment.""" + slug = re.sub(r"[^a-zA-Z0-9]+", "_", str(text).strip().lower()) + return slug.strip("_") or "x" + + +def _fmt_num(value: Any) -> str: + """Format a number compactly for use inside an anchor name (e.g. 0.3 -> '0_3').""" + try: + number = float(value) + except (TypeError, ValueError): + return _slug(value) + if number.is_integer(): + number = int(number) + return str(number).replace("-", "m").replace(".", "_") + + +def _is_identity_orientation(value: Dict[str, Any]) -> bool: + try: + return ( + abs(float(value.get("w", 0.0)) - 1.0) < 1e-6 + and all(abs(float(value.get(k, 0.0))) < 1e-6 for k in ("x", "y", "z")) + ) + except (TypeError, ValueError): + return False + + +def _suggest_anchor_name(kind: str, value: Any) -> str: + """Best-effort, content-aware anchor name for a merged subtree; falls back to *kind*.""" + if kind == "orientation" and isinstance(value, dict) and _is_identity_orientation(value): + return "orientation_identity" + if kind == "properties" and isinstance(value, dict): + if "semantics" in value: + return f"properties_{_slug(value['semantics'])}" + keys = set(value.keys()) + if keys == {"xy_goal_tolerance", "yaw_goal_tolerance"}: + return f"properties_tol_{_fmt_num(value['xy_goal_tolerance'])}_{_fmt_num(value['yaw_goal_tolerance'])}" + if keys == {"max_speed"}: + return f"properties_speed_{_fmt_num(value['max_speed'])}" + if kind == "verts" and isinstance(value, list) and value: + xs = [v.get("x", 0.0) for v in value if isinstance(v, dict)] + ys = [v.get("y", 0.0) for v in value if isinstance(v, dict)] + if xs and ys: + width = round(max(xs) - min(xs), 2) + height = round(max(ys) - min(ys), 2) + return f"verts_{_fmt_num(width)}x{_fmt_num(height)}" + return kind + + +def _assign_anchor_names( + ordered_sigs: List[Any], + representative: Dict[Any, Any], + first_path: Dict[Any, List[str]], +) -> Dict[Any, str]: + """Return {signature: anchor_name}, generating readable, collision-free names.""" + names: Dict[Any, str] = {} + used: Counter = Counter() + for sig in ordered_sigs: + kind = _kind_for_path(first_path.get(sig, [])) + base = _suggest_anchor_name(kind, representative[sig]) + used[base] += 1 + names[sig] = base if used[base] == 1 else f"{base}_{used[base]}" + return names + + +def _strip_unreachable( + tmap_data: Dict[str, Any], + start_node: str, + logger: Optional[logging.Logger] = None, +) -> Tuple[Dict[str, Any], int, int]: + """Drop nodes (and their edges) not reachable via a directed path from *start_node*. + + Returns the modified map dict plus the number of removed nodes and edges. The + result always passes the ``orphaned-node`` and ``sub-map-separation`` checks for + every node except (possibly) *start_node* itself, since every kept node is by + construction reachable from - and thus has an incoming edge from - another kept + node along its path from *start_node*. + """ + graph = build_graph_from_tmap(tmap_data) + if graph is None or start_node not in graph: + raise ValueError(f"Start node '{start_node}' not found in map") + + keep = {start_node} | nx.descendants(graph, start_node) + original_node_count = graph.number_of_nodes() + + stripped = deepcopy(tmap_data) + kept_nodes = [n for n in (stripped.get("nodes") or []) if n["node"]["name"] in keep] + + removed_edges = 0 + for n in kept_nodes: + edges = n["node"].get("edges") or [] + kept_edges = [e for e in edges if e.get("node") in keep] + removed_edges += len(edges) - len(kept_edges) + n["node"]["edges"] = kept_edges + + stripped["nodes"] = kept_nodes + removed_nodes = original_node_count - len(kept_nodes) + + (logger or _LOGGER).info( + "strip-unreachable from '%s': kept %d/%d node(s); removed %d node(s) and %d edge(s)", + start_node, len(kept_nodes), original_node_count, removed_nodes, removed_edges, + ) + + return stripped, removed_nodes, removed_edges + + +def _make_named_anchor_dumper(anchor_names_by_id: Dict[int, str]): + """Build a ``SafeDumper`` subclass that emits *anchor_names_by_id*'s names instead + of PyYAML's default auto-generated ``id001``-style anchor names.""" + + class _NamedAnchorDumper(yaml.SafeDumper): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._anchor_node_names: Dict[int, str] = {} + + def represent_data(self, data): + node = super().represent_data(data) + name = anchor_names_by_id.get(id(data)) + if name is not None: + self._anchor_node_names[id(node)] = name + return node + + def generate_anchor(self, node): + return self._anchor_node_names.get(id(node)) or super().generate_anchor(node) + + return _NamedAnchorDumper + + +def _leading_comment_block(text: str) -> str: + """Return the leading run of comment/blank lines at the top of *text*, or "".""" + block: List[str] = [] + for line in text.splitlines(keepends=True): + stripped = line.strip() + if stripped == "" or stripped.startswith("#"): + block.append(line) + else: + break + return "".join(block) + + +def _derive_output_path(map_file: str, suffix: str = "min") -> str: + """Derive a sibling `..` output path for *map_file*.""" + directory, base = os.path.split(map_file) + stem, sep, rest = base.partition(".") + derived = f"{stem}.{suffix}{sep}{rest}" if sep else f"{stem}.{suffix}" + return os.path.join(directory, derived) if directory else derived + + +@dataclass +class MinifyResult: + """Outcome of running :func:`minify_map`.""" + + map_file: str + output_file: str + original_size: int + minified_size: int + anchors_created: int = 0 + occurrences_collapsed: int = 0 + stripped_nodes: int = 0 + stripped_edges: int = 0 + schema_valid: Optional[bool] = None + schema_message: str = "" + + @property + def bytes_saved(self) -> int: + return self.original_size - self.minified_size + + @property + def percent_saved(self) -> float: + return (100.0 * self.bytes_saved / self.original_size) if self.original_size else 0.0 + + def format_report(self) -> str: + lines = [f"Minify report: {self.map_file} -> {self.output_file}", "=" * 60] + lines.append(f" Original size: {self.original_size:,} bytes") + lines.append(f" Minified size: {self.minified_size:,} bytes") + lines.append(f" Reduction: {self.percent_saved:.1f}% ({self.bytes_saved:,} bytes saved)") + lines.append( + f" Anchors created: {self.anchors_created} " + f"(covering {self.occurrences_collapsed} occurrence(s))" + ) + if self.stripped_nodes or self.stripped_edges: + lines.append( + f" Stripped unreachable: {self.stripped_nodes} node(s), {self.stripped_edges} edge(s)" + ) + if self.schema_valid is not None: + status = "PASS" if self.schema_valid else "FAIL" + lines.append(f" Schema check on output: {status}: {self.schema_message}") + return "\n".join(lines) + + +def minify_map( + map_file: str, + output_file: Optional[str] = None, + anchors: bool = True, + anchors_key: str = DEFAULT_ANCHORS_KEY, + strip_comments: bool = False, + flowstyle: bool = False, + min_size: int = 100, + min_occurrences: int = 5, + strip_unreachable_from: Optional[str] = None, + schema_file: Optional[str] = None, + logger: Optional[logging.Logger] = None, +) -> MinifyResult: + """Write a smaller, semantically-identical copy of *map_file* and return a + :class:`MinifyResult` describing the outcome. + + Repeated dict/list sub-structures (e.g. shared ``properties``, ``verts`` or + ``orientation`` blocks) whose serialised size is >= *min_size* and which occur + >= *min_occurrences* times are collapsed into named YAML anchors gathered under + a top-level section named *anchors_key* (default :data:`DEFAULT_ANCHORS_KEY`), + when *anchors* is True. Only the leading top-of-file comment block is preserved + (per-node/edge inline comments are not preserved by the underlying YAML parser); + pass ``strip_comments=True`` to drop it too. When *strip_unreachable_from* is + given, nodes/edges not reachable via a directed path from that node are dropped + first. + """ + log = logger or _LOGGER + + with open(map_file, "r", encoding="utf-8") as fh: + original_text = fh.read() + + tmap_data = load_tmap2_file(map_file) + # If *map_file* was itself produced by a previous minify pass, discard its + # top-level anchors section: it's not real map data, just a cache of + # shared subtrees we're about to recompute from scratch. Keeping it around + # would leak into the rebuilt document (clobbering the new anchors) and + # break the round-trip check below. + previously_had_anchors = tmap_data.pop(anchors_key, None) is not None + if previously_had_anchors: + log.info("Input already contains an '%s' section; recomputing anchors from scratch", anchors_key) + + stripped_nodes = stripped_edges = 0 + if strip_unreachable_from: + tmap_data, stripped_nodes, stripped_edges = _strip_unreachable( + tmap_data, strip_unreachable_from, logger=log + ) + + anchors_section: Dict[str, Any] = {} + anchor_names_by_id: Dict[int, str] = {} + occurrences_collapsed = 0 + + if anchors: + counts: Dict[Any, int] = defaultdict(int) + representative: Dict[Any, Any] = {} + first_path: Dict[Any, List[str]] = {} + _collect_signatures(tmap_data, [], counts, representative, first_path) + + candidates = [ + sig for sig, count in counts.items() + if count >= min_occurrences and _estimate_size(representative[sig]) >= min_size + ] + # Smallest/most-nested subtrees first, so a bigger anchor that happens to + # contain a smaller one references it cleanly rather than the other way round. + candidates.sort(key=lambda s: _estimate_size(representative[s])) + mergeable_set = set(candidates) + + anchor_names = _assign_anchor_names(candidates, representative, first_path) + + cache: Dict[Any, Any] = {} + for sig in candidates: + anchors_section[anchor_names[sig]] = _rebuild_with_anchors( + representative[sig], mergeable_set, representative, cache + ) + occurrences_collapsed = sum(counts[sig] for sig in candidates) + + rebuilt = _rebuild_with_anchors(tmap_data, mergeable_set, representative, cache) + final_doc = {anchors_key: anchors_section, **rebuilt} if anchors_section else rebuilt + anchor_names_by_id = {id(v): k for k, v in anchors_section.items()} + else: + final_doc = deepcopy(tmap_data) + + dumper = _make_named_anchor_dumper(anchor_names_by_id) if anchors_section else NoAliasDumper + dumped = yaml.dump( + final_doc, + Dumper=dumper, + default_flow_style=flowstyle, + sort_keys=False, + allow_unicode=True, + width=100000 if flowstyle else 120, + ) + + # Round-trip sanity check: minified YAML must parse back to the same data + # (aliases transparently expand back out), modulo the extra anchors section. + reparsed = yaml.load(dumped, Loader=CustomSafeLoader) + reparsed_body = {k: v for k, v in reparsed.items() if k != anchors_key} + if reparsed_body != tmap_data: + raise RuntimeError("Minification round-trip check failed: output does not match input data") + + leading_comment = "" if strip_comments else _leading_comment_block(original_text) + output_text = f"{leading_comment}{dumped}" + + out_path = output_file or _derive_output_path(map_file) + directory = os.path.dirname(os.path.abspath(out_path)) + if directory: + os.makedirs(directory, exist_ok=True) + with open(out_path, "w", encoding="utf-8") as fh: + fh.write(output_text) + + schema_valid, schema_message = validate_map(out_path, schema_file) + + result = MinifyResult( + map_file=map_file, + output_file=out_path, + original_size=len(original_text), + minified_size=len(output_text), + anchors_created=len(anchors_section), + occurrences_collapsed=occurrences_collapsed, + stripped_nodes=stripped_nodes, + stripped_edges=stripped_edges, + schema_valid=schema_valid, + schema_message=schema_message, + ) + log.info( + "Minified %s -> %s: %d -> %d bytes (%.1f%% saved), %d anchor(s) covering %d occurrence(s)", + map_file, out_path, result.original_size, result.minified_size, + result.percent_saved, result.anchors_created, result.occurrences_collapsed, + ) + return result + + +# ===================================================================== +# Grid alignment +# ===================================================================== + +@dataclass +class GridAlignResult: + """Outcome of running :func:`grid_align_map`.""" + + map_file: str + output_file: str + threshold_deg: float + adjustments: List[GridAlignmentAdjustment] = field(default_factory=list) + unresolved_nodes: List[str] = field(default_factory=list) + schema_valid: Optional[bool] = None + schema_message: str = "" + + def format_report(self) -> str: + lines = [f"Grid-align report: {self.map_file} -> {self.output_file}", "=" * 60] + lines.append(f" Angle threshold: {self.threshold_deg:g} deg") + lines.append(f" Nodes adjusted: {len(self.adjustments)}") + for adj in self.adjustments: + lines.append( + f" - {adj.node}: ({adj.old_position[0]:.3f}, {adj.old_position[1]:.3f}) -> " + f"({adj.new_position[0]:.3f}, {adj.new_position[1]:.3f}) " + f"[max deviation {adj.max_deviation_before:.1f} deg -> {adj.max_deviation_after:.1f} deg]" + ) + if self.unresolved_nodes: + lines.append(f" Unresolved nodes: {len(self.unresolved_nodes)} (could not be aligned):") + for n in self.unresolved_nodes: + lines.append(f" - {n}") + else: + lines.append(" Unresolved nodes: none") + if self.schema_valid is not None: + status = "PASS" if self.schema_valid else "FAIL" + lines.append(f" Schema check on output: {status}: {self.schema_message}") + return "\n".join(lines) + + +def _set_node_position(tmap_data: Dict[str, Any], node_name: str, x: float, y: float) -> bool: + """Set the ``pose.position.x``/``y`` of *node_name* in *tmap_data*, in place. + + Returns True if the node was found and updated, False otherwise. + """ + for entry in tmap_data.get("nodes") or []: + node = entry.get("node") or {} + if node.get("name") == node_name: + position = node.setdefault("pose", {}).setdefault("position", {}) + position["x"] = x + position["y"] = y + return True + return False + + +def grid_align_map( + map_file: str, + output_file: Optional[str] = None, + threshold_deg: float = DEFAULT_GRID_ANGLE_THRESHOLD_DEG, + filters: Optional[List[str]] = None, + exclude_filters: Optional[List[str]] = None, + schema_file: Optional[str] = None, + logger: Optional[logging.Logger] = None, +) -> GridAlignResult: + """Reposition filtered nodes to minimise grid-angle deviation, and write + the result to a new map file. + + Nodes are selected the same way as the grid-angle-deviation check (see + :func:`select_nodes_by_filters`): the disjunction of *filters* (or every + node, if *filters* is empty/None), minus any node matched by + *exclude_filters*. Nodes already within *threshold_deg* on every + incident edge are left unchanged. See + :func:`compute_grid_alignment_adjustments` for the adjustment algorithm + and the definition of "unresolved" nodes (listed in the result, and + left at their original position). + """ + log = logger or _LOGGER + + tmap_data = load_tmap2_file(map_file) + graph = build_graph_from_tmap(tmap_data) + if graph is None: + raise ValueError(f"Could not build a graph from '{map_file}' (invalid/empty map)") + + selected_nodes = select_nodes_by_filters(graph, filters, exclude_filters) + adjustments, unresolved = compute_grid_alignment_adjustments( + graph, selected_nodes, threshold_deg=threshold_deg + ) + + aligned = deepcopy(tmap_data) + for adj in adjustments: + _set_node_position(aligned, adj.node, adj.new_position[0], adj.new_position[1]) + + out_path = output_file or _derive_output_path(map_file, suffix="gridalign") + directory = os.path.dirname(os.path.abspath(out_path)) + if directory: + os.makedirs(directory, exist_ok=True) + with open(out_path, "w", encoding="utf-8") as fh: + yaml.dump( + aligned, fh, Dumper=NoAliasDumper, + default_flow_style=False, sort_keys=False, allow_unicode=True, + ) + + schema_valid, schema_message = validate_map(out_path, schema_file) + + result = GridAlignResult( + map_file=map_file, + output_file=out_path, + threshold_deg=threshold_deg, + adjustments=adjustments, + unresolved_nodes=unresolved, + schema_valid=schema_valid, + schema_message=schema_message, + ) + log.info( + "Grid-aligned %s -> %s: %d node(s) adjusted, %d unresolved node(s)", + map_file, out_path, len(adjustments), len(unresolved), + ) + return result + + +# ===================================================================== +# CLI +# ===================================================================== + +def _add_common_args(parser: argparse.ArgumentParser) -> None: + parser.add_argument("map_file", help="Path to the topological map YAML file") + parser.add_argument("--schema", "-s", help="Path to the schema YAML file (optional)") + + +def _add_check_severity_args(parser: argparse.ArgumentParser) -> None: + """Add per-check ``{false,warning,error}`` severity override switches.""" + parser.add_argument( + "--schema-check", + dest="severity_schema", + type=_parse_severity, + default=DEFAULT_CHECK_SEVERITY["schema"], + metavar="{false,warning,error}", + help="Severity of schema validation failures (default: %(default)s)", + ) + parser.add_argument( + "--orphaned-node", + dest="severity_orphaned_node", + type=_parse_severity, + default=DEFAULT_CHECK_SEVERITY["orphaned-node"], + metavar="{false,warning,error}", + help="Severity of orphaned nodes (default: %(default)s)", + ) + parser.add_argument( + "--sub-map-separation", + dest="severity_sub_map_separation", + type=_parse_severity, + default=DEFAULT_CHECK_SEVERITY["sub-map-separation"], + metavar="{false,warning,error}", + help="Severity of disconnected sub-maps (default: %(default)s)", + ) + parser.add_argument( + "--influence-zone-overlap", + dest="severity_influence_zone_overlap", + type=_parse_severity, + default=DEFAULT_CHECK_SEVERITY["influence-zone-overlap"], + metavar="{false,warning,error}", + help="Severity of overlapping influence zones (default: %(default)s)", + ) + parser.add_argument( + "--grid-angle-deviation", + dest="severity_grid_angle_deviation", + type=_parse_severity, + default=DEFAULT_CHECK_SEVERITY["grid-angle-deviation"], + metavar="{false,warning,error}", + help=( + "Severity of grid-angle deviations (edges at a node deviating too far from a 90 " + "degree multiple of that node's other edges, see --grid-angle-*); disabled by " + "default (default: %(default)s)" + ), + ) + + +def _add_grid_angle_args(parser: argparse.ArgumentParser) -> None: + """Add ``--grid-angle-threshold``/``--grid-angle-filter``/``--grid-angle-exclude`` switches.""" + parser.add_argument( + "--grid-angle-threshold", + type=float, + default=DEFAULT_GRID_ANGLE_THRESHOLD_DEG, + metavar="DEG", + help=( + "Max allowed deviation (degrees) of the angle between a node's edges from a 90 " + "degree multiple before an edge is flagged (default: %(default)s)" + ), + ) + parser.add_argument( + "--grid-angle-filter", + dest="grid_angle_filters", + action="append", + metavar="FILTER", + help=( + "Select nodes expected to have mutually right-angled edges: 'name:', " + "'tag:' or 'property:[=]', optionally combined with " + "'and'/'or'/'not' and parentheses, e.g. " + "'property:roboflow.enabled and (property:field=1 or property:field=2)'. " + "Repeatable; the selected set is the union of all matches (default: every node)" + ), + ) + parser.add_argument( + "--grid-angle-exclude", + dest="grid_angle_exclude_filters", + action="append", + metavar="FILTER", + help=( + "Exclude nodes matching this filter (same syntax as --grid-angle-filter) from the " + "selected set. Repeatable." + ), + ) + + +def build_arg_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + description="Analyse topological map (.tmap2.yaml) files.", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Examples: + %(prog)s analyse my_map.tmap2.yaml + %(prog)s analyse my_map.tmap2.yaml --svg my_map.svg + %(prog)s check my_map.tmap2.yaml + %(prog)s check my_map.tmap2.yaml --sub-map-separation=error + %(prog)s check my_map.tmap2.yaml --influence-zone-overlap=false + %(prog)s check my_map.tmap2.yaml --grid-angle-deviation=error --grid-angle-filter "name:Row*" + %(prog)s svg my_map.tmap2.yaml -o my_map.svg + %(prog)s minify my_map.tmap2.yaml + %(prog)s minify my_map.tmap2.yaml --strip-unreachable Charging --flowstyle + %(prog)s merge map_a.tmap2.yaml map_b.tmap2.yaml -o merged.tmap2.yaml + %(prog)s merge map_a.tmap2.yaml map_b.tmap2.yaml --connect-closest + %(prog)s grid-align my_map.tmap2.yaml --grid-angle-filter "name:Row*" + """, + ) + subparsers = parser.add_subparsers(dest="command", required=True) + + analyse_parser = subparsers.add_parser( + "analyse", aliases=["analyze"], help="Run full analysis and print a report" + ) + _add_common_args(analyse_parser) + _add_check_severity_args(analyse_parser) + _add_grid_angle_args(analyse_parser) + analyse_parser.add_argument("--svg", help="Also generate an SVG rendering of the map") + + check_parser = subparsers.add_parser( + "check", + help="Check map validity; exit code reflects the result (for CI use)", + ) + _add_common_args(check_parser) + _add_check_severity_args(check_parser) + _add_grid_angle_args(check_parser) + check_parser.add_argument("--svg", help="Also generate an SVG rendering of the map") + + svg_parser = subparsers.add_parser("svg", help="Generate an SVG rendering of the map") + _add_common_args(svg_parser) + svg_parser.add_argument("--output", "-o", required=True, help="Output SVG file path") + + minify_parser = subparsers.add_parser( + "minify", + help="Write a smaller, semantically-identical copy of the map", + ) + _add_common_args(minify_parser) + minify_parser.add_argument( + "--output", "-o", help="Output file path (default: .min. next to the input)" + ) + minify_parser.add_argument( + "--anchors", + action=argparse.BooleanOptionalAction, + default=True, + help="Collapse repeated data structures into named YAML anchors (default: enabled)", + ) + minify_parser.add_argument( + "--anchors-key", + default=DEFAULT_ANCHORS_KEY, + help="Top-level key name to collect anchors under (default: %(default)s)", + ) + minify_parser.add_argument( + "--strip-comments", + action="store_true", + help="Also drop the file's leading comment block (default: keep it)", + ) + minify_parser.add_argument( + "--flowstyle", + action="store_true", + help="Emit compact flow-style YAML instead of block style (default: block style)", + ) + minify_parser.add_argument( + "--min-size", type=int, default=100, + help="Minimum serialised size (chars) of a subtree to qualify for anchoring (default: 100)", + ) + minify_parser.add_argument( + "--min-occurrences", type=int, default=5, + help="Minimum number of repeats required for a subtree to qualify for anchoring (default: 5)", + ) + minify_parser.add_argument( + "--strip-unreachable", + metavar="NODE", + help="Also drop nodes/edges not reachable via a directed path from NODE", + ) + + merge_parser = subparsers.add_parser( + "merge", + help="Merge two or more maps into one, reprojected into the first map's GPS origin", + ) + merge_parser.add_argument("map_files", nargs="+", help="Paths to two or more topological map YAML files") + merge_parser.add_argument( + "--output", "-o", help="Output file path (default: .merged.)" + ) + merge_parser.add_argument("--schema", "-s", help="Path to the schema YAML file (optional)") + merge_parser.add_argument("--name", help="Override the merged map's name/metric_map/pointset") + merge_parser.add_argument( + "--connect-closest", action="store_true", + help="Link each map to the merged map with a bidirectional edge between their closest nodes", + ) + merge_parser.add_argument( + "--connect-action", default="navigate_to_pose", + help="Action name used for connecting edges (default: %(default)s)", + ) + merge_parser.add_argument( + "--connect-action-type", default="nav2_msgs/action/NavigateToPose", + help="Action type used for connecting edges (default: %(default)s)", + ) + + grid_align_parser = subparsers.add_parser( + "grid-align", + help="Move selected nodes to minimise grid-angle deviation, and save the result", + ) + _add_common_args(grid_align_parser) + _add_grid_angle_args(grid_align_parser) + grid_align_parser.add_argument( + "--output", "-o", + help="Output file path (default: .gridalign. next to the input)", + ) + + return parser + + +def main(argv: Optional[List[str]] = None) -> None: + logging.basicConfig(level=logging.INFO, format="%(message)s") + + parser = build_arg_parser() + args = parser.parse_args(argv) + + if args.command == "merge": + if len(args.map_files) < 2: + print("Error: At least two map files are required to merge") + sys.exit(2) + for map_file in args.map_files: + if not os.path.isfile(map_file): + print(f"Error: Map file not found: {map_file}") + sys.exit(2) + try: + result = merge_maps( + args.map_files, output_file=args.output, schema_file=args.schema, name=args.name, + connect_closest=args.connect_closest, connect_action=args.connect_action, + connect_action_type=args.connect_action_type, + ) + except Exception as exc: # noqa: BLE001 - report any load/merge error to the user + print(f"Error merging maps: {exc}") + sys.exit(2) + print(result.format_report()) + return + + if not os.path.isfile(args.map_file): + print(f"Error: Map file not found: {args.map_file}") + sys.exit(2) + + if args.command == "minify": + try: + result = minify_map( + args.map_file, + output_file=args.output, + anchors=args.anchors, + anchors_key=args.anchors_key, + strip_comments=args.strip_comments, + flowstyle=args.flowstyle, + min_size=args.min_size, + min_occurrences=args.min_occurrences, + strip_unreachable_from=args.strip_unreachable, + schema_file=args.schema, + ) + except Exception as exc: # noqa: BLE001 - report any load/parsing error to the user + print(f"Error minifying map: {exc}") + sys.exit(2) + print(result.format_report()) + return + + if args.command == "grid-align": + try: + result = grid_align_map( + args.map_file, + output_file=args.output, + threshold_deg=args.grid_angle_threshold, + filters=args.grid_angle_filters, + exclude_filters=args.grid_angle_exclude_filters, + schema_file=args.schema, + ) + except Exception as exc: # noqa: BLE001 - report any load/parsing error to the user + print(f"Error grid-aligning map: {exc}") + sys.exit(2) + print(result.format_report()) + if result.unresolved_nodes: + sys.exit(1) + return + + svg_path = getattr(args, "svg", None) or getattr(args, "output", None) + + check_severities = None + if hasattr(args, "severity_schema"): + check_severities = { + "schema": args.severity_schema, + "orphaned-node": args.severity_orphaned_node, + "sub-map-separation": args.severity_sub_map_separation, + "influence-zone-overlap": args.severity_influence_zone_overlap, + "grid-angle-deviation": args.severity_grid_angle_deviation, + } + + try: + result = analyse_map( + args.map_file, args.schema, svg_path=svg_path, check_severities=check_severities, + grid_angle_threshold_deg=getattr(args, "grid_angle_threshold", DEFAULT_GRID_ANGLE_THRESHOLD_DEG), + grid_angle_filters=getattr(args, "grid_angle_filters", None), + grid_angle_exclude_filters=getattr(args, "grid_angle_exclude_filters", None), + ) + except Exception as exc: # noqa: BLE001 - report any load/parsing error to the user + print(f"Error analysing map: {exc}") + sys.exit(2) + + if args.command in ("analyse", "analyze", "check"): + print(result.format_report()) + + if args.command == "check": + if result.is_valid: + print("\n✓ Map is VALID") + sys.exit(0) + else: + print("\n✗ Map is INVALID") + sys.exit(1) + + if args.command == "svg": + print(f"SVG written to {result.svg_path}") + + +if __name__ == "__main__": + main() diff --git a/topological_navigation/topological_navigation/map_marker.py b/topological_navigation/topological_navigation/map_marker.py deleted file mode 100644 index ab2d0b3c..00000000 --- a/topological_navigation/topological_navigation/map_marker.py +++ /dev/null @@ -1,210 +0,0 @@ -#!/usr/bin/env python - -import rospy - -from visualization_msgs.msg import * - -from topological_navigation_msgs.msg import TopologicalMap -from geometry_msgs.msg import Point - -import topological_navigation.tmap_utils as tmap_utils - - -class TopologicalVis(object): - _pallete=[[1,1,1],[0,0,0],[1,0,0],[0,1,0],[0,0,1],[1,1,0],[1,0,1],[0,1,1]] - def __init__(self) : - self.actions=[] - self.map_markers = MarkerArray() - self.topmap_pub = rospy.Publisher('topological_map_visualisation', MarkerArray, queue_size = 1, latch=True) - self._killall=False - self.lnodes = None - #Waiting for Topological Map - self.map_received=False - rospy.Subscriber('topological_map', TopologicalMap, self.MapCallback) - rospy.loginfo("Waiting for Topological map ...") - while not self.map_received and not self._killall : - rospy.sleep(rospy.Duration.from_sec(0.05)) - rospy.loginfo(" ...done") - - - self.publish_markers() - #rospy.loginfo("All Done ...") - - - def _update_everything(self) : - print("updating marker arrays ...") - del self.map_markers - self.map_markers = MarkerArray() - self.map_markers.markers=[] - - - idn = 0 - for i in self.lnodes.nodes : - marker = self.get_node_marker(i,idn) - self.map_markers.markers.append(marker) - idn += 1 - - marker = self.get_name_marker(i,idn) - self.map_markers.markers.append(marker) - idn += 1 - - for j in i.edges : - marker = self.get_edge_marker(i, j, idn) - if marker: - self.map_markers.markers.append(marker) - idn += 1 - - legend =0 - for k in self.actions: - marker = self.get_legend_marker(k, legend, idn) - self.map_markers.markers.append(marker) - idn += 1 - legend+=1 - - marker = self.get_zone_marker(i, idn) - self.map_markers.markers.append(marker) - idn += 1 - - self.publish_markers() - - def get_legend_marker(self, action, row, idn): - col=self.get_colour(self.actions.index(action)) - marker = Marker() - marker.id = idn - marker.header.frame_id = "map" - marker.type = marker.TEXT_VIEW_FACING - marker.text=action - marker.pose.position.x= 1.0+(0.12*row) - marker.pose.position.y= 0.0 - marker.pose.position.z= 0.2 - marker.pose.orientation.w= 1.0 - marker.scale.z = 0.1 - marker.color.a = 0.5 - marker.color.r = col[0] - marker.color.g = col[1] - marker.color.b = col[2] - marker.ns='/legend' - return marker - - - def get_name_marker(self, node, idn): - marker = Marker() - marker.id = idn - marker.header.frame_id = "map" - marker.type = marker.TEXT_VIEW_FACING - marker.text= node.name - marker.pose = node.pose - marker.scale.z = 0.12 - marker.color.a = 0.9 - marker.color.r = 0.3 - marker.color.g = 0.3 - marker.color.b = 0.3 - marker.ns='/names' - return marker - - - - def get_edge_marker(self, node, edge, idn): - marker = Marker() - marker.id = idn - marker.header.frame_id = "map" - marker.type = marker.LINE_LIST - V1=Point() - V2=Point() - V1= node.pose.position - to_node=tmap_utils.get_node(self.lnodes, edge.node) - col=self.get_colour(self.actions.index(edge.action)) - #print col - if to_node: - V2= to_node.pose.position - marker.pose.orientation.w= 1.0 - marker.scale.x = 0.1 - marker.color.a = 0.5 - marker.color.r = col[0] - marker.color.g = col[1] - marker.color.b = col[2] - marker.points.append(V1) - marker.points.append(V2) - marker.ns='/edges' - return marker - else: - rospy.logwarn("No node %s found" %edge.node) - return None - - - def get_node_marker(self, node, idn): - marker = Marker() - marker.id = idn - marker.header.frame_id = "map" - marker.type = Marker.SPHERE - marker.scale.x = 0.2 - marker.scale.y = 0.2 - marker.scale.z = 0.2 - marker.color.a = 0.4 - marker.color.r = 0.2 - marker.color.g = 0.2 - marker.color.b = 0.7 - marker.pose = node.pose - marker.pose.position.z = marker.pose.position.z+0.1 - marker.ns='/nodes' - return marker - - - def get_zone_marker(self, node, idn): - marker = Marker() - marker.id = idn - marker.header.frame_id = "map" - marker.type = marker.LINE_STRIP - marker.pose.orientation.w= 1.0 - marker.scale.x = 0.1 - marker.color.a = 0.8 - marker.color.r = 0.7 - marker.color.g = 0.1 - marker.color.b = 0.2 - - for j in node.verts : - Vert = Point() - Vert.z = 0.05 - Vert.x = node.pose.position.x + j.x - Vert.y = node.pose.position.y + j.y - marker.points.append(Vert) - - Vert = Point() - Vert.z = 0.05 - Vert.x = node.pose.position.x + node.verts[0].x - Vert.y = node.pose.position.y + node.verts[0].y - marker.points.append(Vert) - marker.ns='/zones' - return marker - - def publish_markers(self): - self.topmap_pub.publish(MarkerArray()) - self.topmap_pub.publish(self.map_markers) - - - """ - MapCallback - - This function receives the Topological Map - """ - def MapCallback(self, msg) : - if self.lnodes: - del self.lnodes - self.lnodes = msg - - for i in self.lnodes.nodes: - for j in i.edges: - if not j.action in self.actions: - self.actions.append(j.action) - - print(self.actions) - - self.map_received = True - self._update_everything() - - def get_colour(self, number): - return self._pallete[number] - - - def on_node_shutdown(self): - self._killall=True diff --git a/topological_navigation/topological_navigation/map_merger.py b/topological_navigation/topological_navigation/map_merger.py new file mode 100644 index 00000000..20294597 --- /dev/null +++ b/topological_navigation/topological_navigation/map_merger.py @@ -0,0 +1,578 @@ +#!/usr/bin/env python3 +"""Merge multiple ``.tmap2.yaml`` topological maps into a single map. + +Node positions are reprojected into the first ("reference") map's GPS +``meta.origin`` frame, assuming every map's local x/y Cartesian frame is +already East/North aligned (ENU, no heading correction). Node and edge +names are kept globally unique, suffixing later duplicates with a running +number and warning about the collision. Top-level metadata (``meta``, +``name``, ``metric_map``, ``pointset``, ``transformation``, ``definitions``, +``actions``) is merged with a "first map to define a value wins" rule, +with special handling for ``meta.origin`` (always the reference map's +value) and ``meta.fields`` (concatenated, renumbered so nothing is lost). +Optionally (``--connect-closest``), each map is linked to the merged map +with a new bidirectional edge between their closest pair of nodes, so the +result is a single connected graph instead of one sub-map per input. + +Usage:: + + python3 map_merger.py map_a.tmap2.yaml map_b.tmap2.yaml -o merged.tmap2.yaml +""" + +import argparse +import datetime +import logging +import math +import os +import sys +from copy import deepcopy +from dataclasses import dataclass, field +from typing import Any, Dict, List, Optional, Tuple + +try: + import yaml +except ImportError: + print("Error: PyYAML is required. Install with: pip install pyyaml") + sys.exit(2) + +try: + from pyproj import Transformer +except ImportError: + print("Error: pyproj is required. Install with: pip install pyproj") + sys.exit(2) + +from topological_navigation.tmap_utils import NoAliasDumper, load_tmap2_file +from topological_navigation.validate_map import validate_map + +_LOGGER = logging.getLogger(__name__) + +_TIMESTAMP_FORMAT = "%d-%m-%Y_%H-%M-%S" + + +def _get_time() -> str: + """Current time in the format used elsewhere for ``meta.last_updated``.""" + return datetime.datetime.now().strftime(_TIMESTAMP_FORMAT) + + +def _is_origin_set(origin: Optional[Dict[str, Any]]) -> bool: + """False if *origin* is missing, or its lat/long are both exactly 0.""" + if not origin: + return False + return bool(origin.get("latitude", 0.0)) or bool(origin.get("longitude", 0.0)) + + +def _local_offset_metres(ref_lat: float, ref_lon: float, lat: float, lon: float) -> Tuple[float, float]: + """(east, north) metre offset of *(lat, lon)* from *(ref_lat, ref_lon)*. + + Uses an azimuthal-equidistant projection centred on the reference point, + which gives ENU-aligned metre offsets directly without any manual + trigonometry or UTM-zone handling. Only valid for the ENU/no-rotation + assumption documented above. + """ + aeqd_crs = f"+proj=aeqd +lat_0={ref_lat} +lon_0={ref_lon} +datum=WGS84 +units=m +no_defs" + transformer = Transformer.from_crs("EPSG:4326", aeqd_crs, always_xy=True) + east, north = transformer.transform(lon, lat) + return east, north + + +def _next_unique_name(base: str, used: set) -> str: + """*base* if unused, else ``base_2``, ``base_3``, ... until unused.""" + if base not in used: + return base + n = 2 + while f"{base}_{n}" in used: + n += 1 + return f"{base}_{n}" + + +@dataclass +class MergeResult: + """Outcome of running :func:`merge_maps`.""" + + input_files: List[str] + output_file: str + num_maps: int + total_nodes: int = 0 + total_edges: int = 0 + node_renames: List[Tuple[str, str, str]] = field(default_factory=list) + edge_renames: List[Tuple[str, str, str]] = field(default_factory=list) + warnings: List[str] = field(default_factory=list) + reference_origin: Dict[str, Any] = field(default_factory=dict) + per_map_offsets: List[Tuple[str, float, float, float, bool]] = field(default_factory=list) + fields_merged: int = 0 + connecting_edges: List[Tuple[str, str, str, str, float]] = field(default_factory=list) + schema_valid: Optional[bool] = None + schema_message: str = "" + + def format_report(self) -> str: + """Return a human-readable merge report.""" + lines = [f"Merge report: {', '.join(self.input_files)} -> {self.output_file}", "=" * 60] + lines.append(f" Maps merged: {self.num_maps}") + lines.append(f" Total nodes: {self.total_nodes}") + lines.append(f" Total edges: {self.total_edges}") + lines.append(f" Fields merged: {self.fields_merged}") + + lines.append("") + lines.append("[Reference origin]") + if self.reference_origin: + lines.append(f" {self.reference_origin}") + else: + lines.append(" none") + + lines.append("") + lines.append("[Per-map reprojection offsets]") + for map_file, east, north, alt, reprojected in self.per_map_offsets: + status = "reprojected" if reprojected else "unchanged (no GPS origin)" + lines.append(f" - {map_file}: east={east:.3f} north={north:.3f} alt={alt:.3f} ({status})") + + lines.append("") + lines.append("[Node renames]") + if self.node_renames: + for source_file, old, new in self.node_renames: + lines.append(f" - {source_file}: '{old}' -> '{new}'") + else: + lines.append(" none") + + lines.append("") + lines.append("[Edge renames]") + if self.edge_renames: + for source_file, old, new in self.edge_renames: + lines.append(f" - {source_file}: '{old}' -> '{new}'") + else: + lines.append(" none") + + lines.append("") + lines.append("[Connecting edges]") + if self.connecting_edges: + for node_a, node_b, edge_id_ab, edge_id_ba, dist in self.connecting_edges: + lines.append( + f" - '{node_a}' <-> '{node_b}' (dist={dist:.3f}m): '{edge_id_ab}' / '{edge_id_ba}'" + ) + else: + lines.append(" none") + + lines.append("") + lines.append("[Warnings]") + if self.warnings: + for msg in self.warnings: + lines.append(f" - {msg}") + else: + lines.append(" none") + + if self.schema_valid is not None: + lines.append("") + lines.append("[Schema validation of merged output]") + status = "PASS" if self.schema_valid else "FAIL" + lines.append(f" {status}: {self.schema_message}") + + return "\n".join(lines) + + +def _derive_output_path(map_files: List[str]) -> str: + """Derive a sibling ``.merged.`` output path from the first input.""" + directory, base = os.path.split(map_files[0]) + stem, sep, rest = base.partition(".") + derived = f"{stem}.merged{sep}{rest}" if sep else f"{stem}.merged" + return os.path.join(directory, derived) if directory else derived + + +def _merge_fields(metas: List[Dict[str, Any]], warn) -> Tuple[List[Dict[str, Any]], bool]: + """Concatenate every map's ``meta.fields``, renumbering ``field_number`` to stay unique.""" + merged_fields: List[Dict[str, Any]] = [] + seen_numbers = set() + renumbered = False + for meta in metas: + for entry in meta.get("fields", []) or []: + entry = deepcopy(entry) + number = entry.get("field_number") + if number is None or number in seen_numbers: + new_number = 1 + while new_number in seen_numbers: + new_number += 1 + if number is not None: + renumbered = True + entry["field_number"] = new_number + number = new_number + seen_numbers.add(number) + merged_fields.append(entry) + if renumbered: + warn("meta.fields contained duplicate field_number values; renumbered to stay unique") + return merged_fields, renumbered + + +def _merge_meta(metas: List[Dict[str, Any]], warn) -> Dict[str, Any]: + """Merge ``meta`` blocks: first-definer-wins per key, with special-cased subkeys.""" + merged: Dict[str, Any] = {} + for meta in metas: + for key, value in meta.items(): + if key in ("origin", "fields", "last_updated"): + continue + if key not in merged: + merged[key] = deepcopy(value) + elif merged[key] != value: + warn(f"meta.{key} differs between maps; keeping the first-defined value") + + merged["origin"] = deepcopy(metas[0].get("origin", {})) + fields, _ = _merge_fields(metas, warn) + if fields: + merged["fields"] = fields + merged["last_updated"] = _get_time() + return merged + + +def _merge_top_level_scalars(docs: List[Dict[str, Any]], warn) -> Dict[str, Any]: + """Merge every top-level key except ``nodes``/``meta``: first-definer-wins, warn on conflict.""" + merged: Dict[str, Any] = {} + for doc in docs: + for key, value in doc.items(): + if key in ("nodes", "meta"): + continue + if key not in merged: + merged[key] = deepcopy(value) + elif merged[key] != value: + warn(f"Top-level '{key}' differs between maps; keeping the first-defined value") + return merged + + +def _rename_nodes_and_edges( + doc: Dict[str, Any], + source_file: str, + used_node_names: set, + used_edge_ids: set, + merged_name: str, + merged_pointset: str, + node_renames: List[Tuple[str, str, str]], + edge_renames: List[Tuple[str, str, str]], + warn, +) -> List[Dict[str, Any]]: + """Dedup node names/edge_ids within *doc*, rewriting same-map edge targets. + + Returns the (deep-copied, renamed, re-parented) list of node entries. + """ + entries = deepcopy(doc.get("nodes", [])) + + # Pass 1: assign unique node names. + local_rename: Dict[str, str] = {} + for entry in entries: + node = entry["node"] + original_name = node["name"] + new_name = _next_unique_name(original_name, used_node_names) + if new_name != original_name: + warn(f"Node name '{original_name}' from {source_file} collides; renamed to '{new_name}'") + node_renames.append((source_file, original_name, new_name)) + used_node_names.add(new_name) + local_rename[original_name] = new_name + + node["name"] = new_name + entry.setdefault("meta", {})["node"] = new_name + entry["meta"]["map"] = merged_name + entry["meta"]["pointset"] = merged_pointset + + # Pass 2: rewrite edge targets (same source map only) and dedup edge_ids. + for entry in entries: + for edge in entry["node"].get("edges", []): + target = edge.get("node") + if target in local_rename: + edge["node"] = local_rename[target] + + original_edge_id = edge.get("edge_id") + if original_edge_id is None: + continue + new_edge_id = _next_unique_name(original_edge_id, used_edge_ids) + if new_edge_id != original_edge_id: + warn( + f"Edge id '{original_edge_id}' from {source_file} collides; " + f"renamed to '{new_edge_id}'" + ) + edge_renames.append((source_file, original_edge_id, new_edge_id)) + used_edge_ids.add(new_edge_id) + edge["edge_id"] = new_edge_id + + return entries + + +def _apply_offset(entries: List[Dict[str, Any]], east: float, north: float, alt: float) -> None: + """Shift every node's ``pose.position`` by *(east, north, alt)`` metres.""" + if east == 0.0 and north == 0.0 and alt == 0.0: + return + for entry in entries: + position = entry["node"].get("pose", {}).get("position") + if not position: + continue + position["x"] = position.get("x", 0.0) + east + position["y"] = position.get("y", 0.0) + north + position["z"] = position.get("z", 0.0) + alt + + +def _node_position(entry: Dict[str, Any]) -> Optional[Tuple[float, float, float]]: + """Return *entry*'s ``(x, y, z)`` position, or None if it has no pose.""" + position = entry.get("node", {}).get("pose", {}).get("position") + if not position: + return None + return ( + float(position.get("x", 0.0)), + float(position.get("y", 0.0)), + float(position.get("z", 0.0)), + ) + + +def _closest_node_pair( + entries_a: List[Dict[str, Any]], entries_b: List[Dict[str, Any]] +) -> Optional[Tuple[str, str, float]]: + """Return ``(name_a, name_b, distance)`` for the closest pair of nodes across the two lists.""" + best: Optional[Tuple[str, str, float]] = None + for entry_a in entries_a: + pos_a = _node_position(entry_a) + if pos_a is None: + continue + for entry_b in entries_b: + pos_b = _node_position(entry_b) + if pos_b is None: + continue + dist = math.sqrt(sum((ca - cb) ** 2 for ca, cb in zip(pos_a, pos_b))) + if best is None or dist < best[2]: + best = (entry_a["node"]["name"], entry_b["node"]["name"], dist) + return best + + +def _append_edge( + entries: List[Dict[str, Any]], from_name: str, to_name: str, edge_id: str, action: str, action_type: str +) -> None: + """Append a new edge from the node named *from_name* to *to_name* within *entries*.""" + for entry in entries: + if entry["node"]["name"] == from_name: + entry["node"].setdefault("edges", []).append( + {"edge_id": edge_id, "node": to_name, "action": action, "action_type": action_type} + ) + return + raise KeyError(f"Node '{from_name}' not found when adding a connecting edge") + + +def merge_maps( + map_files: List[str], + output_file: Optional[str] = None, + schema_file: Optional[str] = None, + name: Optional[str] = None, + connect_closest: bool = False, + connect_action: str = "navigate_to_pose", + connect_action_type: str = "nav2_msgs/action/NavigateToPose", + logger: Optional[logging.Logger] = None, +) -> MergeResult: + """Merge *map_files* into a single schema-valid map and return a :class:`MergeResult`. + + Positions of every map after the first are reprojected into the first + map's ``meta.origin`` GPS frame (ENU, no rotation). Node names and edge + ids are kept globally unique by suffixing collisions with a running + number. Top-level metadata is merged with a first-map-wins policy (see + :func:`_merge_meta` / :func:`_merge_top_level_scalars` for the exceptions). + + If *connect_closest* is set, each map (after the first) is linked to the + growing set of already-merged maps with a new bidirectional edge between + their closest pair of nodes, so the final graph is a single connected + component rather than one disconnected sub-map per input file. + """ + log = logger or _LOGGER + + if len(map_files) < 2: + raise ValueError("At least two map files are required to merge") + + invalid = [] + for map_file in map_files: + is_valid, message = validate_map(map_file, schema_file) + if not is_valid: + invalid.append(f"{map_file}: {message}") + if invalid: + raise ValueError("Cannot merge invalid input map(s):\n" + "\n".join(invalid)) + + docs = [load_tmap2_file(map_file) for map_file in map_files] + + warnings: List[str] = [] + + def warn(message: str) -> None: + warnings.append(message) + log.warning(message) + + merged_doc = _merge_top_level_scalars(docs, warn) + merged_doc["meta"] = _merge_meta([doc.get("meta", {}) for doc in docs], warn) + + if name: + merged_doc["name"] = name + merged_doc["metric_map"] = name + merged_doc["pointset"] = name + + merged_name = merged_doc.get("name", "") + merged_pointset = merged_doc.get("pointset", "") + + reference_origin = docs[0].get("meta", {}).get("origin", {}) + reference_set = _is_origin_set(reference_origin) + ref_lat = float(reference_origin.get("latitude", 0.0)) if reference_origin else 0.0 + ref_lon = float(reference_origin.get("longitude", 0.0)) if reference_origin else 0.0 + ref_alt = float(reference_origin.get("altitude", 0.0)) if reference_origin else 0.0 + + if not reference_set: + warn( + f"Reference map {map_files[0]} has no real GPS origin (meta.origin); " + "no reprojection will be applied to any input, positions are merged unchanged" + ) + + used_node_names: set = set() + used_edge_ids: set = set() + per_map_offsets: List[Tuple[str, float, float, float, bool]] = [] + all_entries: List[Dict[str, Any]] = [] + node_renames: List[Tuple[str, str, str]] = [] + edge_renames: List[Tuple[str, str, str]] = [] + + for map_file, doc in zip(map_files, docs): + origin = doc.get("meta", {}).get("origin", {}) + east = north = alt = 0.0 + reprojected = False + if reference_set and origin is not reference_origin: + if _is_origin_set(origin): + lat = float(origin.get("latitude", 0.0)) + lon = float(origin.get("longitude", 0.0)) + alt_val = float(origin.get("altitude", 0.0)) + east, north = _local_offset_metres(ref_lat, ref_lon, lat, lon) + alt = alt_val - ref_alt + reprojected = True + else: + warn( + f"Map {map_file} has no real GPS origin (meta.origin); assuming it shares " + "the reference map's local frame, no position offset applied" + ) + per_map_offsets.append((map_file, east, north, alt, reprojected)) + + entries = _rename_nodes_and_edges( + doc, map_file, used_node_names, used_edge_ids, + merged_name, merged_pointset, + node_renames, edge_renames, + warn, + ) + _apply_offset(entries, east, north, alt) + all_entries.append(entries) + + connecting_edges: List[Tuple[str, str, str, str, float]] = [] + if connect_closest: + connected_pool: List[Dict[str, Any]] = list(all_entries[0]) + for map_file, entries in zip(map_files[1:], all_entries[1:]): + pair = _closest_node_pair(connected_pool, entries) + if pair is None: + warn(f"Map {map_file} has no nodes with a valid pose; could not connect it to the merged map") + else: + node_a, node_b, dist = pair + edge_id_ab = _next_unique_name(f"connect_{node_a}_{node_b}", used_edge_ids) + used_edge_ids.add(edge_id_ab) + edge_id_ba = _next_unique_name(f"connect_{node_b}_{node_a}", used_edge_ids) + used_edge_ids.add(edge_id_ba) + _append_edge(connected_pool, node_a, node_b, edge_id_ab, connect_action, connect_action_type) + _append_edge(entries, node_b, node_a, edge_id_ba, connect_action, connect_action_type) + connecting_edges.append((node_a, node_b, edge_id_ab, edge_id_ba, dist)) + connected_pool = connected_pool + entries + + merged_doc["nodes"] = [entry for entries in all_entries for entry in entries] + + total_nodes = len(merged_doc["nodes"]) + total_edges = sum(len(entry["node"].get("edges", [])) for entry in merged_doc["nodes"]) + fields_merged = len(merged_doc["meta"].get("fields", [])) + + out_path = output_file or _derive_output_path(map_files) + directory = os.path.dirname(os.path.abspath(out_path)) + if directory: + os.makedirs(directory, exist_ok=True) + + header = ( + f"# Merged from: {', '.join(map_files)}\n" + f"# Generated: {_get_time()}\n" + ) + dumped = yaml.dump( + merged_doc, Dumper=NoAliasDumper, default_flow_style=False, sort_keys=False, + allow_unicode=True, + ) + with open(out_path, "w", encoding="utf-8") as fh: + fh.write(header + dumped) + + schema_valid, schema_message = validate_map(out_path, schema_file) + + result = MergeResult( + input_files=list(map_files), + output_file=out_path, + num_maps=len(map_files), + total_nodes=total_nodes, + total_edges=total_edges, + node_renames=node_renames, + edge_renames=edge_renames, + warnings=warnings, + reference_origin=reference_origin if reference_set else {}, + per_map_offsets=per_map_offsets, + fields_merged=fields_merged, + connecting_edges=connecting_edges, + schema_valid=schema_valid, + schema_message=schema_message, + ) + log.info( + "Merged %d map(s) -> %s: %d node(s), %d edge(s)", + len(map_files), out_path, total_nodes, total_edges, + ) + return result + + +def build_arg_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + description="Merge multiple topological map (.tmap2.yaml) files into one.", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Examples: + %(prog)s map_a.tmap2.yaml map_b.tmap2.yaml -o merged.tmap2.yaml + %(prog)s map_a.tmap2.yaml map_b.tmap2.yaml map_c.tmap2.yaml --name my_merged_map + %(prog)s map_a.tmap2.yaml map_b.tmap2.yaml --connect-closest + """, + ) + parser.add_argument("map_files", nargs="+", help="Paths to two or more topological map YAML files") + parser.add_argument("--output", "-o", help="Output file path (default: .merged.)") + parser.add_argument("--schema", "-s", help="Path to the schema YAML file (optional)") + parser.add_argument("--name", help="Override the merged map's name/metric_map/pointset") + parser.add_argument( + "--connect-closest", action="store_true", + help="Link each map to the merged map with a bidirectional edge between their closest nodes", + ) + parser.add_argument( + "--connect-action", default="navigate_to_pose", + help="Action name used for connecting edges (default: %(default)s)", + ) + parser.add_argument( + "--connect-action-type", default="nav2_msgs/action/NavigateToPose", + help="Action type used for connecting edges (default: %(default)s)", + ) + return parser + + +def main(argv: Optional[List[str]] = None) -> None: + logging.basicConfig(level=logging.INFO, format="%(message)s") + + parser = build_arg_parser() + args = parser.parse_args(argv) + + if len(args.map_files) < 2: + print("Error: At least two map files are required to merge") + sys.exit(2) + + for map_file in args.map_files: + if not os.path.isfile(map_file): + print(f"Error: Map file not found: {map_file}") + sys.exit(2) + + try: + result = merge_maps( + args.map_files, output_file=args.output, schema_file=args.schema, name=args.name, + connect_closest=args.connect_closest, connect_action=args.connect_action, + connect_action_type=args.connect_action_type, + ) + except Exception as exc: # noqa: BLE001 - report any load/merge error to the user + print(f"Error merging maps: {exc}") + sys.exit(2) + + print(result.format_report()) + sys.exit(0 if result.schema_valid else 1) + + +if __name__ == "__main__": + main() diff --git a/topological_navigation/topological_navigation/map_recorder_utils.py b/topological_navigation/topological_navigation/map_recorder_utils.py new file mode 100644 index 00000000..f20d70a6 --- /dev/null +++ b/topological_navigation/topological_navigation/map_recorder_utils.py @@ -0,0 +1,345 @@ +#!/usr/bin/env python3 +"""Pure-Python core logic for recording topological maps. + +This module implements the map-building logic used by the ``map_recorder`` +ROS 2 node (see ``scripts/map_recorder.py``). It has no dependency on +``rclpy`` so that it can be unit tested without a running ROS 2 environment. + +The recorder builds a tmap2-format dictionary incrementally: + +- A new node is created whenever the robot has moved ``node_distance`` + metres away from the previously recorded node. +- Loop closure is supported: if the candidate pose falls inside the + influence zone (``verts`` polygon) of an already recorded node, that + existing node is reused/linked instead of creating a duplicate node. +- Nodes are connected successively: each new/linked node is connected to + the previously recorded node with two edges (one in each direction). +- Recorded nodes are tagged with a ``map.source: recording`` property so + that downstream tools can tell which nodes were produced by the + recorder. +""" + +import datetime +import math +from copy import deepcopy + +import yaml + +from topological_navigation.networkx_utils import build_graph_from_tmap, point_in_poly_nx + +MAP_SOURCE_PROPERTY_VALUE = "recording" + + +def _now(): + """Return a timestamp string in the same format used elsewhere in the repo.""" + return datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S') + + +class _PositionOnly: + """Minimal stand-in for a ``geometry_msgs/Pose`` with only ``position.x/y``.""" + + class _Position: + __slots__ = ("x", "y") + + def __init__(self, x, y): + self.position = self._Position() + self.position.x = x + self.position.y = y + + +def init_topomap(pointset, site_name, template_action): + """Create an empty tmap2 dict from *template_action* definitions/actions.""" + return { + "meta": {"last_updated": _now()}, + "metric_map": site_name, + "name": pointset, + "pointset": pointset, + "transformation": { + "topo_frame_id": site_name or "map", + "parent": "map", + "rotation": {"w": 1.0, "x": 0.0, "y": 0.0, "z": 0.0}, + "translation": {"x": 0.0, "y": 0.0, "z": 0.0}, + }, + "definitions": deepcopy(template_action.get("definitions", {})), + "actions": deepcopy(template_action.get("actions", {})), + "nodes": [], + } + + +def topomap_from_source(source_tmap, pointset, site_name, template_action): + """Create an empty map, inheriting meta data from *source_tmap* when given.""" + tmap = init_topomap(pointset, site_name, template_action) + if source_tmap: + tmap["metric_map"] = source_tmap.get("metric_map", tmap["metric_map"]) + tmap["name"] = pointset or source_tmap.get("name", tmap["name"]) + tmap["pointset"] = pointset or source_tmap.get("pointset", tmap["pointset"]) + tmap["transformation"] = deepcopy( + source_tmap.get("transformation", tmap["transformation"])) + if source_tmap.get("definitions"): + tmap["definitions"] = deepcopy(source_tmap["definitions"]) + if source_tmap.get("actions"): + tmap["actions"] = deepcopy(source_tmap["actions"]) + return tmap + + +def distance_xy(pose_a, pose_b): + """Euclidean distance between two ``{"x":, "y":}``-like dicts.""" + return math.hypot(pose_a["x"] - pose_b["x"], pose_a["y"] - pose_b["y"]) + + +def make_node_dict(template_node, name, pose, pointset, site_name, extra_properties=None): + """Build a tmap2 node dict for *name* at *pose* from *template_node*. + + ``pose`` is a dict with keys ``x``, ``y`` and optionally ``z``, ``qx``, + ``qy``, ``qz``, ``qw`` (defaults: ``z=0``, identity orientation). + """ + node_dict = deepcopy(template_node) + node_dict["meta"]["map"] = site_name + node_dict["meta"]["node"] = name + node_dict["meta"]["pointset"] = pointset + + nd = node_dict["node"] + nd["name"] = name + nd["edges"] = [] + nd["pose"]["position"] = { + "x": float(pose["x"]), + "y": float(pose["y"]), + "z": float(pose.get("z", 0.0)), + } + nd["pose"]["orientation"] = { + "x": float(pose.get("qx", 0.0)), + "y": float(pose.get("qy", 0.0)), + "z": float(pose.get("qz", 0.0)), + "w": float(pose.get("qw", 1.0)), + } + + properties = deepcopy(nd.get("properties", {})) + if extra_properties: + properties.update(deepcopy(extra_properties)) + nd["properties"] = properties + + return node_dict + + +def make_bidirectional_edges(template_edge, node_a, node_b): + """Return the ``(a->b, b->a)`` edge dicts connecting *node_a* and *node_b*.""" + fwd = deepcopy(template_edge) + fwd["edge_id"] = f"{node_a}_{node_b}" + fwd["node"] = node_b + + rev = deepcopy(template_edge) + rev["edge_id"] = f"{node_b}_{node_a}" + rev["node"] = node_a + return fwd, rev + + +def find_loop_closure_node(tmap, pose, logger=None): + """Return the name of an existing node whose influence zone contains *pose*. + + Returns ``None`` if no recorded node's polygon contains the pose (or the + map has no nodes yet). + """ + graph = build_graph_from_tmap(tmap, logger=logger) + if graph is None or graph.number_of_nodes() == 0: + return None + + ros_pose = _PositionOnly(pose["x"], pose["y"]) + for node_name in graph.nodes: + if point_in_poly_nx(graph, node_name, ros_pose): + return node_name + return None + + +class MapRecorderCore: + """Incrementally builds a tmap2 map while the robot is being driven around. + + This class contains no ROS dependencies; the ``map_recorder`` node wires + it to ROS topics/services/actions. + """ + + def __init__(self, template_node, template_edge, template_action, + pointset="recorded_map", site_name="map"): + self.template_node = template_node + self.template_edge = template_edge + self.template_action = template_action + self.pointset = pointset + self.site_name = site_name + self.reset() + + # ------------------------------------------------------------------ + # Map (re)initialisation + # ------------------------------------------------------------------ + + def reset(self, source_tmap=None): + """Clear the recorded map, optionally seeding it from *source_tmap*.""" + self.tmap = topomap_from_source( + source_tmap, self.pointset, self.site_name, self.template_action) + self._order = [] # node names in the order they were added + self._node_index = {} # node name -> index into tmap['nodes'] + self._history = [] # recording steps, for delete_last_node() to undo + + if source_tmap: + for node_data in source_tmap.get("nodes", []): + name = node_data["node"]["name"] + self.tmap["nodes"].append(deepcopy(node_data)) + self._node_index[name] = len(self.tmap["nodes"]) - 1 + self._order.append(name) + + self._next_id = len(self._order) + + def load(self, tmap_dict): + """Load *tmap_dict* as the (extendable) base of the recorded map.""" + self.reset(source_tmap=tmap_dict) + + # ------------------------------------------------------------------ + # Node helpers + # ------------------------------------------------------------------ + + def _get_node(self, name): + return self.tmap["nodes"][self._node_index[name]] + + def _pose_of(self, name): + position = self._get_node(name)["node"]["pose"]["position"] + return {"x": position["x"], "y": position["y"], "z": position.get("z", 0.0)} + + def _link(self, node_a, node_b): + """Create bidirectional edges between *node_a* and *node_b* (if needed). + + Returns ``True`` if at least one new edge was appended, ``False`` if + both edges already existed (or *node_a* is ``None``/equal to *node_b*). + """ + if node_a is None or node_a == node_b: + return False + fwd, rev = make_bidirectional_edges(self.template_edge, node_a, node_b) + + added = False + a_edges = self._get_node(node_a)["node"]["edges"] + if not any(e["edge_id"] == fwd["edge_id"] for e in a_edges): + a_edges.append(fwd) + added = True + + b_edges = self._get_node(node_b)["node"]["edges"] + if not any(e["edge_id"] == rev["edge_id"] for e in b_edges): + b_edges.append(rev) + added = True + + return added + + def _unlink(self, node_a, node_b): + """Remove the bidirectional edges between *node_a* and *node_b* (if present).""" + if node_a is None or node_a == node_b: + return + fwd_id = f"{node_a}_{node_b}" + rev_id = f"{node_b}_{node_a}" + + a_edges = self._get_node(node_a)["node"]["edges"] + a_edges[:] = [e for e in a_edges if e["edge_id"] != fwd_id] + + b_edges = self._get_node(node_b)["node"]["edges"] + b_edges[:] = [e for e in b_edges if e["edge_id"] != rev_id] + + # ------------------------------------------------------------------ + # Public API + # ------------------------------------------------------------------ + + def add_node(self, pose, node_distance=0.0, force=False): + """Try to record *pose* as a new node (or reuse an existing one). + + Args: + pose: dict with keys ``x``, ``y`` and optionally ``z``, ``qx``, + ``qy``, ``qz``, ``qw``. + node_distance: minimum distance (m) from the last recorded node + required before a new node is created. Ignored when *force*. + force: when ``True``, bypass the ``node_distance`` check (used + for the explicit "add node" service call). + + Returns: + Tuple ``(node_name, created, message)`` where *created* is + ``True`` only if a brand-new node was appended to the map. + """ + last_name = self._order[-1] if self._order else None + + if last_name is not None and not force: + if distance_xy(pose, self._pose_of(last_name)) < node_distance: + return last_name, False, "too close to the last recorded node" + + loop_node = find_loop_closure_node(self.tmap, pose) + if loop_node is not None: + if loop_node == last_name: + return last_name, False, "still within the last node's influence zone" + link_added = self._link(last_name, loop_node) + self._order.append(loop_node) + self._history.append({ + "name": loop_node, "created": False, + "linked_from": last_name, "link_added": link_added, + }) + return loop_node, False, f"loop closure: linked to existing node '{loop_node}'" + + name = f"node{self._next_id}" + self._next_id += 1 + + node_dict = make_node_dict( + self.template_node, name, pose, self.pointset, self.site_name, + extra_properties={"map": {"source": MAP_SOURCE_PROPERTY_VALUE}}, + ) + self.tmap["nodes"].append(node_dict) + self._node_index[name] = len(self.tmap["nodes"]) - 1 + self._order.append(name) + + link_added = self._link(last_name, name) + self._history.append({ + "name": name, "created": True, + "linked_from": last_name, "link_added": link_added, + }) + + self.tmap["meta"]["last_updated"] = _now() + return name, True, f"node '{name}' added" + + def delete_last_node(self): + """Undo the most recent recording step. + + If the last step created a brand-new node, that node (and the edge + linking it to the previous one) is removed. If the last step was a + loop closure (re-visiting an already recorded node), only the edge + linking it to the previous node is removed -- the reused node itself + is kept since it may still be referenced earlier in the recording. + """ + if not self._history: + return False, "no nodes to delete" + + entry = self._history.pop() + name = self._order.pop() + + if entry["link_added"]: + self._unlink(entry["linked_from"], name) + + if entry["created"]: + idx = self._node_index.pop(name) + self.tmap["nodes"].pop(idx) + + for other_name, other_idx in self._node_index.items(): + if other_idx > idx: + self._node_index[other_name] = other_idx - 1 + + for node_data in self.tmap["nodes"]: + node_data["node"]["edges"] = [ + e for e in node_data["node"]["edges"] if e["node"] != name + ] + + self.tmap["meta"]["last_updated"] = _now() + kind = "node" if entry["created"] else "loop-closure link to node" + return True, f"removed {kind} '{name}'" + + def num_nodes(self): + """Return the number of unique nodes currently in the recorded map.""" + return len(self._node_index) + + def num_visits(self): + """Return the number of recording steps, including loop-closure revisits.""" + return len(self._order) + + def last_node_name(self): + return self._order[-1] if self._order else "" + + def to_yaml(self): + return yaml.dump(self.tmap, default_flow_style=False) diff --git a/topological_navigation/topological_navigation/marker_arrays.py b/topological_navigation/topological_navigation/marker_arrays.py deleted file mode 100644 index 04c04ee1..00000000 --- a/topological_navigation/topological_navigation/marker_arrays.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy - - -from geometry_msgs.msg import Pose -from geometry_msgs.msg import Point - -from visualization_msgs.msg import * -from topological_navigation_msgs.msg import TopologicalNode -from topological_navigation.topological_map import * - - -class waypoints_markers(object): - - def __init__(self, nodes) : - self.map_nodes = MarkerArray() - for i in nodes.nodes : - marker = Marker() - marker.header.frame_id = "map" - #marker.header.stamp = rospy.now() - #marker.type = marker.ARROW - marker.type = Marker.SPHERE - marker.scale.x = 0.2 - marker.scale.y = 0.2 - marker.scale.z = 0.2 - marker.color.a = 1.0 - marker.color.r = 0.2 - marker.color.g = 0.2 - marker.color.b = 0.7 - #marker.lifetime=2 - marker.pose = i._get_pose() - marker.pose.position.z = marker.pose.position.z+0.1 - self.map_nodes.markers.append(marker) - - - idn = 0 - for m in self.map_nodes.markers: - m.id = idn - idn += 1 - - - -class edges_marker(object): - - def __init__(self, nodes) : - self.map_edges = MarkerArray() - for node in nodes.nodes : - for i in node.edges : - marker = Marker() - marker.header.frame_id = "map" - marker.type = marker.LINE_LIST - ind = nodes._get_node_index(i['node']) - V1=Point() - V2=Point() - V1= (node._get_pose()).position - V2= (nodes.nodes[ind]._get_pose()).position - marker.scale.x = 0.1 - marker.color.a = 0.6 - marker.color.r = 0.1 - marker.color.g = 0.1 - marker.color.b = 0.1 - marker.points.append(V1) - marker.points.append(V2) - self.map_edges.markers.append(marker) - - idn = 0 - for m in self.map_edges.markers: - m.id = idn - idn += 1 - - -class vertices_marker(object): - - def __init__(self, nodes) : - self.node_zone = MarkerArray() - for node in nodes.nodes : - marker = Marker() - marker.header.frame_id = "map" - marker.type = marker.LINE_STRIP - marker.scale.x = 0.1 - marker.color.a = 0.8 - marker.color.r = 0.7 - marker.color.g = 0.1 - marker.color.b = 0.2 - node._get_coords() - count=0 - for i in node.vertices : - #print i[0], i[1] - Vert = Point() - Vert.z = 0.05 - Vert.x = node.px + i[0] - Vert.y = node.py + i[1] - marker.points.append(Vert) - #vertname = "%s-%d" %(node.name, count) - Pos = Pose() - Pos.position = Vert - # OJO: esto hay que hacerlo de alguna forma - #self._vertex_marker(vertname, Pos, vertname) - count+=1 - marker.points.append(marker.points[0]) - self.node_zone.markers.append(marker) - - idn = 0 - for m in self.node_zone.markers: - m.id = idn - idn += 1 - - diff --git a/topological_navigation/topological_navigation/nav_stats_db.py b/topological_navigation/topological_navigation/nav_stats_db.py new file mode 100644 index 00000000..5b6d88ea --- /dev/null +++ b/topological_navigation/topological_navigation/nav_stats_db.py @@ -0,0 +1,506 @@ +"""SQLite persistence module for topological navigation traversal statistics. + +This module provides the ``NavStatsDB`` class which handles all database +operations for recording and querying edge traversal statistics, as well as +storing the topological maps themselves. It is designed to be used by the +navigation server and is intentionally kept independent of any ROS 2 imports +so that it can also be used from standalone analysis scripts. + +Schema +------ +``topological_maps`` table stores one row per unique map version: + + id – auto-increment primary key + map_name – human-readable map name (from the ``name`` top-level key) + map_hash – SHA-1 of the serialised map YAML (UNIQUE version key) + latitude – origin latitude extracted from ``meta.origin.latitude`` + longitude – origin longitude extracted from ``meta.origin.longitude`` + map_data – full YAML text stored as a BLOB for later retrieval + added_at – UTC timestamp of when this map version was first stored + +``traversals`` table stores one row per traversal attempt: + + id – auto-increment primary key + map_name – topological map pointset name + map_hash – SHA-1 of the serialised map YAML (version fingerprint) + edge_id – edge identifier (e.g. ``nodeA_nodeB``) + origin – source node name + target – destination node name + status – ``'success'``, ``'failed'``, or ``'aborted'`` + failure_reason – ``'none'``, ``'cancelled'``, ``'lookup_failed'``, etc. + start_time – ISO-8601 UTC timestamp + end_time – ISO-8601 UTC timestamp + duration_s – traversal duration in seconds + avg_speed – edge_length / duration_s (m/s); NULL if unknown + is_segment – 1 if this traversal was part of a multi-edge segment + segment_edges – JSON array of all edge IDs in the segment (or NULL) + created_at – row insertion timestamp (UTC) +""" + +import hashlib +import json +import sqlite3 +from datetime import datetime, timezone +from pathlib import Path +from typing import Any, Dict, List, Optional + +import yaml + + +# --------------------------------------------------------------------------- +# Schema +# --------------------------------------------------------------------------- + +_CREATE_TOPOLOGICAL_MAPS = """ +CREATE TABLE IF NOT EXISTS topological_maps ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + map_name TEXT NOT NULL DEFAULT '', + map_hash TEXT NOT NULL UNIQUE, + latitude REAL, + longitude REAL, + map_data BLOB NOT NULL, + added_at TEXT NOT NULL DEFAULT (datetime('now')) +); +""" + +_CREATE_IDX_TOPOMAP_HASH = """ +CREATE UNIQUE INDEX IF NOT EXISTS idx_topomaps_map_hash + ON topological_maps (map_hash); +""" + +_CREATE_IDX_TOPOMAP_NAME = """ +CREATE INDEX IF NOT EXISTS idx_topomaps_map_name + ON topological_maps (map_name); +""" + +_INSERT_TOPOMAP = """ +INSERT OR IGNORE INTO topological_maps + (map_name, map_hash, latitude, longitude, map_data) +VALUES + (:map_name, :map_hash, :latitude, :longitude, :map_data); +""" + +_CREATE_TRAVERSALS = """ +CREATE TABLE IF NOT EXISTS traversals ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + map_name TEXT NOT NULL DEFAULT '', + map_hash TEXT NOT NULL DEFAULT '', + edge_id TEXT NOT NULL DEFAULT '', + origin TEXT NOT NULL DEFAULT '', + target TEXT NOT NULL DEFAULT '', + status TEXT NOT NULL DEFAULT 'unknown', + failure_reason TEXT NOT NULL DEFAULT 'none', + start_time TEXT, + end_time TEXT, + duration_s REAL, + avg_speed REAL, + is_segment INTEGER NOT NULL DEFAULT 0, + segment_edges TEXT, + created_at TEXT NOT NULL DEFAULT (datetime('now')) +); +""" + +_CREATE_IDX_EDGE = """ +CREATE INDEX IF NOT EXISTS idx_traversals_edge_id + ON traversals (edge_id); +""" + +_CREATE_IDX_MAP = """ +CREATE INDEX IF NOT EXISTS idx_traversals_map_name + ON traversals (map_name); +""" + +_INSERT_TRAVERSAL = """ +INSERT INTO traversals ( + map_name, map_hash, edge_id, origin, target, + status, failure_reason, + start_time, end_time, duration_s, avg_speed, + is_segment, segment_edges +) VALUES ( + :map_name, :map_hash, :edge_id, :origin, :target, + :status, :failure_reason, + :start_time, :end_time, :duration_s, :avg_speed, + :is_segment, :segment_edges +); +""" + + +# --------------------------------------------------------------------------- +# Public helpers +# --------------------------------------------------------------------------- + +def compute_map_hash(map_yaml_str: str) -> str: + """Return a short SHA-1 hex digest of the serialised map YAML string.""" + return hashlib.sha1(map_yaml_str.encode("utf-8", errors="replace")).hexdigest()[:12] + + +def _iso(dt: Optional[datetime]) -> Optional[str]: + """Convert *dt* to an ISO-8601 UTC string, or return ``None``.""" + if dt is None: + return None + if dt.tzinfo is None: + # Assume local time; store as-is with 'Z' suffix omitted + return dt.isoformat(timespec="seconds") + return dt.astimezone(timezone.utc).isoformat(timespec="seconds") + + +# --------------------------------------------------------------------------- +# Main class +# --------------------------------------------------------------------------- + +class NavStatsDB: + """Thin wrapper around an SQLite database for navigation statistics. + + Parameters + ---------- + db_path: + Path to the SQLite file. The file (and any parent directories) + are created automatically if they do not exist. + """ + + def __init__(self, db_path: str) -> None: + path = Path(db_path).expanduser().resolve() + path.parent.mkdir(parents=True, exist_ok=True) + self._path = str(path) + self._conn: Optional[sqlite3.Connection] = None + self._open() + self._create_schema() + + # ------------------------------------------------------------------ + # Connection management + # ------------------------------------------------------------------ + + def _open(self) -> None: + """Open (or re-open) the SQLite connection with WAL mode.""" + self._conn = sqlite3.connect( + self._path, + check_same_thread=False, + timeout=10.0, + ) + self._conn.execute("PRAGMA journal_mode=WAL;") + self._conn.execute("PRAGMA foreign_keys=ON;") + + def _create_schema(self) -> None: + """Create tables and indexes if they do not yet exist.""" + with self._conn: + self._conn.execute(_CREATE_TOPOLOGICAL_MAPS) + self._conn.execute(_CREATE_IDX_TOPOMAP_HASH) + self._conn.execute(_CREATE_IDX_TOPOMAP_NAME) + self._conn.execute(_CREATE_TRAVERSALS) + self._conn.execute(_CREATE_IDX_EDGE) + self._conn.execute(_CREATE_IDX_MAP) + + def close(self) -> None: + """Close the database connection.""" + if self._conn is not None: + self._conn.close() + self._conn = None + + # ------------------------------------------------------------------ + # Map store/retrieve API + # ------------------------------------------------------------------ + + def store_map(self, map_yaml_str: str) -> str: + """Persist a topological map to the database (idempotent). + + If a map with the same hash already exists, this is a no-op. + + Parameters + ---------- + map_yaml_str: + Raw YAML text of the topological map as received from the ROS + topic or read from a file. + + Returns + ------- + str + The SHA-1 hash of the stored map (12 hex characters). + """ + map_hash = compute_map_hash(map_yaml_str) + try: + parsed: Dict[str, Any] = yaml.safe_load(map_yaml_str) or {} + except Exception: + parsed = {} + + map_name = parsed.get("name") or parsed.get("pointset") or "" + origin = (parsed.get("meta") or {}).get("origin") or {} + latitude = origin.get("latitude") + longitude = origin.get("longitude") + + row = { + "map_name": map_name, + "map_hash": map_hash, + "latitude": latitude, + "longitude": longitude, + "map_data": map_yaml_str, + } + with self._conn: + self._conn.execute(_INSERT_TOPOMAP, row) + return map_hash + + def get_map(self, identifier: str) -> Optional[Dict[str, Any]]: + """Retrieve a stored map by name or hash. + + When *identifier* matches multiple names, the most-recently-added + row is returned. + + Parameters + ---------- + identifier: + Either the full ``map_hash`` (12-char hex) or the ``map_name``. + + Returns + ------- + dict or None + Row dict with keys: id, map_name, map_hash, latitude, longitude, + map_data, added_at. Returns ``None`` if not found. + """ + rows = self.query( + "SELECT * FROM topological_maps WHERE map_hash = ? " + "ORDER BY added_at DESC LIMIT 1", + (identifier,), + ) + if rows: + return rows[0] + rows = self.query( + "SELECT * FROM topological_maps WHERE map_name = ? " + "ORDER BY added_at DESC LIMIT 1", + (identifier,), + ) + return rows[0] if rows else None + + def list_maps(self) -> List[Dict[str, Any]]: + """Return all stored maps ordered by name then added_at.""" + return self.query( + "SELECT id, map_name, map_hash, latitude, longitude, added_at " + "FROM topological_maps ORDER BY map_name, added_at", + ) + + def delete_map(self, identifier: str) -> int: + """Delete a stored map by name or hash. + + Parameters + ---------- + identifier: + Either the full ``map_hash`` or the ``map_name``. + + Returns + ------- + int + Number of rows deleted. + """ + with self._conn: + cur = self._conn.execute( + "DELETE FROM topological_maps WHERE map_hash = ?", + (identifier,), + ) + if cur.rowcount: + return cur.rowcount + cur = self._conn.execute( + "DELETE FROM topological_maps WHERE map_name = ?", + (identifier,), + ) + return cur.rowcount + + # ------------------------------------------------------------------ + # Write API + # ------------------------------------------------------------------ + + def record_traversal( + self, + *, + map_name: str, + map_hash: str, + edge_id: str, + origin: str, + target: str, + status: str, + failure_reason: str = "none", + start_time: Optional[datetime] = None, + end_time: Optional[datetime] = None, + duration_s: Optional[float] = None, + edge_length: Optional[float] = None, + is_segment: bool = False, + segment_edges: Optional[List[str]] = None, + ) -> int: + """Insert one traversal record and return the new row id. + + Parameters + ---------- + map_name: Topological map pointset name. + map_hash: Short hash of the map YAML for version tracking. + edge_id: Edge identifier (``'nodeA_nodeB'``). + origin: Source node name. + target: Destination node name. + status: ``'success'``, ``'failed'``, or ``'aborted'``. + failure_reason: Human-readable failure category. + start_time: Traversal start (``datetime`` object). + end_time: Traversal end (``datetime`` object). + duration_s: Duration in seconds (derived from timestamps if omitted). + edge_length: Euclidean distance between nodes (metres). Used to + compute ``avg_speed = edge_length / duration_s``. + is_segment: Whether this traversal was part of a multi-edge segment. + segment_edges: All edge IDs belonging to the enclosing segment. + """ + # Derive duration from timestamps if not provided + if duration_s is None and start_time is not None and end_time is not None: + duration_s = (end_time - start_time).total_seconds() + + # Average speed (m/s) + avg_speed: Optional[float] = None + if ( + edge_length is not None + and duration_s is not None + and duration_s > 0.0 + ): + avg_speed = edge_length / duration_s + + row = { + "map_name": map_name, + "map_hash": map_hash, + "edge_id": edge_id, + "origin": origin, + "target": target, + "status": status, + "failure_reason": failure_reason, + "start_time": _iso(start_time), + "end_time": _iso(end_time), + "duration_s": duration_s, + "avg_speed": avg_speed, + "is_segment": 1 if is_segment else 0, + "segment_edges": json.dumps(segment_edges) if segment_edges else None, + } + + with self._conn: + cur = self._conn.execute(_INSERT_TRAVERSAL, row) + return cur.lastrowid + + # ------------------------------------------------------------------ + # Read API (used by the standalone stats script) + # ------------------------------------------------------------------ + + def query(self, sql: str, params=()): + """Execute an arbitrary SELECT and return all rows as dicts.""" + cur = self._conn.execute(sql, params) + cols = [d[0] for d in cur.description] + return [dict(zip(cols, row)) for row in cur.fetchall()] + + def edge_ids(self, where: str = "") -> List[str]: + """Return a sorted list of distinct edge IDs, optionally filtered.""" + sql = "SELECT DISTINCT edge_id FROM traversals" + if where: + sql += " WHERE " + where + sql += " ORDER BY edge_id" + return [r["edge_id"] for r in self.query(sql)] + + def merge_from(self, other_db_path: str) -> Dict[str, int]: + """Merge all maps and traversals from *other_db_path* into this database. + + Each run of the navigation system typically creates its own + database file; this method allows several such databases to be + combined into one so that coverage can be analysed across runs. + + Topological maps are merged idempotently: a map already present + (matched by ``map_hash``) is skipped. Traversal records are always + copied across (they represent distinct historical events), each + getting a new row id in the destination database. + + Parameters + ---------- + other_db_path: + Path to the source SQLite database to merge from. It is opened + read-only and left untouched. + + Returns + ------- + dict + ``{"maps_added": int, "maps_skipped": int, "traversals_added": int}`` + """ + other = NavStatsDB(other_db_path) + try: + maps_added = 0 + maps_skipped = 0 + for m in other.list_maps(): + full = other.get_map(m["map_hash"]) + if full is None: + continue + existing = self.query( + "SELECT id FROM topological_maps WHERE map_hash = ?", + (full["map_hash"],), + ) + if existing: + maps_skipped += 1 + continue + with self._conn: + self._conn.execute(_INSERT_TOPOMAP, { + "map_name": full["map_name"], + "map_hash": full["map_hash"], + "latitude": full.get("latitude"), + "longitude": full.get("longitude"), + "map_data": full["map_data"], + }) + maps_added += 1 + + traversals = other.query("SELECT * FROM traversals") + traversals_added = 0 + for t in traversals: + row = { + "map_name": t.get("map_name") or "", + "map_hash": t.get("map_hash") or "", + "edge_id": t.get("edge_id") or "", + "origin": t.get("origin") or "", + "target": t.get("target") or "", + "status": t.get("status") or "unknown", + "failure_reason": t.get("failure_reason") or "none", + "start_time": t.get("start_time"), + "end_time": t.get("end_time"), + "duration_s": t.get("duration_s"), + "avg_speed": t.get("avg_speed"), + "is_segment": t.get("is_segment") or 0, + "segment_edges": t.get("segment_edges"), + } + with self._conn: + self._conn.execute(_INSERT_TRAVERSAL, row) + traversals_added += 1 + finally: + other.close() + + return { + "maps_added": maps_added, + "maps_skipped": maps_skipped, + "traversals_added": traversals_added, + } + + def edge_stats(self, edge_id: str, where: str = "") -> dict: + """Aggregate statistics for *edge_id*. + + Returns a dict with keys: + edge_id, total, success, failed, aborted, + avg_duration_s, min_duration_s, max_duration_s, + avg_speed, last_traversal + """ + base = "edge_id = :eid" + if where: + base += " AND (" + where + ")" + + sql = """ + SELECT + edge_id, + COUNT(*) AS total, + SUM(CASE WHEN status='success' THEN 1 ELSE 0 END) AS success, + SUM(CASE WHEN status='failed' THEN 1 ELSE 0 END) AS failed, + SUM(CASE WHEN status='aborted' THEN 1 ELSE 0 END) AS aborted, + AVG(CASE WHEN duration_s IS NOT NULL THEN duration_s END) + AS avg_duration_s, + MIN(CASE WHEN duration_s IS NOT NULL THEN duration_s END) + AS min_duration_s, + MAX(CASE WHEN duration_s IS NOT NULL THEN duration_s END) + AS max_duration_s, + AVG(avg_speed) AS avg_speed, + MAX(end_time) AS last_traversal + FROM traversals + WHERE """ + base + """ + GROUP BY edge_id + """ + rows = self.query(sql, {"eid": edge_id}) + return rows[0] if rows else {} diff --git a/topological_navigation/topological_navigation/navigation_graph.py b/topological_navigation/topological_navigation/navigation_graph.py new file mode 100644 index 00000000..68670b88 --- /dev/null +++ b/topological_navigation/topological_navigation/navigation_graph.py @@ -0,0 +1,667 @@ +""" +Navigation graph utilities using NetworkX. + +Provides graph-based route planning, state machine, action segment merging, +and boundary polygon computation for topological navigation. + +Key Features: + - Navigation state machine with validated transitions + - Route planning via NetworkX A* shortest path + - Action segment merging for consecutive same-type edges + - Boundary polygon computation for RowTraversal edges + - Route distance calculation + +Dependencies: + - networkx (>=2.5): Graph data structures and algorithms + - numpy (>=1.19): Numerical operations +""" + +import math +import networkx as nx +import numpy as np +from enum import Enum +from dataclasses import dataclass, field +from threading import Lock +from typing import List, Dict, Optional, Tuple, Any + + +# ============================================================================== +# State Machine +# ============================================================================== + +class NavState(Enum): + """Navigation state machine states. + + Lifecycle: + IDLE -> WAITING_FOR_MAP -> WAITING_FOR_LOCALISATION -> READY + READY -> PLANNING -> EXECUTING_* -> SUCCEEDED / FAILED / CANCELLED + SUCCEEDED / FAILED / CANCELLED -> READY + """ + + IDLE = "IDLE" + WAITING_FOR_MAP = "WAITING_FOR_MAP" + WAITING_FOR_LOCALISATION = "WAITING_FOR_LOCALISATION" + READY = "READY" + PLANNING = "PLANNING" + EXECUTING_NAVIGATE_TO_POSE = "EXECUTING_NAVIGATE_TO_POSE" + EXECUTING_GOAL_ALIGN = "EXECUTING_GOAL_ALIGN" + EXECUTING_ROW_TRAVERSAL = "EXECUTING_ROW_TRAVERSAL" + SUCCEEDED = "SUCCEEDED" + FAILED = "FAILED" + CANCELLED = "CANCELLED" + + +_EXECUTING_STATES = { + NavState.EXECUTING_NAVIGATE_TO_POSE, + NavState.EXECUTING_GOAL_ALIGN, + NavState.EXECUTING_ROW_TRAVERSAL, +} + +_TERMINAL_STATES = { + NavState.SUCCEEDED, + NavState.FAILED, + NavState.CANCELLED, +} + +_EXEC_AND_TERMINAL = _EXECUTING_STATES | _TERMINAL_STATES + +VALID_TRANSITIONS: Dict[NavState, set] = { + NavState.IDLE: {NavState.WAITING_FOR_MAP}, + NavState.WAITING_FOR_MAP: {NavState.WAITING_FOR_LOCALISATION}, + NavState.WAITING_FOR_LOCALISATION: {NavState.READY}, + NavState.READY: {NavState.PLANNING, NavState.CANCELLED}, + NavState.PLANNING: ( + _EXECUTING_STATES | {NavState.SUCCEEDED, NavState.FAILED, + NavState.CANCELLED} + ), + NavState.EXECUTING_NAVIGATE_TO_POSE: ( + _EXEC_AND_TERMINAL + ), + NavState.EXECUTING_GOAL_ALIGN: ( + _EXEC_AND_TERMINAL + ), + NavState.EXECUTING_ROW_TRAVERSAL: ( + _EXEC_AND_TERMINAL + ), + NavState.SUCCEEDED: {NavState.READY}, + NavState.FAILED: {NavState.READY}, + NavState.CANCELLED: {NavState.READY}, +} + + +ACTION_TO_STATE: Dict[str, NavState] = { + "NavigateToPose": NavState.EXECUTING_NAVIGATE_TO_POSE, + "navigate_to_pose": NavState.EXECUTING_NAVIGATE_TO_POSE, + "navigate_to_pose_goal_align": NavState.EXECUTING_GOAL_ALIGN, + "goal_align": NavState.EXECUTING_GOAL_ALIGN, + "GoalAlign": NavState.EXECUTING_GOAL_ALIGN, + "row_traversal": NavState.EXECUTING_ROW_TRAVERSAL, + "RowTraversal": NavState.EXECUTING_ROW_TRAVERSAL, +} + + +# ============================================================================== +# Action Name Normalisation (dual naming convention) +# ============================================================================== + +CANONICAL_ACTIONS: Dict[str, str] = { + # CamelCase forms + 'NavigateToPose': 'NavigateToPose', + 'RowTraversal': 'row_traversal', + 'GoalAlign': 'goal_align', + # snake_case forms + 'navigate_to_pose': 'NavigateToPose', + 'row_traversal': 'row_traversal', + 'goal_align': 'goal_align', +} + + +def normalize_action_name(name: str) -> str: + """Normalize edge action name to its canonical form. + + Both CamelCase and snake_case conventions are accepted:: + + 'NavigateToPose' / 'navigate_to_pose' -> 'NavigateToPose' + 'RowTraversal' / 'row_traversal' -> 'row_traversal' + 'GoalAlign' / 'goal_align' -> 'goal_align' + + Unknown action names are returned unchanged. + + Args: + name: Edge action name in either convention. + + Returns: + Canonical action name string. + """ + return CANONICAL_ACTIONS.get(name, name) + + +class NavStateMachine: + """Navigation state machine with validated transitions. + + Thread-safe via internal lock. All state reads/writes are atomic. + Invalid transitions are rejected with a warning log. + + Example: + >>> sm = NavStateMachine() + >>> sm.transition(NavState.WAITING_FOR_MAP) + True + >>> sm.state + + >>> sm.transition(NavState.READY) # invalid + False + """ + + def __init__(self, logger=None): + self._state = NavState.IDLE + self._logger = logger + self._lock = Lock() + + @property + def state(self) -> NavState: + """Current state (thread-safe read).""" + with self._lock: + return self._state + + def transition(self, new_state: NavState) -> bool: + """Attempt state transition. + + Args: + new_state: Target state. + + Returns: + True if transition succeeded, False if invalid. + """ + with self._lock: + old = self._state + valid = VALID_TRANSITIONS.get(old, set()) + + if new_state not in valid: + if self._logger: + self._logger.warning( + f"Invalid state transition: {old.value} -> " + f"{new_state.value}. Valid: " + f"{[s.value for s in sorted(valid, key=lambda s: s.value)]}" + ) + return False + + self._state = new_state + if self._logger: + self._logger.info( + f"[STATE] {old.value} -> {new_state.value}" + ) + return True + + def is_executing(self) -> bool: + """True if currently executing any action.""" + return self.state in _EXECUTING_STATES + + def is_terminal(self) -> bool: + """True if in a terminal state (SUCCEEDED/FAILED/CANCELLED).""" + return self.state in _TERMINAL_STATES + + def reset(self) -> bool: + """Reset to READY from a terminal state.""" + return self.transition(NavState.READY) + + +# ============================================================================== +# Action Segments +# ============================================================================== + +@dataclass +class ActionSegment: + """A batch of consecutive edges sharing the same action type. + + When a route contains consecutive edges with the same action, + they are merged into a single ActionSegment for efficient + batch execution and unified boundary publishing. + + Attributes: + action_type: Edge action name ('NavigateToPose', 'goal_align', + 'row_traversal'). + edge_ids: List of edge IDs in this segment. + source_nodes: List of source node names. + target_nodes: List of target node names. + edge_data: List of full edge attribute dicts from the graph. + """ + + action_type: str + edge_ids: List[str] = field(default_factory=list) + source_nodes: List[str] = field(default_factory=list) + target_nodes: List[str] = field(default_factory=list) + edge_data: List[Dict[str, Any]] = field(default_factory=list) + + @property + def is_empty(self) -> bool: + """True if segment contains no edges.""" + return len(self.edge_ids) == 0 + + @property + def first_source(self) -> Optional[str]: + """Name of the first source node, or None.""" + return self.source_nodes[0] if self.source_nodes else None + + @property + def last_target(self) -> Optional[str]: + """Name of the last target node, or None.""" + return self.target_nodes[-1] if self.target_nodes else None + + @property + def num_edges(self) -> int: + """Number of edges in this segment.""" + return len(self.edge_ids) + + @property + def parameters(self) -> Dict[str, Any]: + """Parameters (edge properties) for this segment. + + Returns the first non-empty ``properties`` dict found across + all edges in the segment. Edges with empty or absent + properties are transparent -- they inherit the segment's + parameters. Returns an empty dict when no edge in the segment + carries any properties. + """ + for edge in self.edge_data: + p = edge.get('properties', {}) or {} + if p: + return p + return {} + + +# ============================================================================== +# Route Planning +# ============================================================================== + +def _heuristic(u: str, v: str, graph: nx.DiGraph) -> float: + """Euclidean distance heuristic for A*.""" + ux, uy = graph.nodes[u]['x'], graph.nodes[u]['y'] + vx, vy = graph.nodes[v]['x'], graph.nodes[v]['y'] + return math.hypot(vx - ux, vy - uy) + + +def plan_route( + graph: nx.DiGraph, + origin: str, + target: str, + avoid_edges: Optional[List[str]] = None, + logger=None, + algorithm: str = 'astar', + weight: str = 'weight', +) -> Optional[List[str]]: + """Plan shortest route using NetworkX algorithms. + + Supports multiple path-finding algorithms selectable at runtime + via the ``algorithm`` parameter: + + - ``'astar'`` (default): A* with Euclidean distance heuristic. + Optimal and efficient for spatial graphs. + - ``'dijkstra'``: Dijkstra's algorithm. No heuristic -- explores + more nodes but handles non-spatial weights better. + + The ``weight`` parameter selects which edge attribute is used as + the path cost. By default this is ``'weight'`` (set to 1.0 + during graph construction but overridable via edge properties). + + Args: + graph: NetworkX DiGraph from build_graph_from_tmap(). + origin: Name of the origin node. + target: Name of the target node. + avoid_edges: Optional list of edge_ids to exclude. + logger: Optional ROS 2 logger. + algorithm: ``'astar'`` or ``'dijkstra'``. + weight: Edge attribute used as cost (default ``'weight'``). + + Returns: + Ordered list of node names [origin, ..., target], + or None if no route exists. + """ + if origin == target: + return [origin] + + if origin not in graph: + if logger: + logger.error(f"Origin node '{origin}' not in graph") + return None + + if target not in graph: + if logger: + logger.error(f"Target node '{target}' not in graph") + return None + + # Optionally filter out avoided edges + if avoid_edges: + avoid_set = set(avoid_edges) + view = nx.subgraph_view( + graph, + filter_edge=lambda u, v: ( + graph[u][v].get('edge_id', '') not in avoid_set + ), + ) + else: + view = graph + + try: + if algorithm == 'dijkstra': + path = nx.dijkstra_path( + view, origin, target, weight=weight, + ) + else: + # Default: A* with Euclidean heuristic + path = nx.astar_path( + view, origin, target, + heuristic=lambda u, v: _heuristic(u, v, graph), + weight=weight, + ) + return path + except nx.NetworkXNoPath: + if logger: + logger.warning(f"No route from '{origin}' to '{target}'") + return None + except nx.NodeNotFound as exc: + if logger: + logger.error(f"Node not found during planning: {exc}") + return None + + +def get_route_edges( + graph: nx.DiGraph, + route_nodes: List[str], +) -> List[Dict[str, Any]]: + """Extract edge data for consecutive nodes along a route. + + Args: + graph: NetworkX DiGraph with edge attributes. + route_nodes: Ordered node names [origin, ..., target]. + + Returns: + List of edge data dicts. Each contains at minimum: + ``edge_id``, ``source``, ``target``, ``action``, + ``action_type``, ``properties``, ``weight``. + """ + edges: List[Dict[str, Any]] = [] + for i in range(len(route_nodes) - 1): + src = route_nodes[i] + tgt = route_nodes[i + 1] + + if graph.has_edge(src, tgt): + attrs = dict(graph[src][tgt]) + attrs['source'] = src + attrs['target'] = tgt + edges.append(attrs) + + return edges + + +def _edge_params(edge: Dict[str, Any]) -> Dict[str, Any]: + """Return edge ``properties`` normalised to an empty dict when absent.""" + return edge.get('properties', {}) or {} + + +def merge_action_segments( + route_edges: List[Dict[str, Any]], + map_actions: Optional[Dict[str, Any]] = None, +) -> List[ActionSegment]: + """Merge consecutive same-action-type edges into segments. + + Given edges: [Nav, Nav, Row, Row, GoalAlign] + Produces: [Seg(Nav,2), Seg(Row,2), Seg(GoalAlign,1)] + + When ``map_actions`` is provided the ``composable`` flag from + each action configuration controls merging: + + - ``composable: true`` -- consecutive same-action edges are + merged into a single multi-waypoint segment. + - ``composable: false`` -- each edge becomes its own segment + even when the action name matches the previous edge. + + If ``map_actions`` is *None* (legacy maps without an ``actions`` + section), all edges are merged by action name as before. + + **Parameter consistency**: edges may only be merged into the same + segment when their non-empty ``properties`` dicts are equal. + Edges with empty or absent properties are *transparent* -- they + are freely merged into any segment regardless of the segment's + parameters. Two edges that each carry different non-empty + properties force a split. The segment's effective parameters + come from the first edge in the segment (in any position) that + carries non-empty properties. + + Args: + route_edges: Edge data dicts from :func:`get_route_edges`. + map_actions: Optional ``actions`` dict from the topological + map YAML. Keys are action names, values are config + dicts with at least a ``composable`` boolean. + + Returns: + List of ActionSegment instances with merged edges. + """ + if not route_edges: + return [] + + segments: List[ActionSegment] = [] + current: Optional[ActionSegment] = None + + for edge in route_edges: + action = edge.get('action', 'navigate_to_pose') + # Legacy maps: normalise CamelCase -> canonical form + if map_actions is None: + action = normalize_action_name(action) + + # Determine if this action type is composable + composable = True + if map_actions and action in map_actions: + composable = map_actions[action].get('composable', True) + + # Edge parameters for consistency check + edge_p = _edge_params(edge) + current_p = current.parameters if current is not None else {} + + # Start a new segment when: + # • no current segment exists, OR + # • the action type changed, OR + # • the action is explicitly non-composable, OR + # • both this edge and the current segment carry non-empty + # parameters that differ (empty properties are transparent + # and never force a split). + if ( + current is None + or current.action_type != action + or not composable + or (edge_p and current_p and edge_p != current_p) + ): + if current is not None: + segments.append(current) + current = ActionSegment(action_type=action) + + current.edge_ids.append(edge.get('edge_id', '')) + current.source_nodes.append(edge['source']) + current.target_nodes.append(edge['target']) + current.edge_data.append(edge) + + if current is not None: + segments.append(current) + + return segments + + +# ============================================================================== +# Boundary Polygon +# ============================================================================== + +def compute_boundary_polygon( + graph: nx.DiGraph, + segment: ActionSegment, + default_left: float = 0.5, + default_right: float = 0.5, +) -> List[Tuple[float, float]]: + """Compute boundary polygon for an action segment. + + Creates a corridor polygon around the path by offsetting each + waypoint perpendicularly. The polygon goes left-side forward + then right-side backward, forming a closed boundary. + + Boundary distances are read from the first edge's properties: + ``boundary_left`` and ``boundary_right``. Falls back to defaults. + + This is action-type agnostic -- any segment whose edges carry + ``boundary_left`` / ``boundary_right`` properties will produce + a corridor polygon. + + Args: + graph: NetworkX DiGraph with node position attributes. + segment: ActionSegment whose edges may carry boundary props. + default_left: Default left offset in meters. + default_right: Default right offset in meters. + + Returns: + List of ``(x, y)`` tuples forming a closed polygon. + Empty list if segment has fewer than 2 waypoints. + """ + if segment.is_empty: + return [] + + # Collect unique waypoints along the segment + waypoints: List[Tuple[float, float]] = [] + seen: List[str] = [] + + for edge in segment.edge_data: + src = edge['source'] + if src not in seen: + waypoints.append(( + float(graph.nodes[src]['x']), + float(graph.nodes[src]['y']), + )) + seen.append(src) + + tgt = edge['target'] + if tgt not in seen: + waypoints.append(( + float(graph.nodes[tgt]['x']), + float(graph.nodes[tgt]['y']), + )) + seen.append(tgt) + + if len(waypoints) < 2: + return [] + + # Read boundary distances from the first edge properties + props = segment.edge_data[0].get('properties', {}) + left_dist = float(props.get('boundary_left', default_left)) + right_dist = float(props.get('boundary_right', default_right)) + + # Compute perpendicular offsets at each waypoint + left_pts: List[Tuple[float, float]] = [] + right_pts: List[Tuple[float, float]] = [] + + for i in range(len(waypoints)): + # Direction vector: use forward difference, backward for last + if i < len(waypoints) - 1: + dx = waypoints[i + 1][0] - waypoints[i][0] + dy = waypoints[i + 1][1] - waypoints[i][1] + else: + dx = waypoints[i][0] - waypoints[i - 1][0] + dy = waypoints[i][1] - waypoints[i - 1][1] + + length = math.hypot(dx, dy) + if length < 1e-9: + continue + + # Perpendicular unit vector (left = rotate 90deg CCW) + perp_x = -dy / length + perp_y = dx / length + + x, y = waypoints[i] + left_pts.append((x + perp_x * left_dist, y + perp_y * left_dist)) + right_pts.append((x - perp_x * right_dist, y - perp_y * right_dist)) + + # Closed polygon: left side forward + right side backward + return left_pts + list(reversed(right_pts)) + + +# ============================================================================== +# NavRoute conversion +# ============================================================================== + +def plan_route_as_navroute( + graph: nx.DiGraph, + origin: str, + target: str, + avoid_edges: Optional[List[str]] = None, + logger=None, + algorithm: str = 'astar', + weight: str = 'weight', +): + """Plan a route and return a ``NavRoute`` message. + + Thin wrapper around :func:`plan_route` that converts the + resulting node list into the ``NavRoute`` format expected by + legacy services (``source[]`` and ``edge_id[]``). + + The caller must import ``NavRoute`` from + ``topological_navigation_msgs.msg``. + + Args: + graph: NetworkX DiGraph from :func:`build_graph_from_tmap`. + origin: Name of the origin node. + target: Name of the target node. + avoid_edges: Optional list of edge_ids to exclude. + logger: Optional ROS 2 logger. + algorithm: ``'astar'`` or ``'dijkstra'``. + weight: Edge attribute used as cost (default ``'weight'``). + + Returns: + ``NavRoute`` message with ``source`` and ``edge_id`` fields + populated when a route is found, or an empty ``NavRoute`` on + failure. + """ + from topological_navigation_msgs.msg import NavRoute + + route_msg = NavRoute() + route_nodes = plan_route( + graph, origin, target, + avoid_edges=avoid_edges, + logger=logger, + algorithm=algorithm, + weight=weight, + ) + if not route_nodes or len(route_nodes) < 2: + return route_msg + + route_edges = get_route_edges(graph, route_nodes) + for edge in route_edges: + route_msg.source.append(edge['source']) + route_msg.edge_id.append(edge.get('edge_id', '')) + + return route_msg + + +# ============================================================================== +# Distance +# ============================================================================== + +def get_route_distance( + graph: nx.DiGraph, + route_nodes: List[str], +) -> float: + """Compute total Euclidean distance along a route. + + Args: + graph: NetworkX DiGraph with node position attributes. + route_nodes: Ordered list of node names. + + Returns: + Total Euclidean distance in map units. + """ + if not route_nodes or len(route_nodes) < 2: + return 0.0 + + total = 0.0 + for i in range(len(route_nodes) - 1): + n1, n2 = route_nodes[i], route_nodes[i + 1] + if n1 in graph and n2 in graph: + dx = graph.nodes[n2]['x'] - graph.nodes[n1]['x'] + dy = graph.nodes[n2]['y'] - graph.nodes[n1]['y'] + total += math.hypot(dx, dy) + + return total diff --git a/topological_navigation/topological_navigation/navigation_stats.py b/topological_navigation/topological_navigation/navigation_stats.py deleted file mode 100644 index bcd64c03..00000000 --- a/topological_navigation/topological_navigation/navigation_stats.py +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env python - -from datetime import datetime - -class nav_stats(object): - - def __init__(self, origin, target, topol_map, edge_id): - self.status= "active" - self.origin=origin - self.target=target - self.topological_map = topol_map - self.edge_id = edge_id - #self.date_at_node = datetime.now() - self.set_start() - - def set_start(self): - self.date_started = datetime.now() - self.date_at_node = self.date_started - - def set_ended(self, node): - self.final_node=node - self.date_finished = datetime.now() - self.get_operation_time() - self.get_time_to_wp() - - def set_at_node(self): - self.date_at_node = datetime.now() - - def get_operation_time(self): - operation_delta = self.date_finished - self.date_started - self.operation_time = operation_delta.total_seconds() - return self.operation_time - - def get_time_to_wp(self): - if self.date_at_node != self.date_started : - operation_delta = self.date_finished - self.date_at_node - self.time_to_wp = operation_delta.total_seconds() - else : - self.time_to_wp = 0 - return self.time_to_wp - - def get_start_time_str(self): - dt_text=self.date_started.strftime('%A, %B %d %Y, at %H:%M:%S hours') - return dt_text - - def get_finish_time_str(self): - dt_text=self.date_finished.strftime('%A, %B %d %Y, at %H:%M:%S hours') - return dt_text \ No newline at end of file diff --git a/topological_navigation/topological_navigation/networkx_utils.py b/topological_navigation/topological_navigation/networkx_utils.py new file mode 100644 index 00000000..d942ca82 --- /dev/null +++ b/topological_navigation/topological_navigation/networkx_utils.py @@ -0,0 +1,2088 @@ +""" +NetworkX utilities for topological navigation. + +This module provides utilities for converting topological map data structures +into NetworkX graphs and performing graph-based operations for localization. + +Key Features: +- Convert YAML topological maps to NetworkX DiGraph +- Build KD-tree spatial index for efficient nearest neighbor search +- Point-in-polygon checks for influence zone localization +- Edge distance calculations using vectorized operations +- NetworkX algorithm wrappers for shortest paths and connectivity + +Performance: +- KD-tree construction: O(n log n) where n is number of nodes +- KD-tree query: O(log n) average case for nearest neighbor +- Point-in-polygon: O(m) where m is number of polygon vertices +- Edge distance: O(e) where e is number of edges (vectorized) + +Dependencies: +- networkx (>=2.5): Graph data structures and algorithms +- scipy (>=1.5): KD-tree spatial indexing +- numpy (>=1.19): Numerical operations +""" + +import json +import numpy as np +import networkx as nx +from scipy.spatial import KDTree +from typing import Dict, Any, Optional, Tuple, List + + +def build_graph_from_tmap(tmap_data: Dict[str, Any], logger=None) -> Optional[nx.DiGraph]: + """ + Convert topological map YAML data to NetworkX DiGraph. + + This function takes a topological map dictionary (typically loaded from YAML) + and converts it into a NetworkX directed graph representation. Node positions, + influence zones, properties, and edge metadata are stored as graph attributes. + + Args: + tmap_data: Dictionary containing topological map data with structure: + logger: Optional ROS 2 logger for error messages + { + 'nodes': [ + { + 'node': { + 'name': str, + 'pose': { + 'position': {'x': float, 'y': float, 'z': float}, + 'orientation': {'x': float, 'y': float, 'z': float, 'w': float} + }, + 'verts': [{'x': float, 'y': float}, ...], + 'parent_frame': str, + 'properties': dict (optional), + 'localise_by_topic': str (optional), + 'edges': [ + { + 'edge_id': str, + 'node': str, + 'action': str, + 'action_type': str (optional), + 'properties': dict (optional) + }, + ... + ] + }, + 'meta': dict (optional) + }, + ... + ] + } + + Returns: + NetworkX DiGraph with node and edge attributes, or None if map data is invalid. + + Node attributes: + - name: str - Node name (also the node ID) + - x, y, z: float - Position coordinates + - orientation: dict - Quaternion {x, y, z, w} + - verts: list - Influence zone vertices [{'x': float, 'y': float}, ...] + - parent_frame: str - Coordinate frame (structural) + - nav_frame: str - Navigation frame override for PoseStamped + goals. Empty string means "use map-level default + (topo_frame_id)". + - properties: dict - Optional user-defined properties + - localise_by_topic: str - JSON config string for topic-based localization + - meta: dict - Metadata including tags + + Edge attributes: + - edge_id: str - Unique edge identifier + - action: str - Action name (e.g., "NavigateToPose") + - action_type: str - ROS 2 action type + - properties: dict - Optional user-defined properties + - weight: float - Edge weight for shortest path (default: 1.0) + + Example: + >>> import yaml + >>> with open('map.yaml') as f: + ... tmap_data = yaml.safe_load(f) + >>> graph = build_graph_from_tmap(tmap_data) + >>> if graph: + ... print(f"Graph has {graph.number_of_nodes()} nodes") + ... node_attrs = graph.nodes['WP1'] + ... print(f"WP1 position: ({node_attrs['x']}, {node_attrs['y']})") + + Raises: + No exceptions are raised. Invalid data returns None. + """ + # Validate required fields + if not isinstance(tmap_data, dict): + if logger: + logger.error("Invalid map data: Expected dictionary, got {}".format(type(tmap_data).__name__)) + return None + + if 'nodes' not in tmap_data: + if logger: + logger.error("Invalid map data: Missing required 'nodes' field") + return None + + if not isinstance(tmap_data['nodes'], list): + if logger: + logger.error("Invalid map data: 'nodes' field must be a list, got {}".format(type(tmap_data['nodes']).__name__)) + return None + + # Create directed graph + G = nx.DiGraph() + + # Resolve default nav_frame from transformation section + tx = tmap_data.get('transformation', {}) + default_nav_frame = tx.get('topo_frame_id', tx.get('parent', 'map')) + + def _resolve_tx_ref(value): + """Resolve ``${transformation.}`` to a concrete value.""" + if ( + isinstance(value, str) + and value.startswith('${transformation.') + and value.endswith('}') + ): + key = value[len('${transformation.'):-1] + return tx.get(key, value) + return value + + try: + # Process each node in the map + for idx, node_data in enumerate(tmap_data['nodes']): + # Validate node structure + if not isinstance(node_data, dict): + if logger: + logger.warning(f"Skipping node at index {idx}: Expected dictionary, got {type(node_data).__name__}") + continue + + if 'node' not in node_data: + if logger: + logger.warning(f"Skipping node at index {idx}: Missing 'node' field") + continue + + node = node_data['node'] + + # Validate required node fields + if 'name' not in node: + if logger: + logger.warning(f"Skipping node at index {idx}: Missing required 'name' field") + continue + + node_name = node['name'] + + if 'pose' not in node: + if logger: + logger.warning(f"Skipping node '{node_name}': Missing required 'pose' field") + continue + + pose = node['pose'] + if 'position' not in pose: + if logger: + logger.warning(f"Skipping node '{node_name}': Missing 'position' in pose") + continue + + if 'orientation' not in pose: + if logger: + logger.warning(f"Skipping node '{node_name}': Missing 'orientation' in pose") + continue + + position = pose['position'] + orientation = pose['orientation'] + + # Validate position coordinates + if not all(key in position for key in ['x', 'y', 'z']): + if logger: + missing = [k for k in ['x', 'y', 'z'] if k not in position] + logger.warning(f"Skipping node '{node_name}': Missing position coordinates: {missing}") + continue + + # Validate orientation quaternion + if not all(key in orientation for key in ['x', 'y', 'z', 'w']): + if logger: + missing = [k for k in ['x', 'y', 'z', 'w'] if k not in orientation] + logger.warning(f"Skipping node '{node_name}': Missing orientation components: {missing}") + continue + + # Extract node attributes with defaults for optional fields + try: + node_attrs = { + 'name': node_name, + 'x': float(position['x']), + 'y': float(position['y']), + 'z': float(position['z']), + 'orientation': { + 'x': float(orientation['x']), + 'y': float(orientation['y']), + 'z': float(orientation['z']), + 'w': float(orientation['w']) + }, + 'verts': node.get('verts', []), + 'parent_frame': node.get('parent_frame', 'map'), + 'nav_frame': _resolve_tx_ref( + node.get('nav_frame', '') + ) or default_nav_frame, + 'properties': node.get('properties', {}), + 'localise_by_topic': node.get('localise_by_topic', ''), + 'meta': node_data.get('meta', {}) + } + except (ValueError, TypeError) as e: + if logger: + logger.warning(f"Skipping node '{node_name}': Error converting coordinates to float: {e}") + continue + + # Add node to graph + G.add_node(node_name, **node_attrs) + + # Process edges for this node + edges = node.get('edges', []) + if not isinstance(edges, list): + if logger: + logger.warning(f"Node '{node_name}': 'edges' field must be a list, got {type(edges).__name__}") + continue + + for edge_idx, edge in enumerate(edges): + # Validate edge structure + if not isinstance(edge, dict): + if logger: + logger.warning(f"Node '{node_name}': Skipping edge at index {edge_idx}: Expected dictionary") + continue + + if 'edge_id' not in edge: + if logger: + logger.warning(f"Node '{node_name}': Skipping edge at index {edge_idx}: Missing 'edge_id'") + continue + + if 'node' not in edge: + if logger: + logger.warning(f"Node '{node_name}': Skipping edge '{edge.get('edge_id', 'unknown')}': Missing target 'node'") + continue + + if 'action' not in edge: + if logger: + logger.warning(f"Node '{node_name}': Skipping edge '{edge['edge_id']}': Missing 'action'") + continue + + target_node = edge['node'] + + # Extract edge attributes + edge_props = edge.get('properties', {}) + if not isinstance(edge_props, dict): + if logger: + logger.warning(f"Node '{node_name}': Edge '{edge['edge_id']}': 'properties' must be a dictionary, using empty dict") + edge_props = {} + + try: + edge_attrs = { + 'edge_id': edge['edge_id'], + 'action': edge['action'], + 'action_type': edge.get('action_type', ''), + 'properties': edge_props, + 'weight': float(edge_props.get('weight', 1.0)) # Default weight for shortest path + } + except (ValueError, TypeError) as e: + if logger: + logger.warning(f"Node '{node_name}': Edge '{edge['edge_id']}': Error converting weight to float: {e}, using default 1.0") + edge_attrs = { + 'edge_id': edge['edge_id'], + 'action': edge['action'], + 'action_type': edge.get('action_type', ''), + 'properties': edge_props, + 'weight': 1.0 + } + + # Add edge to graph + G.add_edge(node_name, target_node, **edge_attrs) + + # Check if graph has any nodes + if G.number_of_nodes() == 0: + if logger: + logger.error("Invalid map data: No valid nodes found in map") + return None + + return G + + except Exception as e: + # Catch any unexpected errors + if logger: + logger.error(f"Unexpected error building graph from map data: {e}") + return None + + +def build_kdtree_from_graph(graph: Optional[nx.DiGraph], logger=None) -> Tuple[Optional[KDTree], List[str]]: + """ + Build KD-tree spatial index from node positions in NetworkX graph. + + This function extracts 2D coordinates (x, y) from all nodes in the graph + and constructs a scipy.spatial.KDTree for efficient O(log n) nearest + neighbor spatial queries. The KD-tree enables fast localization by quickly + finding the closest nodes to the robot's current position. + + The function returns both the KD-tree and a list of node names in the same + order as the points in the tree, allowing efficient mapping from KD-tree + query results back to node names. + + Args: + graph: NetworkX DiGraph with node position attributes ('x', 'y'). + Can be None or empty, in which case (None, []) is returned. + logger: Optional ROS 2 logger for warning/error messages. + + Returns: + Tuple of (kdtree, node_names) where: + - kdtree: scipy.spatial.KDTree for spatial queries, or None if graph is empty/invalid + - node_names: List of node names in same order as kdtree points (empty list if no tree) + + Performance: + - Construction: O(n log n) where n is number of nodes + - Memory: O(n) for storing 2D points + - Query: O(log n) average case for nearest neighbor search + + Example: + >>> import networkx as nx + >>> G = nx.DiGraph() + >>> G.add_node('WP1', x=0.0, y=0.0, z=0.0) + >>> G.add_node('WP2', x=5.0, y=0.0, z=0.0) + >>> G.add_node('WP3', x=5.0, y=5.0, z=0.0) + >>> kdtree, node_names = build_kdtree_from_graph(G) + >>> # Query nearest neighbor to point (2.5, 0.0) + >>> distances, indices = kdtree.query([[2.5, 0.0]], k=1) + >>> closest_node = node_names[indices[0][0]] + >>> print(f"Closest node: {closest_node}") # 'WP1' + + Edge Cases: + - None graph: Returns (None, []) + - Empty graph: Returns (None, []) + - Single node: Returns valid KDTree with one point + - Missing 'x' or 'y' attributes: Node is skipped with warning + + Raises: + No exceptions are raised. Invalid input returns (None, []). + + Requirements: + Validates: Requirements 2.1, 2.2, 2.5, 15.2, 15.3 + - 2.1: Build KD-tree index from node positions + - 2.2: Store 2D coordinates (x, y) for each node + - 2.5: Rebuild KD-tree when map is updated + - 15.2: Comprehensive docstrings with parameter descriptions + - 15.3: Type hints for parameters and return values + """ + # Handle None or empty graph + if graph is None: + if logger: + logger.debug("Cannot build KD-tree: graph is None") + return None, [] + + if graph.number_of_nodes() == 0: + if logger: + logger.debug("Cannot build KD-tree: graph has no nodes") + return None, [] + + # Extract 2D coordinates and node names + points = [] + node_names = [] + + for node_name in graph.nodes(): + node_attrs = graph.nodes[node_name] + + # Validate required attributes + if 'x' not in node_attrs or 'y' not in node_attrs: + if logger: + logger.warning( + f"Skipping node '{node_name}' in KD-tree construction: " + f"Missing required 'x' or 'y' coordinate" + ) + continue + + try: + # Extract 2D coordinates (x, y only, z is not used for spatial indexing) + x = float(node_attrs['x']) + y = float(node_attrs['y']) + + points.append([x, y]) + node_names.append(node_name) + + except (ValueError, TypeError) as e: + if logger: + logger.warning( + f"Skipping node '{node_name}' in KD-tree construction: " + f"Invalid coordinate values: {e}" + ) + continue + + # Check if we have any valid points + if len(points) == 0: + if logger: + logger.error( + "Cannot build KD-tree: No nodes with valid 'x' and 'y' coordinates found" + ) + return None, [] + + # Build KD-tree from 2D points + try: + kdtree = KDTree(np.array(points)) + + if logger: + logger.debug( + f"Built KD-tree with {len(node_names)} nodes for efficient spatial queries" + ) + + return kdtree, node_names + + except Exception as e: + if logger: + logger.error(f"Failed to build KD-tree: {e}") + return None, [] + + +def query_nearest_nodes(kdtree: Optional[KDTree], node_names: List[str], pose, k: int = 3) -> List[Dict[str, Any]]: + """ + Query k-nearest nodes to a pose using KD-tree spatial index. + + This function performs efficient O(log n) nearest neighbor search using + a pre-built KD-tree to find the k closest nodes to a given robot pose. + Results are returned as a sorted list of dictionaries containing node + names and their Euclidean distances from the query pose. + + The function handles both single nearest neighbor queries (k=1) and + k-nearest neighbors queries (k>1), automatically adjusting for edge + cases where k exceeds the number of available nodes. + + Args: + kdtree: scipy.spatial.KDTree built from node positions. + Can be None, in which case an empty list is returned. + node_names: List of node names corresponding to kdtree points. + Must be in the same order as points used to build kdtree. + Can be empty, in which case an empty list is returned. + pose: geometry_msgs.msg.Pose object with position attributes. + Only position.x and position.y are used for 2D spatial query. + k: Number of nearest neighbors to return (default: 3). + If k > number of nodes, returns all nodes. + Must be >= 1. + + Returns: + List of dictionaries sorted by distance (ascending): + [ + {'node': str, 'dist': float}, # Closest node + {'node': str, 'dist': float}, # 2nd closest + ... + ] + Returns empty list if kdtree is None, node_names is empty, or k < 1. + + Performance: + - Time: O(log n) for k=1, O(k log n) for k>1 where n is number of nodes + - Space: O(k) for storing results + - Query point: 2D coordinates (x, y) extracted from pose + + Example: + >>> from scipy.spatial import KDTree + >>> import numpy as np + >>> from geometry_msgs.msg import Pose + >>> + >>> # Build KD-tree + >>> points = np.array([[0.0, 0.0], [5.0, 0.0], [5.0, 5.0]]) + >>> node_names = ['WP1', 'WP2', 'WP3'] + >>> kdtree = KDTree(points) + >>> + >>> # Create query pose + >>> pose = Pose() + >>> pose.position.x = 2.5 + >>> pose.position.y = 0.0 + >>> + >>> # Query 3 nearest nodes + >>> results = query_nearest_nodes(kdtree, node_names, pose, k=3) + >>> print(results) + [{'node': 'WP1', 'dist': 2.5}, {'node': 'WP2', 'dist': 2.5}, {'node': 'WP3', 'dist': 5.59}] + >>> + >>> # Query single nearest node + >>> results = query_nearest_nodes(kdtree, node_names, pose, k=1) + >>> print(results[0]['node']) # 'WP1' or 'WP2' (both equidistant) + + Edge Cases: + - kdtree is None: Returns [] + - node_names is empty: Returns [] + - k < 1: Returns [] + - k > len(node_names): Returns all nodes sorted by distance + - k = 1: Returns single-element list (handles scipy's different return format) + - Multiple nodes at same distance: Order is determined by KD-tree implementation + + Raises: + No exceptions are raised. Invalid input returns empty list. + + Requirements: + Validates: Requirements 2.3, 2.4, 4.1, 4.2, 4.3, 15.2, 15.3 + - 2.3: Use KD-tree nearest neighbor search for closest node queries + - 2.4: KD-tree query returns results in O(log n) average time + - 4.1: Calculate distance to closest node using KD-tree + - 4.2: Calculate distances to multiple nodes using k-nearest neighbors + - 4.3: Sort nodes by distance in ascending order + - 15.2: Comprehensive docstrings with parameter descriptions + - 15.3: Type hints for parameters and return values + """ + # Validate inputs + if kdtree is None: + return [] + + if not node_names or len(node_names) == 0: + return [] + + if k < 1: + return [] + + # Limit k to available nodes + k_actual = min(k, len(node_names)) + + # Extract 2D query point from pose + query_point = np.array([[pose.position.x, pose.position.y]]) + + try: + # Query k-nearest neighbors from KD-tree + distances, indices = kdtree.query(query_point, k=k_actual) + + # Ensure distances and indices are 1-D arrays. + # scipy returns shape (1,) for k=1 and shape (1, k) for k>1 + # when query_point has shape (1, 2). + distances = np.atleast_1d(distances).flatten() + indices = np.atleast_1d(indices).flatten() + + # Build result list with node names and distances + results = [] + for dist, idx in zip(distances, indices): + results.append({ + 'node': node_names[int(idx)], + 'dist': float(dist) + }) + + # Results are already sorted by distance (KD-tree returns sorted results) + return results + + except Exception as e: + # Handle any unexpected errors from KD-tree query + # This should rarely happen with valid inputs + return [] + + + +def compute_shortest_path(graph: Optional[nx.DiGraph], source: str, target: str, + weight: str = 'weight', logger=None) -> List[str]: + """ + Compute shortest path between two nodes using Dijkstra's algorithm. + + This function uses NetworkX's dijkstra_path implementation to find the + optimal path between source and target nodes in a weighted directed graph. + The algorithm guarantees the shortest path for graphs with non-negative + edge weights. + + The function is a wrapper around networkx.dijkstra_path that provides + consistent error handling and logging for the topological navigation system. + + Args: + graph: NetworkX DiGraph representing the topological map. + Can be None, in which case an empty list is returned. + source: Source node name (starting point of path). + Must exist in the graph. + target: Target node name (destination of path). + Must exist in the graph. + weight: Edge attribute to use as weight for path computation (default: 'weight'). + If an edge doesn't have this attribute, weight of 1.0 is assumed. + logger: Optional ROS 2 logger for warning/error messages. + + Returns: + List of node names representing the shortest path from source to target, + including both source and target nodes. Returns empty list if: + - graph is None or empty + - source or target node doesn't exist + - no path exists between source and target + + Performance: + - Time: O((V + E) log V) using binary heap, where V is vertices, E is edges + - Space: O(V) for storing distances and predecessors + - Algorithm: Dijkstra's shortest path algorithm + + Example: + >>> import networkx as nx + >>> G = nx.DiGraph() + >>> G.add_edge('A', 'B', weight=1.0) + >>> G.add_edge('B', 'C', weight=2.0) + >>> G.add_edge('A', 'C', weight=5.0) + >>> path = compute_shortest_path(G, 'A', 'C') + >>> print(path) # ['A', 'B', 'C'] (total weight: 3.0) + >>> + >>> # No path exists + >>> G.add_node('D') # Isolated node + >>> path = compute_shortest_path(G, 'A', 'D') + >>> print(path) # [] + + Edge Cases: + - graph is None: Returns [] + - Empty graph: Returns [] + - source == target: Returns [source] + - source not in graph: Returns [] + - target not in graph: Returns [] + - No path exists: Returns [] (logs warning if logger provided) + - Missing weight attribute: Uses default weight of 1.0 + + Raises: + No exceptions are raised. All errors are handled gracefully and return empty list. + + Requirements: + Validates: Requirements 3.1, 3.2, 3.3, 15.2, 15.3 + - 3.1: Use networkx.shortest_path or networkx.dijkstra_path for shortest paths + - 3.2: Check graph connectivity using NetworkX algorithms + - 3.3: Compute path lengths using networkx.shortest_path_length + - 15.2: Comprehensive docstrings with parameter descriptions + - 15.3: Type hints for parameters and return values + """ + # Validate graph + if graph is None: + if logger: + logger.debug("Cannot compute shortest path: graph is None") + return [] + + if graph.number_of_nodes() == 0: + if logger: + logger.debug("Cannot compute shortest path: graph is empty") + return [] + + # Validate source and target nodes exist + if source not in graph.nodes: + if logger: + logger.warning(f"Cannot compute shortest path: source node '{source}' not in graph") + return [] + + if target not in graph.nodes: + if logger: + logger.warning(f"Cannot compute shortest path: target node '{target}' not in graph") + return [] + + # Handle trivial case: source == target + if source == target: + return [source] + + try: + # Use Dijkstra's algorithm for weighted shortest path + path = nx.dijkstra_path(graph, source, target, weight=weight) + + if logger: + logger.debug( + f"Found shortest path from '{source}' to '{target}': " + f"{' -> '.join(path)} ({len(path)} nodes)" + ) + + return path + + except nx.NetworkXNoPath: + # No path exists between source and target + if logger: + logger.warning( + f"No path exists from '{source}' to '{target}' in the graph" + ) + return [] + + except nx.NodeNotFound as e: + # This shouldn't happen since we check above, but handle it anyway + if logger: + logger.error(f"Node not found during path computation: {e}") + return [] + + except Exception as e: + # Catch any unexpected errors + if logger: + logger.error(f"Unexpected error computing shortest path: {e}") + return [] + + +def compute_path_length(graph: Optional[nx.DiGraph], source: str, target: str, + weight: str = 'weight', logger=None) -> float: + """ + Compute shortest path length between two nodes using Dijkstra's algorithm. + + This function uses NetworkX's dijkstra_path_length implementation to + calculate the total weight (length) of the shortest path between source + and target nodes without computing the actual path. This is more efficient + than compute_shortest_path() when only the distance is needed. + + Args: + graph: NetworkX DiGraph representing the topological map. + Can be None, in which case infinity is returned. + source: Source node name (starting point). + Must exist in the graph. + target: Target node name (destination). + Must exist in the graph. + weight: Edge attribute to use as weight for path computation (default: 'weight'). + If an edge doesn't have this attribute, weight of 1.0 is assumed. + logger: Optional ROS 2 logger for warning/error messages. + + Returns: + float: Total weight (length) of the shortest path from source to target. + Returns float('inf') if: + - graph is None or empty + - source or target node doesn't exist + - no path exists between source and target + + Performance: + - Time: O((V + E) log V) using binary heap, where V is vertices, E is edges + - Space: O(V) for storing distances + - Algorithm: Dijkstra's shortest path algorithm (length only, no path reconstruction) + - More efficient than compute_shortest_path() when path is not needed + + Example: + >>> import networkx as nx + >>> G = nx.DiGraph() + >>> G.add_edge('A', 'B', weight=1.5) + >>> G.add_edge('B', 'C', weight=2.5) + >>> G.add_edge('A', 'C', weight=5.0) + >>> length = compute_path_length(G, 'A', 'C') + >>> print(length) # 4.0 (via B: 1.5 + 2.5) + >>> + >>> # No path exists + >>> G.add_node('D') # Isolated node + >>> length = compute_path_length(G, 'A', 'D') + >>> print(length) # inf + + Edge Cases: + - graph is None: Returns inf + - Empty graph: Returns inf + - source == target: Returns 0.0 + - source not in graph: Returns inf + - target not in graph: Returns inf + - No path exists: Returns inf (logs warning if logger provided) + - Missing weight attribute: Uses default weight of 1.0 + + Raises: + No exceptions are raised. All errors are handled gracefully and return infinity. + + Requirements: + Validates: Requirements 3.1, 3.3, 15.2, 15.3 + - 3.1: Use NetworkX algorithms for graph operations + - 3.3: Compute path lengths using networkx.shortest_path_length + - 15.2: Comprehensive docstrings with parameter descriptions + - 15.3: Type hints for parameters and return values + """ + # Validate graph + if graph is None: + if logger: + logger.debug("Cannot compute path length: graph is None") + return float('inf') + + if graph.number_of_nodes() == 0: + if logger: + logger.debug("Cannot compute path length: graph is empty") + return float('inf') + + # Validate source and target nodes exist + if source not in graph.nodes: + if logger: + logger.warning(f"Cannot compute path length: source node '{source}' not in graph") + return float('inf') + + if target not in graph.nodes: + if logger: + logger.warning(f"Cannot compute path length: target node '{target}' not in graph") + return float('inf') + + # Handle trivial case: source == target + if source == target: + return 0.0 + + try: + # Use Dijkstra's algorithm to compute path length + length = nx.dijkstra_path_length(graph, source, target, weight=weight) + + if logger: + logger.debug( + f"Shortest path length from '{source}' to '{target}': {length:.2f}" + ) + + return float(length) + + except nx.NetworkXNoPath: + # No path exists between source and target + if logger: + logger.warning( + f"No path exists from '{source}' to '{target}' in the graph" + ) + return float('inf') + + except nx.NodeNotFound as e: + # This shouldn't happen since we check above, but handle it anyway + if logger: + logger.error(f"Node not found during path length computation: {e}") + return float('inf') + + except Exception as e: + # Catch any unexpected errors + if logger: + logger.error(f"Unexpected error computing path length: {e}") + return float('inf') + + +def check_connectivity(graph: Optional[nx.DiGraph], source: str, target: str, logger=None) -> bool: + """ + Check if a path exists between two nodes in a directed graph. + + This function uses NetworkX's has_path implementation to determine whether + there is any directed path from source to target. This is more efficient + than computing the actual path when only connectivity information is needed. + + Note: For directed graphs, connectivity is not symmetric. A path from A to B + does not imply a path from B to A. + + Args: + graph: NetworkX DiGraph representing the topological map. + Can be None, in which case False is returned. + source: Source node name (starting point). + Must exist in the graph. + target: Target node name (destination). + Must exist in the graph. + logger: Optional ROS 2 logger for warning/error messages. + + Returns: + bool: True if a directed path exists from source to target, False otherwise. + Returns False if: + - graph is None or empty + - source or target node doesn't exist + - no path exists between source and target + + Performance: + - Time: O(V + E) using breadth-first search, where V is vertices, E is edges + - Space: O(V) for visited set + - Algorithm: BFS-based reachability check + - More efficient than computing full shortest path + + Example: + >>> import networkx as nx + >>> G = nx.DiGraph() + >>> G.add_edge('A', 'B') + >>> G.add_edge('B', 'C') + >>> + >>> # Path exists A -> B -> C + >>> print(check_connectivity(G, 'A', 'C')) # True + >>> + >>> # No reverse path (directed graph) + >>> print(check_connectivity(G, 'C', 'A')) # False + >>> + >>> # Isolated node + >>> G.add_node('D') + >>> print(check_connectivity(G, 'A', 'D')) # False + >>> + >>> # Same node + >>> print(check_connectivity(G, 'A', 'A')) # True + + Edge Cases: + - graph is None: Returns False + - Empty graph: Returns False + - source == target: Returns True (node is reachable from itself) + - source not in graph: Returns False + - target not in graph: Returns False + - Disconnected components: Returns False if nodes in different components + + Raises: + No exceptions are raised. All errors are handled gracefully and return False. + + Requirements: + Validates: Requirements 3.2, 3.5, 15.2, 15.3 + - 3.2: Check graph connectivity using networkx.is_connected or networkx.has_path + - 3.5: Use networkx.neighbors() for finding adjacent nodes + - 15.2: Comprehensive docstrings with parameter descriptions + - 15.3: Type hints for parameters and return values + """ + # Validate graph + if graph is None: + if logger: + logger.debug("Cannot check connectivity: graph is None") + return False + + if graph.number_of_nodes() == 0: + if logger: + logger.debug("Cannot check connectivity: graph is empty") + return False + + # Validate source and target nodes exist + if source not in graph.nodes: + if logger: + logger.warning(f"Cannot check connectivity: source node '{source}' not in graph") + return False + + if target not in graph.nodes: + if logger: + logger.warning(f"Cannot check connectivity: target node '{target}' not in graph") + return False + + # Handle trivial case: source == target + if source == target: + return True + + try: + # Use NetworkX has_path for efficient connectivity check + has_path = nx.has_path(graph, source, target) + + if logger: + logger.debug( + f"Connectivity check from '{source}' to '{target}': " + f"{'connected' if has_path else 'not connected'}" + ) + + return has_path + + except nx.NodeNotFound as e: + # This shouldn't happen since we check above, but handle it anyway + if logger: + logger.error(f"Node not found during connectivity check: {e}") + return False + + except Exception as e: + # Catch any unexpected errors + if logger: + logger.error(f"Unexpected error checking connectivity: {e}") + return False + + +def get_neighbors(graph: Optional[nx.DiGraph], node: str, logger=None) -> List[str]: + """ + Get all neighboring nodes connected by outgoing edges from a given node. + + This function uses NetworkX's neighbors() method to retrieve all nodes + that are directly reachable from the specified node via outgoing edges. + For directed graphs, this returns only successors (nodes pointed to by + outgoing edges), not predecessors. + + Args: + graph: NetworkX DiGraph representing the topological map. + Can be None, in which case an empty list is returned. + node: Node name to get neighbors for. + Must exist in the graph. + logger: Optional ROS 2 logger for warning/error messages. + + Returns: + List[str]: List of neighbor node names (successors) reachable via + outgoing edges from the specified node. Returns empty list if: + - graph is None or empty + - node doesn't exist in graph + - node has no outgoing edges + + Performance: + - Time: O(k) where k is the number of neighbors (out-degree of node) + - Space: O(k) for storing neighbor list + - Efficient for sparse graphs (typical in topological maps) + + Example: + >>> import networkx as nx + >>> G = nx.DiGraph() + >>> G.add_edge('A', 'B') + >>> G.add_edge('A', 'C') + >>> G.add_edge('B', 'C') + >>> + >>> # Get neighbors of A + >>> neighbors = get_neighbors(G, 'A') + >>> print(sorted(neighbors)) # ['B', 'C'] + >>> + >>> # Get neighbors of C (no outgoing edges) + >>> neighbors = get_neighbors(G, 'C') + >>> print(neighbors) # [] + >>> + >>> # Directed graph: B's neighbors don't include A + >>> neighbors = get_neighbors(G, 'B') + >>> print(neighbors) # ['C'] + + Edge Cases: + - graph is None: Returns [] + - Empty graph: Returns [] + - node not in graph: Returns [] (logs warning if logger provided) + - node has no outgoing edges: Returns [] + - Self-loops: If node has edge to itself, includes itself in neighbors + + Use Cases: + - Finding directly reachable nodes for navigation planning + - Exploring local graph structure around current position + - Validating edge connectivity during map updates + - Building adjacency lists for custom graph algorithms + + Raises: + No exceptions are raised. All errors are handled gracefully and return empty list. + + Requirements: + Validates: Requirements 3.5, 15.2, 15.3 + - 3.5: Use networkx.neighbors() for finding adjacent nodes + - 15.2: Comprehensive docstrings with parameter descriptions + - 15.3: Type hints for parameters and return values + """ + # Validate graph + if graph is None: + if logger: + logger.debug("Cannot get neighbors: graph is None") + return [] + + if graph.number_of_nodes() == 0: + if logger: + logger.debug("Cannot get neighbors: graph is empty") + return [] + + # Validate node exists + if node not in graph.nodes: + if logger: + logger.warning(f"Cannot get neighbors: node '{node}' not in graph") + return [] + + try: + # Use NetworkX neighbors() to get all successor nodes + # For DiGraph, this returns nodes reachable via outgoing edges + neighbors = list(graph.neighbors(node)) + + if logger: + logger.debug( + f"Node '{node}' has {len(neighbors)} neighbor(s): " + f"{', '.join(neighbors) if neighbors else 'none'}" + ) + + return neighbors + + except nx.NetworkXError as e: + # Handle any NetworkX-specific errors + if logger: + logger.error(f"NetworkX error getting neighbors for node '{node}': {e}") + return [] + + except Exception as e: + # Catch any unexpected errors + if logger: + logger.error(f"Unexpected error getting neighbors for node '{node}': {e}") + return [] + + +def point_in_poly_nx(graph: Optional[nx.DiGraph], node_name: str, pose) -> bool: + """ + Check if a pose is inside a node's influence zone polygon using ray-casting algorithm. + + This function implements the ray-casting algorithm for point-in-polygon testing. + It checks if a robot pose is within a node's influence zone by casting a horizontal + ray from the point and counting intersections with polygon edges. An odd number of + intersections means the point is inside the polygon. + + The pose coordinates are transformed to node-relative coordinates before testing, + allowing influence zones to be defined relative to the node's position. + + Args: + graph: NetworkX DiGraph with node attributes including 'x', 'y', and 'verts'. + Can be None, in which case False is returned. + node_name: Name of the node to check. + Must exist in the graph. + pose: geometry_msgs.msg.Pose object with position attributes. + Only position.x and position.y are used for 2D polygon check. + + Returns: + bool: True if pose is inside the node's influence zone polygon, False otherwise. + Returns False if: + - graph is None or empty + - node doesn't exist in graph + - node missing 'x' or 'y' attributes + - node has empty 'verts' list (no influence zone defined) + + Algorithm: + Ray-casting algorithm: + 1. Transform pose to node-relative coordinates + 2. Cast horizontal ray from point to infinity + 3. Count intersections with polygon edges + 4. Odd count = inside, even count = outside + + Time Complexity: O(n) where n is number of polygon vertices + Space Complexity: O(1) + + Example: + >>> import networkx as nx + >>> from geometry_msgs.msg import Pose + >>> + >>> # Create graph with square influence zone + >>> G = nx.DiGraph() + >>> G.add_node('WP1', x=0.0, y=0.0, z=0.0, verts=[ + ... {'x': -1.0, 'y': -1.0}, + ... {'x': 1.0, 'y': -1.0}, + ... {'x': 1.0, 'y': 1.0}, + ... {'x': -1.0, 'y': 1.0} + ... ]) + >>> + >>> # Test point inside square + >>> pose = Pose() + >>> pose.position.x = 0.5 + >>> pose.position.y = 0.5 + >>> print(point_in_poly_nx(G, 'WP1', pose)) # True + >>> + >>> # Test point outside square + >>> pose.position.x = 2.0 + >>> pose.position.y = 2.0 + >>> print(point_in_poly_nx(G, 'WP1', pose)) # False + + Edge Cases: + - graph is None: Returns False + - Empty graph: Returns False + - node not in graph: Returns False + - Empty verts list: Returns False (no polygon to be inside) + - Point on polygon boundary: May return True or False (implementation dependent) + - Degenerate polygon (< 3 vertices): Returns False + - Self-intersecting polygon: Behavior follows ray-casting algorithm + + Requirements: + Validates: Requirements 7.1, 7.2, 7.3, 7.4, 7.5, 15.2, 15.3 + - 7.1: Use ray-casting algorithm for point-in-polygon detection + - 7.2: Transform pose coordinates relative to node position + - 7.3: Check all n edges for ray intersections + - 7.4: Handle edge cases including points on boundaries + - 7.5: Return true when inside, false otherwise + - 15.2: Comprehensive docstrings with parameter descriptions + - 15.3: Type hints for parameters and return values + """ + # Validate graph + if graph is None: + return False + + if graph.number_of_nodes() == 0: + return False + + # Check if node exists + if node_name not in graph.nodes: + return False + + node_attrs = graph.nodes[node_name] + + # Check required attributes + if 'x' not in node_attrs or 'y' not in node_attrs: + return False + + # Get influence zone vertices + verts = node_attrs.get('verts', []) + + # Empty polygon - point cannot be inside + if not verts or len(verts) == 0: + return False + + # Transform pose to node-relative coordinates + x = pose.position.x - node_attrs['x'] + y = pose.position.y - node_attrs['y'] + + # Ray-casting algorithm + n = len(verts) + inside = False + + p1x = verts[0]['x'] + p1y = verts[0]['y'] + + for i in range(n + 1): + p2x = verts[i % n]['x'] + p2y = verts[i % n]['y'] + + # Check if horizontal ray from point intersects this edge + if y > min(p1y, p2y): + if y <= max(p1y, p2y): + if x <= max(p1x, p2x): + if p1y != p2y: + xints = (y - p1y) * (p2x - p1x) / (p2y - p1y) + p1x + if p1x == p2x or x <= xints: + inside = not inside + + p1x, p1y = p2x, p2y + + return inside + + +# ============================================================================== +# Point-to-line-segment distance (vectorized) +# ============================================================================== + +def _pnt2line( + pnt: np.ndarray, + start: np.ndarray, + end: np.ndarray, +) -> np.ndarray: + """Vectorized perpendicular distance from points to line segments. + + All three arguments are ``(N, 3)`` arrays. Returns an ``(N,)`` + array of distances from each point to the corresponding segment. + + The projection parameter *t* is clamped to ``[0, 1]`` so the + result is the distance to the *segment*, not the infinite line. + + Args: + pnt: Array of query points, shape ``(N, 3)``. + start: Segment start points, shape ``(N, 3)``. + end: Segment end points, shape ``(N, 3)``. + + Returns: + 1-D array of Euclidean distances, shape ``(N,)``. + """ + line_vec = end - start + pnt_vec = pnt - start + + line_len = np.linalg.norm(line_vec, axis=1, keepdims=True) + line_unitvec = line_vec / line_len + pnt_vec_scaled = pnt_vec / line_len + + # Projection parameter clamped to [0, 1] + t = np.sum(line_unitvec * pnt_vec_scaled, axis=1) + t = np.clip(t, 0.0, 1.0) + + nearest = line_vec * t[:, np.newaxis] + diff = nearest - pnt_vec + return np.linalg.norm(diff, axis=1) + + +def get_edge_distances_nx(graph: Optional[nx.DiGraph], pose, logger=None) -> Tuple[List[str], np.ndarray]: + """ + Calculate perpendicular distances from pose to all edges using vectorized operations. + + This function computes the perpendicular distance from a robot pose to each edge + in the topological graph. It uses vectorized numpy operations for efficiency and + the existing pnt2line function for distance calculations. Results are sorted by + distance in ascending order. + + Self-loop edges (where source == destination) are skipped with error logging, + as they don't represent valid navigable paths. + + Args: + graph: NetworkX DiGraph with node position attributes ('x', 'y'). + Can be None, in which case empty results are returned. + pose: geometry_msgs.msg.Pose object with position attributes. + Only position.x and position.y are used (z is set to 0). + logger: Optional ROS 2 logger for error/warning messages. + + Returns: + Tuple of (edge_ids, distances) where: + - edge_ids: List of edge IDs sorted by distance (ascending) + - distances: numpy array of distances corresponding to edge_ids + Returns ([], np.array([])) if: + - graph is None or has no edges + - all edges are invalid (self-loops or missing data) + - distance calculation fails + + Performance: + - Time: O(m) where m is number of edges (vectorized operations) + - Space: O(m) for storing edge vectors and distances + - Uses numpy vectorization for batch distance calculations + + Example: + >>> import networkx as nx + >>> import numpy as np + >>> from geometry_msgs.msg import Pose + >>> + >>> # Create graph with edges + >>> G = nx.DiGraph() + >>> G.add_node('A', x=0.0, y=0.0, z=0.0) + >>> G.add_node('B', x=5.0, y=0.0, z=0.0) + >>> G.add_node('C', x=5.0, y=5.0, z=0.0) + >>> G.add_edge('A', 'B', edge_id='AB') + >>> G.add_edge('B', 'C', edge_id='BC') + >>> + >>> # Calculate distances from pose + >>> pose = Pose() + >>> pose.position.x = 2.5 + >>> pose.position.y = 1.0 + >>> edge_ids, distances = get_edge_distances_nx(G, pose) + >>> print(edge_ids) # ['AB', 'BC'] (sorted by distance) + >>> print(distances) # [1.0, ...] (perpendicular distances) + + Edge Cases: + - graph is None: Returns ([], np.array([])) + - Empty graph: Returns ([], np.array([])) + - No edges: Returns ([], np.array([])) + - Self-loop edges: Skipped with error log + - Missing position data: Edge skipped + - Equal distances: Sorted by edge_id alphabetically (stable sort) + + Error Handling: + - Self-loop edges (u == v): Logged as error, skipped + - Missing 'x' or 'y' attributes: Edge skipped silently + - pnt2line exception: Returns empty results with warning + + Requirements: + Validates: Requirements 4.6, 4.7, 11.1, 11.2, 11.4, 15.2, 15.3 + - 4.6: Use vectorized numpy operations for edge distances + - 4.7: Compute perpendicular distance from pose to edge line segments + - 11.1: Calculate perpendicular distance from robot pose to each edge + - 11.2: Use vectorized numpy operations for efficiency + - 11.4: Log error and skip self-loop edges + - 15.2: Comprehensive docstrings with parameter descriptions + - 15.3: Type hints for parameters and return values + """ + + # Validate graph + if graph is None: + return [], np.array([]) + + if graph.number_of_edges() == 0: + return [], np.array([]) + + edge_ids = [] + vectors_start = [] + vectors_end = [] + + # Build edge vectors from graph + for u, v, edge_data in graph.edges(data=True): + # Skip self-loop edges + if u == v: + if logger: + logger.error( + f"Cannot get distance to edge {edge_data.get('edge_id', 'unknown')}: " + f"Destination is equal to origin" + ) + continue + + u_attrs = graph.nodes[u] + v_attrs = graph.nodes[v] + + # Skip edges with missing position data + if 'x' not in u_attrs or 'y' not in u_attrs: + continue + if 'x' not in v_attrs or 'y' not in v_attrs: + continue + + edge_ids.append(edge_data.get('edge_id', f"{u}_{v}")) + vectors_start.append([u_attrs['x'], u_attrs['y'], 0]) + vectors_end.append([v_attrs['x'], v_attrs['y'], 0]) + + if len(edge_ids) == 0: + return [], np.array([]) + + # Convert to numpy arrays for vectorized operations + vectors_start = np.array(vectors_start) + vectors_end = np.array(vectors_end) + + # Create array of pose points (one for each edge) + pose_points = np.array(len(edge_ids) * [[pose.position.x, pose.position.y, 0]]) + + # Calculate perpendicular distances using vectorized operation + try: + distances = _pnt2line(pose_points, vectors_start, vectors_end) + except Exception as e: + if logger: + logger.warning(f"Cannot calculate distance to edges: {e}") + return [], np.array([]) + + # Sort by distance + sorted_indices = np.argsort(distances) + sorted_edge_ids = [edge_ids[i] for i in sorted_indices] + sorted_distances = distances[sorted_indices] + + return sorted_edge_ids, sorted_distances + + + +def update_loc_by_topic_nx(graph: Optional[nx.DiGraph], logger=None) -> Tuple[List[Dict[str, Any]], List[str]]: + """ + Extract and parse localise_by_topic configuration from NetworkX graph. + + This function scans all nodes in the graph for localise_by_topic configuration + strings, parses them as JSON, and returns structured configuration data. This + enables topic-based localization where nodes can be activated by ROS 2 topic + messages instead of geometric position checks. + + The function sets default values for missing configuration fields and handles + JSON parsing errors gracefully by logging warnings and skipping invalid nodes. + + Args: + graph: NetworkX DiGraph with node attributes including 'localise_by_topic'. + Can be None, in which case empty results are returned. + logger: Optional ROS 2 logger for warning/error messages. + + Returns: + Tuple of (nodes_by_topic, names_by_topic) where: + - nodes_by_topic: List of configuration dictionaries with structure: + { + 'name': str, # Node name (added by this function) + 'topic': str, # ROS 2 topic to subscribe to + 'msg_type': str, # Message type + 'localise_anywhere': bool, # True = no influence zone check (default: True) + 'persistency': int, # How long to persist (default: 10) + ... (other user-defined fields) + } + - names_by_topic: List of node names that have topic-based localization + Returns ([], []) if graph is None or has no nodes with valid config. + + JSON Configuration Format: + Node attribute 'localise_by_topic' should contain JSON string: + { + "topic": "/my_topic", + "msg_type": "std_msgs/String", + "localise_anywhere": true, + "persistency": 10 + } + + Default Values: + - localise_anywhere: true (if not specified) + - persistency: 10 (if not specified) + + Example: + >>> import networkx as nx + >>> import json + >>> + >>> # Create graph with topic-based localization + >>> G = nx.DiGraph() + >>> config = { + ... "topic": "/docking_station", + ... "msg_type": "std_msgs/Bool", + ... "localise_anywhere": False, + ... "persistency": 5 + ... } + >>> G.add_node('Dock', x=0.0, y=0.0, localise_by_topic=json.dumps(config)) + >>> G.add_node('WP1', x=5.0, y=0.0, localise_by_topic='') + >>> + >>> nodes, names = update_loc_by_topic_nx(G) + >>> print(names) # ['Dock'] + >>> print(nodes[0]['name']) # 'Dock' + >>> print(nodes[0]['localise_anywhere']) # False + + Edge Cases: + - graph is None: Returns ([], []) + - Empty graph: Returns ([], []) + - No nodes with localise_by_topic: Returns ([], []) + - Empty localise_by_topic string: Node skipped + - Invalid JSON: Node skipped with warning + - Non-dict JSON: Node skipped with warning + - Missing optional fields: Default values used + + Error Handling: + - JSON parsing errors: Logged as warning, node skipped + - Non-dictionary JSON: Logged as warning, node skipped + - Missing required fields: Node included with defaults + + Requirements: + Validates: Requirements 5.2, 5.3, 5.4, 17.5, 15.2, 15.3 + - 5.2: Prioritize topic-based localization over geometric + - 5.3: Handle localise_anywhere flag + - 5.4: Verify influence zone when localise_anywhere is false + - 17.5: Handle JSON parsing errors gracefully + - 15.2: Comprehensive docstrings with parameter descriptions + - 15.3: Type hints for parameters and return values + """ + # Validate graph + if graph is None: + return [], [] + + if graph.number_of_nodes() == 0: + return [], [] + + nodes_by_topic = [] + names_by_topic = [] + + for node_name in graph.nodes(): + node_attrs = graph.nodes[node_name] + loc_by_topic_str = node_attrs.get('localise_by_topic', '') + + # Skip nodes without localise_by_topic configuration + if not loc_by_topic_str: + continue + + try: + # Parse JSON configuration + config = json.loads(loc_by_topic_str) + + # Validate that config is a dictionary + if not isinstance(config, dict): + if logger: + logger.warning( + f"Invalid localise_by_topic for node {node_name}: " + f"Expected JSON object, got {type(config).__name__}" + ) + continue + + # Add node name to configuration + config['name'] = node_name + + # Set default values for optional fields + if 'localise_anywhere' not in config: + config['localise_anywhere'] = True + if 'persistency' not in config: + config['persistency'] = 10 + + nodes_by_topic.append(config) + names_by_topic.append(node_name) + + except json.JSONDecodeError as e: + if logger: + logger.warning( + f"Invalid JSON in localise_by_topic for node {node_name}: {e}" + ) + continue + + return nodes_by_topic, names_by_topic + + + +def determine_current_node(graph: Optional[nx.DiGraph], kdtree: Optional[KDTree], + node_names: List[str], pose, loc_by_topic: List[Dict[str, Any]], + nogos: List[str]) -> str: + """ + Determine current node based on influence zones and localization rules. + + This function implements the core localization logic to determine which topological + node the robot is currently within. It follows a priority-based approach: + + Priority 1: Topic-based localization (highest priority) + Priority 2: Geometric localization using KD-tree and influence zones + + For geometric localization, the function uses KD-tree to efficiently find the 3 + closest nodes, then checks their influence zones using point-in-polygon tests. + This avoids checking all nodes in the map, providing O(log n) performance. + + Args: + graph: NetworkX DiGraph with node attributes including position and influence zones. + Can be None, in which case 'none' is returned. + kdtree: scipy.spatial.KDTree for efficient spatial queries. + Can be None, in which case 'none' is returned. + node_names: List of node names corresponding to kdtree points. + Must be in same order as kdtree points. + pose: geometry_msgs.msg.Pose object with position attributes. + loc_by_topic: List of active topic-based localizations from update_loc_by_topic_nx(). + Each dict should have 'name' and 'localise_anywhere' fields. + nogos: List of no-go node names to exclude from geometric localization. + No-go nodes can only be current if robot is within their influence zone. + + Returns: + str: Current node name, or 'none' if robot is not within any influence zone. + + Algorithm: + 1. Check topic-based localization first (priority) + - If localise_anywhere=true: Return node immediately + - If localise_anywhere=false: Check influence zone + 2. Use KD-tree to find 3 closest nodes (O(log n)) + 3. For each of the 3 closest nodes: + - Skip if it's a topic-based node + - Skip if it's a no-go node + - Check if pose is within influence zone + - Return first match + 4. Return 'none' if no match found + + Performance: + - Time: O(log n + k*m) where k=3 closest nodes, m=avg polygon vertices + - Space: O(1) + - KD-tree query: O(log n) + - Point-in-polygon: O(m) per node + + Example: + >>> import networkx as nx + >>> from scipy.spatial import KDTree + >>> import numpy as np + >>> from geometry_msgs.msg import Pose + >>> + >>> # Create graph with influence zones + >>> G = nx.DiGraph() + >>> G.add_node('WP1', x=0.0, y=0.0, z=0.0, verts=[ + ... {'x': -1.0, 'y': -1.0}, {'x': 1.0, 'y': -1.0}, + ... {'x': 1.0, 'y': 1.0}, {'x': -1.0, 'y': 1.0} + ... ]) + >>> G.add_node('WP2', x=5.0, y=0.0, z=0.0, verts=[]) + >>> + >>> # Build KD-tree + >>> points = np.array([[0.0, 0.0], [5.0, 0.0]]) + >>> kdtree = KDTree(points) + >>> node_names = ['WP1', 'WP2'] + >>> + >>> # Test pose inside WP1 + >>> pose = Pose() + >>> pose.position.x = 0.5 + >>> pose.position.y = 0.5 + >>> current = determine_current_node(G, kdtree, node_names, pose, [], []) + >>> print(current) # 'WP1' + >>> + >>> # Test pose outside all zones + >>> pose.position.x = 10.0 + >>> pose.position.y = 10.0 + >>> current = determine_current_node(G, kdtree, node_names, pose, [], []) + >>> print(current) # 'none' + + Edge Cases: + - graph is None: Returns 'none' + - kdtree is None: Returns 'none' + - Empty node_names: Returns 'none' + - No influence zones defined: Returns 'none' + - Multiple nodes overlap: Returns first match from closest 3 + - Topic-based node with localise_anywhere=true: Returns immediately + - No-go nodes: Excluded from geometric search + + Requirements: + Validates: Requirements 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7, 15.2, 15.3 + - 5.1: Identify node when robot pose is within influence zone + - 5.2: Prioritize topic-based localization over geometric + - 5.3: Handle localise_anywhere=true without influence zone check + - 5.4: Verify influence zone when localise_anywhere=false + - 5.5: Return 'none' when not within any influence zone + - 5.6: Skip no-go and topic-based nodes in geometric search + - 5.7: Use KD-tree to find 3 closest nodes, check only those + - 15.2: Comprehensive docstrings with parameter descriptions + - 15.3: Type hints for parameters and return values + """ + # Validate inputs + if graph is None or kdtree is None or not node_names: + return 'none' + + # Priority 1: Check localise by topic first + for topic_loc in loc_by_topic: + node_name = topic_loc.get('name') + + if not node_name or node_name not in graph.nodes: + continue + + if topic_loc.get('localise_anywhere', True): + # Localise anywhere - no influence zone check needed + return node_name + else: + # Check influence zone + if point_in_poly_nx(graph, node_name, pose): + return node_name + + # Priority 2: Check geometric localization using KD-tree + # Get 3 closest nodes efficiently using KD-tree + nearest_nodes = query_nearest_nodes(kdtree, node_names, pose, k=3) + + # Extract list of topic-based node names for filtering + names_by_topic = [x.get('name') for x in loc_by_topic if 'name' in x] + + # Check up to 3 closest nodes + for node_info in nearest_nodes: + node_name = node_info['node'] + + # Skip nodes that are localise by topic + if node_name in names_by_topic: + continue + + # Skip no-go nodes + if node_name in nogos: + continue + + # Check if pose is within influence zone + if point_in_poly_nx(graph, node_name, pose): + return node_name + + # No match found + return 'none' + + + +def determine_closest_node(kdtree: Optional[KDTree], node_names: List[str], + graph: Optional[nx.DiGraph], current_node: str, + nogos: List[str], names_by_topic: List[str], pose) -> Tuple[str, float]: + """ + Determine closest node by Euclidean distance with filtering rules. + + This function finds the topologically closest node to the robot's current position + using KD-tree for efficient O(log n) spatial search. It applies filtering rules + to exclude no-go nodes and topic-based nodes unless the robot is within their + influence zones. + + The function follows these rules: + 1. If robot has a current node, that node is also the closest + 2. Otherwise, find the closest node that isn't no-go or topic-based + 3. No-go and topic-based nodes can only be closest if robot is within their zone + + Args: + kdtree: scipy.spatial.KDTree for efficient spatial queries. + Can be None, in which case ('none', inf) is returned. + node_names: List of node names corresponding to kdtree points. + Must be in same order as kdtree points. + graph: NetworkX DiGraph with node attributes (used for distance calculation). + Can be None, in which case ('none', inf) is returned. + current_node: Current node name from determine_current_node(), or 'none'. + If not 'none', this is returned as the closest node. + nogos: List of no-go node names to exclude from closest node selection. + No-go nodes can only be closest if they are the current node. + names_by_topic: List of topic-based node names to exclude from selection. + Topic-based nodes can only be closest if they are current. + pose: geometry_msgs.msg.Pose object with position attributes. + + Returns: + Tuple of (closest_node_name, distance) where: + - closest_node_name: Name of closest node, or 'none' if no valid node found + - distance: Euclidean distance to closest node, or inf if no valid node + + Special cases: + - If current_node != 'none': Returns (current_node, distance_to_current) + - If all nodes filtered: Returns (first_node, distance) as fallback + - If kdtree is None: Returns ('none', inf) + + Performance: + - Time: O(log n) for KD-tree query, O(k) for filtering where k is query size + - Space: O(k) for storing k nearest neighbors + - Efficient even with many no-go/topic-based nodes + + Example: + >>> import networkx as nx + >>> from scipy.spatial import KDTree + >>> import numpy as np + >>> from geometry_msgs.msg import Pose + >>> + >>> # Create graph and KD-tree + >>> G = nx.DiGraph() + >>> G.add_node('WP1', x=0.0, y=0.0, z=0.0) + >>> G.add_node('WP2', x=5.0, y=0.0, z=0.0) + >>> G.add_node('NoGo', x=2.5, y=0.0, z=0.0) + >>> points = np.array([[0.0, 0.0], [5.0, 0.0], [2.5, 0.0]]) + >>> kdtree = KDTree(points) + >>> node_names = ['WP1', 'WP2', 'NoGo'] + >>> + >>> # Test closest node with no-go filtering + >>> pose = Pose() + >>> pose.position.x = 2.5 + >>> pose.position.y = 0.0 + >>> closest, dist = determine_closest_node( + ... kdtree, node_names, G, 'none', ['NoGo'], [], pose + ... ) + >>> print(closest) # 'WP1' or 'WP2' (NoGo is filtered out) + >>> + >>> # Test with current node + >>> closest, dist = determine_closest_node( + ... kdtree, node_names, G, 'WP1', ['NoGo'], [], pose + ... ) + >>> print(closest) # 'WP1' (current node is always closest) + + Edge Cases: + - kdtree is None: Returns ('none', inf) + - Empty node_names: Returns ('none', inf) + - current_node != 'none': Returns (current_node, distance) + - All nodes filtered: Returns first node as fallback + - Multiple nodes at same distance: Order determined by KD-tree + + Filtering Rules: + - No-go nodes: Excluded unless they are the current node + - Topic-based nodes: Excluded unless they are the current node + - Current node: Always returned as closest (Rule 1) + - Fallback: If all filtered, return first node from KD-tree + + Requirements: + Validates: Requirements 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 15.2, 15.3 + - 6.1: Use KD-tree nearest neighbor search for closest node + - 6.2: Exclude no-go nodes unless within influence zone + - 6.3: Exclude topic-based nodes unless within influence zone + - 6.4: Set both current and closest to same node when within zone + - 6.5: Publish Euclidean distance to closest node + - 6.6: Handle filtering efficiently with KD-tree + - 15.2: Comprehensive docstrings with parameter descriptions + - 15.3: Type hints for parameters and return values + """ + # Validate inputs + if kdtree is None or not node_names: + return 'none', float('inf') + + # Rule 1: If we have a current node, it's also the closest + if current_node != 'none': + # Get distance to current node using KD-tree + nearest = query_nearest_nodes(kdtree, node_names, pose, k=1) + if nearest and nearest[0]['node'] == current_node: + return current_node, nearest[0]['dist'] + # If current node is not in kdtree, calculate distance manually + # (This shouldn't happen in normal operation) + if graph and current_node in graph.nodes: + node_attrs = graph.nodes[current_node] + if 'x' in node_attrs and 'y' in node_attrs: + dx = pose.position.x - node_attrs['x'] + dy = pose.position.y - node_attrs['y'] + dist = np.sqrt(dx*dx + dy*dy) + return current_node, float(dist) + return current_node, 0.0 + + # Rule 2: Find closest node that isn't no-go or topic-based + # Query more nodes than needed to account for filtering + k = min(len(node_names), len(nogos) + len(names_by_topic) + 10) + nearest_nodes = query_nearest_nodes(kdtree, node_names, pose, k=k) + + for node_info in nearest_nodes: + node_name = node_info['node'] + + # Skip no-go nodes + if node_name in nogos: + continue + + # Skip topic-based nodes + if node_name in names_by_topic: + continue + + # Found a valid closest node + return node_name, node_info['dist'] + + # Fallback: return first node if all are filtered + if nearest_nodes: + return nearest_nodes[0]['node'], nearest_nodes[0]['dist'] + + return 'none', float('inf') + +def draw_topological_graph( + graph: Optional[nx.DiGraph], + highlight_nodes: Optional[List[str]] = None, + highlight_edges: Optional[List[Tuple[str, str]]] = None, + title: str = "Topological Map", + save_path: Optional[str] = None, + figsize: Tuple[float, float] = (14, 10), + logger=None, +) -> None: + """Draw the topological map graph for visual debugging. + + Uses ``matplotlib`` and ``nx.draw_networkx_*`` to render the graph with + real-world (x, y) positions stored on the nodes. Optionally highlights + a subset of nodes/edges (e.g. a planned route) and can save the figure + to disk instead of showing it interactively. + + Args: + graph: NetworkX DiGraph built by :func:`build_graph_from_tmap`. + If *None* or empty the call is a no-op. + highlight_nodes: Node names to draw in a distinct colour (default + colour: orange). Useful for marking the current node, goal, + or route waypoints. + highlight_edges: Edge tuples ``(source, target)`` to draw in a + distinct colour (default: red). Useful for showing a planned + route. + title: Figure title. + save_path: If given, the figure is saved to this path (e.g. + ``'/tmp/topo_map.png'``) instead of calling ``plt.show()``. + figsize: Matplotlib figure size in inches ``(width, height)``. + logger: Optional ROS 2 logger for error messages. + + Returns: + None. A matplotlib figure is either displayed or saved. + + Example: + >>> graph = build_graph_from_tmap(tmap_data) + >>> # Show full map + >>> draw_topological_graph(graph) + >>> # Highlight a route + >>> route_nodes = ['WP1', 'WP2', 'WP3'] + >>> route_edges = [('WP1', 'WP2'), ('WP2', 'WP3')] + >>> draw_topological_graph( + ... graph, + ... highlight_nodes=route_nodes, + ... highlight_edges=route_edges, + ... title='Planned route', + ... save_path='/tmp/route.png', + ... ) + """ + try: + import matplotlib + matplotlib.use("Agg") # non-interactive backend safe for headless + import matplotlib.pyplot as plt + except ImportError: + msg = ( + "matplotlib is required for draw_topological_graph. " + "Install it with: pip install matplotlib" + ) + if logger: + logger.error(msg) + else: + print(msg) + return + + if graph is None or graph.number_of_nodes() == 0: + if logger: + logger.warning("draw_topological_graph: graph is None or empty") + return + + highlight_nodes = set(highlight_nodes or []) + highlight_edges = set(highlight_edges or []) + + # Build position dict from node attributes (x, y) + pos: Dict[str, Tuple[float, float]] = {} + for node_name in graph.nodes(): + attrs = graph.nodes[node_name] + pos[node_name] = (attrs.get("x", 0.0), attrs.get("y", 0.0)) + + fig, ax = plt.subplots(figsize=figsize) + ax.set_title(title, fontsize=14) + ax.set_xlabel("x (m)") + ax.set_ylabel("y (m)") + ax.set_aspect("equal") + ax.grid(True, linestyle="--", alpha=0.4) + + # --- edges ----------------------------------------------------------- + normal_edges = [e for e in graph.edges() if e not in highlight_edges] + nx.draw_networkx_edges( + graph, pos, edgelist=normal_edges, ax=ax, + edge_color="grey", alpha=0.6, arrows=True, + arrowstyle="-|>", arrowsize=12, connectionstyle="arc3,rad=0.08", + ) + if highlight_edges: + present = [e for e in highlight_edges if graph.has_edge(*e)] + if present: + nx.draw_networkx_edges( + graph, pos, edgelist=present, ax=ax, + edge_color="red", width=2.2, arrows=True, + arrowstyle="-|>", arrowsize=14, + connectionstyle="arc3,rad=0.08", + ) + + # --- nodes ----------------------------------------------------------- + normal_nodes = [n for n in graph.nodes() if n not in highlight_nodes] + nx.draw_networkx_nodes( + graph, pos, nodelist=normal_nodes, ax=ax, + node_color="steelblue", node_size=200, alpha=0.85, + ) + if highlight_nodes: + present = [n for n in highlight_nodes if n in graph.nodes()] + if present: + nx.draw_networkx_nodes( + graph, pos, nodelist=present, ax=ax, + node_color="orange", node_size=320, alpha=0.95, + edgecolors="red", linewidths=1.5, + ) + + # --- labels ---------------------------------------------------------- + nx.draw_networkx_labels( + graph, pos, ax=ax, font_size=7, font_weight="bold", + ) + + plt.tight_layout() + if save_path: + fig.savefig(save_path, dpi=150, bbox_inches="tight") + if logger: + logger.info(f"Topological map figure saved to {save_path}") + else: + print(f"Saved to {save_path}") + else: + plt.show() + + plt.close(fig) + + +def main(): + """Load test fixture maps, build graphs, run basic queries, and visualise.""" + import argparse + import os + import sys + + from topological_navigation.tmap_utils import load_tmap2_file + + # ------------------------------------------------------------------ + # CLI + # ------------------------------------------------------------------ + parser = argparse.ArgumentParser( + description="Load a topological map, build a NetworkX graph, " + "run basic spatial queries, and save a visualisation." + ) + parser.add_argument( + "--map", "-m", + default=None, + help="Path to a .yaml topological map. " + "If omitted, the test fixtures are used.", + ) + parser.add_argument( + "--out-dir", "-o", + default="/tmp", + help="Directory for saved PNG figures (default: /tmp).", + ) + args = parser.parse_args() + + # ------------------------------------------------------------------ + # Resolve map file(s) + # ------------------------------------------------------------------ + this_dir = os.path.dirname(os.path.abspath(__file__)) + fixture_dir = os.path.normpath( + os.path.join(this_dir, "..", "test", "fixtures") + ) + config_dir = os.path.normpath( + os.path.join(this_dir, "..", "config") + ) + + if args.map: + map_files = [args.map] + else: + # Default: all fixture maps + the polytunnel config map + map_files = sorted( + os.path.join(fixture_dir, f) + for f in os.listdir(fixture_dir) + if f.endswith(".yaml") and not f.startswith("README") + ) + polytunnel = os.path.join(config_dir, "strawberry_polytunnel.tmap2.yaml") + if os.path.isfile(polytunnel): + map_files.append(polytunnel) + + if not map_files: + print("No map files found. Pass --map .") + sys.exit(1) + + os.makedirs(args.out_dir, exist_ok=True) + + # ------------------------------------------------------------------ + # Process each map + # ------------------------------------------------------------------ + for map_path in map_files: + map_name = os.path.splitext(os.path.basename(map_path))[0] + print(f"\n{'=' * 60}") + print(f"Map: {map_name} ({map_path})") + print("=" * 60) + + # 1. Load YAML + tmap_data = load_tmap2_file(map_path) + + if tmap_data is None: + print(" [SKIP] empty YAML file") + continue + + # 2. Build NetworkX graph + graph = build_graph_from_tmap(tmap_data) + if graph is None: + print(" [SKIP] build_graph_from_tmap returned None") + continue + print(f" Nodes : {graph.number_of_nodes()}") + print(f" Edges : {graph.number_of_edges()}") + + # 3. Build KD-tree + kdtree, node_names = build_kdtree_from_graph(graph) + if kdtree is None: + print(" [SKIP] KD-tree build failed") + continue + print(f" KD-tree built with {len(node_names)} points") + + # 4. Pick a sample pose (first node's position) + sample_node = node_names[0] + sample_attrs = graph.nodes[sample_node] + + class _FakePose: + """Minimal pose-like object for testing.""" + class position: + x = sample_attrs.get("x", 0.0) + y = sample_attrs.get("y", 0.0) + z = sample_attrs.get("z", 0.0) + + pose = _FakePose() + print(f" Sample pose at node '{sample_node}': " + f"({pose.position.x:.2f}, {pose.position.y:.2f})") + + # 5. Query nearest nodes + nearest = query_nearest_nodes(kdtree, node_names, pose, k=3) + print(f" 3-nearest nodes:") + for entry in nearest: + print(f" {entry['node']:20s} dist={entry['dist']:.3f}") + + # 6. Point-in-polygon for sample node + inside = point_in_poly_nx(graph, sample_node, pose) + print(f" Pose inside '{sample_node}' influence zone: {inside}") + + # 7. Shortest path (first node -> last node) + if len(node_names) >= 2: + src, dst = node_names[0], node_names[-1] + path = compute_shortest_path(graph, src, dst) + if path: + length = compute_path_length(graph, src, dst) + print(f" Shortest path {src} -> {dst}: " + f"{' -> '.join(path)} (length={length:.3f})") + else: + print(f" No path from {src} to {dst}") + + # 8. Connectivity check + if len(node_names) >= 2: + connected = check_connectivity(graph, node_names[0], node_names[-1]) + print(f" Connected {node_names[0]} -> {node_names[-1]}: {connected}") + + # 9. Neighbours of first node + nbrs = get_neighbors(graph, sample_node) + print(f" Neighbors of '{sample_node}': {nbrs}") + + # 10. Visualise and save + png_path = os.path.join(args.out_dir, f"topo_{map_name}.png") + + hl_nodes = [n['node'] for n in nearest] if nearest else [] + hl_edges = [] + if path and len(path) >= 2: + hl_edges = list(zip(path[:-1], path[1:])) + + draw_topological_graph( + graph, + highlight_nodes=hl_nodes, + highlight_edges=hl_edges, + title=f"{map_name} ({graph.number_of_nodes()} nodes, " + f"{graph.number_of_edges()} edges)", + save_path=png_path, + ) + + print(f"\nDone. Figures saved under {args.out_dir}/") + + +if __name__ == '__main__': + main() diff --git a/topological_navigation/topological_navigation/node_controller.py b/topological_navigation/topological_navigation/node_controller.py deleted file mode 100644 index afe8abc2..00000000 --- a/topological_navigation/topological_navigation/node_controller.py +++ /dev/null @@ -1,117 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy - -import std_msgs.msg -from threading import Timer - -from geometry_msgs.msg import Pose -from geometry_msgs.msg import Point - -from visualization_msgs.msg import * -from interactive_markers.interactive_marker_server import * - -from topological_navigation_msgs.msg import TopologicalMap -from topological_navigation.topological_map import * - - - -class WaypointControllers(object): - - def __init__(self) : - self.timer = Timer(1.0, self.timer_callback) - #map_name = rospy.get_param('topological_map_name', 'top_map') - #print map_name - self._marker_server = InteractiveMarkerServer("/topological_map_markers") - self.map_update = rospy.Publisher('/update_map', std_msgs.msg.Time, queue_size=10) - - rospy.Subscriber('/topological_map', TopologicalMap, self.MapCallback) - - def update_map(self, msg) : - print("updating node controllers...") - self.topo_map = topological_map(msg.name, msg=msg) - self._marker_server.clear() - self._marker_server.applyChanges() - - for i in self.topo_map.nodes : - self._create_marker(i.name, i._get_pose(), i.name) - - """ - MapCallback - - This function receives the Topological Map - """ - def MapCallback(self, msg) : - self.update_map(msg) - - - - def _create_marker(self, marker_name, pose, marker_description="waypoint marker") : - # create an interactive marker for our server - marker = InteractiveMarker() - marker.header.frame_id = "map" - marker.name = marker_name - marker.description = marker_description - - # the marker in the middle - box_marker = Marker() - box_marker.type = Marker.ARROW - box_marker.scale.x = 0.45 - box_marker.scale.y = 0.25 - box_marker.scale.z = 0.15 - box_marker.color.r = 0.0 - box_marker.color.g = 0.5 - box_marker.color.b = 0.5 - box_marker.color.a = 1.0 - - # create an interactive control which contains the arrow and - # allows movement within the x-y plane. - box_control = InteractiveMarkerControl() - box_control.always_visible = True - box_control.orientation.w = 1 - box_control.orientation.x = 0 - box_control.orientation.y = 1 - box_control.orientation.z = 0 - box_control.interaction_mode = InteractiveMarkerControl.MOVE_PLANE - box_control.markers.append( box_marker ) - marker.controls.append( box_control ) - - #rotate z - control = InteractiveMarkerControl() - control.orientation.w = 1 - control.orientation.x = 0 - control.orientation.y = 1 - control.orientation.z = 0 - control.name = "rotate_z" - control.interaction_mode = InteractiveMarkerControl.ROTATE_AXIS - marker.controls.append(control) - - self._marker_server.insert(marker, self._marker_feedback) - self._marker_server.applyChanges() - - if pose is not None: - pose.position.z=pose.position.z+0.15 - self._marker_server.setPose( marker.name, pose ) - self._marker_server.applyChanges() - - - def _marker_feedback(self, feedback): - self.info = feedback - self.timer.cancel() - del self.timer - self.timer = Timer(1.0, self.timer_callback) - self.timer.start() - - - def timer_callback(self) : - self.topo_map.update_node_waypoint(self.info.marker_name, self.info.pose) - self.map_update.publish(rospy.Time.now()) - - - def clear(): - self._marker_server.clear() - self._marker_server.applyChanges() - - def __del__(self): - del self._marker_server diff --git a/topological_navigation/topological_navigation/node_manager.py b/topological_navigation/topological_navigation/node_manager.py deleted file mode 100644 index 6446dba8..00000000 --- a/topological_navigation/topological_navigation/node_manager.py +++ /dev/null @@ -1,150 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy -import math -import tf -import actionlib -from threading import Timer - - -import std_msgs.msg -from geometry_msgs.msg import Pose -from geometry_msgs.msg import Point - -from visualization_msgs.msg import * -from interactive_markers.interactive_marker_server import * - - -import topological_navigation_msgs.srv - -from topological_navigation_msgs.msg import TopologicalMap -from topological_navigation.topological_map import * - - - -class node_manager(object): - - def __init__(self) : - self.in_feedback=False - #map_name = rospy.get_param('topological_map_name', 'top_map') - self._node_server = InteractiveMarkerServer("/topological_map_add_rm_node") - rospy.loginfo(" ... Init done") - self.map_update = rospy.Publisher('/update_map', std_msgs.msg.Time, queue_size=10) - rospy.Subscriber('/topological_map', TopologicalMap, self.MapCallback) - - - - def update_map(self, msg) : - print("updating node controllers...") - self.topo_map = topological_map(msg.name, msg=msg) - self._node_server.clear() - self._node_server.applyChanges() - self.create_marker() - - - """ - MapCallback - - This function receives the Topological Map - """ - def MapCallback(self, msg) : - self.update_map(msg) - - - - def makeEmptyMarker(self, dummyBox=True ) : - int_marker = InteractiveMarker() - int_marker.header.frame_id = "/base_link" - int_marker.scale = 1 - return int_marker - - - def makeBox(self, msg ): - marker = Marker() - - marker.type = Marker.CUBE - marker.scale.x = msg.scale * 0.125 - marker.scale.y = msg.scale * 0.25 - marker.scale.z = msg.scale * 0.1 - marker.lifetime.secs = 3 - marker.color.r = 0.1 - marker.color.g = 0.8 - marker.color.b = 0.1 - marker.color.a = 1.0 - return marker - - - def create_marker(self) : - - marker = self.makeEmptyMarker() - marker.name = "add_node" - marker.description = "add_node" - - control = InteractiveMarkerControl() - - control.interaction_mode = InteractiveMarkerControl.BUTTON - control.always_visible = True - - control.markers.append( self.makeBox( marker ) ) - marker.controls.append(control) - - self._node_server.insert(marker, self.feedback_cb) - self._node_server.applyChanges() - - pos=Pose() - pos.position.x=0.0 - pos.position.y=0.0 - pos.position.z=1.9 - pos.orientation.x=0.0 - pos.orientation.y=0.0 - pos.orientation.z=0.0 - pos.orientation.w=0.0 - - self._node_server.setPose( marker.name, pos ) - self._node_server.applyChanges() - - - - def feedback_cb(self, feedback): - if not self.in_feedback : - self.in_feedback=True - - try: - current = rospy.wait_for_message('current_node', std_msgs.msg.String, timeout=10.0) - except rospy.ROSException : - rospy.logwarn("Failed to get current node") - return - - print(current.data) - if current.data == 'none': - try: - pos = rospy.wait_for_message('robot_pose', Pose, timeout=10.0) - except rospy.ROSException : - rospy.logwarn("Failed to get robot pose") - return - - add_node = rospy.ServiceProxy('/topological_map_manager/add_topological_node', topological_navigation_msgs.srv.AddNode) - add_node('',pos, True) - - map_update = rospy.Publisher('/update_map', std_msgs.msg.Time) - map_update.publish(rospy.Time.now()) - - else: - rospy.loginfo("I will NOT add a node within the influence area of another! Solve this and try again!") - - - self.timer = Timer(1.0, self.timer_callback) - self.timer.start() - - - def timer_callback(self) : - self.in_feedback = False - - def clear(): - self._node_server.clear() - self._node_server.applyChanges() - - - def __del__(self): - del self._node_server diff --git a/topological_navigation/topological_navigation/point2line.py b/topological_navigation/topological_navigation/point2line.py deleted file mode 100644 index b8d9e3d8..00000000 --- a/topological_navigation/topological_navigation/point2line.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python -################################################################################################################### -from __future__ import division -import numpy as np - - -def pnt2line(pnt, start, end): - - pnt = (pnt[:, 0], pnt[:, 1], pnt[:, 2]) - start = (start[:, 0], start[:, 1], start[:, 2]) - end = (end[:, 0], end[:, 1], end[:, 2]) - - line_vec = vector(start, end) - pnt_vec = vector(start, pnt) - line_unitvec = unit(line_vec) - line_len = length(line_vec) - pnt_vec_scaled = scale(pnt_vec, 1.0/line_len) - - t = dot(line_unitvec, pnt_vec_scaled) - t[np.where(t < 0.0)[0]] = 0.0 - t[np.where(t > 1.0)[0]] = 1.0 - - nearest = scale(line_vec, t) - return distance(nearest, pnt_vec) - - -def vector(b, e): - return b[0]-e[0], b[1]-e[1], b[2]-e[2] - - -def unit(v): - mag = length(v) - return v[0]/mag, v[1]/mag, v[2]/mag - - -def length(v): - return np.sqrt(v[0]**2 + v[1]**2 + v[2]**2) - - -def scale(v, sc): - return v[0]*sc, v[1]*sc, v[2]*sc - - -def dot(v, w): - return v[0]*w[0] + v[1]*w[1] + v[2]*w[2] - - -def distance(p0, p1): - return length(vector(p0, p1)) -################################################################################################################### - - -################################################################################################################### -# pnt = [[x0, y0, z0], -# [x1, y1, z1], -# [..., ..., ...], -# [xn, yn, zn]] - -if __name__ == '__main__': - - pnt = np.array([[5, 4, 0], - [5, 4, 0]]) - - start = np.array([[3, 0, 0], - [2, 3, 0]]) - - end = np.array([[8, 5, 0], - [4, 7, 0]]) - - print(pnt2line(pnt, start, end)) -################################################################################################################### \ No newline at end of file diff --git a/topological_navigation/topological_navigation/policies.py b/topological_navigation/topological_navigation/policies.py deleted file mode 100644 index a63e55eb..00000000 --- a/topological_navigation/topological_navigation/policies.py +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/env python - -import rospy -import math -import tf - - - - -from interactive_markers.interactive_marker_server import * -from visualization_msgs.msg import * - -from topological_navigation_msgs.msg import TopologicalMap -from topological_navigation.marker_arrays import * -from topological_navigation_msgs.msg import NavRoute - - -class PoliciesVis(object): -# _killall_timers=False - - def __init__(self) : - self._killall=False - #rospy.on_shutdown(self._on_node_shutdown) - self.route_nodes = NavRoute() - self.map_edges = MarkerArray() - #self.update_needed=False - - rospy.loginfo("Creating Publishers ...") - self.policies_pub = rospy.Publisher('topological_edges_policies', MarkerArray, queue_size=10) - rospy.loginfo("Done ...") - - - rospy.loginfo("Creating subscriber ...") - self.subs = rospy.Subscriber("mdp_plan_exec/current_policy_mode", NavRoute, self.policies_callback) - rospy.loginfo("Done ...") - - #Waiting for Topological Map - self.map_received=False - rospy.Subscriber('topological_map', TopologicalMap, self.MapCallback) - rospy.loginfo("Waiting for Topological map ...") - while not self.map_received and not self._killall : - rospy.sleep(rospy.Duration.from_sec(0.05)) - rospy.loginfo(" ...done") - - - rospy.loginfo("All Done ...") - - - def _update_everything(self) : - print("updating ...") - print(self.route_nodes) - - self.map_edges.markers=[] - - counter=0 - total = len(self.route_nodes.source) - - print('updating '+str(total)+' edges') - while counter < total : - print('Creating edge '+str(counter)) - source = self.route_nodes.source[counter] - ori = self.get_node(self.lnodes, source) - targ = self.find_action(ori.name, self.route_nodes.edge_id[counter]) - if targ: - #print ori.name,ori.pose.position - target = self.get_node(self.lnodes, targ) - self.added_sources.append(source) - #print target.name,target.pose.position - if targ in self.added_sources: - self.create_edge(ori.pose.position, target.pose.position, "blue") - else: - self.create_edge(ori.pose.position, target.pose.position, "red") - counter+=1 - - - idn = 0 - for m in self.map_edges.markers: - m.id = idn - idn += 1 - self.policies_pub.publish(self.map_edges) - print("All Done") - - - def create_edge(self, point1, point2, color="red"): - marker = Marker() - marker.header.frame_id = "map" - marker.type = marker.ARROW - - - pose = Pose() - - pose.position.x = point1.x - pose.position.y = point1.y - pose.position.z = point1.z - angle = math.atan2((point2.y-point1.y),(point2.x-point1.x)) - - qat = tf.transformations.quaternion_from_euler(0, 0, angle) - pose.orientation.w = qat[3] - pose.orientation.x = qat[0] - pose.orientation.y = qat[1] - pose.orientation.z = qat[2] - - r = math.hypot((point2.y-point1.y),(point2.x-point1.x))#/3.0 - marker.scale.x = r - marker.scale.y = 0.15 - marker.scale.z = 0.15 - marker.color.a = 0.95 - marker.color.r = 0.9 - marker.color.g = 0.1 - marker.color.b = 0.1 - if color == "red": - marker.color.r = 0.9 - marker.color.g = 0.1 - marker.color.b = 0.1 - if color == "blue": - marker.color.r = 0.1 - marker.color.g = 0.1 - marker.color.b = 0.9 - marker.pose = pose - self.map_edges.markers.append(marker) - - - - """ - get_node - - Given a topological map and a node name it returns the node object - """ - def get_node(self, top_map, node_name): - print('looking for: '+node_name) - for i in top_map.nodes: - #print i.name - if i.name == node_name: - return i - return None - - - """ - Find Action - - """ -# def find_action(self, source, target): - def find_action(self, source, edge_id): - #print 'Searching for action between: %s -> %s' %(source, target) - found = False - #action = 'none' - target = 'none' - for i in self.lnodes.nodes : - if i.name == source : - for j in i.edges: - if j.edge_id == edge_id: - #action = j.action - target = j.node - found = True - if not found: - rospy.logwarn("source node not found") - return None - return target - - - - def policies_callback(self, msg) : - print("GOT policies") - self.added_sources = [] - self.route_nodes = msg - self._update_everything() - - - """ - MapCallback - - This function receives the Topological Map - """ - def MapCallback(self, msg) : - print("got map") - self.lnodes = msg -# print self.lnodes.nodes - self.map_received = True - - - def on_node_shutdown(self): - self._killall=True - #sleep(2) \ No newline at end of file diff --git a/topological_navigation/topological_navigation/policy_marker.py b/topological_navigation/topological_navigation/policy_marker.py deleted file mode 100644 index b8b82bf0..00000000 --- a/topological_navigation/topological_navigation/policy_marker.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python3 - -import math - -import rclpy -from rclpy.node import Node -from rclpy.qos import QoSProfile, DurabilityPolicy - -from tf_transformations import quaternion_from_euler - -from interactive_markers.interactive_marker_server import * -from visualization_msgs.msg import * - -from topological_navigation_msgs.msg import TopologicalMap, NavRoute - - -class PoliciesVis(Node): - - def __init__(self): - super().__init__('topological_policy_markers') - self.map = None - self.policy = MarkerArray() - self.route_nodes = NavRoute() - self.marker_pub = self.create_publisher(MarkerArray, '~/vis', 10) - self.marker_pub.publish(self.policy) - qos = QoSProfile(depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL) - self.map_sub = self.create_subscription(TopologicalMap, '/topological_map', self.map_callback, qos) - self.policy_sub = self.create_subscription(NavRoute, 'mdp_plan_exec/current_policy_mode', self.policies_callback, 10) - self.get_logger().info('policy visualiser init complete') - - def map_callback(self, msg): - self.get_logger().info('map callback triggered') - self.map = msg - - def policies_callback(self, msg): - self.get_logger().info('policies callback triggered') - self.get_logger().info(str(msg)) - if not self.map: return - - self.added_sources = [] - self.route_nodes = msg - print(self.route_nodes) - - self.map_edges.markers=[] - - counter=0 - total = len(self.route_nodes.source) - - for i in range(0, total): - # Find source and edge - source = self.route_nodes.source[i] - edge_id = self.route_nodes.edge_id[i] - - # Get positions for start and end - ori = tmap_utils.get_node(self.map, source) - targ = tmap_utils.get_edge_from_id(self.map, ori.name, edge_id).node - if not targ: continue - - # Edge - target = self.get_node(self.map, targ) - self.added_sources.append(source) - colour = [0.1,0.1,0.9] if targ in self.added_sources else [0.9,0.1,0.1] - self.map_edges.markers.append(self.create_edge(ori.pose.position, target.pose.position, colour)) - - # Publish - for i, marker in enumerate(self.policy.markers): - marker.id = i - self.policies_pub.publish(self.policy) - - def create_edge(self, point1, point2, color): - marker = Marker() - marker.header.frame_id = "map" - marker.type = marker.ARROW - - pose = Pose() - - pose.position.x = point1.x - pose.position.y = point1.y - pose.position.z = point1.z - angle = math.atan2((point2.y-point1.y),(point2.x-point1.x)) - - qat = quaternion_from_euler(0, 0, angle) - pose.orientation.w = qat[3] - pose.orientation.x = qat[0] - pose.orientation.y = qat[1] - pose.orientation.z = qat[2] - - r = math.hypot((point2.y-point1.y),(point2.x-point1.x))#/3.0 - marker.scale.x = r - marker.scale.y = 0.15 - marker.scale.z = 0.15 - marker.color.a = 0.95 - marker.color.r = colour[0] - marker.color.g = colour[1] - marker.color.b = colour[2] - marker.pose = pose - self.policy.markers.append(marker) - - -def main(args=None): - rclpy.init(args=args) - - PV = PoliciesVis() - rclpy.spin(PV) - - PV.destroy_node() - rclpy.shutdown() - -if __name__ == '__main__': - main() diff --git a/topological_navigation/topological_navigation/policy_marker2.py b/topological_navigation/topological_navigation/policy_marker2.py deleted file mode 100644 index 5e7eaf31..00000000 --- a/topological_navigation/topological_navigation/policy_marker2.py +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env python3 - -import math -import yaml -import rclpy, json -from rclpy.node import Node -from rclpy.qos import QoSProfile, DurabilityPolicy -from topological_navigation.route_search2 import RouteChecker, TopologicalRouteSearch2, get_route_distance -from tf_transformations import quaternion_from_euler - -from geometry_msgs.msg import Point, Pose - -from interactive_markers.interactive_marker_server import * -from visualization_msgs.msg import * -from topological_navigation.tmap_utils import get_edge_from_id_tmap2 - -from topological_navigation_msgs.msg import TopologicalMap, NavRoute -from std_msgs.msg import String - -# this ensures that all the poses and translates -# are float-type and not int-type as there is an -# assertion in ros2 messages (vector3, pose etc.) -# for float-type [x,y,z,w] keys. -class CustomSafeLoader(yaml.SafeLoader): - def construct_mapping(self, node, deep=False): - mapping = super().construct_mapping(node, deep=deep) - - # this can be extended to test the validity of the tmap2 - # as well at load time (or add missing keys) - for key in ['x', 'y', 'z', 'w']: - if key in mapping and isinstance(mapping[key], int): - mapping[key] = float(mapping[key]) - - return mapping - - -class PoliciesVis(Node): - - def __init__(self): - super().__init__('topological_policy_markers') - self.topol_map = None - self.policy = MarkerArray() - self.route_nodes = NavRoute() - self.marker_pub = self.create_publisher(MarkerArray, '~/vis', 10) - self.marker_pub.publish(self.policy) - qos = QoSProfile(depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL) - self.map_sub = self.create_subscription(String, '/topological_map_2', self.map_callback, qos) - self.policy_sub = self.create_subscription(NavRoute, 'mdp_plan_exec/current_policy_mode', self.policies_callback, qos) - self.get_logger().info('policy visualiser init complete') - - def map_callback(self, msg): - self.get_logger().info('map callback triggered') - # self.map = msg - # self.lnodes = json.loads(msg.data) - self.lnodes = yaml.load( msg.data, Loader = CustomSafeLoader) - self.topol_map = self.lnodes["pointset"] - self.rsearch = TopologicalRouteSearch2(self.lnodes) - - def policies_callback(self, msg): - self.get_logger().info('policies callback triggered') - self.get_logger().info(str(msg)) - if not self.topol_map: return - - self.added_sources = [] - self.route_nodes = msg - self.get_logger().info(self.route_nodes) - - self.map_edges.markers=[] - - counter = 0 - total = len(self.route_nodes.source) - - for i in range(0, total): - # Find source and edge - source = self.route_nodes.source[i] - edge_id = self.route_nodes.edge_id[i] - - # Get positions for start and end - ori = self.rsearch.get_node_from_tmap2(source) - targ = get_edge_from_id_tmap2(self.topol_map, ori.name, edge_id).node - if not targ: continue - - # Edge - target = self.rsearch.get_node_from_tmap2(targ["node"]) - self.added_sources.append(source) - colour = [0.1,0.1,0.9] if targ in self.added_sources else [0.9,0.1,0.1] - self.map_edges.markers.append(self.create_edge(ori.pose.position, target.pose.position, colour)) - - # Publish - for i, marker in enumerate(self.policy.markers): - marker.id = i - self.policies_pub.publish(self.policy) - - def create_edge(self, point1, point2, colour): - marker = Marker() - marker.header.frame_id = "map" - marker.type = marker.ARROW - - pose = Pose() - - pose.position.x = point1.x - pose.position.y = point1.y - pose.position.z = point1.z - angle = math.atan2((point2.y-point1.y),(point2.x-point1.x)) - - qat = quaternion_from_euler(0, 0, angle) - pose.orientation.w = qat[3] - pose.orientation.x = qat[0] - pose.orientation.y = qat[1] - pose.orientation.z = qat[2] - - r = math.hypot((point2.y-point1.y),(point2.x-point1.x))#/3.0 - marker.scale.x = r - marker.scale.y = 0.15 - marker.scale.z = 0.15 - marker.color.a = 0.95 - marker.color.r = colour[0] - marker.color.g = colour[1] - marker.color.b = colour[2] - marker.pose = pose - self.policy.markers.append(marker) - - -def main(args=None): - rclpy.init(args=args) - - PV = PoliciesVis() - rclpy.spin(PV) - - PV.destroy_node() - rclpy.shutdown() - -if __name__ == '__main__': - main() diff --git a/topological_navigation/topological_navigation/publisher.py b/topological_navigation/topological_navigation/publisher.py deleted file mode 100644 index 549b0024..00000000 --- a/topological_navigation/topological_navigation/publisher.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env python -import math -import rospy -import sys - -import std_msgs.msg -from topological_navigation.topological_node import * -from topological_navigation_msgs.msg import TopologicalNode -from topological_navigation_msgs.msg import TopologicalMap -from topological_navigation_msgs.srv import GetTopologicalMap - -from mongodb_store.message_store import MessageStoreProxy - - -class map_publisher(object): - - def __init__(self, name) : - self.name = name - self.nodes = self.loadMap(name) - self.map_pub = rospy.Publisher('/topological_map', TopologicalMap, latch=True, queue_size=1) - self.last_updated = rospy.Time.now() - self.map_pub.publish(self.nodes) - rospy.Subscriber('/update_map', std_msgs.msg.Time, self.updateCallback) - self.get_map_srv=rospy.Service('/topological_map_publisher/get_topological_map', GetTopologicalMap, self.get_topological_map_cb) - - - - def updateCallback(self, msg) : -# if msg.data > self.last_updated : - self.nodes = self.loadMap(self.name) - self.last_updated = rospy.Time.now() - self.map_pub.publish(self.nodes) - - - def get_topological_map_cb(self, req): - nodes = self.loadMap(req.pointset) - print("Returning Map %s"%req.pointset) - return nodes - - - def loadMap(self, point_set) : - msg_store = MessageStoreProxy(collection='topological_maps') - - query_meta = {} - query_meta["pointset"] = point_set - - # waiting for the map to be in the mongodb_store - ntries=1 - map_found=False - - while not map_found : - available = len(msg_store.query(TopologicalNode._type, {}, query_meta)) > 0 - #print available - if available <= 0 : - rospy.logerr("Desired pointset '"+point_set+"' not in datacentre, try :"+str(ntries)) - #rospy.logerr("Available pointsets: "+str(available)) - if ntries <=10 : - ntries+=1 - rospy.sleep(rospy.Duration.from_sec(6)) - else : - raise Exception("Can't find waypoints.") - sys.exit(2) - else: - map_found=True - - - query_meta = {} - query_meta["pointset"] = point_set - - message_list = msg_store.query(TopologicalNode._type, {}, query_meta) - - points = TopologicalMap() - points.name = point_set - points.map = point_set - points.pointset = point_set - #string last_updated - for i in message_list: - b = i[0] - points.nodes.append(b) - - return points \ No newline at end of file diff --git a/topological_navigation/topological_navigation/restrictions_impl.py b/topological_navigation/topological_navigation/restrictions_impl.py deleted file mode 100644 index 28ff6e78..00000000 --- a/topological_navigation/topological_navigation/restrictions_impl.py +++ /dev/null @@ -1,215 +0,0 @@ -import tf -import rospy -import dynamic_reconfigure.client -import numpy as np - -from abc import ABCMeta, abstractmethod, abstractproperty -from geometry_msgs.msg import Pose, Quaternion -from topological_navigation.point2line import pnt2line -from topological_navigation.tmap_utils import * -from std_msgs.msg import String - - - - - -############################### -## -# Here extend the class AbstractRestriction to create a new restriction. -# Once its defined here it will be automatically imported by the RestrictionsManager. -## -class AbstractRestriction(): - """ Abstract definition of a restriction """ - __metaclass__ = ABCMeta - - robot_state = {} - DEFAULT_EVALUATION = True - - @abstractproperty - def name(self): - """ The name must correspond to the restriction variable name in the map definition """ - raise NotImplementedError() - - @abstractmethod - def evaluate_node(self, node=None, value=None, robot_state={}, tmap=None): - """ Returns the value of the restriction associated with the given entity, must return a boolean value """ - raise NotImplementedError() - - @abstractmethod - def evaluate_edge(self, edge=None, value=None, robot_state={}, tmap=None): - """ Returns the value of the restriction associated with the given entity, must return a boolean value """ - raise NotImplementedError() - - @abstractmethod - def ground_to_robot(self): - """ Retrieves and saves internally the state of the robot necessary for evaluating the restriction """ - raise NotImplementedError() - -class RobotType(AbstractRestriction): - name = "robot" - - def __init__(self): - super(AbstractRestriction, self).__init__() - - # subscribe to task topic - def _save_robot_type(msg): - self.robot_state.update({ - "type": msg.data - }) - - rospy.Subscriber("type", - String, - lambda msg: _save_robot_type(msg) - ) - - def _evaluate(self, value, robot_state): - evaluation = self.DEFAULT_EVALUATION - - # default state - if "type" not in robot_state: - robot_state = self.robot_state - - if "type" in robot_state: - evaluation = value.lower() == robot_state["type"].lower() - - return evaluation - - def evaluate_node(self, node, value, robot_state={}, tmap=None): - """ Returns the value of the restriction associated with the given entity, must return a boolean value """ - return self._evaluate(value, robot_state) - - def evaluate_edge(self, edge, value, robot_state={}, tmap=None): - """ Returns the value of the restriction associated with the given entity, must return a boolean value """ - return self._evaluate(value, robot_state) - - def ground_to_robot(self): - pass - -class TaskName(AbstractRestriction): - name = "task" - - def __init__(self): - super(AbstractRestriction, self).__init__() - - # subscribe to task topic - def _save_robot_task(msg): - self.robot_state.update({ - "task": msg.data - }) - - rospy.Subscriber("task", - String, - lambda msg: _save_robot_task(msg) - ) - - def _evaluate(self, value, robot_state): - evaluation = self.DEFAULT_EVALUATION - - # default state - if "task" not in robot_state: - robot_state = self.robot_state - - if "task" in robot_state: - evaluation = value.lower() == robot_state["task"].lower() - - return evaluation - - def evaluate_node(self, node, value, robot_state={}, tmap=None): - """ Returns the value of the restriction associated with the given entity, must return a boolean value """ - return self._evaluate(value, robot_state) - - def evaluate_edge(self, edge, value, robot_state={}, tmap=None): - """ Returns the value of the restriction associated with the given entity, must return a boolean value """ - return self._evaluate(value, robot_state) - - def ground_to_robot(self): - pass - -class ObstacleFree(AbstractRestriction): - name = "obstacleFree" - - def __init__(self, robots): - super(AbstractRestriction, self).__init__() - # keeps the position of each robot with timestamp - self.robot_nodes = {} - self.active = True - if len(robots) == 0: - rospy.logwarn("No robots provided for obstacleFree restriction.") - self.active = False - - def _save_robot_nodes(msg, robot): - self.robot_nodes[robot] = { - "node": msg.data, - "timestamp_secs": rospy.Time.now().to_sec() - } - for robot in robots: - rospy.Subscriber("/{}/closest_node".format(robot), - String, - lambda msg, arg: _save_robot_nodes(msg, arg), - callback_args=(robot) - ) - - def _get_closest_node(self, robot, secs_thr=np.inf): - node = [] - if robot in self.robot_nodes and \ - rospy.Time.now().to_sec() - self.robot_nodes[robot]["timestamp_secs"] < secs_thr: - node = self.robot_nodes[robot]["node"] - return node - - # value is the min distance [m] from the obstacles that the robot must have for the node to be obstacleFree - def evaluate_node(self, node, value, robot_state={}, tmap=None): - """ Returns the evaluation of the restriction associated with the given entity, must return a boolean value """ - evaluation = self.DEFAULT_EVALUATION - - if tmap is not None and self.active: - _node_pos = get_node_from_tmap2(tmap, node)["node"]["pose"] - node_pos = np.array([_node_pos["position"]["x"], _node_pos["position"]["y"]]) - - all_nodes = [self._get_closest_node(r) for r in self.robot_nodes if r != rospy.get_namespace().strip("/")] - distances = [] - for node_a in all_nodes: - _node_pos_a = get_node_from_tmap2(tmap, node_a)["node"]["pose"] - node_pos_a = np.array([_node_pos_a["position"]["x"], _node_pos_a["position"]["y"]]) - - distances.append( - np.sqrt(np.sum(np.power(node_pos - node_pos_a, 2))) - ) - if len(distances) > 0: - evaluation = np.min(distances) > float(value) - - return evaluation - - # value is the min distance [m] from the obstacle that the robot must have for the edge to be obstacleFree - def evaluate_edge(self, edge, value, robot_state={}, tmap=None): - """ Returns the value of the restriction associated with the given entity, must return a boolean value """ - evaluation = self.DEFAULT_EVALUATION - - # print(self.robot_nodes, rospy.get_namespace().strip("/")) - if tmap is not None and self.active: - distances = [] - - orig, dest = get_node_names_from_edge_id_2(tmap, edge) - _edge_pos_a = get_node_from_tmap2(tmap, orig)["node"]["pose"] - edge_pos_a = np.array([[_edge_pos_a["position"]["x"], _edge_pos_a["position"]["y"], 0.]]) - _edge_pos_b = get_node_from_tmap2(tmap, dest)["node"]["pose"] - edge_pos_b = np.array([[_edge_pos_b["position"]["x"], _edge_pos_b["position"]["y"], 0.]]) - - all_nodes = [self._get_closest_node(r) for r in self.robot_nodes if r != rospy.get_namespace().strip("/")] - - for node_a in all_nodes: - _node_pos = get_node_from_tmap2(tmap, node_a)["node"]["pose"] - node_pos = np.array([[_node_pos["position"]["x"], _node_pos["position"]["y"], 0.]]) - - distance = pnt2line(node_pos, edge_pos_a, edge_pos_b) - - distances.append(distance) - - if len(distances) > 0: - evaluation = np.min(distances) > float(value) - - return evaluation - - def ground_to_robot(self): - pass -############################### - diff --git a/topological_navigation/topological_navigation/route_search.py b/topological_navigation/topological_navigation/route_search.py deleted file mode 100644 index 25ea40f2..00000000 --- a/topological_navigation/topological_navigation/route_search.py +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/env python - -import rospy -from topological_navigation.tmap_utils import * -from topological_navigation_msgs.msg import NavRoute - - -class NodeToExpand(object): - def __init__(self, name, father, current_distance, dist_to_target): - self.name = name - self.expanded = False - self.father = father - self.current_distance = current_distance - self.dist_to_target = dist_to_target - self.cost = self.current_distance + self.dist_to_target - #print self.name, ":\n", "\tcurrent dist: ", self.current_distance, "\n\tdist_to_target: ", self.dist_to_target, "\n\tcost: ", self.cost - - def __repr__(self): - return "-------\n\t Node: \n\t name:%s \n\t Father:%s \n\t current_distance:%f \n\t distance to target: %f \n\t cost %f \n" % (self.name, self.father, self.current_distance, self.dist_to_target, self.cost) - - -class TopologicalRouteSearch(object): - - def __init__(self, top_map): - # rospy.loginfo("Waiting for Topological map ...") - self.top_map = top_map - - """ - search_route - - This function searches the route to reach the goal - """ - - def search_route(self, origin, target): - if origin == "none" or target == "none" or origin == target: - return None - - goal = get_node(self.top_map, target) - orig = get_node(self.top_map, origin) - to_expand = [] - children = [] - expanded = [] - - #print 'searching route from %s to %s' %(orig.name, goal.name) - - #self.get_distance_to_node(goal, orig) - nte = NodeToExpand(orig.name, 'none', 0.0, - get_distance_to_node(goal, orig)) # Node to Expand - expanded.append(nte) - #to_expand.append(nte) - -# exp_index=0 - cen = orig # currently expanded node - - # nodes current node is connected to - children = get_conected_nodes(cen) - #print "children\n", children - not_goal = True - route_found = False - while not_goal: - if target in children: - not_goal = False - route_found = True - cdist = get_distance_to_node(cen, goal) - cnte = NodeToExpand( - goal.name, nte.name, nte.current_distance+cdist, 0.0) # Node to Expand - expanded.append(cnte) - #print "goal found" - else: - #print "Goal NOT found" - for i in children: - been_expanded = False - to_be_expanded = False - for j in expanded: - # search in expanded - if i == j.name: - been_expanded = True - old_expand_node = j - # found it. skip remaining - break - if not been_expanded: - # not in expanded, search in to_expand. can't be in both - for j in to_expand: - if i == j.name: - been_expanded = True - to_be_expanded = True - old_expand_node = j - # found it. skip remaining - break - - if not been_expanded: - nnn = get_node(self.top_map, i) - tdist = get_distance_to_node(goal, nnn) - cdist = get_distance_to_node(cen, nnn) - cnte = NodeToExpand( - nnn.name, nte.name, nte.current_distance+cdist, tdist) # Node to Expand - to_expand.append(cnte) - to_expand = sorted( - to_expand, key=lambda node: node.cost) - else: - nnn = get_node(self.top_map, i) - tdist = get_distance_to_node(goal, nnn) - cdist = get_distance_to_node(cen, nnn) - # update existing NTE with new data if a shorter route to it is found - if nte.current_distance+cdist < old_expand_node.current_distance: - old_expand_node.father = nte.name - old_expand_node.current_distance = nte.current_distance+cdist - old_expand_node.dist_to_target = tdist - old_expand_node.cost = old_expand_node.current_distance + \ - old_expand_node.dist_to_target - if to_be_expanded: - # re-sort to_expand with new costs - to_expand = sorted( - to_expand, key=lambda node: node.cost) - - if len(to_expand) > 0: - nte = to_expand.pop(0) - #print 'expanding node %s (%d)' %(nte.name,len(to_expand)) - cen = get_node(self.top_map, nte.name) - expanded.append(nte) - children = get_conected_nodes(cen) - else: - not_goal = False - route_found = False - - route = NavRoute() -# print "===== RESULT =====" - if route_found: - steps = [] - val = len(expanded)-1 - steps.append(expanded[val]) - next_node = expanded[val].father - #print next_node - while next_node != 'none': - for i in expanded: - if i.name == next_node: - steps.append(i) - next_node = i.father - break - - steps.reverse() - val = len(steps) - for i in range(1, val): - edg = get_edges_between( - self.top_map, steps[i].father, steps[i].name) - route.source.append(steps[i].father) - route.edge_id.append(edg[0].edge_id) - #route.append(r) - - #print route - return route - else: - return None diff --git a/topological_navigation/topological_navigation/route_search2.py b/topological_navigation/topological_navigation/route_search2.py deleted file mode 100644 index 0475ad36..00000000 --- a/topological_navigation/topological_navigation/route_search2.py +++ /dev/null @@ -1,280 +0,0 @@ -#!/usr/bin/env python -######################################################################################################### -import rclpy -from topological_navigation.tmap_utils import * -from topological_navigation_msgs.msg import NavRoute -from rclpy.node import Node - -class NodeToExpand(object): - - - def __init__(self, name, father, current_distance, dist_to_target): - - self.name = name - self.expanded=False - self.father=father - self.current_distance = current_distance - self.dist_to_target = dist_to_target - self.cost = self.current_distance + self.dist_to_target - - - def __repr__(self): - return "-------\n\t Node: \n\t name:%s \n\t Father:%s \n\t current_distance:%f \n\t distance to target: %f \n\t cost %f \n" %(self.name, self.father, self.current_distance, self.dist_to_target, self.cost) -######################################################################################################### - - -######################################################################################################### -class TopologicalRouteSearch2(object): - def __init__(self, top_map) : - - self.top_map = top_map - self.nodes = {} - for node in self.top_map["nodes"]: - name = node["node"]["name"] - self.nodes[name] = node - - self.children = {} - for node in self.top_map["nodes"]: - name = node["node"]["name"] - self.children[name] = [] - for edge in node["node"]["edges"]: - dist = get_distance_to_node_tmap2(self.nodes[name], self.nodes[edge["node"]]) - item = {"name": edge["node"], "distance": dist} - self.children[name].append(item) - - - def search_route(self, origin, target, avoid_edges=[]): - """ - This function searches the route to reach the goal - """ - route = NavRoute() - - if origin == "none" or target == "none" or origin == target: - return route - - goal = self.get_node_from_tmap2(target) - orig = self.get_node_from_tmap2(origin) - to_expand=[] - children=[] - expanded=[] - - nte = NodeToExpand(orig["node"]["name"], 'none', 0.0, get_distance_to_node_tmap2(goal, orig)) # Node to Expand - expanded.append(nte) - - cen = orig # currently expanded node - children = self.get_connected_nodes_tmap2(cen) # nodes current node is connected to - - # get the pair of node (orig-dest) of the edges we need to avoid - avoid_pairs = [] - for _edge in avoid_edges: - avoid_pairs.append( - get_node_names_from_edge_id_2(self.top_map, _edge) - ) - - # remove the nodes we want to avoid - if origin in [p[0] for p in avoid_pairs]: - for (_, _dest) in avoid_pairs: - if _dest in children: - children.remove(_dest) - - not_goal=True - route_found=False - while not_goal: - if target in children: - not_goal=False - route_found=True - cdist = self.get_distance_to_node_tmap2(cen, goal) - cnte = NodeToExpand(goal["node"]["name"], nte.name, nte.current_distance+cdist, 0.0) # Node to Expand - expanded.append(cnte) - else : - for i in children: - been_expanded = False - to_be_expanded = False - for j in expanded: # search in expanded - if i == j.name: - been_expanded = True - old_expand_node = j # found it. skip remaining - break - if not been_expanded: - # not in expanded, search in to_expand. can't be in both - for j in to_expand: - if i == j.name: - been_expanded = True - to_be_expanded = True - old_expand_node = j - # found it. skip remaining - break - - if not been_expanded: - nnn = self.get_node_from_tmap2(i) - tdist = get_distance_to_node_tmap2(goal, nnn) - cdist = self.get_distance_to_node_tmap2(cen, nnn) - cnte = NodeToExpand(nnn["node"]["name"], nte.name, nte.current_distance+cdist, tdist) # Node to Expand - to_expand.append(cnte) - to_expand = sorted(to_expand, key=lambda node: node.cost) - else: - nnn = self.get_node_from_tmap2(i) - tdist = get_distance_to_node_tmap2(goal, nnn) - cdist = self.get_distance_to_node_tmap2(cen, nnn) - # update existing NTE with new data if a shorter route to it is found - if nte.current_distance+cdist < old_expand_node.current_distance: - old_expand_node.father = nte.name - old_expand_node.current_distance = nte.current_distance+cdist - old_expand_node.dist_to_target = tdist - old_expand_node.cost = old_expand_node.current_distance + old_expand_node.dist_to_target - if to_be_expanded: # re-sort to_expand with new costs - to_expand = sorted(to_expand, key=lambda node: node.cost) - - if len(to_expand)>0: - nte = to_expand.pop(0) - cen = self.get_node_from_tmap2(nte.name) - expanded.append(nte) - children = self.get_connected_nodes_tmap2(cen) - # remove the nodes we want to avoid - if nte.name in [p[0] for p in avoid_pairs]: - for (_, _dest) in avoid_pairs: - if _dest in children: - children.remove(_dest) - else: - not_goal=False - route_found=False - -# print "===== RESULT =====" - if route_found: - steps=[] - val = len(expanded)-1 - steps.append(expanded[val]) - next_node = expanded[val].father - - while next_node != 'none': - for i in expanded: - if i.name == next_node : - steps.append(i) - next_node = i.father - break - - steps.reverse() - val = len(steps) - for i in range(1, val): - edg=self.get_edges_between_tmap2(steps[i].father, steps[i].name) - route.source.append(steps[i].father) - route.edge_id.append(edg[0]["edge_id"]) - - return route - - - def get_node_from_tmap2(self, node_name): - - try: - node = self.nodes[node_name] - except Exception: - node = None - return node - - - def get_edges_between_tmap2(self, nodea, nodeb): - - ab = [] - noda = self.get_node_from_tmap2(nodea) - for j in noda["node"]["edges"]: - if j["node"] == nodeb: - ab.append(j) - return ab - - - def get_connected_nodes_tmap2(self, node): - - items = self.children[node["node"]["name"]] - return [item["name"] for item in items] - - - def get_distance_to_node_tmap2(self, nodea, nodeb): - - items = self.children[nodea["node"]["name"]] - for item in items: - if item["name"] == nodeb["node"]["name"]: - return item["distance"] -######################################################################################################### - - -######################################################################################################### -class RouteChecker(Node): - def __init__(self, tmap): - super().__init__("route_checker") - self.edge_dict = {} - for node in tmap["nodes"]: - self.edge_dict[node["node"]["name"]] = [] - for edge in node["node"]["edges"]: - item = {"node": edge["node"], "edge_id": edge["edge_id"]} - self.edge_dict[node["node"]["name"]].append(item) - - def check_route(self, route): - self.get_logger().info("Checking Route...") - N = len(route.source) - if N < 1 or N != len(route.edge_id): - self.get_logger().error("Invalid Route: Either the route is empty or the number of nodes do not equal the number of edge ids") - return False - - if "" in route.source or "" in route.edge_id: - self.get_logger().error("Invalid Route: Empty string found in nodes or edge ids or both") - return False - - for i in range(N-1): - node = route.source[i] - if node not in self.edge_dict: - self.get_logger().error("Invalid Route: Node {} does not exist".format(node)) - return False - n = 0 - edge_id = route.edge_id[i] - next_node = route.source[i+1] - for edge in self.edge_dict[node]: - if edge["edge_id"] == edge_id and edge["node"] == next_node: - n += 1 - if n != 1: - self.get_logger().error("Invalid Route: No edge from {} to {} with id {} found or multiple edges found".format(node, next_node, edge_id)) - return False - - final_node = route.source[-1] - if final_node not in self.edge_dict: - self.get_logger().error("Invalid Route: Node {} does not exist".format(final_node)) - return False - - n = 0 - final_edge_id = route.edge_id[-1] - for edge in self.edge_dict[final_node]: - if edge["edge_id"] == final_edge_id and edge["node"] in self.edge_dict: - n += 1 - - if n != 1: - self.get_logger().error("Invalid Route: No edge from {} with id {} found or its destination node does not exist or multiple edges found".format(final_node, final_edge_id)) - return False - - self.get_logger().info("Route is Valid") - return True -######################################################################################################### - - -######################################################################################################### -def get_route_distance(tmap, node_a, node_b): - - if node_a is None or node_b is None: - return 10e5-1 - - if node_a["node"]["name"] == node_b["node"]["name"]: - return 0.0 - - rsearch = TopologicalRouteSearch2(tmap) - route = rsearch.search_route(node_a["node"]["name"], node_b["node"]["name"]) - - if not route.source: - return 10e5-1 - - dist = 0 - for i in range(len(route.source)-1): - node_1 = rsearch.get_node_from_tmap2(route.source[i]) - node_2 = rsearch.get_node_from_tmap2(route.source[i+1]) - dist += get_distance_to_node_tmap2(node_1, node_2) - - dist += get_distance_to_node_tmap2(rsearch.get_node_from_tmap2(route.source[-1]), node_b) - return dist -######################################################################################################### diff --git a/topological_navigation/topological_navigation/scripts/actions_bt.py b/topological_navigation/topological_navigation/scripts/actions_bt.py deleted file mode 100644 index 97ca8c6f..00000000 --- a/topological_navigation/topological_navigation/scripts/actions_bt.py +++ /dev/null @@ -1,169 +0,0 @@ - -class ActionsType: - def __init__(self): - - self.NAVIGATE_TO_POSE = "NavigateToPose" - self.NAVIGATE_THROUGH_POSES = "NavigateThroughPoses" - self.DRIVE_ON_HEADING = "DriveOnHeading" - - self.ROW_TRAVERSAL = "row_traversal" - self.ROW_OPERATION = "row_operation" - self.ROW_RECOVERY = "row_recovery" - self.ROW_CHANGE = "row_change" - self.GOAL_ALIGN = "goal_align" - self.GOAL_ALIGN_INDEX = ["ca"] - self.GOAL_ALIGN_GOAL = ["cb"] - self.ROW_START_INDEX = "a" - self.ROW_COLUMN_START_INDEX = "c" - self.ROW_COLUMN_START_NEXT_INDEX = "b" - self.OUTSIDE_EDGE_START_INDEX = "WayPoint" - - self.INSIDE_POLYTUNNEL = "INSIDE_POLYTUNNEL" - self.OUTSIDE_POLYTUNNEL = "OUTSIDE_POLYTUNNEL" - self.TRANSITION_INTO_POLYTUNNEL = "TRANSITION_INTO_POLYTUNNEL" - - - self.ROBOT_STATUS_PREPARATION_STATE = "PREPARATION_STATE" - self.ROBOT_STATUS_AUTONOMOUS_NAVIGATION_STATE = "AUTONOMOUS_NAVIGATION_STATE" - self.ROBOT_STATUS_AUTONOMOUS_HARVESTING_STATE = "AUTONOMOUS_HARVESTING_STATE" - self.ROBOT_STATUS_AUTONOMOUS_RECOVERY_STATE = "AUTONOMOUS_RECOVERY_STATE" - self.ROBOT_STATUS_DISABLE_STATE = "DISABLE_STATE" - self.ROBOT_STATUS_NATURAL_STATE = "NATURAL_STATE" - - self.ROBOT_CURRENT_STATUS = {} - self.ROBOT_CURRENT_STATUS[self.ROBOT_STATUS_PREPARATION_STATE] = 0 - self.ROBOT_CURRENT_STATUS[self.ROBOT_STATUS_AUTONOMOUS_NAVIGATION_STATE] = 1 - self.ROBOT_CURRENT_STATUS[self.ROBOT_STATUS_AUTONOMOUS_HARVESTING_STATE] = 2 - self.ROBOT_CURRENT_STATUS[self.ROBOT_STATUS_AUTONOMOUS_RECOVERY_STATE] = 3 - self.ROBOT_CURRENT_STATUS[self.ROBOT_STATUS_DISABLE_STATE] = 4 - self.ROBOT_CURRENT_STATUS[self.ROBOT_STATUS_NATURAL_STATE] = 5 - - self.ABORT_NOT_CONTINUE = [self.GOAL_ALIGN, self.ROW_CHANGE, self.ROW_TRAVERSAL - , self.NAVIGATE_TO_POSE, self.NAVIGATE_THROUGH_POSES - , self.ROW_OPERATION, self.ROW_RECOVERY] - - self.BT_DEFAULT = "bt_tree_default" - self.BT_GOAL_ALIGN = "bt_tree_goal_align" - self.BT_IN_ROW = "bt_tree_in_row" - self.BT_IN_ROW_OPERATION = "bt_tree_in_row_operation" - self.BT_IN_ROW_RECOVERY = "bt_tree_in_row_recovery" - - self.navigation_actions = [ - self.NAVIGATE_TO_POSE, - self.NAVIGATE_THROUGH_POSES, - self.DRIVE_ON_HEADING, - self.ROW_CHANGE, - self.ROW_TRAVERSAL, - self.ROW_OPERATION, - self.ROW_RECOVERY - ] - - self.bt_tree_types = [ - self.BT_IN_ROW, - self.BT_DEFAULT, - self.BT_GOAL_ALIGN, - self.BT_IN_ROW_OPERATION, - self.BT_IN_ROW_RECOVERY, - ] - - self.bt_tree_with_actions = {} - self.bt_tree_with_actions[self.NAVIGATE_THROUGH_POSES] = self.BT_DEFAULT - self.bt_tree_with_actions[self.NAVIGATE_TO_POSE] = self.BT_DEFAULT - self.bt_tree_with_actions[self.GOAL_ALIGN] = self.BT_GOAL_ALIGN - self.bt_tree_with_actions[self.ROW_TRAVERSAL] = self.BT_IN_ROW - self.bt_tree_with_actions[self.ROW_OPERATION] = self.BT_IN_ROW_OPERATION - self.bt_tree_with_actions[self.ROW_RECOVERY] = self.BT_IN_ROW_RECOVERY - - self.status_mapping = {} - self.status_mapping[0] = "STATUS_UNKNOWN" - self.status_mapping[1] = "STATUS_ACCEPTED" - self.status_mapping[2] = "STATUS_EXECUTING" - self.status_mapping[3] = "STATUS_CANCELING" - self.status_mapping[4] = "STATUS_SUCCEEDED" - self.status_mapping[5] = "STATUS_CANCELED" - self.status_mapping[6] = "STATUS_ABORTED" - - self.goal_cancel_error_codes = {} - self.goal_cancel_error_codes[0] = "ERROR_NONE" - self.goal_cancel_error_codes[1] = "ERROR_REJECTED" - self.goal_cancel_error_codes[2] = "ERROR_UNKNOWN_GOAL_ID" - self.goal_cancel_error_codes[3] = "ERROR_GOAL_TERMINATED" - - self.planner_with_goal_checker_config = { - "dwb_core::DWBLocalPlanner": { - "goal_checker.xy_goal_tolerance": 0.78, - "goal_checker.yaw_goal_tolerance": 0.25, - }, - "teb_local_planner::TebLocalPlannerROS": { - "goal_checker.xy_goal_tolerance": 0.1, - "goal_checker.yaw_goal_tolerance": 0.05, - }, - "rownav_local_planner::TebLocalPlannerROS":{ - "goal_checker.xy_goal_tolerance": 0.1, - "goal_checker.yaw_goal_tolerance": 0.6, - }, - "behavioral_controller::BehavioralController":{ - "goal_checker.xy_goal_tolerance": 0.1, - "goal_checker.yaw_goal_tolerance": 0.6, - } - } - - self.bt_tree_with_control_server_config = {} - self.bt_tree_with_control_server_config[self.ROW_TRAVERSAL] = "dwb_core::DWBLocalPlanner" - self.bt_tree_with_control_server_config[self.NAVIGATE_THROUGH_POSES] = "dwb_core::DWBLocalPlanner" - self.bt_tree_with_control_server_config[self.NAVIGATE_TO_POSE] = "dwb_core::DWBLocalPlanner" - self.bt_tree_with_control_server_config[self.GOAL_ALIGN] = "dwb_core::DWBLocalPlanner" - self.bt_tree_with_control_server_config[self.ROW_RECOVERY] = "dwb_core::DWBLocalPlanner" - - self.planner_with_pd_regulator_config = { - "dwb_core::DWBLocalPlanner": { - "kp_v": 40.0, - "kd_v": 0.1, - "kp_w": 12.0, - "kd_w": 0.1, - }, - "teb_local_planner::TebLocalPlannerROS": { - "kp_v": 40.0, - "kd_v": 0.1, - "kp_w": 12.0, - "kd_w": 0.1, - }, - "rownav_local_planner::TebLocalPlannerROS":{ - "kp_v": 40.0, - "kd_v": 0.1, - "kp_w": 12.0, - "kd_w": 0.1, - }, - "behavioral_controller::BehavioralController":{ - "kp_v": 40.0, - "kd_v": 0.1, - "kp_w": 12.0, - "kd_w": 0.1, - } - } - - def getCodeForRobotCurrentStatus(self, msg): - if msg not in self.ROBOT_CURRENT_STATUS: - print("The {} is not one of configured robot status types".format(msg)) - return self.ROBOT_CURRENT_STATUS[self.ROBOT_STATUS_DISABLE_STATE] - return self.ROBOT_CURRENT_STATUS[msg] - - def setPlanner(self, planner_name, action_type): - self.bt_tree_with_control_server_config[action_type] = planner_name - - def setPlannerParams(self, planner_name, xy_goal_tolerance, yaw_goal_tolerance): - if not planner_name in self.planner_with_goal_checker_config: - print("The planner {} is not one of configured types".format(planner_name)) - return - self.planner_with_goal_checker_config[planner_name]["goal_checker.xy_goal_tolerance"] = xy_goal_tolerance - self.planner_with_goal_checker_config[planner_name]["goal_checker.yaw_goal_tolerance"] = yaw_goal_tolerance - print("Setting planner {} params xy_goal_tolerance: {}, yaw_goal_tolerance: {}".format(planner_name, xy_goal_tolerance, yaw_goal_tolerance)) - - def setPDRegulstorParams(self, planner_name, pd_params, robot_controller_name): - if not planner_name in self.planner_with_goal_checker_config: - print("The planner {} is not one of configured types".format(planner_name)) - return - parmas_names = ["kp_v", "kd_v", "kp_w", "kd_w"] - for index, val in zip(parmas_names, pd_params): - self.planner_with_pd_regulator_config[planner_name][index] = val - print("Setting planner {} params kp_v: {} kd_v: {} kp_w: {} kd_w: {} ".format(planner_name, pd_params[0], pd_params[1], pd_params[2], pd_params[3])) diff --git a/topological_navigation/topological_navigation/scripts/evaluate_top_pred.py b/topological_navigation/topological_navigation/scripts/evaluate_top_pred.py deleted file mode 100755 index 114d7244..00000000 --- a/topological_navigation/topological_navigation/scripts/evaluate_top_pred.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy -from topological_navigation_msgs.srv import * - - -def predict_edges(seconds_from_now): - rospy.wait_for_service('topological_prediction/predict_edges') - try: - get_prediction = rospy.ServiceProxy('topological_prediction/predict_edges', topological_navigation_msgs.srv.PredictEdgeState) - now = rospy.Time.now() - prediction_time = now + rospy.Duration(seconds_from_now) - print("Requesting prediction for %f"%prediction_time.secs) - resp1 = get_prediction(prediction_time) - return resp1 - except rospy.ServiceException as e: - print("Service call failed: %s"%e) - -def usage(): - return "%s seconds_from_now"%sys.argv[0] - -if __name__ == "__main__": - if len(sys.argv) == 2: - seconds_from_now = int(sys.argv[1]) - else: - print(usage()) - sys.exit(1) - rospy.init_node('topological_prediction_test') - est = predict_edges(seconds_from_now) - print("set of repeated edges:") - print(set([x for x in est.edge_ids if est.edge_ids.count(x) > 1])) - #print est.edge_id - - if len(est.edge_ids) == len(est.probs) and len(est.edge_ids) == len(est.durations): - print("Good Answer!!! %d" %len(est.probs)) - for i in range(len(est.edge_ids)): - print(est.edge_ids[i], est.probs[i], est.durations[i].secs) - else: - print("something failed") - print(len(est.edge_ids), len(est.probs), len(est.durations)) diff --git a/topological_navigation/topological_navigation/scripts/get_simple_policy.py b/topological_navigation/topological_navigation/scripts/get_simple_policy.py deleted file mode 100755 index 9d6ad179..00000000 --- a/topological_navigation/topological_navigation/scripts/get_simple_policy.py +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy -from std_msgs.msg import String - -import topological_navigation_msgs.srv -from topological_navigation_msgs.msg import TopologicalMap -import topological_navigation.route_search -#from topological_navigation.route_search import * - - -class SearchPolicyServer(object): - - def __init__(self) : - - #Waiting for Topological Map - self._map_received=False - rospy.Subscriber('topological_map', TopologicalMap, self.MapCallback) - rospy.loginfo("Waiting for Topological map ...") - while not self._map_received : - rospy.sleep(rospy.Duration.from_sec(0.05)) - rospy.loginfo(" ...done") - - self._top_loc=False - rospy.loginfo("Waiting for Topological localisation ...") - rospy.Subscriber('closest_node', String, self.closestNodeCallback) - while not self._top_loc : - rospy.sleep(rospy.Duration.from_sec(0.05)) - rospy.loginfo(" ...done") - - - #This service returns any given map - self.get_map_srv=rospy.Service('get_simple_policy/get_route_to', topological_navigation_msgs.srv.GetRouteTo, self.get_route_cb) - self.get_map_srv=rospy.Service('get_simple_policy/get_route_between', topological_navigation_msgs.srv.GetRouteBetween, self.get_routeb_cb) - rospy.loginfo("All Done ...") - rospy.spin() - - - def get_route_cb(self, req): - rsearch = topological_navigation.route_search.TopologicalRouteSearch(self.top_map) - route = rsearch.search_route(self.closest_node, req.goal) - print(route) - return route - - def get_routeb_cb(self, req): - rsearch = topological_navigation.route_search.TopologicalRouteSearch(self.top_map) - route = rsearch.search_route(req.origin, req.goal) - print(route) - return route - - - """ - Update Map CallBack - - This Function updates the Topological Map everytime it is called - """ - def MapCallback(self, msg) : - self.top_map = msg - self._map_received=True - - - """ - Closest Node CallBack - - """ - def closestNodeCallback(self, msg): - self.closest_node=msg.data - self._top_loc=True - - - - - -if __name__ == '__main__': - rospy.init_node('route_search') - searcher = SearchPolicyServer() diff --git a/topological_navigation/topological_navigation/scripts/get_simple_policy2.py b/topological_navigation/topological_navigation/scripts/get_simple_policy2.py deleted file mode 100755 index f44a5210..00000000 --- a/topological_navigation/topological_navigation/scripts/get_simple_policy2.py +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env python - -""" -Created on Tue Nov 17 22:02:24 2023 -@author: Geesara Kulathunga (ggeesara@gmail.com) - -""" - -import sys -import rclpy, json , yaml -from std_msgs.msg import String -from topological_navigation_msgs.srv import GetRouteTo, GetRouteBetween -from topological_navigation.route_search2 import RouteChecker, TopologicalRouteSearch2, get_route_distance -from rclpy.qos import QoSProfile, HistoryPolicy, ReliabilityPolicy, DurabilityPolicy -from rclpy.executors import MultiThreadedExecutor - -# this ensures that all the poses and translates -# are float-type and not int-type as there is an -# assertion in ros2 messages (vector3, pose etc.) -# for float-type [x,y,z,w] keys. -class CustomSafeLoader(yaml.SafeLoader): - def construct_mapping(self, node, deep=False): - mapping = super().construct_mapping(node, deep=deep) - - # this can be extended to test the validity of the tmap2 - # as well at load time (or add missing keys) - for key in ['x', 'y', 'z', 'w']: - if key in mapping and isinstance(mapping[key], int): - mapping[key] = float(mapping[key]) - - return mapping - - -class SearchPolicyServer(rclpy.node.Node): - - def __init__(self, name): - super().__init__(name) - self._map_received = False - self.qos = QoSProfile(depth=1, - reliability=ReliabilityPolicy.RELIABLE, - history=HistoryPolicy.KEEP_LAST, - durability=DurabilityPolicy.TRANSIENT_LOCAL) - self.mapper_sub = self.create_subscription(String, '/topological_map_2', self.map_callback, qos_profile=self.qos) - self.get_logger().info("Waiting for Topological map ...") - while rclpy.ok(): - rclpy.spin_once(self) - if self._map_received: - self.get_logger().info("Navigation received the Topological Map") - break - self._top_loc=False - self.get_logger().info("Waiting for Topological localisation ...") - self.closest_node_sub = self.create_subscription(String, 'closest_node', self.closest_node_callback, qos_profile=self.qos) - while rclpy.ok(): - rclpy.spin_once(self) - if self._top_loc: - self.get_logger().info("Localisation model is up...") - break - - self.service_to_get_goal = self.create_service(GetRouteTo, 'get_simple_policy/get_route_to', self.get_route_cb) - self.service_to_get_path = self.create_service(GetRouteBetween, 'get_simple_policy/get_route_between', self.get_routeb_cb) - self.get_logger().info("All Done ...") - - - def get_route_cb(self, req, res): - route = self.rsearch.search_route(self.closest_node, req.goal) - print(route) - res.route = route - return res - - def get_routeb_cb(self, req, res): - route = self.rsearch.search_route(req.origin, req.goal) - print(route) - res.route = route - return res - - def map_callback(self, msg) : - # self.lnodes = json.loads(msg.data) - self.lnodes = yaml.load( msg.data, Loader=CustomSafeLoader) - self.topol_map = self.lnodes["pointset"] - self.rsearch = TopologicalRouteSearch2(self.lnodes) - self._map_received = True - - def closest_node_callback(self, msg): - self.closest_node=msg.data - self._top_loc=True - -def main(args=None): - rclpy.init(args=args) - node = SearchPolicyServer('simple_policy_server') - executor = MultiThreadedExecutor() - executor.add_node(node) - try: - executor.spin() - except KeyboardInterrupt: - node.get_logger().info('shutting down simple_policy_server node\n') - node.destroy_node() - rclpy.shutdown() - - -if __name__ == '__main__' : - main() - - diff --git a/topological_navigation/topological_navigation/scripts/in_row_operations.py b/topological_navigation/topological_navigation/scripts/in_row_operations.py deleted file mode 100644 index 986d31a7..00000000 --- a/topological_navigation/topological_navigation/scripts/in_row_operations.py +++ /dev/null @@ -1,115 +0,0 @@ -import math -import numpy as np -from geometry_msgs.msg import PoseStamped - -class RowOperations: - def __init__(self, initial_edges, step_size=2.0, intermediate_dis=0.6): - self.initial_edges = initial_edges - self.initial_path = False - self.step_size = step_size - self.intermediate_dis = intermediate_dis - if len(self.initial_edges) > 1: - self.terminal_pose = self.getPoseSE2(self.initial_edges[-1]) - self.getApproximatedLine() - else: - print("Can not creat a projeted path...") - self.initial_path = False - - def isPlanCalculated(self, ): - return self.initial_path - - def shortestDistance(x1, y1, a, b, c): - d = abs((a * x1 + b * y1 + c)) / (math.sqrt(a * a + b * b)) - return d - - def getPoseSE2(self, point): - return np.array([point.pose.position.x, point.pose.position.y]) - - def getSE2Pose(self, point, orientation): - target_pose = PoseStamped() - target_pose.pose.position.x = point[0] - target_pose.pose.position.y = point[1] - target_pose.pose.position.z = 0.3 - target_pose.pose.orientation = orientation - return target_pose - - def getApproximatedLine(self): - """ - (a,b,c) to represent the linear equation ax+by+c=0. - """ - p1 = self.getPoseSE2(self.initial_edges[0]) - p2 = self.terminal_pose - self.a = p2[1] - p1[1] - self.b = p1[0] - p2[0] - self.c = -1.0*(self.a * (p1[0]) + self.b * (p1[1])) - self.initial_path = True - - def vecScale(self, v, a): - return (a * v[0], a * v[1]) - - def vecMulAdd(self, v1, v2, a=1): - """calc v1+a*v2""" - return (v1[0] + a * v2[0], v1[1] + a * v2[1]) - - def innerProd(self, v1, v2): - """v1^T * v2""" - return v1[0] * v2[0] + v1[1] * v2[1] - - def getClosestPoint(self, p): - """ - Params: - coef: 3-tuple (a,b,c) to represent the linear equation ax+by+c=0. - p: 2-tuple (px,py) to represent the point. - https://math.stackexchange.com/questions/62633/orthogonal-projection-of-a-point-onto-a-line - """ - a = self.a - b = self.b - c = self.c - # find p0 at the line - if b == 0: - p0 = (-c / a, 0) - else: - p0 = (0, -c / b) - if a == 0: - v = (1, 0) - elif b == 0: - v = (0, 1) - else: - v = (b, -a) - target_pose = self.vecMulAdd( - p0, self.vecScale(v, self.innerProd(self.vecMulAdd(p, p0, -1), v) / self.innerProd(v, v)) - ) - return np.array([target_pose[0], target_pose[1]]) - - def getNextGoal(self, current_pose_original): - current_pose = self.getPoseSE2(current_pose_original) - closest_pose = self.getClosestPoint(current_pose) - norm_dis = np.linalg.norm(self.terminal_pose-closest_pose) - updated_pose = None - intermediate_pose = None - if(norm_dis < self.step_size): - updated_pose = self.getSE2Pose(self.terminal_pose, current_pose_original.pose.orientation) - intermediate_pose = current_pose + self.intermediate_dis*((self.terminal_pose-closest_pose)/norm_dis) - intermediate_pose = self.getSE2Pose(intermediate_pose, current_pose_original.pose.orientation) - return updated_pose, intermediate_pose, True - else: - updated_pose = current_pose + self.step_size*((self.terminal_pose-closest_pose)/norm_dis) - updated_pose = self.getSE2Pose(updated_pose, current_pose_original.pose.orientation) - - intermediate_pose = current_pose + self.intermediate_dis*((self.terminal_pose-closest_pose)/norm_dis) - intermediate_pose = self.getSE2Pose(intermediate_pose, current_pose_original.pose.orientation) - return updated_pose, intermediate_pose, False - - def getNextIntermediateGoal(self, current_pose_original): - current_pose = self.getPoseSE2(current_pose_original) - closest_pose = self.getClosestPoint(current_pose) - norm_dis = np.linalg.norm(self.terminal_pose-closest_pose) - intermediate_pose = None - if(norm_dis < self.step_size): - intermediate_pose = current_pose + self.intermediate_dis*((self.terminal_pose-closest_pose)/norm_dis) - intermediate_pose = self.getSE2Pose(intermediate_pose, current_pose_original.pose.orientation) - return intermediate_pose, True - else: - intermediate_pose = current_pose + self.intermediate_dis*((self.terminal_pose-closest_pose)/norm_dis) - intermediate_pose = self.getSE2Pose(intermediate_pose, current_pose_original.pose.orientation) - return intermediate_pose, False diff --git a/topological_navigation/topological_navigation/scripts/localisation.py b/topological_navigation/topological_navigation/scripts/localisation.py deleted file mode 100755 index c0340fbd..00000000 --- a/topological_navigation/topological_navigation/scripts/localisation.py +++ /dev/null @@ -1,530 +0,0 @@ -#!/usr/bin/env python -################################################################################################################### -import sys, json, numpy as np -import rospy, rostopic, tf -import topological_navigation_msgs.srv - -from geometry_msgs.msg import Pose -from std_msgs.msg import String, Float32 -from topological_navigation_msgs.msg import ClosestEdges - -from topological_navigation.tmap_utils import * -from topological_navigation.point2line import pnt2line - -from threading import Thread - - -class LocaliseByTopicSubscriber(object): - """ - Helper class for localise by topic subcription. Callable to start subsriber - thread. - """ - def __init__(self, topic, callback, callback_args): - - self.topic = rospy.get_namespace() + topic - self.callback = callback - self.callback_args = callback_args - self.sub = None - self.t = None - - - def get_topic_type(self, topic, blocking=False): - """ - Get the topic type. - !!! Overriden from rostopic !!! - - :param topic: topic name, ``str`` - :param blocking: (default False) block until topic becomes available, ``bool`` - - :returns: topic type, real topic name and fn to evaluate the message instance - if the topic points to a field within a topic, e.g. /rosout/msg. fn is None otherwise. ``(str, str, fn)`` - :raises: :exc:`ROSTopicException` If master cannot be contacted - """ - topic_type, real_topic, msg_eval = rostopic._get_topic_type(topic) - if topic_type: - return topic_type, real_topic, msg_eval - elif blocking: - sys.stderr.write("WARNING: topic [%s] does not appear to be published yet\n"%topic) - while not rospy.is_shutdown(): - topic_type, real_topic, msg_eval = rostopic._get_topic_type(topic) - if topic_type: - return topic_type, real_topic, msg_eval - else: - rostopic._sleep(10.) # Change! Waiting for 10 seconds instead of 0.1 to reduce load - - return None, None, None - - - def __call__(self): - """ - When called start a new thread that waits for the topic type and then - subscribes. This is therefore non blocking and waits in the background. - """ - self.t = Thread(target=self.subscribe) - self.t.start() - - - def subscribe(self): - """ - Get the topic type and subscribe to topic. Subscriber is kept alive as - long as the instance of the class is alive. - """ - rostopic.get_topic_type = self.get_topic_type # Monkey patch - topic_type = rostopic.get_topic_class(self.topic, True)[0] - rospy.loginfo("Subscribing to %s" % self.topic) - self.sub = rospy.Subscriber( - name=self.topic, - data_class=topic_type, - callback=self.callback, - callback_args=self.callback_args - ) - - - def close(self): - self.sub.unregister() - - - def __del__(self): - self.close() -################################################################################################################### - - -################################################################################################################### -class TopologicalNavLoc(object): - - - def __init__(self, name, wtags): - - self.throttle_val = rospy.get_param("~LocalisationThrottle", 3) - self.only_latched = rospy.get_param("~OnlyLatched", True) - - self.throttle = self.throttle_val - self.node="Unknown" - self.wpstr="Unknown" - self.closest_dist = 10e5-1 - self.cnstr="Unknown" - self.closest_edge_ids = [] - self.closest_edge_dists = [] - self.node_poses = {} - - # TODO: remove Temporary arg until tags functionality is MongoDB independent - self.with_tags = wtags - - self.subscribers=[] - self.wp_pub = rospy.Publisher('closest_node', String, latch=True, queue_size=1) - self.wd_pub = rospy.Publisher('closest_node_distance', Float32, latch=True, queue_size=1) - self.cn_pub = rospy.Publisher('current_node', String, latch=True, queue_size=1) - self.ce_pub = rospy.Publisher('closest_edges', ClosestEdges, latch=True, queue_size=1) - - self.force_check = True - self.rec_map = False - self.loc_by_topic = [] - self.persist = {} - - self.current_pose=Pose() - self.previous_pose=Pose() - self.previous_pose.position.x=1000 #just give a random big value so this is tested - - #This service returns a list of nodes that have a given tag - self.get_tagged_srv=rospy.Service('topological_localisation/get_nodes_with_tag', topological_navigation_msgs.srv.GetTaggedNodes, self.get_nodes_wtag_cb) - self.loc_pos_srv=rospy.Service('topological_localisation/localise_pose', topological_navigation_msgs.srv.LocalisePose, self.localise_pose_cb) - - rospy.Subscriber('topological_map_2', String, self.MapCallback) - - rospy.loginfo("Localisation waiting for the Topological Map...") - while not self.rec_map : - rospy.sleep(rospy.Duration.from_sec(0.1)) - - self.base_frame = rospy.get_param("~base_frame", "base_link") - - rospy.loginfo("Listening to the tf transform between {} and {}".format(self.tmap_frame, self.base_frame)) - self.listener = tf.TransformListener() - self.rate = rospy.Rate(10.0) - self.PoseCallback() - - rospy.spin() - - - def get_distances_to_pose(self, pose): - """ - This function returns the distance from each waypoint to a pose in an organised way - """ - distances = [] - for node in self.tmap["nodes"]: - dist = get_distance_node_pose_from_tmap2(node, pose) - a = {} - a["node"] = node - a["dist"] = dist - distances.append(a) - - distances = sorted(distances, key=lambda k: k["dist"]) - return distances - - - def get_edge_distances_to_pose(self, pose): - """ - This function returns the distance from each edge to a pose in an organised way - """ - try: - pnts = np.array(self.vectors_start.shape[0] * [[pose.position.x, pose.position.y, 0]]) - distances = pnt2line(pnts, self.vectors_start, self.vectors_end) - closest_edges = [self.dist_edge_ids[index] for index in np.argsort(distances)] - except Exception as e: - rospy.logwarn("Cannot get distance to edges: {}".format(e)) - closest_edges = [] - distances = np.array([]) - - return closest_edges, np.sort(distances) - - - def PoseCallback(self): - """ - This function receives the topo_map to base_link tf transform and localises - the robot in topological space - """ - while not rospy.is_shutdown(): - - try: - now = rospy.Time(0) - self.listener.waitForTransform(self.tmap_frame, self.base_frame, now, rospy.Duration(2.0)) - (trans,rot) = self.listener.lookupTransform(self.tmap_frame, self.base_frame, now) - except Exception as e: - rospy.logerr(e) - self._sleep() - continue - - msg = Pose() - msg.position.x = trans[0] - msg.position.y = trans[1] - msg.position.z = trans[2] - msg.orientation.x = rot[0] - msg.orientation.y = rot[1] - msg.orientation.z = rot[2] - msg.orientation.w = rot[3] - - self.current_pose = msg - if(self.throttle%self.throttle_val==0): - self.distances =[] - self.distances = self.get_distances_to_pose(msg) - closeststr='none' - currentstr='none' - - closest_edges, edge_dists = self.get_edge_distances_to_pose(msg) - if len(closest_edges) > 1: - closest_edges = closest_edges[:2] - edge_dists = edge_dists[:2] - - not_loc=True - if self.loc_by_topic: - for i in self.loc_by_topic: - if not_loc: - if not i['localise_anywhere']: #If it should check the influence zone to localise by topic - test_node = get_node_from_tmap2(self.tmap, i['name']) - if self.point_in_poly(test_node, msg): - not_loc=False - closeststr=str(i['name']) - currentstr=str(i['name']) - self.force_check = False - else: # If not, it is localised!!! - not_loc=False - closeststr=str(i['name']) - currentstr=str(i['name']) - self.force_check = False - else: - self.force_check = True - - if not_loc: - ind = 0 - while not_loc and ind0.10: - val = getattr(msg, item['field']) - - if val == item['val']: - if self.persist.has_key(item['name']): - if self.persist[item['name']] < item['persistency']: - self.persist[item['name']]+=1 - else: - self.persist[item['name']]=0 - - if item['name'] not in [x['name'] for x in self.loc_by_topic] and self.persist[item['name']] < item['persistency']: - self.loc_by_topic.append(item) - self.previous_pose = self.current_pose - - else: - if item['name'] in self.persist: - self.persist.pop(item['name']) - - if item['name'] in [x['name'] for x in self.loc_by_topic]: - self.loc_by_topic.remove(item) - self.previous_pose = self.current_pose - - - def get_nodes_wtag_cb(self,req): - - tlist = [] - rlist=[] - - try: - rospy.wait_for_service('/topological_map_manager2/get_tagged_nodes', timeout=3) - cont = rospy.ServiceProxy('/topological_map_manager2/get_tagged_nodes', topological_navigation_msgs.srv.GetTaggedNodes) - - resp1 = cont(req.tag) - tagnodes = resp1.nodes - - except (rospy.ServiceException) as e: - rospy.logerr("Service call failed: %s"%e) - - ldis = [x["node"]["node"]["name"] for x in self.distances] - for i in ldis: - if i in tagnodes: - tlist.append(i) - rlist.append(tlist) - - return rlist - - - def localise_pose_cb(self, req): - """ - This function gets the node and closest node for a pose - """ - not_loc=True - distances=[] - distances=self.get_distances_to_pose(req.pose) - closeststr='none' - currentstr='none' - - ind = 0 - while not_loc and ind min(p1y,p2y): - if y <= max(p1y,p2y): - if x <= max(p1x,p2x): - if p1y != p2y: - xints = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x - if p1x == p2x or x <= xints: - inside = not inside - p1x,p1y = p2x,p2y - - return inside -################################################################################################################### - - -################################################################################################################### -if __name__ == '__main__': - rospy.init_node('topological_localisation') - wtags=True - argc = len(sys.argv) - if argc > 1: - if '-notags' in sys.argv: - wtags = False - server = TopologicalNavLoc(rospy.get_name(), wtags) -################################################################################################################### \ No newline at end of file diff --git a/topological_navigation/topological_navigation/scripts/localisation2.py b/topological_navigation/topological_navigation/scripts/localisation2.py index 77b0c73a..91c7453f 100755 --- a/topological_navigation/topological_navigation/scripts/localisation2.py +++ b/topological_navigation/topological_navigation/scripts/localisation2.py @@ -1,641 +1,538 @@ #!/usr/bin/env python +"""Topological localisation node for ROS 2. + +Determines the robot's current topological node and closest node by +subscribing to TF transforms and the topological map topic. Uses a +NetworkX directed graph and a KD-tree spatial index for efficient +O(log n) nearest-neighbour queries. + +Publishers: + ~/closest_node (std_msgs/String) - name of the closest node + ~/closest_node_distance (std_msgs/Float32) - distance to closest node + ~/current_node (std_msgs/String) - node whose influence zone + the robot currently occupies + ~/closest_edges (topological_navigation_msgs/ClosestEdges) + ~/current_node/tag (std_msgs/String) - tag of the current node + +Services: + /topological_localisation/localise_pose (LocalisePose) + +Subscriptions: + /topological_map_2 (std_msgs/String) - YAML-encoded topological map """ -Created on Tue Nov 5 22:02:24 2023 -@author: Geesara Kulathunga (ggeesara@gmail.com) -""" -################################################################################################################### -import sys, json, numpy as np -import rclpy, tf2_ros +import threading + +import numpy as np +import rclpy import yaml -import topological_navigation_msgs.srv -from rclpy.parameter import Parameter + from geometry_msgs.msg import Pose -from std_msgs.msg import String, Float32 -from topological_navigation_msgs.msg import ClosestEdges -from topological_navigation_msgs.srv import GetTaggedNodes, LocalisePose -from rclpy.qos import QoSProfile, HistoryPolicy, ReliabilityPolicy, DurabilityPolicy -from topological_navigation.tmap_utils import * -from topological_navigation.point2line import pnt2line +from rclpy.callback_groups import ReentrantCallbackGroup +from rclpy.executors import MultiThreadedExecutor +from rclpy.parameter import Parameter +from rclpy.qos import ( + DurabilityPolicy, + HistoryPolicy, + QoSProfile, + ReliabilityPolicy, +) +from std_msgs.msg import Float32, String from tf2_ros import TransformException from tf2_ros.buffer import Buffer from tf2_ros.transform_listener import TransformListener -import time -from std_msgs.msg import Bool -from threading import Thread, Event -from rclpy.callback_groups import MutuallyExclusiveCallbackGroup, ReentrantCallbackGroup -from rclpy.executors import MultiThreadedExecutor, SingleThreadedExecutor -from topological_navigation.scripts.actions_bt import ActionsType - -# this ensures that all the poses and translates -# are float-type and not int-type as there is an -# assertion in ros2 messages (vector3, pose etc.) -# for float-type [x,y,z,w] keys. -class CustomSafeLoader(yaml.SafeLoader): - def construct_mapping(self, node, deep=False): - mapping = super().construct_mapping(node, deep=deep) - - # this can be extended to test the validity of the tmap2 - # as well at load time (or add missing keys) - for key in ['x', 'y', 'z', 'w']: - if key in mapping and isinstance(mapping[key], int): - mapping[key] = float(mapping[key]) - - return mapping -################################################################################################################### +from topological_navigation.tmap_utils import CustomSafeLoader +from topological_navigation.networkx_utils import ( + build_graph_from_tmap, + build_kdtree_from_graph, + determine_closest_node, + determine_current_node, + get_edge_distances_nx, + update_loc_by_topic_nx, +) +from topological_navigation_msgs.msg import ClosestEdges +from topological_navigation_msgs.srv import LocalisePose + +try: + from topological_navigation_msgs.srv import GetTaggedNodes + _HAS_GET_TAGGED_NODES = True +except ImportError: + _HAS_GET_TAGGED_NODES = False + class TopologicalNavLoc(rclpy.node.Node): + """ROS 2 node for topological localisation. - def __init__(self, name, wtags): + Determines which topological node the robot currently occupies + (influence-zone check) and which node is closest (KD-tree query). + Publishes the results on latched topics. + """ + + def __init__(self, name: str, with_tags: bool = True): super().__init__(name) - - self.declare_parameter('LocalisationThrottle', rclpy.Parameter.Type.INTEGER) - self.declare_parameter('OnlyLatched', rclpy.Parameter.Type.BOOL) - self.declare_parameter('base_frame', rclpy.Parameter.Type.STRING) - self.throttle_val = self.get_parameter_or("LocalisationThrottle", Parameter('int', Parameter.Type.INTEGER, 3)).value - self.only_latched = self.get_parameter_or("OnlyLatched", Parameter('bool', Parameter.Type.BOOL, True)).value - self.base_frame = self.get_parameter_or("base_frame", Parameter('str', Parameter.Type.STRING, "base_link")).value + # -- ROS parameters -------------------------------------------------- + self.declare_parameter('LocalisationThrottle', rclpy.Parameter.Type.INTEGER) + self.declare_parameter('OnlyLatched', rclpy.Parameter.Type.BOOL) + self.declare_parameter('base_frame', rclpy.Parameter.Type.STRING) + self.throttle_val = self.get_parameter_or( + "LocalisationThrottle", + Parameter('int', Parameter.Type.INTEGER, 1), + ).value + self.only_latched = self.get_parameter_or( + "OnlyLatched", + Parameter('bool', Parameter.Type.BOOL, True), + ).value + self.base_frame = self.get_parameter_or( + "base_frame", + Parameter('str', Parameter.Type.STRING, "base_link"), + ).value + + # -- Internal state --------------------------------------------------- self.throttle = self.throttle_val - self.node="Unknown" - self.wpstr="Unknown" - self.closest_dist = 10e5-1 - self.cnstr="Unknown" - self.nodetag="Unknown" #current node tag - self.closest_edge_ids = [] - self.closest_edge_dists = [] - self.node_poses = {} - self.current_closest_node_name = "" - - # TODO: remove Temporary arg until tags functionality is MongoDB independent - self.with_tags = wtags - - self.subscribers=[] - - self.qos = QoSProfile(depth=1, - reliability=ReliabilityPolicy.RELIABLE, - history=HistoryPolicy.KEEP_LAST, - durability=DurabilityPolicy.TRANSIENT_LOCAL) - + self.wpstr = "Unknown" + self.closest_dist = 1e6 - 1 + self.cnstr = "Unknown" + self.nodetag = "Unknown" + self.closest_edge_ids: list = [] + self.closest_edge_dists: list = [] + + # NetworkX graph and KD-tree data structures + self._graph = None + self._kdtree = None + self._kdtree_node_names: list = [] + + # Lock protects _graph, _kdtree, _kdtree_node_names, loc_by_topic, + # names_by_topic, and nogos during concurrent map rebuilds. + self._map_lock = threading.Lock() + + self.with_tags = with_tags + + # -- QoS profile (transient-local for late-joining subscribers) ------- + self.qos = QoSProfile( + depth=1, + reliability=ReliabilityPolicy.RELIABLE, + history=HistoryPolicy.KEEP_LAST, + durability=DurabilityPolicy.TRANSIENT_LOCAL, + ) + + # -- Publishers ------------------------------------------------------- self.wp_pub = self.create_publisher(String, 'closest_node', qos_profile=self.qos) - self.wd_pub = self.create_publisher(Float32,'closest_node_distance', qos_profile=self.qos) + self.wd_pub = self.create_publisher(Float32, 'closest_node_distance', qos_profile=self.qos) self.cn_pub = self.create_publisher(String, 'current_node', qos_profile=self.qos) self.ce_pub = self.create_publisher(ClosestEdges, 'closest_edges', qos_profile=self.qos) self.tag_pub = self.create_publisher(String, 'current_node/tag', qos_profile=self.qos) - self.robot_navigation_area_pub = self.create_publisher(String, 'robot_navigation_area', qos_profile=self.qos) - self.force_check = True + # -- Localisation state ----------------------------------------------- self.rec_map = False - self.set_nogos = False - self.loc_by_topic = [] - self.persist = {} - - self.current_pose=Pose() - self.previous_pose=Pose() - self.previous_pose.position.x = 1000.0 #just give a random big value so this is tested - - self.service_get_tagged_done_event = Event() - self.callback_group = ReentrantCallbackGroup() - self.callback_localize_pose = ReentrantCallbackGroup() - self.timer_map_group = ReentrantCallbackGroup() - - self.get_tagged_srv = self.create_service(GetTaggedNodes, '/topological_localisation/get_nodes_with_tag' - , self.get_nodes_wtag_cb, callback_group=self.callback_group) - self.loc_pos_srv = self.create_service(LocalisePose, '/topological_localisation/localise_pose' - , self.localise_pose_cb, callback_group=self.callback_localize_pose) - - self.subs_topmap = self.create_subscription(String, '/topological_map_2' - , self.MapCallback, qos_profile=self.qos, callback_group=self.timer_map_group) - self.subs_topmap # prevent unused variable warning - - self.ACTIONS = ActionsType() - - self.get_logger().info("Localisation waiting for the Topological Map...") + self.loc_by_topic: list = [] + self.names_by_topic: list = [] + self.nogos: list = [] + + self.current_pose = Pose() + + # -- Callback groups -------------------------------------------------- + self._cb_group_localise = ReentrantCallbackGroup() + self._cb_group_map = ReentrantCallbackGroup() + + # -- Service ---------------------------------------------------------- + self.loc_pos_srv = self.create_service( + LocalisePose, + '/topological_localisation/localise_pose', + self.localise_pose_cb, + callback_group=self._cb_group_localise, + ) + + # -- Subscription ----------------------------------------------------- + self.create_subscription( + String, + '/topological_map_2', + self._map_callback, + qos_profile=self.qos, + callback_group=self._cb_group_map, + ) + + # -- Wait for the first map ------------------------------------------- + # _map_callback already rebuilds graph, KD-tree, nogos, and + # loc_by_topic, so we only need to wait for rec_map here. + self.get_logger().info("Waiting for the topological map on /topological_map_2 ...") while rclpy.ok(): rclpy.spin_once(self) - if(self.rec_map): - if self.with_tags: - self.nogos = self.get_no_go_nodes() - self.set_nogos = True - else: - self.nogos=[] - self.get_logger().info("NO GO NODES: %s" %self.nogos) - self.get_logger().info("NODES BY TOPIC: %s" %self.names_by_topic) - self.get_logger().info("Listening to the tf transform between {} and {}".format(self.tmap_frame, self.base_frame)) - break - self.get_logger().warning("Wating for the topological map") - + if self.rec_map: + self.get_logger().info(f"No-go nodes: {self.nogos}") + self.get_logger().info(f"Localise-by-topic nodes: {self.names_by_topic}") + self.get_logger().info( + f"Listening for TF: {self.tmap_frame} -> {self.base_frame}" + ) + break + self.get_logger().warning("Still waiting for the topological map ...") + + # -- TF listener & periodic callback ---------------------------------- self.tf_buffer = Buffer() self.listener = TransformListener(self.tf_buffer, self) - self.rate = self.create_rate(20.0) - - self.create_timer(1.0, self.pose_callback) + self.create_timer(1.0, self._pose_callback) - - def get_distances_to_pose(self, pose): - """ - This function returns the distance from each waypoint to a pose in an organised way - """ - distances = [] - for node in self.tmap["nodes"]: - dist = get_distance_node_pose_from_tmap2(node, pose) - a = {} - a["node"] = node - a["dist"] = dist - distances.append(a) - - distances = sorted(distances, key=lambda k: k["dist"]) - return distances - - - def get_edge_distances_to_pose(self, pose): - """ - This function returns the distance from each edge to a pose in an organised way - """ - try: - pnts = np.array(self.vectors_start.shape[0] * [[pose.position.x, pose.position.y, 0]]) - distances = pnt2line(pnts, self.vectors_start, self.vectors_end) - closest_edges = [self.dist_edge_ids[index] for index in np.argsort(distances)] - except Exception as e: - self.get_logger().warning("Cannot get distance to edges: {}".format(e)) - closest_edges = [] - distances = np.array([]) - - return closest_edges, np.sort(distances) - + def get_edge_distances_to_pose(self, pose: Pose): + """Return edge-ID list and distance array for all edges relative to *pose*. - def pose_callback(self): - """ - This function receives the topo_map to base_link tf transform and localises - the robot in topological space + Uses the NetworkX graph for vectorised edge distance calculations. + Thread-safe: takes a snapshot of the graph under the map lock. + + Returns: + Tuple ``(edge_ids, distances)`` - both may be empty if the graph + is unavailable. """ + with self._map_lock: + graph = self._graph + + if graph is None: + self.get_logger().warning( + "Cannot compute edge distances: graph not yet available" + ) + return [], np.array([]) + + return get_edge_distances_nx(graph, pose, logger=self.get_logger()) + + # ----------------------------------------------------------------- + # Periodic TF-based localisation + # ----------------------------------------------------------------- + + def _pose_callback(self): + """Look up the TF transform and localise the robot in the topological map.""" try: - trans = self.tf_buffer.lookup_transform(self.tmap_frame, self.base_frame, rclpy.time.Time()) - msg = Pose() - msg.position.x = trans.transform.translation.x - msg.position.y = trans.transform.translation.y - msg.position.z = trans.transform.translation.z - msg.orientation.x = trans.transform.rotation.x - msg.orientation.y = trans.transform.rotation.y - msg.orientation.z = trans.transform.rotation.z - msg.orientation.w = trans.transform.rotation.w - - self.current_pose = msg - if(self.throttle%self.throttle_val==0): - self.distances = [] - self.distances = self.get_distances_to_pose(msg) - closeststr='none' - currentstr='none' - nodetag = 'Unknown' - - closest_edges, edge_dists = self.get_edge_distances_to_pose(msg) - if len(closest_edges) > 1: - closest_edges = closest_edges[:2] - edge_dists = edge_dists[:2] - - not_loc = True - if self.loc_by_topic: - for i in self.loc_by_topic: - if not_loc: - if not i['localise_anywhere']: #If it should check the influence zone to localise by topic - test_node = get_node_from_tmap2(self.tmap, i['name']) - if self.point_in_poly(test_node, msg): - not_loc=False - closeststr=str(i['name']) - currentstr=str(i['name']) - self.current_closest_node_name = currentstr - self.force_check = False - else: # If not, it is localised!!! - not_loc=False - closeststr=str(i['name']) - currentstr=str(i['name']) - self.current_closest_node_name = currentstr - self.force_check = False - else: - self.force_check = True - - if not_loc: - ind = 0 - while not_loc and ind 0): - edge_ids_list = self.closest_edge_ids[0] - edge_ids = edge_ids_list.split("_") - if(len(edge_ids) == 2): - if((self.ACTIONS.GOAL_ALIGN_INDEX[0] in edge_ids_list) and (self.ACTIONS.GOAL_ALIGN_GOAL[0] in edge_ids_list)): - robot_nav_area = self.ACTIONS.TRANSITION_INTO_POLYTUNNEL - - if(robot_nav_area is None): - robot_nav_area = self.ACTIONS.OUTSIDE_POLYTUNNEL - robot_current_area_info.data = robot_nav_area - self.robot_navigation_area_pub.publish(robot_current_area_info) - + trans = self.tf_buffer.lookup_transform( + self.tmap_frame, self.base_frame, rclpy.time.Time(), + ) except TransformException as ex: - self.get_logger().warn(f'Could not transform {self.tmap_frame} to {self.base_frame}: {ex}') - pass + self.get_logger().warning( + f"TF lookup failed ({self.tmap_frame} -> {self.base_frame}): {ex}" + ) + return + + msg = Pose() + msg.position.x = trans.transform.translation.x + msg.position.y = trans.transform.translation.y + msg.position.z = trans.transform.translation.z + msg.orientation.x = trans.transform.rotation.x + msg.orientation.y = trans.transform.rotation.y + msg.orientation.z = trans.transform.rotation.z + msg.orientation.w = trans.transform.rotation.w + self.current_pose = msg + + if self.throttle % self.throttle_val != 0: + self.throttle += 1 + return + + # Snapshot data structures under the lock so we work with a + # consistent view even if a map update arrives mid-callback. + with self._map_lock: + graph = self._graph + kdtree = self._kdtree + kdtree_names = self._kdtree_node_names + loc_by_topic = self.loc_by_topic + nogos = list(self.nogos) + names_by_topic = list(self.names_by_topic) + + if graph is None or kdtree is None: + self.get_logger().warning( + "Localisation skipped: graph or KD-tree not ready" + ) + self.throttle += 1 + return + + # Current node (inside influence zone) + currentstr = determine_current_node( + graph, kdtree, kdtree_names, + msg, loc_by_topic, nogos, + ) + + # Closest node by distance + closeststr, closest_dist = determine_closest_node( + kdtree, kdtree_names, graph, + currentstr, nogos, names_by_topic, msg, + ) + + # Closest edges (computed from the *current* pose) + closest_edges, edge_dists = get_edge_distances_nx(graph, msg, logger=self.get_logger()) + if len(closest_edges) > 1: + closest_edges = closest_edges[:2] + edge_dists = edge_dists[:2] + + # Resolve node tag + nodetag = self._get_node_tag(closeststr) + + # Publish + closest_dist = float(np.round(closest_dist, 3)) + self._publish_topics( + closeststr, closest_dist, currentstr, + closest_edges, list(np.round(edge_dists, 3)), nodetag, + ) + self.throttle = 1 - def get_string_msgs(self, str): - msg = String() - msg.data = str - return msg + # ----------------------------------------------------------------- + # Tag helper + # ----------------------------------------------------------------- - def get_float32_msgs(self, num): - msg = Float32() - msg.data = num - return msg + def _get_node_tag(self, node_name: str) -> str: + """Return the first tag string for *node_name*, or ``'Unknown'``. - def publishTopics(self, wpstr, closest_dist, cnstr, closest_edge_ids, closest_edge_dists, nodetag = 'Unknown') : - - def pub_closest_edges(closest_edge_ids, closest_edge_dists): + Uses the NetworkX graph ``meta`` attribute instead of a linear + YAML lookup. + """ + if self._graph is None or node_name not in self._graph.nodes: + return 'Unknown' + meta = self._graph.nodes[node_name].get('meta', {}) + try: + return meta['tag'][0] + except (KeyError, IndexError, TypeError): + return 'Unknown' + + # ----------------------------------------------------------------- + # Message construction helpers + # ----------------------------------------------------------------- + + @staticmethod + def _make_string_msg(text: str) -> String: + msg = String() + msg.data = text + return msg + + @staticmethod + def _make_float32_msg(value: float) -> Float32: + msg = Float32() + msg.data = value + return msg + + # ----------------------------------------------------------------- + # Topic publishing + # ----------------------------------------------------------------- + + def _publish_topics( + self, + wpstr: str, + closest_dist: float, + cnstr: str, + closest_edge_ids: list, + closest_edge_dists: list, + nodetag: str = 'Unknown', + ): + """Publish localisation results, optionally in latched mode.""" + + def _pub_edges(edge_ids, edge_dists): msg = ClosestEdges() - msg.edge_ids = closest_edge_ids - msg.distances = closest_edge_dists + msg.edge_ids = edge_ids + msg.distances = edge_dists self.ce_pub.publish(msg) - + if len(set(closest_edge_dists)) == 1: closest_edge_ids.sort() - - if self.only_latched : + + if self.only_latched: if self.wpstr != wpstr: - self.wp_pub.publish(self.get_string_msgs(wpstr)) + self.wp_pub.publish(self._make_string_msg(wpstr)) if self.closest_dist != closest_dist: - self.wd_pub.publish(self.get_float32_msgs(closest_dist)) + self.wd_pub.publish(self._make_float32_msg(closest_dist)) if self.cnstr != cnstr: - self.cn_pub.publish(self.get_string_msgs(cnstr)) + self.cn_pub.publish(self._make_string_msg(cnstr)) if self.nodetag != nodetag: - self.tag_pub.publish(self.get_string_msgs(nodetag)) - if self.closest_edge_ids != closest_edge_ids \ - or self.closest_edge_dists != closest_edge_dists: - pub_closest_edges(closest_edge_ids, closest_edge_dists) + self.tag_pub.publish(self._make_string_msg(nodetag)) + if (self.closest_edge_ids != closest_edge_ids + or self.closest_edge_dists != closest_edge_dists): + _pub_edges(closest_edge_ids, closest_edge_dists) else: - self.wp_pub.publish(self.get_string_msgs(wpstr)) - self.wd_pub.publish(self.get_float32_msgs(closest_dist)) - self.cn_pub.publish(self.get_string_msgs(cnstr)) - self.tag_pub.publish(self.get_string_msgs(nodetag)) - pub_closest_edges(closest_edge_ids, closest_edge_dists) - + self.wp_pub.publish(self._make_string_msg(wpstr)) + self.wd_pub.publish(self._make_float32_msg(closest_dist)) + self.cn_pub.publish(self._make_string_msg(cnstr)) + self.tag_pub.publish(self._make_string_msg(nodetag)) + _pub_edges(closest_edge_ids, closest_edge_dists) + self.wpstr = wpstr self.closest_dist = closest_dist self.cnstr = cnstr self.nodetag = nodetag self.closest_edge_ids = closest_edge_ids self.closest_edge_dists = closest_edge_dists - + # self.get_logger().info( + # f"Published: closest_node='{wpstr}', closest_dist={closest_dist}, " + # f"current_node='{cnstr}', nodetag='{nodetag}', " + # f"closest_edges={closest_edge_ids} (dists: {closest_edge_dists})" + # ) - def MapCallback(self, msg): - """ - This function receives the Topological Map - """ - if(self.rec_map is False): - self.names_by_topic = [] - self.nodes_by_topic = [] - self.nogos = [] - - # self.tmap = json.loads(msg.data) - self.tmap = yaml.load( msg.data, Loader=CustomSafeLoader) - self.tmap_frame = self.tmap["transformation"]["child"] - self.get_logger().info("Localisation received the Topological Map") - - self.get_edge_vectors() - self.update_loc_by_topic() - - self.get_logger().info("Creating localise by topic subscribers...") - - for i in self.subscribers: - del i - self.subscribers = [] - # for j in self.nodes_by_topic: - # # Append to list to keep the instance alive and the subscriber active. - # self.subscribers.append(LocaliseByTopicSubscriber( - # topic=j['topic'], - # callback=self.Callback, - # callback_args=j - # )) - # # Calling instance of class to start subsribing thread. - # self.subscribers[-1]() - self.rec_map = True - - - def get_edge_vectors(self): - - node_poses = {} - for node in self.tmap["nodes"]: - node_poses[node["node"]["name"]] = node["node"]["pose"] - - self.dist_edge_ids = [] - vectors_start = [] - vectors_end = [] - - for node in self.tmap["nodes"]: - orig_pose = node_poses[node["node"]["name"]] - start = [orig_pose["position"]["x"], orig_pose["position"]["y"], 0] - - for edge in node["node"]["edges"]: - dest_pose = node_poses[edge["node"]] - - if node["node"]["name"] != edge["node"]: - self.dist_edge_ids.append(edge["edge_id"]) - end = [dest_pose["position"]["x"], dest_pose["position"]["y"], 0] - - vectors_start.append(start) - vectors_end.append(end) - else: - self.get_logger().error("Cannot get distance to edge {}: Destination is equal to origin".format(edge["edge_id"])) - - self.vectors_start = np.array(vectors_start) - self.vectors_end = np.array(vectors_end) + # ----------------------------------------------------------------- + # Map reception + # ----------------------------------------------------------------- + def _map_callback(self, msg): + """Handle incoming topological map - build graph and KD-tree. - def update_loc_by_topic(self): - """ - This function updates the localisation by topic variables + This callback is safe to invoke repeatedly: on every update the + graph, KD-tree, topic-based localisation config, and no-go nodes + are fully rebuilt so that localisation keeps working after node + positions, edges, or properties change at runtime. """ - for i in self.tmap['nodes']: - if i['node']['localise_by_topic']: - a= json.loads(i['node']['localise_by_topic']) - a['name'] = i['node']['name'] - if not a.has_key('localise_anywhere'): - a['localise_anywhere']=True - if not a.has_key('persistency'): - a['persistency']=10 - self.nodes_by_topic.append(a) - self.names_by_topic.append(a['name']) - - - def Callback(self, msg, item): - #needed for not checking the localise by topic when the robot hasn't moved and making sure it does when the new - #position is close (<10) to the last one it was detected - if self.force_check: - dist = 1.0 + is_update = self.rec_map + label = "Updated" if is_update else "Received" + + self.tmap = yaml.load(msg.data, Loader=CustomSafeLoader) + self.tmap_frame = self.tmap["transformation"]["topo_frame_id"] + self.get_logger().info(f"{label} the topological map") + + # Build new graph and KD-tree in local variables first so the + # live data structures remain consistent until the swap. + new_graph = build_graph_from_tmap(self.tmap, logger=self.get_logger()) + if new_graph is None: + self.get_logger().error("Failed to build the NetworkX graph – aborting map load") + return + self.get_logger().info( + f"Graph built: {new_graph.number_of_nodes()} nodes, " + f"{new_graph.number_of_edges()} edges" + ) + + new_kdtree, new_kdtree_node_names = build_kdtree_from_graph( + new_graph, logger=self.get_logger(), + ) + if new_kdtree is None: + self.get_logger().error("Failed to build KD-tree – aborting map load") + return + self.get_logger().info( + f"KD-tree built with {len(new_kdtree_node_names)} nodes" + ) + + # Topic-based localisation config + new_loc_by_topic, new_names_by_topic = update_loc_by_topic_nx( + new_graph, logger=self.get_logger(), + ) + + # Re-query no-go nodes (may have changed with the map update) + if self.with_tags: + new_nogos = self._get_no_go_nodes() else: - dist = get_distance(self.current_pose, self.previous_pose) - - if dist>0.10: - val = getattr(msg, item['field']) - - if val == item['val']: - if self.persist.has_key(item['name']): - if self.persist[item['name']] < item['persistency']: - self.persist[item['name']]+=1 - else: - self.persist[item['name']]=0 - - if item['name'] not in [x['name'] for x in self.loc_by_topic] and self.persist[item['name']] < item['persistency']: - self.loc_by_topic.append(item) - self.previous_pose = self.current_pose - - else: - if item['name'] in self.persist: - self.persist.pop(item['name']) - - if item['name'] in [x['name'] for x in self.loc_by_topic]: - self.loc_by_topic.remove(item) - self.previous_pose = self.current_pose - - - def get_nodes_wtag_cb(self, req, res): - res.nodes = [] - try: - cli = self.create_client(GetTaggedNodes, '/topological_map_manager2/get_tagged_nodes') - if not cli.wait_for_service(timeout_sec=3.0): - self.get_logger().warning('/topological_map_manager2/get_tagged_nodes service not available') - return res - self.service_get_tagged_done_event.clear() - event = Event() - def done_callback(future): - nonlocal event - event.set() - - cli_req = GetTaggedNodes.Request() - cli_req.tag = req.tag - cli_future = cli.call_async(req) - cli_future.add_done_callback(done_callback) - event.wait() - get_prediction = cli_future.result() - # self.get_logger().info(get_prediction) - tagnodes = get_prediction.nodes - # for x in self.distances: - ldis = [x["node"]["node"]["name"] for x in self.distances] - for i in ldis: - if i in tagnodes: - res.nodes.append(i) - return res - except (Exception) as e: - self.get_logger().error("Service call /topological_map_manager2/get_tagged_nodes failed: %s"%e) - return res - + new_nogos = [] + + # Atomically swap all data structures under the lock so that + # _pose_callback never sees a half-rebuilt state. + with self._map_lock: + self._graph = new_graph + self._kdtree = new_kdtree + self._kdtree_node_names = new_kdtree_node_names + self.loc_by_topic = new_loc_by_topic + self.names_by_topic = new_names_by_topic + self.nogos = new_nogos + + self.rec_map = True + if is_update: + self.get_logger().info( + "Map update applied – graph, KD-tree, no-go nodes, " + "and topic-based localisation refreshed" + ) + + # ----------------------------------------------------------------- + # Localise-pose service + # ----------------------------------------------------------------- def localise_pose_cb(self, req, res): - """ - This function gets the node and closest node for a pose - """ - not_loc = True - distances = [] - distances = self.get_distances_to_pose(req.pose) - closeststr='none' - currentstr='none' - - ind = 0 - while not_loc and ind list: + """Query the map manager for 'no-go' tagged nodes. + + Returns an empty list when the GetTaggedNodes service type is + unavailable (e.g. not defined in topological_navigation_msgs). """ - cli = self.create_client(GetTaggedNodes, '/topological_map_manager2/get_tagged_nodes') - if not cli.wait_for_service(timeout_sec=3.0): - self.get_logger().warning('/topological_map_manager2/get_tagged_nodes service not available') + if not _HAS_GET_TAGGED_NODES: + self.get_logger().info( + "GetTaggedNodes service not available in this build; " + "no-go nodes disabled" + ) return [] - else: - cli_req = GetTaggedNodes.Request() - future = cli.call_async(cli_req) - rclpy.spin_until_future_complete(self, future) - get_prediction = future.result() - return get_prediction.nodes - def point_in_poly(self,node,pose): - - x=pose.position.x-node["node"]["pose"]["position"]["x"] - y=pose.position.y-node["node"]["pose"]["position"]["y"] - - n = len(node["node"]["verts"]) - inside = False - - p1x = node["node"]["verts"][0]["x"] - p1y = node["node"]["verts"][0]["y"] - for i in range(n+1): - p2x = node["node"]["verts"][i % n]["x"] - p2y = node["node"]["verts"][i % n]["y"] - if y > min(p1y,p2y): - if y <= max(p1y,p2y): - if x <= max(p1x,p2x): - if p1y != p2y: - xints = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x - if p1x == p2x or x <= xints: - inside = not inside - p1x,p1y = p2x,p2y - - return inside -################################################################################################################### - -# class LocaliseByTopicSubscriber(object): -# """ -# Helper class for localise by topic subcription. Callable to start subsriber -# thread. -# """ -# def __init__(self, topic, callback, callback_args): - -# self.topic = rclpy.get_namespace() + topic -# self.callback = callback -# self.callback_args = callback_args -# self.sub = None -# self.t = None - + cli = self.create_client( + GetTaggedNodes, + '/topological_map_manager2/get_tagged_nodes', + ) + if not cli.wait_for_service(timeout_sec=3.0): + self.get_logger().warning( + "Service /topological_map_manager2/get_tagged_nodes unavailable; " + "assuming no no-go nodes" + ) + return [] + future = cli.call_async(GetTaggedNodes.Request()) + rclpy.spin_until_future_complete(self, future) + return list(future.result().nodes) -# def get_topic_type(self, topic, blocking=False): -# """ -# Get the topic type. -# !!! Overriden from rostopic !!! - -# :param topic: topic name, ``str`` -# :param blocking: (default False) block until topic becomes available, ``bool`` - -# :returns: topic type, real topic name and fn to evaluate the message instance -# if the topic points to a field within a topic, e.g. /rosout/msg. fn is None otherwise. ``(str, str, fn)`` -# :raises: :exc:`ROSTopicException` If master cannot be contacted -# """ -# topic_type, real_topic, msg_eval = rostopic._get_topic_type(topic) -# if topic_type: -# return topic_type, real_topic, msg_eval -# elif blocking: -# sys.stderr.write("WARNING: topic [%s] does not appear to be published yet\n"%topic) -# while not rclpy.is_shutdown(): -# topic_type, real_topic, msg_eval = rostopic._get_topic_type(topic) -# if topic_type: -# return topic_type, real_topic, msg_eval -# else: -# rostopic._sleep(10.) # Change! Waiting for 10 seconds instead of 0.1 to reduce load - -# return None, None, None - - -# def __call__(self): -# """ -# When called start a new thread that waits for the topic type and then -# subscribes. This is therefore non blocking and waits in the background. -# """ -# self.t = Thread(target=self.subscribe) -# self.t.start() - - -# def subscribe(self): -# """ -# Get the topic type and subscribe to topic. Subscriber is kept alive as -# long as the instance of the class is alive. -# """ -# rostopic.get_topic_type = self.get_topic_type # Monkey patch -# topic_type = rostopic.get_topic_class(self.topic, True)[0] -# self.get_logger().info("Subscribing to %s" % self.topic) -# self.sub = rclpy.Subscriber( -# name=self.topic, -# data_class=topic_type, -# callback=self.callback, -# callback_args=self.callback_args -# ) - - -# def close(self): -# self.sub.unregister() - -# def __del__(self): -# self.close() -# ################################################################################################################### +# ===================================================================== +# Entry point +# ===================================================================== - -################################################################################################################### def main(args=None): + node = None + executor = None rclpy.init(args=args) - wtags = True - node = TopologicalNavLoc('topological_localisation', wtags) - executor = MultiThreadedExecutor() - executor.add_node(node) try: + node = TopologicalNavLoc('topological_localisation', with_tags=True) + executor = MultiThreadedExecutor() + executor.add_node(node) executor.spin() except KeyboardInterrupt: - node.get_logger().info('shutting down localisation node\n') - node.destroy_node() - rclpy.shutdown() + try: + if node is not None and rclpy.ok(): + node.get_logger().info("Shutting down localisation node") + except Exception: + pass + finally: + try: + if executor is not None and node is not None: + executor.remove_node(node) + except Exception: + pass + try: + if node is not None: + node.destroy_node() + except Exception: + pass + try: + if rclpy.ok(): + rclpy.shutdown() + except Exception: + pass -if __name__ == '__main__' : +if __name__ == '__main__': main() - diff --git a/topological_navigation/topological_navigation/scripts/manual_edge_predictions.py b/topological_navigation/topological_navigation/scripts/manual_edge_predictions.py deleted file mode 100755 index ec98ffe1..00000000 --- a/topological_navigation/topological_navigation/scripts/manual_edge_predictions.py +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy -import yaml - -import actionlib -from actionlib_msgs.msg import * - -from topological_navigation_msgs.srv import * -from topological_navigation_msgs.msg import * - - -def usage(): - print("Run with a yaml file containing edge prediction information:") - print("\t rosrun topological_navigation manual_edge_predictions.py ") - -# Examaple yaml format: -# - edge_id: WayPoint0_WayPoint1 -# duration: 1.0 -# success_probability: 1.0 -# - edge_id: WayPoint0_WayPoint4 -# duration: 1.0 -# success_probability: 1.0 -# - edge_id: WayPoint1_WayPoint2 -# duration: 1.0 -# success_probability: 1.0 - - -class YamlConfiguredPredictor(object): - - def __init__(self, config) : - - self.response = PredictEdgeStateResponse() - - for edge in config: - self.response.edge_ids.append(edge['edge_id']) - self.response.probs.append(edge['success_probability']) - self.response.durations.append(rospy.Duration(edge['duration'])) - - name= rospy.get_name() - action_name = name+'/build_temporal_model' - - #Creating Action Server - rospy.loginfo("Creating action server.") - self._as = actionlib.SimpleActionServer(action_name, BuildTopPredictionAction, execute_cb = self.build_callback, auto_start = False) - self._as.start() - - - self.predict_srv=rospy.Service('topological_prediction/predict_edges', PredictEdgeState, self.predict_edge_cb) - rospy.loginfo("All Done ...") - rospy.spin() - - - def predict_edge_cb(self, req): - return self.response - - - """ - Build predictions from data. Or not. - - Does nothing for this version. - """ - def build_callback(self, goal): - self._as.set_succeeded() - - -if __name__ == '__main__': - rospy.init_node('topological_prediction') - - if len(sys.argv) != 2: - usage() - sys.exit(1) - config_file = sys.argv[1] - - - with open(config_file, "r") as f: - config = yaml.load(f.read()) - - server = YamlConfiguredPredictor(config) diff --git a/topological_navigation/topological_navigation/scripts/manual_topomapping.py b/topological_navigation/topological_navigation/scripts/manual_topomapping.py index e3858388..8c54ca25 100644 --- a/topological_navigation/topological_navigation/scripts/manual_topomapping.py +++ b/topological_navigation/topological_navigation/scripts/manual_topomapping.py @@ -1,419 +1,593 @@ #! /usr/bin/env python3 -""" - This node is used to manually create a topomap live using the robot driven using - a controller, buttons are pressed to add/remove nodes and to generate - the topomap. - Original Author: Sergi Molina 2022 - ROS1 - Maintainer: Ibrahim Hroob 2024 - ROS2 support +"""Manual topological mapping node for ROS 2. + +Drive a robot with a joystick and press buttons to add / remove nodes. +Edges are created automatically between each new node and its closest +existing neighbour (bidirectional). Node orientations are set to face +along their outgoing edge direction. + +The topological map is published on ``/topological_map_2`` every time a +node is added or removed so that downstream nodes (localisation, +navigation, visualiser) pick up the changes immediately. + +The map follows the ``test_simple_tmap2.yaml`` format with a single +``navigate_to_pose`` action definition. + +Original Author: Sergi Molina 2022 - ROS1 +Maintainer: Ibrahim Hroob 2024 - ROS2 support """ +import math import os import yaml import datetime import numpy as np -from math import sqrt from copy import deepcopy import rclpy import rclpy.duration -from rclpy import Parameter +from rclpy import Parameter from rclpy.node import Node +from rclpy.qos import ( + DurabilityPolicy, + HistoryPolicy, + QoSProfile, + ReliabilityPolicy, +) from nav_msgs.msg import Odometry from geometry_msgs.msg import Pose from sensor_msgs.msg import Joy, Imu +from std_msgs.msg import String from std_srvs.srv import Trigger from visualization_msgs.msg import Marker, MarkerArray from builtin_interfaces.msg import Duration -from tf_transformations import euler_from_quaternion +from tf_transformations import quaternion_from_euler from ament_index_python.packages import get_package_share_directory class RobotTmapping(Node): + """Joystick-driven topological mapping node. + + Nodes are added / removed via joystick buttons. Edges between the + two closest nodes are created automatically (bidirectional). Node + orientations are set to face the direction of their first outgoing + edge. The full map is published to ``/topological_map_2`` on every + change. + """ def __init__(self): super().__init__('manual_tmapping_node') - # Params - self.declare_parameter( 'tmap' , Parameter.Type.STRING ) - self.declare_parameter( 'tmap_dir' , Parameter.Type.STRING ) - self.declare_parameter( 'site_name' , Parameter.Type.STRING ) - self.declare_parameter( "insert_map" , Parameter.Type.BOOL ) - self.declare_parameter( 'inorder_cluster' , Parameter.Type.BOOL ) #use_inorder_clustering - self.declare_parameter( 'dbscan_eps' , Parameter.Type.DOUBLE ) - self.declare_parameter( 'node_thresh' , Parameter.Type.DOUBLE ) #closest_node_threshold - self.declare_parameter( 'min_num_rows' , Parameter.Type.INTEGER ) - # Joystick buttons - self.declare_parameter( 'lock_btn' , Parameter.Type.INTEGER ) #lock_button_index - self.declare_parameter( 'add_btn' , Parameter.Type.INTEGER ) #add_node_button_index - self.declare_parameter( 'remove_btn' , Parameter.Type.INTEGER ) #remove_node_button_index - self.declare_parameter( 'gen_map_btn' , Parameter.Type.INTEGER ) #generate_tmap_button_index - # Topics - self.declare_parameter( 'topic_joy' , Parameter.Type.STRING ) - self.declare_parameter( 'topic_pose' , Parameter.Type.STRING ) - self.declare_parameter( 'topic_imu' , Parameter.Type.STRING ) - - self.pointset = self.get_parameter_or('tmap' , Parameter('str' , Parameter.Type.STRING, '') ).value - self.tmap_dir = self.get_parameter_or('tmap_dir' , Parameter('str' , Parameter.Type.STRING, '') ).value - self.site_name = self.get_parameter_or('site_name' , Parameter('str' , Parameter.Type.STRING, '') ).value - self.insert_map = self.get_parameter_or('insert_map' , Parameter('bool' , Parameter.Type.BOOL, False) ).value - self.inorder_cluster = self.get_parameter_or('inorder_cluster' , Parameter('bool' , Parameter.Type.BOOL, False) ).value - self.dbscan_eps = self.get_parameter_or('dbscan_eps' , Parameter('double', Parameter.Type.DOUBLE, 4.0) ).value - self.node_thresh = self.get_parameter_or('node_thresh' , Parameter('double', Parameter.Type.DOUBLE, 0.5) ).value - self.min_num_rows = self.get_parameter_or('min_num_rows' , Parameter('int' , Parameter.Type.INTEGER, 2) ).value - self.lock_btn = self.get_parameter_or('lock_btn' , Parameter('int' , Parameter.Type.INTEGER, 6) ).value - self.add_btn = self.get_parameter_or('add_btn' , Parameter('int' , Parameter.Type.INTEGER, 1) ).value - self.remove_btn = self.get_parameter_or('remove_btn' , Parameter('int' , Parameter.Type.INTEGER, 2) ).value - self.gen_map_btn = self.get_parameter_or('gen_map_btn' , Parameter('int' , Parameter.Type.INTEGER, 3) ).value - self.topic_joy = self.get_parameter_or('topic_joy' , Parameter('str' , Parameter.Type.STRING, '/joy') ).value - self.topic_pose = self.get_parameter_or('topic_pose' , Parameter('str' , Parameter.Type.STRING, '/gps_base/odometry') ).value - self.topic_imu = self.get_parameter_or('topic_imu' , Parameter('str' , Parameter.Type.STRING, '/gps_base/yaw') ).value - - - - # Disable until toponav 2 supports mongodb storage of new map. - self.insert_map = False - - # Variables + # -- ROS parameters --------------------------------------------------- + self.declare_parameter('tmap', Parameter.Type.STRING) + self.declare_parameter('tmap_dir', Parameter.Type.STRING) + self.declare_parameter('site_name', Parameter.Type.STRING) + self.declare_parameter('node_thresh', Parameter.Type.DOUBLE) + # Joystick buttons + self.declare_parameter('lock_btn', Parameter.Type.INTEGER) + self.declare_parameter('add_btn', Parameter.Type.INTEGER) + self.declare_parameter('remove_btn', Parameter.Type.INTEGER) + self.declare_parameter('gen_map_btn', Parameter.Type.INTEGER) + # Topics + self.declare_parameter('topic_joy', Parameter.Type.STRING) + self.declare_parameter('topic_pose', Parameter.Type.STRING) + self.declare_parameter('topic_imu', Parameter.Type.STRING) + + self.pointset = self.get_parameter_or( + 'tmap', Parameter('str', Parameter.Type.STRING, '')).value + self.tmap_dir = self.get_parameter_or( + 'tmap_dir', Parameter('str', Parameter.Type.STRING, '')).value + self.site_name = self.get_parameter_or( + 'site_name', Parameter('str', Parameter.Type.STRING, '')).value + self.node_thresh = self.get_parameter_or( + 'node_thresh', Parameter('double', Parameter.Type.DOUBLE, 0.5)).value + self.lock_btn = self.get_parameter_or( + 'lock_btn', Parameter('int', Parameter.Type.INTEGER, 6)).value + self.add_btn = self.get_parameter_or( + 'add_btn', Parameter('int', Parameter.Type.INTEGER, 1)).value + self.remove_btn = self.get_parameter_or( + 'remove_btn', Parameter('int', Parameter.Type.INTEGER, 2)).value + self.gen_map_btn = self.get_parameter_or( + 'gen_map_btn', Parameter('int', Parameter.Type.INTEGER, 3)).value + self.topic_joy = self.get_parameter_or( + 'topic_joy', Parameter('str', Parameter.Type.STRING, '/joy')).value + self.topic_pose = self.get_parameter_or( + 'topic_pose', Parameter('str', Parameter.Type.STRING, '/gps_base/odometry')).value + self.topic_imu = self.get_parameter_or( + 'topic_imu', Parameter('str', Parameter.Type.STRING, '/gps_base/yaw')).value + + # -- Internal state ---------------------------------------------------- self.node_id = 0 - self.nodes = [] # A list of node Pose msgs that will be used to generate the tmap + self.nodes = [] # list of [id, Pose] self.previous_button = None - - # Load templates + self.robot_pose_msg = Pose() + self.robot_imu_msg = None + + # -- Load templates from package config -------------------------------- toponav_dir = get_package_share_directory('topological_navigation') config_dir = os.path.join(toponav_dir, 'config') - self.template_node = self.load_yaml(os.path.join(config_dir, 'template_node_2.yaml')) - self.template_edge = self.load_yaml(os.path.join(config_dir, 'template_edge.yaml')) - - # Services - self.create_service(Trigger, '/tmapping_robot/save_waypoints', self.save_waypoints_srv_cb) - self.create_service(Trigger, '/tmapping_robot/save_map', self.generate_tmap_srv_cb) - - # Subscribers - self.create_subscription(Joy , self.topic_joy , self.joy_cb , 10) - - self.create_subscription(Imu , self.topic_pose, self.robot_imu_cb , 10) + self.template_node = self._load_yaml( + os.path.join(config_dir, 'template_node.yaml')) + self.template_edge = self._load_yaml( + os.path.join(config_dir, 'template_edge.yaml')) + self.template_action = self._load_yaml( + os.path.join(config_dir, 'template_action.yaml')) + + # -- QoS (transient-local, same as map_manager2) ----------------------- + self._latched_qos = QoSProfile( + depth=1, + reliability=ReliabilityPolicy.RELIABLE, + history=HistoryPolicy.KEEP_LAST, + durability=DurabilityPolicy.TRANSIENT_LOCAL, + ) + + # -- Publishers -------------------------------------------------------- + self.node_vis_pub = self.create_publisher( + MarkerArray, '/tmapping_nodes', 10) + self.map_pub = self.create_publisher( + String, '/topological_map_2', self._latched_qos) + + # -- Services ---------------------------------------------------------- + self.create_service( + Trigger, '/tmapping_robot/save_waypoints', + self.save_waypoints_srv_cb) + self.create_service( + Trigger, '/tmapping_robot/save_map', + self.generate_tmap_srv_cb) + + # -- Subscribers ------------------------------------------------------- + self.create_subscription(Joy, self.topic_joy, self.joy_cb, 10) + self.create_subscription(Imu, self.topic_imu, self.robot_imu_cb, 10) + self.create_subscription( + Odometry, self.topic_pose, self.robot_pose_cb, 10) + + # -- Create save directory --------------------------------------------- + if self.tmap_dir and not os.path.exists(self.tmap_dir): + self.get_logger().info(f"Creating tmap_dir: {self.tmap_dir}") + os.makedirs(self.tmap_dir) - self.create_subscription(Odometry, self.topic_pose, self.robot_pose_cb, 10) + # -- Initialise map and load existing nodes ---------------------------- + self._init_topomap() + self._load_existing_nodes() + self.get_logger().info( + f"There are {len(self.nodes)} nodes in the map.") + + # ================================================================== + # YAML helpers + # ================================================================== + + @staticmethod + def _load_yaml(filename): + """Load a YAML file and return the parsed data.""" + with open(filename, 'r') as fh: + return yaml.safe_load(fh) + + @staticmethod + def _save_yaml(filename, data): + """Dump *data* as YAML to *filename*.""" + with open(filename, 'w') as fh: + yaml.safe_dump(data, fh, default_flow_style=False) + + # ================================================================== + # Map initialisation (test_simple_tmap2.yaml structure) + # ================================================================== + + def _init_topomap(self): + """Create an empty topomap dict using loaded template files.""" + self.topomap = { + "meta": { + "last_updated": self._get_time(), + }, + "metric_map": self.site_name, + "name": self.pointset, + "pointset": self.pointset, + "transformation": { + "topo_frame_id": self.site_name or "map", + "parent": "map", + "rotation": {"w": 1.0, "x": 0.0, "y": 0.0, "z": 0.0}, + "translation": {"x": 0.0, "y": 0.0, "z": 0.0}, + }, + "definitions": deepcopy( + self.template_action.get("definitions", {}) + ), + "actions": deepcopy( + self.template_action.get("actions", {}) + ), + "nodes": [], + } - # Publishers - self.node_vis_pub = self.create_publisher(MarkerArray, '/tmapping_nodes', 10) + # ================================================================== + # Load existing nodes from disk + # ================================================================== - # Create save folder if is does not exist - if not os.path.exists(self.tmap_dir): - self.get_logger().info("Creating tmap_dir: %s" % (self.tmap_dir)) - os.makedirs(self.tmap_dir) - - # Load existing nodes from tmap_dir if there are any - self.get_tmap_nodes() + def _load_existing_nodes(self): + """Reload node list from tmap file on disk (if it exists).""" + if not self.tmap_dir or not self.pointset: + return + tmap_path = os.path.join(self.tmap_dir, self.pointset) + if not os.path.exists(tmap_path): + return + existing = self._load_yaml(tmap_path) + if existing is None or "nodes" not in existing: + return - self.robot_imu_msg = None + self.get_logger().info(f"Loading existing tmap: {tmap_path}") + for nd in existing["nodes"]: + pose = Pose() + pose.position.x = nd["node"]["pose"]["position"]["x"] + pose.position.y = nd["node"]["pose"]["position"]["y"] + pose.position.z = nd["node"]["pose"]["position"].get("z", 0.0) + pose.orientation.x = nd["node"]["pose"]["orientation"]["x"] + pose.orientation.y = nd["node"]["pose"]["orientation"]["y"] + pose.orientation.z = nd["node"]["pose"]["orientation"]["z"] + pose.orientation.w = nd["node"]["pose"]["orientation"]["w"] + self.nodes.append([self.node_id, pose]) + self.node_id += 1 - def load_yaml(self, filename): - with open(filename, 'r') as f: - return yaml.safe_load(f) - - - def save_yaml(self, filename, data, dfs=True): - with open(filename, 'w') as f: - return yaml.safe_dump(data, f, default_flow_style=dfs) - - - def get_tmap_nodes(self): - tmap = os.path.join(self.tmap_dir, self.pointset) - self.get_logger().info("Getting current nodes from tmap file") - self.get_logger().info(tmap) - - if os.path.exists(tmap): - self.topomap = self.load_yaml(tmap) - self.get_logger().info(f"Existing tmap: {tmap}") - if self.topomap is not None: - for node in self.topomap["nodes"]: - pose = Pose() - pose.position.x = node["node"]["pose"]["position"]["x"] - pose.position.y = node["node"]["pose"]["position"]["y"] - pose.orientation.x = node["node"]["pose"]["orientation"]["x"] - pose.orientation.y = node["node"]["pose"]["orientation"]["y"] - pose.orientation.z = node["node"]["pose"]["orientation"]["z"] - pose.orientation.w = node["node"]["pose"]["orientation"]["w"] - self.nodes.append([self.node_id, pose]) - self.node_id += 1 - self.update_node_markers() - else: - self.init_map() - else: - self.init_map() - self.get_logger().info(f'There are {len(self.nodes)} nodes in the existing map.') + # Rebuild the full topomap with edges and publish + self._rebuild_topomap() + self._update_node_markers() + # ================================================================== + # Subscriber callbacks + # ================================================================== def robot_pose_cb(self, msg): + """Store the latest robot pose from Odometry.""" self.robot_pose_msg = msg.pose.pose - - #Please note, this is an ugly hack, the better way to do it is via topics sync - if self.robot_imu_msg != None: + if self.robot_imu_msg is not None: self.robot_pose_msg.orientation = self.robot_imu_msg def robot_imu_cb(self, msg): + """Store the latest IMU orientation.""" self.robot_imu_msg = msg.orientation - def joy_cb(self, msg): + """Handle joystick button presses.""" buttons = msg.buttons + if not buttons[self.lock_btn]: + self.previous_button = None + return - if buttons[self.lock_btn]: - if buttons[self.add_btn]: - if self.previous_button is None or self.add_btn != self.previous_button: - self.add_node() - self.previous_button = self.add_btn - elif buttons[self.remove_btn]: - if self.remove_btn != self.previous_button: - self.remove_node() - self.previous_button = self.remove_btn - elif buttons[self.gen_map_btn]: - if self.gen_map_btn != self.previous_button: - self.generate_tmap() - self.previous_button = self.gen_map_btn - else: - self.previous_button = None + if buttons[self.add_btn]: + if self.previous_button != self.add_btn: + self.add_node() + self.previous_button = self.add_btn + elif buttons[self.remove_btn]: + if self.previous_button != self.remove_btn: + self.remove_node() + self.previous_button = self.remove_btn + elif buttons[self.gen_map_btn]: + if self.previous_button != self.gen_map_btn: + self.generate_tmap() + self.previous_button = self.gen_map_btn + else: + self.previous_button = None + # ================================================================== + # Add / remove nodes + # ================================================================== def add_node(self): + """Add a node at the robot's current pose if not too close to an existing one.""" self.get_logger().info("Adding node") - pose = self.robot_pose_msg - dist, nearest_id, _ = self.get_nearest_node(pose) - if not dist or dist > self.node_thresh: - self.nodes.append([self.node_id, pose]) - self.get_logger().info(f"New node: {pose}") - self.get_logger().info(f"Num nodes: {len(self.nodes)}") - self.update_node_markers() - self.node_id += 1 - else: + pose = deepcopy(self.robot_pose_msg) + dist, _, _ = self._get_nearest_node(pose) + if dist is not None and dist <= self.node_thresh: self.get_logger().info("Too close to an existing node, won't add one!") + return + + self.nodes.append([self.node_id, pose]) + self.get_logger().info( + f"New node{self.node_id}: x={pose.position.x:.2f}, " + f"y={pose.position.y:.2f} (total: {len(self.nodes)})") + self.node_id += 1 + self._rebuild_topomap() + self._update_node_markers() def remove_node(self): + """Remove the nearest node to the robot (within 5 m).""" self.get_logger().info("Removing nearest node") pose = self.robot_pose_msg - dist, nearest_id, ind = self.get_nearest_node(pose) - if not dist: - self.get_logger().info("List is empty!") - else: - if dist > 5: - self.get_logger().info("Not near any nodes so not removing any!") - else: - self.remove_marker(nearest_id) - self.nodes.pop(ind) - self.get_logger().info(f"Num nodes: {len(self.nodes)}") - - - def update_node_markers(self): - diameter = 0.7 - marker_array = MarkerArray() - - for node in self.nodes: - node_vis = Marker() - node_vis.type = Marker.SPHERE - node_vis.header.frame_id = 'map' - node_vis.id = node[0] - node_vis.pose.position.x = node[1].position.x - node_vis.pose.position.y = node[1].position.y - node_vis.pose.position.z = node[1].position.z + diameter / 2 - node_vis.pose.orientation = node[1].orientation - node_vis.scale.x = diameter - node_vis.scale.y = diameter - node_vis.scale.z = diameter - node_vis.color.a = 1.0 - node_vis.color.r = 1.0 - node_vis.color.g = 0.6 - node_vis.color.b = 0.0 - - node_vis.lifetime = Duration() # Initialize the Duration message - - marker_array.markers.append(node_vis) - - self.node_vis_pub.publish(marker_array) + dist, nearest_id, ind = self._get_nearest_node(pose) + if dist is None: + self.get_logger().info("Node list is empty!") + return + if dist > 5.0: + self.get_logger().info("Not near any nodes – not removing any!") + return + self._remove_marker(nearest_id) + self.nodes.pop(ind) + self.get_logger().info(f"Removed node (total: {len(self.nodes)})") + + self._rebuild_topomap() + self._update_node_markers() + + # ================================================================== + # Nearest-node helpers + # ================================================================== + + def _get_nearest_node(self, pose): + """Return (distance, id, index) of the closest node, or (None, None, None).""" + best_dist = None + best_id = None + best_ind = None + for i, (nid, npose) in enumerate(self.nodes): + d = math.hypot( + pose.position.x - npose.position.x, + pose.position.y - npose.position.y, + ) + if best_dist is None or d < best_dist: + best_dist = d + best_id = nid + best_ind = i + return best_dist, best_id, best_ind + + # ================================================================== + # Edge creation – connect each node to its closest neighbour + # ================================================================== + + @staticmethod + def _yaw_between(src_pose, dst_pose): + """Return yaw angle (radians) from *src_pose* to *dst_pose*.""" + dx = dst_pose.position.x - src_pose.position.x + dy = dst_pose.position.y - src_pose.position.y + return math.atan2(dy, dx) + + @staticmethod + def _orientation_from_yaw(yaw): + """Return a quaternion dict for a given yaw angle.""" + qx, qy, qz, qw = quaternion_from_euler(0.0, 0.0, yaw) + return { + "x": float(qx), "y": float(qy), + "z": float(qz), "w": float(qw), + } - def remove_marker(self, id): - marker_array = MarkerArray() - node_vis = Marker() - node_vis.id = id - node_vis.action = Marker.DELETE - marker_array.markers.append(node_vis) - self.node_vis_pub.publish(marker_array) + def _build_edges(self): + """Build bidirectional edges between closest node pairs. + + For every node, an edge to the closest neighbour is created in + both directions. Duplicate edges are avoided. Returns a dict + mapping ``node_name -> [edge_dict, ...]`` and a dict mapping + ``node_name -> yaw`` (orientation toward first edge target). + """ + n = len(self.nodes) + edges_map = {f"node{nd[0]}": [] for nd in self.nodes} + node_yaws = {} + + if n < 2: + return edges_map, node_yaws + + # Collect positions for vectorised distance calculation + positions = np.array( + [[nd[1].position.x, nd[1].position.y] for nd in self.nodes]) + + for i in range(n): + src_name = f"node{self.nodes[i][0]}" + src_pose = self.nodes[i][1] + + # Distance to every other node + diffs = positions - positions[i] + dists = np.linalg.norm(diffs, axis=1) + dists[i] = np.inf # exclude self + + closest_idx = int(np.argmin(dists)) + dst_name = f"node{self.nodes[closest_idx][0]}" + dst_pose = self.nodes[closest_idx][1] + + # Forward edge (src -> dst) + edge_id_fwd = f"{src_name}_{dst_name}" + existing_ids = {e["edge_id"] for e in edges_map[src_name]} + if edge_id_fwd not in existing_ids: + fwd = deepcopy(self.template_edge) + fwd["edge_id"] = edge_id_fwd + fwd["node"] = dst_name + edges_map[src_name].append(fwd) + + # Reverse edge (dst -> src) + edge_id_rev = f"{dst_name}_{src_name}" + existing_ids_dst = {e["edge_id"] for e in edges_map[dst_name]} + if edge_id_rev not in existing_ids_dst: + rev = deepcopy(self.template_edge) + rev["edge_id"] = edge_id_rev + rev["node"] = src_name + edges_map[dst_name].append(rev) + + # Yaw: point from src toward its closest neighbour + if src_name not in node_yaws: + node_yaws[src_name] = self._yaw_between(src_pose, dst_pose) + + return edges_map, node_yaws + + # ================================================================== + # Topomap rebuild & publish + # ================================================================== + + def _rebuild_topomap(self): + """Rebuild the full topomap dict from self.nodes and publish it.""" + self._init_topomap() + + edges_map, node_yaws = self._build_edges() + + for nid, pose in self.nodes: + name = f"node{nid}" + + # Orientation: face along the edge direction + if name in node_yaws: + orientation = self._orientation_from_yaw(node_yaws[name]) + else: + orientation = { + "x": float(pose.orientation.x), + "y": float(pose.orientation.y), + "z": float(pose.orientation.z), + "w": float(pose.orientation.w), + } + # Build node dict from template + node_dict = deepcopy(self.template_node) + + # Populate meta + node_dict["meta"]["map"] = self.site_name + node_dict["meta"]["node"] = name + node_dict["meta"]["pointset"] = self.pointset + + # Populate node fields + nd = node_dict["node"] + nd["edges"] = edges_map.get(name, []) + nd["name"] = name + nd["pose"]["orientation"] = orientation + nd["pose"]["position"] = { + "x": float(pose.position.x), + "y": float(pose.position.y), + "z": float(pose.position.z), + } - def get_nearest_node(self, pose): - dist = None - id = None - ind = None - for i, node in enumerate(self.nodes): - d = sqrt((pose.position.x - node[1].position.x) ** 2 - + (pose.position.y - node[1].position.y) ** 2) - if not dist or d < dist: - dist = d - id = node[0] - ind = i - self.get_logger().info(f"{dist}, {id}, {ind}") - return dist, id, ind - - - def rotate_influence_zone(self, node, quat): - _, _, theta = euler_from_quaternion([quat.x, quat.y, quat.z, quat.w]) - - R = np.array([[np.cos(theta), -np.sin(theta)], - [np.sin(theta), np.cos(theta)]]) - - verts = deepcopy(node["node"]["verts"]) - new_verts = [] - for vert in verts: - new_vert = np.array([vert["x"], vert["y"]]) - new_vert = np.dot(R, new_vert) - new_verts.append({"x": float(new_vert[0]), "y": float(new_vert[1])}) - - node["node"]["verts"] = new_verts - - return node - - - def init_map(self): - self.topomap = {} - self.topomap["name"] = self.pointset - self.topomap["metric_map"] = self.site_name - self.topomap["pointset"] = self.pointset - - self.topomap["transformation"] = {} - self.topomap["transformation"]["rotation"] = {} - self.topomap["transformation"]["rotation"]["w"] = 1.0 - self.topomap["transformation"]["rotation"]["x"] = 0.0 - self.topomap["transformation"]["rotation"]["y"] = 0.0 - self.topomap["transformation"]["rotation"]["z"] = 0.0 - self.topomap["transformation"]["translation"] = {} - self.topomap["transformation"]["translation"]["x"] = 0.0 - self.topomap["transformation"]["translation"]["y"] = 0.0 - self.topomap["transformation"]["translation"]["z"] = 0.0 - self.topomap["transformation"]["child"] = "topo_map" - self.topomap["transformation"]["parent"] = "map" - - self.topomap["meta"] = {} - self.topomap["meta"]["last_updated"] = self.get_time() - self.topomap["nodes"] = [] - - - def get_time(self): + # Rotate template influence-zone vertices to match orientation + template_verts = nd.get("verts", []) + nd["verts"] = self._rotate_verts( + template_verts, node_yaws.get(name, 0.0)) + + self.topomap["nodes"].append(node_dict) + + self.topomap["meta"]["last_updated"] = self._get_time() + + # Publish to /topological_map_2 + self._publish_topomap() + + def _publish_topomap(self): + """Serialise self.topomap to YAML and publish on /topological_map_2.""" + msg = String() + msg.data = yaml.dump(self.topomap, default_flow_style=False) + self.map_pub.publish(msg) + self.get_logger().info( + f"Published topological map ({len(self.topomap['nodes'])} nodes) " + "to /topological_map_2") + + # ================================================================== + # Influence-zone rotation + # ================================================================== + + @staticmethod + def _rotate_verts(verts, yaw): + """Rotate influence-zone vertices by *yaw* radians.""" + cos_t = math.cos(yaw) + sin_t = math.sin(yaw) + rotated = [] + for v in verts: + rx = v["x"] * cos_t - v["y"] * sin_t + ry = v["x"] * sin_t + v["y"] * cos_t + rotated.append({"x": round(rx, 6), "y": round(ry, 6)}) + return rotated + + # ================================================================== + # Save / generate helpers + # ================================================================== + + @staticmethod + def _get_time(): + """Return a timestamp string.""" return datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S') - - def set_meta(self): - for node in self.topomap["nodes"]: - node["meta"]["map"] = self.site_name - node["meta"]["pointset"] = self.pointset - - def generate_tmap(self): + """Rebuild, save, and publish the topological map.""" if not self.nodes: self.get_logger().warn("No nodes yet, nothing to save!") return self.get_logger().info("Generating tmap from node list") - self.init_map() - self.save_waypoints() - self.set_meta() - - self.get_logger().info("Saving yaml") - tmap_file = os.path.join(self.tmap_dir, self.pointset) - self.save_yaml(tmap_file, self.topomap, False) - self.get_logger().info("Saved yaml") + self._rebuild_topomap() + if self.tmap_dir and self.pointset: + tmap_file = os.path.join(self.tmap_dir, self.pointset) + self._save_yaml(tmap_file, self.topomap) + self.get_logger().info(f"Saved tmap to {tmap_file}") def save_waypoints_srv_cb(self, request, response): + """Service: save raw waypoint poses to a timestamped YAML file.""" self.get_logger().info("Saving waypoints to file") waypoints = [] - for node in self.nodes: - waypoint = { + for nid, pose in self.nodes: + waypoints.append({ "pose": { "position": { - "x": node[1].position.x, - "y": node[1].position.y, - "z": node[1].position.z + "x": float(pose.position.x), + "y": float(pose.position.y), + "z": float(pose.position.z), }, "orientation": { - "x": node[1].orientation.x, - "y": node[1].orientation.y, - "z": node[1].orientation.z, - "w": node[1].orientation.w - } - } - } - waypoints.append(waypoint) - - data = { - "site": self.site_name, - "nodes": waypoints - } + "x": float(pose.orientation.x), + "y": float(pose.orientation.y), + "z": float(pose.orientation.z), + "w": float(pose.orientation.w), + }, + }, + }) - save_file = os.path.join(self.tmap_dir, f'{datetime.datetime.now().strftime("%Y%m%d%H%M%S")}.yml') - self.save_yaml(save_file, data) + data = {"site": self.site_name, "nodes": waypoints} + ts = datetime.datetime.now().strftime("%Y%m%d%H%M%S") + save_file = os.path.join(self.tmap_dir, f'{ts}.yml') + self._save_yaml(save_file, data) response.success = True - response.message = "Waypoints saved successfully" + response.message = f"Waypoints saved to {save_file}" return response - def generate_tmap_srv_cb(self, request, response): - self.get_logger().info("Generating topological map") - self.get_logger().info(f'Generating {len(self.nodes)} point Tmap from current nodes') - - if self.insert_map: - node_id = 0 - for node in self.nodes: - node_to_insert = deepcopy(self.template_node) - node_to_insert["node"]["name"] = f"{self.site_name}_node_{node_id}" - node_to_insert["node"]["pose"]["position"]["x"] = node[1].position.x - node_to_insert["node"]["pose"]["position"]["y"] = node[1].position.y - node_to_insert["node"]["pose"]["position"]["z"] = node[1].position.z - node_to_insert["node"]["pose"]["orientation"]["x"] = node[1].orientation.x - node_to_insert["node"]["pose"]["orientation"]["y"] = node[1].orientation.y - node_to_insert["node"]["pose"]["orientation"]["z"] = node[1].orientation.z - node_to_insert["node"]["pose"]["orientation"]["w"] = node[1].orientation.w - - self.topomap["nodes"].append(node_to_insert) - node_id += 1 - - tmap_file = os.path.join(self.tmap_dir, self.pointset) - self.save_yaml(tmap_file, self.topomap) - + """Service: rebuild, save, and publish the topological map.""" + self.get_logger().info("Generating topological map via service") + self.generate_tmap() response.success = True - response.message = "Topological map generated successfully" + response.message = "Topological map generated and published" return response + # ================================================================== + # Marker visualisation + # ================================================================== - def save_waypoints(self): - self.get_logger().info("Saving tmap waypoints only") - self.init_map() - for i, node_pose in enumerate(self.nodes): - node = deepcopy(self.template_node) - node["meta"]["node"] = 'n' + str(i) - node["node"]["name"] = 'n' + str(i) + def _update_node_markers(self): + """Publish RViz markers for all current nodes.""" + diameter = 0.7 + marker_array = MarkerArray() - node["node"]["pose"]["position"]["x"] = float(node_pose[1].position.x) - node["node"]["pose"]["position"]["y"] = float(node_pose[1].position.y) - node["node"]["pose"]["orientation"]["x"] = float(node_pose[1].orientation.x) - node["node"]["pose"]["orientation"]["y"] = float(node_pose[1].orientation.y) - node["node"]["pose"]["orientation"]["z"] = float(node_pose[1].orientation.z) - node["node"]["pose"]["orientation"]["w"] = float(node_pose[1].orientation.w) - node["node"]["properties"]["xy_goal_tolerance"] = 0.3 - node["node"]["properties"]["yaw_goal_tolerance"] = 0.3 + for nid, pose in self.nodes: + m = Marker() + m.type = Marker.SPHERE + m.header.frame_id = 'map' + m.id = nid + m.pose.position.x = pose.position.x + m.pose.position.y = pose.position.y + m.pose.position.z = pose.position.z + diameter / 2 + m.pose.orientation = pose.orientation + m.scale.x = diameter + m.scale.y = diameter + m.scale.z = diameter + m.color.a = 1.0 + m.color.r = 1.0 + m.color.g = 0.6 + m.color.b = 0.0 + m.lifetime = Duration() + marker_array.markers.append(m) - node = self.rotate_influence_zone(node, node_pose[1].orientation) - self.topomap["nodes"].append(node) + self.node_vis_pub.publish(marker_array) + + def _remove_marker(self, marker_id): + """Delete a single RViz marker by ID.""" + marker_array = MarkerArray() + m = Marker() + m.id = marker_id + m.action = Marker.DELETE + marker_array.markers.append(m) + self.node_vis_pub.publish(marker_array) def main(args=None): @@ -423,5 +597,6 @@ def main(args=None): node.destroy_node() rclpy.shutdown() + if __name__ == '__main__': main() diff --git a/topological_navigation/topological_navigation/scripts/map_manager.py b/topological_navigation/topological_navigation/scripts/map_manager.py deleted file mode 100755 index d74f6e8a..00000000 --- a/topological_navigation/topological_navigation/scripts/map_manager.py +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env python -import math -import rospy -import sys - -import std_msgs.msg -from topological_navigation.topological_node import * -from topological_navigation_msgs.msg import TopologicalNode -from topological_navigation_msgs.msg import TopologicalMap - -from mongodb_store.message_store import MessageStoreProxy - -from topological_navigation.manager import map_manager - - -def usage(): - print("\nPublishes Topological Maps:") - print("\nFor loading a map from the mongodb:") - print("\t rosrun topological_navigation map_manager.py map_name") - print("\nFor loading a map from a tmap file:") - print("\t rosrun topological_navigation map_manager.py -f map_filename") - print("\nFor creating a new map:") - print("\t rosrun topological_navigation map_manager.py -n map_name") - print("\n\n") - - - -if __name__ == '__main__' : - load=True - load_from_file = False - if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) < 2 : - usage() - sys.exit(1) - else: - if '-n' in sys.argv: - ind = sys.argv.index('-n') - _map=sys.argv[ind+1] - print("Creating new Map (%s)" %_map) - load=False - elif '-f' in sys.argv: - ind = sys.argv.index('-f') - _map=sys.argv[ind+1] - print("Loading map from tmap file (%s)" %_map) - load_from_file=True - else: - _map=sys.argv[1] - - rospy.init_node("topological_map_manager") - ps = map_manager() - ps.init_map(_map,load,load_from_file) - rospy.spin() -######################################################################################################### \ No newline at end of file diff --git a/topological_navigation/topological_navigation/scripts/map_manager2.py b/topological_navigation/topological_navigation/scripts/map_manager2.py index ee032ec0..a96bbb83 100755 --- a/topological_navigation/topological_navigation/scripts/map_manager2.py +++ b/topological_navigation/topological_navigation/scripts/map_manager2.py @@ -1,49 +1,592 @@ #!/usr/bin/env python3 """ -Created on Thu Nov 5 10:41:24 2020 +Self-contained Topological Map Manager 2 for ROS 2. + +This script manages topological maps: loading, saving, validating against a +YAML schema, and publishing via ROS 2 topics and services. It is fully +self-contained with no dependency on external tmap_model or map_types modules. @author: Adam Binch (abinch@sagarobotics.com) +@maintainer: Ibrahim Hroob (ihroob@lincoln.ac.uk) +Refactored: 2026-02-11 """ +######################################################################################################### +import os import sys +import json +import yaml +import datetime + import rclpy +import rclpy.node +import tf2_ros +import std_msgs.msg +import rosidl_runtime_py +from rclpy.qos import QoSProfile, HistoryPolicy, ReliabilityPolicy, DurabilityPolicy +from ament_index_python.packages import get_package_share_directory +from geometry_msgs.msg import Vector3, Quaternion, TransformStamped -from topological_navigation.manager2 import map_manager_2 +from std_srvs.srv import Trigger +import topological_navigation_msgs.srv as tn_srv +from topological_navigation.tmap_utils import load_tmap2_file, save_tmap2_file -def usage(): - print("\nPublishes Topological Maps:") - print("\nFor loading a map:") - print("\t rosrun topological_navigation map_manager2.py map_filename") - print("\nFor creating a new map:") - print("\t rosrun topological_navigation map_manager2.py -n map_filename") - print("\n\n") +try: + import jsonschema +except ImportError: + jsonschema = None -def main(args=None): - - load=True - if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) < 2: - usage() - sys.exit(1) - else: - if '-n' in sys.argv: - ind = sys.argv.index('-n') - _map=sys.argv[ind+1] - print("Creating new Map (%s)" %_map) - load=False +######################################################################################################### +# Exceptions +######################################################################################################### + +class MapValidationError(Exception): + pass + +class NodeNotFoundError(Exception): + pass + +class EdgeNotFoundError(Exception): + pass + + +######################################################################################################### +# map_manager_2 (self-contained) +######################################################################################################### + +class map_manager_2(rclpy.node.Node): + """ + Self-contained topological map manager node. + + All map data (tmap dict), YAML schema validation, loading, saving, and + consistency checking are handled directly in this class -- no external + model module is required. + """ + + # ------------------------------------------------------------------ + # Initialisation + # ------------------------------------------------------------------ + def __init__(self, advertise_srvs=True): + super().__init__('topological_map_manager_2') + + package_path = get_package_share_directory('topological_navigation') + + # Schema path for validation + self.schema_path = str(os.path.join(package_path, 'config', 'tmap-schema.yaml')) + self.navigation_config_schema_path = str( + os.path.join(package_path, 'config', 'navigation-config-schema.yaml') + ) + + # Declare parameters + self.declare_parameter('cache_topological_maps', False) + self.declare_parameter('auto_write_topological_maps', False) + self.declare_parameter('topological_map2_name', '') + self.declare_parameter('topological_map2_path', '') + + self.add_on_set_parameters_callback(self._parameters_callback) + + self.cache_maps = self.get_parameter('cache_topological_maps').value + self.auto_write = self.get_parameter('auto_write_topological_maps').value + self.topomap2_name = self.get_parameter('topological_map2_name').value + self.topomap2_path = self.get_parameter('topological_map2_path').value + + # Cache directory + self.cache_dir = os.path.join(os.path.expanduser("~"), ".ros", "topological_maps") + os.makedirs(self.cache_dir, exist_ok=True) + + # Load the schema once + self.schema = self._load_schema(self.schema_path) + self.navigation_config_schema = self._load_schema( + self.navigation_config_schema_path + ) + + # Initialise an empty tmap dict + self.tmap = self._empty_tmap() + self._tmap_io_layout = None + + # Latched QoS for map and schema publishers + latched_qos = QoSProfile( + depth=1, + reliability=ReliabilityPolicy.RELIABLE, + history=HistoryPolicy.KEEP_LAST, + durability=DurabilityPolicy.TRANSIENT_LOCAL, + ) + + # Publisher: topological map (JSON string) + self.map_pub = self.create_publisher( + std_msgs.msg.String, '/topological_map_2', latched_qos + ) + + # Publisher: schema (YAML string, latched) + self.schema_pub = self.create_publisher( + std_msgs.msg.String, '/topological_map_schema', latched_qos + ) + self._publish_schema() + + # Advertise services + if advertise_srvs: + self._advertise() + + # ------------------------------------------------------------------ + # Schema helpers + # ------------------------------------------------------------------ + def _load_schema(self, schema_path): + """Load the YAML schema file. Returns dict or None.""" + try: + with open(schema_path, 'r') as f: + schema = yaml.safe_load(f) + self.get_logger().info(f"Loaded schema from {schema_path}") + return schema + except Exception as e: + self.get_logger().error(f"Failed to load schema: {e}") + return None + + def _publish_schema(self): + """Publish the schema as a latched String message.""" + if self.schema is not None: + msg = std_msgs.msg.String() + msg.data = yaml.safe_dump(self.schema, default_flow_style=False) + self.schema_pub.publish(msg) + self.get_logger().info("Published schema on /topological_map_schema") + + def _validate_navigation_config_file(self, config_path): + """Validate a split actions/definitions YAML file against its schema.""" + if not config_path: + return + if self.navigation_config_schema is None: + self.get_logger().warning( + "Navigation config schema unavailable -- skipping sidecar validation" + ) + return + if jsonschema is None: + self.get_logger().warning( + "jsonschema not installed -- skipping sidecar validation" + ) + return + + try: + with open(config_path, 'r', encoding='utf-8') as f: + config_data = yaml.safe_load(f) + jsonschema.validate( + instance=config_data, + schema=self.navigation_config_schema, + ) + self.get_logger().info( + f"Navigation config validated successfully: {config_path}" + ) + except jsonschema.exceptions.ValidationError as e: + raise MapValidationError( + f"Navigation config schema validation failed: {e.message}" + ) from e + + # ------------------------------------------------------------------ + # Empty map template + # ------------------------------------------------------------------ + def _empty_tmap(self): + return { + "meta": {"last_updated": self._get_time()}, + "metric_map": "map_2d", + "name": "new_map", + "pointset": "new_map", + "transformation": { + "rotation": {"w": 1.0, "x": 0.0, "y": 0.0, "z": 0.0}, + "translation": {"x": 0.0, "y": 0.0, "z": 0.0}, + "child": "topo_map", + "parent": "map", + }, + "nodes": [], + } + + @staticmethod + def _get_time(): + return datetime.datetime.now().strftime('%d-%m-%Y_%H-%M-%S') + + # ------------------------------------------------------------------ + # Validation + # ------------------------------------------------------------------ + def validate(self): + """Validate self.tmap against schema + logical consistency.""" + if self.schema is not None: + if jsonschema is None: + self.get_logger().warning( + "jsonschema not installed -- skipping schema validation" + ) + else: + try: + jsonschema.validate(instance=self.tmap, schema=self.schema) + except jsonschema.exceptions.ValidationError as e: + raise MapValidationError( + f"Schema validation failed: {e.message}" + ) + + self._check_consistency() + + def _check_consistency(self): + """Logical checks: duplicate names, broken edges, etc.""" + if "nodes" not in self.tmap: + raise MapValidationError("Map must contain 'nodes' key.") + + pointsets = {n["meta"]["pointset"] for n in self.tmap["nodes"]} + if len(pointsets) > 1: + raise MapValidationError(f"Multiple pointsets found: {pointsets}") + + names = [n["node"]["name"] for n in self.tmap["nodes"]] + if len(names) != len(set(names)): + seen, dupes = set(), [] + for x in names: + if x in seen: + dupes.append(x) + seen.add(x) + raise MapValidationError(f"Duplicate node names: {dupes}") + + name_set = set(names) + for node in self.tmap["nodes"]: + origin = node["node"]["name"] + for edge in node["node"]["edges"]: + dest = edge["node"] + if dest not in name_set: + raise MapValidationError( + f"Edge from {origin} points to non-existent node {dest}" + ) + + # ------------------------------------------------------------------ + # Load / Save + # ------------------------------------------------------------------ + def load_map(self, filename, navigation_config_file=None): + """Load a topological map YAML file, validate, and sync state.""" + self.get_logger().info(f"Loading topological map: {filename}") + try: + loaded, self._tmap_io_layout = load_tmap2_file( + filename, + logger=self.get_logger(), + return_layout=True, + navigation_config_file=navigation_config_file, + ) + self._validate_navigation_config_file( + self._tmap_io_layout.get("config_path") + ) + self.tmap = loaded + self.validate() + self._sync_from_tmap() + self.set_parameters([ + rclpy.parameter.Parameter( + 'topological_map2_name', + rclpy.Parameter.Type.STRING, + self.tmap.get("pointset", ""), + ) + ]) + self.get_logger().info("Map loaded and validated successfully.") + if self.cache_maps: + cache_file = os.path.join( + self.cache_dir, os.path.basename(filename) + ) + self._save_map(cache_file, no_alias=True) + except Exception as e: + self.get_logger().error(f"Failed to load map: {e}") + raise + + def _save_map(self, filename, no_alias=False): + """Write self.tmap to a YAML file.""" + self.get_logger().info(f"Saving map to {filename}") + if "nodes" in self.tmap: + self.tmap["nodes"].sort(key=lambda n: n["node"]["name"]) + save_tmap2_file( + self.tmap, + filename, + no_alias=no_alias, + layout=self._tmap_io_layout, + logger=self.get_logger(), + ) + self.get_logger().info("Map saved successfully.") + + def _sync_from_tmap(self): + """Sync convenience attributes from self.tmap.""" + self.name = self.tmap.get("name", "new_map") + self.metric_map = self.tmap.get("metric_map", "map_2d") + self.pointset = self.tmap.get("pointset", "new_map") + self.transformation = self.tmap.get("transformation", {}) + + # ------------------------------------------------------------------ + # Map initialisation + # ------------------------------------------------------------------ + def init_map(self, name="new_map", metric_map="map_2d", pointset="new_map", + transformation="default", filepath=None, load=True, + navigation_config_file=None): + + if transformation == "default": + self.transformation = { + "rotation": {"w": 1.0, "x": 0.0, "y": 0.0, "z": 0.0}, + "translation": {"x": 0.0, "y": 0.0, "z": 0.0}, + "child": "topo_map", + "parent": "map", + } + else: + self.transformation = transformation + + if load: + self.load_map(filepath, navigation_config_file=navigation_config_file) else: - _map=sys.argv[1] + self.tmap = self._empty_tmap() + self.tmap["name"] = name + self.tmap["metric_map"] = metric_map + self.tmap["pointset"] = pointset + self.tmap["transformation"] = self.transformation + + self.map_pub.publish(std_msgs.msg.String(data=json.dumps(self.tmap))) + self.broadcaster = tf2_ros.StaticTransformBroadcaster(self) + self.broadcast_transform() + + # ------------------------------------------------------------------ + # Update & broadcast + # ------------------------------------------------------------------ + def update(self, update_time=True): + if update_time: + self.tmap["meta"]["last_updated"] = self._get_time() + self.validate() + self.map_pub.publish(std_msgs.msg.String(data=json.dumps(self.tmap))) + + def broadcast_transform(self): + trans, rot = Vector3(), Quaternion() + rosidl_runtime_py.set_message_fields( + trans, self.transformation.get("translation", {}) + ) + rosidl_runtime_py.set_message_fields( + rot, self.transformation.get("rotation", {}) + ) + + # Use topo_frame_id as the child frame so localisation + # can look up the transform to the frame the map is defined in. + child_frame = self.transformation.get( + "topo_frame_id", + self.transformation.get("child", "topo_map"), + ) + + msg = TransformStamped() + msg.header.stamp = self.get_clock().now().to_msg() + msg.header.frame_id = self.transformation.get("parent", "map") + msg.child_frame_id = child_frame + msg.transform.translation = trans + msg.transform.rotation = rot + self.broadcaster.sendTransform(msg) + self.get_logger().info( + f'Broadcasting static TF: {msg.header.frame_id} -> {child_frame}' + ) + + # ------------------------------------------------------------------ + # Parameter callback + # ------------------------------------------------------------------ + def _parameters_callback(self, params): + from rcl_interfaces.msg import SetParametersResult + for param in params: + if param.name == 'cache_topological_maps': + self.cache_maps = param.value + elif param.name == 'auto_write_topological_maps': + self.auto_write = param.value + elif param.name == 'topological_map2_name': + self.tmap["name"] = param.value + elif param.name == 'topological_map2_path': + pass + self.get_logger().info(f'Param {param.name} -> {param.value}') + return SetParametersResult(successful=True) + + # ------------------------------------------------------------------ + # ROS 2 services + # ------------------------------------------------------------------ + def _advertise(self): + self.get_logger().info("Advertising services...") + self.get_map_srv = self.create_service( + Trigger, + '/topological_map_manager2/get_topological_map', + self.get_topological_map_cb, + ) + self.write_map_srv = self.create_service( + tn_srv.WriteTopologicalMap, + '/topological_map_manager2/write_topological_map', + self.write_topological_map_cb, + ) + self.switch_map_srv = self.create_service( + tn_srv.WriteTopologicalMap, + '/topological_map_manager2/switch_topological_map', + self.switch_topological_map_cb, + ) + + def get_topological_map_cb(self, req, res): + """Service: return the current map as JSON.""" + self.get_logger().info("[SRV] get_topological_map") + res.success = True + res.message = json.dumps(self.tmap) + return res + + def switch_topological_map_cb(self, req, res): + """Service: switch to a different map file.""" + path = self.get_parameter("topological_map2_path").value + if os.path.isabs(req.filename) or path == "": + filename = req.filename + else: + filename = os.path.join(path, req.filename) + + self.get_logger().info(f"[SRV] switch_topological_map -> {filename}") + try: + self.load_map(filename) + self.update(False) + self.broadcast_transform() + res.success = True + res.message = json.dumps(self.tmap) + except Exception as e: + res.success = False + res.message = str(e) + return res + + def write_topological_map_cb(self, req, res): + """Service: save the current map to a YAML file.""" + filename = req.filename + if not filename: + path = self.get_parameter("topological_map2_path").value + fname = self.get_parameter("topological_map2_name").value + filename = os.path.join(path, fname) + + self.get_logger().info(f"[SRV] write_topological_map -> {filename}") + try: + self._save_map(filename, req.no_alias) + res.success = True + res.message = f"Map written to {filename}" + except Exception as e: + res.success = False + res.message = str(e) + return res + + +######################################################################################################### +# CLI +######################################################################################################### + +def parse_arguments(): + """Parse CLI arguments.""" + import argparse + + parser = argparse.ArgumentParser( + description='Topological Map Manager 2 -- self-contained ROS 2 node', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Examples: + %(prog)s my_map.yaml + %(prog)s my_map.yaml --navigation-config-file topological_navigation_config.yaml + %(prog)s -n new_map.yaml + %(prog)s --test + %(prog)s -v my_map.yaml +""", + ) + parser.add_argument('map_file', nargs='?', default=None, + help='Path to the topological map YAML file') + parser.add_argument('-n', '--new', action='store_true', + help='Create a new empty map') + parser.add_argument('-t', '--test', action='store_true', + help='Load the default test map') + parser.add_argument('-v', '--verbose', action='store_true', + help='Enable verbose logging') + parser.add_argument( + '--navigation-config-file', + '--nav-config', + default=None, + help=( + 'Optional path to a YAML file containing the top-level actions ' + 'and definitions sections' + ), + ) + + # Use parse_known_args to ignore ROS2 --ros-args passed by launch files + args, _ = parser.parse_known_args() + + if args.test or (args.map_file is None and not args.new): + try: + pkg = get_package_share_directory('topological_navigation') + map_file = os.path.join(pkg, 'config', 'test_simple_tmap2.yaml') + except Exception as e: + print(f"Error: Could not find default test map: {e}") + sys.exit(1) + elif args.new: + if args.map_file is None: + print("Error: --new requires a map filename") + sys.exit(1) + map_file = args.map_file + else: + map_file = args.map_file + + if not args.new and map_file and not os.path.exists(map_file): + print(f"Error: Map file not found: {map_file}") + sys.exit(1) + + navigation_config_file = args.navigation_config_file or None + if ( + navigation_config_file + and map_file + and not os.path.exists( + navigation_config_file + if os.path.isabs(navigation_config_file) + else os.path.join( + os.path.dirname(os.path.abspath(map_file)), + navigation_config_file, + ) + ) + ): + print(f"Error: Navigation config file not found: {navigation_config_file}") + sys.exit(1) + + return map_file, not args.new, args.verbose, navigation_config_file + + +def main(args=None): + manager = None + try: + map_file, load, verbose, navigation_config_file = parse_arguments() + rclpy.init(args=args) + + manager = map_manager_2(advertise_srvs=True) + + if verbose: + manager.get_logger().set_level(rclpy.logging.LoggingSeverity.DEBUG) + + manager.get_logger().info("=" * 60) + manager.get_logger().info("Topological Map Manager 2 -- Starting") + manager.get_logger().info("=" * 60) + + manager.init_map( + filepath=map_file, + load=load, + navigation_config_file=navigation_config_file, + ) + manager.get_logger().info( + f"Map ready -- name={manager.tmap.get('name')}, " + f"nodes={len(manager.tmap.get('nodes', []))}" + ) + try: + rclpy.spin(manager) + except KeyboardInterrupt: + pass + finally: + try: + if manager is not None: + manager.destroy_node() + except Exception: + pass + try: + if rclpy.ok(): + rclpy.shutdown() + except Exception: + pass - rclpy.init(args=args) - node = map_manager_2() - - node.init_map(filename=_map, load=load) + return 0 - rclpy.spin(node) - rclpy.shutdown() + except Exception as e: + print(f"Fatal error: {e}", file=sys.stderr) + import traceback + traceback.print_exc() + return 1 -if __name__ == '__main__' : - main() +if __name__ == '__main__': + sys.exit(main()) +######################################################################################################### diff --git a/topological_navigation/topological_navigation/scripts/map_publisher.py b/topological_navigation/topological_navigation/scripts/map_publisher.py deleted file mode 100755 index 166cff01..00000000 --- a/topological_navigation/topological_navigation/scripts/map_publisher.py +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env python -import math -import rospy -import sys - -import std_msgs.msg -from topological_navigation.topological_node import * -from topological_navigation_msgs.msg import TopologicalNode -from topological_navigation_msgs.msg import TopologicalMap - -from mongodb_store.message_store import MessageStoreProxy - -from topological_navigation.publisher import map_publisher - - -if __name__ == '__main__' : - point_set = sys.argv[1] - rospy.init_node("topological_map_publisher") - ps = map_publisher(point_set) - rospy.spin() \ No newline at end of file diff --git a/topological_navigation/topological_navigation/scripts/map_recorder.py b/topological_navigation/topological_navigation/scripts/map_recorder.py new file mode 100644 index 00000000..f34641cc --- /dev/null +++ b/topological_navigation/topological_navigation/scripts/map_recorder.py @@ -0,0 +1,338 @@ +#!/usr/bin/env python3 +"""Topological map recording node for ROS 2. + +Drive the robot around and let this node build a topological map on the fly: + +- A ``record`` ROS 2 action starts continuous recording; a new node is added + automatically whenever the robot has moved ``node_distance`` metres from + the last recorded node. Feedback is published as nodes are added and + recording stops when the action goal is cancelled. +- The map being built is continuously published on the latched + ``/recorded_tmap`` topic so it can be inspected, loaded, or handed off to a + central coordinator while recording is still in progress. +- Loop closure is automatic: if the robot re-enters the influence zone of an + already recorded node, that existing node is reused/linked instead of + creating a duplicate. +- Nodes are connected successively (each new/linked node to the previously + recorded one) with bidirectional edges. +- Recorded nodes carry a ``map.source: recording`` property. +- Services are provided to explicitly add the current pose as a node, delete + the last added node, reset/clear the map, save the map to a file, and load + a (partial) map from a file so that recording can continue from it. + +Maintainer: Marc Hanheide +""" + +import os + +import yaml + +import rclpy +import rclpy.duration +import rclpy.executors +from rclpy import Parameter +from rclpy.action import ActionServer, CancelResponse +from rclpy.callback_groups import ReentrantCallbackGroup +from rclpy.node import Node +from rclpy.qos import ( + DurabilityPolicy, + HistoryPolicy, + QoSProfile, + ReliabilityPolicy, +) + +from nav_msgs.msg import Odometry +from std_msgs.msg import String +from std_srvs.srv import Trigger + +from ament_index_python.packages import get_package_share_directory + +from topological_navigation_msgs.action import RecordMap +from topological_navigation_msgs.srv import LoadTmap, WriteTopologicalMap + +from topological_navigation.map_recorder_utils import MapRecorderCore +from topological_navigation.tmap_utils import load_tmap2_file, save_tmap2_file + + +class MapRecorder(Node): + """ROS 2 node implementing the topological map recording action/services.""" + + def __init__(self): + super().__init__('map_recorder') + + # -- ROS parameters --------------------------------------------- + self.declare_parameter('node_distance', 1.0) + self.declare_parameter('pointset', 'recorded_map') + self.declare_parameter('site_name', 'map') + self.declare_parameter('tmap_dir', '') + self.declare_parameter('pose_topic', '/odometry/global') + self.declare_parameter( + 'source_tmap_topic', Parameter.Type.STRING) + + self.node_distance = self.get_parameter('node_distance').value + self.pointset = self.get_parameter('pointset').value + self.site_name = self.get_parameter('site_name').value + self.tmap_dir = self.get_parameter('tmap_dir').value + self.pose_topic = self.get_parameter('pose_topic').value + self.source_tmap_topic = self.get_parameter_or( + 'source_tmap_topic', + Parameter('source_tmap_topic', Parameter.Type.STRING, '/topological_map_2'), + ).value + + # -- Load templates from package config --------------------------- + toponav_dir = get_package_share_directory('topological_navigation') + config_dir = os.path.join(toponav_dir, 'config') + self.template_node = self._load_yaml( + os.path.join(config_dir, 'template_node.yaml')) + self.template_edge = self._load_yaml( + os.path.join(config_dir, 'template_edge.yaml')) + self.template_action = self._load_yaml( + os.path.join(config_dir, 'template_action.yaml')) + + # -- Core recording logic (no ROS dependency) ---------------------- + self.core = MapRecorderCore( + self.template_node, self.template_edge, self.template_action, + pointset=self.pointset, site_name=self.site_name, + ) + + # -- State ---------------------------------------------------------- + self._robot_pose = None # dict with x, y, z, qx, qy, qz, qw + self._recording = False + self._cancel_requested = False + self._source_tmap = None + + # -- QoS (latched, same pattern as map_manager2 / manual_topomapping) + latched_qos = QoSProfile( + depth=1, + reliability=ReliabilityPolicy.RELIABLE, + history=HistoryPolicy.KEEP_LAST, + durability=DurabilityPolicy.TRANSIENT_LOCAL, + ) + + # -- Publishers ------------------------------------------------------- + self.recorded_tmap_pub = self.create_publisher( + String, '/recorded_tmap', latched_qos) + + # -- Subscribers -------------------------------------------------------- + self.create_subscription( + Odometry, self.pose_topic, self._pose_cb, 10) + self.create_subscription( + String, self.source_tmap_topic, self._source_tmap_cb, latched_qos) + + # -- Services ---------------------------------------------------------- + self.create_service(Trigger, '~/add_node', self._add_node_srv_cb) + self.create_service( + Trigger, '~/delete_last_node', self._delete_last_node_srv_cb) + self.create_service(Trigger, '~/reset_map', self._reset_map_srv_cb) + self.create_service( + WriteTopologicalMap, '~/save_map', self._save_map_srv_cb) + self.create_service(LoadTmap, '~/load_map', self._load_map_srv_cb) + + # -- Action server -------------------------------------------------- + self._record_cb_group = ReentrantCallbackGroup() + self._action_server = ActionServer( + self, RecordMap, '/record', + execute_callback=self._execute_record_cb, + cancel_callback=self._cancel_record_cb, + callback_group=self._record_cb_group, + ) + + self._publish_recorded_tmap() + self.get_logger().info( + "map_recorder ready: node_distance=%.2f, pointset='%s'" + % (self.node_distance, self.pointset)) + + # ================================================================== + # YAML helpers + # ================================================================== + + @staticmethod + def _load_yaml(filename): + with open(filename, 'r') as fh: + return yaml.safe_load(fh) + + # ================================================================== + # Subscriber callbacks + # ================================================================== + + def _pose_cb(self, msg): + pose = msg.pose.pose + self._robot_pose = { + "x": pose.position.x, + "y": pose.position.y, + "z": pose.position.z, + "qx": pose.orientation.x, + "qy": pose.orientation.y, + "qz": pose.orientation.z, + "qw": pose.orientation.w, + } + + def _source_tmap_cb(self, msg): + """Remember the currently active map so new recordings can inherit its meta data.""" + try: + self._source_tmap = yaml.safe_load(msg.data) + except yaml.YAMLError as exc: + self.get_logger().warning(f"Failed to parse source tmap: {exc}") + + # ================================================================== + # Action server: record + # ================================================================== + + def _execute_record_cb(self, goal_handle): + map_name = goal_handle.request.map_name or self.pointset + node_distance = goal_handle.request.node_distance or self.node_distance + + self.core.pointset = map_name + if not self.core.tmap.get("nodes"): + self.core.reset(source_tmap=self._source_tmap) + self.core.pointset = map_name + + self._recording = True + self._cancel_requested = False + + self.get_logger().info( + "[RECORD] Started: map_name='%s', node_distance=%.2f" + % (map_name, node_distance)) + + rate_period = 0.2 # seconds between distance checks + while rclpy.ok() and not self._cancel_requested: + if self._robot_pose is not None: + _, created, message = self.core.add_node( + self._robot_pose, node_distance=node_distance) + # A loop closure also mutates the map (a new edge is added + # to link back to the reused node) even though `created` is + # False, so republish in that case too. + if created or message.startswith("loop closure"): + self._publish_recorded_tmap() + self._publish_record_feedback(goal_handle, message) + self.get_clock().sleep_for(rclpy.duration.Duration(seconds=rate_period)) + + self._recording = False + + result = RecordMap.Result() + result.num_nodes = self.core.num_nodes() + if self._cancel_requested: + goal_handle.canceled() + result.success = True + result.message = "Recording stopped (%d nodes recorded)" % result.num_nodes + else: + goal_handle.succeed() + result.success = True + result.message = "Recording finished (%d nodes recorded)" % result.num_nodes + + self.get_logger().info(f"[RECORD] {result.message}") + return result + + def _cancel_record_cb(self, _goal_handle): + self.get_logger().info("[RECORD] Cancel requested") + self._cancel_requested = True + return CancelResponse.ACCEPT + + def _publish_record_feedback(self, goal_handle, status): + feedback = RecordMap.Feedback() + feedback.num_nodes = self.core.num_nodes() + feedback.last_node = self.core.last_node_name() + feedback.status = status + goal_handle.publish_feedback(feedback) + + # ================================================================== + # Services + # ================================================================== + + def _add_node_srv_cb(self, request, response): + """Service: explicitly add the current robot pose as a new node.""" + if self._robot_pose is None: + response.success = False + response.message = "No robot pose received yet" + return response + + name, created, message = self.core.add_node( + self._robot_pose, node_distance=self.node_distance, force=True) + self._publish_recorded_tmap() + response.success = True + response.message = f"{message} ({name})" if created else message + return response + + def _delete_last_node_srv_cb(self, request, response): + """Service: remove the most-recently added node.""" + success, message = self.core.delete_last_node() + if success: + self._publish_recorded_tmap() + response.success = success + response.message = message + return response + + def _reset_map_srv_cb(self, request, response): + """Service: clear the recorded map completely.""" + self.core.reset(source_tmap=self._source_tmap) + self._publish_recorded_tmap() + response.success = True + response.message = "Recorded map cleared" + return response + + def _save_map_srv_cb(self, request, response): + """Service: save the recorded map to a YAML file.""" + filename = request.filename + if not filename: + filename = os.path.join( + self.tmap_dir or '.', f"{self.core.pointset}.tmap2.yaml") + elif self.tmap_dir and not os.path.isabs(filename): + filename = os.path.join(self.tmap_dir, filename) + + try: + save_tmap2_file(self.core.tmap, filename, no_alias=request.no_alias) + except OSError as exc: + response.success = False + response.message = f"Failed to save map: {exc}" + return response + + response.success = True + response.message = f"Saved recorded map to {filename}" + self.get_logger().info(response.message) + return response + + def _load_map_srv_cb(self, request, response): + """Service: load a (partial) map from a file to continue recording from it.""" + filename = request.filename + if self.tmap_dir and not os.path.isabs(filename): + filename = os.path.join(self.tmap_dir, filename) + + try: + tmap = load_tmap2_file(filename, logger=self.get_logger()) + except (OSError, ValueError, TypeError) as exc: + response.success = False + response.message = f"Failed to load map: {exc}" + response.num_nodes = 0 + return response + + self.core.load(tmap) + self._publish_recorded_tmap() + response.success = True + response.message = f"Loaded map from {filename}" + response.num_nodes = self.core.num_nodes() + return response + + # ================================================================== + # Publish helpers + # ================================================================== + + def _publish_recorded_tmap(self): + msg = String() + msg.data = self.core.to_yaml() + self.recorded_tmap_pub.publish(msg) + + +def main(args=None): + rclpy.init(args=args) + node = MapRecorder() + executor = rclpy.executors.MultiThreadedExecutor() + executor.add_node(node) + try: + executor.spin() + finally: + node.destroy_node() + rclpy.shutdown() + + +if __name__ == '__main__': + main() diff --git a/topological_navigation/topological_navigation/scripts/mean_based_prediction.py b/topological_navigation/topological_navigation/scripts/mean_based_prediction.py deleted file mode 100755 index 51542d02..00000000 --- a/topological_navigation/topological_navigation/scripts/mean_based_prediction.py +++ /dev/null @@ -1,178 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy -import actionlib -import pymongo -import json -import sys -import math -import time - -from datetime import datetime - -import actionlib -from actionlib_msgs.msg import * -from geometry_msgs.msg import Pose -from geometry_msgs.msg import PoseStamped -from std_msgs.msg import Header -from std_msgs.msg import String -from nav_msgs.srv import * -import numpy as np - -import topological_navigation_msgs.msg -from topological_navigation_msgs.msg import TopologicalNode -from mongodb_store.message_store import MessageStoreProxy -from topological_navigation_msgs.msg import NavStatistics -from topological_navigation_msgs.msg import TopologicalMap - -from topological_navigation.tmap_utils import * - -from topological_navigation_msgs.srv import * - - -def usage(): - print("For using all the available stats use:") - print("\t rosrun topological_navigation mean_based_prediction.py") - print("For all the stats in a range use:") - print("\t rosrun topological_navigation mean_based_prediction.py from_epoch to_epoch") - print("For all the stats from a date until now use:") - print("\t rosrun topological_navigation mean_based_prediction.py from_epoch -1") - print("For all the stats until one date:") - print("\t rosrun topological_navigation mean_based_prediction.py 0 to_epoch") - - -class TopologicalMeanPred(object): - - def __init__(self, epochs) : - - name= rospy.get_name() - action_name = name+'/build_temporal_model' - self.range = epochs - self.edge_to_duration = {} - self.edge_to_probability = {} - self.map = None - rospy.Subscriber('topological_map', TopologicalMap, self.map_callback) - - rospy.loginfo("Waiting for Topological map and building model ...") - - self.map_received = False - - - while not self.map_received: - rospy.sleep(rospy.Duration(1)) - rospy.loginfo("Waiting for Topological map and building model ...") - - rospy.loginfo("... Done") - - - #Creating Action Server - rospy.loginfo("Creating action server.") - self._as = actionlib.SimpleActionServer(action_name, topological_navigation_msgs.msg.BuildTopPredictionAction, execute_cb = self.build_callback, auto_start = False) - - rospy.loginfo(" ...starting") - self._as.start() - rospy.loginfo(" ...done") - - - self.predict_srv=rospy.Service('topological_prediction/predict_edges', topological_navigation_msgs.srv.PredictEdgeState, self.predict_edge_cb) - rospy.loginfo("All Done ...") - rospy.spin() - - - - def predict_edge_cb(self, req): - # build like this to ensure both lists are in the same order - results = [[edge_id, self.edge_to_probability[edge_id], self.edge_to_duration[edge_id]] for edge_id in self.edge_to_duration.keys()] - return zip(*results) - - """ - map_callback - - This function receives the topological map the computes duration estimates for all edges - """ - def map_callback(self, tmap) : - self.map = tmap - self.build_model() - self.map_received = True - - """ - build_callback - - Does nothing for this version. - """ - def build_callback(self, goal): - # set epoch ranges based on goal - if goal.start_range.secs > 0: - self.range[0] = goal.start_range.secs - if goal.end_range.secs > 0: - self.range[1] = goal.end_range.secs - - rospy.loginfo('Building model for epoch range: %s' % self.range) - - self.build_model() - - - self._as.set_succeeded() - - - def build_model(self): - """ Builds a model of mean duration for each edge using the defined nav stat range - """ - - - msg_store = MessageStoreProxy(collection='nav_stats') - - # reset model - self.edge_to_duration = {} - self.edge_to_probability = {} - - query_meta={} - if len(self.range) == 2: - if self.range[1] < 1: - upperlim = rospy.Time.now().secs - else: - upperlim = self.range[1] - query_meta["epoch"] = {"$gte": self.range[0], "$lt" : upperlim} - - - for i in self.map.nodes : - for j in i.edges: - if j.edge_id not in self.edge_to_duration: - - query = {"topological_map": self.map.name, "edge_id": j.edge_id} - stats = msg_store.query(NavStatistics._type, query, query_meta) - - rospy.loginfo('%s stats for %s' % (len(stats), j.edge_id)) - - # if no stats, use speed the same as speed-based predictor - if len(stats) == 0: - destination = get_node(self.map, j.node) - if j.top_vel >= 0.1: - self.edge_to_duration[j.edge_id] = rospy.Duration(get_distance_to_node(i, destination)/j.top_vel) - else : - self.edge_to_duration[j.edge_id] = rospy.Duration(get_distance_to_node(i, destination)/0.1) - self.edge_to_probability[j.edge_id] = 0.0 - else: - durations = np.array([stat.operation_time for stat, meta in stats]) - self.edge_to_duration[j.edge_id] = rospy.Duration(durations.mean()) - - successes = np.array([1 if stat.status == 'success' else 0 for stat, meta in stats]) - self.edge_to_probability[j.edge_id] = successes.mean() - - -if __name__ == '__main__': - rospy.init_node('topological_prediction') - epochs=[] - if len(sys.argv) < 2: - print("gathering all the stats") - epochs=[0, rospy.get_rostime().to_sec()] - else: - if len(sys.argv) == 3: - epochs.append(int(sys.argv[1])) - epochs.append(int(sys.argv[2])) - print(epochs) - else: - usage() - sys.exit(1) - server = TopologicalMeanPred(epochs) \ No newline at end of file diff --git a/topological_navigation/topological_navigation/scripts/nav_client.py b/topological_navigation/topological_navigation/scripts/nav_client.py deleted file mode 100755 index 2655592c..00000000 --- a/topological_navigation/topological_navigation/scripts/nav_client.py +++ /dev/null @@ -1,48 +0,0 @@ -#! /usr/bin/env python - -import rospy -import sys -# Brings in the SimpleActionClient -import actionlib -import topological_navigation_msgs.msg - - -class topol_nav_client(object): - - def __init__(self, targ) : - - rospy.on_shutdown(self._on_node_shutdown) - self.client = actionlib.SimpleActionClient('topological_navigation', topological_navigation_msgs.msg.GotoNodeAction) - - self.client.wait_for_server() - rospy.loginfo(" ... Init done") - - navgoal = topological_navigation_msgs.msg.GotoNodeGoal() - - print("Requesting Navigation to %s" %targ) - - navgoal.target = targ - #navgoal.origin = orig - - # Sends the goal to the action server. - self.client.send_goal(navgoal)#,self.done_cb, self.active_cb, self.feedback_cb) - - # Waits for the server to finish performing the action. - self.client.wait_for_result() - - # Prints out the result of executing the action - ps = self.client.get_result() # A FibonacciResult - print(ps) - - def _on_node_shutdown(self): - self.client.cancel_all_goals() - #sleep(2) - - -if __name__ == '__main__': - print('Argument List:',str(sys.argv)) - if len(sys.argv) < 2 : - sys.exit(2) - rospy.init_node('topol_nav_test') - ps = topol_nav_client(sys.argv[1]) - diff --git a/topological_navigation/topological_navigation/scripts/navigation.py b/topological_navigation/topological_navigation/scripts/navigation.py deleted file mode 100755 index c6e5730f..00000000 --- a/topological_navigation/topological_navigation/scripts/navigation.py +++ /dev/null @@ -1,1029 +0,0 @@ -#!/usr/bin/env python - -import rospy, actionlib, json -import dynamic_reconfigure.client - -import topological_navigation_msgs.msg -from topological_navigation_msgs.msg import NavStatistics -from topological_navigation_msgs.msg import CurrentEdge -from topological_navigation_msgs.msg import ClosestEdges -from topological_navigation_msgs.srv import EvaluateEdge, EvaluateEdgeRequest, EvaluateNode, EvaluateNodeRequest - -from std_msgs.msg import String -from actionlib_msgs.msg import GoalStatus - -from topological_navigation.route_search2 import RouteChecker, TopologicalRouteSearch2, get_route_distance -from topological_navigation.navigation_stats import nav_stats -from topological_navigation.tmap_utils import * - -from topological_navigation.edge_action_manager import EdgeActionManager -from topological_navigation.edge_reconfigure_manager import EdgeReconfigureManager - -from threading import Lock - -# A list of parameters topo nav is allowed to change and their mapping from dwa speak. -# If not listed then the param is not sent, e.g. TrajectoryPlannerROS doesn't have tolerances. -DYNPARAM_MAPPING = { - "DWAPlannerROS": { - "yaw_goal_tolerance": "yaw_goal_tolerance", - "xy_goal_tolerance": "xy_goal_tolerance", - }, - "TebLocalPlannerROS": { - "yaw_goal_tolerance": "yaw_goal_tolerance", - "xy_goal_tolerance": "xy_goal_tolerance", - }, -} - -status_mapping = {} -status_mapping[0] = "PENDING" -status_mapping[1] = "ACTIVE" -status_mapping[2] = "PREEMPTED" -status_mapping[3] = "SUCCEEDED" -status_mapping[4] = "ABORTED" -status_mapping[5] = "REJECTED" -status_mapping[6] = "PREEMPTING" -status_mapping[7] = "RECALLING" -status_mapping[8] = "RECALLED" -status_mapping[9] = "LOST" -################################################################################################################### - - -################################################################################################################### -class TopologicalNavServer(object): - - _feedback = topological_navigation_msgs.msg.GotoNodeFeedback() - _result = topological_navigation_msgs.msg.GotoNodeResult() - - _feedback_exec_policy = topological_navigation_msgs.msg.ExecutePolicyModeFeedback() - _result_exec_policy = topological_navigation_msgs.msg.ExecutePolicyModeResult() - - def __init__(self, name, mode): - - rospy.on_shutdown(self._on_node_shutdown) - - self.node_by_node = False - self.cancelled = False - self.preempted = False - self.stat = None - self.no_orientation = False - self._target = "None" - self.current_target = "none" - self.current_action = "none" - self.next_action = "none" - self.nav_from_closest_edge = False - self.fluid_navigation = True - self.final_goal = False - - self.current_node = "Unknown" - self.closest_node = "Unknown" - self.closest_edges = ClosestEdges() - self.nfails = 0 - - self.navigation_activated = False - self.navigation_lock = Lock() - - move_base_actions = [ - "move_base", - "human_aware_navigation", - "han_adapt_speed", - "han_vc_corridor", - "han_vc_junction", - ] - - self.move_base_actions = rospy.get_param("~move_base_actions", move_base_actions) - - # what service are we using as move_base? - self.move_base_name = rospy.get_param("~move_base_name", "move_base") - if not self.move_base_name in self.move_base_actions: - self.move_base_actions.append(self.move_base_name) - - self.stats_pub = rospy.Publisher("topological_navigation/Statistics", NavStatistics, queue_size=10) - self.edge_pub = rospy.Publisher("topological_navigation/Edge", CurrentEdge, queue_size=10) - self.route_pub = rospy.Publisher("topological_navigation/Route", topological_navigation_msgs.msg.TopologicalRoute, queue_size=10) - self.cur_edge = rospy.Publisher("current_edge", String, queue_size=10) - self.move_act_pub = rospy.Publisher("topological_navigation/move_action_status", String, latch=True, queue_size=1) - - self._map_received = False - rospy.Subscriber("/topological_map_2", String, self.MapCallback) - rospy.loginfo("Navigation waiting for the Topological Map...") - - while not self._map_received: - rospy.sleep(rospy.Duration.from_sec(0.05)) - rospy.loginfo("Navigation received the Topological Map") - - self.edge_action_manager = EdgeActionManager() - - self.edge_reconfigure = rospy.get_param("~reconfigure_edges", True) - self.srv_edge_reconfigure = rospy.get_param("~reconfigure_edges_srv", False) - if self.edge_reconfigure: - self.edgeReconfigureManager = EdgeReconfigureManager() - else: - rospy.logwarn("Edge Reconfigure Unavailable") - - rospy.loginfo("Subscribing to Localisation Topics...") - rospy.wait_for_message('closest_edges', ClosestEdges, timeout=10) - rospy.Subscriber("closest_node", String, self.closestNodeCallback) - rospy.Subscriber("closest_edges", ClosestEdges, self.closestEdgesCallback) - rospy.Subscriber("current_node", String, self.currentNodeCallback) - rospy.loginfo("...done") - - try: - rospy.loginfo("Waiting for restrictions...") - rospy.wait_for_service('restrictions_manager/evaluate_edge', timeout=3.0) - - self.evaluate_edge_srv = rospy.ServiceProxy( - 'restrictions_manager/evaluate_edge', EvaluateEdge) - self.evaluate_node_srv = rospy.ServiceProxy( - 'restrictions_manager/evaluate_node', EvaluateNode) - - rospy.loginfo("Restrictions Available") - self.using_restrictions = True - except: - rospy.logwarn("Restrictions Unavailable") - self.using_restrictions = False - - # this keeps the runtime state of the fail policies that are currently in execution - self.executing_fail_policy = {} - - # Creating Action Server for navigation - rospy.loginfo("Creating GO-TO-NODE action server...") - self._as = actionlib.SimpleActionServer(name, topological_navigation_msgs.msg.GotoNodeAction, - execute_cb=self.executeCallback, auto_start=False) - self._as.register_preempt_callback(self.preemptCallback) - self._as.start() - rospy.loginfo("...done") - - # Creating Action Server for execute policy - rospy.loginfo("Creating EXECUTE POLICY MODE action server...") - self._as_exec_policy = actionlib.SimpleActionServer("topological_navigation/execute_policy_mode", topological_navigation_msgs.msg.ExecutePolicyModeAction, - execute_cb=self.executeCallbackexecpolicy, auto_start=False) - self._as_exec_policy.register_preempt_callback(self.preemptCallbackexecpolicy) - self._as_exec_policy.start() - rospy.loginfo("...done") - - rospy.loginfo("All Done.") - - - def _on_node_shutdown(self): - with self.navigation_lock: - if self.navigation_activated: - self.preempted = True - self.cancel_current_action(timeout_secs=2) - - - def init_reconfigure(self): - - self.move_base_planner = rospy.get_param("~move_base_planner", "move_base/DWAPlannerROS") - planner = self.move_base_planner.split("/")[-1] - if not planner in DYNPARAM_MAPPING: - DYNPARAM_MAPPING[planner] = {} - - rospy.loginfo("Creating reconfigure client for {}".format(self.move_base_planner)) - self.rcnfclient = dynamic_reconfigure.client.Client(self.move_base_planner) - self.init_dynparams = self.rcnfclient.get_configuration() - - - def reconf_movebase(self, cedg, cnode, intermediate): - - if cnode["node"]["properties"]["xy_goal_tolerance"] <= 0.1: - cxygtol = 0.1 - else: - cxygtol = cnode["node"]["properties"]["xy_goal_tolerance"] - if not intermediate: - if cnode["node"]["properties"]["yaw_goal_tolerance"] <= 0.087266: - cytol = 0.087266 - else: - cytol = cnode["node"]["properties"]["yaw_goal_tolerance"] - else: - cytol = 6.283 - - params = {"yaw_goal_tolerance": cytol, "xy_goal_tolerance": cxygtol} - rospy.loginfo("Reconfiguring %s with %s" % (self.move_base_planner, params)) - print("Intermediate: {}".format(intermediate)) - self.reconfigure_movebase_params(params) - - - def reconfigure_movebase_params(self, params): - - self.init_dynparams = self.rcnfclient.get_configuration() - - key = self.move_base_planner[self.move_base_planner.rfind("/") + 1 :] - translation = DYNPARAM_MAPPING[key] - - translated_params = {} - for k, v in params.items(): - if k in translation: - if rospy.has_param(self.move_base_planner + "/" + translation[k]): - translated_params[translation[k]] = v - else: - rospy.logwarn("%s has no parameter %s" % (self.move_base_planner, translation[k])) - else: - rospy.logwarn("%s has no dynparam translation for %s" % (self.move_base_planner, k)) - - self._do_movebase_reconf(translated_params) - - - def _do_movebase_reconf(self, params): - - try: - self.rcnfclient.update_configuration(params) - except rospy.ServiceException as exc: - rospy.logwarn("Could not reconfigure move_base parameters. Caught service exception: %s. Will continue with previous parameters", exc) - - - def reset_reconf(self): - self._do_movebase_reconf(self.init_dynparams) - - - def MapCallback(self, msg): - """ - This Function updates the Topological Map everytime it is called - """ - self.lnodes = json.loads(msg.data) - self.topol_map = self.lnodes["pointset"] - self.rsearch = TopologicalRouteSearch2(self.lnodes) - self.route_checker = RouteChecker(self.lnodes) - self.make_move_base_edge() - - self._map_received = True - - - def make_move_base_edge(self): - - self.move_base_edge = {} - self.move_base_edge["action"] = self.move_base_name - self.move_base_edge["edge_id"] = "move_base_edge" - - move_base_goal = rospy.get_param("~move_base_goal", {}) - - if not move_base_goal: - for node in self.lnodes["nodes"]: - for edge in node["node"]["edges"]: - if edge["action"] == self.move_base_name: - move_base_goal["action_type"] = edge["action_type"] - move_base_goal["goal"] = edge["goal"] - break - else: - continue - break - - if not move_base_goal: - move_base_goal["action_type"] = "move_base_msgs/MoveBaseGoal" - move_base_goal["goal"] = {} - move_base_goal["goal"]["target_pose"] = {} - move_base_goal["goal"]["target_pose"]["pose"] = "$node.pose" - move_base_goal["goal"]["target_pose"]["header"] = {} - move_base_goal["goal"]["target_pose"]["header"]["frame_id"] = "$node.parent_frame" - - self.move_base_edge["action_type"] = move_base_goal["action_type"] - self.move_base_edge["goal"] = move_base_goal["goal"] - - rospy.loginfo("Move Base Goal set to {}".format(move_base_goal["action_type"])) - - - def executeCallback(self, goal): - """ - This Functions is called when the topo nav Action Server is called - """ - print("\n####################################################################################################") - rospy.loginfo("Processing GO-TO-NODE goal (No Orientation = {})".format(goal.no_orientation)) - can_start = False - - with self.navigation_lock: - if self.cancel_current_action(timeout_secs=10): - # we successfully stopped the previous action, claim the title to activate navigation - self.navigation_activated = True - can_start = True - - if can_start: - - self.cancelled = False - self.preempted = False - self.final_goal = False - self.no_orientation = goal.no_orientation - self.executing_fail_policy = {} - - self._feedback.route = "Starting..." - self._as.publish_feedback(self._feedback) - self.navigate(goal.target) - - else: - rospy.logwarn("Could not cancel current navigation action, GO-TO-NODE goal aborted") - self._as.set_aborted() - - self.navigation_activated = False - - - def executeCallbackexecpolicy(self, goal): - """ - This Function is called when the execute policy Action Server is called - """ - print("\n####################################################################################################") - rospy.loginfo("Processing EXECUTE POLICY MODE goal") - can_start = False - - with self.navigation_lock: - if self.cancel_current_action(timeout_secs=10): - # we successfully stopped the previous action, claim the title to activate navigation - self.navigation_activated = True - can_start = True - - if can_start: - - self.cancelled = False - self.preempted = False - self.final_goal = False - - self.max_dist_to_closest_edge = rospy.get_param("~max_dist_to_closest_edge", 1.0) - - if self.closest_edges.distances[0] > self.max_dist_to_closest_edge or self.current_node != "none": - self.nav_from_closest_edge = False - else: - self.nav_from_closest_edge = True - - route = goal.route - valid_route = self.route_checker.check_route(route) - - if valid_route and (route.source[0] == self.current_node or route.source[0] == self.closest_node): - final_edge = get_edge_from_id_tmap2(self.lnodes, route.source[-1], route.edge_id[-1]) - target = final_edge["node"] - route = self.enforce_navigable_route(route, target) - result = self.execute_policy(route, target) - else: - result = False - self.cancelled = True - rospy.logerr("Invalid route in execute policy mode goal") - - if not self.cancelled and not self.preempted: - self._result_exec_policy.success = result - if result: - self._as_exec_policy.set_succeeded(self._result_exec_policy) - else: - self._as_exec_policy.set_aborted(self._result_exec_policy) - else: - if not self.preempted: - self._result_exec_policy.success = result - self._as_exec_policy.set_aborted(self._result_exec_policy) - else: - self._result_exec_policy.success = False - self._as_exec_policy.set_preempted(self._result_exec_policy) - - else: - rospy.logwarn("Could not cancel current navigation action, EXECUTE POLICY MODE goal aborted.") - self._as_exec_policy.set_aborted() - - self.navigation_activated = False - - - def preemptCallback(self): - rospy.logwarn("Preempting GO-TO-NODE goal") - self.preempted = True - self.cancel_current_action(timeout_secs=2) - - - def preemptCallbackexecpolicy(self): - rospy.logwarn("Preempting EXECUTE POLICY MODE goal") - self.preempted = True - self.cancel_current_action(timeout_secs=2) - - - def closestNodeCallback(self, msg): - self.closest_node = msg.data - - - def closestEdgesCallback(self, msg): - self.closest_edges = msg - - - def currentNodeCallback(self, msg): - - if self.current_node != msg.data: # is there any change on this topic? - self.current_node = msg.data # we are at this new node - if msg.data != "none": # are we at a node? - rospy.loginfo("New node reached: {}".format(self.current_node)) - if self.navigation_activated: # is the action server active? - if self.stat: - self.stat.set_at_node() - # if the robot reached and intermediate node and the next action is move base goal has been reached - if ( - self.current_node == self.current_target - and self._target != self.current_target - and self.next_action in self.move_base_actions - and self.current_action in self.move_base_actions - and self.fluid_navigation - ): - rospy.loginfo("Intermediate node reached: %s", self.current_node) - self.goal_reached = True - - - def navigate(self, target): - """ - This function takes the target node and plans the actions that are required - to reach it. - """ - result = False - if not self.cancelled: - - g_node = self.rsearch.get_node_from_tmap2(target) - - self.max_dist_to_closest_edge = rospy.get_param("~max_dist_to_closest_edge", 1.0) - - if self.closest_edges.distances and (self.closest_edges.distances[0] > self.max_dist_to_closest_edge or self.current_node != "none"): - self.nav_from_closest_edge = False - o_node = self.rsearch.get_node_from_tmap2(self.closest_node) - rospy.loginfo("Planning from the closest NODE: {}".format(self.closest_node)) - else: - self.nav_from_closest_edge = True - o_node, the_edge = self.orig_node_from_closest_edge(g_node) - rospy.loginfo("Planning from the closest EDGE: {}".format(the_edge["edge_id"])) - - rospy.loginfo("Navigating From Origin %s to Target %s", o_node["node"]["name"], target) - - # Everything is Awesome!!! - # Target and Origin are not None - if (g_node is not None) and (o_node is not None): - if g_node["node"]["name"] != o_node["node"]["name"]: - route = self.rsearch.search_route(o_node["node"]["name"], target) - route = self.enforce_navigable_route(route, target) - if route.source: - rospy.loginfo("Navigating Case 1: Following route") - self.publish_route(route, target) - result, inc = self.followRoute(route, target, 0) - rospy.loginfo("Navigating Case 1 -> res: %d", inc) - else: - rospy.logwarn("Navigating Case 1a: There is no route from {} to {}. Check your edges.".format(o_node["node"]["name"], target)) - self.cancelled = True - result = False - inc = 1 - rospy.loginfo("Navigating Case 1a -> res: %d", inc) - else: - if self.nav_from_closest_edge: - result, inc = self.to_goal_node(g_node, the_edge) - else: - result, inc = self.to_goal_node(g_node) - else: - rospy.logwarn("Navigating Case 3: Target or Origin Nodes were not found on Map") - self.cancelled = True - result = False - inc = 1 - rospy.loginfo("Navigating Case 3 -> res: %d", inc) - - if (not self.cancelled) and (not self.preempted): - self._result.success = result - if result: - self._feedback.route = target - self._as.publish_feedback(self._feedback) - self._as.set_succeeded(self._result) - else: - self._feedback.route = self.current_node - self._as.publish_feedback(self._feedback) - self._as.set_aborted(self._result) - else: - if not self.preempted: - self._feedback.route = self.current_node - self._as.publish_feedback(self._feedback) - self._result.success = result - self._as.set_aborted(self._result) - else: - self._result.success = False - self._as.set_preempted(self._result) - - - def execute_policy(self, route, target): - - succeeded, inc = self.followRoute(route, target, 1) - - if succeeded: - rospy.loginfo("Navigation Finished Successfully") - self.publish_feedback_exec_policy(GoalStatus.SUCCEEDED) - else: - if self.cancelled and self.preempted: - rospy.logwarn("Fatal Fail") - self.publish_feedback_exec_policy(GoalStatus.PREEMPTED) - elif self.cancelled: - rospy.logwarn("Navigation Failed") - self.publish_feedback_exec_policy(GoalStatus.ABORTED) - return succeeded - - - def publish_feedback_exec_policy(self, nav_outcome=None): - if self.current_node == "none": # Happens due to lag in fetch system - rospy.sleep(0.5) - if self.current_node == "none": - self._feedback_exec_policy.current_wp = self.closest_node - else: - self._feedback_exec_policy.current_wp = self.current_node - else: - self._feedback_exec_policy.current_wp = self.current_node - if nav_outcome is not None: - self._feedback_exec_policy.status = nav_outcome - self._as_exec_policy.publish_feedback(self._feedback_exec_policy) - - - def orig_node_from_closest_edge(self, g_node): - - name_1, _ = get_node_names_from_edge_id_2(self.lnodes, self.closest_edges.edge_ids[0]) - name_2, _ = get_node_names_from_edge_id_2(self.lnodes, self.closest_edges.edge_ids[1]) - - # Navigate from the closest edge instead of the closest node. First get the closest edges. - edge_1 = get_edge_from_id_tmap2(self.lnodes, name_1, self.closest_edges.edge_ids[0]) - edge_2 = get_edge_from_id_tmap2(self.lnodes, name_2, self.closest_edges.edge_ids[1]) - - # Then get their destination nodes. - o_node_1 = self.rsearch.get_node_from_tmap2(edge_1["node"]) - o_node_2 = self.rsearch.get_node_from_tmap2(edge_2["node"]) - - # If the closest edges are of equal distance (usually a bidirectional edge) - # then use the destination node that results in a shorter route to the goal. - if self.closest_edges.distances[0] == self.closest_edges.distances[1]: - d1 = get_route_distance(self.lnodes, o_node_1, g_node) - d2 = get_route_distance(self.lnodes, o_node_2, g_node) - else: # Use the destination node of the closest edge. - d1 = 0; d2 = 1 - - if d1 <= d2: - return o_node_1, edge_1 - else: - return o_node_2, edge_2 - - - def to_goal_node(self, g_node, the_edge=None): - - rospy.loginfo("Target and Origin Nodes are the same") - self.current_target = g_node["node"]["name"] - - if the_edge is None: - # Check if there is a move_base action in the edges of this node and choose the earliest one in the - # list of move_base actions. If not is dangerous to move. - act_ind = 100 - for i in g_node["node"]["edges"]: - c_action_server = i["action"] - if c_action_server in self.move_base_actions: - c_ind = self.move_base_actions.index(c_action_server) - if c_ind < act_ind: - act_ind = c_ind - the_edge = i - - if the_edge is None: - rospy.logwarn("Navigating Case 2a: Could not find a move base action in the edges of target {}. Unsafe to move".format(g_node["node"]["name"])) - rospy.loginfo("Action not taken, outputting success") - result=True - inc=0 - rospy.loginfo("Navigating Case 2a -> res: %d", inc) - else: - rospy.loginfo("Navigating Case 2: Getting to the exact pose of target {}".format(g_node["node"]["name"])) - self.final_goal = True - self.current_target = g_node["node"]["name"] - origin_name,_ = get_node_names_from_edge_id_2(self.lnodes, the_edge["edge_id"]) - origin_node = self.rsearch.get_node_from_tmap2(origin_name) - - self.edge_reconf_start(the_edge) - result, inc = self.execute_action(the_edge, g_node, origin_node) - self.edge_reconf_end() - - if not result: - rospy.logwarn("Navigation Failed") - inc=1 - else: - rospy.loginfo("Navigation Finished Successfully") - rospy.loginfo("Navigating Case 2 -> res: %d", inc) - - return result, inc - - - def enforce_navigable_route(self, route, target_node): - """ - Enforces the route to always contain the initial edge that leads the robot to the first node in the given route. - In other words, avoid that the route contains an initial edge that is too far from the robot pose. - """ - if self.nav_from_closest_edge and self.closest_edges.edge_ids and len(self.closest_edges.edge_ids) == 2: - if not(self.closest_edges.edge_ids[0] in route.edge_id or self.closest_edges.edge_ids[1] in route.edge_id): - first_node = route.source[0] if len(route.source) > 0 else target_node - - for edge_id in self.closest_edges.edge_ids: - origin, destination = get_node_names_from_edge_id_2(self.lnodes, edge_id) - - if destination == first_node and edge_id not in route.edge_id: - route.source.insert(0, origin) - route.edge_id.insert(0, edge_id) - break - return route - - - def followRoute(self, route, target, exec_policy): - """ - This function follows the chosen route to reach the goal. - """ - self.navigation_activated = True - - nnodes = len(route.source) - Orig = route.source[0] - Targ = target - self._target = Targ - - self.init_reconfigure() - - rospy.loginfo("%d Nodes on route" % nnodes) - - inc = 1 - rindex = 0 - nav_ok = True - recovering = False - replanned = False - self.fluid_navigation = True - - o_node = self.rsearch.get_node_from_tmap2(Orig) - edge_from_id = get_edge_from_id_tmap2(self.lnodes, route.source[0], route.edge_id[0]) - if edge_from_id: - a = edge_from_id["action"] - rospy.loginfo("First action: %s" % a) - else: - rospy.logerr("Failed to get edge from id {}. Invalid route".format(route.edge_id[0])) - return False, inc - - if not self.nav_from_closest_edge: - # If the robot is not on a node or the first action is not move base type - # navigate to closest node waypoint (only when first action is not move base) - if a not in self.move_base_actions: - rospy.loginfo("The action of the first edge in the route is a navigate to pose action") - rospy.loginfo("Current node is {}".format(self.current_node)) - - if self.current_node == "none" and a not in self.move_base_actions: - self.next_action = a - rospy.loginfo("Do %s to origin %s" % (self.move_base_name, o_node["node"]["name"])) - - # 5 degrees tolerance - params = {"yaw_goal_tolerance": 0.087266} - self.reconfigure_movebase_params(params) - - self.current_target = Orig - nav_ok, inc = self.execute_action(self.move_base_edge, o_node) - rospy.loginfo("Navigation Finished Successfully") if nav_ok else rospy.logwarn("Navigation Failed") - - elif a not in self.move_base_actions: - move_base_act = False - for i in o_node["node"]["edges"]: - # Check if there is a move_base action in the edages of this node - # if not is dangerous to move - if i["action"] in self.move_base_actions: - move_base_act = True - - if not move_base_act: - rospy.logwarn("Could not find a move base action in the edges of origin {}. Unsafe to move".format(o_node["node"]["name"])) - rospy.loginfo("Action not taken, outputing success") - nav_ok = True - inc = 0 - else: - rospy.loginfo("Getting to the exact pose of origin {}".format(o_node["node"]["name"])) - self.current_target = Orig - nav_ok, inc = self.execute_action(self.move_base_edge, o_node) - rospy.loginfo("Navigation Finished Successfully") if nav_ok else rospy.logwarn("Navigation Failed") - - - while rindex < (len(route.edge_id)) and not self.cancelled and (nav_ok or recovering): - - cedg = get_edge_from_id_tmap2(self.lnodes, route.source[rindex], route.edge_id[rindex]) - a = cedg["action"] - - if rindex < (len(route.edge_id) - 1): - nedge = get_edge_from_id_tmap2(self.lnodes, route.source[rindex + 1], route.edge_id[rindex + 1]) - a1 = nedge["action"] - self.fluid_navigation = nedge["fluid_navigation"] - else: - nedge = None - a1 = "none" - self.fluid_navigation = False - self.final_goal = True - - self.current_action = a - self.next_action = a1 - - rospy.loginfo("From %s do (%s) to %s" % (route.source[rindex], a, cedg["node"])) - - current_edge = "%s--%s" % (cedg["edge_id"], self.topol_map) - rospy.loginfo("Current edge: %s" % current_edge) - self.cur_edge.publish(current_edge) - - if not exec_policy: - self._feedback.route = "%s to %s using %s" % (route.source[rindex], cedg["node"], a) - self._as.publish_feedback(self._feedback) - else: - self.publish_feedback_exec_policy() - - cnode = self.rsearch.get_node_from_tmap2(cedg["node"]) - onode = self.rsearch.get_node_from_tmap2(route.source[rindex]) - - # do not care for the orientation of the waypoint if is not the last waypoint AND - # the current and following action are move_base or human_aware_navigation - # and when the fuild_navigation is true - if rindex < len(route.edge_id) - 1 and a1 in self.move_base_actions and a in self.move_base_actions and self.fluid_navigation: - self.reconf_movebase(cedg, cnode, True) - else: - if self.no_orientation: - self.reconf_movebase(cedg, cnode, True) - else: - self.reconf_movebase(cedg, cnode, False) - - self.current_target = cedg["node"] - - self.stat = nav_stats(route.source[rindex], cedg["node"], self.topol_map, cedg["edge_id"]) - dt_text = self.stat.get_start_time_str() - - self.edge_reconf_start(cedg) - if exec_policy: - nav_ok, inc = self.execute_action(cedg, cnode, onode) - else: - nav_ok, inc, recovering, route, replanned = self.execute_action_fail_recovery(cedg, cnode, route, rindex, onode, target) - self.edge_reconf_end() - - params = {"yaw_goal_tolerance": 0.087266, "xy_goal_tolerance": 0.1} - self.reconfigure_movebase_params(params) - - not_fatal = nav_ok - if self.cancelled: - nav_ok = True - if self.preempted: - not_fatal = False - nav_ok = False - - self.stat.set_ended(self.current_node) - dt_text=self.stat.get_finish_time_str() - operation_time = self.stat.operation_time - time_to_wp = self.stat.time_to_wp - - if nav_ok: - self.stat.status = "success" - rospy.loginfo("Navigation Finished on %s (%d/%d)" % (dt_text, operation_time, time_to_wp)) - else: - if not_fatal: - rospy.logwarn("Navigation Failed on %s (%d/%d)" % (dt_text, operation_time, time_to_wp)) - self.stat.status = "failed" - else: - rospy.logwarn("Fatal Fail on %s (%d/%d)" % (dt_text, operation_time, time_to_wp)) - self.stat.status = "fatal" - - self.publish_stats() - - current_edge = "none" - self.cur_edge.publish(current_edge) - - self.current_action = "none" - self.next_action = "none" - - if not replanned: - rindex = rindex + 1 - - self.reset_reconf() - - self.navigation_activated = False - - result = nav_ok - return result, inc - - - def edge_reconf_start(self, edge): - - if self.edge_reconfigure: - if not self.srv_edge_reconfigure: - self.edgeReconfigureManager.register_edge(edge) - self.edgeReconfigureManager.initialise() - self.edgeReconfigureManager.reconfigure() - else: - self.edgeReconfigureManager.srv_reconfigure(edge["edge_id"]) - - - def edge_reconf_end(self): - - if self.edge_reconfigure and not self.srv_edge_reconfigure and self.edgeReconfigureManager.active: - self.edgeReconfigureManager._reset() - rospy.sleep(rospy.Duration.from_sec(0.3)) - - - def cancel_current_action(self, timeout_secs=-1): - """ - Cancels the action currently in execution. Returns True if the current goal is correctly ended. - """ - rospy.loginfo("Cancelling current navigation goal, timeout_secs = {}...".format(timeout_secs)) - - self.edge_action_manager.preempt() - self.cancelled = True - - if timeout_secs > 0: - stime = rospy.get_rostime() - timeout = rospy.Duration().from_sec(timeout_secs) - while self.navigation_activated: - if (rospy.get_rostime() - stime) > timeout: - rospy.loginfo("\t[timeout called]") - break - rospy.sleep(0.2) - - rospy.loginfo("Navigation active: " + str(self.navigation_activated)) - return not self.navigation_activated - - - def publish_route(self, route, target): - stroute = topological_navigation_msgs.msg.TopologicalRoute() - for i in route.source: - stroute.nodes.append(i) - stroute.nodes.append(target) - self.route_pub.publish(stroute) - - - def publish_stats(self): - pubst = NavStatistics() - pubst.edge_id = self.stat.edge_id - pubst.status = self.stat.status - pubst.origin = self.stat.origin - pubst.target = self.stat.target - pubst.topological_map = self.stat.topological_map - pubst.final_node = self.stat.final_node - pubst.time_to_waypoint = self.stat.time_to_wp - pubst.operation_time = self.stat.operation_time - pubst.date_started = self.stat.get_start_time_str() - pubst.date_at_node = self.stat.date_at_node.strftime("%A, %B %d %Y, at %H:%M:%S hours") - - pubst.date_finished = self.stat.get_finish_time_str() - self.stats_pub.publish(pubst) - self.stat = None - - - def get_fail_policy_state(self, edge): - policy = None - state = -1 - if len(self.executing_fail_policy) == 0: - _policy = [action.strip().split("_") for action in edge["fail_policy"].split(",")] - policy = [] - # repeat the actions that can be repeated more than once - for action in _policy: - if len(action) > 1 and isinstance(eval(action[-1]), int): - for _ in range(eval(action[-1])): - policy.append(action[:-1]) - else: - policy.append(action) - state = 0 - self.executing_fail_policy = { - "policy": policy, # the policy we want to execute - "state": state, # at which point of the policy we are - "edge": edge["edge_id"] - } - - else: - policy = self.executing_fail_policy["policy"] - # increment the state because if we are here it means that the previous policy action failed - self.executing_fail_policy["state"] += 1 - state = self.executing_fail_policy["state"] - - return policy, state - - - def execute_action_fail_recovery(self, edge, destination_node, route, idx, origin_node, target): - """ - This function wraps `execute_action` by executing the fail_policy in case of ABORTED action - The fail policy sometimes modifies the current route by including the recovery action - """ - nav_ok, inc = self.execute_action(edge, destination_node, origin_node) - - new_route = route - recovering = False - replanned = False - - # this means the action is aborted -> execute the fail policy - # make sure that if the goal is cancelled by the client we don't enter here - if not nav_ok and not self.preempted: - rospy.loginfo("\t>> route: {}".format(route)) - route_updated = False - while not route_updated: - policy, state = self.get_fail_policy_state(edge) - if state < len(policy): - rec_action = policy[state] - rospy.loginfo(">> EXECUTING FAIL POLICY ACTION: {}.".format(rec_action)) - - if rec_action[0] == "retry": - new_route.source.insert(idx+1, route.source[idx]) - new_route.edge_id.insert(idx+1, route.edge_id[idx]) - route_updated = True - recovering = True - replanned = False - elif rec_action[0] == "fail": - route_updated = True - recovering = False - replanned = False - elif rec_action[0] == "wait": - secs = 1 - if len(rec_action) > 1: - secs = int(rec_action[-1]) - rospy.sleep(secs) - recovering = True - replanned = False - elif rec_action[0] == "replan": - _route = self.rsearch.search_route(origin_node["node"]["name"], target, avoid_edges=[edge["edge_id"]]) - _route = self.enforce_navigable_route(_route, target) - - # build the new route - new_route.source = route.source[:idx] + _route.source - new_route.edge_id = route.edge_id[:idx] + _route.edge_id - route_updated = True - recovering = True - replanned = True - else: - # clean the current fail policy data - self.executing_fail_policy = {} - recovering = False - replanned = False - - rospy.loginfo("\t>> new route: {}".format(new_route)) - return nav_ok, inc, recovering, new_route, replanned - - - def execute_action(self, edge, destination_node, origin_node=None): - - inc = 0 - result = True - self.goal_reached = False - self.prev_status = None - - if self.using_restrictions and edge["edge_id"] != "move_base_edge": - rospy.loginfo("Evaluating restrictions on edge {}".format(edge["edge_id"])) - ev_edge_msg = EvaluateEdgeRequest() - ev_edge_msg.edge = edge["edge_id"] - ev_edge_msg.runtime = True - resp = self.evaluate_edge_srv.call(ev_edge_msg) - if resp.success and resp.evaluation: - rospy.logwarn("The edge is restricted, stopping navigation") - result = False - inc = 1 - return result, inc - - rospy.loginfo("Evaluating restrictions on node {}".format(destination_node["node"]["name"])) - ev_node_msg = EvaluateNodeRequest() - ev_node_msg.node = destination_node["node"]["name"] - ev_node_msg.runtime = True - resp = self.evaluate_node_srv.call(ev_node_msg) - if resp.success and resp.evaluation: - rospy.logwarn("The node is restricted, stopping navigation") - result = False - inc = 1 - return result, inc - - - self.edge_action_manager.initialise(edge, destination_node, origin_node) - self.edge_action_manager.execute() - - status = self.edge_action_manager.client.get_state() - self.pub_status(status) - while ( - (status == GoalStatus.ACTIVE or status == GoalStatus.PENDING) - and not self.cancelled - and not self.goal_reached - ): - status = self.edge_action_manager.client.get_state() - self.pub_status(status) - rospy.sleep(rospy.Duration.from_sec(0.01)) - - res = self.edge_action_manager.client.get_result() - - if status != GoalStatus.SUCCEEDED: - if not self.goal_reached: - result = False - if status is GoalStatus.PREEMPTED: - self.preempted = True - else: - result = True - - if not res: - if not result: - inc = 1 - else: - inc = 0 - - rospy.sleep(rospy.Duration.from_sec(0.5)) - status = self.edge_action_manager.client.get_state() - self.pub_status(status) - - rospy.loginfo("move action status: {}, goal reached: {}, inc: {}".format(status_mapping[status], result, inc)) - return result, inc - - - def pub_status(self, status): - - if status != self.prev_status: - d = {} - d["goal"] = self.edge_action_manager.destination_node["node"]["name"] - d["final_goal"] = self.final_goal - d["action"] = self.edge_action_manager.current_action.upper() - d["status"] = status_mapping[status] - - self.move_act_pub.publish(String(json.dumps(d))) - self.prev_status = status -################################################################################################################### - - -################################################################################################################### -if __name__ == "__main__": - rospy.init_node("topological_navigation") - mode = "normal" - server = TopologicalNavServer(rospy.get_name(), mode) - rospy.spin() - - rospy.loginfo("Exiting.") -################################################################################################################### \ No newline at end of file diff --git a/topological_navigation/topological_navigation/scripts/navigation2.py b/topological_navigation/topological_navigation/scripts/navigation2.py old mode 100755 new mode 100644 index 166dc29a..3880f02b --- a/topological_navigation/topological_navigation/scripts/navigation2.py +++ b/topological_navigation/topological_navigation/scripts/navigation2.py @@ -1,1260 +1,2895 @@ #!/usr/bin/env python +"""Map-Driven Topological Navigation Server. + +All navigation behaviour is defined by the topological map YAML file: + +- **definitions**: inline BT XML blobs, written to temp files for Nav2. +- **actions**: maps edge action names to Nav2 action types, servers, + goal templates, and composability flags. +- **edges**: reference action names in the ``actions`` section. + +The map file is the single source of truth. No BT file paths or +action-type mappings are hard-coded in this script. + +Architecture +~~~~~~~~~~~~ +1. Map arrives on ``/topological_map_2`` -> parsed into a NetworkX + ``DiGraph`` and map-level ``definitions`` / ``actions`` dicts. +2. For every unique ``(action_type, action_server)`` pair an + ``ActionClient`` is created. +3. Route planning uses NetworkX shortest-path algorithms whose + parameters (algorithm, weight attribute) are exposed as ROS 2 + parameters so they can be changed at launch time. +4. Consecutive composable edges are merged into multi-waypoint + segments; non-composable edges are dispatched individually. +5. Boundary polygons are published for any segment whose edges + carry ``boundary_left`` / ``boundary_right`` properties. + +ROS 2 interfaces + Action servers: + / (GotoNode) + /topological_navigation/execute_policy_mode (ExecutePolicyMode) + Subscriptions: + /topological_map_2, closest_node, closest_edges, current_node + Publishers: + topological_navigation/Statistics, topological_navigation/Route, + current_edge, /boundary_checker (PolygonStamped), + /robot_operation_current_status (String), + topological_navigation/move_action_status (String) + Parameters: + max_dist_to_closest_edge (double) -- origin heuristic + coarse_white_extension_m (double) -- coarse full-map corridor half-width + route_white_extension_m (double) -- fine route-map default half-width + base_frame (string) -- robot TF frame for route-map start + route_algorithm (string) -- 'astar' | 'dijkstra' + route_weight_attr (string) -- edge attribute for cost + +Last Updated: 2026-09-02 """ -Created on Tue Nov 5 22:02:24 2023 -@author: Geesara Kulathunga (ggeesara@gmail.com) -""" - -import rclpy, json, yaml +import importlib +import json +import math +import os +import tempfile +import time +import threading +from datetime import datetime +import yaml -from topological_navigation_msgs.msg import NavStatistics, CurrentEdge, ClosestEdges, TopologicalRoute, GotoNodeFeedback, ExecutePolicyModeFeedback -from topological_navigation_msgs.srv import EvaluateEdge, EvaluateNode -from topological_navigation_msgs.action import GotoNode, ExecutePolicyMode -from topological_navigation_msgs.action import ExecutePolicyMode -from std_msgs.msg import String -import os +import rclpy +import rclpy.node from action_msgs.msg import GoalStatus -from topological_navigation.route_search2 import RouteChecker, TopologicalRouteSearch2, get_route_distance -from topological_navigation.navigation_stats import nav_stats -from topological_navigation.scripts.param_processing import ParameterUpdaterNode -from topological_navigation.tmap_utils import * -from rclpy.qos import QoSProfile, HistoryPolicy, ReliabilityPolicy, DurabilityPolicy, QoSDurabilityPolicy -from rclpy.action import ActionServer -from rclpy import Parameter -from topological_navigation.edge_action_manager2 import EdgeActionManager -from topological_navigation.edge_reconfigure_manager2 import EdgeReconfigureManager -from rclpy.callback_groups import MutuallyExclusiveCallbackGroup, ReentrantCallbackGroup -from rclpy.executors import MultiThreadedExecutor, SingleThreadedExecutor -from threading import Lock - -from ament_index_python.packages import get_package_share_directory -from topological_navigation.scripts.actions_bt import ActionsType -# A list of parameters topo nav is allowed to change and their mapping from dwa speak. -# If not listed then the param is not sent, e.g. TrajectoryPlannerROS doesn't have tolerances. - - -# this ensures that all the poses and translates -# are float-type and not int-type as there is an -# assertion in ros2 messages (vector3, pose etc.) -# for float-type [x,y,z,w] keys. -class CustomSafeLoader(yaml.SafeLoader): +from geometry_msgs.msg import Point32, PolygonStamped, PoseStamped +from nav_msgs.msg import OccupancyGrid +from rcl_interfaces.msg import Parameter as RclParameter +from rcl_interfaces.msg import ParameterType, ParameterValue +from rcl_interfaces.msg import SetParametersResult +from rcl_interfaces.srv import GetParameters, SetParameters +from rclpy import Parameter +from rclpy.action import ActionClient, ActionServer, CancelResponse +from rclpy.callback_groups import ( + MutuallyExclusiveCallbackGroup, + ReentrantCallbackGroup, +) +from rclpy.executors import MultiThreadedExecutor +from rclpy.qos import ( + DurabilityPolicy, + HistoryPolicy, + QoSHistoryPolicy, + QoSProfile, + ReliabilityPolicy, +) +from std_msgs.msg import String +from tf2_ros import TransformException +from tf2_ros.buffer import Buffer +from tf2_ros.transform_listener import TransformListener + +from topological_navigation.navigation_graph import ( + ACTION_TO_STATE, + NavState, + NavStateMachine, + compute_boundary_polygon, + get_route_distance, + get_route_edges, + merge_action_segments, + plan_route, +) +from topological_navigation.nav_stats_db import NavStatsDB, compute_map_hash +from topological_navigation.networkx_utils import build_graph_from_tmap +from topological_navigation.topomap_to_map_image import ( + FREE_VALUE, + OCCUPIED_VALUE, + UNKNOWN_VALUE, + geometry_from_tmap, + rasterize_geometry, + rasterize_route_geometry, + route_specs_from_edge_data, +) +from topological_navigation.tmap_utils import ( + get_edge_from_id_tmap2, + get_node_from_tmap2, +) +from topological_navigation_msgs.action import ExecutePolicyMode, GotoNode +from topological_navigation_msgs.msg import ( + ClosestEdges, + NavStatistics, + TopologicalRoute, +) +# ===================================================================== +# GoalStatus helpers +# ===================================================================== + +_STATUS_MAP = { + GoalStatus.STATUS_UNKNOWN: "STATUS_UNKNOWN", + GoalStatus.STATUS_ACCEPTED: "STATUS_ACCEPTED", + GoalStatus.STATUS_EXECUTING: "STATUS_EXECUTING", + GoalStatus.STATUS_CANCELING: "STATUS_CANCELING", + GoalStatus.STATUS_SUCCEEDED: "STATUS_SUCCEEDED", + GoalStatus.STATUS_CANCELED: "STATUS_CANCELED", + GoalStatus.STATUS_ABORTED: "STATUS_ABORTED", +} + + +def _status_str(code: int) -> str: + return _STATUS_MAP.get(code, "STATUS_UNKNOWN(%d)" % code) + + +# ===================================================================== +# YAML loader -- coerce pose ints to float +# ===================================================================== + +class _FloatSafeLoader(yaml.SafeLoader): def construct_mapping(self, node, deep=False): - mapping = super().construct_mapping(node, deep=deep) + m = super().construct_mapping(node, deep=deep) + for k in ('x', 'y', 'z', 'w'): + if k in m and isinstance(m[k], int): + m[k] = float(m[k]) + return m + + +# ===================================================================== +# ROS 2 parameter value helpers +# ===================================================================== + +def _ros_param_value(param_value): + """Extract the Python value from a ROS 2 ``ParameterValue``. + + Returns ``None`` when the parameter type is not recognised or when + the parameter is unset (``PARAMETER_NOT_SET``). + """ + ptype = param_value.type + if ptype == ParameterType.PARAMETER_BOOL: + return param_value.bool_value + if ptype == ParameterType.PARAMETER_INTEGER: + return param_value.integer_value + if ptype == ParameterType.PARAMETER_DOUBLE: + return param_value.double_value + if ptype == ParameterType.PARAMETER_STRING: + return param_value.string_value + return None + + +def _make_ros_param_value(value): + """Build a ROS 2 ``ParameterValue`` from a plain Python value. + + Supported types: ``bool``, ``int``, ``float``, ``str``. + Returns an unset ``ParameterValue`` for unsupported types. + """ + pv = ParameterValue() + if isinstance(value, bool): + pv.type = ParameterType.PARAMETER_BOOL + pv.bool_value = value + elif isinstance(value, int): + pv.type = ParameterType.PARAMETER_INTEGER + pv.integer_value = value + elif isinstance(value, float): + pv.type = ParameterType.PARAMETER_DOUBLE + pv.double_value = value + elif isinstance(value, str): + pv.type = ParameterType.PARAMETER_STRING + pv.string_value = value + return pv + + +def _normalise_node_name(name): + """Return a bare ROS node name (no leading/trailing slashes).""" + return str(name or '').strip('/') + + +def _normalise_ros_param_spec(spec, default_node): + """Normalise a ``set_ros_params`` declaration to ``{node: {param: value}}``. + + Three authoring styles are accepted: + + 1. Node-keyed mapping:: + + set_ros_params: + collision_monitor: + FootprintApproach.enabled: false + + 2. List of entries, each with a ``node`` plus either a single + ``param``/``value`` pair or a ``params`` mapping:: + + set_ros_params: + - node: collision_monitor + param: FootprintApproach.enabled + value: false + - node: controller_server + params: + FollowPath.max_robot_speed: 0.3 + + 3. Flat ``{param: value}`` mapping, applied to *default_node*:: + + set_ros_params: + FollowPath.max_robot_speed: 0.3 + + Styles 1 and 3 are told apart per key: a key whose value is a dict is + treated as a node name, anything else as a parameter name. + + Args: + spec: The raw declaration (dict, list, or ``None``). + default_node: Node used for entries that do not name one. + + Returns: + ``{node_name: {param_name: value}}`` (possibly empty). + """ + out = {} + + def _add(node, param, value): + node = _normalise_node_name(node) or _normalise_node_name(default_node) + if not node or not param: + return + out.setdefault(node, {})[str(param)] = value + + if isinstance(spec, dict): + for key, value in spec.items(): + if isinstance(value, dict): + for param, pval in value.items(): + _add(key, param, pval) + else: + _add(default_node, key, value) + elif isinstance(spec, (list, tuple)): + for entry in spec: + if not isinstance(entry, dict): + continue + node = entry.get('node', default_node) + params = entry.get('params') + if isinstance(params, dict): + for param, pval in params.items(): + _add(node, param, pval) + if 'param' in entry: + _add(node, entry.get('param'), entry.get('value')) + + return out + + +def _merge_ros_param_specs(base, override): + """Deep-merge two normalised param specs; *override* wins per parameter.""" + merged = {node: dict(params) for node, params in base.items()} + for node, params in override.items(): + merged.setdefault(node, {}).update(params) + return merged + + +# ===================================================================== +# Navigation statistics +# ===================================================================== + +class nav_stats: + """Timing statistics for a single edge traversal.""" + + def __init__(self, origin, target, topol_map, edge_id): + self.status = "active" + self.origin = origin + self.target = target + self.topological_map = topol_map + self.edge_id = edge_id + # Optional extras used by the DB recorder + self.map_hash: str = "" + self.failure_reason: str = "none" + self.edge_length: float = 0.0 + self.is_segment: bool = False + self.segment_edge_ids: list = [] + self.set_start() + + def set_start(self): + """Record navigation start time.""" + self.date_started = datetime.now() + self.date_at_node = self.date_started + + def set_ended(self, node): + """Record navigation end time and compute durations.""" + self.final_node = node + self.date_finished = datetime.now() + self.get_operation_time() + self.get_time_to_wp() + + def set_at_node(self): + """Record time of arrival at intermediate node.""" + self.date_at_node = datetime.now() + + def get_operation_time(self): + """Total seconds from start to finish.""" + delta = self.date_finished - self.date_started + self.operation_time = delta.total_seconds() + return self.operation_time + + def get_time_to_wp(self): + """Seconds from last intermediate node to finish.""" + if self.date_at_node != self.date_started: + delta = self.date_finished - self.date_at_node + self.time_to_wp = delta.total_seconds() + else: + self.time_to_wp = 0 + return self.time_to_wp - # this can be extended to test the validity of the tmap2 - # as well at load time (or add missing keys) - for key in ['x', 'y', 'z', 'w']: - if key in mapping and isinstance(mapping[key], int): - mapping[key] = float(mapping[key]) - - return mapping + def get_start_time_str(self): + """Human-readable start timestamp.""" + return self.date_started.strftime( + '%A, %B %d %Y, at %H:%M:%S hours', + ) + + def get_finish_time_str(self): + """Human-readable finish timestamp.""" + return self.date_finished.strftime( + '%A, %B %d %Y, at %H:%M:%S hours', + ) +# ===================================================================== +# Topological Navigation Server +# ===================================================================== + class TopologicalNavServer(rclpy.node.Node): - - _feedback = GotoNodeFeedback() - _result = GotoNode.Result() + """Map-driven topological navigation server. - _feedback_exec_policy = ExecutePolicyModeFeedback() - _result_exec_policy = ExecutePolicyMode.Result() + All action clients, BT selection, and composability rules are + derived from the ``definitions`` and ``actions`` sections of the + topological map YAML. NetworkX path-planning parameters are + exposed as ROS 2 parameters. + """ - def __init__(self, name, update_params_control_server, edge_action_manager_server): - super().__init__(name) - rclpy.get_default_context().on_shutdown(self._on_node_shutdown) - self.node_by_node = False - self.cancelled = False - self.preempted = False - self.stat = None - self.no_orientation = False - self._target = "None" - self.current_target = "none" - self.current_action = "none" - self.next_action = "none" - self.nav_from_closest_edge = False - self.fluid_navigation = True - self.final_goal = False - self.update_params_control_server = update_params_control_server - - self.current_node = "Unknown" - self.closest_node = "Unknown" - self.closest_edges = ClosestEdges() - self.nfails = 0 - - self.navigation_activated = False - self.navigation_lock = Lock() - self.ACTIONS = ActionsType() - - self.declare_parameter('navigation_action_name', Parameter.Type.STRING) - self.declare_parameter('navigation_actions', Parameter.Type.STRING_ARRAY) - self.declare_parameter('navigation_action_goal', Parameter.Type.STRING_ARRAY) - self.declare_parameter("max_dist_to_closest_edge", Parameter.Type.DOUBLE) - self.declare_parameter('reconfigure_edges', Parameter.Type.BOOL) - self.declare_parameter('reconfigure_edges_srv', Parameter.Type.BOOL) - - self.declare_parameter("row_traversal_planner", Parameter.Type.STRING) - self.declare_parameter("default_planner", Parameter.Type.STRING) - self.declare_parameter("goal_align_planner", Parameter.Type.STRING) - - self.declare_parameter("row_traversal_planner_xy_goal_tolerance", Parameter.Type.DOUBLE) - self.declare_parameter("default_planner_xy_goal_tolerance", Parameter.Type.DOUBLE) - self.declare_parameter("goal_align_planner_xy_goal_tolerance", Parameter.Type.DOUBLE) + # ----------------------------------------------------------------- + # Construction + # ----------------------------------------------------------------- - self.declare_parameter("row_traversal_planner_yaw_goal_tolerance", Parameter.Type.DOUBLE) - self.declare_parameter("default_planner_xy_yaw_goal_tolerance", Parameter.Type.DOUBLE) - self.declare_parameter("goal_align_planner_xy_yaw_goal_tolerance", Parameter.Type.DOUBLE) - - self.declare_parameter('use_nav2_follow_route', Parameter.Type.BOOL) - self.declare_parameter('use_in_row_operation', Parameter.Type.BOOL) - self.declare_parameter('inrow_step_size', Parameter.Type.DOUBLE) - self.declare_parameter('inrow_step_intermediate_dis', Parameter.Type.DOUBLE) - self.declare_parameter(self.ACTIONS.BT_DEFAULT, Parameter.Type.STRING) - self.declare_parameter(self.ACTIONS.BT_IN_ROW, Parameter.Type.STRING) - self.declare_parameter(self.ACTIONS.BT_GOAL_ALIGN, Parameter.Type.STRING) - self.declare_parameter(self.ACTIONS.BT_IN_ROW_OPERATION, Parameter.Type.STRING) - self.declare_parameter(self.ACTIONS.BT_IN_ROW_RECOVERY, Parameter.Type.STRING) - - self.navigation_action_name = self.get_parameter_or("navigation_action_name", Parameter('str', Parameter.Type.STRING, self.ACTIONS.NAVIGATE_TO_POSE)).value - self.navigation_actions = self.get_parameter_or("navigation_actions", Parameter('str', Parameter.Type.STRING_ARRAY, self.ACTIONS.navigation_actions)).value - self.use_nav2_follow_route = self.get_parameter_or("use_nav2_follow_route", Parameter('bool', Parameter.Type.BOOL, False)).value - self.use_in_row_operation = self.get_parameter_or("use_in_row_operation", Parameter('bool', Parameter.Type.BOOL, False)).value - self.inrow_step_size = self.get_parameter_or("inrow_step_size", Parameter('double', Parameter.Type.DOUBLE, 2.0)).value - self.inrow_step_intermediate_dis = self.get_parameter_or("inrow_step_intermediate_dis", Parameter('double', Parameter.Type.DOUBLE, -1.0)).value - - row_traversal_planner = self.get_parameter_or("row_traversal_planner", Parameter('str', Parameter.Type.STRING, "dwb_core::DWBLocalPlanner")).value - default_planner = self.get_parameter_or("default_planner", Parameter('str', Parameter.Type.STRING, "dwb_core::DWBLocalPlanner")).value - goal_align_planner = self.get_parameter_or("goal_align_planner",Parameter('str', Parameter.Type.STRING, "dwb_core::DWBLocalPlanner")).value - - self.ACTIONS.setPlanner(row_traversal_planner, self.ACTIONS.ROW_TRAVERSAL) - self.ACTIONS.setPlanner(default_planner, self.ACTIONS.NAVIGATE_TO_POSE) - self.ACTIONS.setPlanner(default_planner, self.ACTIONS.NAVIGATE_THROUGH_POSES) - self.ACTIONS.setPlanner(goal_align_planner, self.ACTIONS.GOAL_ALIGN) - - row_traversal_planner_xy_goal_tolerance = self.get_parameter_or("row_traversal_planner_xy_goal_tolerance", Parameter('double', Parameter.Type.DOUBLE, 0.1)).value - row_traversal_planner_yaw_goal_tolerance = self.get_parameter_or("row_traversal_planner_yaw_goal_tolerance", Parameter('double', Parameter.Type.DOUBLE, 0.1)).value - - default_planner_xy_goal_tolerance = self.get_parameter_or("default_planner_xy_goal_tolerance", Parameter('double', Parameter.Type.DOUBLE, 0.5)).value - default_planner_xy_yaw_goal_tolerance = self.get_parameter_or("default_planner_xy_yaw_goal_tolerance", Parameter('double', Parameter.Type.DOUBLE, 0.3)).value - - goal_align_planner_xy_goal_tolerance = self.get_parameter_or("goal_align_planner_xy_goal_tolerance", Parameter('double', Parameter.Type.DOUBLE, 0.2)).value - goal_align_planner_xy_yaw_goal_tolerance = self.get_parameter_or("goal_align_planner_xy_yaw_goal_tolerance", Parameter('double', Parameter.Type.DOUBLE, 0.1)).value - - - self.ACTIONS.setPlannerParams(row_traversal_planner, row_traversal_planner_xy_goal_tolerance, row_traversal_planner_yaw_goal_tolerance) - self.ACTIONS.setPlannerParams(default_planner, default_planner_xy_goal_tolerance, default_planner_xy_yaw_goal_tolerance) - self.ACTIONS.setPlannerParams(goal_align_planner, goal_align_planner_xy_goal_tolerance, goal_align_planner_xy_yaw_goal_tolerance) - - bt_tree_default = os.path.join(get_package_share_directory('topological_navigation'), 'config', 'bt_tree_default.xml') - bt_tree_goal_align = os.path.join(get_package_share_directory('topological_navigation'), 'config', 'bt_tree_goal_align.xml') - bt_tree_in_row = os.path.join(get_package_share_directory('topological_navigation'), 'config', 'bt_tree_in_row.xml') - - self.bt_trees = {} - self.bt_trees[self.ACTIONS.NAVIGATE_TO_POSE] = self.get_parameter_or(self.ACTIONS.BT_DEFAULT, Parameter('str' - , Parameter.Type.STRING, bt_tree_default)).value - self.bt_trees[self.ACTIONS.ROW_TRAVERSAL] = self.get_parameter_or(self.ACTIONS.BT_IN_ROW - , Parameter('str', Parameter.Type.STRING, bt_tree_in_row)).value - self.bt_trees[self.ACTIONS.GOAL_ALIGN] = self.get_parameter_or(self.ACTIONS.BT_GOAL_ALIGN - , Parameter('str', Parameter.Type.STRING, bt_tree_goal_align)).value - - if self.use_in_row_operation: - bt_tree_in_row_operation = os.path.join(get_package_share_directory('topological_navigation'), 'config', 'bt_tree_in_row_operation.xml') - self.bt_trees[self.ACTIONS.ROW_OPERATION] = self.get_parameter_or(self.ACTIONS.BT_IN_ROW_OPERATION - , Parameter('str', Parameter.Type.STRING, bt_tree_in_row_operation)).value - bt_tree_in_row_recovery = os.path.join(get_package_share_directory('topological_navigation'), 'config', 'bt_tree_in_row_recovery.xml') - self.bt_trees[self.ACTIONS.ROW_RECOVERY] = self.get_parameter_or(self.ACTIONS.BT_IN_ROW_RECOVERY - , Parameter('str', Parameter.Type.STRING, bt_tree_in_row_recovery)).value - - if not self.navigation_action_name in self.navigation_actions: - self.navigation_actions.append(self.navigation_action_name) + def __init__(self, name): + super().__init__(name) + rclpy.get_default_context().on_shutdown(self._on_shutdown) + + # -- State machine ------------------------------------------- + self._sm = NavStateMachine(logger=self.get_logger()) + self._sm.transition(NavState.WAITING_FOR_MAP) + + # -- Runtime flags ------------------------------------------- + self._cancelled = False + self._preempted = False + self._goal_reached = False + self._navigation_activated = False + self._no_orientation = False + self._target = "none" + self._current_target = "none" + + # -- Map data ------------------------------------------------ + self._tmap = None + self._graph = None + self._topol_map = "" + self._global_metric_map_bounds = None + self._global_metric_map = None + + # -- Deferred map update (thread-safe buffering) ------------- + self._pending_map_msg = None + self._map_lock = threading.RLock() + self._map_updated_during_nav = False + + # -- Map-driven config (populated by _load_map_config) ------- + self._map_definitions = {} + self._map_actions = {} + self._bt_files = {} + self._action_clients = {} # name -> {client, action_class, config} + + # -- Localisation -------------------------------------------- + self._current_node = "Unknown" + self._closest_node = "Unknown" + self._closest_edges = ClosestEdges() + + # -- Nav2 infra ---------------------------------------------- + self._nav2_cb_group = MutuallyExclusiveCallbackGroup() + self._goal_handle = None + self._action_status = GoalStatus.STATUS_UNKNOWN + + # -- Stats --------------------------------------------------- + self._stat = None + # (segment, start_time) of a goal currently in flight, used as a + # fallback to still log a row if an exception or shutdown occurs + # before the normal per-edge logging in _execute_segment runs. + self._pending_segment = None + self._stats_db: 'NavStatsDB | None' = None + self._map_hash: str = "" + self._stats_db_errors = 0 + + # -- Parameters ---------------------------------------------- + self._declare_parameters() + self._load_parameters() + self._tf_buffer = Buffer() + self._tf_listener = TransformListener(self._tf_buffer, self) + # Allow route-planning / boundary parameters to be reconfigured at + # runtime (ROS 2 Humble: add_on_set_parameters_callback). + self.add_on_set_parameters_callback(self._parameters_callback) + + # -- QoS ----------------------------------------------------- + self._latch = QoSProfile( + depth=1, + reliability=ReliabilityPolicy.RELIABLE, + history=HistoryPolicy.KEEP_LAST, + durability=DurabilityPolicy.TRANSIENT_LOCAL, + ) - self.latching_qos = QoSProfile(depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL) - self.stat = None - self.stats_pub = self.create_publisher(NavStatistics, "topological_navigation/Statistics", qos_profile=self.latching_qos) - self.route_pub = self.create_publisher(TopologicalRoute, "topological_navigation/Route", qos_profile=self.latching_qos) - self.cur_edge = self.create_publisher(String, "current_edge", qos_profile=self.latching_qos) - self.move_act_pub = self.create_publisher(String, "topological_navigation/move_action_status", qos_profile=self.latching_qos) + self._best = QoSProfile( + reliability=ReliabilityPolicy.BEST_EFFORT, + history=QoSHistoryPolicy.KEEP_LAST, + depth=10, + ) + + # -- Publishers ---------------------------------------------- + self._stats_pub = self.create_publisher( + NavStatistics, "topological_navigation/Statistics", + qos_profile=self._latch, + ) + self._route_pub = self.create_publisher( + TopologicalRoute, "topological_navigation/Route", + qos_profile=self._best, + ) + self._route_timer = self.create_timer(2.0, self._route_pub_cb) + self._stroute = None + self._cur_edge_pub = self.create_publisher( + String, "current_edge", qos_profile=self._latch, + ) + self._move_status_pub = self.create_publisher( + String, "topological_navigation/move_action_status", + qos_profile=self._latch, + ) + self._boundary_pub = self.create_publisher( + PolygonStamped, "/boundary_checker", + qos_profile=self._latch, + ) + self._status_pub = self.create_publisher( + String, "/robot_operation_current_status", + qos_profile=self._latch, + ) + self._map_pub = self.create_publisher( + OccupancyGrid, "/map", qos_profile=self._latch, + ) + self._route_segment_map_pub = self.create_publisher( + OccupancyGrid, "/topo_map_route_segment", qos_profile=self._latch, + ) + + # -- Map subscription (blocking wait) ------------------------ self._map_received = False - self._localization_received = False - - self.callback_group_map = ReentrantCallbackGroup() - self.subs_topmap = self.create_subscription(String, '/topological_map_2', self.MapCallback, callback_group=self.callback_group_map, qos_profile=self.latching_qos) - self.get_logger().info("Navigation waiting for the Topological Map...") - - while rclpy.ok(): + self._loc_received = False + self._cb_map = ReentrantCallbackGroup() + self.create_subscription( + String, '/topological_map_2', self._map_cb, + callback_group=self._cb_map, qos_profile=self._latch, + ) + + self.get_logger().info( + "[INIT] Waiting for topological map on /topological_map_2 ...", + ) + self._publish_status("WAITING_FOR_MAP") + while rclpy.ok() and not self._map_received: rclpy.spin_once(self) - if self._map_received: - self.get_logger().info("Navigation received the Topological Map") - break - - self.edge_action_manager = edge_action_manager_server - self.edge_action_manager.init(self.ACTIONS, self.rsearch, self.update_params_control_server, - self.inrow_step_size, self.inrow_step_intermediate_dis) - - self.edge_reconfigure = self.get_parameter_or("reconfigure_edges", Parameter('bool', Parameter.Type.BOOL, True)).value - self.srv_edge_reconfigure = self.get_parameter_or("reconfigure_edges_srv", Parameter('bool', Parameter.Type.BOOL, False)).value - if self.edge_reconfigure: - self.edgeReconfigureManager = EdgeReconfigureManager() - else: - self.get_logger().warn("Edge Reconfigure Unavailable") - self.get_logger().info("Subscribing to Localisation Topics...") - self.subs_closest_node = self.create_subscription(String, 'closest_node', self.closestNodeCallback, qos_profile=self.latching_qos) - while rclpy.ok(): + self.get_logger().info( + "[INIT] Map '%s' -- %d nodes, %d edges" + % ( + self._topol_map, + self._graph.number_of_nodes(), + self._graph.number_of_edges(), + ), + ) + + # -- Localisation subscription (blocking wait) --------------- + self._sm.transition(NavState.WAITING_FOR_LOCALISATION) + self._publish_status("WAITING_FOR_LOCALISATION") + self.create_subscription( + String, 'closest_node', self._closest_node_cb, + qos_profile=self._latch, + ) + self.get_logger().info("[INIT] Waiting for localisation ...") + while rclpy.ok() and not self._loc_received: rclpy.spin_once(self) - if self._localization_received: - self.get_logger().info("Navigation received the localisation info") - break - - self.subs_closest_edges = self.create_subscription(ClosestEdges, 'closest_edges', self.closestEdgesCallback, qos_profile=self.latching_qos) - self.subs_current_node = self.create_subscription(String, 'current_node', self.currentNodeCallback, qos_profile=self.latching_qos) - - self.get_logger().info("...done") - + self.get_logger().info( + "[INIT] Localisation OK. Closest: %s" % self._closest_node, + ) + + self.create_subscription( + ClosestEdges, 'closest_edges', self._closest_edges_cb, + qos_profile=self._latch, + ) + self.create_subscription( + String, 'current_node', self._current_node_cb, + qos_profile=self._latch, + ) + + # -- Action servers ------------------------------------------ + self._sm.transition(NavState.READY) + self._publish_status("READY") + + cb_goto = ReentrantCallbackGroup() + cb_policy = ReentrantCallbackGroup() + + self._as_goto = ActionServer( + self, GotoNode, "/" + name, + execute_callback=self._exec_goto_cb, + cancel_callback=self._cancel_goto_cb, + callback_group=cb_goto, + ) + + self._as_policy = ActionServer( + self, ExecutePolicyMode, + "/topological_navigation/execute_policy_mode", + execute_callback=self._exec_policy_cb, + cancel_callback=self._cancel_policy_cb, + callback_group=cb_policy, + ) + + # -- Goal checker service clients -------------------------- + gc_node = _normalise_node_name(self._goal_checker_node) + self._set_params_client = self.create_client( + SetParameters, + '/%s/set_parameters' % gc_node, + callback_group=ReentrantCallbackGroup(), + ) + self._get_params_client = self.create_client( + GetParameters, + '/%s/get_parameters' % gc_node, + callback_group=ReentrantCallbackGroup(), + ) + # Parameter clients for arbitrary nodes targeted by edge/action + # 'set_ros_params', created on demand: {node: (set, get)}. + self._param_clients = {} + + self.get_logger().info( + "[INIT] Navigation server READY ('%s', algo=%s, weight=%s)" + % (self._topol_map, self._route_algorithm, self._route_weight), + ) + + # ================================================================= + # Parameters + # ================================================================= + + def _declare_parameters(self): + """Declare all ROS 2 parameters.""" + for name, ptype in [ + ('max_dist_to_closest_edge', Parameter.Type.DOUBLE), + ('coarse_white_extension_m', Parameter.Type.DOUBLE), + ('route_white_extension_m', Parameter.Type.DOUBLE), + ('metric_map_resolution', Parameter.Type.DOUBLE), + ('route_segment_resolution', Parameter.Type.DOUBLE), + ('route_segment_border_width', Parameter.Type.DOUBLE), + ('route_segment_padding', Parameter.Type.DOUBLE), + ('route_segment_settle_time', Parameter.Type.DOUBLE), + ('base_frame', Parameter.Type.STRING), + # NetworkX path optimisation + ('route_algorithm', Parameter.Type.STRING), + ('route_weight_attr', Parameter.Type.STRING), + # Nav2 goal checker + ('goal_checker_node', Parameter.Type.STRING), + ('xy_tolerance_param', Parameter.Type.STRING), + ('yaw_tolerance_param', Parameter.Type.STRING), + # Statistics persistence + ('stats_db_path', Parameter.Type.STRING), + ]: + self.declare_parameter(name, ptype) + + def _load_parameters(self): + """Read parameter values with sensible defaults.""" + + def _p(name, ptype, default): + return self.get_parameter_or( + name, Parameter('_', ptype, default), + ).value + + self._max_dist_to_closest_edge = _p( + 'max_dist_to_closest_edge', Parameter.Type.DOUBLE, 1.0, + ) + self._coarse_white_extension_m = _p( + 'coarse_white_extension_m', Parameter.Type.DOUBLE, 4.0, + ) + self._route_white_extension_m = _p( + 'route_white_extension_m', Parameter.Type.DOUBLE, 2.0, + ) + self._metric_map_resolution = _p( + 'metric_map_resolution', Parameter.Type.DOUBLE, 1.0, + ) + self._route_segment_resolution = _p( + 'route_segment_resolution', Parameter.Type.DOUBLE, 0.05, + ) + self._route_segment_border_width = _p( + 'route_segment_border_width', Parameter.Type.DOUBLE, 0.25, + ) + self._route_segment_padding = _p( + 'route_segment_padding', Parameter.Type.DOUBLE, 0.0, + ) + self._route_segment_settle_time = _p( + 'route_segment_settle_time', Parameter.Type.DOUBLE, 0.0, + ) + self._base_frame = _p( + 'base_frame', Parameter.Type.STRING, 'base_link', + ) + # 'astar' (with Euclidean heuristic) or 'dijkstra' + self._route_algorithm = _p( + 'route_algorithm', Parameter.Type.STRING, 'astar', + ) + # The edge attribute used as the cost for path planning + self._route_weight = _p( + 'route_weight_attr', Parameter.Type.STRING, 'weight', + ) + # Nav2 goal checker node and parameter names + self._goal_checker_node = _p( + 'goal_checker_node', Parameter.Type.STRING, + 'controller_server', + ) + self._xy_tolerance_param = _p( + 'xy_tolerance_param', Parameter.Type.STRING, + 'goal_checker.xy_goal_tolerance', + ) + self._yaw_tolerance_param = _p( + 'yaw_tolerance_param', Parameter.Type.STRING, + 'goal_checker.yaw_goal_tolerance', + ) + # Stats persistence: empty string means disabled + self._stats_db_path = _p( + 'stats_db_path', Parameter.Type.STRING, '', + ) + self._init_stats_db() + + def _init_stats_db(self): + """Open (or create) the SQLite stats database, if a path is configured.""" + if not self._stats_db_path: + self._stats_db = None + return try: - self.get_logger().info("Waiting for restrictions...") - self.evaluate_edge_srv = self.create_client(EvaluateEdge, '/restrictions_manager/evaluate_edge') - if not self.evaluate_edge_srv.wait_for_service(timeout_sec=3.0): - self.get_logger().warning('/restrictions_manager/evaluate_edge service not available') - self.get_logger().warning("Restrictions Unavailable") - self.using_restrictions = False - else: - self.evaluate_node_srv = self.create_client(EvaluateNode, '/restrictions_manager/evaluate_node') - self.get_logger().info("Restrictions Available") - self.using_restrictions = True - except Exception as e: - self.get_logger().error("Error while calling servie /restrictions_manager/evaluate_edge {}".format(e)) - - - # this keeps the runtime state of the fail policies that are currently in execution - self.executing_fail_policy = {} - self.callback_group_gotonode = ReentrantCallbackGroup() - self.callback_group_policy = ReentrantCallbackGroup() - - # Creating Action Server for navigation - self.get_logger().info("Creating GO-TO-NODE action server...") - self._as = ActionServer(self, GotoNode, "/" + name, - execute_callback=self.executeCallback, - cancel_callback=self.preemptCallback, - callback_group=self.callback_group_gotonode) - self._as_action_feedback_pub = self.create_publisher(GotoNodeFeedback, - "/" + name + '/feedback', - qos_profile=self.latching_qos) - self.get_logger().info("...done") - - # Creating Action Server for execute policy - self.get_logger().info("Creating EXECUTE POLICY MODE action server...") - self._as_exec_policy = ActionServer(self, ExecutePolicyMode, "/topological_navigation/execute_policy_mode", - execute_callback=self.executeCallbackexecpolicy, - cancel_callback=self.preemptCallbackexecpolicy, - callback_group=self.callback_group_policy) - self._as_exec_policy_action_feedback_pub = self.create_publisher(ExecutePolicyModeFeedback, - 'topological_navigation/execute_policy_mode/feedback', - qos_profile=self.latching_qos) - - - self.get_logger().info("...done") - self.get_logger().info("All Done.") - - - def _on_node_shutdown(self): - if self.navigation_activated: - self.preempted = True - self.cancel_current_action(timeout_secs=2) - - def init_reconfigure(self): - self.nav_planner = self.get_parameter_or("nav_planner", Parameter('str', Parameter.Type.STRING, "dwb_core::DWBLocalPlanner")).value - planner = self.nav_planner.split("/")[-1] - if not planner in self.ACTIONS.planner_with_goal_checker_config: - self.ACTIONS.planner_with_goal_checker_config[planner] = {} - self.get_logger().info("Creating reconfigure client for {}".format(self.nav_planner)) - self.init_dynparams = self.update_params_control_server.get_params() - + self._stats_db = NavStatsDB(self._stats_db_path) + self.get_logger().info( + "[STATS] Database opened: %s" % self._stats_db_path, + ) + except Exception as exc: + self.get_logger().error( + "[STATS] Cannot open database '%s': %s" + % (self._stats_db_path, exc), + ) + self._stats_db = None + + def _parameters_callback(self, params): + """Apply runtime parameter updates (ROS 2 Humble compatible). + + Route-planning and boundary parameters are read fresh on every + navigation request, so updating the cached attributes here takes + effect on the *next* planned route without requiring a restart. + Invalid values are rejected so the running configuration stays + consistent. + """ + valid_algorithms = ('astar', 'dijkstra') + + for p in params: + name = p.name + + if name == 'route_algorithm': + if p.type_ != Parameter.Type.STRING: + return SetParametersResult( + successful=False, + reason='route_algorithm must be a string', + ) + if p.value not in valid_algorithms: + return SetParametersResult( + successful=False, + reason="route_algorithm must be one of %s" + % (valid_algorithms,), + ) + self._route_algorithm = p.value + + elif name == 'route_weight_attr': + if p.type_ != Parameter.Type.STRING or not p.value: + return SetParametersResult( + successful=False, + reason='route_weight_attr must be a non-empty string', + ) + self._route_weight = p.value + + elif name == 'max_dist_to_closest_edge': + if p.type_ not in ( + Parameter.Type.DOUBLE, Parameter.Type.INTEGER, + ): + return SetParametersResult( + successful=False, + reason='max_dist_to_closest_edge must be a number', + ) + if float(p.value) < 0.0: + return SetParametersResult( + successful=False, + reason='max_dist_to_closest_edge must be >= 0', + ) + self._max_dist_to_closest_edge = float(p.value) + + elif name == 'coarse_white_extension_m': + if p.type_ not in ( + Parameter.Type.DOUBLE, Parameter.Type.INTEGER, + ): + return SetParametersResult( + successful=False, + reason='coarse_white_extension_m must be a number', + ) + if float(p.value) < 0.0: + return SetParametersResult( + successful=False, + reason='coarse_white_extension_m must be >= 0', + ) + self._coarse_white_extension_m = float(p.value) + + elif name == 'route_white_extension_m': + if p.type_ not in ( + Parameter.Type.DOUBLE, Parameter.Type.INTEGER, + ): + return SetParametersResult( + successful=False, + reason='route_white_extension_m must be a number', + ) + if float(p.value) < 0.0: + return SetParametersResult( + successful=False, + reason='route_white_extension_m must be >= 0', + ) + self._route_white_extension_m = float(p.value) + + elif name == 'metric_map_resolution': + if p.type_ not in ( + Parameter.Type.DOUBLE, Parameter.Type.INTEGER, + ): + return SetParametersResult( + successful=False, + reason='metric_map_resolution must be a number', + ) + if float(p.value) <= 0.0: + return SetParametersResult( + successful=False, + reason='metric_map_resolution must be > 0', + ) + self._metric_map_resolution = float(p.value) + + elif name == 'route_segment_resolution': + if p.type_ not in ( + Parameter.Type.DOUBLE, Parameter.Type.INTEGER, + ): + return SetParametersResult( + successful=False, + reason='route_segment_resolution must be a number', + ) + if float(p.value) <= 0.0: + return SetParametersResult( + successful=False, + reason='route_segment_resolution must be > 0', + ) + self._route_segment_resolution = float(p.value) + + elif name == 'route_segment_border_width': + if p.type_ not in ( + Parameter.Type.DOUBLE, Parameter.Type.INTEGER, + ): + return SetParametersResult( + successful=False, + reason='route_segment_border_width must be a number', + ) + if float(p.value) < 0.0: + return SetParametersResult( + successful=False, + reason='route_segment_border_width must be >= 0', + ) + self._route_segment_border_width = float(p.value) + + elif name == 'route_segment_padding': + if p.type_ not in ( + Parameter.Type.DOUBLE, Parameter.Type.INTEGER, + ): + return SetParametersResult( + successful=False, + reason='route_segment_padding must be a number', + ) + if float(p.value) < 0.0: + return SetParametersResult( + successful=False, + reason='route_segment_padding must be >= 0', + ) + self._route_segment_padding = float(p.value) - def reconf_movebase(self, cedg, cnode, intermediate): - if cnode["node"]["properties"]["xy_goal_tolerance"] <= 0.1: - cxygtol = 0.1 - else: - cxygtol = cnode["node"]["properties"]["xy_goal_tolerance"] - if not intermediate: - if cnode["node"]["properties"]["yaw_goal_tolerance"] <= 0.087266: - cytol = 0.087266 else: - cytol = cnode["node"]["properties"]["yaw_goal_tolerance"] - else: - cytol = 6.283 + # Other parameters are start-up only; ignore live changes. + continue - params = {"FollowPath.yaw_goal_tolerance": cytol, "FollowPath.xy_goal_tolerance": cxygtol} - self.get_logger().info("Reconfiguring %s with %s" % (self.nav_planner, params)) - print("Intermediate: {}".format(intermediate)) - self.update_params_control_server.set_params(params) + self.get_logger().info( + "[PARAM] %s -> %s" % (name, p.value), + ) - def reset_reconf(self): - self.update_params_control_server.set_params(self.init_dynparams) + return SetParametersResult(successful=True) - def MapCallback(self, msg): - """ - This Function updates the Topological Map everytime it is called - """ - # self.lnodes = json.loads(msg.data) - self.lnodes = yaml.load( msg.data, Loader=CustomSafeLoader ) - self.topol_map = self.lnodes["pointset"] - self.rsearch = TopologicalRouteSearch2(self.lnodes) - self.route_checker = RouteChecker(self.lnodes) - self.make_navigation_edge() - self._map_received = True - - - def make_navigation_edge(self): - - self.navigation_action_edge = {} - self.navigation_action_edge["action"] = self.navigation_action_name - self.navigation_action_edge["edge_id"] = "navigation_action_edge" - navigation_action_goal = {} - if not navigation_action_goal: - for node in self.lnodes["nodes"]: - for edge in node["node"]["edges"]: - if edge["action"] == self.navigation_action_name: - navigation_action_goal["action_type"] = edge["action_type"] - navigation_action_goal["goal"] = edge["goal"] - break - else: - continue - break - if not navigation_action_goal: - navigation_action_goal["action_type"] = "geometry_msgs/PoseStamped" - navigation_action_goal["goal"] = {} - navigation_action_goal["goal"]["target_pose"] = {} - navigation_action_goal["goal"]["target_pose"]["pose"] = "$node.pose" - navigation_action_goal["goal"]["target_pose"]["header"] = {} - navigation_action_goal["goal"]["target_pose"]["header"]["frame_id"] = "$node.parent_frame" + # ================================================================= + # Map-driven configuration + # ================================================================= - self.navigation_action_edge["action_type"] = navigation_action_goal["action_type"] - self.navigation_action_edge["goal"] = navigation_action_goal["goal"] - self.get_logger().info("Move Base Goal set to {}".format(navigation_action_goal["action_type"])) + def _load_action_type(self, type_str): + # Example: nav2_msgs.action.NavigateThroughPoses + module_name, class_name = type_str.rsplit('.', 1) + module = importlib.import_module(module_name) + return getattr(module, class_name) + + def _load_map_config(self): + """Extract ``definitions`` and ``actions`` from the topomap. - def executeCallback(self, goal): + 1. Writes each BT definition to a temp file. + 2. Resolves ``${definitions.}`` template refs to paths. + 3. Creates ``ActionClient`` instances for unique servers. """ - This Functions is called when the topo nav Action Server is called + self._map_definitions = self._tmap.get('definitions', {}) + self._map_actions = self._tmap.get('actions', {}) + self._bt_files = {} + self._action_clients = {} + + if not self._map_actions: + self.get_logger().warning( + "[MAP] No 'actions' section -- behaviour undefined", + ) + return + + # -- Write BT definitions to temp files ---------------------- + bt_dir = os.path.join(tempfile.gettempdir(), 'topo_nav_bt') + os.makedirs(bt_dir, exist_ok=True) + + for name, content in self._map_definitions.items(): + path = os.path.join(bt_dir, '%s.xml' % name) + with open(path, 'w') as fh: + fh.write(content) + self._bt_files[name] = path + self.get_logger().info( + "[MAP] BT '%s' -> %s" % (name, path), + ) + + # -- Resolve ${definitions.} refs ----------------------- + for act_name, act_cfg in self._map_actions.items(): + tpl = act_cfg.get('action_goal_template', {}) + bt_ref = tpl.get('behavior_tree', '') + if ( + isinstance(bt_ref, str) + and bt_ref.startswith('${definitions.') + and bt_ref.endswith('}') + ): + key = bt_ref[len('${definitions.'):-1] + if key in self._bt_files: + tpl['behavior_tree'] = self._bt_files[key] + else: + self.get_logger().warning( + "[MAP] '%s' ref not found for action '%s'" + % (key, act_name), + ) + + self.get_logger().info( + "[MAP] Action '%s': type=%s server=%s composable=%s" + % ( + act_name, + act_cfg.get('action_type', '?'), + act_cfg.get('action_server', '?'), + act_cfg.get('composable', True), + ), + ) + + # -- Create action clients ----------------------------------- + self._create_action_clients() + + def _create_action_clients(self): + """Create ``ActionClient`` instances from the map ``actions``. + + Clients are shared when multiple actions target the same + ``action_server``. """ - self.get_logger().info("\n####################################################################################################") - self.get_logger().info("Processing GO-TO-NODE goal (No Orientation = {})".format(goal.request.no_orientation)) - - status = self.edge_action_manager.get_state() - - can_start = False - if self.cancel_current_action(timeout_secs=10): - # we successfully stopped the previous action, claim the title to activate navigation - self.navigation_activated = True - can_start = True - if can_start: - self.cancelled = False - self.preempted = False - self.final_goal = False - self.no_orientation = goal.request.no_orientation - self.executing_fail_policy = {} - self._feedback.route = "Starting..." - self._as_action_feedback_pub.publish(self._feedback) - self.navigate(goal.request.target) - else: - self.get_logger().warning("Could not cancel current navigation action, GO-TO-NODE goal aborted") - - self.navigation_activated = False - nav_current_state = self.edge_action_manager.get_state() - if (nav_current_state == GoalStatus.STATUS_SUCCEEDED): - goal.succeed() - else: - goal.abort() + created = {} # action_server -> (client, action_class) + self._action_clients = {} - self.get_logger().warning("Done processing the nav action GO-TO-NODE....") - result = GotoNode.Result() - result.success = self._result.success - - return result - - def executeCallbackexecpolicy(self, goal): - """ - This Function is called when the execute policy Action Server is called - """ - self.get_logger().info("\n####################################################################################################") - self.get_logger().info("Processing EXECUTE-POLICY-MODE goal") - can_start = False - if self.cancel_current_action(timeout_secs=10): - # we successfully stopped the previous action, claim the title to activate navigation - self.navigation_activated = True - can_start = True - - if can_start: - - self.cancelled = False - self.preempted = False - self.final_goal = False - - self.max_dist_to_closest_edge = self.get_parameter_or("max_dist_to_closest_edge", Parameter('double', Parameter.Type.DOUBLE, 1.0)).value - self.nav_from_closest_edge = False if self.closest_edges.distances[0] > self.max_dist_to_closest_edge or self.current_node != "none" else True - - route = goal.request.route - valid_route = self.route_checker.check_route(route) - - if valid_route and (route.source[0] == self.current_node or route.source[0] == self.closest_node): - final_edge = get_edge_from_id_tmap2(self.lnodes, route.source[-1], route.edge_id[-1]) - target = final_edge["node"] - route = self.enforce_navigable_route(route, target) - self.get_logger().warn("[executeCallbackexecpolicy] - publishing route") - self.publish_route(route, target) - result = self.execute_policy(route, target) - else: - result = False - self.cancelled = True - self.get_logger().error("Invalid route in execute policy mode goal") + for act_name, act_cfg in self._map_actions.items(): + type_str = act_cfg.get('action_type', '') + server = act_cfg.get('action_server', '') - if not self.cancelled and not self.preempted: - self._result_exec_policy.success = result + # Dynamically import the action type (e.g. nav2_msgs.action.NavigateToPose) + try: + action_class = self._load_action_type(type_str) + except Exception as exc: + self.get_logger().warning( + "[MAP] Cannot load action_type '%s' for '%s': %s" + % (type_str, act_name, exc), + ) + continue + + if server in created: + client, existing = created[server] + if existing != action_class: + self.get_logger().error( + "[MAP] Conflicting types on '%s': %s vs %s" + % (server, existing.__name__, action_class.__name__), + ) + continue else: - if not self.preempted: - self._result_exec_policy.success = result - else: - self._result_exec_policy.success = False - else: - self.get_logger().warning("Could not cancel current navigation action, EXECUTE POLICY MODE goal aborted.") - - self.navigation_activated = False - goal.succeed() - self.get_logger().warning("Done processing the nav action EXECUTE POLICY MODE....") - result = ExecutePolicyMode.Result() - result.success = self._result_exec_policy.success - return result - - - def preemptCallback(self, goal_handle): - self.get_logger().warning("Preempting GO-TO-NODE goal") - self.preempted = True - self.cancel_current_action(timeout_secs=2) - - - def preemptCallbackexecpolicy(self, goal_handle): - self.get_logger().warning("Preempting EXECUTE POLICY MODE goal") - self.preempted = True - self.cancel_current_action(timeout_secs=2) - - - def closestNodeCallback(self, msg): - self._localization_received = True - self.closest_node = msg.data - - - def closestEdgesCallback(self, msg): - self.closest_edges = msg - - - def currentNodeCallback(self, msg): - if self.current_node != msg.data: # is there any change on this topic? - self.current_node = msg.data # we are at this new node - if msg.data != "none": # are we at a node? - self.get_logger().info("New node reached: {}".format(self.current_node)) - if self.navigation_activated: # is the action server active? - if self.stat: - self.stat.set_at_node() - # if the robot reached and intermediate node and the next action is move base goal has been reached - if ( - self.current_node == self.current_target - and self._target != self.current_target - and self.next_action in self.navigation_actions - and self.current_action in self.navigation_actions - and self.fluid_navigation - ): - self.get_logger().info("Intermediate node reached: {}".format(self.current_node)) - self.goal_reached = True + client = ActionClient( + self, action_class, server, + callback_group=self._nav2_cb_group, + ) + created[server] = (client, action_class) + self.get_logger().info( + "[MAP] Client: %s -> %s" + % (action_class.__name__, server), + ) + + self._action_clients[act_name] = { + 'client': client, + 'action_class': action_class, + 'config': act_cfg, + } - def followRoute(self, route, target, exec_policy): + # ================================================================= + # Lifecycle + # ================================================================= + + def _on_shutdown(self): + self.get_logger().info("[SHUTDOWN] Tearing down") + if self._navigation_activated: + self._preempted = True + self._cancel_nav2_goal(timeout_sec=2.0) + if self._pending_segment is not None: + # Flush the in-flight segment so it isn't silently dropped. + seg, start_time = self._pending_segment + self._log_segment_edges( + seg, False, "shutdown", start_time, datetime.now(), + ) + self._pending_segment = None + if self._stats_db is not None: + self._stats_db.close() + self._stats_db = None + + # ================================================================= + # Topic callbacks + # ================================================================= + + def _map_cb(self, msg): + """``/topological_map_2`` callback -- buffer map update. + + The first map is applied immediately (needed for init). All + subsequent maps received during active navigation are buffered + and applied at safe points between route segments. """ - This function follows the chosen route to reach the goal. - """ - self.navigation_activated = True - - nnodes = len(route.source) - Orig = route.source[0] - Targ = target - self._target = Targ - - self.init_reconfigure() - self.get_logger().info(" {} Nodes on route".format(nnodes)) - - inc = 1 - rindex = 0 - nav_ok = True - recovering = False - replanned = False - self.fluid_navigation = True - - o_node = self.rsearch.get_node_from_tmap2(Orig) - edge_from_id = get_edge_from_id_tmap2(self.lnodes, route.source[0], route.edge_id[0]) - if edge_from_id: - a = edge_from_id["action"] - self.get_logger().info("First action: {}".format(a)) + with self._map_lock: + self._pending_map_msg = msg + if not self._map_received: + # First map: apply immediately so __init__ can proceed. + self._apply_pending_map() + return + + if self._navigation_activated: + self.get_logger().info( + "[MAP] Update buffered (navigation active)", + ) else: - self.get_logger().error("Failed to get edge from id {}. Invalid route".format(route.edge_id[0])) - return False, inc - - if not self.nav_from_closest_edge: - # If the robot is not on a node or the first action is not move base type - # navigate to closest node waypoint (only when first action is not move base) - if a not in self.navigation_actions: - self.get_logger().info("The action of the first edge in the route is not a navigate to pose action") - self.get_logger().info("Current node is {}".format(self.current_node)) - - if self.current_node == "none" and a not in self.navigation_actions: - self.next_action = a - self.get_logger().info("Do {} to origin {}".format(self.navigation_action_name, o_node["node"]["name"])) - - # 5 degrees tolerance - params = {"yaw_goal_tolerance": 0.087266} - self.update_params_control_server.set_params(params) - - self.current_target = Orig - nav_ok, inc = self.execute_action(self.navigation_action_edge, o_node) - self.get_logger().info("Navigation Finished Successfully") if nav_ok else self.get_logger().warning("Navigation Failed") - - elif a not in self.navigation_actions: - navigation_action_act = False - for i in o_node["node"]["edges"]: - # Check if there is a navigation action in the edages of this node - # if not is dangerous to move - if i["action"] in self.navigation_actions: - navigation_action_act = True - - if not navigation_action_act: - self.get_logger().warning("Could not find a move base action in the edges of origin {}. Unsafe to move".format(o_node["node"]["name"])) - self.get_logger().info("Action not taken, outputing success") - nav_ok = True - inc = 0 - else: - self.get_logger().info("Getting to the exact pose of origin {}".format(o_node["node"]["name"])) - self.current_target = Orig - nav_ok, inc = self.execute_action(self.navigation_action_edge, o_node) - self.get_logger().info("Navigation Finished Successfully") if nav_ok else self.get_logger().warning("Navigation Failed") - - while rindex < (len(route.edge_id)) and not self.cancelled and (nav_ok or recovering): - cedg = get_edge_from_id_tmap2(self.lnodes, route.source[rindex], route.edge_id[rindex]) - a = cedg["action"] - - if rindex < (len(route.edge_id) - 1): - nedge = get_edge_from_id_tmap2(self.lnodes, route.source[rindex + 1], route.edge_id[rindex + 1]) - a1 = nedge["action"] - self.fluid_navigation = nedge["fluid_navigation"] - else: - nedge = None - a1 = "none" - self.fluid_navigation = False - self.final_goal = True - - self.current_action = a - self.next_action = a1 - - self.get_logger().info("From {} do ({}) to {}".format(route.source[rindex], a, cedg["node"])) - - current_edge = "%s--%s" % (cedg["edge_id"], self.topol_map) - self.get_logger().info("Current edge: {}".format(current_edge)) - msg = String() - msg.data = current_edge - self.cur_edge.publish(msg) - - if not exec_policy: - self._feedback.route = "%s to %s using %s" % (route.source[rindex], cedg["node"], a) - self._as_action_feedback_pub.publish(self._feedback) - else: - self.publish_feedback_exec_policy() - - cnode = self.rsearch.get_node_from_tmap2(cedg["node"]) - onode = self.rsearch.get_node_from_tmap2(route.source[rindex]) - - # do not care for the orientation of the waypoint if is not the last waypoint AND - # the current and following action are navigation or human_aware_navigation - # and when the fuild_navigation is true - if rindex < len(route.edge_id) - 1 and a1 in self.navigation_actions and a in self.navigation_actions and self.fluid_navigation: - self.reconf_movebase(cedg, cnode, True) - else: - if self.no_orientation: - self.reconf_movebase(cedg, cnode, True) - else: - self.reconf_movebase(cedg, cnode, False) + # Not navigating -- safe to apply immediately. + self._apply_pending_map() - self.current_target = cedg["node"] + def _apply_pending_map(self): + """Apply a buffered map update. Thread-safe. - self.stat = nav_stats(route.source[rindex], cedg["node"], self.topol_map, cedg["edge_id"]) - dt_text = self.stat.get_start_time_str() + Returns ``True`` if a new map was applied, ``False`` if there + was nothing pending or the update failed. + """ + with self._map_lock: + if self._pending_map_msg is None: + return False + msg = self._pending_map_msg + self._pending_map_msg = None - self.edge_reconf_start(cedg) - if exec_policy: - nav_ok, inc = self.execute_action(cedg, cnode, onode) - else: - nav_ok, inc, recovering, route, replanned = self.execute_action_fail_recovery(cedg, cnode, route, rindex, onode, target) - self.edge_reconf_end() - - params = {"yaw_goal_tolerance": 0.087266, "xy_goal_tolerance": 0.1} - self.update_params_control_server.set_params(params) - - not_fatal = nav_ok - if self.cancelled: - nav_ok = True - if self.preempted: - not_fatal = False - nav_ok = False - - - self.stat.set_ended(self.current_node) - dt_text=self.stat.get_finish_time_str() - operation_time = self.stat.operation_time - time_to_wp = self.stat.time_to_wp - - if nav_ok: - self.stat.status = "success" - self.get_logger().info("Navigation Finished on {} ({}/{})".format(dt_text, operation_time, time_to_wp)) - else: - if not_fatal: - self.get_logger().warning("Navigation Failed on {} ({}/{})".format(dt_text, operation_time, time_to_wp)) - self.stat.status = "failed" + try: + tmap = yaml.load(msg.data, Loader=_FloatSafeLoader) + graph = build_graph_from_tmap( + tmap, logger=self.get_logger(), + ) + if graph is None: + self.get_logger().error("[MAP] Graph build failed") + return False + + self._tmap = tmap + self._graph = graph + self._topol_map = tmap.get("pointset", "unknown") + self._map_hash = compute_map_hash(msg.data) + self._map_received = True + self._load_map_config() + self._publish_topological_metric_map() + + # Persist the map to the stats database so that every traversal + # recorded for this map version has the map available for lookup. + if self._stats_db is not None: + try: + self._stats_db.store_map(msg.data) + except Exception as exc: + self.get_logger().error( + "[STATS] Failed to store map '%s': %s" + % (self._topol_map, exc), + ) + + self.get_logger().info( + "[MAP] Applied update '%s' -- %d nodes, %d edges" + % ( + self._topol_map, + graph.number_of_nodes(), + graph.number_of_edges(), + ), + ) + return True + except Exception as exc: + self.get_logger().error("[MAP] Apply error: %s" % exc) + return False + + def _validate_remaining_route(self, route_nodes, start_idx): + """Check that remaining nodes and edges still exist in the graph. + + Parameters + ---------- + route_nodes : list[str] + Full ordered list of node names in the route. + start_idx : int + Index into *route_nodes* of the segment about to execute + (i.e. remaining = route_nodes[start_idx:]). + + Returns + ------- + bool + ``True`` if every remaining node exists in ``self._graph`` + and every consecutive pair is connected by an edge. + """ + remaining = route_nodes[start_idx:] + for node_name in remaining: + if node_name not in self._graph: + self.get_logger().warning( + "[MAP-CHECK] Node '%s' no longer in map" + % node_name, + ) + return False + + for i in range(len(remaining) - 1): + src, tgt = remaining[i], remaining[i + 1] + if not self._graph.has_edge(src, tgt): + self.get_logger().warning( + "[MAP-CHECK] Edge '%s' -> '%s' no longer in map" + % (src, tgt), + ) + return False + + return True + + def _closest_node_cb(self, msg): + self._loc_received = True + self._closest_node = msg.data + + def _closest_edges_cb(self, msg): + self._closest_edges = msg + + def _current_node_cb(self, msg): + if self._current_node != msg.data: + self._current_node = msg.data + if msg.data != "none": + self.get_logger().info( + "[LOC] Entered node: %s" % self._current_node, + ) + if ( + self._navigation_activated + and self._current_node == self._current_target + ): + self.get_logger().info( + "[LOC] Reached target: %s" % self._current_target, + ) + self._goal_reached = True + + def _route_pub_cb(self): + if self._stroute and self._stroute.nodes: + self._route_pub.publish(self._stroute) + + def _raster_to_occupancy_grid(self, raster, frame_id): + """Convert a rasterized map image to an OccupancyGrid message.""" + msg = OccupancyGrid() + msg.header.stamp = self.get_clock().now().to_msg() + msg.header.frame_id = frame_id + msg.info.resolution = float(raster.resolution) + msg.info.width = int(raster.image.width) + msg.info.height = int(raster.image.height) + msg.info.origin.position.x = float(raster.origin[0]) + msg.info.origin.position.y = float(raster.origin[1]) + msg.info.origin.position.z = 0.0 + msg.info.origin.orientation.x = 0.0 + msg.info.origin.orientation.y = 0.0 + msg.info.origin.orientation.z = 0.0 + msg.info.origin.orientation.w = 1.0 + + pixels = raster.image.load() + width = raster.image.width + height = raster.image.height + data = [] + + # OccupancyGrid data is ordered from map origin (bottom-left). + for py in range(height - 1, -1, -1): + for px in range(width): + value = int(pixels[px, py]) + if value == UNKNOWN_VALUE: + data.append(-1) + elif value == FREE_VALUE: + data.append(0) + elif value == OCCUPIED_VALUE: + data.append(100) else: - self.get_logger().warning("Fatal Fail on {} ({}/{})".format(dt_text, operation_time, time_to_wp)) - self.stat.status = "fatal" - - self.publish_stats() + data.append(-1) - current_edge = "none" - msg = String() - msg.data = current_edge - self.cur_edge.publish(msg) + msg.data = data + return msg - self.current_action = "none" - self.next_action = "none" - - if not replanned: - rindex = rindex + 1 + def _publish_topological_metric_map(self): + """Publish a coarse metric occupancy map for the full topological map.""" + self._global_metric_map_bounds = None + self._global_metric_map = None + if not self._tmap: + return - self.reset_reconf() + try: + geometry = geometry_from_tmap(self._tmap, apply_transform=True) + full_corridor = float(self._coarse_white_extension_m) + raster = rasterize_geometry( + geometry, + white_extension_m=full_corridor, + border_width_m=float(self._route_segment_border_width), + resolution=float(self._metric_map_resolution), + padding_m=full_corridor, + include_node_polygons=False, + ) + metric_map = self._raster_to_occupancy_grid( + raster, geometry.frame_id, + ) + self._global_metric_map = metric_map + self._map_pub.publish(metric_map) + self._global_metric_map_bounds = ( + float(metric_map.info.origin.position.x), + float(metric_map.info.origin.position.y), + float(metric_map.info.origin.position.x) + + (float(metric_map.info.width) * float(metric_map.info.resolution)), + float(metric_map.info.origin.position.y) + + (float(metric_map.info.height) * float(metric_map.info.resolution)), + ) + self.get_logger().info( + "[MAP] Published /map (%dx%d, %.3f m/px)" + % ( + raster.image.width, + raster.image.height, + self._metric_map_resolution, + ), + ) + except Exception as exc: + self.get_logger().error( + "[MAP] Failed to publish /map occupancy grid: %s" % exc, + ) + + def _publish_route_segment_metric_map(self, route_edges): + """Publish a fine map whose first corridor starts at the robot.""" + if not route_edges or not self._tmap: + return False - self.navigation_activated = False + try: + geometry = geometry_from_tmap(self._tmap, apply_transform=True) + route_start = self._robot_position_in_frame(geometry.frame_id) + if not self._ensure_robot_within_main_map( + geometry.frame_id, route_start, + ): + return False + specs = route_specs_from_edge_data( + route_edges, + default_left_m=float(self._route_white_extension_m), + default_right_m=float(self._route_white_extension_m), + ) + raster = rasterize_route_geometry( + geometry, + specs, + route_start=route_start, + border_width_m=float(self._route_segment_border_width), + resolution=float(self._route_segment_resolution), + padding_m=float(self._route_segment_padding), + unknown_value=FREE_VALUE, + ) + self._route_segment_map_pub.publish( + self._raster_to_occupancy_grid(raster, geometry.frame_id), + ) + self.get_logger().info( + "[MAP] Published /topo_map_route_segment (%dx%d, %.3f m/px)" + % ( + raster.image.width, + raster.image.height, + self._route_segment_resolution, + ), + ) + return True + except Exception as exc: + self.get_logger().error( + "[MAP] Failed to publish /topo_map_route_segment: %s" % exc, + ) + return False + + def _robot_position_in_frame(self, frame_id): + """Return the latest robot x/y position in ``frame_id`` from TF.""" + try: + transform = self._tf_buffer.lookup_transform( + frame_id, + self._base_frame, + rclpy.time.Time(), + ) + except (TransformException, AttributeError) as exc: + self.get_logger().warning( + "[MAP] Robot pose unavailable in '%s'; navigation will be " + "refused: %s" % (frame_id, exc), + ) + return None + + translation = transform.transform.translation + return float(translation.x), float(translation.y) + + def _position_within_global_metric_map(self, position): + """Return whether a position occupies a free coarse-map cell.""" + metric_map = self._global_metric_map + if position is None or metric_map is None: + return False + + x, y = position + if not math.isfinite(x) or not math.isfinite(y): + return False + + resolution = float(metric_map.info.resolution) + width = int(metric_map.info.width) + height = int(metric_map.info.height) + if resolution <= 0.0 or width <= 0 or height <= 0: + return False + + col = math.floor( + (x - float(metric_map.info.origin.position.x)) / resolution, + ) + row = math.floor( + (y - float(metric_map.info.origin.position.y)) / resolution, + ) + if col < 0 or col >= width or row < 0 or row >= height: + return False + + cell_index = (row * width) + col + if cell_index >= len(metric_map.data): + return False + + # Only known-free space belongs to the coarse main map. Unknown (-1) + # and occupied (100) cells are both outside its navigable area. + return int(metric_map.data[cell_index]) == 0 + + def _ensure_robot_within_main_map( + self, frame_id=None, robot_position=None, + ): + """Fail closed unless the robot pose is inside the coarse main map.""" + if self._global_metric_map is None: + self.get_logger().error( + "[MAP] Main occupancy map is unavailable; refusing navigation", + ) + self._publish_status("MAIN_MAP_UNAVAILABLE") + return False + + if frame_id is None: + try: + frame_id = geometry_from_tmap( + self._tmap, apply_transform=True, + ).frame_id + except Exception as exc: + self.get_logger().error( + "[MAP] Cannot determine the main map frame; refusing " + "navigation: %s" % exc, + ) + self._publish_status("MAIN_MAP_UNAVAILABLE") + return False + + if robot_position is None: + robot_position = self._robot_position_in_frame(frame_id) + if robot_position is None: + self.get_logger().error( + "[MAP] Robot pose is unavailable; refusing navigation", + ) + self._publish_status("ROBOT_POSE_UNAVAILABLE") + return False + + if not self._position_within_global_metric_map(robot_position): + self.get_logger().error( + "[MAP] Robot is outside the free area of the main map; " + "refusing to create a local metric map or plan a route", + ) + self._publish_status("OUTSIDE_MAIN_MAP") + return False + + return True + + # ================================================================= + # Status publishers + # ================================================================= + + def _publish_status(self, state_str): + msg = String() + msg.data = state_str + self._status_pub.publish(msg) + + def _publish_boundary(self, polygon_pts, frame_id="map"): + msg = PolygonStamped() + msg.header.stamp = self.get_clock().now().to_msg() + msg.header.frame_id = frame_id + for x, y in polygon_pts: + pt = Point32() + pt.x = float(x) + pt.y = float(y) + pt.z = 0.0 + msg.polygon.points.append(pt) + self._boundary_pub.publish(msg) + self.get_logger().info( + "[BOUNDARY] %d-point polygon (frame=%s)" + % (len(polygon_pts), frame_id), + ) + + def _publish_empty_boundary(self, frame_id="map"): + msg = PolygonStamped() + msg.header.stamp = self.get_clock().now().to_msg() + msg.header.frame_id = frame_id + self._boundary_pub.publish(msg) + + def _publish_route(self, route_nodes): + stroute = TopologicalRoute() + for n in route_nodes: + stroute.nodes.append(n) + self._stroute = stroute + self._route_pub.publish(stroute) + + def _publish_stats(self): + if self._stat is None: + return + s = self._stat + msg = NavStatistics() + msg.edge_id = s.edge_id + msg.status = s.status + msg.origin = s.origin + msg.target = s.target + msg.topological_map = s.topological_map + msg.time_to_waypoint = float(s.time_to_wp) + msg.operation_time = s.operation_time + msg.date_started = s.get_start_time_str() + msg.date_at_node = s.date_at_node.strftime( + "%A, %B %d %Y, at %H:%M:%S hours", + ) + msg.date_finished = s.get_finish_time_str() + self._stats_pub.publish(msg) + self._record_stats_to_db(s) + + def _record_stats_to_db(self, s): + """Persist traversal statistics to the SQLite database (if enabled).""" + if self._stats_db is None: + return + try: + self._stats_db.record_traversal( + map_name=s.topological_map, + map_hash=s.map_hash or self._map_hash, + edge_id=s.edge_id, + origin=s.origin, + target=s.target, + status=s.status, + failure_reason=s.failure_reason, + start_time=s.date_started, + end_time=s.date_finished, + duration_s=s.operation_time, + edge_length=s.edge_length if s.edge_length else None, + is_segment=s.is_segment, + segment_edges=s.segment_edge_ids if s.segment_edge_ids else None, + ) + except Exception as exc: + self._stats_db_errors += 1 + self.get_logger().error( + "[STATS] DB write error (%d total): %s" + % (self._stats_db_errors, exc), + ) + + def _publish_current_edge(self, edge_id): + msg = String() + msg.data = ( + "%s--%s" % (edge_id, self._topol_map) + if edge_id != "none" else "none" + ) + self._cur_edge_pub.publish(msg) + + def _publish_move_status(self, goal_node, action, status_str): + d = { + "goal": goal_node, + "final_goal": self._target, + "action": action.upper(), + "status": status_str, + } + msg = String() + msg.data = json.dumps(d) + self._move_status_pub.publish(msg) + + def _publish_goto_feedback(self, goal_handle, route_text): + """Publish ``GotoNode`` feedback through the action server.""" + if goal_handle is None: + return + fb = GotoNode.Feedback() + fb.route = route_text + goal_handle.publish_feedback(fb) + + def _publish_policy_feedback( + self, goal_handle, current_wp, status=GoalStatus.STATUS_EXECUTING, + ): + """Publish ``ExecutePolicyMode`` feedback through the action server.""" + if goal_handle is None: + return + fb = ExecutePolicyMode.Feedback() + fb.current_wp = current_wp + fb.status = int(status) + goal_handle.publish_feedback(fb) + + # ================================================================= + # Pose construction + # ================================================================= + + def _nav_frame(self): + """Default navigation frame from ``transformation.topo_frame_id``. + + Falls back to ``transformation.parent``, then ``'map'``. + """ + tx = self._tmap.get('transformation', {}) + return tx.get('topo_frame_id', tx.get('parent', 'map')) - result = nav_ok - return result, inc + def _node_nav_frame(self, node_name): + """Resolve the navigation frame for a specific node. - def navigate_to_poses(self, route, target, exec_policy): - """ - This function follows the chosen route to reach the goal. + Lookup order: + 1. ``nav_frame`` attribute on the graph node (per-node override) + 2. Map-level default via :meth:`_nav_frame` """ - self.navigation_activated = True - - nnodes = len(route.source) - Orig = route.source[0] - Targ = target - self._target = Targ - - self.init_reconfigure() - self.get_logger().info(" {} Nodes on route".format(nnodes)) - - inc = 1 - rindex = 0 - nav_ok = True - recovering = False - replanned = False - self.fluid_navigation = True - - o_node = self.rsearch.get_node_from_tmap2(Orig) - edge_from_id = get_edge_from_id_tmap2(self.lnodes, route.source[0], route.edge_id[0]) - if edge_from_id: - a = edge_from_id["action"] - self.get_logger().info("First action: {}".format(a)) + if node_name and node_name in self._graph: + nf = self._graph.nodes[node_name].get('nav_frame', '') + if nf: + return nf + return self._nav_frame() + + def _build_pose_stamped(self, node_dict, ignore_orientation=False): + """Build ``PoseStamped`` from a raw topomap node dict.""" + nd = node_dict["node"] + pose = nd["pose"] + ps = PoseStamped() + ps.header.stamp = self.get_clock().now().to_msg() + raw_frame = nd.get("nav_frame", '') + if raw_frame and raw_frame.startswith('${'): + raw_frame = self._resolve_tmap_ref(raw_frame) + ps.header.frame_id = raw_frame or self._nav_frame() + ps.pose.position.x = float(pose["position"]["x"]) + ps.pose.position.y = float(pose["position"]["y"]) + ps.pose.position.z = float(pose["position"]["z"]) + if ignore_orientation: + ps.pose.orientation.w = 1.0 else: - self.get_logger().error("Failed to get edge from id {}. Invalid route".format(route.edge_id[0])) - return False, inc - - if not self.nav_from_closest_edge: - # If the robot is not on a node or the first action is not move base type - # navigate to closest node waypoint (only when first action is not move base) - if a not in self.navigation_actions: - self.get_logger().info("The action of the first edge in the route is not a navigate to poses action") - self.get_logger().info("Current node is {}".format(self.current_node)) - - if self.current_node == "none" and a not in self.navigation_actions: - self.next_action = a - self.get_logger().info("Do {} to origin {}".format(self.navigation_action_name, o_node["node"]["name"])) - - # 5 degrees tolerance - params = {"yaw_goal_tolerance": 0.087266} - self.update_params_control_server.set_params(params) - - self.current_target = Orig - nav_ok, inc = self.execute_action(self.navigation_action_edge, o_node) - self.get_logger().info("Navigation Finished Successfully") if nav_ok else self.get_logger().warning("Navigation Failed") - - elif a not in self.navigation_actions: - navigation_action_act = False - for i in o_node["node"]["edges"]: - # Check if there is a navigation action in the edages of this node - # if not is dangerous to move - if i["action"] in self.navigation_actions: - navigation_action_act = True - - if not navigation_action_act: - self.get_logger().warning("Could not find a nav action in the edges of origin {}. Unsafe to move".format(o_node["node"]["name"])) - self.get_logger().info("Action not taken, outputing success") - nav_ok = True - inc = 0 - else: - self.get_logger().info("Getting to the exact pose of origin {}".format(o_node["node"]["name"])) - self.current_target = Orig - nav_ok, inc = self.execute_action(self.navigation_action_edge, o_node) - self.get_logger().info("Navigation Finished Successfully") if nav_ok else self.get_logger().warning("Navigation Failed") - - - route_edges = [] - route_dests = [] - route_origins = [] - route_actions_list = [] - cedg = get_edge_from_id_tmap2(self.lnodes, route.source[rindex], route.edge_id[rindex]) - self.stat = nav_stats(route.source[rindex], cedg["node"], self.topol_map, cedg["edge_id"]) - dt_text = self.stat.get_start_time_str() - - while rindex < (len(route.edge_id)): - cedg = get_edge_from_id_tmap2(self.lnodes, route.source[rindex], route.edge_id[rindex]) - a = cedg["action"] - route_actions_list.append(a) - - if(rindex == (len(route.edge_id)-1)): - self.stat.target = cedg["edge_id"] - - if rindex < (len(route.edge_id) - 1): - nedge = get_edge_from_id_tmap2(self.lnodes, route.source[rindex + 1], route.edge_id[rindex + 1]) - a1 = nedge["action"] - self.fluid_navigation = nedge["fluid_navigation"] - else: - nedge = None - a1 = "none" - self.fluid_navigation = False - self.final_goal = True - - self.current_action = a - self.next_action = a1 - current_edge = "%s--%s" % (cedg["edge_id"], self.topol_map) - self.get_logger().info("From {} do ({}) to {} from edge {}".format(route.source[rindex], a, cedg["node"], current_edge)) - cnode = self.rsearch.get_node_from_tmap2(cedg["node"]) - onode = self.rsearch.get_node_from_tmap2(route.source[rindex]) - self.current_target = cedg["node"] - route_edges.append(cedg) - route_dests.append(cnode) - route_origins.append(onode) - rindex = rindex + 1 - - self.get_logger().info(" ========== Action list {} ".format(route_actions_list)) - nav_ok, inc, status = self.execute_actions(route_edges, route_dests, route_origins, - action_name=self.ACTIONS.NAVIGATE_THROUGH_POSES, is_execpolicy=exec_policy) - - if(self.stat is None): - self.stat = nav_stats(route.source[0], cedg["node"], self.topol_map, cedg["edge_id"]) - - self.stat.set_ended(self.current_node) - dt_text = self.stat.get_finish_time_str() - operation_time = self.stat.operation_time - time_to_wp = self.stat.time_to_wp - not_fatal = nav_ok - if self.cancelled: - nav_ok = True - if self.preempted: - not_fatal = False - nav_ok = False - - if nav_ok: - self.stat.status = "success" - self.get_logger().info("Navigation Finished on {} ({}/{})".format(dt_text, operation_time, time_to_wp)) + ps.pose.orientation.x = float(pose["orientation"]["x"]) + ps.pose.orientation.y = float(pose["orientation"]["y"]) + ps.pose.orientation.z = float(pose["orientation"]["z"]) + ps.pose.orientation.w = float(pose["orientation"]["w"]) + return ps + + def _build_pose_from_graph(self, node_name, ignore_orientation=False): + """Build ``PoseStamped`` from NetworkX graph attributes.""" + if node_name not in self._graph: + return None + attrs = self._graph.nodes[node_name] + ps = PoseStamped() + ps.header.stamp = self.get_clock().now().to_msg() + ps.header.frame_id = self._node_nav_frame(node_name) + ps.pose.position.x = float(attrs.get('x', 0.0)) + ps.pose.position.y = float(attrs.get('y', 0.0)) + ps.pose.position.z = float(attrs.get('z', 0.0)) + if ignore_orientation: + ps.pose.orientation.w = 1.0 else: - if not_fatal: - self.get_logger().warning("Navigation Failed on {} ({}/{})".format(dt_text, operation_time, time_to_wp)) - self.stat.status = "failed" - else: - self.get_logger().warning("Fatal Fail on {} ({}/{})".format(dt_text, operation_time, time_to_wp)) - self.stat.status = "fatal" - - - self.publish_stats() - self.reset_reconf() - self.navigation_activated = False - result = nav_ok - return result, inc, status - - def navigate(self, target): + ori = attrs.get( + 'orientation', + {'x': 0.0, 'y': 0.0, 'z': 0.0, 'w': 1.0}, + ) + ps.pose.orientation.x = float(ori.get('x', 0.0)) + ps.pose.orientation.y = float(ori.get('y', 0.0)) + ps.pose.orientation.z = float(ori.get('z', 0.0)) + ps.pose.orientation.w = float(ori.get('w', 1.0)) + return ps + + def _pose_or_fallback(self, node_name, ignore_orientation=False): + """Build pose from graph, falling back to raw YAML.""" + ps = self._build_pose_from_graph(node_name, ignore_orientation) + if ps is None: + nd = get_node_from_tmap2(self._tmap, node_name) + if nd: + ps = self._build_pose_stamped(nd, ignore_orientation) + return ps + + def _build_edge_oriented_pose(self, node_name, next_node_name): + """Build ``PoseStamped`` at *node_name* oriented toward *next_node*. + + Used for intermediate waypoints in composable segments so the + robot faces the direction of the next edge instead of using + the stored node orientation. + + Args: + node_name: Node whose position is used. + next_node_name: Node toward which the orientation points. + + Returns: + ``PoseStamped`` with yaw facing *next_node_name*, + or ``None`` if either node is missing from the graph. """ - This function takes the target node and plans the actions that are required - to reach it. + if ( + node_name not in self._graph + or next_node_name not in self._graph + ): + return None + + attrs = self._graph.nodes[node_name] + next_attrs = self._graph.nodes[next_node_name] + + dx = float(next_attrs.get('x', 0.0)) - float(attrs.get('x', 0.0)) + dy = float(next_attrs.get('y', 0.0)) - float(attrs.get('y', 0.0)) + yaw = math.atan2(dy, dx) + + ps = PoseStamped() + ps.header.stamp = self.get_clock().now().to_msg() + ps.header.frame_id = self._node_nav_frame(node_name) + ps.pose.position.x = float(attrs.get('x', 0.0)) + ps.pose.position.y = float(attrs.get('y', 0.0)) + ps.pose.position.z = float(attrs.get('z', 0.0)) + ps.pose.orientation.z = math.sin(yaw / 2.0) + ps.pose.orientation.w = math.cos(yaw / 2.0) + return ps + + # ================================================================= + # Segment parameter management (save / apply / restore) + # ================================================================= + + def _param_clients_for(self, node_name): + """Return ``(set_client, get_client)`` for *node_name*. + + The goal-checker clients created in ``__init__`` are reused for + the goal-checker node; clients for any other node are created on + first use and cached. """ - result = False - if not self.cancelled: - g_node = self.rsearch.get_node_from_tmap2(target) - - self.max_dist_to_closest_edge = self.get_parameter_or("max_dist_to_closest_edge", Parameter('double', Parameter.Type.DOUBLE, 1.0)).value - - if self.closest_edges.distances and (self.closest_edges.distances[0] > self.max_dist_to_closest_edge or self.current_node != "none"): - self.nav_from_closest_edge = False - o_node = self.rsearch.get_node_from_tmap2(self.closest_node) - self.get_logger().info("Planning from the closest NODE: {}".format(self.closest_node)) - else: - self.nav_from_closest_edge = True - o_node, the_edge = self.orig_node_from_closest_edge(g_node) - self.get_logger().info("Planning from the closest EDGE: {}".format(the_edge["edge_id"])) - - self.get_logger().info("Navigating From Origin {} to Target {} ".format(o_node["node"]["name"], target)) - - # Everything is Awesome!!! - # Target and Origin are not None - if (g_node is not None) and (o_node is not None): - if g_node["node"]["name"] != o_node["node"]["name"]: - route = self.rsearch.search_route(o_node["node"]["name"], target) #! <---- HERE YOU RETRIEVE THE SHORTEST ROUTE - route = self.enforce_navigable_route(route, target) - if route.source: - self.get_logger().info("Navigating Case 1: Following route") - self.get_logger().warn("[navigate] - publishing route") - self.publish_route(route, target) - if(self.use_nav2_follow_route): - result, inc, status = self.navigate_to_poses(route, target, 0) - else: - result, inc = self.followRoute(route, target, 0) - self.get_logger().info("Navigating Case 1 -> res: {}".format(inc)) - else: - self.get_logger().warning("Navigating Case 1a: There is no route from {} to {}. Check your edges.".format(o_node["node"]["name"], target)) - self.cancelled = True - result = False - inc = 1 - self.get_logger().info("Navigating Case 1a -> res: {}".format(inc)) - else: - if self.nav_from_closest_edge: - result, inc = self.to_goal_node(g_node, the_edge) - else: - result, inc = self.to_goal_node(g_node) - else: - self.get_logger().warning("Navigating Case 3: Target or Origin Nodes were not found on Map") - self.cancelled = True - result = False - inc = 1 - self.get_logger().info("Navigating Case 3 -> res: {}".format(inc)) - - if (not self.cancelled) and (not self.preempted): - self._result.success = result - if result: - self._feedback.route = target - self._as_action_feedback_pub.publish(self._feedback) - # self._as.set_succeeded(self._result) - else: - self._feedback.route = self.current_node - self._as_action_feedback_pub.publish(self._feedback) - # self._as.set_aborted(self._result) - else: - if not self.preempted: - self._feedback.route = self.current_node - self._as_action_feedback_pub.publish(self._feedback) - self._result.success = result - # self._as.set_aborted(self._result) - else: - self._result.success = False - # self._as.set_preempted(self._result) - - - - def execute_policy(self, route, target): - # if(False): - if(self.use_nav2_follow_route): - result, inc, status = self.navigate_to_poses(route, target, 1) - else: - result, inc = self.followRoute(route, target, 1) # <-- IT DOESNT WORK [LUCA] - if result: - self.get_logger().info("Navigation Finished Successfully") - self.publish_feedback_exec_policy(GoalStatus.STATUS_SUCCEEDED) - else: - if self.cancelled and self.preempted: - self.get_logger().warning("Fatal Fail") - self.publish_feedback_exec_policy(GoalStatus.STATUS_CANCELED) - elif self.cancelled: - self.get_logger().warning("Navigation Failed") - self.publish_feedback_exec_policy(GoalStatus.STATUS_ABORTED) - return result - - - - def publish_feedback_exec_policy(self, nav_outcome=None): - if self.current_node == "none": # Happens due to lag in fetch system - if self.current_node == "none": - self._feedback_exec_policy.current_wp = self.closest_node - else: - self._feedback_exec_policy.current_wp = self.current_node - else: - self._feedback_exec_policy.current_wp = self.current_node - if nav_outcome is not None: - self._feedback_exec_policy.status = nav_outcome - self._as_exec_policy_action_feedback_pub.publish(self._feedback_exec_policy) - - - def orig_node_from_closest_edge(self, g_node): - - name_1, _ = get_node_names_from_edge_id_2(self.lnodes, self.closest_edges.edge_ids[0]) - name_2, _ = get_node_names_from_edge_id_2(self.lnodes, self.closest_edges.edge_ids[1]) - - # Navigate from the closest edge instead of the closest node. First get the closest edges. - edge_1 = get_edge_from_id_tmap2(self.lnodes, name_1, self.closest_edges.edge_ids[0]) - edge_2 = get_edge_from_id_tmap2(self.lnodes, name_2, self.closest_edges.edge_ids[1]) - - # Then get their destination nodes. - o_node_1 = self.rsearch.get_node_from_tmap2(edge_1["node"]) - o_node_2 = self.rsearch.get_node_from_tmap2(edge_2["node"]) - - # If the closest edges are of equal distance (usually a bidirectional edge) - # then use the destination node that results in a shorter route to the goal. - if self.closest_edges.distances[0] == self.closest_edges.distances[1]: - d1 = get_route_distance(self.lnodes, o_node_1, g_node) - d2 = get_route_distance(self.lnodes, o_node_2, g_node) - else: # Use the destination node of the closest edge. - d1 = 0; d2 = 1 - if d1 <= d2: - return o_node_1, edge_1 - else: - return o_node_2, edge_2 - - - def to_goal_node(self, g_node, the_edge=None): - self.get_logger().info("Target and Origin Nodes are the same") - self.current_target = g_node["node"]["name"] - if the_edge is None: - # Check if there is a navigation action in the edges of this node and choose the earliest one in the - # list of navigation actions. If not is dangerous to move. - act_ind = 100 - for i in g_node["node"]["edges"]: - c_action_server = i["action"] - if c_action_server in self.navigation_actions: - c_ind = self.navigation_actions.index(c_action_server) - if c_ind < act_ind: - act_ind = c_ind - the_edge = i - if the_edge is None: - self.get_logger().warning("Navigating Case 2a: Could not find a move base action in the edges of target {}. Unsafe to move".format(g_node["node"]["name"])) - self.get_logger().info("Action not taken, outputting success") - result=True - inc=0 - self.get_logger().info("Navigating Case 2a -> res: {}".format(inc)) - else: - self.get_logger().info("Navigating Case 2: Getting to the exact pose of target {}".format(g_node["node"]["name"])) - self.final_goal = True - self.current_target = g_node["node"]["name"] - origin_name,_ = get_node_names_from_edge_id_2(self.lnodes, the_edge["edge_id"]) - origin_node = self.rsearch.get_node_from_tmap2(origin_name) - - if(self.edge_reconf_start(the_edge)): - result, inc = self.execute_action(the_edge, g_node, origin_node) - self.edge_reconf_end() - else: - result = False - if not result: - self.get_logger().warning("Navigation Failed") - inc=1 - else: - self.get_logger().info("Navigation Finished Successfully") - self.get_logger().info("Navigating Case 2 -> res: {} ".format(inc)) - return result, inc - + node = _normalise_node_name(node_name) + gc_node = _normalise_node_name(self._goal_checker_node) + if not node or node == gc_node: + return self._set_params_client, self._get_params_client + + cache = getattr(self, '_param_clients', None) + if cache is None: + cache = self._param_clients = {} + if node not in cache: + cache[node] = ( + self.create_client( + SetParameters, '/%s/set_parameters' % node, + callback_group=ReentrantCallbackGroup(), + ), + self.create_client( + GetParameters, '/%s/get_parameters' % node, + callback_group=ReentrantCallbackGroup(), + ), + ) + self.get_logger().info( + "[PARAM] Parameter clients created for node '%s'" % node, + ) + return cache[node] + + def _get_ros_params_sync(self, names, node=None): + """Synchronously query ROS 2 parameters from a node. + + Polls the ``GetParameters`` service until the future resolves + or a 2-second deadline elapses. Returns a ``{name: value}`` + dict for every successfully retrieved parameter; parameters + whose value could not be decoded (e.g. ``PARAMETER_NOT_SET``) + are omitted. + + Args: + names: List of ROS 2 parameter names to query. + node: Target node name; defaults to the goal-checker node. + + Returns: + Dict mapping parameter name to its current Python value. + """ + if not names: + return {} + _, get_client = self._param_clients_for(node) + if not get_client.service_is_ready(): + self.get_logger().debug( + "[PARAM] GetParameters service not available on '%s'" + % (_normalise_node_name(node) or self._goal_checker_node), + ) + return {} + + req = GetParameters.Request() + req.names = list(names) + future = get_client.call_async(req) + + deadline = time.time() + 2.0 + while rclpy.ok() and not future.done() and time.time() < deadline: + time.sleep(0.05) + + if not future.done(): + self.get_logger().warning( + "[PARAM] GetParameters timed out for: %s" % names, + ) + return {} - def enforce_navigable_route(self, route, target_node): + try: + result = future.result() + except Exception as exc: + self.get_logger().debug( + "[PARAM] GetParameters failed: %s" % exc, + ) + return {} + + out = {} + for name, pv in zip(names, result.values): + val = _ros_param_value(pv) + if val is not None: + out[name] = val + return out + + def _set_ros_params_async(self, params_dict, node=None): + """Send a ``SetParameters`` request (fire-and-forget). + + Args: + params_dict: ``{ros_param_name: python_value}`` mapping. + node: Target node name; defaults to the goal-checker node. + """ + if not params_dict: + return + set_client, _ = self._param_clients_for(node) + if not set_client.service_is_ready(): + self.get_logger().debug( + "[PARAM] SetParameters service not available on '%s', skipping" + % (_normalise_node_name(node) or self._goal_checker_node), + ) + return + + params = [] + for name, value in params_dict.items(): + p = RclParameter() + p.name = name + p.value = _make_ros_param_value(value) + params.append(p) + + req = SetParameters.Request() + req.parameters = params + future = set_client.call_async(req) + future.add_done_callback(self._set_params_cb) + + def _set_params_cb(self, future): + """Log the result of an async ``SetParameters`` call.""" + try: + result = future.result() + failed = [r for r in result.results if not r.successful] + if failed: + self.get_logger().warning( + "[PARAM] %d parameter(s) failed to set" % len(failed), + ) + except Exception as exc: + self.get_logger().debug( + "[PARAM] SetParameters call failed: %s" % exc, + ) + + def _apply_segment_parameters(self, segment): + """Apply ROS 2 parameters for a segment and save previous values. + + Called at segment entrance. For each parameter that will be + changed: + + 1. The current value is queried via ``GetParameters``. + 2. The new value (derived from the segment) is sent via + ``SetParameters``. + + The returned dict maps *node name* to ``{param: previous_value}``; + pass it to :meth:`_restore_segment_parameters` after the segment + completes to undo the changes. + + **Parameter sources** (later sources override earlier ones) + + - *Node-level goal tolerances* – ``xy_goal_tolerance`` and + ``yaw_goal_tolerance`` from the target node's properties, + applied to the goal-checker node. + - *Edge property mapping* – any entry in the segment's edge + ``properties`` that is listed under ``ros_parameters`` in the + action's map configuration. The ``ros_parameters`` dict maps + edge property name to a ROS 2 parameter name on the + goal-checker node:: + + actions: + row_traversal: + ros_parameters: + max_speed: FollowPath.max_robot_speed + + - *Action-level ``set_ros_params``* – constant parameters + applied on any node whenever this action runs:: + + actions: + row_traversal: + set_ros_params: + collision_monitor: + FootprintApproach.enabled: false + + - *Edge-level ``set_ros_params``* – same syntax inside an edge's + ``properties``; overrides the action-level values per + node/parameter. + + All operations are best-effort; if the parameter service is + unavailable the segment still executes with the currently + configured values. + + Args: + segment: The :class:`ActionSegment` about to be executed. + + Returns: + ``{node_name: {ros_param_name: previous_value}}`` (may be empty). """ - Enforces the route to always contain the initial edge that leads the robot to the first node in the given route. - In other words, avoid that the route contains an initial edge that is too far from the robot pose. + gc_node = _normalise_node_name(self._goal_checker_node) + by_node = {} + + # -- Node-level goal tolerances -------------------------------- + target_node = segment.last_target + if target_node and target_node in self._graph: + node_props = self._graph.nodes[target_node].get('properties', {}) + xy_tol = node_props.get('xy_goal_tolerance') + yaw_tol = node_props.get('yaw_goal_tolerance') + if xy_tol is not None: + by_node.setdefault(gc_node, {})[ + self._xy_tolerance_param] = float(xy_tol) + if yaw_tol is not None: + by_node.setdefault(gc_node, {})[ + self._yaw_tolerance_param] = float(yaw_tol) + + # -- Edge-level parameters from the action's ros_parameters ---- + action = segment.action_type + info = self._action_clients.get(action) or {} + action_cfg = info.get('config') or {} + ros_param_mapping = action_cfg.get('ros_parameters', {}) or {} + edge_props = segment.parameters # consistent across segment + for prop_name, ros_param_name in ros_param_mapping.items(): + if prop_name in edge_props: + by_node.setdefault(gc_node, {})[ros_param_name] = \ + edge_props[prop_name] + + # -- set_ros_params: action defaults, overridden per edge ------ + action_spec = _normalise_ros_param_spec( + action_cfg.get('set_ros_params'), gc_node, + ) + edge_spec = _normalise_ros_param_spec( + edge_props.get('set_ros_params'), gc_node, + ) + by_node = _merge_ros_param_specs( + by_node, _merge_ros_param_specs(action_spec, edge_spec), + ) + + if not by_node: + return {} + + prev_values = {} + for node, params in by_node.items(): + # Query current values before making any changes + prev = self._get_ros_params_sync(list(params.keys()), node) + if prev: + prev_values[node] = prev + self._set_ros_params_async(params, node) + self.get_logger().info( + "[PARAM] Segment '%s': setting %s on '%s'" + % (action, list(params.keys()), node), + ) + + return prev_values + + def _restore_segment_parameters(self, prev_values): + """Restore ROS 2 parameters to the values saved before a segment. + + Called after a segment completes (whether it succeeded, failed, + or was cancelled/aborted). Sends a ``SetParameters`` request + (fire-and-forget) to put the affected parameters back to the + values that were recorded by :meth:`_apply_segment_parameters`. + + Args: + prev_values: ``{node_name: {ros_param_name: previous_value}}`` + as returned by :meth:`_apply_segment_parameters`. An + empty dict is a no-op. """ - if self.nav_from_closest_edge and self.closest_edges.edge_ids and len(self.closest_edges.edge_ids) == 2: - if not(self.closest_edges.edge_ids[0] in route.edge_id or self.closest_edges.edge_ids[1] in route.edge_id): - first_node = route.source[0] if len(route.source) > 0 else target_node - - for edge_id in self.closest_edges.edge_ids: - origin, destination = get_node_names_from_edge_id_2(self.lnodes, edge_id) - - if destination == first_node and edge_id not in route.edge_id: - route.source.insert(0, origin) - route.edge_id.insert(0, edge_id) - break - return route - - def edge_reconf_start(self, edge): - if self.edge_reconfigure: - if not self.srv_edge_reconfigure: - self.edgeReconfigureManager.register_edge(edge) - if (not self.edgeReconfigureManager.initialise()): - return False - self.edgeReconfigureManager.reconfigure() - else: - self.edgeReconfigureManager.srv_reconfigure(edge["edge_id"]) - return True + if not prev_values: + return + total = sum(len(p) for p in prev_values.values()) + self.get_logger().info( + "[PARAM] Restoring %d parameter(s) on %d node(s) to " + "pre-segment values" % (total, len(prev_values)), + ) + for node, params in prev_values.items(): + self._set_ros_params_async(params, node) + + # ================================================================= + # Goal construction (map-driven) + # ================================================================= + + def _resolve_tmap_ref(self, value): + """Resolve ``${transformation.}`` against the map.""" + if not isinstance(value, str): + return value + if not ( + value.startswith('${transformation.') + and value.endswith('}') + ): + return value + key = value[len('${transformation.'):-1] + tx = self._tmap.get('transformation', {}) + return tx.get(key, value) + + def _resolve_node_ref(self, value, node_name): + """Resolve ``${node.}`` and ``${transformation.}``. + + Looks up *attr* on the NetworkX graph node for *node_name*, + or resolves transformation-level references. + Returns the resolved value, or the original string if the + pattern does not match or the attribute is missing. + """ + if not isinstance(value, str): + return value + if value.startswith('${transformation.'): + return self._resolve_tmap_ref(value) + if not (value.startswith('${node.') and value.endswith('}')): + return value + attr = value[len('${node.'):-1] + if node_name and node_name in self._graph: + resolved = self._graph.nodes[node_name].get(attr, '') + if resolved: + return resolved + return value + + def _resolve_template_frame(self, template, node_name): + """Return the resolved ``header.frame_id`` from *template*. + + Supports the nested format where ``header`` lives inside the + goal field (``pose.header`` or ``poses[0].header``) as well as + the legacy flat format (``header`` at template root). + + Returns ``None`` when the template does not declare a header. + """ + header = None + + # New nested format: pose.header or poses[0].header + pose_tpl = template.get('pose') + if isinstance(pose_tpl, dict): + header = pose_tpl.get('header', {}) + if not header: + poses_tpl = template.get('poses') + if isinstance(poses_tpl, list) and poses_tpl: + first = poses_tpl[0] + if isinstance(first, dict): + header = first.get('header', {}) + + # Legacy flat format: header at template root + if not header: + header = template.get('header', {}) + + if not header: + return None + raw = header.get('frame_id', '') + if not raw: + return None + return self._resolve_node_ref(raw, node_name) + + def _build_segment_goal(self, segment, is_final_segment): + """Build a Nav2 goal dynamically from map ``actions`` config. + + The action class is resolved at map-load time via + ``_load_action_type`` and stored in ``_action_clients``. + Single-pose vs multi-pose dispatch is detected by checking + whether the goal object has a ``poses`` (list) or ``pose`` + (single) attribute -- no hardcoded action imports needed. + + The ``action_goal_template`` mirrors the ROS 2 goal structure:: + + action_goal_template: + pose: # PoseStamped wrapper + header: + frame_id: '${node.nav_frame}' + pose: '${node.pose}' + behavior_tree: '${definitions.default_bt}' + + If the template contains a ``header.frame_id`` (nested under + ``pose`` or ``poses[0]``), the resolved value overrides the + frame on every built ``PoseStamped``. + """ + action = segment.action_type + info = self._action_clients.get(action) + + if not info: + self.get_logger().error( + "[GOAL] No action config for '%s'" % action, + ) + return None + + action_class = info['action_class'] + tpl = info['config'].get('action_goal_template', {}) + bt = tpl.get('behavior_tree', '') + if isinstance(bt, str) and bt.startswith('${'): + bt = '' + + goal = action_class.Goal() + + # Multi-waypoint goal (e.g. NavigateThroughPoses) + if hasattr(goal, 'poses'): + n = segment.num_edges + for i, ed in enumerate(segment.edge_data): + is_last = (i == n - 1) + tgt = ed['target'] + + if not is_last: + # Intermediate waypoint: orient toward the next + # edge's target so the robot faces its travel + # direction instead of using the node's stored + # orientation. + next_tgt = segment.edge_data[i + 1]['target'] + ps = self._build_edge_oriented_pose(tgt, next_tgt) + if ps is None: + ps = self._pose_or_fallback( + tgt, ignore_orientation=True, + ) + elif self._no_orientation and is_final_segment: + # Final waypoint with no-orientation flag. + ps = self._pose_or_fallback( + tgt, ignore_orientation=True, + ) + else: + # Final waypoint: keep the node's orientation. + ps = self._pose_or_fallback(tgt) + + if ps is not None: + frame = self._resolve_template_frame( + tpl, tgt, + ) + if frame: + ps.header.frame_id = frame + goal.poses.append(ps) + self.get_logger().info( + "[GOAL] %s %d poses, BT=%s" + % (action_class.__name__, len(goal.poses), + bt or 'default'), + ) + # Single-pose goal (e.g. NavigateToPose) + elif hasattr(goal, 'pose'): + tgt = segment.last_target + ignore = self._no_orientation and is_final_segment + ps = self._pose_or_fallback( + tgt, ignore_orientation=ignore, + ) + if ps is not None: + frame = self._resolve_template_frame(tpl, tgt) + if frame: + ps.header.frame_id = frame + goal.pose = ps + self.get_logger().info( + "[GOAL] %s -> '%s', BT=%s" + % (action_class.__name__, tgt, bt or 'default'), + ) + else: + self.get_logger().warning( + "[GOAL] %s goal has no 'pose'/'poses' attr" + % action_class.__name__, + ) + if bt and hasattr(goal, 'behavior_tree'): + goal.behavior_tree = bt - def edge_reconf_end(self): - if self.edge_reconfigure and not self.srv_edge_reconfigure and self.edgeReconfigureManager.active: - self.edgeReconfigureManager._reset() + return goal + # ================================================================= + # Nav2 dispatch + # ================================================================= - def cancel_current_action(self, timeout_secs=-1): - """ - Cancels the action currently in execution. Returns True if the current goal is correctly ended. - """ - self.get_logger().info("Cancelling current navigation goal, timeout_secs = {}...".format(timeout_secs)) - self.edge_action_manager.preempt(timeout_secs=timeout_secs) - self.cancelled = True - self.navigation_activated = False - self.get_logger().info("Navigation active: " + str(self.navigation_activated)) - return not self.navigation_activated + def _send_nav2_goal(self, goal, action_client=None): + """Send goal to Nav2. Blocks until result. + The main ``MultiThreadedExecutor`` processes action-client + callbacks, so this method polls futures with ``time.sleep`` + instead of calling ``rclpy.spin_once`` (which would conflict + with the executor that already owns the node). - def publish_route(self, route, target): - stroute = TopologicalRoute() - for i in route.source: - stroute.nodes.append(i) - stroute.nodes.append(target) - self.route_pub.publish(stroute) - - - def publish_stats(self): - pubst = NavStatistics() - pubst.edge_id = self.stat.edge_id - pubst.status = self.stat.status - pubst.origin = self.stat.origin - pubst.target = self.stat.target - pubst.topological_map = self.stat.topological_map - # pubst.final_node = self.stat.final_node # FIXME: not - self.get_logger().info(" {}".format(self.stat.time_to_wp)) - pubst.time_to_waypoint = float(self.stat.time_to_wp) - pubst.operation_time = self.stat.operation_time - pubst.date_started = self.stat.get_start_time_str() - pubst.date_at_node = self.stat.date_at_node.strftime("%A, %B %d %Y, at %H:%M:%S hours") - - pubst.date_finished = self.stat.get_finish_time_str() - self.stats_pub.publish(pubst) - # self.stat = None - + Returns ``GoalStatus`` integer. + """ + if action_client is None: + for info in self._action_clients.values(): + action_client = info['client'] + break + if goal is None: + self.get_logger().error("[NAV2] No goal constructed") + return GoalStatus.STATUS_ABORTED + if action_client is None: + self.get_logger().error("[NAV2] No action client available") + return GoalStatus.STATUS_ABORTED + + if not action_client.server_is_ready(): + self.get_logger().info("[NAV2] Waiting for server ...") + if not action_client.wait_for_server(timeout_sec=5.0): + self.get_logger().error("[NAV2] Server unavailable") + return GoalStatus.STATUS_ABORTED + + future = action_client.send_goal_async( + goal, feedback_callback=self._nav2_fb_cb, + ) + + # Wait for goal acceptance + while rclpy.ok() and not future.done(): + if self._preempted or self._cancelled: + return GoalStatus.STATUS_CANCELED + time.sleep(0.1) + + if not future.done(): + self.get_logger().error("[NAV2] send_goal did not complete") + return GoalStatus.STATUS_ABORTED + + self._goal_handle = future.result() + if not self._goal_handle.accepted: + self.get_logger().error("[NAV2] Goal REJECTED") + return GoalStatus.STATUS_ABORTED + self.get_logger().info("[NAV2] Goal ACCEPTED") + + # Wait for result + result_future = self._goal_handle.get_result_async() + while rclpy.ok(): + if self._preempted or self._cancelled: + self._cancel_nav2_goal() + return GoalStatus.STATUS_CANCELED + if result_future.done(): + res = result_future.result() + self._action_status = res.status + self.get_logger().info( + "[NAV2] Finished: %s" % _status_str(res.status), + ) + return res.status + time.sleep(0.1) + return GoalStatus.STATUS_ABORTED + + def _nav2_fb_cb(self, _feedback_msg): + self._action_status = GoalStatus.STATUS_EXECUTING + + def _cancel_nav2_goal(self, timeout_sec=None): + """Cancel the active Nav2 goal (fire-and-forget).""" + goal_handle = self._goal_handle + self._goal_handle = None + if goal_handle is None: + return + try: + goal_handle.cancel_goal_async() + self.get_logger().info("[NAV2] Cancel requested") + except Exception as exc: + self.get_logger().error("[NAV2] Cancel error: %s" % exc) + + # ================================================================= + # Action-server callbacks + # ================================================================= + + def _exec_goto_cb(self, goal_handle): + """``GotoNode`` action callback.""" + target = goal_handle.request.target + self.get_logger().info( + "=" * 60 + "\n[GOTO] target='%s', no_ori=%s" + % (target, goal_handle.request.no_orientation), + ) + # Preempt any active navigation and wait for it to stop + if self._navigation_activated: + self.get_logger().info("[GOTO] Preempting active navigation") + self._preempted = True + self._cancel_nav2_goal() + deadline = time.time() + 5.0 + while self._navigation_activated and time.time() < deadline: + time.sleep(0.05) + if self._navigation_activated: + self.get_logger().warning( + "[GOTO] Timeout waiting for old navigation", + ) + self._navigation_activated = False + if self._sm.is_terminal(): + self._sm.reset() + elif self._sm.state != NavState.READY: + self._sm.transition(NavState.CANCELLED) + self._sm.reset() + + self._navigation_activated = True + self._cancelled = False + self._preempted = False + self._no_orientation = goal_handle.request.no_orientation + + self._publish_goto_feedback(goal_handle, "Planning...") + + success = self._navigate(target) + self._navigation_activated = False - def get_fail_policy_state(self, edge): - policy = None - state = -1 - if len(self.executing_fail_policy) == 0: - _policy = [action.strip().split("_") for action in edge["fail_policy"].split(",")] - policy = [] - # repeat the actions that can be repeated more than once - for action in _policy: - if len(action) > 1 and isinstance(eval(action[-1]), int): - for _ in range(eval(action[-1])): - policy.append(action[:-1]) - else: - policy.append(action) - state = 0 - self.executing_fail_policy = { - "policy": policy, # the policy we want to execute - "state": state, # at which point of the policy we are - "edge": edge["edge_id"] - } - + result = GotoNode.Result() + result.success = success + if success: + goal_handle.succeed() + self.get_logger().info("[GOTO] SUCCEEDED -> '%s'" % target) + elif self._cancelled or self._preempted: + goal_handle.canceled() + self.get_logger().warning( + "[GOTO] CANCELLED -> '%s'" % target, + ) else: - policy = self.executing_fail_policy["policy"] - # increment the state because if we are here it means that the previous policy action failed - self.executing_fail_policy["state"] += 1 - state = self.executing_fail_policy["state"] + goal_handle.abort() + self.get_logger().warning( + "[GOTO] FAILED -> '%s'" % target, + ) + if self._sm.is_terminal(): + self._sm.reset() + return result - return policy, state + def _exec_policy_cb(self, goal_handle): + """``ExecutePolicyMode`` action callback.""" + self.get_logger().info("=" * 60 + "\n[POLICY] Goal received") + + # Preempt any active navigation and wait for it to stop + if self._navigation_activated: + self.get_logger().info("[POLICY] Preempting active navigation") + self._preempted = True + self._cancel_nav2_goal() + deadline = time.time() + 5.0 + while self._navigation_activated and time.time() < deadline: + time.sleep(0.05) + if self._navigation_activated: + self.get_logger().warning( + "[POLICY] Timeout waiting for old navigation", + ) + self._navigation_activated = False + if self._sm.is_terminal(): + self._sm.reset() + elif self._sm.state != NavState.READY: + self._sm.transition(NavState.CANCELLED) + self._sm.reset() + + self._navigation_activated = True + self._cancelled = False + self._preempted = False + + route = goal_handle.request.route + if ( + len(route.source) < 1 + or len(route.source) != len(route.edge_id) + ): + self.get_logger().error("[POLICY] Invalid route data") + self._navigation_activated = False + goal_handle.abort() + return ExecutePolicyMode.Result(success=False) + + if ( + route.source[0] != self._current_node + and route.source[0] != self._closest_node + ): + self.get_logger().error( + "[POLICY] Route starts at '%s' but robot at '%s'" + % (route.source[0], self._current_node), + ) + self._navigation_activated = False + goal_handle.abort() + return ExecutePolicyMode.Result(success=False) + + if not self._ensure_robot_within_main_map(): + self._navigation_activated = False + goal_handle.abort() + return ExecutePolicyMode.Result(success=False) + + route_nodes = list(route.source) + if route.edge_id: + last_e = get_edge_from_id_tmap2( + self._tmap, route.source[-1], route.edge_id[-1], + ) + if last_e: + ft = last_e["node"] + if not route_nodes or route_nodes[-1] != ft: + route_nodes.append(ft) + + target = route_nodes[-1] + self._target = target + self._sm.transition(NavState.PLANNING) + self._publish_status("PLANNING") + self.get_logger().info( + "[POLICY] Route: %s" % " -> ".join(route_nodes), + ) + self._publish_policy_feedback( + goal_handle, route_nodes[0], GoalStatus.STATUS_EXECUTING, + ) + self._publish_route(route_nodes) + if not self._publish_route_segment_metric_map( + get_route_edges(self._graph, route_nodes), + ): + self._sm.transition(NavState.FAILED) + self._navigation_activated = False + goal_handle.abort() + return ExecutePolicyMode.Result(success=False) + self._wait_for_route_segment_costmap() + success = self._execute_route(route_nodes, target) + + self._navigation_activated = False + result = ExecutePolicyMode.Result(success=success) + if self._sm.is_terminal(): + self._sm.reset() + if success: + goal_handle.succeed() + elif self._cancelled or self._preempted: + goal_handle.canceled() + else: + goal_handle.abort() + self.get_logger().info( + "[POLICY] %s" + % ( + "SUCCEEDED" + if success else + ("CANCELLED" if self._cancelled or self._preempted else "FAILED") + ), + ) + return result + def _cancel_goto_cb(self, _gh): + self.get_logger().warning("[GOTO] Cancel requested") + self._cancelled = True + self._cancel_nav2_goal() + return CancelResponse.ACCEPT + + def _cancel_policy_cb(self, _gh): + self.get_logger().warning("[POLICY] Cancel requested") + self._cancelled = True + self._cancel_nav2_goal() + return CancelResponse.ACCEPT + + # ================================================================= + # Core navigation + # ================================================================= + + def _navigate(self, target): + """Plan route and execute. Returns ``True`` on success.""" + if self._cancelled: + return False + self._sm.transition(NavState.PLANNING) + self._publish_status("PLANNING") + self._target = target + + if target not in self._graph: + self.get_logger().error("[NAV] '%s' not in map" % target) + self._sm.transition(NavState.FAILED) + self._publish_status("FAILED") + return False + + if not self._ensure_robot_within_main_map(): + self._sm.transition(NavState.FAILED) + return False + + origin = self._determine_origin(target) + if origin is None: + self.get_logger().error("[NAV] Cannot determine origin") + self._sm.transition(NavState.FAILED) + self._publish_status("FAILED") + return False + + self.get_logger().info( + "[NAV] Planning '%s' -> '%s'" % (origin, target), + ) + + if origin == target: + self.get_logger().info("[NAV] Already at target") + self._sm.transition(NavState.SUCCEEDED) + self._publish_status("SUCCEEDED") + return True + + route_nodes = self._route_from_closest_edge(target) + if route_nodes is None: + route_nodes = plan_route( + self._graph, origin, target, + logger=self.get_logger(), + algorithm=self._route_algorithm, + weight=self._route_weight, + ) + if not route_nodes or len(route_nodes) < 2: + self.get_logger().error( + "[NAV] No route '%s' -> '%s'" % (origin, target), + ) + self._sm.transition(NavState.FAILED) + self._publish_status("FAILED") + return False + + self.get_logger().info( + "[NAV] Route: %s (%d nodes)" + % (" -> ".join(route_nodes), len(route_nodes)), + ) + self._publish_route(route_nodes) + if not self._publish_route_segment_metric_map( + get_route_edges(self._graph, route_nodes), + ): + self._sm.transition(NavState.FAILED) + return False + self._wait_for_route_segment_costmap() + success = self._execute_route(route_nodes, target) + + # If the map was updated mid-execution, replan from scratch. + if not success and self._map_updated_during_nav: + self._map_updated_during_nav = False + self.get_logger().info( + "[NAV] Replanning after mid-navigation map update", + ) + return self._navigate(target) + + if not success and not self._cancelled and not self._preempted: + self._sm.transition(NavState.FAILED) + self._publish_status("FAILED") + return success + + def _route_from_closest_edge(self, target): + """Return a route that starts with the closest edge when applicable. + + The closest edge is a directed graph edge, so preserving it in the + route is necessary to preserve its action. For bidirectional edges, + each direction is a candidate and the direction with the shortest + complete route to *target* is selected. + + Returns ``None`` when the closest-edge heuristic is not applicable. + Returns an empty list when it is applicable but no continuation to + *target* exists, preventing a silent fallback that would discard the + closest edge action. + """ + closest_edges = getattr(self, '_closest_edges', None) + distances = getattr(closest_edges, 'distances', []) + edge_ids = getattr(closest_edges, 'edge_ids', []) + if ( + not distances + or distances[0] > self._max_dist_to_closest_edge + ): + return None + + candidates = [] + min_distance = distances[0] + for edge_id, distance in zip(edge_ids, distances): + if distance != min_distance: + break + for source, destination, edge_data in self._graph.edges(data=True): + if edge_data.get('edge_id') != edge_id: + continue + remainder = plan_route( + self._graph, destination, target, + logger=self.get_logger(), + algorithm=self._route_algorithm, + weight=self._route_weight, + ) + if remainder: + route = [source] + remainder + candidates.append(( + get_route_distance(self._graph, route), + route, + )) + break - def execute_action_fail_recovery(self, edge, destination_node, route, idx, origin_node, target): + if not candidates: + self.get_logger().error( + "[NAV] Closest edge is within threshold but no route " + "continues to '%s'" % target, + ) + return [] + + candidates.sort(key=lambda candidate: candidate[0]) + return candidates[0][1] + + def _wait_for_route_segment_costmap(self): + """Allow Nav2's static layer to ingest the newly published corridor.""" + # Some tests and downstream users construct the server with __new__ + # for isolated route execution. Preserve the zero-delay legacy + # behaviour when __init__ has not populated the parameter yet. + delay = max( + 0.0, + float(getattr(self, "_route_segment_settle_time", 0.0)), + ) + if delay <= 0.0: + return + self.get_logger().info( + "[MAP] Waiting %.2f s for global costmap route update" % delay, + ) + time.sleep(delay) + + def _determine_origin(self, target): + """Best origin: current_node > closest-edge > closest_node.""" + if self._current_node not in ("none", "Unknown"): + return self._current_node + + if ( + self._closest_edges.distances + and self._closest_edges.distances[0] + <= self._max_dist_to_closest_edge + ): + origin = self._origin_from_closest_edge(target) + if origin: + return origin + + if self._closest_node != "Unknown": + return self._closest_node + return None + + def _origin_from_closest_edge(self, target): + eids = self._closest_edges.edge_ids + + def _src(eid): + if not eid: + return None + for u, _v, d in self._graph.edges(data=True): + if d.get('edge_id') == eid: + return u + return None + + src1 = _src(eids[0] if eids else None) + if src1 is None: + return self._closest_node + + if len(eids) > 1 and len(self._closest_edges.distances) > 1: + src2 = _src(eids[1]) + if ( + src2 + and self._closest_edges.distances[0] + == self._closest_edges.distances[1] + ): + r1 = plan_route( + self._graph, src1, target, + algorithm=self._route_algorithm, + weight=self._route_weight, + ) + r2 = plan_route( + self._graph, src2, target, + algorithm=self._route_algorithm, + weight=self._route_weight, + ) + d1 = get_route_distance(self._graph, r1) if r1 else float('inf') + d2 = get_route_distance(self._graph, r2) if r2 else float('inf') + return src1 if d1 <= d2 else src2 + return src1 + + # ================================================================= + # Route execution + # ================================================================= + + def _execute_route(self, route_nodes, target): + """Execute a planned route segment by segment. + + Between segments the method checks for buffered map updates. + If the map changed, the remaining route is validated; if any + node or edge is now missing the method signals a replan by + setting ``_map_updated_during_nav`` and returning ``False``. """ - This function wraps `execute_action` by executing the fail_policy in case of ABORTED action - The fail policy sometimes modifies the current route by including the recovery action + self._navigation_activated = True + self._map_updated_during_nav = False + + route_edges = get_route_edges(self._graph, route_nodes) + if not route_edges: + self.get_logger().error("[EXEC] No edges in route") + return False + + segments = merge_action_segments( + route_edges, map_actions=self._map_actions or None, + ) + + self.get_logger().info( + "[EXEC] %d edges -> %d segment(s):" + % (len(route_edges), len(segments)), + ) + for i, seg in enumerate(segments): + self.get_logger().info( + " [%d] %s x%d: %s -> %s" % ( + i, seg.action_type, seg.num_edges, + seg.first_source, seg.last_target, + ), + ) + + # Track which node index the current segment starts at so we + # can validate the *remaining* route after a map update. + node_idx = 0 + + for si, seg in enumerate(segments): + if self._cancelled or self._preempted: + self._sm.transition(NavState.CANCELLED) + self._publish_status("CANCELLED") + return False + + # -- Safe point: apply any buffered map update ----------- + if self._apply_pending_map(): + self.get_logger().info( + "[EXEC] Map updated between segments", + ) + if not self._validate_remaining_route( + route_nodes, node_idx, + ): + self.get_logger().warning( + "[EXEC] Remaining route invalid after map " + "update -- requesting replan", + ) + self._map_updated_during_nav = True + return False + # Route still valid on new graph; re-derive segments + # from the remaining nodes so edge lookups use the + # updated ``self._tmap``. + remaining_nodes = route_nodes[node_idx:] + route_edges = get_route_edges( + self._graph, remaining_nodes, + ) + if not route_edges: + self.get_logger().warning( + "[EXEC] No edges after re-derive -- replan", + ) + self._map_updated_during_nav = True + return False + segments = merge_action_segments( + route_edges, + map_actions=self._map_actions or None, + ) + # Restart the segment loop with updated segments + return self._execute_remaining_segments( + segments, route_nodes[node_idx:], target, + ) + + is_final = si == len(segments) - 1 + ok = self._execute_segment(seg, is_final, si, len(segments)) + if not ok: + if self._cancelled or self._preempted: + self._sm.transition(NavState.CANCELLED) + self._publish_status("CANCELLED") + return False + + # Advance node_idx past the nodes consumed by this segment + node_idx += seg.num_edges + + self._sm.transition(NavState.SUCCEEDED) + self._publish_status("SUCCEEDED") + return True + + def _execute_remaining_segments( + self, segments, route_nodes, target, + ): + """Continue segment execution after a mid-route map update. + + This is factored out of ``_execute_route`` to avoid resetting + the segment loop counter. The logic is identical. """ - nav_ok, inc = self.execute_action(edge, destination_node, origin_node) - new_route = route - recovering = False - replanned = False - # this means the action is aborted -> execute the fail policy - # make sure that if the goal is cancelled by the client we don't enter here - if not nav_ok and not self.preempted: - self.get_logger().info("\t>> route: {}".format(route)) - route_updated = False - while not route_updated: - policy, state = self.get_fail_policy_state(edge) - if state < len(policy): - rec_action = policy[state] - self.get_logger().info(">> EXECUTING FAIL POLICY ACTION: {}.".format(rec_action)) - if rec_action[0] == "retry": - new_route.source.insert(idx+1, route.source[idx]) - new_route.edge_id.insert(idx+1, route.edge_id[idx]) - route_updated = True - recovering = True - replanned = False - elif rec_action[0] == "fail": - route_updated = True - recovering = False - replanned = False - elif rec_action[0] == "wait": - recovering = True - replanned = False - elif rec_action[0] == "replan": - _route = self.rsearch.search_route(origin_node["node"]["name"], target, avoid_edges=[edge["edge_id"]]) - _route = self.enforce_navigable_route(_route, target) - new_route.source = route.source[:idx] + _route.source - new_route.edge_id = route.edge_id[:idx] + _route.edge_id - route_updated = True - recovering = True - replanned = True - else: - # clean the current fail policy data - self.executing_fail_policy = {} - recovering = False - replanned = False - - self.get_logger().info("\t>> new route: {}".format(new_route)) - return nav_ok, inc, recovering, new_route, replanned - - def execute_actions(self, edges, destination_nodes, origin_nodes=None, action_name=None, is_execpolicy=False): - inc = 0 - result = True - self.goal_reached = False - self.prev_status = None - - self.edge_action_manager.initialise(self.bt_trees, edges, destination_nodes, origin_nodes, - action_name=action_name, in_row_operation=self.use_in_row_operation, is_execpolicy=is_execpolicy) - self.edge_action_manager.execute() - status = self.edge_action_manager.get_state() - self.pub_status(status) - - if ((status == GoalStatus.STATUS_EXECUTING or status == GoalStatus.STATUS_UNKNOWN) and not self.cancelled and not self.goal_reached): + node_idx = 0 + + for si, seg in enumerate(segments): + if self._cancelled or self._preempted: + self._sm.transition(NavState.CANCELLED) + self._publish_status("CANCELLED") + return False + + # Check for *another* map update + if self._apply_pending_map(): + self.get_logger().info( + "[EXEC] Map updated again between segments", + ) + if not self._validate_remaining_route( + route_nodes, node_idx, + ): + self._map_updated_during_nav = True + return False + remaining_nodes = route_nodes[node_idx:] + route_edges = get_route_edges( + self._graph, remaining_nodes, + ) + if not route_edges: + self._map_updated_during_nav = True + return False + segments = merge_action_segments( + route_edges, + map_actions=self._map_actions or None, + ) + return self._execute_remaining_segments( + segments, route_nodes[node_idx:], target, + ) + + is_final = si == len(segments) - 1 + ok = self._execute_segment(seg, is_final, si, len(segments)) + if not ok: + if self._cancelled or self._preempted: + self._sm.transition(NavState.CANCELLED) + self._publish_status("CANCELLED") + return False + + node_idx += seg.num_edges + + self._sm.transition(NavState.SUCCEEDED) + self._publish_status("SUCCEEDED") + return True + + def _execute_segment(self, segment, is_final, seg_idx, total): + """Execute one action segment.""" + action = segment.action_type + exec_state = ACTION_TO_STATE.get( + action, NavState.EXECUTING_NAVIGATE_TO_POSE, + ) + self._sm.transition(exec_state) + self._publish_status(exec_state.value) + + self.get_logger().info( + "[SEG %d/%d] %s x%d: %s -> %s" % ( + seg_idx + 1, total, action, segment.num_edges, + segment.first_source, segment.last_target, + ), + ) + + # Publish boundary polygon if edges carry boundary props + self._publish_segment_boundary(segment) + + # Pre-flight: validate all edges + edge_dicts = [] + for edata in segment.edge_data: + if self._cancelled or self._preempted: + return False + + src = edata['source'] + tgt = edata['target'] + eid = edata.get('edge_id', '') + + ed = get_edge_from_id_tmap2(self._tmap, src, eid) + if not ed: + self.get_logger().error( + " Edge '%s' (%s->%s): lookup failed" + % (eid, src, tgt), + ) + self._stat = nav_stats(src, tgt, self._topol_map, eid) + self._stat.map_hash = self._map_hash + self._stat.failure_reason = "lookup_failed" + self._stat.set_ended(self._current_node) + self._stat.status = "failed" + self._publish_stats() + return False + + edge_dicts.append(ed) + + # Build and send goal + self._current_target = segment.last_target + self._publish_current_edge( + segment.edge_ids[0] if segment.edge_ids else "none", + ) + + # Apply segment parameters (query current values, set new ones). + # Parameters are restored unconditionally in the finally block + # so that changes are undone whether the segment succeeds, + # fails, or is cancelled/aborted. + prev_params = self._apply_segment_parameters(segment) + + self.get_logger().info( + " Sending %d-wp %s goal" % (segment.num_edges, action), + ) + + goal = self._build_segment_goal(segment, is_final) + + start_time = datetime.now() + # Fallback context for the exception/shutdown safety net -- cleared + # once the per-edge outcome below has been logged normally. + self._pending_segment = (segment, start_time) + + info = self._action_clients.get(action) + client = info['client'] if info else None + try: + self._publish_move_status( + segment.last_target or "?", action, "EXECUTING", + ) try: - self.get_logger().info(" Current status {} ".format(self.edge_action_manager.get_status_msg(status))) - self.pub_status(status) - except Exception as e: - pass - - res = self.edge_action_manager.get_result() - if status != GoalStatus.STATUS_SUCCEEDED: - if not self.goal_reached: - result = False - if status is GoalStatus.STATUS_CANCELED: - self.preempted = True - else: - result = True - else: - self.preempted = False - - if not res: - if not result: - inc = 1 + status = self._send_nav2_goal(goal, action_client=client) + finally: + # Restore parameters regardless of outcome (success, + # failure, cancellation, or exception). + self._restore_segment_parameters(prev_params) + except Exception as exc: + # Make sure an unexpected exception still yields a DB row + # instead of silently dropping the in-flight segment. + self.get_logger().error("[SEG] Unhandled exception: %s" % exc) + self._log_segment_edges( + segment, False, "exception:%s" % exc, + start_time, datetime.now(), + ) + self._pending_segment = None + return False + + self._publish_move_status( + segment.last_target or "?", action, _status_str(status), + ) + + end_time = datetime.now() + overall_ok = status == GoalStatus.STATUS_SUCCEEDED or self._goal_reached + failure_reason = "none" + if not overall_ok: + if status == GoalStatus.STATUS_CANCELED: + failure_reason = "cancelled" + self._preempted = True else: - inc = 0 - - status = self.edge_action_manager.get_state() - self.pub_status(status) + failure_reason = _status_str(status).lower() + + self._log_segment_edges( + segment, overall_ok, failure_reason, start_time, end_time, + ) + self._pending_segment = None + + if overall_ok: + self.get_logger().info( + " Segment OK: %s -> %s (%.1fs)" % ( + segment.first_source, segment.last_target, + (end_time - start_time).total_seconds(), + ), + ) + self._goal_reached = False + else: + self.get_logger().warning( + " Segment FAILED: %s -> %s (%s)" % ( + segment.first_source, segment.last_target, + _status_str(status), + ), + ) + return False + + self._publish_current_edge("none") + return True + + def _log_segment_edges( + self, segment, overall_ok, failure_reason, start_time, end_time, + ): + """Record one traversal row per edge in ``segment``. + + On success every edge is logged as ``"success"``. On failure the + edges actually completed (inferred from ``self._current_node`` + against the segment's node sequence) are logged as ``"success"``, + the edge at the failure boundary is logged as ``"failed"``/ + ``"aborted"``, and any edges beyond that point -- never attempted + -- are left unlogged rather than given a placeholder row. + """ + n = segment.num_edges + if n == 0: + return - self.get_logger().info("Navigation action status: {}, goal reached: {}, inc: {}".format(self.edge_action_manager.get_status_msg(status), result, inc)) - return result, inc, status - - def execute_action(self, edge, destination_node, origin_node=None): - inc = 0 - result = True - self.goal_reached = False - self.prev_status = None - - if self.using_restrictions and edge["edge_id"] != "navigation_action_edge": - self.get_logger().info("Evaluating restrictions on edge {}".format(edge["edge_id"])) - ev_edge_msg = EvaluateEdge() - ev_edge_msg.edge = edge["edge_id"] - ev_edge_msg.runtime = True - future = self.evaluate_edge_srv.call_async(ev_edge_msg) - while rclpy.ok(): - rclpy.spin_once(self,) - if future.done(): - resp = future.result() - break - if resp.success and resp.evaluation: - self.get_logger().warning("The edge is restricted, stopping navigation") - result = False - inc = 1 - return result, inc - - self.get_logger().info("Evaluating restrictions on node {}".format(destination_node["node"]["name"])) - ev_node_msg = EvaluateNode() - ev_node_msg.node = destination_node["node"]["name"] - ev_node_msg.runtime = True - future = self.evaluate_node_srv.call_async(ev_node_msg) - while rclpy.ok(): - rclpy.spin_once(self,) - if future.done(): - resp = future.result() - break - if resp.success and resp.evaluation: - self.get_logger().warning("The node is restricted, stopping navigation") - result = False - inc = 1 - return result, inc - - self.edge_action_manager.initialise(self.bt_trees, edge, destination_node, origin_node) - self.edge_action_manager.execute() - status = self.edge_action_manager.get_state() - self.pub_status(status) - - if ((status == GoalStatus.STATUS_EXECUTING or status == GoalStatus.STATUS_UNKNOWN) and not self.cancelled and not self.goal_reached): + if overall_ok: + boundary = n + else: + node_seq = [segment.source_nodes[0]] + list(segment.target_nodes) try: - self.get_logger().info(" Current status {} ".format(self.edge_action_manager.get_status_msg(status))) - self.pub_status(status) - except Exception as e: - pass - - res = self.edge_action_manager.get_result() - if status != GoalStatus.STATUS_SUCCEEDED: - if not self.goal_reached: - result = False - if status is GoalStatus.STATUS_CANCELED: - self.preempted = True - else: - result = True - - if not res: - if not result: - inc = 1 + boundary = node_seq.index(self._current_node) + except ValueError: + boundary = 0 + boundary = min(boundary, n - 1) + + for i in range(n): + if i < boundary: + edge_status = "success" + elif i == boundary and not overall_ok: + edge_status = "aborted" if failure_reason == "cancelled" else "failed" else: - inc = 0 - - status = self.edge_action_manager.get_state() - self.pub_status(status) - - self.get_logger().info("Navigation action status: {}, goal reached: {}, inc: {}".format(self.edge_action_manager.get_status_msg(status), result, inc)) - return result, inc - - - def pub_status(self, status): - if status != self.prev_status: - d = {} - d["goal"] = self.edge_action_manager.destination_node["node"]["name"] - d["final_goal"] = self.final_goal - d["action"] = self.edge_action_manager.current_action.upper() - d["status"] = self.edge_action_manager.get_status_msg(status) - msg = String() - msg.data = json.dumps(d) - self.move_act_pub.publish(msg) - self.prev_status = status -################################################################################################################### + continue # not attempted -- leave absent from the DB + + src = segment.source_nodes[i] + tgt = segment.target_nodes[i] + eid = segment.edge_ids[i] + + stat = nav_stats(src, tgt, self._topol_map, eid) + stat.map_hash = self._map_hash + stat.is_segment = n > 1 + stat.segment_edge_ids = list(segment.edge_ids) + stat.edge_length = get_route_distance(self._graph, [src, tgt]) + stat.status = edge_status + if edge_status != "success": + stat.failure_reason = failure_reason + # Per-edge timing isn't available from a single multi-waypoint + # Nav2 goal; approximate with the whole segment's timestamps. + stat.date_started = start_time + stat.date_at_node = start_time + stat.date_finished = end_time + stat.get_operation_time() + stat.get_time_to_wp() + + self._stat = stat + self._publish_stats() + + # ================================================================= + # Boundary publishing + # ================================================================= + + def _publish_segment_boundary(self, segment): + """Publish a boundary polygon if edges have boundary properties. + + Checks whether any edge in the segment carries + ``boundary_left`` or ``boundary_right`` properties. If so, + a corridor polygon is computed and published. Otherwise an + empty polygon is published to clear any previous boundary. + """ + has_boundary = any( + 'boundary_left' in ed.get('properties', {}) + or 'boundary_right' in ed.get('properties', {}) + for ed in segment.edge_data + ) + if not has_boundary: + self._publish_empty_boundary() + return + + frame_id = self._node_nav_frame(segment.first_source) + poly = compute_boundary_polygon( + self._graph, segment, + default_left=self._route_white_extension_m, + default_right=self._route_white_extension_m, + ) + if poly: + self._publish_boundary(poly, frame_id) + else: + self.get_logger().warning( + "[BOUNDARY] Cannot compute boundary polygon", + ) + self._publish_empty_boundary(frame_id) + + # ================================================================= + # Helpers + # ================================================================= + + def _cancel_current_nav(self): + if self._navigation_activated: + self.get_logger().info("[CANCEL] Stopping current nav") + self._cancel_nav2_goal(timeout_sec=2.0) + self._cancelled = True + self._navigation_activated = False + # Reset state machine so next goal can transition to PLANNING + if not self._sm.is_terminal() and self._sm.state != NavState.READY: + self._sm.transition(NavState.CANCELLED) + if self._sm.is_terminal(): + self._sm.reset() + + +# ===================================================================== +# Entry point +# ===================================================================== def main(): rclpy.init(args=None) - update_params_control_server = ParameterUpdaterNode("controller_server") - edge_action_manager_server = EdgeActionManager("edge_action_manager") - node = TopologicalNavServer('topological_navigation', update_params_control_server, edge_action_manager_server) - - executor = MultiThreadedExecutor() - - executor.add_node(update_params_control_server) - executor.add_node(edge_action_manager_server) - executor.add_node(node) + node = None + executor = None try: + node = TopologicalNavServer('topological_navigation') + executor = MultiThreadedExecutor() + executor.add_node(node) executor.spin() except KeyboardInterrupt: - node.get_logger().info('shutting down localisation node\n') - node.destroy_node() - rclpy.shutdown() + try: + if node is not None and rclpy.ok(): + node.get_logger().info("[SHUTDOWN] Keyboard interrupt") + except Exception: + pass + finally: + try: + if executor is not None and node is not None: + executor.remove_node(node) + except Exception: + pass + try: + if node is not None: + node.destroy_node() + except Exception: + pass + try: + if rclpy.ok(): + rclpy.shutdown() + except Exception: + pass + if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/topological_navigation/topological_navigation/scripts/navstats_logger.py b/topological_navigation/topological_navigation/scripts/navstats_logger.py deleted file mode 100755 index 3ad75ead..00000000 --- a/topological_navigation/topological_navigation/scripts/navstats_logger.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python2 - - -import calendar -from datetime import datetime - -import rospy - -from topological_navigation_msgs.msg import NavStatistics -from mongodb_store.message_store import MessageStoreProxy - -class TopologicalNavStatsSaver(object): - """ - Class for Topological Navigation stats logging - - """ - def __init__(self) : - rospy.Subscriber('topological_navigation/Statistics', NavStatistics, self.statsCallback) - - rospy.spin() - - def statsCallback(self, msg): - #print "---------------------------------------------------" - meta = {} - meta["type"] = "Topological Navigation Stat" - epoch = datetime.strptime(msg.date_at_node, '%A, %B %d %Y, at %H:%M:%S hours').timetuple()# .time() - #print calendar.timegm(epoch) - meta["epoch"] = calendar.timegm(epoch)#calendar.timegm(self.stat.date_at_node.timetuple()) - meta["date"] = msg.date_at_node - meta["pointset"] = msg.topological_map - - #print meta - - msg_store = MessageStoreProxy(collection='nav_stats') - msg_store.insert(msg,meta) - - -if __name__ == '__main__': - mode="normal" - rospy.init_node('topological_navstats_logger') - server = TopologicalNavStatsSaver() \ No newline at end of file diff --git a/topological_navigation/topological_navigation/scripts/occupancy_checker.py b/topological_navigation/topological_navigation/scripts/occupancy_checker.py deleted file mode 100755 index 57ec01eb..00000000 --- a/topological_navigation/topological_navigation/scripts/occupancy_checker.py +++ /dev/null @@ -1,315 +0,0 @@ -import rclpy -from rclpy.node import Node -from rclpy.executors import MultiThreadedExecutor -from geometry_msgs.msg import PoseArray, PoseStamped -import math -import tf2_ros -import tf2_geometry_msgs -import yaml -import numpy as np -import tf_transformations -from std_msgs.msg import String -from visualization_msgs.msg import Marker, MarkerArray -from rclpy.qos import QoSProfile, DurabilityPolicy -from topological_navigation_msgs.msg import TopologicalOccupiedNode - -# =============================================================== -# UTILS -# =============================================================== -def load_waypoints_from_tmap(file_path): - """ - Loads and parses a tmap file, and pre-transforms the local vertices of each - waypoint into the global 'map' frame. - """ - try: - with open(file_path, 'r') as file: - tmap_data = yaml.safe_load(file) - - waypoints_data = {} - for node_entry in tmap_data.get('nodes', []): - try: - node_name = node_entry['node']['name'] - pos = node_entry['node']['pose']['position'] - orient = node_entry['node']['pose']['orientation'] - - # Create the transformation matrix for this waypoint - translation = [pos['x'], pos['y'], pos['z']] - rotation = [orient['x'], orient['y'], orient['z'], orient['w']] - - trans_matrix = tf_transformations.translation_matrix(translation) - rot_matrix = tf_transformations.quaternion_matrix(rotation) - transform_matrix = np.dot(trans_matrix, rot_matrix) - - # Transform local vertices into map frame vertices - local_verts = node_entry['node'].get('verts', []) - map_frame_verts = [] - for vert in local_verts: - # Represent local vertex as a 4D point for matrix multiplication - local_point = np.array([vert['x'], vert['y'], 0, 1]) - map_point = np.dot(transform_matrix, local_point) - # Store the transformed (x, y) coordinates - map_frame_verts.append((map_point[0], map_point[1])) - - # Store the pre-transformed data - waypoints_data[node_name] = { - 'pose': (pos['x'], pos['y']), - 'verts': map_frame_verts - } - - except KeyError as e: - continue - - return waypoints_data - - except Exception as e: - return {} - - -# =============================================================== -# NODE A: The Transformer Class -# =============================================================== -class PoseTransformerNode(Node): - def __init__(self): - super().__init__('pose_transformer') - self.tf_buffer = tf2_ros.Buffer() - self.tf_listener = tf2_ros.TransformListener(self.tf_buffer, self) - self.publisher = self.create_publisher(PoseArray, '/plan_in_map_frame', 10) - self.create_subscription(PoseArray, '/rownav_teb_poses', self.plan_callback, 10) - self.get_logger().info('Pose Transformer component has started.') - - def plan_callback(self, msg): - """ - Transforms a PoseStamped from the odom frame to the map frame using TF2. - """ - poses = [] - - # Check if the transform is available before proceeding - try: - self.tf_buffer.lookup_transform('map', msg.header.frame_id, rclpy.time.Time()) - except tf2_ros.TransformException as ex: - self.get_logger().error(f'Could not transform {msg.header.frame_id} to map: {ex}') - return - - for pose_odom in msg.poses: - - pose_stamped_in = PoseStamped() - pose_stamped_in.header = msg.header - pose_stamped_in.pose = pose_odom - - try: - timeout = rclpy.duration.Duration(seconds=0.1) - transformed_pose_stamped = self.tf_buffer.transform(pose_stamped_in, 'map', timeout) - poses.append(transformed_pose_stamped.pose) - - except tf2_ros.TransformException as ex: - self.get_logger().error(f'Could not transform {msg.header.frame_id} to map: {ex}') - continue - - # Publish the transformed poses - if poses: - msgnew = PoseArray() - msgnew.header.frame_id = 'map' - msgnew.header.stamp = msg.header.stamp - msgnew.poses = poses - self.publisher.publish(msgnew) - - -# =============================================================== -# NODE B: The Checker Class -# =============================================================== -class OccupancyCheckerNode(Node): - def __init__(self): - super().__init__('occupancy_checker') - - # 1. DECLARE PARAMETERS for file path and threshold - self.declare_parameter('tmap', rclpy.Parameter.Type.STRING) - self.declare_parameter('occupancy_threshold', rclpy.Parameter.Type.DOUBLE) - - # 2. GET PARAMETER VALUES - self.tmap_path = self.get_parameter('tmap').get_parameter_value().string_value - self.occupancy_threshold = self.get_parameter('occupancy_threshold').get_parameter_value().double_value - - # 3. subscribe to the '/plan_in_map_frame' topic. - self.create_subscription(PoseArray, '/plan_in_map_frame', self.teb_poses_cb, 10) - self.create_subscription(String, '/topological_navigation/current_destination', self.current_destination_cb, 10) - - # 4. Load waypoints from the specified topological map file - self.tmap = load_waypoints_from_tmap(self.tmap_path) - - # 5. Create Publisher and State variable to only publish when the set of waypoints changes - self.occupancy_pub = self.create_publisher(TopologicalOccupiedNode, '/topological_navigation/occupied_node', 10) - self.last_published_wps = set() - self.current_destination = None - - self.get_logger().info('Occupancy Checker has started.') - if self.tmap: - self.get_logger().info(f'Successfully loaded and now monitoring {len(self.tmap)} waypoints.') - else: - self.get_logger().warn('No waypoints loaded. Please check the topological map file path.') - return - self.get_logger().info(f'occupancy threshold is {self.occupancy_threshold} meters.') - - - def teb_poses_cb(self, msg): - """ - Callback to check if any received pose overlaps with waypoints. - Uses a polygon check if vertices are available, otherwise uses a distance threshold. - """ - occupied_wps = set() - if self.current_destination is not None: occupied_wps.add(self.current_destination) - for i, pose in enumerate(msg.poses): - for wp, wp_data in self.tmap.items(): - is_occupied = False - verts = wp_data.get('verts', []) - if verts: - if self._is_inside_polygon(pose.position.x, pose.position.y, verts): - is_occupied = True - occupied_wps.add(wp) - else: - self.get_logger().warn("Checking overlap using DISTANCE THRESHOLD.") - waypoint_pose = wp_data['pose'] - distance = math.hypot(pose.position.x - waypoint_pose[0], pose.position.y - waypoint_pose[1]) - - if distance < self.occupancy_threshold: - self.get_logger().warn(f"OCCUPANCY: Pose #{i} is NEAR Waypoint {wp} (using distance check).") - is_occupied = True - occupied_wps.add(wp) - - if is_occupied: - break - - if occupied_wps != self.last_published_wps: - # Create the message object - occupancy_msg = TopologicalOccupiedNode() - occupancy_msg.nodes = list(occupied_wps) - self.occupancy_pub.publish(occupancy_msg) - - # Log the change for debugging - if occupancy_msg.nodes: self.get_logger().debug(f"Occupied nodes: {occupancy_msg.nodes}") - - # Update the state for the next check - self.last_published_wps = occupied_wps - - def current_destination_cb(self, msg: String): - self.current_destination = msg.data - - def _is_inside_polygon(self, point_x, point_y, polygon_verts): - num_verts = len(polygon_verts) - is_inside = False - p1_x, p1_y = polygon_verts[0] - for i in range(1, num_verts + 1): - p2_x, p2_y = polygon_verts[i % num_verts] # Use modulo to wrap around to the first vertex - if point_y > min(p1_y, p2_y): - if point_y <= max(p1_y, p2_y): - if point_x <= max(p1_x, p2_x): - if p1_y != p2_y: - # Calculate the x-intersection of the line - x_intersection = (point_y - p1_y) * (p2_x - p1_x) / (p2_y - p1_y) + p1_x - if p1_x == p2_x or point_x <= x_intersection: - is_inside = not is_inside - - p1_x, p1_y = p2_x, p2_y - - return is_inside - - -# # ============================================================================== -# # NODE C: The Visualiser Class -# # ============================================================================== -# class WaypointVisualiserNode(Node): -# """ -# Subscribes to the list of occupied waypoints and publishes visualization markers. -# """ -# def __init__(self): -# super().__init__('occupied_waypoint_visualiser') -# self.declare_parameter('tmap', rclpy.Parameter.Type.STRING) -# self.tmap_path = self.get_parameter('tmap').get_parameter_value().string_value -# self.tmap = load_waypoints_from_tmap(self.tmap_path) - -# self.last_marker_count = 0 - -# latching_qos = QoSProfile(depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL) -# self.marker_pub = self.create_publisher(MarkerArray, '/topological_navigation/visual/occupied_node', latching_qos) - -# self.create_subscription(TopologicalOccupiedNode, '/topological_navigation/occupied_node', self.occupancy_cb, 10) -# self.get_logger().info('Waypoint Visualiser component has started.') - -# def occupancy_cb(self, msg): -# waypoint_names = msg.nodes if msg.nodes else [] -# marker_array = MarkerArray() - -# # Create ADD markers for all currently occupied waypoints -# for i, wp_name in enumerate(waypoint_names): -# wp_data = self.tmap.get(wp_name) -# if not wp_data: continue - -# marker = Marker() -# marker.header.frame_id = "map" -# marker.header.stamp = self.get_clock().now().to_msg() -# marker.ns = "occupied_waypoints" -# marker.id = i -# marker.type = Marker.SPHERE -# marker.action = Marker.ADD - -# pose_coords = wp_data['pose'] -# marker.pose.position.x = pose_coords[0] -# marker.pose.position.y = pose_coords[1] -# marker.pose.position.z = 0.15 # Lift it off the ground slightly -# marker.pose.orientation.w = 1.0 - -# marker.scale.x = 1.0 -# marker.scale.y = 1.0 -# marker.scale.z = 0.1 - -# marker.color.r = 1.0 # Red -# marker.color.g = 0.0 -# marker.color.b = 0.0 -# marker.color.a = 0.8 # Slightly transparent - -# marker_array.markers.append(marker) - -# # Create DELETE markers for any old markers that are no longer needed -# for i in range(len(waypoint_names), self.last_marker_count): -# marker = Marker() -# marker.header.frame_id = "map" -# marker.ns = "occupied_waypoints" -# marker.id = i -# marker.action = Marker.DELETE -# marker_array.markers.append(marker) - -# self.marker_pub.publish(marker_array) -# self.last_marker_count = len(waypoint_names) - -# =============================================================== -# The Main Execution Block -# =============================================================== -def main(args=None): - rclpy.init(args=args) - - # Create instances of both nodes - transformer_node = PoseTransformerNode() - checker_node = OccupancyCheckerNode() - # visualizer_node = WaypointVisualiserNode() - - # Create a MultiThreadedExecutor - executor = MultiThreadedExecutor() - - # Add both nodes to the executor - executor.add_node(transformer_node) - executor.add_node(checker_node) - # executor.add_node(visualizer_node) - - try: - # Spin the executor to run both nodes - executor.spin() - except KeyboardInterrupt: - pass - finally: - executor.shutdown() - transformer_node.destroy_node() - checker_node.destroy_node() - # visualizer_node.destroy_node() - rclpy.shutdown() - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/topological_navigation/topological_navigation/scripts/param_processing.py b/topological_navigation/topological_navigation/scripts/param_processing.py deleted file mode 100644 index 2519e630..00000000 --- a/topological_navigation/topological_navigation/scripts/param_processing.py +++ /dev/null @@ -1,139 +0,0 @@ -from rcl_interfaces.srv import SetParameters, GetParameters, ListParameters -from rcl_interfaces.msg import ParameterDescriptor, ParameterValue, ParameterType -from rclpy import Parameter -import rclpy -from rclpy.node import Node -from rclpy.executors import SingleThreadedExecutor - -from rclpy.callback_groups import ReentrantCallbackGroup - -class ParameterUpdaterNode(Node): - def __init__(self, server_name): - super().__init__(server_name + '_param_update_node') - self.callback_group = ReentrantCallbackGroup() - self.cli_set_param = self.create_client(SetParameters, '/' + server_name + '/set_parameters', callback_group=self.callback_group) - self.cli_list_params = self.create_client(ListParameters, '/' + server_name + '/list_parameters' , callback_group=self.callback_group) - self.cli_get_params = self.create_client(GetParameters, '/' + server_name + '/get_parameters', callback_group=self.callback_group) - counter = -1 - while not self.cli_set_param.wait_for_service(timeout_sec=1.0): - self.get_logger().warning('service not available, waiting again... {}'.format('/' + server_name + '/set_parameters')) - counter += 1 - if(counter > 2): - self.get_logger().warning('service not available {}'.format('/' + server_name + '/set_parameters')) - counter = 0 - break - - if(counter == 0): - self.get_logger().error('service /{} is not available'.format(server_name)) - else: - self.get_logger().info('service /{} is not available'.format(server_name)) - - self.internal_executor = SingleThreadedExecutor() - - def get_parameter_value(self, parameter_value): - if parameter_value.type == Parameter.Type.INTEGER: - return parameter_value.integer_value - elif parameter_value.type == Parameter.Type.DOUBLE: - return parameter_value.double_value - elif parameter_value.type == Parameter.Type.BOOL: - return parameter_value.bool_value - elif parameter_value.type == Parameter.Type.STRING: - return parameter_value.string_value - elif parameter_value.type == Parameter.Type.INTEGER_ARRAY: - return parameter_value.integer_array_value - elif parameter_value.type == Parameter.Type.DOUBLE_ARRAY: - return parameter_value.double_array_value - elif parameter_value.type == Parameter.Type.BOOL_ARRAY: - return parameter_value.bool_array_value - elif parameter_value.type == Parameter.Type.STRING_ARRAY: - return parameter_value.string_array_value - else: - # Handle unsupported or unknown types - return None - - def set_params(self, params): - self.req = SetParameters.Request() - self.req.parameters = [] - for key, value in params.items(): - param_name, param_value = key, value - self.req.parameters.append(Parameter(name=param_name, value=param_value).to_parameter_msg()) - - while not self.cli_set_param.wait_for_service(timeout_sec=0.5): - return False - - self.future = self.cli_set_param.call_async(self.req) - while rclpy.ok(): - try: - rclpy.spin_once(self, executor=self.internal_executor) - if self.future.done(): - try: - response = self.future.result().results - if response[0].successful: - return True - except Exception as e: - self.get_logger().error(" Error while setting params {} ".format(e)) - return False - return False - except Exception as e: - self.get_logger().error(" Error while setting params {} ".format(e)) - return False - - def list_params(self, ): - self.req_list = ListParameters.Request() - while not self.cli_set_param.wait_for_service(timeout_sec=0.5): - return [] - self.future = self.cli_list_params.call_async(self.req_list) - while rclpy.ok(): - try: - rclpy.spin_once(self, executor=self.internal_executor) - if self.future.done(): - try: - response = self.future.result().result - if response: - return response.names - except Exception as e: - self.get_logger().error("Error while list_params list {}".format(e)) - return [] - except Exception as e: - self.get_logger().error("Error while list_params list {}".format(e)) - return [] - - def get_params(self, ): - param_names = self.list_params() - param_values = {} - params = {} - self.req_get = GetParameters.Request() - self.req_get.names = param_names - while not self.cli_set_param.wait_for_service(timeout_sec=0.5): - return {} - self.future = self.cli_get_params.call_async(self.req_get) - while rclpy.ok(): - try: - rclpy.spin_once(self, executor=self.internal_executor) - if self.future.done(): - try: - response = self.future.result() - if response: - param_values = response.values - break - except Exception as e: - self.get_logger().error("Error while getting paramer list {}".format(e)) - break - except Exception as e: - self.get_logger().error("Error while getting paramer list {}".format(e)) - break - if param_values: - for key, value in zip(param_names, param_values): - - params[key] = self.get_parameter_value(value) - return params - - -# if __name__ == '__main__': -# rclpy.init(args=None) -# try_params = ParameterUpdaterNode("controller_server") -# # params = try_params.get_params() -# # try_params.get_logger().info(" {}".format(params)) - -# params = {'FollowPath.xy_goal_tolerance': 0.3} -# try_params.set_params(params) \ No newline at end of file diff --git a/topological_navigation/topological_navigation/scripts/reconf_at_edges_server.py b/topological_navigation/topological_navigation/scripts/reconf_at_edges_server.py deleted file mode 100755 index d4248ca9..00000000 --- a/topological_navigation/topological_navigation/scripts/reconf_at_edges_server.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python -import rospy, dynamic_reconfigure.client -from topological_navigation_msgs.srv import ReconfAtEdges, ReconfAtEdgesResponse - - -class reconf_at_edges_server(object): - - - def __init__(self): - self.edge_groups = rospy.get_param("/edge_nav_reconfig_groups", {}) - rospy.Service('reconf_at_edges', ReconfAtEdges, self.handle_reconf_at_edges) - - - def handle_reconf_at_edges(self, req): - - self.success = False - - for group in self.edge_groups: - - if req.edge_id in self.edge_groups[group]["edges"]: - rospy.loginfo("\nSetting parameters for edge group {} ...".format(group)) - - self.set_parameters(group) - break - - return ReconfAtEdgesResponse(self.success) - - - def set_parameters(self, group): - - try: - for param in self.edge_groups[group]["parameters"]: - print("Setting {} = {}".format("/".join((param["ns"], param["name"])), param["value"])) - - rcnfclient = dynamic_reconfigure.client.Client(param["ns"], timeout=5.0) - rcnfclient.update_configuration({param["name"]: param["value"]}) - - self.success = True - - except rospy.ROSException as e: - rospy.logerr(e) - - - - -if __name__ == "__main__": - - rospy.init_node('reconf_at_edges_server', anonymous=True) - reconf_at_edges_server() - rospy.spin() -##################################################################################### \ No newline at end of file diff --git a/topological_navigation/topological_navigation/scripts/restrictions_manager.py b/topological_navigation/topological_navigation/scripts/restrictions_manager.py deleted file mode 100755 index cf12e513..00000000 --- a/topological_navigation/topological_navigation/scripts/restrictions_manager.py +++ /dev/null @@ -1,382 +0,0 @@ -#!/usr/bin/env python -import rospy -import sympy -import copy -import json -import yaml -import sys -import os -import inspect -from topological_navigation_msgs.srv import RestrictMap, RestrictMapResponse,\ - EvaluateNode, EvaluateNodeResponse, EvaluateEdge, EvaluateEdgeResponse -from topological_navigation.manager2 import map_manager_2 -from topological_navigation_msgs.msg import TopologicalMap -from topological_navigation_msgs.srv import GetTaggedNodes, GetTaggedNodesRequest -from std_msgs.msg import String -from sympy.parsing.sympy_parser import parse_expr -from topological_navigation.restrictions_impl import * - - -class RestrictionsManager(): - def __init__(self, robots, tasks, out_topic): - self.robots = robots - self.tasks = tasks - - # here are the conditions that can be evaluiated in the predicates - self.conditions = {} - # get the topological map - self.topo_map = None - # dictionary of nodes indexed by name - self.nodes = {} - # dictionary of edges indexed by name - self.edges = {} - # for each node contains the indexes of the nodes which have an edge ending in it - self.back_edges_idx = {} - - - # publishers for restricted tmap - self.restricted_tmap_pub = rospy.Publisher(out_topic, - TopologicalMap, queue_size=10, latch=True) - self.restricted_tmap2_pub = rospy.Publisher( - "{}_2".format(out_topic), String, queue_size=10, - latch=True) - - def register_restriction(self, condition_obj): - """ This method receive a condition implementing AbstractRestriction class that can be evaluated""" - self.conditions.update({ - condition_obj.name: condition_obj - }) - rospy.loginfo( - "New condition `{}` registered".format(condition_obj.name)) - - def register_connections(self): - rospy.Subscriber("/topological_map_2", - String, self._topomap_cb) - rospy.loginfo("Restrictions manager waiting for the Topological Map...") - while self.topo_map is None: - rospy.sleep(0.5) - rospy.loginfo("Restrictions manager received the Topological Map") - - rospy.Service("restrictions_manager/restrict_planning_map", - RestrictMap, self.restrict_planning_map_handle) - rospy.Service("restrictions_manager/restrict_runtime_map", - RestrictMap, self.restrict_runtime_map_handle) - rospy.Service("restrictions_manager/evaluate_node", - EvaluateNode, self.evaluate_node_handle) - rospy.Service("restrictions_manager/evaluate_edge", - EvaluateEdge, self.evaluate_edge_handle) - - # Create a predicate from the restrictions string and returns the conditions to be checked - def _predicate_from_string(self, restriction_str): - predicate = True - if restriction_str == "": - restriction_str = "True" - try: - predicate = parse_expr(restriction_str) - except Exception as e: - rospy.logerr( - "The restriction expression is malformed, error: {}".format(e)) - rospy.logerr("The expression can contain the following conditions: {}\n and the following boolean symbols: &, |, ~, (, ).".format( - self.conditions.keys())) - else: - if isinstance(predicate, dict): - rospy.logerr( - "The restriction expression is malformed: {}".format(predicate)) - predicate = True - elif not isinstance(predicate, bool): - conds = predicate.atoms() - for cond in conds: - cond_els = cond.name.split("_") - if cond_els[0] not in self.conditions.keys(): - rospy.logwarn("The restriction `{}` has not been implemented yet, setting `{} = False`.".format( - cond_els[0], cond.name)) - # setting the restriction to false - predicate = predicate.subs({ - cond.name: False - }) - predicate = predicate.simplify() - return predicate - - def _evaluate_restrictions(self, restrictions, entity_name, robot_state, for_node=True): - # print("evaluate restrictions `{}` for {} and robot_state {}".format(restrictions, entity_name, robot_state)) - - # get the sympy boolean predicate removing the atoms that cannot be grounded - restriction_predicate = self._predicate_from_string(restrictions) - # print("\tsimplified predicate: {}".format(restriction_predicate)) - - # evaluate each restriction of the predicate until it simplifies to a boolean - while not isinstance(restriction_predicate, bool) and\ - not restriction_predicate is sympy.true and \ - not restriction_predicate is sympy.false: - restriction = restriction_predicate.atoms().pop() - restr_elements = restriction.name.split("_") - condition = self.conditions[restr_elements[0]] - if for_node: - evaluation = condition.evaluate_node( - node = entity_name, - value = restr_elements[1] if len( - restr_elements) > 1 else None, - robot_state=robot_state, - tmap=self.topo_map - ) - else: - evaluation = condition.evaluate_edge( - edge = entity_name, - value = restr_elements[1] if len( - restr_elements) > 1 else None, - robot_state=robot_state, - tmap=self.topo_map - ) - # print("\tsubstituting {} to {}".format(evaluation, restriction.name)) - - # ground the restriction and simplify the predicate - restriction_predicate = restriction_predicate.subs({ - restriction.name: evaluation - }).simplify() - - # print("\t\t res: {}, {}".format( - # restriction_predicate, type(restriction_predicate))) - - # here we negate because if the restriction matches (True) it means the robot is allowed to pass (not restricted) - return not restriction_predicate - - def restrict_planning_map_handle(self, request): - response = RestrictMapResponse() - response.success = True - - new_topo_map = self._restrict_map_handle(request, "restrictions_planning") - - response.restricted_tmap = json.dumps(new_topo_map) - - return response - - def restrict_runtime_map_handle(self, request): - response = RestrictMapResponse() - response.success = True - - new_topo_map = self._restrict_map_handle(request, "restrictions_runtime") - - response.restricted_tmap = json.dumps(new_topo_map) - - return response - - def evaluate_node_handle(self, request): - response = EvaluateNodeResponse() - response.success = True - - try: - robot_state = eval(request.state) - except: - # rospy.logwarn("Robot state data conversion to dictionary not valid, skip message") - robot_state = {} - - if request.node not in self.nodes: - response.success = False - rospy.logwarn("Received node name {} which is not present in the tmap".format(request.node)) - else: - if request.runtime: - node_restrictions = self.nodes[request.node]["node"]["restrictions_runtime"] - else: - node_restrictions = self.nodes[request.node]["node"]["restrictions_planning"] - - response.evaluation = self._evaluate_restrictions(node_restrictions, request.node, robot_state, for_node=True) - - return response - - def evaluate_edge_handle(self, request): - response = EvaluateEdgeResponse() - response.success = True - try: - robot_state = eval(request.state) - except: - # rospy.logwarn("Robot state data conversion to dictionary not valid, skip message") - robot_state = {} - - if request.edge not in self.edges: - response.success = False - rospy.logwarn("Received edge name {} which is not present in the tmap".format(request.edge)) - else: - if request.runtime: - edge_restrictions = self.edges[request.edge]["restrictions_runtime"] - else: - edge_restrictions = self.edges[request.edge]["restrictions_planning"] - - response.evaluation = self._evaluate_restrictions(edge_restrictions, request.edge, robot_state, for_node=False) - - return response - - def satisfy_runtime_restrictions(self, request): - response = SatisfyRuntimeResponse() - response.success = True - response.satisfied = True - - if request.edge not in self.edges: - response.success = False - rospy.logwarn("Received edge name {} which is not present in the tmap".format(request.edge)) - else: - edge_restrictions = self.edges[request.edge]["restrictions_runtime"] - - predicate = self._predicate_from_string(edge_restrictions) - if not isinstance(predicate, bool) and\ - not predicate is sympy.true and \ - not predicate is sympy.false: - # satisfy the restrictions of each atom for now...but it doesn't make much sense conceptually - for atom in predicate.atoms(): - restriction_name = atom.name.split("_")[0] - - response.satisfied = response.satisfied and self.conditions[restriction_name].satisfy_restriction() - - return response - - def _restrict_map_handle(self, request, restrictions_arg): - new_topo_map = copy.deepcopy(self.topo_map) - robot_state = {} - try: - robot_state = eval(request.state) - except: - pass - # rospy.logwarn("Robot state data conversion to dictionary not valid, skip message") - # robot_state = None - finally: - # tmp_topo_map = copy.deepcopy(self.topo_map) - to_remove_edges = {} - to_remove_nodes = set({}) - # for each node, check restrictions - for i, node in enumerate(self.topo_map["nodes"]): - node_restrictions = str(node["node"][restrictions_arg]) - - is_restricted = self._evaluate_restrictions(node_restrictions, node["meta"]["node"], robot_state, for_node=True) - - # remove the node if the restriction evaluates as True - if is_restricted: - # print("{}\n\tremoving node {}".format( - # node_restrictions, new_topo_map["nodes"][i]["meta"]["node"])) - to_remove_nodes.add(i) - - # remove all the back edges - for (ni, ei) in self.back_edges_idx[node["meta"]["node"]].items(): - # print("\n\t removing edge {}".format( - # new_topo_map["nodes"][ni]["node"]["edges"][ei]["edge_id"])) - if ni in to_remove_edges: - to_remove_edges[ni].add(ei) - else: - to_remove_edges.update({ni: set({ei})}) - else: - # here now check the restrictions for the node's edges - for ei, edge in enumerate(node["node"]["edges"]): - edge_restrictions = str(edge[restrictions_arg]) - - is_restricted = self._evaluate_restrictions(edge_restrictions, edge["edge_id"], robot_state, for_node=False) - - if is_restricted: - # print("{}\n\t removing edge {}".format(node_restrictions, - # new_topo_map["nodes"][i]["node"]["edges"][ei]["edge_id"])) - if i in to_remove_edges: - to_remove_edges[i].add(ei) - else: - to_remove_edges.update({i: set({ei})}) - - # now remove all the edges - for ni, eis in to_remove_edges.items(): - for ei in sorted(eis, reverse=True): - del new_topo_map["nodes"][ni]["node"]["edges"][ei] - # now remove all the nodes - for ni in sorted(to_remove_nodes, reverse=True): - del new_topo_map["nodes"][ni] - - return new_topo_map - - def _topomap_cb(self, msg): - rospy.loginfo("Received updated topomap") - self.topo_map = json.loads(msg.data) - # print("got topomap", self.topo_map["nodes"][0]) - - for ni, node in enumerate(self.topo_map["nodes"]): - self.nodes[node["meta"]["node"]] = node # save a dictionary of nodes - self.back_edges_idx[node["meta"]["node"]] = {} # it should contain all the nodes even if they don't have edges - for ei, edge in enumerate(node["node"]["edges"]): - self.edges[edge["edge_id"]] = edge # save a disctionary of edges - if edge["node"] in self.back_edges_idx: - self.back_edges_idx[edge["node"]].update({ - ni: ei - }) - else: - self.back_edges_idx.update({ - edge["node"]: {ni: ei} - }) - - rospy.loginfo("Creating restricted topomaps") - restricted_tmap2 = self._restrict_map_handle({}, "restrictions_planning") - - self._publish_updated_restricted_maps(restricted_tmap2) - rospy.loginfo("Restricted map updated and published") - - def _publish_updated_restricted_maps(self, restricted_tmap2): - self.restricted_tmap2_pub.publish(json.dumps(restricted_tmap2)) - - old_restricted_tmap = map_manager_2.convert_tmap2_to_tmap( - restricted_tmap2, restricted_tmap2["pointset"], restricted_tmap2["metric_map"]) - - self.restricted_tmap_pub.publish(old_restricted_tmap) - -def get_admissible_robots(config): - robots = [] - if "admissible_robot_ids" in config: - robots = config["admissible_robot_ids"] - - return robots - -def get_admissible_tasks(config): - tasks = [] - if "active_tasks" in config: - tasks = config["active_tasks"] - - return tasks - -if __name__ == '__main__': - rospy.init_node("topological_restrictions_manager") - - _tasks = [] - _robots = [] - - restricted_map_topic = rospy.get_param("~out_topic", "restricted_topological_map") - - try: - config_file = rospy.get_param("~config_file") - except KeyError: - rospy.logwarn("Config file not provided.") - pass - else: - # this is the coordinator config file - if os.path.isfile(config_file): - _config = {} - with open(config_file, "r") as f_handle: - _config = yaml.load(f_handle) - - # which robots can stay in the field - _robots = get_admissible_robots(_config) - # which tasks we can executed in the field - _tasks = get_admissible_tasks(_config) - - if len(_tasks) == 0: - rospy.logwarn("No admissible tasks read from config file.") - if len(_robots) == 0: - rospy.logwarn("No admissible robot read in config file.") - - manager = RestrictionsManager(robots=_robots, tasks=_tasks, out_topic=restricted_map_topic) - - # automatically find and register all the classes of AbstractRestriction type - clsmembers = inspect.getmembers(sys.modules[__name__], inspect.isclass) - for restriction in clsmembers: - if issubclass(restriction[1], AbstractRestriction) and not inspect.isabstract(restriction[1]): - cls_argnames = inspect.getargspec(restriction[1].__init__).args - args = {} - if "robots" in cls_argnames: - args["robots"] = _robots - if "tasks" in cls_argnames: - args["tasks"] = _tasks - manager.register_restriction(restriction[1](**args)) - - manager.register_connections() - - rospy.spin() diff --git a/topological_navigation/topological_navigation/scripts/search_route.py b/topological_navigation/topological_navigation/scripts/search_route.py deleted file mode 100755 index 870b38c7..00000000 --- a/topological_navigation/topological_navigation/scripts/search_route.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy -#import actionlib -#import pymongo -#import json -import sys -import math - - -#from geometry_msgs.msg import Pose -from std_msgs.msg import String -#import scitos_apps_msgs.msg - -#from topological_navigation_msgs.msg import TopologicalNode -#from mongodb_store.message_store import MessageStoreProxy - -from topological_navigation_msgs.msg import TopologicalMap -from topological_navigation.tmap_utils import * -from topological_navigation.route_search import * - - -class SearchRoute(object): - - def __init__(self, goal) : - rospy.loginfo("Waiting for Topological map ...") - - try: - msg = rospy.wait_for_message('topological_map', TopologicalMap, timeout=10.0) - self.top_map = msg - self.lnodes = msg.nodes - except rospy.ROSException : - rospy.logwarn("Failed to get topological map") - return - - rospy.loginfo("Waiting for Current Node ...") - - try: - msg = rospy.wait_for_message('closest_node', String, timeout=10.0) - cnode = msg.data - except rospy.ROSException : - rospy.logwarn("Failed to get closest node") - return - - - rsearch = TopologicalRouteSearch(self.top_map) - route = rsearch.search_route(cnode, goal) - print(route) - - rospy.loginfo("All Done ...") - #rospy.spin() - - -if __name__ == '__main__': - rospy.init_node('route_search') - goal = str(sys.argv[1]) - searcher = SearchRoute(goal) \ No newline at end of file diff --git a/topological_navigation/topological_navigation/scripts/speed_based_prediction.py b/topological_navigation/topological_navigation/scripts/speed_based_prediction.py deleted file mode 100755 index 105eef5c..00000000 --- a/topological_navigation/topological_navigation/scripts/speed_based_prediction.py +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy -import actionlib -import pymongo -import json -import sys -import math -import time - -from datetime import datetime - -import actionlib -from actionlib_msgs.msg import * -from geometry_msgs.msg import Pose -from geometry_msgs.msg import PoseStamped -from std_msgs.msg import Header -from std_msgs.msg import String -from nav_msgs.srv import * - - -import topological_navigation_msgs.msg -from topological_navigation_msgs.msg import TopologicalNode -from mongodb_store.message_store import MessageStoreProxy -from topological_navigation_msgs.msg import NavStatistics -from topological_navigation_msgs.msg import TopologicalMap - -from topological_navigation.tmap_utils import * - -from topological_navigation_msgs.srv import * - - -def usage(): - print("For using all the available stats use:") - print("\t rosrun topological_navigation topological_prediction.py") - print("For all the stats in a range use:") - print("\t rosrun topological_navigation topological_prediction.py from_epoch to_epoch") - print("For all the stats from a date until now use:") - print("\t rosrun topological_navigation topological_prediction.py from_epoch -1") - print("For all the stats until one date:") - print("\t rosrun topological_navigation topological_prediction.py 0 to_epoch") - - -class TopologicalSpeedPred(object): - - def __init__(self) : - - name= rospy.get_name() - action_name = name+'/build_temporal_model' - - rospy.Subscriber('topological_map', TopologicalMap, self.map_callback) - - rospy.loginfo("Waiting for Topological map ...") - - self.map_received = False - self.edge_to_duration = {} - - while not self.map_received: - rospy.sleep(rospy.Duration(1)) - rospy.loginfo("Waiting for Topological map ...") - - - rospy.loginfo("... Got Topological map") - - - #Creating Action Server - rospy.loginfo("Creating action server.") - self._as = actionlib.SimpleActionServer(action_name, topological_navigation_msgs.msg.BuildTopPredictionAction, execute_cb = self.build_callback, auto_start = False) - - rospy.loginfo(" ...starting") - self._as.start() - rospy.loginfo(" ...done") - - - self.predict_srv=rospy.Service('topological_prediction/predict_edges', topological_navigation_msgs.srv.PredictEdgeState, self.predict_edge_cb) - rospy.loginfo("All Done ...") - rospy.spin() - - - - def predict_edge_cb(self, req): - return self.edge_to_duration.keys(), [1] * len(self.edge_to_duration), self.edge_to_duration.values() - - """ - map_callback - - This function receives the topological map the computes duration estimates for all edges - """ - def map_callback(self, tmap) : - self.edge_to_duration = {} - - print('tmap ', tmap) - - for i in tmap.nodes : - print(i) - for j in i.edges: - print(j) - if j.edge_id not in self.edge_to_duration: - destination = get_node(tmap, j.node) - if j.top_vel >= 0.1: - self.edge_to_duration[j.edge_id] = rospy.Duration(get_distance_to_node(i, destination)/j.top_vel) - else : - self.edge_to_duration[j.edge_id] = rospy.Duration(get_distance_to_node(i, destination)/0.1) - - self.map_received = True - - """ - build_callback - - Does nothing for this version. - """ - def build_callback(self, goal): - self._as.set_succeeded() - - -if __name__ == '__main__': - rospy.init_node('topological_prediction') - server = TopologicalSpeedPred() diff --git a/topological_navigation/topological_navigation/scripts/topo_stats.py b/topological_navigation/topological_navigation/scripts/topo_stats.py new file mode 100644 index 00000000..1a7a2e15 --- /dev/null +++ b/topological_navigation/topological_navigation/scripts/topo_stats.py @@ -0,0 +1,1103 @@ +#!/usr/bin/env python3 +"""topo_stats – CLI tool for topological navigation statistics. + +This tool reads an SQLite database produced by the topological navigation +server and provides a variety of commands for inspecting stored maps and +traversal statistics. + +Usage +----- +:: + + python3 topo_stats.py [sub-command] [options] + +Top-level commands +------------------ +map + Operations on the stored topological maps table. +traversals + Operations on the recorded traversal statistics. +coverage + Route sign-off coverage reporting (summary/report/svg), computed from + the recorded traversal statistics against one or more stored maps. + +Run ``python3 topo_stats.py --help`` or +``python3 topo_stats.py --help`` for detailed help. + +Examples +-------- +List all stored maps:: + + python3 topo_stats.py /data/nav_stats.db map list + +Export a map to YAML:: + + python3 topo_stats.py /data/nav_stats.db map export my_field_map + +Show map metadata:: + + python3 topo_stats.py /data/nav_stats.db map show abc123def456 + +Calculate map road-network statistics:: + + python3 topo_stats.py /data/nav_stats.db map stats my_field_map + +Import a map YAML file:: + + python3 topo_stats.py /data/nav_stats.db map import /path/to/map.yaml + +Delete a stored map:: + + python3 topo_stats.py /data/nav_stats.db map rm my_field_map + +Merge another database's maps and traversals into this one:: + + python3 topo_stats.py /data/nav_stats.db map merge /data/run2.db /data/run3.db + +Coverage summary across all maps in the database:: + + python3 topo_stats.py /data/nav_stats.db coverage summary -a + +Coverage sign-off report for selected maps, filtered by node tag:: + + python3 topo_stats.py /data/nav_stats.db coverage report -m my_field_map \\ + --filter "tag:row_entry" -o coverage_report.md + +Coverage SVG for a map, filtered by node name pattern:: + + python3 topo_stats.py /data/nav_stats.db coverage svg -m my_field_map \\ + --filter "name:Row*" -o coverage.svg + +Coverage report for nodes with roboflow enabled in field 1 or 2:: + + python3 topo_stats.py /data/nav_stats.db coverage report -a \\ + --filter "property:roboflow.enabled and (property:field=1 or property:field=2)" \\ + -o field_1_2_signoff.md + +Show traversal summary for all maps:: + + python3 topo_stats.py /data/nav_stats.db traversals summary + +Show traversal summary filtered to a time window:: + + python3 topo_stats.py /data/nav_stats.db traversals summary \\ + --filter "start_time > '2024-01-01'" + +Per-edge statistics for a map:: + + python3 topo_stats.py /data/nav_stats.db traversals edge_stats my_field_map + +Per-edge statistics filtered to successful traversals only:: + + python3 topo_stats.py /data/nav_stats.db traversals edge_stats my_field_map \\ + --filter "status = 'success'" + +Whole-map traversal statistics:: + + python3 topo_stats.py /data/nav_stats.db traversals map_stats my_field_map + +Whole-map statistics for a specific time window with top-N failure report:: + + python3 topo_stats.py /data/nav_stats.db traversals map_stats my_field_map \\ + --filter "start_time BETWEEN '2024-01-01' AND '2024-06-01'" \\ + --topn_failures=5 --topn_success=5 +""" + +import argparse +import math +import sys +from pathlib import Path +from typing import Any, Dict, List, Optional + +import yaml + +from topological_navigation.nav_stats_db import NavStatsDB +from topological_navigation.networkx_utils import build_graph_from_tmap +from topological_navigation.coverage_analysis import ( + DEFAULT_MIN_SUCCESS_TRAVERSALS, + build_merged_graph_for_maps, + compute_coverage, + generate_coverage_svg, + render_markdown_report, + render_markdown_summary, + resolve_map_hashes, +) + + +# --------------------------------------------------------------------------- +# Formatting helpers +# --------------------------------------------------------------------------- + +def _round(value, decimals: int = 4): + """Round a float value, returning None if the input is None.""" + if value is None: + return None + try: + return round(float(value), decimals) + except (TypeError, ValueError): + return None + + +def _fmt(value, decimals: int = 4, na: str = "N/A") -> str: + """Format a numeric value for table display.""" + if value is None: + return na + try: + return str(round(float(value), decimals)) + except (TypeError, ValueError): + return str(value) + + +def _markdown_table(headers: List[str], rows: List[List[str]]) -> str: + """Render *rows* as a GitHub-Flavoured Markdown table. + + All columns are left-aligned and padded to their widest value so the + table is readable in a fixed-width terminal as well as in Markdown + renderers. + """ + all_rows = [headers] + rows + widths = [max(len(str(cell)) for cell in col) for col in zip(*all_rows)] + sep = "| " + " | ".join("-" * w for w in widths) + " |" + + def _row(cells): + return "| " + " | ".join(str(c).ljust(w) for c, w in zip(cells, widths)) + " |" + + lines = [_row(headers), sep] + [_row(r) for r in rows] + return "\n".join(lines) + + +# --------------------------------------------------------------------------- +# Map graph helpers (no ROS, pure Python) +# --------------------------------------------------------------------------- + +def _parse_map_yaml(map_data: str) -> Optional[Dict[str, Any]]: + """Parse map YAML text, returning None on failure.""" + try: + return yaml.safe_load(map_data) or {} + except Exception as exc: + print("ERROR: Cannot parse map YAML: %s" % exc, file=sys.stderr) + return None + + +def _build_graph(tmap: Dict[str, Any]): + """Build a NetworkX graph from a parsed tmap dict (no logger).""" + return build_graph_from_tmap(tmap) + + +def _map_road_stats(tmap: Dict[str, Any]) -> Dict[str, Any]: + """Return basic road-network statistics for a topological map. + + Returns a dict with: + num_nodes, num_edges, total_length_m, bbox_area_sqm + """ + graph = _build_graph(tmap) + if graph is None: + return {"num_nodes": 0, "num_edges": 0, "total_length_m": 0.0, + "bbox_area_sqm": 0.0} + + num_nodes = graph.number_of_nodes() + num_edges = graph.number_of_edges() + + # Total roadmap length = sum of all edge Euclidean lengths + total_length = 0.0 + for u, v in graph.edges(): + dx = graph.nodes[v].get("x", 0) - graph.nodes[u].get("x", 0) + dy = graph.nodes[v].get("y", 0) - graph.nodes[u].get("y", 0) + total_length += math.hypot(dx, dy) + + # Bounding box area + xs = [graph.nodes[n].get("x", 0) for n in graph.nodes()] + ys = [graph.nodes[n].get("y", 0) for n in graph.nodes()] + if len(xs) >= 2: + bbox_area = (max(xs) - min(xs)) * (max(ys) - min(ys)) + else: + bbox_area = 0.0 + + return { + "num_nodes": num_nodes, + "num_edges": num_edges, + "total_length_m": round(total_length, 3), + "bbox_area_sqm": round(bbox_area, 3), + } + + +# --------------------------------------------------------------------------- +# 'map' sub-commands +# --------------------------------------------------------------------------- + +def cmd_map_list(db: NavStatsDB, _args) -> int: + """List all stored maps as a Markdown table.""" + maps = db.list_maps() + if not maps: + print("No maps stored in the database.") + return 0 + rows = [ + [ + str(m["id"]), + m["map_name"] or "", + m["map_hash"], + _fmt(m.get("latitude"), 8), + _fmt(m.get("longitude"), 8), + m.get("added_at") or "", + ] + for m in maps + ] + print(_markdown_table( + ["id", "map_name", "map_hash", "latitude", "longitude", "added_at"], + rows, + )) + return 0 + + +def cmd_map_show(db: NavStatsDB, args) -> int: + """Show metadata for a specific map.""" + m = db.get_map(args.identifier) + if m is None: + print("ERROR: Map '%s' not found." % args.identifier, file=sys.stderr) + return 1 + meta: Dict[str, Any] = { + "map_name": m["map_name"], + "map_hash": m["map_hash"], + "latitude": m.get("latitude"), + "longitude": m.get("longitude"), + "added_at": m.get("added_at"), + } + print(yaml.dump(meta, default_flow_style=False, sort_keys=True, + allow_unicode=True), end="") + return 0 + + +def cmd_map_export(db: NavStatsDB, args) -> int: + """Export a stored map to YAML (stdout).""" + m = db.get_map(args.identifier) + if m is None: + print("ERROR: Map '%s' not found." % args.identifier, file=sys.stderr) + return 1 + print(m["map_data"], end="") + return 0 + + +def cmd_map_import(db: NavStatsDB, args) -> int: + """Import a YAML map file into the database.""" + p = Path(args.yaml_file) + if not p.is_file(): + print("ERROR: File not found: %s" % args.yaml_file, file=sys.stderr) + return 1 + try: + map_yaml_str = p.read_text(encoding="utf-8") + except Exception as exc: + print("ERROR: Cannot read file '%s': %s" % (args.yaml_file, exc), + file=sys.stderr) + return 1 + # Validate YAML + tmap = _parse_map_yaml(map_yaml_str) + if tmap is None: + return 1 + map_hash = db.store_map(map_yaml_str) + map_name = tmap.get("name") or tmap.get("pointset") or "(unknown)" + print("Imported map '%s' (hash: %s)." % (map_name, map_hash)) + return 0 + + +def cmd_map_rm(db: NavStatsDB, args) -> int: + """Delete a stored map.""" + count = db.delete_map(args.identifier) + if count == 0: + print("ERROR: Map '%s' not found." % args.identifier, file=sys.stderr) + return 1 + print("Deleted %d map record(s) for '%s'." % (count, args.identifier)) + return 0 + + +def cmd_map_stats(db: NavStatsDB, args) -> int: + """Calculate road-network statistics for a stored map.""" + m = db.get_map(args.identifier) + if m is None: + print("ERROR: Map '%s' not found." % args.identifier, file=sys.stderr) + return 1 + tmap = _parse_map_yaml(m["map_data"]) + if tmap is None: + return 1 + road = _map_road_stats(tmap) + rows = [ + ["map_name", m["map_name"]], + ["map_hash", m["map_hash"]], + ["num_nodes", str(road["num_nodes"])], + ["num_edges", str(road["num_edges"])], + ["total_length_m", str(road["total_length_m"])], + ["bbox_area_sqm", str(road["bbox_area_sqm"])], + ] + print(_markdown_table(["metric", "value"], rows)) + return 0 + + +def cmd_map_merge(db: NavStatsDB, args) -> int: + """Merge one or more other databases' maps/traversals into this one.""" + total_maps_added = 0 + total_maps_skipped = 0 + total_trav_added = 0 + for other_path in args.other_databases: + if not Path(other_path).is_file(): + print("ERROR: Database not found: %s" % other_path, file=sys.stderr) + return 1 + result = db.merge_from(other_path) + print( + "Merged '%s': %d map(s) added, %d map(s) already present, " + "%d traversal record(s) added." + % ( + other_path, + result["maps_added"], + result["maps_skipped"], + result["traversals_added"], + ) + ) + total_maps_added += result["maps_added"] + total_maps_skipped += result["maps_skipped"] + total_trav_added += result["traversals_added"] + print( + "Done. Total: %d map(s) added, %d map(s) already present, " + "%d traversal record(s) added." % (total_maps_added, total_maps_skipped, total_trav_added) + ) + return 0 + + +# --------------------------------------------------------------------------- +# 'traversals' sub-commands +# --------------------------------------------------------------------------- + +def _resolve_map_identifier(db: NavStatsDB, identifier: str): + """Return (map_name, map_hash) for *identifier*, or exit on ambiguity.""" + m = db.get_map(identifier) + if m is None: + print("ERROR: Map '%s' not found in database." % identifier, + file=sys.stderr) + sys.exit(1) + return m["map_name"], m["map_hash"] + + +def cmd_traversals_summary(db: NavStatsDB, args) -> int: + """Summarise traversal counts per map with timing and basic stats.""" + where_clause = "" + if args.filter: + where_clause = "WHERE " + args.filter + sql = """ + SELECT + map_name, + map_hash, + COUNT(*) AS total, + SUM(CASE WHEN status='success' THEN 1 ELSE 0 END) AS success, + SUM(CASE WHEN status='failed' THEN 1 ELSE 0 END) AS failed, + SUM(CASE WHEN status='aborted' THEN 1 ELSE 0 END) AS aborted, + MIN(start_time) AS first_traversal, + MAX(end_time) AS last_traversal, + AVG(CASE WHEN duration_s IS NOT NULL THEN duration_s END) + AS avg_duration_s, + AVG(avg_speed) AS avg_speed_m_s + FROM traversals + {where} + GROUP BY map_name, map_hash + ORDER BY map_name, map_hash + """.format(where=where_clause) + + rows_data = db.query(sql) + if not rows_data: + print("No traversal records found matching the given filter.") + return 0 + + rows = [] + for r in rows_data: + total = r.get("total") or 0 + success = r.get("success") or 0 + failed = r.get("failed") or 0 + aborted = r.get("aborted") or 0 + rows.append([ + r.get("map_name") or "", + r.get("map_hash") or "", + str(total), + str(success), + str(failed), + str(aborted), + r.get("first_traversal") or "N/A", + r.get("last_traversal") or "N/A", + _fmt(r.get("avg_duration_s"), 2), + _fmt(r.get("avg_speed_m_s"), 4), + ]) + print(_markdown_table( + ["map_name", "map_hash", "total", "success", "failed", "aborted", + "first_traversal", "last_traversal", "avg_dur_s", "avg_spd_m/s"], + rows, + )) + return 0 + + +def cmd_traversals_edge_stats(db: NavStatsDB, args) -> int: + """Per-edge statistics for a specific map.""" + map_name, map_hash = _resolve_map_identifier(db, args.map_id) + + # Build WHERE combining map constraint with optional user filter + base_filter = "map_hash = '%s'" % map_hash + where = base_filter + if args.filter: + where += " AND (" + args.filter + ")" + + edge_ids = db.edge_ids(where=where) + if not edge_ids: + print("# No traversal records found for map '%s'." % args.map_id, + file=sys.stderr) + print("{}", flush=True) + return 0 + + edge_stats: Dict[str, Any] = {} + for eid in edge_ids: + s = db.edge_stats(eid, where=where) + if not s: + continue + edge_stats[eid] = { + "total_traversals": int(s.get("total") or 0), + "success": int(s.get("success") or 0), + "failed": int(s.get("failed") or 0), + "aborted": int(s.get("aborted") or 0), + "avg_duration_s": _round(s.get("avg_duration_s")), + "min_duration_s": _round(s.get("min_duration_s")), + "max_duration_s": _round(s.get("max_duration_s")), + "avg_speed_m_s": _round(s.get("avg_speed")), + "last_traversal": s.get("last_traversal"), + } + + output: Dict[str, Any] = { + "map_name": map_name, + "map_hash": map_hash, + "edge_statistics": edge_stats, + } + print( + yaml.dump(output, default_flow_style=False, sort_keys=True, + allow_unicode=True), + end="", + flush=True, + ) + return 0 + + +def cmd_traversals_map_stats(db: NavStatsDB, args) -> int: + """Whole-map traversal statistics across all edges.""" + map_name, map_hash = _resolve_map_identifier(db, args.map_id) + + base_filter = "map_hash = '%s'" % map_hash + where = base_filter + if args.filter: + where += " AND (" + args.filter + ")" + + sql = """ + SELECT + COUNT(*) AS total, + SUM(CASE WHEN status='success' THEN 1 ELSE 0 END) AS success, + SUM(CASE WHEN status='failed' THEN 1 ELSE 0 END) AS failed, + SUM(CASE WHEN status='aborted' THEN 1 ELSE 0 END) AS aborted, + SUM(CASE WHEN duration_s IS NOT NULL THEN duration_s ELSE 0 END) + AS total_time_s, + AVG(avg_speed) AS avg_speed_m_s, + MAX(avg_speed) AS max_speed_m_s + FROM traversals + WHERE {where} + """.format(where=where) + + agg = db.query(sql) + if not agg or agg[0].get("total") is None or agg[0]["total"] == 0: + print("# No traversal records found for map '%s'." % args.map_id, + file=sys.stderr) + print("{}", flush=True) + return 0 + + a = agg[0] + total = int(a.get("total") or 0) + success = int(a.get("success") or 0) + failed = int(a.get("failed") or 0) + aborted = int(a.get("aborted") or 0) + + def _pct(n): + return round(100.0 * n / total, 2) if total else 0.0 + + # Approximate total distance: sum of avg_speed * duration_s for successful + total_dist_sql = """ + SELECT SUM(avg_speed * duration_s) AS total_dist_m + FROM traversals + WHERE avg_speed IS NOT NULL AND duration_s IS NOT NULL AND {where} + """.format(where=where) + dist_rows = db.query(total_dist_sql) + total_dist_m = (dist_rows[0].get("total_dist_m") or 0.0) if dist_rows else 0.0 + + result: Dict[str, Any] = { + "map_name": map_name, + "map_hash": map_hash, + "total_traversals": total, + "total_distance_m": _round(total_dist_m, 3), + "total_time_s": _round(a.get("total_time_s"), 3), + "outcomes": { + "success": success, + "success_pct": _pct(success), + "failed": failed, + "failed_pct": _pct(failed), + "aborted": aborted, + "aborted_pct": _pct(aborted), + }, + "speed": { + "avg_m_s": _round(a.get("avg_speed_m_s")), + "max_m_s": _round(a.get("max_speed_m_s")), + }, + } + + # Top-N edges by failure count + topn_failures = getattr(args, "topn_failures", None) + if topn_failures: + sql_topn = """ + SELECT edge_id, + SUM(CASE WHEN status='failed' THEN 1 ELSE 0 END) AS cnt + FROM traversals + WHERE {where} + GROUP BY edge_id + ORDER BY cnt DESC + LIMIT {n} + """.format(where=where, n=int(topn_failures)) + result["top_edges_by_failures"] = [ + {"edge_id": r["edge_id"], "failed": int(r["cnt"] or 0)} + for r in db.query(sql_topn) + if (r.get("cnt") or 0) > 0 + ] + + # Top-N edges by success count + topn_success = getattr(args, "topn_success", None) + if topn_success: + sql_topn = """ + SELECT edge_id, + SUM(CASE WHEN status='success' THEN 1 ELSE 0 END) AS cnt + FROM traversals + WHERE {where} + GROUP BY edge_id + ORDER BY cnt DESC + LIMIT {n} + """.format(where=where, n=int(topn_success)) + result["top_edges_by_success"] = [ + {"edge_id": r["edge_id"], "success": int(r["cnt"] or 0)} + for r in db.query(sql_topn) + if (r.get("cnt") or 0) > 0 + ] + + # Top-N edges by aborted count + topn_aborted = getattr(args, "topn_aborted", None) + if topn_aborted: + sql_topn = """ + SELECT edge_id, + SUM(CASE WHEN status='aborted' THEN 1 ELSE 0 END) AS cnt + FROM traversals + WHERE {where} + GROUP BY edge_id + ORDER BY cnt DESC + LIMIT {n} + """.format(where=where, n=int(topn_aborted)) + result["top_edges_by_aborted"] = [ + {"edge_id": r["edge_id"], "aborted": int(r["cnt"] or 0)} + for r in db.query(sql_topn) + if (r.get("cnt") or 0) > 0 + ] + + print( + yaml.dump(result, default_flow_style=False, sort_keys=True, + allow_unicode=True), + end="", + flush=True, + ) + return 0 + + +# --------------------------------------------------------------------------- +# 'coverage' sub-commands +# --------------------------------------------------------------------------- + +def _resolve_coverage_maps(db: NavStatsDB, args) -> List[str]: + """Return the list of map identifiers selected by ``-a``/``-m``.""" + if getattr(args, "all_maps", False): + maps = db.list_maps() + if not maps: + print("ERROR: No maps stored in the database.", file=sys.stderr) + sys.exit(1) + return [m["map_hash"] for m in maps] + map_ids = getattr(args, "map_ids", None) or [] + if not map_ids: + print("ERROR: Specify at least one map with -m/--map, or use -a/--all.", + file=sys.stderr) + sys.exit(1) + return map_ids + + +def _build_coverage_report(db: NavStatsDB, args): + """Build (graph, report, map_names) for the given coverage CLI args.""" + map_ids = _resolve_coverage_maps(db, args) + graph = build_merged_graph_for_maps(db, map_ids) + map_hashes = resolve_map_hashes(db, map_ids) + map_names = [] + for map_id in map_ids: + m = db.get_map(map_id) + map_names.append(m["map_name"] or m["map_hash"]) + + report = compute_coverage( + graph, + db, + map_hashes, + filters=getattr(args, "filter", None), + exclude_filters=getattr(args, "exclude", None), + where=getattr(args, "sql_filter", None), + min_success=getattr(args, "min_success", DEFAULT_MIN_SUCCESS_TRAVERSALS), + ) + return graph, report, map_names + + +def cmd_coverage_summary(db: NavStatsDB, args) -> int: + """Print a brief Markdown coverage summary.""" + try: + _graph, report, _names = _build_coverage_report(db, args) + except ValueError as exc: + print("ERROR: %s" % exc, file=sys.stderr) + return 1 + print(render_markdown_summary(report), end="") + return 0 + + +def cmd_coverage_report(db: NavStatsDB, args) -> int: + """Generate a comprehensive Markdown sign-off report.""" + try: + _graph, report, map_names = _build_coverage_report(db, args) + except ValueError as exc: + print("ERROR: %s" % exc, file=sys.stderr) + return 1 + markdown = render_markdown_report(report, map_names=map_names) + if getattr(args, "output", None): + Path(args.output).write_text(markdown, encoding="utf-8") + print("Coverage report written to %s" % args.output) + else: + print(markdown, end="") + return 0 + + +def cmd_coverage_svg(db: NavStatsDB, args) -> int: + """Generate an SVG map coloured by coverage.""" + try: + graph, report, map_names = _build_coverage_report(db, args) + except ValueError as exc: + print("ERROR: %s" % exc, file=sys.stderr) + return 1 + title = args.title or ("Coverage: %s" % ", ".join(map_names)) + try: + generate_coverage_svg(graph, report, args.output, title=title) + except ValueError as exc: + print("ERROR: %s" % exc, file=sys.stderr) + return 1 + print("Coverage SVG written to %s" % args.output) + return 0 + + +# --------------------------------------------------------------------------- +# Argument parser +# --------------------------------------------------------------------------- + +def _build_parser() -> argparse.ArgumentParser: + p = argparse.ArgumentParser( + prog="topo_stats", + description=( + "topo_stats – CLI tool for topological navigation statistics.\n\n" + "Reads an SQLite database produced by the topological navigation " + "server and provides commands for inspecting stored maps and " + "traversal statistics." + ), + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=__doc__, + ) + p.add_argument("database", help="Path to the SQLite database file.") + + sub = p.add_subparsers(dest="command", metavar="") + sub.required = True + + # ------------------------------------------------------------------ + # 'map' command + # ------------------------------------------------------------------ + map_p = sub.add_parser( + "map", + help="Operations on stored topological maps.", + description="Manage topological maps stored in the stats database.", + ) + map_sub = map_p.add_subparsers(dest="map_subcommand", metavar="") + map_sub.required = True + + # map list + map_sub.add_parser( + "list", + help="List all stored maps as a Markdown table.", + ) + + # map show + show_p = map_sub.add_parser( + "show", + help="Show metadata for a specific map.", + ) + show_p.add_argument( + "identifier", + help="Map name or map hash.", + ) + + # map export + export_p = map_sub.add_parser( + "export", + help="Export a stored map as YAML to stdout.", + ) + export_p.add_argument( + "identifier", + help="Map name or map hash.", + ) + + # map import + import_p = map_sub.add_parser( + "import", + help="Import a map YAML file into the database.", + ) + import_p.add_argument( + "yaml_file", + help="Path to the YAML map file.", + ) + + # map rm + rm_p = map_sub.add_parser( + "rm", + help="Delete a stored map from the database.", + ) + rm_p.add_argument( + "identifier", + help="Map name or map hash.", + ) + + # map stats + stats_p = map_sub.add_parser( + "stats", + help=( + "Calculate road-network statistics for a stored map " + "(nodes, edges, total length, bounding-box area)." + ), + ) + stats_p.add_argument( + "identifier", + help="Map name or map hash.", + ) + + # map merge + merge_p = map_sub.add_parser( + "merge", + help=( + "Merge one or more other stats databases (maps + traversals) " + "into this one." + ), + description=( + "Merge maps and traversal records from other database files " + "into the target database given as the first CLI argument. " + "Each run of the navigation system typically produces its own " + "database; use this to combine several runs before computing " + "coverage across all of them." + ), + ) + merge_p.add_argument( + "other_databases", + nargs="+", + help="Path(s) to other SQLite database file(s) to merge in.", + ) + + # ------------------------------------------------------------------ + # 'traversals' command + # ------------------------------------------------------------------ + trav_p = sub.add_parser( + "traversals", + help="Operations on recorded traversal statistics.", + description=( + "Analyse traversal statistics stored in the database.\n\n" + "The optional --filter flag accepts any SQL WHERE expression " + "applied to the traversals table. Filter examples:\n" + " --filter \"start_time > '2024-01-01'\"\n" + " --filter \"status = 'success'\"\n" + " --filter \"start_time BETWEEN '2024-01-01' AND '2024-06-01'\"\n" + " --filter \"is_segment = 1\"" + ), + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + trav_sub = trav_p.add_subparsers( + dest="trav_subcommand", metavar="", + ) + trav_sub.required = True + + _filter_kwargs = dict( + metavar="SQL_EXPR", + default="", + help=( + "Optional SQL WHERE expression to restrict traversal records. " + "Example: \"start_time > '2024-01-01' AND status = 'success'\"" + ), + ) + + # traversals summary + summary_p = trav_sub.add_parser( + "summary", + help="Overview of traversal counts per map.", + ) + summary_p.add_argument("--filter", **_filter_kwargs) + + # traversals edge_stats + es_p = trav_sub.add_parser( + "edge_stats", + help="Per-edge statistics for a specific map (YAML output).", + description=( + "Calculate detailed statistics for each edge of the specified map.\n\n" + "Filter examples:\n" + " --filter \"status = 'success'\"\n" + " --filter \"start_time > '2024-01-01'\"\n" + " --filter \"is_segment = 0\"" + ), + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + es_p.add_argument("map_id", help="Map name or map hash.") + es_p.add_argument("--filter", **_filter_kwargs) + + # traversals map_stats + ms_p = trav_sub.add_parser( + "map_stats", + help="Whole-map traversal statistics (YAML output).", + description=( + "Calculate statistics across all edges of the specified map.\n\n" + "Filter examples:\n" + " --filter \"start_time BETWEEN '2024-01-01' AND '2024-06-01'\"\n" + " --filter \"status != 'aborted'\"\n\n" + "Top-N options (omit to skip that section):\n" + " --topn_failures=5 Top 5 edges by failure count\n" + " --topn_success=5 Top 5 edges by success count\n" + " --topn_aborted=5 Top 5 edges by aborted count" + ), + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + ms_p.add_argument("map_id", help="Map name or map hash.") + ms_p.add_argument("--filter", **_filter_kwargs) + ms_p.add_argument( + "--topn_failures", + type=int, + default=None, + metavar="N", + help="Report top N edges with the highest failure count.", + ) + ms_p.add_argument( + "--topn_success", + type=int, + default=None, + metavar="N", + help="Report top N edges with the highest success count.", + ) + ms_p.add_argument( + "--topn_aborted", + type=int, + default=None, + metavar="N", + help="Report top N edges with the highest aborted count.", + ) + + # ------------------------------------------------------------------ + # 'coverage' command + # ------------------------------------------------------------------ + cov_p = sub.add_parser( + "coverage", + help="Route sign-off coverage reporting (summary/report/svg).", + description=( + "Compute route sign-off coverage: the fraction of selected edges " + "with at least one recorded successful traversal, and the number " + "of traversals per edge.\n\n" + "Select which map(s) to analyse with repeatable -m/--map " + "(name or hash), or -a/--all to consider every stored map. When " + "several maps are selected, nodes/edges with the same name/ID " + "are merged and considered the same edge for coverage purposes.\n\n" + "Restrict which nodes (and their incident edges) are considered " + "with repeatable --filter/--exclude node-selector specs, each of " + "the form 'name:', 'tag:' or " + "'property:[=]', optionally combined with " + "'and'/'or'/'not' and parentheses, e.g. " + "'property:roboflow.enabled and (property:field=1 or property:field=2)'. " + "The selected set is the union of " + "every --filter match (or every node, if none given), minus any " + "--exclude match. All edges are still shown in the SVG, but " + "unselected ones are drawn in faint grey." + ), + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + cov_sub = cov_p.add_subparsers(dest="coverage_subcommand", metavar="") + cov_sub.required = True + + def _add_coverage_selection_args(sp: argparse.ArgumentParser) -> None: + group = sp.add_mutually_exclusive_group(required=True) + group.add_argument( + "-m", "--map", + dest="map_ids", + action="append", + metavar="MAP_ID", + help="Map name or hash to include (repeatable).", + ) + group.add_argument( + "-a", "--all", + dest="all_maps", + action="store_true", + help="Consider every map stored in the database.", + ) + sp.add_argument( + "--filter", + dest="filter", + action="append", + metavar="SPEC", + help=( + "Node selector: 'name:', 'tag:' or " + "'property:[=]', optionally combined with " + "'and'/'or'/'not' and parentheses, e.g. " + "'property:roboflow.enabled and (property:field=1 or property:field=2)' " + "(repeatable; multiple --filter specs are OR'd together)." + ), + ) + sp.add_argument( + "--exclude", + dest="exclude", + action="append", + metavar="SPEC", + help="Node selector to exclude (same syntax as --filter, repeatable).", + ) + sp.add_argument( + "--sql-filter", + dest="sql_filter", + metavar="SQL_EXPR", + default=None, + help="Optional SQL WHERE expression to restrict traversal records.", + ) + sp.add_argument( + "--min-success", + dest="min_success", + type=int, + default=DEFAULT_MIN_SUCCESS_TRAVERSALS, + metavar="N", + help=( + "Minimum number of recorded successful traversals an edge needs " + "before it is considered covered/signed off (default: %(default)s)." + ), + ) + + # coverage summary + cov_summary_p = cov_sub.add_parser( + "summary", + help="Brief Markdown summary of coverage.", + ) + _add_coverage_selection_args(cov_summary_p) + + # coverage report + cov_report_p = cov_sub.add_parser( + "report", + help="Comprehensive Markdown sign-off report of coverage.", + ) + _add_coverage_selection_args(cov_report_p) + cov_report_p.add_argument( + "-o", "--output", + metavar="FILE", + default=None, + help="Write the report to FILE instead of stdout.", + ) + + # coverage svg + cov_svg_p = cov_sub.add_parser( + "svg", + help="Render an SVG map coloured by coverage.", + ) + _add_coverage_selection_args(cov_svg_p) + cov_svg_p.add_argument( + "-o", "--output", + metavar="FILE", + required=True, + help="Path to write the generated SVG file to.", + ) + cov_svg_p.add_argument( + "--title", + default=None, + help="Optional title rendered at the top of the image.", + ) + + return p + + +# --------------------------------------------------------------------------- +# Dispatch +# --------------------------------------------------------------------------- + +_MAP_DISPATCH = { + "list": cmd_map_list, + "show": cmd_map_show, + "export": cmd_map_export, + "import": cmd_map_import, + "rm": cmd_map_rm, + "stats": cmd_map_stats, + "merge": cmd_map_merge, +} + +_TRAV_DISPATCH = { + "summary": cmd_traversals_summary, + "edge_stats": cmd_traversals_edge_stats, + "map_stats": cmd_traversals_map_stats, +} + +_COVERAGE_DISPATCH = { + "summary": cmd_coverage_summary, + "report": cmd_coverage_report, + "svg": cmd_coverage_svg, +} + + +def main(): + parser = _build_parser() + args = parser.parse_args() + + try: + db = NavStatsDB(args.database) + except Exception as exc: + print("ERROR: Cannot open database '%s': %s" % (args.database, exc), + file=sys.stderr) + sys.exit(1) + + try: + if args.command == "map": + handler = _MAP_DISPATCH.get(args.map_subcommand) + if handler is None: + parser.print_help() + sys.exit(1) + rc = handler(db, args) + + elif args.command == "traversals": + handler = _TRAV_DISPATCH.get(args.trav_subcommand) + if handler is None: + parser.print_help() + sys.exit(1) + rc = handler(db, args) + + elif args.command == "coverage": + handler = _COVERAGE_DISPATCH.get(args.coverage_subcommand) + if handler is None: + parser.print_help() + sys.exit(1) + rc = handler(db, args) + + else: + parser.print_help() + rc = 1 + + except Exception as exc: + print("ERROR: %s" % exc, file=sys.stderr) + rc = 1 + finally: + db.close() + + sys.exit(rc) + + +if __name__ == "__main__": + main() diff --git a/topological_navigation/topological_navigation/scripts/topological_prediction.py b/topological_navigation/topological_navigation/scripts/topological_prediction.py deleted file mode 100755 index 7dbee41b..00000000 --- a/topological_navigation/topological_navigation/scripts/topological_prediction.py +++ /dev/null @@ -1,770 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy -import actionlib -import random -import numpy - - -from threading import Lock -from datetime import datetime - - -import std_msgs.msg - -import topological_navigation_msgs.msg -from mongodb_store.message_store import MessageStoreProxy -from topological_navigation_msgs.msg import NavStatistics -from topological_navigation_msgs.msg import TopologicalMap - -from topological_navigation.tmap_utils import * - -from topological_navigation_msgs.srv import * -import fremenserver.msg - - -def usage(): - print("\nFor using all the available stats use:") - print("\t rosrun topological_navigation topological_prediction.py") - print("For all the stats in a range use:") - print("\t rosrun topological_navigation topological_prediction.py -range from_epoch to_epoch") - print("For all the stats from a date until now use:") - print("\t rosrun topological_navigation topological_prediction.py -range from_epoch -1") - print("For all the stats until one date:") - print("\t rosrun topological_navigation topological_prediction.py -range 0 to_epoch") - - -def get_model(name, models): - for i in models: - if i["model_id"] == name: - return i - return None - - -class TopologicalNavPred(object): - - _feedback = topological_navigation_msgs.msg.BuildTopPredictionFeedback() - _result = topological_navigation_msgs.msg.BuildTopPredictionResult() - - def __init__(self, epochs) : - rospy.on_shutdown(self._on_node_shutdown) - self.lnodes = [] - self.map_received =False - self.range = epochs - self.srv_lock=Lock() - name= rospy.get_name() - action_name = name+'/build_temporal_model' - - self.ignore_map_name = rospy.get_param("~ignore_map_name", False) - - if self.ignore_map_name: - rospy.logwarn("Ignoring map name in model creation. All stats will be considered") - print(self.ignore_map_name) - else: - rospy.logwarn("Using map name in model creation. Only stats for current map will be considered") - print(self.ignore_map_name) - - - # Creating fremen server client - rospy.loginfo("Creating fremen server client.") - self.FremenClient= actionlib.SimpleActionClient('fremenserver', fremenserver.msg.FremenAction) - self.FremenClient.wait_for_server() - rospy.loginfo(" ...done") - - - #Creating Action Server - rospy.loginfo("Creating action server.") - self._as = actionlib.SimpleActionServer(action_name, topological_navigation_msgs.msg.BuildTopPredictionAction, execute_cb = self.BuildCallback, auto_start = False) - self._as.register_preempt_callback(self.preemptCallback) - rospy.loginfo(" ...starting") - self._as.start() - rospy.loginfo(" ...done") - - - # Get Topological Map - rospy.Subscriber('topological_map', TopologicalMap, self.MapCallback) - - rospy.loginfo("Waiting for Topological map ...") - while not self.map_received: - rospy.sleep(rospy.Duration(1.0)) - #rospy.loginfo("Waiting for Topological map ...") - rospy.loginfo("... Got Topological map") - - - self.predict_srv=rospy.Service('topological_prediction/predict_edges', topological_navigation_msgs.srv.PredictEdgeState, self.predict_edge_cb) - self.predict_srv=rospy.Service('topological_prediction/edge_entropies', topological_navigation_msgs.srv.PredictEdgeState, self.edge_entropies_cb) - - - rospy.loginfo("Set-Up Fremenserver monitors") - #Fremen Server Monitor - self.fremen_monitor = rospy.Timer(rospy.Duration(10), self.monitor_cb) - # Subscribe to fremen server start topic - rospy.Subscriber('fremenserver_start', std_msgs.msg.Bool, self.fremen_start_cb) - rospy.loginfo("... Done") - - - rospy.loginfo("Subscribing to new stats ...") - rospy.Subscriber('topological_navigation/Statistics', NavStatistics, self.stats_callback, queue_size=10) - - rospy.loginfo("All Done ...") - rospy.spin() - - - - def MapCallback(self, msg) : - """ - MapCallback - - This function receives the Topological Map - """ - self.lnodes = msg - - if self.ignore_map_name: - self.model_base_name='topological-prediction' - else: - self.model_base_name= self.lnodes.name - - if self.map_received: - rospy.logwarn("New topological map detected will generate new models now") - with self.srv_lock: - self.create_temporal_models() - - self.map_received = True - - - def fremen_start_cb(self, msg) : - """ - fremen_start_cb - - This function creates the models when the fremenserver is started - """ - if msg.data: - rospy.logwarn("FREMENSERVER restart detected will generate new models now") - with self.srv_lock: - self.create_temporal_models() - - - def stats_callback(self, msg): - """ - stats_callback - - This function adds values to known models when an edge is traversed - """ - #print "New Stat: ", msg - model_name = self.model_base_name+'__'+msg.edge_id - #time_model_name = self.lnodes.name+'__'+msg.edge_id+'_time' - epoch = int(datetime.strptime(msg.date_started, "%A, %B %d %Y, at %H:%M:%S hours").strftime('%s')) - - model = get_model(model_name, self.models) - - if model: - time_model_name = model["time_model_id"] - distance = model['dist'] - - - #print epoch, model_name, time_model_name - - if msg.status in self.sucesses: - status = 1 - speed = distance/msg.operation_time - if speed>1: - speed=1.0 - #time = msg.operation_time - elif msg.status in self.fails: - status = 0 - speed = 0.0 - #time = msg.operation_time - - #print [status], time, [speed] - - fremgoal = fremenserver.msg.FremenGoal() - fremgoal.operation = 'add' - fremgoal.id = model_name - fremgoal.times = [epoch] - fremgoal.states = [status] - - # Sends the goal to the action server. - self.FremenClient.send_goal(fremgoal) - - # Waits for the server to finish performing the action. - self.FremenClient.wait_for_result() - - # Prints out the result of executing the action - ps = self.FremenClient.get_result() - - #print fremgoal, ps - - - fremgoalt = fremenserver.msg.FremenGoal() - fremgoalt.operation = 'addvalues' - fremgoalt.id = time_model_name - fremgoalt.times = [epoch] - fremgoalt.states = [0.5] - fremgoalt.values = [speed] - - # Sends the goal to the action server. - self.FremenClient.send_goal(fremgoalt) - - #print "Sending data to fremenserver" - - - # Waits for the server to finish performing the action. - self.FremenClient.wait_for_result() - - #print "fremenserver done" - - # Prints out the result of executing the action - ps = self.FremenClient.get_result() - #print fremgoalt, ps - else: - rospy.logwarn("Model %s hasn't been created yet. No info will be added to the models until models are built again" %model_name) - - - - - def create_temporal_models(self): - """ - create_temporal_models - - This function creates the temporal models used for prediction - """ - self.unknowns = [] - - rospy.loginfo("Creating Data Structures") - #start_time = rospy.Time.now() - self.get_list_of_edges() - #elapsed_time1 = rospy.Time.now()-start_time - #print elapsed_time1.secs+(elapsed_time1.nsecs/1e09) - rospy.loginfo("Gathering Data") - to_add=self.gather_stats() - #elapsed_time2 = rospy.Time.now()-start_time - #print elapsed_time2.secs+(elapsed_time2.nsecs/1e09) - rospy.loginfo("Create Fremen Models") - self.create_fremen_models(to_add) - rospy.loginfo(" ...done") - #elapsed_time3 = rospy.Time.now()-start_time - #print elapsed_time3.secs+(elapsed_time3.nsecs/1e09) - #print elapsed_time1.secs+(elapsed_time1.nsecs/1e09), elapsed_time2.secs+(elapsed_time2.nsecs/1e09) - - - def get_list_of_edges(self): - """ - get_list_of_edges - - This function creates the memory structures per edge of the topological map - """ - self.edgid=[] - self.eids = [] #Empty previous models - rospy.loginfo("Querying for list of edges") - for i in self.lnodes.nodes : - for j in i.edges: - if j.edge_id not in self.edgid : - self.edgid.append(j.edge_id) - val={} - val["edge_id"]=j.edge_id - val["model_id"]=self.model_base_name+'__'+j.edge_id - val["time_model_id"]=self.model_base_name+'__'+j.edge_id+'_time' - val["ori"]=i.name - val["dest"]=j.node - ddn=get_node(self.lnodes, j.node) - val["dist"]= get_distance_to_node(i,ddn) - self.eids.append(val) - fdbmsg = 'Done. %d edges found' %len(self.edgid) - rospy.loginfo(fdbmsg) - - - def gather_stats(self): - """ - gather_stats - - This function fill the data structures using the navigation stats - """ - stats_collection = rospy.get_param('~stats_collection', 'nav_stats') - msg_store = MessageStoreProxy(collection=stats_collection) - to_add=[] - - self.sucesses = rospy.get_param('topological_prediction/success_values', ['success','failed']) - self.fails = rospy.get_param('topological_prediction/fail_values', ['fatal']) - - rospy.set_param('topological_prediction/success_values',self.sucesses) - rospy.set_param('topological_prediction/fail_values',self.fails) - print("++++++++++++++++++++++++++++++++++") - print("++++++++++++++++++++++++++++++++++" ) - print("successes:") - print(self.sucesses) - print("fails:") - print(self.fails) - print("++++++++++++++++++++++++++++++++++") - print("++++++++++++++++++++++++++++++++++") - - - for i in self.eids: - if self.ignore_map_name: - query = {"edge_id":i["edge_id"]} - else: - query = {"topological_map": self.lnodes.name, "edge_id":i["edge_id"]} - query_meta={} - - if len(self.range) == 2: - if self.range[1] < 1: - upperlim = rospy.Time.now().secs - else: - upperlim = self.range[1] - query_meta["epoch"] = {"$gte": self.range[0], "$lt" : upperlim} - - #print query - #print query_meta - - available = msg_store.query(NavStatistics._type, query, query_meta) - # print len(available) - edge_mod={} - edge_mod["model_id"]= i["model_id"]#self.lnodes.name+'__'+i["edge_id"] - edge_mod["time_model_id"]=i["time_model_id"] - edge_mod["dist"]= i["dist"]#self.lnodes.name+'__'+i["edge_id"] - edge_mod["models"]=[] - edge_mod["order"]=-1 - edge_mod["t_order"]=-1 - edge_mod["edge_id"]=i["edge_id"] - - for j in available: - val = {} - if j[0].status in self.sucesses: - val["st"] = 1 - val["speed"] = i["dist"]/j[0].operation_time - if val["speed"]>1: - val["speed"]=1.0 - val["epoch"] = int(datetime.strptime(j[0].date_started, "%A, %B %d %Y, at %H:%M:%S hours").strftime('%s')) - val["optime"] = j[0].operation_time - edge_mod["models"].append(val) - elif j[0].status in self.fails: - val["st"] = 0 - val["speed"] = 0.0 - val["epoch"] = int(datetime.strptime(j[0].date_started, "%A, %B %d %Y, at %H:%M:%S hours").strftime('%s')) - val["optime"] = j[0].operation_time - edge_mod["models"].append(val) - - edge_mod["samples"]=len(edge_mod["models"]) - if len(available) > 0 : - to_add.append(edge_mod) - else : - self.unknowns.append(edge_mod) - return to_add - - - - def create_fremen_models(self, models): - self.models = models - for i in models: - # print "-------CREATING MODEL----------" - - mid = i["model_id"] - tmid = i["time_model_id"] - - print("Creating models:") - print(mid, tmid) - #print i["dist"] - stimes=[] - times=[] - states=[] - speeds=[] - #print "adding %d meassurements" %len(i["models"]) - for j in i["models"]: - times.append(j["epoch"]) - states.append(j["st"]) - #print j - if j["speed"]>0: - speeds.append(j["speed"]) - stimes.append(j["epoch"]) - i["order"] = self.add_and_eval_models(mid,times,states) - -# print "###########################################" -# print "Generating speed models: ", tmid -# print "epochs (%d): " %len(stimes) -# print stimes -# print "speeds (%d): " %len(speeds) -# print speeds - - i["t_order"] = self.add_and_eval_value_models(tmid,stimes,speeds) -# i["t_order"] = self.add_and_eval_models(tmid,stimes,speeds) - print("Done Model Order %d" %i["t_order"]) - print("samples", len(i["models"])) - print("------------------------------------") - #print times - #print states - - - def add_and_eval_models(self, model_id, epochs, states): - # Choosing the samples used for model building and evaluation - sampling_type = rospy.get_param('door_prediction/model_building/sampling_type', 0) #0 for ordered (extrapolation), 1 for random (intrapolation) - - if len(epochs)>0: - if sampling_type == 0: - #ordered sampling - - #samples for result sampling - index_b = range(int(numpy.ceil(len(epochs)*0.75))) - index_e = range(int(numpy.ceil(len(epochs)*0.75)),len(epochs)) - - else: - #random sampling - - #samples for result sampling - index_b = sorted(random.sample(xrange(len(epochs)), int(numpy.ceil(len(epochs)*0.8)))) - index_e = [] - for i in range(len(epochs)): - if i not in index_b: - index_e.append(i) - - if not index_e: - index_e = random.sample(xrange(len(epochs)), 1) - - epochs_build = [ epochs[i] for i in index_b] - epochs_eval = [ epochs[i] for i in index_e] - states_build = [ states[i] for i in index_b] - states_eval = [ states[i] for i in index_e] - - else: - epochs_build = epochs - epochs_eval = epochs - states_build = states - states_eval = states - - fremgoal = fremenserver.msg.FremenGoal() - fremgoal.operation = 'add' - fremgoal.id = model_id - fremgoal.times = epochs_build - fremgoal.states = states_build - - # Sends the goal to the action server. - self.FremenClient.send_goal(fremgoal) - - # Waits for the server to finish performing the action. - self.FremenClient.wait_for_result() - - # Prints out the result of executing the action - ps = self.FremenClient.get_result() - #print ps - - # print "--- EVALUATE ---" - frevgoal = fremenserver.msg.FremenGoal() - frevgoal.operation = 'evaluate' - frevgoal.id = model_id - frevgoal.times = epochs_eval - frevgoal.states = states_eval - frevgoal.order = 5 - - self.FremenClient.send_goal(frevgoal) - self.FremenClient.wait_for_result() - pse = self.FremenClient.get_result() - # print pse.errors - # print "chosen order %d" %pse.errors.index(min(pse.errors)) - return pse.errors.index(min(pse.errors)) - - - def add_and_eval_value_models(self, model_id, epochs, states): - # Choosing the samples used for model building and evaluation - sampling_type = rospy.get_param('door_prediction/model_building/sampling_type', 0) #0 for ordered (extrapolation), 1 for random (intrapolation) - - if len(epochs)>0: - if sampling_type == 0: - #ordered sampling - - #samples for result sampling - index_b = range(int(numpy.ceil(len(epochs)*0.75))) - index_e = range(int(numpy.ceil(len(epochs)*0.75)),len(epochs)) - - else: - #random sampling - - #samples for result sampling - index_b = sorted(random.sample(xrange(len(epochs)), int(numpy.ceil(len(epochs)*0.8)))) - index_e = [] - for i in range(len(epochs)): - if i not in index_b: - index_e.append(i) - - if not index_e: - index_e = random.sample(xrange(len(epochs)), 1) - - epochs_build = [ epochs[i] for i in index_b] - epochs_eval = [ epochs[i] for i in index_e] - states_build = [ states[i] for i in index_b] - states_eval = [ states[i] for i in index_e] - - else: - epochs_build = epochs - epochs_eval = epochs - states_build = states - states_eval = states - - - fremgoal = fremenserver.msg.FremenGoal() - fremgoal.operation = 'addvalues' - fremgoal.id = model_id - fremgoal.times = epochs_build - #fremgoal.states = states - fremgoal.values = states_build - - # Sends the goal to the action server. - self.FremenClient.send_goal(fremgoal) - - #print "Sending data to fremenserver" - - - # Waits for the server to finish performing the action. - self.FremenClient.wait_for_result() - - #print "fremenserver done" - - # Prints out the result of executing the action - ps = self.FremenClient.get_result() - #print "fremenserver result:" - #print ps - - # print "--- EVALUATE ---" - frevgoal = fremenserver.msg.FremenGoal() - frevgoal.operation = 'evaluate' - frevgoal.id = model_id - frevgoal.times = epochs_eval - frevgoal.states = states_eval - frevgoal.order = 5 - - # Sends the goal to the action server. - self.FremenClient.send_goal(frevgoal) - - # Waits for the server to finish performing the action. - self.FremenClient.wait_for_result() - - # Prints out the result of executing the action - pse = self.FremenClient.get_result() # A FibonacciResult - # print pse.errors - # print "chosen order %d" %pse.errors.index(min(pse.errors)) - return pse.errors.index(min(pse.errors)) - - - - - def get_predict(self, epoch): - # print "requesting prediction for time %d" %epoch - edges_ids=[] - dur=[] - - eids = [x['edge_id'] for x in self.models] - mods = [x['model_id'] for x in self.models] - ords = [x['order'] for x in self.models] - tids = [x['time_model_id'] for x in self.models] - tords = [x['t_order'] for x in self.models] - samples = [x['samples'] for x in self.models] - - fremgoal = fremenserver.msg.FremenGoal() - fremgoal.operation = 'forecast' - fremgoal.ids = mods - fremgoal.times.append(epoch) - - fremgoal.order = -1 - fremgoal.orders = ords - - self.FremenClient.send_goal(fremgoal) - self.FremenClient.wait_for_result(timeout=rospy.Duration(10.0)) - - if self.FremenClient.get_state() == actionlib.GoalStatus.SUCCEEDED: - - ps = self.FremenClient.get_result() - #print ps - prob = list(ps.probabilities) - - for j in range(len(mods)): - #alpha=numpy.exp(-samples[j]/50) - #prob[j]=(prob[j]*(1-alpha))+(0.5*alpha) - if samples[j] <= 10: - prob[j]=1.0 - - if prob[j] < 0.05 : - prob[j] = 0.05 - i=get_model(mods[j], self.models) - edges_ids.append(eids[j]) - - - fremgoal = fremenserver.msg.FremenGoal() - fremgoal.operation = 'forecast' - fremgoal.ids = tids - fremgoal.times.append(epoch) - #print i["order"] - fremgoal.order = -1 - fremgoal.orders = tords#i["order"] - - self.FremenClient.send_goal(fremgoal)#,self.done_cb, self.active_cb, self.feedback_cb) - - # Waits for the server to finish performing the action. - self.FremenClient.wait_for_result(timeout=rospy.Duration(10.0)) - - # Prints out the result of executing the action - ps = self.FremenClient.get_result() # A FibonacciResult - - #print ps - - speeds = list(ps.probabilities) - - for j in range(len(mods)): - if samples[j] <= 10: - dur.append(rospy.Duration(self.models[j]["dist"]/0.5)) #default scitos speed - else: - if speeds[j]>0.01: - dur.append(rospy.Duration(self.models[j]["dist"]/speeds[j])) - else: - dur.append(rospy.Duration(self.models[j]["dist"]/0.01)) - - ## Filling up values for edges with no stats available - for i in self.unknowns: - edges_ids.append(i["edge_id"]) - prob.append(1.0) # a priory probabilities (no stats) - est_dur = rospy.Duration(i["dist"]/0.1) - speeds.append(0.1) - dur.append(est_dur) - - -# for k in range(len(edges_ids)): -# print edges_ids[k], prob[k], dur[k].secs, speeds[k] - - return edges_ids, prob, dur - elif not rospy.is_shutdown(): - rospy.logwarn("NO PREDICTIONS RECEIVED FROM FREMENSERVER WILL TRY AGAIN...") - if not self.FremenClient.wait_for_server(rospy.Duration(10.0)): - rospy.logerr("NO CONNECTION TO FREMENSERVER...") - rospy.logwarn("WAITING FOR FREMENSERVER...") - self.FremenClient= actionlib.SimpleActionClient('fremenserver', fremenserver.msg.FremenAction) - self.FremenClient.wait_for_server() - rospy.loginfo(" ...done") - self.create_temporal_models() - rospy.logwarn("WILL TRY TO GET PREDICTIONS AGAIN...") - return self.get_predict(epoch) - - - def predict_edge_cb(self, req): - with self.srv_lock: - return self.get_predict(req.epoch.secs) - - - - def get_entropies(self, epoch): - # print "requesting prediction for time %d" %epoch - #edges_ids=[] - dur=[] - - eids = [x['edge_id'] for x in self.models] - mods = [x['model_id'] for x in self.models] - ords = [x['order'] for x in self.models] - - fremgoal = fremenserver.msg.FremenGoal() - fremgoal.operation = 'forecastEntropy' - fremgoal.ids = mods - fremgoal.times.append(epoch) - #print i["order"] - fremgoal.order = -1 - fremgoal.orders = ords#i["order"] - - self.FremenClient.send_goal(fremgoal) - self.FremenClient.wait_for_result() - ps = self.FremenClient.get_result() - - #print ps - - prob = list(ps.entropies) - - - for i in self.unknowns: - eids.append(i["edge_id"]) - prob.append(1.0) # a priory entropies (no stats) - - #print len(eids), len(prob) - - return eids, prob, dur - - - - def edge_entropies_cb(self, req): - return self.get_entropies(req.epoch.secs) - - - def BuildCallback(self, goal): - """ - BuildCallBack - - This Functions is called when the Action Server is called to build the models again - """ - with self.srv_lock: - self.cancelled = False - - # print goal - - # set epoch ranges based on goal - if goal.start_range.secs > 0: - self.range[0] = goal.start_range.secs - if goal.end_range.secs > 0: - self.range[1] = goal.end_range.secs - - rospy.loginfo('Building model for epoch range: %s' % self.range) - - start_time = rospy.Time.now() - - #start_time = time.time() - #self.get_list_of_edges() - #elapsed_time = time.time() - start_time - #self._feedback.result = "%d edges found in %.3f seconds \nGathering stats ..." %(len(self.eids),elapsed_time) - #self._as.publish_feedback(self._feedback) - #self.gather_stats() - self.create_temporal_models() - - elapsed_timed = rospy.Time.now()-start_time - elapsed_time = elapsed_timed.secs+(elapsed_timed.nsecs/1e09) - self._feedback.result = "Finished after %.3f seconds" %elapsed_time - self._as.publish_feedback(self._feedback) #Publish Feedback - - rospy.loginfo("Finished after %.3f secs" %elapsed_time) - - if not self.cancelled : - self._result.success = True - self._as.set_succeeded(self._result) - else: - self._result.success = False - self._as.set_preempted(self._result) - - - def preemptCallback(self): - self.cancelled = True - - - def monitor_cb(self, events) : - """ - monitor_cb - - This function monitors if fremenserver is still active - """ - if not self.FremenClient.wait_for_server(timeout = rospy.Duration(1)): - rospy.logerr("NO FREMEN SERVER FOUND. Fremenserver restart might be required") - - - def _on_node_shutdown(self): - self.fremen_monitor.shutdown() - - - -if __name__ == '__main__': - rospy.init_node('topological_prediction') - epochs=[] - #if len(sys.argv) < 2: - if '-h' in sys.argv or '--help' in sys.argv: - usage() - sys.exit(1) - else: - if '-range' in sys.argv: - ind = sys.argv.index('-range') - epochs.append(int(sys.argv[ind+1])) - epochs.append(int(sys.argv[ind+2])) - #print epochs - else: - #print "gathering all the stats" - epochs=[0, rospy.get_rostime().to_sec()] - - server = TopologicalNavPred(epochs) \ No newline at end of file diff --git a/topological_navigation/topological_navigation/scripts/topological_transform_publisher.py b/topological_navigation/topological_navigation/scripts/topological_transform_publisher.py deleted file mode 100755 index e0b59778..00000000 --- a/topological_navigation/topological_navigation/scripts/topological_transform_publisher.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- -#!/usr/bin/env python3 -# ---------------------------------- -# @author: Adam Binch -# @email: abinch@sagarobotics.com -# @date: Fri Feb 26 10:37:50 2021 -# ---------------------------------- - -import json -import yaml -import rclpy -from rclpy.node import Node -from rclpy.qos import QoSProfile, DurabilityPolicy -import tf2_ros - -from std_msgs.msg import String -from geometry_msgs.msg import Vector3, Quaternion, TransformStamped - -# this ensures that all the poses and translates -# are float-type and not int-type as there is an -# assertion in ros2 messages (vector3, pose etc.) -# for float-type [x,y,z,w] keys. -class CustomSafeLoader(yaml.SafeLoader): - def construct_mapping(self, node, deep=False): - mapping = super().construct_mapping(node, deep=deep) - - # this can be extended to test the validity of the tmap2 - # as well at load time (or add missing keys) - for key in ['x', 'y', 'z', 'w']: - if key in mapping and isinstance(mapping[key], int): - mapping[key] = float(mapping[key]) - - return mapping - - -class TopologicalTransformPublisher(Node): - - def __init__(self): - super().__init__("topological_transform_publisher") - self.tf_broadcaster = tf2_ros.static_transform_broadcaster.StaticTransformBroadcaster(self) - qos = QoSProfile(depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL) - self.create_subscription(String, '/topological_map_2', self.map_callback, qos) - self.get_logger().info("Transform Publisher waiting for the Topological Map...") - - def map_callback(self, msg): - # tmap = json.loads(msg.data) - tmap = yaml.load( msg.data, Loader=CustomSafeLoader ) - self.get_logger().info("Transform Publisher received the Topological Map") - transformation = tmap["transformation"] - msg = TransformStamped() - msg.header.stamp = self.get_clock().now().to_msg() - msg.header.frame_id = transformation["parent"] - msg.child_frame_id = transformation["child"] - msg.transform.translation.x = transformation["translation"]["x"] - msg.transform.translation.y = transformation["translation"]["y"] - msg.transform.translation.z = transformation["translation"]["z"] - msg.transform.rotation.x = transformation["rotation"]["x"] - msg.transform.rotation.y = transformation["rotation"]["y"] - msg.transform.rotation.z = transformation["rotation"]["z"] - msg.transform.rotation.w = transformation["rotation"]["w"] - self.tf_broadcaster.sendTransform(msg) - - -def main(args=None): - rclpy.init(args=args) - - TTP = TopologicalTransformPublisher() - rclpy.spin(TTP) - - TTP.destroy_node() - rclpy.shutdown() - -if __name__ == '__main__': - main() diff --git a/topological_navigation/topological_navigation/scripts/topological_visual.py b/topological_navigation/topological_navigation/scripts/topological_visual.py deleted file mode 100755 index 84633003..00000000 --- a/topological_navigation/topological_navigation/scripts/topological_visual.py +++ /dev/null @@ -1,252 +0,0 @@ -import rclpy -from rclpy.node import Node -from rclpy.executors import MultiThreadedExecutor -import tf2_ros -import tf2_geometry_msgs -import yaml -import numpy as np -import tf_transformations -from visualization_msgs.msg import Marker, MarkerArray -from rclpy.qos import QoSProfile, DurabilityPolicy -from topological_navigation_msgs.msg import TopologicalOccupiedNode, TopologicalRoute -from geometry_msgs.msg import Point, Pose -from action_msgs.msg import GoalStatusArray - -# =============================================================== -# UTILS -# =============================================================== -def load_waypoints_from_tmap(file_path): - """ - Loads and parses a tmap file, and pre-transforms the local vertices of each - waypoint into the global 'map' frame. - """ - try: - with open(file_path, 'r') as file: - tmap_data = yaml.safe_load(file) - - waypoints_data = {} - for node_entry in tmap_data.get('nodes', []): - try: - node_name = node_entry['node']['name'] - pos = node_entry['node']['pose']['position'] - orient = node_entry['node']['pose']['orientation'] - - # Create the transformation matrix for this waypoint - translation = [pos['x'], pos['y'], pos['z']] - rotation = [orient['x'], orient['y'], orient['z'], orient['w']] - - trans_matrix = tf_transformations.translation_matrix(translation) - rot_matrix = tf_transformations.quaternion_matrix(rotation) - transform_matrix = np.dot(trans_matrix, rot_matrix) - - # Transform local vertices into map frame vertices - local_verts = node_entry['node'].get('verts', []) - map_frame_verts = [] - for vert in local_verts: - # Represent local vertex as a 4D point for matrix multiplication - local_point = np.array([vert['x'], vert['y'], 0, 1]) - map_point = np.dot(transform_matrix, local_point) - # Store the transformed (x, y) coordinates - map_frame_verts.append((map_point[0], map_point[1])) - - # Store the pre-transformed data - waypoints_data[node_name] = { - 'position': (pos['x'], pos['y'], pos['z']), - 'orientation': (orient['x'], orient['y'], orient['z'], orient['w']), - 'verts': map_frame_verts - } - - except KeyError as e: - continue - - return waypoints_data - - except Exception as e: - return {} - -# ============================================================================== -# Route Visualiser Node -# ============================================================================== -class RouteVisualiserNode(Node): - """ - Subscribes to a list of waypoint names and publishes visualization markers. - """ - def __init__(self): - """ Initializes the Route Visualiser Node.""" - super().__init__('route_visualiser') - self.declare_parameter('tmap', rclpy.Parameter.Type.STRING) - self.tmap_path = self.get_parameter('tmap').get_parameter_value().string_value - self.tmap = load_waypoints_from_tmap(self.tmap_path) - - latching_qos = QoSProfile(depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL) - self.routevis_pub = self.create_publisher(MarkerArray, 'topological_route_visualisation', qos_profile=latching_qos) - - self.create_subscription(TopologicalRoute, "topological_navigation/Route", self.route_cb, qos_profile=latching_qos) - self.create_subscription(TopologicalRoute, "topological_navigation/Route", self.route_cb, qos_profile=latching_qos) - # TODO: it would be nice to clear the route when the action completes, but the status topic is unreliable - # self.create_subscription(GoalStatusArray, "/topological_navigation/_action/status", self.status_callback, qos_profile=latching_qos) - # self.create_subscription(GoalStatusArray, "/topological_navigation/execute_policy_mode/_action/status", self.status_callback, qos_profile=latching_qos) - self.get_logger().info('Route Visualiser node has started.') - - - # TODO: it would be nice to clear the route when the action completes, but the status topic is unreliable - # def status_callback(self, msg: GoalStatusArray): - # """ - # Checks the status of all goals and clears the route if any have finished. - # """ - # # Define terminal states: SUCCEEDED, CANCELED, ABORTED - # terminal_states = [4, 5, 6] - # status = msg.status_list[-1] - # if status.status in terminal_states: - # self.get_logger().info("Action finished. Clearing route visualization.") - # self.clear_route() - - - def route_cb(self, msg): - """ Callback for receiving a new route. """ - self.clear_route() # TODO: it would be nice to clear the route when the action completes, but the status topic is unreliable - self.route_marker = MarkerArray() - self.route_marker.markers=[] - idn = 0 - if self.tmap is not None: - for i in range(1,len(msg.nodes)): - marker = self.get_route_marker(msg.nodes[i-1], msg.nodes[i], idn) - self.route_marker.markers.append(marker) - idn+=1 - self.routevis_pub.publish(self.route_marker) - - - def clear_route(self): - """ Clears the current route visualisation. """ - self.route_marker = MarkerArray() - self.route_marker.markers=[] - marker = Marker() - marker.action = marker.DELETEALL - self.route_marker.markers.append(marker) - self.routevis_pub.publish(self.route_marker) - - - def get_route_marker(self, origin, end, idn): - """ Creates a marker between two waypoints. """ - marker = Marker() - marker.id = idn - marker.header.frame_id = 'topo_map' - marker.type = marker.ARROW - origin_node = self.tmap[origin] - end_node = self.tmap[end] - V1 = Point(x=origin_node['position'][0], y=origin_node['position'][1], z=origin_node['position'][2]) - V1.z += 0.25 - V2 = Point(x=end_node['position'][0], y=end_node['position'][1], z=end_node['position'][2]) - V2.z += 0.25 - marker.pose.orientation.w= 1.0 - marker.scale.x = 0.2 - marker.scale.y = 0.2 - marker.scale.z = 0.4 - marker.color.a = 1.0 - marker.color.r = 0.33 - marker.color.g = 0.99 - marker.color.b = 0.55 - marker.points.append(V1) - marker.points.append(V2) - marker.ns='/route_pathg' - return marker - - -# ============================================================================== -# Occupied Visualiser Node -# ============================================================================== -class OccupancyVisualiserNode(Node): - """ - Subscribes to the list of occupied waypoints and publishes visualization markers. - """ - def __init__(self): - """ Initializes the Occupancy Visualiser Node. """ - super().__init__('occupancy_visualiser') - self.declare_parameter('tmap', rclpy.Parameter.Type.STRING) - self.tmap_path = self.get_parameter('tmap').get_parameter_value().string_value - self.tmap = load_waypoints_from_tmap(self.tmap_path) - - self.last_marker_count = 0 - - latching_qos = QoSProfile(depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL) - self.marker_pub = self.create_publisher(MarkerArray, '/topological_navigation/visual/occupied_node', latching_qos) - - self.create_subscription(TopologicalOccupiedNode, '/topological_navigation/occupied_node', self.occupancy_cb, 10) - self.get_logger().info('Waypoint Visualiser component has started.') - - def occupancy_cb(self, msg): - """ Callback for receiving the list of currently occupied waypoints. """ - waypoint_names = msg.nodes if msg.nodes else [] - marker_array = MarkerArray() - - # Create ADD markers for all currently occupied waypoints - for i, wp_name in enumerate(waypoint_names): - wp_data = self.tmap.get(wp_name) - if not wp_data: continue - - marker = Marker() - marker.header.frame_id = "map" - marker.header.stamp = self.get_clock().now().to_msg() - marker.ns = "occupied_waypoints" - marker.id = i - marker.type = Marker.SPHERE - marker.action = Marker.ADD - - pose_coords = wp_data['position'] - marker.pose.position.x = pose_coords[0] - marker.pose.position.y = pose_coords[1] - marker.pose.position.z = 0.15 # Lift it off the ground slightly - marker.pose.orientation.w = 1.0 - - marker.scale.x = 1.0 - marker.scale.y = 1.0 - marker.scale.z = 0.1 - - marker.color.r = 1.0 # Red - marker.color.g = 0.0 - marker.color.b = 0.0 - marker.color.a = 0.8 # Slightly transparent - - marker_array.markers.append(marker) - - # Create DELETE markers for any old markers that are no longer needed - for i in range(len(waypoint_names), self.last_marker_count): - marker = Marker() - marker.header.frame_id = "map" - marker.ns = "occupied_waypoints" - marker.id = i - marker.action = Marker.DELETE - marker_array.markers.append(marker) - - self.marker_pub.publish(marker_array) - self.last_marker_count = len(waypoint_names) - -# =============================================================== -# The Main Execution Block -# =============================================================== -def main(args=None): - rclpy.init(args=args) - - route_visualiser_node = RouteVisualiserNode() - occupancy_visualiser_node = OccupancyVisualiserNode() - - # Create a MultiThreadedExecutor - executor = MultiThreadedExecutor() - - # Add nodes to the executor - executor.add_node(route_visualiser_node) - executor.add_node(occupancy_visualiser_node) - - try: - # Spin the executor to run both nodes - executor.spin() - except KeyboardInterrupt: - pass - finally: - executor.shutdown() - route_visualiser_node.destroy_node() - occupancy_visualiser_node.destroy_node() - rclpy.shutdown() - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/topological_navigation/topological_navigation/scripts/travel_time_estimator.py b/topological_navigation/topological_navigation/scripts/travel_time_estimator.py deleted file mode 100755 index 74846f50..00000000 --- a/topological_navigation/topological_navigation/scripts/travel_time_estimator.py +++ /dev/null @@ -1,56 +0,0 @@ -#! /usr/bin/env python - - -import rospy -from topological_navigation_msgs.msg import TopologicalMap -from topological_navigation_msgs.srv import EstimateTravelTime -from std_msgs.msg import Duration -import math -import threading - -class TravelTimeEstimator(object): - """docstring for TravelTimeEstimator""" - def __init__(self): - super(TravelTimeEstimator, self).__init__() - self.service_lock = threading.Lock() - self.nodes = dict() - rospy.Subscriber('topological_map', TopologicalMap, self.map_callback) - - while(not rospy.is_shutdown() and len(self.nodes) == 0): - rospy.sleep(1) - - rospy.Service('topological_navigation/travel_time_estimator', EstimateTravelTime, self.estimate_travel_time) - - - def map_callback(self, msg): - self.nodes.clear() - for node in msg.nodes: - self.nodes[node.name] = node - - - def estimate_travel_time(self, req): - self.service_lock.acquire() - - print(req) - - if req.start not in self.nodes: - raise Exception('Unknown start node: %s' % req.start) - if req.target not in self.nodes: - raise Exception('Unknown target node: %s' % req.target) - - startNode = self.nodes[req.start] - endNode = self.nodes[req.target] - - travel_distance = math.hypot((startNode.pose.position.x-endNode.pose.position.x),(startNode.pose.position.y-endNode.pose.position.y)) - - # this is the default scitos speed - travel_speed_ms = 0.5 - travel_time = rospy.Duration(travel_distance/travel_speed_ms) - self.service_lock.release() - return travel_time - -if __name__ == '__main__': - rospy.init_node('travel_time_estimator') - tte = TravelTimeEstimator() - rospy.spin() - diff --git a/topological_navigation/topological_navigation/scripts/visualise_map.py b/topological_navigation/topological_navigation/scripts/visualise_map.py deleted file mode 100755 index 6b230732..00000000 --- a/topological_navigation/topological_navigation/scripts/visualise_map.py +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy - -import math - - -from time import sleep - -from threading import Timer -from geometry_msgs.msg import Pose -from geometry_msgs.msg import Point -import std_msgs.msg - -#from mongodb_store.message_store import MessageStoreProxy - -from interactive_markers.interactive_marker_server import * -#from interactive_markers.menu_handler import * -from visualization_msgs.msg import * - -from topological_navigation_msgs.msg import TopologicalNode -from topological_navigation.topological_map import * -from topological_navigation.marker_arrays import * -from topological_navigation.node_controller import * -from topological_navigation.edge_controller import * -from topological_navigation.vertex_controller import * -from topological_navigation.node_manager import * -from topological_navigation.edge_std import * - - - -from topological_navigation.goto import * - - -from topological_navigation_msgs.msg import NavRoute -from topological_navigation_msgs.msg import TopologicalMap -import topological_navigation.policies -import topological_navigation.map_marker - - -class VisualiseMap(object): - _killall_timers=False - - def __init__(self, name, edit_mode, noedit_mode) : - rospy.on_shutdown(self._on_node_shutdown) - - self.update_needed=False - self.in_feedback=False - #self._point_set=filename - self._edit_mode = edit_mode - self._noedit_mode = noedit_mode - - self.map_markers = topological_navigation.map_marker.TopologicalVis() - self.pol_markers = topological_navigation.policies.PoliciesVis() - - if not noedit_mode: - rospy.loginfo("Edge Controllers ...") - self.edge_cont = edge_controllers() - rospy.loginfo("Vertex Controllers ...") - self.vert_cont = VertexControllers() - rospy.loginfo("Waypoint Controllers ...") - self.node_cont = WaypointControllers() - rospy.loginfo("Node Manager Controllers ...") - self.add_rm_node = node_manager() - else: - rospy.logwarn("No edit Visualisation mode ...") - - if not self._edit_mode : - rospy.loginfo("Go To Controllers ...") - self.goto_cont = go_to_controllers() - else: - rospy.logwarn("Edit only Visualisation mode ...") - - rospy.loginfo("Done ...") - - - rospy.loginfo("All Done ...") - - - def _on_node_shutdown(self): - print("bye") - - - -if __name__ == '__main__': - edit_mode=False - noedit_mode=False - #mapname=str(sys.argv[1]) - argc = len(sys.argv) - print(argc) - if argc > 1: - if '-edit' in sys.argv or '-e' in sys.argv : - edit_mode = True - if '-noedit' in sys.argv or '-n' in sys.argv : - noedit_mode=True - rospy.init_node('topological_visualisation') - server = VisualiseMap(rospy.get_name(), edit_mode, noedit_mode) - rospy.spin() diff --git a/topological_navigation/topological_navigation/scripts/visualise_map2.py b/topological_navigation/topological_navigation/scripts/visualise_map2.py deleted file mode 100755 index edbcd9af..00000000 --- a/topological_navigation/topological_navigation/scripts/visualise_map2.py +++ /dev/null @@ -1,370 +0,0 @@ -#!/usr/bin/env python - -import rospy -import json -import sys -import math -import actionlib - -from time import sleep - -from threading import Timer -from geometry_msgs.msg import Pose -from geometry_msgs.msg import Point -from std_msgs.msg import String - -from visualization_msgs.msg import * - -from interactive_markers.interactive_marker_server import * - -from topological_navigation_msgs.msg import GotoNodeGoal, GotoNodeAction, TopologicalRoute - -def get_node(nodes_list, name): - for i in nodes_list: - if i['node']['name'] == name: - return i['node'] - - -class TopoMap2Vis(object): - _pallete=[[0,0,0],[1,0,0],[0,0,1],[0,1,0],[1,1,0],[1,0,1],[0,1,1],[1,1,1]] - def __init__(self, name, no_goto=False) : - """ - """ - self.no_goto = no_goto - self.killall=False - self.topological_map = None - self.map_markers = MarkerArray() - self.map_markers.markers=[] - self.in_feedback=False - - rospy.on_shutdown(self._on_node_shutdown) - - self.topmap_pub = rospy.Publisher('topological_map_visualisation', MarkerArray, queue_size = 1, latch=True) - self.routevis_pub = rospy.Publisher('topological_route_visualisation', MarkerArray, queue_size = 1) - self.topo_map_sub = rospy.Subscriber("topological_map_2", String, self.topo_map_cb) - self.topo_route_sub = rospy.Subscriber("topological_navigation/Route", TopologicalRoute, self.route_cb) - - rospy.loginfo("Waiting for topo_map") - - if not no_goto: - self._goto_server = InteractiveMarkerServer("go_to_node") - self.client = actionlib.SimpleActionClient('topological_navigation', GotoNodeAction) - self.client.wait_for_server() - - rospy.loginfo("All Done ...") - rospy.spin() - - def topo_map_cb(self, msg): - """ - """ - self.topological_map = json.loads(msg.data) - rospy.loginfo("Received new topo_map") - print(self.topological_map['name']) - self.create_map_marker() - - - def route_cb(self, msg): - self.clear_route() # clear the last route - self.logger() - self.route_marker = MarkerArray() - self.route_marker.markers=[] - idn=0 - for i in range(1,len(msg.nodes)): - self.route_marker.markers.append(self.get_route_marker(msg.nodes[i-1], msg.nodes[i], idn)) - idn+=1 - self.routevis_pub.publish(self.route_marker) - - - def clear_route(self): - self.route_marker = MarkerArray() - self.route_marker.markers=[] - marker = Marker() - marker.action = marker.DELETEALL - self.route_marker.markers.append(marker) - self.routevis_pub.publish(self.route_marker) - rospy.sleep(0.5) - - - def get_route_marker(self, origin, end, idn): - marker = Marker() - marker.id = idn - marker.header.frame_id = 'topo_map' - marker.type = marker.ARROW - V1=Point() - V2=Point() - origin_node = get_node(self.topological_map['nodes'], origin) - end_node = get_node(self.topological_map['nodes'], end) - V1=self.node2pose(origin_node['pose']).position - V1.z += 0.25 - V2=self.node2pose(end_node['pose']).position - V2.z += 0.25 - marker.pose.orientation.w= 1.0 - marker.scale.x = 0.2 - marker.scale.y = 0.2 - marker.scale.z = 0.4 - marker.color.a = 0.5 - marker.color.r = 0.33 - marker.color.g = 0.99 - marker.color.b = 0.55 - marker.points.append(V1) - marker.points.append(V2) - marker.lifetime = rospy.Duration(1800) - marker.ns='/route' - return marker - - - def create_map_marker(self): - """ - """ - del self.map_markers - self.map_markers = MarkerArray() - self.map_markers.markers=[] - self.actions=[] - idn=0 - for i in self.topological_map['nodes']: - self.map_markers.markers.append(self.get_node_marker(i['node'], idn)) - idn+=1 - self.map_markers.markers.append(self.get_name_marker(i['node'], idn)) - idn+=1 - self.map_markers.markers.append(self.get_zone_marker(i['node'], idn)) - idn+=1 - for j in i['node']['edges']: - self.update_actions(j['action']) - marker = self.get_edge_marker(i['node'], j, idn) - if marker: - self.map_markers.markers.append(marker) - idn += 1 - - if not self.no_goto: - for i in self.topological_map['nodes']: - self.create_goto_marker(i['node']) - - legend =0 - for k in self.actions: - marker = self.get_legend_marker(k, legend, idn) - self.map_markers.markers.append(marker) - idn += 1 - legend+=1 - self.topmap_pub.publish(self.map_markers) - - - def create_goto_marker(self, node): - """ - """ - marker = InteractiveMarker() - marker.header.frame_id = node['parent_frame'] - marker.scale = 1 - marker.name = node['name'] - marker.description = ''#node['name'] - - control = InteractiveMarkerControl() - control.interaction_mode = InteractiveMarkerControl.BUTTON - control.always_visible = True - - control.markers.append(self.makeArrow( marker.scale )) - marker.controls.append(control) - - self._goto_server.insert(marker, self.goto_feedback_cb) - self._goto_server.applyChanges() - - pos = self.node2pose(node['pose']) - - if pos is not None: - pos.position.z=pos.position.z+0.5 - self._goto_server.setPose( marker.name, pos ) - self._goto_server.applyChanges() - - - def makeArrow(self, scale): - marker = Marker() - - marker.type = Marker.ARROW - marker.scale.x = scale * 0.5 - marker.scale.y = scale * 0.25 - marker.scale.z = scale * 0.15 - marker.lifetime.secs = 3 - marker.color.r = 0.2 - marker.color.g = 0.9 - marker.color.b = 0.2 - marker.color.a = 1.0 - return marker - - - def goto_feedback_cb(self, feedback): - if not self.in_feedback: - self.in_feedback=True - print('GOTO: '+str(feedback.marker_name)) - self.client.cancel_all_goals() - navgoal = GotoNodeGoal() - navgoal.target = feedback.marker_name - #navgoal.origin = orig - # Sends the goal to the action server. - self.client.send_goal(navgoal) - rospy.Timer(rospy.Duration(1.0), self.timer_cb, oneshot=True) # This is needed so the callback is only triggered once - - - def timer_cb(self, event) : - self.in_feedback = False - - - def get_colour(self, number): - """ - """ - return self._pallete[number] - - def update_actions(self, action): - """ - """ - if action not in self.actions: - self.actions.append(action) - - - def get_legend_marker(self, action, row, idn): - """ - """ - col=self.get_colour(self.actions.index(action)) - marker = Marker() - marker.id = idn - marker.header.frame_id = "map" - marker.type = marker.TEXT_VIEW_FACING - marker.text=action - marker.pose.position.x= 1.0 - marker.pose.position.y= 0.0 + (0.18*row) - marker.pose.position.z= 0.2 - marker.pose.orientation.w= 1.0 - marker.scale.z = 0.15 - marker.color.a = 1.0 - marker.color.r = col[0] - marker.color.g = col[1] - marker.color.b = col[2] - marker.ns='/legend' - return marker - - - def get_edge_marker(self, node, edge, idn): - marker = Marker() - marker.id = idn - marker.header.frame_id = node['parent_frame'] - marker.type = marker.LINE_LIST - V1=Point() - V2=Point() - V1=self.node2pose(node['pose']).position - V1.z += 0.1 - to_node=get_node(self.topological_map['nodes'], edge['node']) - col=self.get_colour(self.actions.index(edge['action'])) - #print col - if to_node: - V2= self.node2pose(to_node['pose']).position - V2.z += 0.1 - marker.pose.orientation.w= 1.0 - marker.scale.x = 0.1 - marker.color.a = 0.5 - marker.color.r = col[0] - marker.color.g = col[1] - marker.color.b = col[2] - marker.points.append(V1) - marker.points.append(V2) - marker.ns='/edges' - return marker - else: - rospy.logwarn("No node %s found" %edge.node) - return None - - - def get_node_marker(self, node, idn): - """ - """ - marker = Marker() - marker.id = idn - marker.header.frame_id = node['parent_frame'] - marker.type = Marker.SPHERE - marker.scale.x = 0.2 - marker.scale.y = 0.2 - marker.scale.z = 0.2 - marker.color.a = 0.6 - marker.color.r = 0.2 - marker.color.g = 0.2 - marker.color.b = 0.7 - marker.pose = self.node2pose(node['pose']) - marker.pose.position.z += 0.1 - marker.ns='/nodes' - return marker - - - def get_name_marker(self, node, idn): - marker = Marker() - marker.id = idn - marker.header.frame_id = node['parent_frame'] - marker.type = marker.TEXT_VIEW_FACING - marker.text= node['name'] - marker.pose = self.node2pose(node['pose']) - marker.pose.position.z += 0.2 - #marker.pose.position.y += 0.2 - marker.scale.z = 0.20 - marker.color.a = 1.00 - marker.color.r = 1.00 - marker.color.g = 1.00 - marker.color.b = 1.00 - marker.ns='/names' - return marker - - - def node2pose(self, pose): - node_pose=Pose() - node_pose.position.x = pose['position']['x'] - node_pose.position.y = pose['position']['y'] - node_pose.position.z = pose['position']['z'] - node_pose.orientation.w = pose['orientation']['w'] - node_pose.orientation.x = pose['orientation']['x'] - node_pose.orientation.y = pose['orientation']['y'] - node_pose.orientation.z = pose['orientation']['z'] - return node_pose - - - def get_zone_marker(self, node, idn): - marker = Marker() - marker.id = idn - marker.header.frame_id = "map" - marker.type = marker.LINE_STRIP - marker.pose.orientation.w= 1.0 - marker.scale.x = 0.1 - marker.color.a = 0.8 - marker.color.r = 0.7 - marker.color.g = 0.1 - marker.color.b = 0.2 - - for j in node['verts'] : - Vert = Point() - Vert.z = 0.05 - Vert.x = node['pose']['position']['x'] + j['x'] - Vert.y = node['pose']['position']['y'] + j['y'] - marker.points.append(Vert) - - Vert = Point() - Vert.z = 0.05 - Vert.x = node['pose']['position']['x'] + node['verts'][0]['x'] - Vert.y = node['pose']['position']['y'] + node['verts'][0]['y'] - marker.points.append(Vert) - marker.ns='/zones' - return marker - - - def _on_node_shutdown(self): - """ - """ - self.clear_route() - self.killall=True - rospy.loginfo("See you later") - #sleep(2) - - -if __name__ == '__main__': - nogoto_mode=False - argc = len(sys.argv) - print(argc) - if argc > 1: - if '-no_goto' in sys.argv or '-n' in sys.argv : - nogoto_mode = True - - rospy.init_node('topomap2_visualisation') - server = TopoMap2Vis(rospy.get_name(), no_goto=nogoto_mode) diff --git a/topological_navigation/topological_navigation/scripts/visualise_map_ros2.py b/topological_navigation/topological_navigation/scripts/visualise_map_ros2.py deleted file mode 100755 index f54dd00b..00000000 --- a/topological_navigation/topological_navigation/scripts/visualise_map_ros2.py +++ /dev/null @@ -1,563 +0,0 @@ -#!/usr/bin/env python - -import rclpy -import json -import sys -import math -from rclpy.executors import MultiThreadedExecutor, SingleThreadedExecutor -from time import sleep -from threading import Timer -from geometry_msgs.msg import Pose -from geometry_msgs.msg import Point -from std_msgs.msg import String -from action_msgs.msg import GoalStatus -from topological_navigation_msgs.action import GotoNode, ExecutePolicyMode -from topological_navigation_msgs.action import ExecutePolicyMode -from rclpy.action import ActionClient -from geometry_msgs.msg import PoseStamped -from visualization_msgs.msg import * -from interactive_markers.interactive_marker_server import * -from topological_navigation_msgs.msg import TopologicalRoute -from rclpy.qos import QoSProfile, HistoryPolicy, ReliabilityPolicy, DurabilityPolicy, QoSDurabilityPolicy -from rclpy.callback_groups import MutuallyExclusiveCallbackGroup, ReentrantCallbackGroup -from builtin_interfaces.msg import Duration -from rclpy.task import Future -import threading -import yaml - -# this ensures that all the poses and translates -# are float-type and not int-type as there is an -# assertion in ros2 messages (vector3, pose etc.) -# for float-type [x,y,z,w] keys. -class CustomSafeLoader(yaml.SafeLoader): - def construct_mapping(self, node, deep=False): - mapping = super().construct_mapping(node, deep=deep) - for key in ['x', 'y', 'z', 'w']: - if key in mapping and isinstance(mapping[key], int): - mapping[key] = float(mapping[key]) - - return mapping - -def get_node(nodes_list, name): - for i in nodes_list: - if i['node']['name'] == name: - return i['node'] - -class InteractiveMarkerServerHandlerNode(rclpy.node.Node): - def __init__(self, name): - super().__init__(name) - self._goto_server = InteractiveMarkerServer(self, "go_to_node") - - def getInteractiveMarkerServer(self,): - return self._goto_server - - -class TopoMap2Vis(rclpy.node.Node): - _pallete=[[0.0,0.0,0.0],[1.0,0.0,0.0],[0.0,0.0,1.0],[0.0,1.0,0.0],[1.0,1.0,0.0],[1.0,0.0,1.0],[0.0,1.0,1.0],[1.0,1.0,1.0]] - def __init__(self, name, interactive_marker_server) : - super().__init__(name) - self.declare_parameter('no_goto', rclpy.Parameter.Type.BOOL) - self.declare_parameter('publish_map', rclpy.Parameter.Type.BOOL) - - self.no_go = self.get_parameter_or("no_goto", rclpy.Parameter('bool', rclpy.Parameter.Type.BOOL, False)).value - self.publish_map = self.get_parameter_or("publish_map", rclpy.Parameter('bool', rclpy.Parameter.Type.BOOL, True)).value - self.no_goto = self.no_go - self.killall=False - self._goto_server = interactive_marker_server.getInteractiveMarkerServer() - self.topological_map = None - self.map_markers = MarkerArray() - self.map_markers.markers=[] - self.in_feedback=False - self._map_received = False - self.early_terminate_is_required = False - self.action_status = 0 - self.status_mapping = {} - self.status_mapping[0] = "STATUS_UNKNOWN" - self.status_mapping[1] = "STATUS_ACCEPTED" - self.status_mapping[2] = "STATUS_EXECUTING" - self.status_mapping[3] = "STATUS_CANCELING" - self.status_mapping[4] = "STATUS_SUCCEEDED" - self.status_mapping[5] = "STATUS_CANCELED" - self.status_mapping[6] = "STATUS_ABORTED" - self.goal_cancel_error_codes = {} - self.goal_cancel_error_codes[0] = "ERROR_NONE" - self.goal_cancel_error_codes[1] = "ERROR_REJECTED" - self.goal_cancel_error_codes[2] = "ERROR_UNKNOWN_GOAL_ID" - self.goal_cancel_error_codes[3] = "ERROR_GOAL_TERMINATED" - - rclpy.get_default_context().on_shutdown(self._on_node_shutdown) - - self.latching_qos = QoSProfile(depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL) - self.goal_handle = None - self.go_to_node_exe_task = False - self.timer_set_mission = False - self.callback_group_map = ReentrantCallbackGroup() - self.callback_goto_client = ReentrantCallbackGroup() - self.callback_goto_subs = ReentrantCallbackGroup() - self.executor_goto_client = SingleThreadedExecutor() - # self.executor_goto_client_check = SingleThreadedExecutor() - self.goto_node_executor = None - - self.topmap_pub = self.create_publisher(MarkerArray, 'topological_map_visualisation', qos_profile=self.latching_qos) - self.routevis_pub = self.create_publisher(MarkerArray, 'topological_route_visualisation', qos_profile=self.latching_qos) - self.future_task = None - self.current_target_node = None - if not self.no_goto: - self.action_server_name = '/topological_navigation' - - self.client = ActionClient(self, GotoNode, self.action_server_name, callback_group=self.callback_goto_client) - while rclpy.ok(): - try: - rclpy.spin_once(self, timeout_sec=0.1) - if not self.client.server_is_ready(): - self.get_logger().info("Waiting for the action server {}...".format(self.action_server_name)) - self.client.wait_for_server(timeout_sec=1) - if self.client.server_is_ready(): - self.get_logger().info("the action server {} is avaible ".format(self.action_server_name)) - break - except Exception as e: - self.get_logger().error(" {} ".format(e)) - pass - - self.topo_map_sub = self.create_subscription(String, "/topological_map_2", self.topo_map_cb, qos_profile=self.latching_qos, callback_group=self.callback_group_map) - - while rclpy.ok(): - rclpy.spin_once(self, timeout_sec=0.1) - if self._map_received: - self.get_logger().info(" received the Topological Map") - if self.topological_map is not None: - self.get_logger().info("Start generating map...") - self.create_map_marker() - self.get_logger().info("End generating map...") - break - - # self.topo_route_sub = self.create_subscription(TopologicalRoute, "topological_navigation/Route", self.route_cb, qos_profile=self.latching_qos, callback_group=self.callback_goto_subs) - self.get_logger().info("All Done ...") - - def topo_map_cb(self, msg): - self.topological_map = yaml.load(msg.data, Loader = CustomSafeLoader) - self.get_logger().info("{}".format(self.topological_map['name'])) - self._map_received = True - self.create_map_marker() - - # def route_cb(self, msg): - # self.get_logger().error("[route_cb] - NEW ROUTE RECEIVED") - # self.clear_route() # clear the last route - # self.route_marker = MarkerArray() - # self.route_marker.markers=[] - # idn = 0 - # if self.topological_map is not None: - # for i in range(1,len(msg.nodes)): - # marker = self.get_route_marker(msg.nodes[i-1], msg.nodes[i], idn) - # self.route_marker.markers.append(marker) - # idn+=1 - # self.routevis_pub.publish(self.route_marker) - # self.get_logger().error("[route_cb] - ✅ DONE!") - - # def clear_route(self): - # self.route_marker = MarkerArray() - # self.route_marker.markers=[] - # marker = Marker() - # marker.action = marker.DELETEALL - # self.route_marker.markers.append(marker) - # self.routevis_pub.publish(self.route_marker) - - # def get_route_marker(self, origin, end, idn): - # marker = Marker() - # marker.id = idn - # marker.header.frame_id = 'topo_map' - # marker.type = marker.ARROW - # V1=Point() - # V2=Point() - # origin_node = get_node(self.topological_map['nodes'], origin) - # end_node = get_node(self.topological_map['nodes'], end) - # V1=self.node2pose(origin_node['pose']).position - # V1.z += 0.25 - # V2=self.node2pose(end_node['pose']).position - # V2.z += 0.25 - # marker.pose.orientation.w= 1.0 - # marker.scale.x = 0.2 - # marker.scale.y = 0.2 - # marker.scale.z = 0.4 - # marker.color.a = 1.0 - # # marker.color.a = 0.5 - # marker.color.r = 0.33 - # marker.color.g = 0.99 - # marker.color.b = 0.55 - # marker.points.append(V1) - # marker.points.append(V2) - # # marker.lifetime.sec = 2 - # marker.ns='/route_pathg' - # return marker - - - def create_map_marker(self): - del self.map_markers - self.map_markers = MarkerArray() - self.map_markers.markers=[] - self.actions=[] - idn=0 - for i in self.topological_map['nodes']: - self.map_markers.markers.append(self.get_node_marker(i['node'], idn)) - idn+=1 - self.map_markers.markers.append(self.get_name_marker(i['node'], idn)) - idn+=1 - self.map_markers.markers.append(self.get_zone_marker(i['node'], idn)) - idn+=1 - for j in i['node']['edges']: - self.update_actions(j['action']) - marker = self.get_edge_marker(i['node'], j, idn) - if marker: - self.map_markers.markers.append(marker) - idn += 1 - - if not self.no_goto: - for i in self.topological_map['nodes']: - self.create_goto_marker(i['node']) - - legend =0 - for k in self.actions: - marker = self.get_legend_marker(k, legend, idn) - self.map_markers.markers.append(marker) - idn += 1 - legend+=1 - if self.publish_map: - self.topmap_pub.publish(self.map_markers) - - - def create_goto_marker(self, node): - """ - """ - marker = InteractiveMarker() - marker.header.frame_id = node['parent_frame'] - marker.scale = 1.0 - marker.name = node['name'] - marker.description = ''#node['name'] - - control = InteractiveMarkerControl() - control.interaction_mode = InteractiveMarkerControl.BUTTON - control.always_visible = True - - control.markers.append(self.makeArrow( marker.scale )) - marker.controls.append(control) - - self._goto_server.insert(marker, feedback_callback=self.goto_feedback_cb) - self._goto_server.applyChanges() - - pos = self.node2pose(node['pose']) - - if pos is not None: - pos.position.z=pos.position.z+0.5 - self._goto_server.setPose( marker.name, pos ) - self._goto_server.applyChanges() - - - def makeArrow(self, scale): - marker = Marker() - marker.type = Marker.ARROW - marker.scale.x = scale * 0.5 - marker.scale.y = scale * 0.25 - marker.scale.z = scale * 0.15 - duration_msg = Duration() - duration_msg.sec = 3 - duration_msg.nanosec = 0 - marker.lifetime = duration_msg - marker.color.r = 0.2 - marker.color.g = 0.9 - marker.color.b = 0.2 - marker.color.a = 1.0 - return marker - - def preempt_action(self): - if self.client is not None: - if not self.client.server_is_ready(): - self.get_logger().info("Waiting for the action server {}...".format(self.action_server_name)) - self.client.wait_for_server(timeout_sec=2) - - if not self.client.server_is_ready(): - self.get_logger().info("action server {} not responding ... can not perform any action".format(self.action_server_name)) - return True - - if self.goal_handle is None: - self.get_logger().info("there is no goal to stop it is already cancelled with status {}".format(self.action_status)) - return True - - cancel_future = self.goal_handle.cancel_goal_async() - self.get_logger().info("Waiting till terminating the current preemption") - while rclpy.ok(): - try: - rclpy.spin_once(self, executor=self.executor_goto_client) - # rclpy.spin_until_future_complete(self, cancel_future, executor=self.executor_goto_client, timeout_sec=2.0) - if cancel_future.done() and self.goal_get_result_future.done(): - self.action_status = self.goal_get_result_future.result().status - self.get_logger().info("The goal cancel error code {} ".format(self.get_goal_cancel_error_msg(cancel_future.result().return_code))) - return True - except Exception as e: - # self.goal_handle = None - self.get_logger().error("Edge Action Manager: error while canceling the previous action") - return False - - def get_goal_cancel_error_msg(self, status_code): - try: - return self.goal_cancel_error_codes[status_code] - except Exception as e: - self.get_logger().error("Goal cancel code {}".format(status_code)) - return self.goal_cancel_error_codes[0] - - def go_to_node_task(self, ): - self.preempt_action() - self.execute() - self.in_feedback = False - self.early_terminate_is_required = False - - - def goto_feedback_cb(self, feedback): - if(self.current_target_node is not None): - if(self.current_target_node != feedback.marker_name): - self.in_feedback = False - self.early_terminate_is_required = True - else: - self.in_feedback = True - - self.get_logger().warning('GOTO: is early termination required ? ' + str(self.early_terminate_is_required) + ' ') - self.get_logger().warning('GOTO: self.goto_node_executor {} self.in_feedback {} self.early_terminate_is_required {}'.format(self.goto_node_executor, self.in_feedback, self.early_terminate_is_required)) - if ((self.goto_node_executor is not None) and self.goto_node_executor.is_alive()) and self.in_feedback: - self.get_logger().warning('GOTO: '+str(feedback.marker_name) + ' is not enable yet, waiting till terminating previous action') - return - else: - self.in_feedback = True - self.current_target_node = feedback.marker_name - self.get_logger().info('GOTO: '+str(feedback.marker_name)) - navgoal = GotoNode.Goal() - navgoal.target = feedback.marker_name - navgoal.no_orientation = True - self.goal = navgoal - self.go_to_node_exe_task = True - self.goto_node_executor = threading.Thread(target=self.go_to_node_task) - self.goto_node_executor.start() - return - - - def feedback_callback(self, feedback_msg): - self.nav_client_feedback = feedback_msg.feedback - self.get_logger().info("feedback: {} ".format(self.nav_client_feedback)) - return - - def get_status_msg(self, status_code): - try: - return self.status_mapping[status_code] - except Exception as e: - self.get_logger().error("Status code is invalid {}".format(status_code)) - return self.status_mapping[0] - - def execute(self): - if not self.client.server_is_ready(): - self.get_logger().info("Waiting for the action server {}...".format(self.action_server_name)) - self.client.wait_for_server(timeout_sec=2) - - if not self.client.server_is_ready(): - self.get_logger().info("action server {} not responding ... can not perform any action".format(self.action_server_name)) - return - - self.get_logger().info("Executing the action...") - send_goal_future = self.client.send_goal_async(self.goal, feedback_callback=self.feedback_callback) - while rclpy.ok(): - try: - rclpy.spin_once(self, executor=self.executor_goto_client) - # rclpy.spin_until_future_complete(self, send_goal_future, executor=self.executor_goto_client, timeout_sec=2.0) - if send_goal_future.done(): - self.goal_handle = send_goal_future.result() - break - except Exception as e: - self.get_logger().error("Error while sending the goal to GOTO node {} ".format(e)) - return False - - if not self.goal_handle.accepted: - self.get_logger().error('GOTO action is rejected') - return False - - self.get_logger().info('The goal accepted') - self.goal_get_result_future = self.goal_handle.get_result_async() - self.get_logger().info("Waiting for {} action to complete".format(self.action_server_name)) - while rclpy.ok(): - try: - rclpy.spin_once(self, timeout_sec=0.2) - if(self.early_terminate_is_required): - self.get_logger().warning("Not going to wait till finishing ongoing task, early termination is required ") - return False - if self.goal_get_result_future.done(): - status = self.goal_get_result_future.result().status - self.action_status = status - self.get_logger().info("Executing the action response with status {}".format(self.get_status_msg(self.action_status))) - return True - except Exception as e: - self.get_logger().error("Error while executing go to node policy {} ".format(e)) - # self.goal_get_result_future = None - return False - - def get_colour(self, number): - """ - """ - return self._pallete[number] - - def update_actions(self, action): - """ - """ - if action not in self.actions: - self.actions.append(action) - - - def get_legend_marker(self, action, row, idn): - """ - """ - col=self.get_colour(self.actions.index(action)) - marker = Marker() - marker.id = idn - marker.header.frame_id = "map" - marker.type = marker.TEXT_VIEW_FACING - marker.text=action - marker.pose.position.x= 1.0 - marker.pose.position.y= 0.0 + (0.18*row) - marker.pose.position.z= 0.2 - marker.pose.orientation.w= 1.0 - marker.scale.z = 0.15 - marker.color.a = 1.0 - marker.color.r = col[0] - marker.color.g = col[1] - marker.color.b = col[2] - marker.ns='/legend' - return marker - - - def get_edge_marker(self, node, edge, idn): - marker = Marker() - marker.id = idn - marker.header.frame_id = node['parent_frame'] - marker.type = marker.LINE_LIST - V1=Point() - V2=Point() - V1=self.node2pose(node['pose']).position - V1.z += 0.1 - to_node=get_node(self.topological_map['nodes'], edge['node']) - col=self.get_colour(self.actions.index(edge['action'])) - if to_node: - V2= self.node2pose(to_node['pose']).position - V2.z += 0.1 - marker.pose.orientation.w= 1.0 - marker.scale.x = 0.1 - marker.color.a = 0.5 - marker.color.r = col[0] - marker.color.g = col[1] - marker.color.b = col[2] - marker.points.append(V1) - marker.points.append(V2) - marker.ns='/edges' - return marker - else: - self.get_logger().warning("No node %s found" %edge.node) - return None - - - def get_node_marker(self, node, idn): - """ - """ - marker = Marker() - marker.id = idn - marker.header.frame_id = node['parent_frame'] - marker.type = Marker.SPHERE - marker.scale.x = 0.2 - marker.scale.y = 0.2 - marker.scale.z = 0.2 - marker.color.a = 0.6 - marker.color.r = 0.2 - marker.color.g = 0.2 - marker.color.b = 0.7 - marker.pose = self.node2pose(node['pose']) - marker.pose.position.z += 0.1 - marker.ns='/nodes' - return marker - - - def get_name_marker(self, node, idn): - marker = Marker() - marker.id = idn - marker.header.frame_id = node['parent_frame'] - marker.type = marker.TEXT_VIEW_FACING - marker.text= node['name'] - marker.pose = self.node2pose(node['pose']) - marker.pose.position.z += 0.2 - #marker.pose.position.y += 0.2 - marker.scale.z = 0.20 - marker.color.a = 1.00 - marker.color.r = 1.00 - marker.color.g = 1.00 - marker.color.b = 1.00 - marker.ns='/names' - return marker - - - def node2pose(self, pose): - node_pose=Pose() - node_pose.position.x = pose['position']['x'] - node_pose.position.y = pose['position']['y'] - node_pose.position.z = pose['position']['z'] - node_pose.orientation.w = pose['orientation']['w'] - node_pose.orientation.x = pose['orientation']['x'] - node_pose.orientation.y = pose['orientation']['y'] - node_pose.orientation.z = pose['orientation']['z'] - return node_pose - - - def get_zone_marker(self, node, idn): - marker = Marker() - marker.id = idn - marker.header.frame_id = "map" - marker.type = marker.LINE_STRIP - marker.pose.orientation.w= 1.0 - marker.scale.x = 0.1 - marker.color.a = 0.8 - marker.color.r = 0.7 - marker.color.g = 0.1 - marker.color.b = 0.2 - - for j in node['verts'] : - Vert = Point() - Vert.z = 0.05 - Vert.x = node['pose']['position']['x'] + j['x'] - Vert.y = node['pose']['position']['y'] + j['y'] - marker.points.append(Vert) - - Vert = Point() - Vert.z = 0.05 - Vert.x = node['pose']['position']['x'] + node['verts'][0]['x'] - Vert.y = node['pose']['position']['y'] + node['verts'][0]['y'] - marker.points.append(Vert) - marker.ns='/zones' - return marker - - def _on_node_shutdown(self): - """ - """ - # self.clear_route() - self.killall=True - self.get_logger().info("See you later") - -def main(): - rclpy.init(args=None) - inter_marker_server = InteractiveMarkerServerHandlerNode("topomap2_interactive_marker_server") - vis_manager = TopoMap2Vis('topomap2_visualisation', inter_marker_server) - executor = MultiThreadedExecutor() - executor.add_node(vis_manager) - executor.add_node(inter_marker_server) - - try: - executor.spin() - except KeyboardInterrupt: - vis_manager.get_logger().info('Shutting down topomap2_visualisation node\n') - inter_marker_server.get_logger().info('Shutting down topomap2_interactive_marker_server node\n') - vis_manager.destroy_node() - inter_marker_server.destroy_node() - rclpy.shutdown() - -if __name__ == '__main__' : - main() \ No newline at end of file diff --git a/topological_navigation/topological_navigation/testing.py b/topological_navigation/topological_navigation/testing.py deleted file mode 100644 index 13790baf..00000000 --- a/topological_navigation/topological_navigation/testing.py +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/env python -import math -import rospy -import sys - -import std_msgs.msg -from topological_navigation.topological_node import * -from topological_navigation_msgs.msg import TopologicalNode, TopologicalMap, Edge -from geometry_msgs.msg import Pose, Point - - -def create_cross_map(width, height, nodeSeparation): - """ Creates a vertical cross with 5 nodes in each line, with the middle at 0,0 """ - xOrigin = 0 - yOrigin = 0 - nodeSeparation = 10 - - nodes = dict() - - originNode = TopologicalNode(name='ChargingPoint', pose=Pose(position=Point(xOrigin, yOrigin, 0))) - nodes['ChargingPoint'] = originNode - - - - # horizontal nodes - prevNodeName = '' - for x in range(-(width/2),(width/2)+1): - if x != 0: - nodeName = 'h_%s'%x - node = TopologicalNode(name=nodeName, pose=Pose(position=Point(x * nodeSeparation, yOrigin, 0))) - nodes[nodeName] = node - else: - nodeName = 'ChargingPoint' - node = originNode - - if prevNodeName: - # connect up this to previous - e = Edge() - e.node = prevNodeName - e.action = 'move_base' - node.edges.append(e) - # previous to this - node = nodes[prevNodeName] - e = Edge() - e.node = nodeName - e.action = 'move_base' - node.edges.append(e) - - prevNodeName = nodeName - - - # vertical nodes - prevNodeName = '' - for y in range(-(height/2),(height/2)+1): - if y != 0: - nodeName = 'v_%s'%y - node = TopologicalNode(name=nodeName, pose=Pose(position=Point(xOrigin, y * nodeSeparation, 0))) - nodes[nodeName] = node - else: - nodeName = 'ChargingPoint' - node = originNode - - if prevNodeName: - # connect up this to previous - e = Edge() - e.node = prevNodeName - e.action = 'move_base' - node.edges.append(e) - # previous to this - node = nodes[prevNodeName] - e = Edge() - e.node = nodeName - e.action = 'move_base' - node.edges.append(e) - - - prevNodeName = nodeName - - return nodes - - -def create_line_map(width, nodeSeparation): - """ Creates a line map of ChargingPoint, Station, then width - 2 waypoints """ - xOrigin = 0 - yOrigin = 0 - nodeSeparation = 10 - - nodes = [] - - nodes.append(TopologicalNode(name='ChargingPoint', pose=Pose(position=Point(xOrigin, yOrigin, 0)))) - nodes.append(TopologicalNode(name='Station', pose=Pose(position=Point(xOrigin + nodeSeparation, yOrigin, 0)))) - - for i in range(width - 2): - nodes.append(TopologicalNode(name='WayPoint%s'%i, pose=Pose(position=Point(xOrigin + nodeSeparation * i, yOrigin, 0)))) - - for i in range(len(nodes) - 1): - n1 = nodes[i] - n2 = nodes[i+1] - - n1n2 = Edge() - n1n2.node = n2.name - n1n2.action = 'move_base' - n1n2.edge_id = '%s_%s' % (n1.name, n2.name) - n1.edges.append(n1n2) - - n2n1 = Edge() - n2n1.node = n1.name - n2n1.action = 'move_base' - n2n1.edge_id = '%s_%s' % (n2.name, n1.name) - n2.edges.append(n2n1) - - - nodes = {node.name: node for node in nodes} - - # print nodes['Station'] - - return nodes - diff --git a/topological_navigation/topological_navigation/tmap_utils.py b/topological_navigation/topological_navigation/tmap_utils.py index 62fbc382..0f1de09c 100644 --- a/topological_navigation/topological_navigation/tmap_utils.py +++ b/topological_navigation/topological_navigation/tmap_utils.py @@ -1,155 +1,255 @@ #!/usr/bin/env python3 -import math +"""Topological map utility functions. +Provides helper functions for YAML loading, split-map handling, and node/edge +access in the tmap2 format. +""" +from copy import deepcopy +import os -def get_node(top_map, node_name): - """ - Given a topological map and a node name it returns the node object - """ - for i in top_map.nodes: - if i.name == node_name: - return i - return None +import yaml +# ===== YAML Loader ===== -def get_node_from_tmap2(top_map, node_name): - """ - Given a topological map 2 and a node name it returns the node object - """ - for i in top_map["nodes"]: - if i["node"]["name"] == node_name: - return i - return None +class CustomSafeLoader(yaml.SafeLoader): + """Custom YAML loader that ensures poses and translations are float-type. -def get_distance(pose1, pose2): + ROS 2 messages (Vector3, Pose, etc.) have assertions for float-type + [x, y, z, w] keys. """ - Returns the straight line distance between two poses - """ - return math.hypot((pose1.position.x - pose2.position.x), (pose1.position.y - pose2.position.y)) + def construct_mapping(self, node, deep=False): + """Construct mapping, converting int to float for pose keys.""" + mapping = super().construct_mapping(node, deep=deep) -def get_distance_node_pose(node, pose): - """ - Returns the straight line distance between a pose and a node - """ - return math.hypot((pose.position.x - node.pose.position.x), (pose.position.y - node.pose.position.y)) + # Convert int to float for pose/vector keys + for key in ['x', 'y', 'z', 'w', 'yaw_goal_tolerance', 'xy_goal_tolerance']: + if key in mapping and isinstance(mapping[key], int): + mapping[key] = float(mapping[key]) + return mapping -def get_distance_node_pose_from_tmap2(node, pose): - dist = math.hypot((pose.position.x - node["node"]["pose"]["position"]["x"]), - (pose.position.y - node["node"]["pose"]["position"]["y"])) - return dist +# ======================== -def get_distance_to_node(nodea, nodeb): - """ - Given two nodes it returns the straight line distance between them - """ - dist = math.hypot((nodeb.pose.position.x - nodea.pose.position.x), - (nodeb.pose.position.y - nodea.pose.position.y)) - return dist +class NoAliasDumper(yaml.SafeDumper): + """YAML dumper that disables aliases/anchors for cleaner output.""" -def get_distance_to_node_tmap2(nodea, nodeb): - """ - Given two nodes it returns the straight line distance between them for tmap2 - """ - dist = math.hypot((nodeb["node"]["pose"]["position"]["x"] - nodea["node"]["pose"]["position"]["x"]), - (nodeb["node"]["pose"]["position"]["y"] - nodea["node"]["pose"]["position"]["y"])) - return dist + def ignore_aliases(self, data): + """Return True for all data to disable aliases.""" + return True -def get_conected_nodes(node): - """ - Given a node it returns the nodes connected to it by one single edge - """ - childs = [] - for i in node.edges: - childs.append(i.node) - return childs +# ======================== +NAVIGATION_CONFIG_FILE_KEY = "navigation_config_file" +DEFAULT_NAVIGATION_CONFIG_FILENAME = "topological_navigation_config.yaml" +_EXTERNAL_TMAP_SECTIONS = ("definitions", "actions") -def get_conected_nodes_tmap2(node): - """ - Given a node it returns the nodes connected to it by one single edge - """ - childs = [] - for i in node["node"]["edges"]: - childs.append(i["node"]) - return childs +def _load_yaml_document(filepath): + """Load a YAML document from *filepath* using ``CustomSafeLoader``.""" + try: + with open(filepath, 'r', encoding='utf-8') as stream: + data = yaml.load(stream, Loader=CustomSafeLoader) + except yaml.YAMLError as exc: + raise ValueError(f"Invalid YAML syntax in {filepath}: {exc}") from exc + except FileNotFoundError as exc: + raise FileNotFoundError(f"File not found: {filepath}") from exc + except OSError as exc: + raise RuntimeError(f"Error reading file {filepath}: {exc}") from exc -def get_edges_between(top_map, nodea, nodeb): - """ - Given a node a it returns the connecting edges to node b - """ - ab = [] - noda = get_node(top_map, nodea) - for j in noda.edges: - if j.node == nodeb: - ab.append(j) - return ab + return data -def get_edges_between_tmap2(top_map, nodea, nodeb): - """ - Given a node a it returns the connecting edges to node b - """ - ab = [] - noda = get_node_from_tmap2(top_map, nodea) - for j in noda["node"]["edges"]: - if j["node"] == nodeb: - ab.append(j) - return ab +def _resolve_reference_path(map_filepath, reference): + """Resolve *reference* relative to *map_filepath* when needed.""" + if os.path.isabs(reference): + return os.path.normpath(reference) + return os.path.normpath( + os.path.join(os.path.dirname(os.path.abspath(map_filepath)), reference) + ) -def get_edge_from_id(top_map, node_name, edge_id): - """ - Given a node and the edge_id it returns the edges object - """ - node = get_node(top_map, node_name) - if node: - for i in node.edges: - if i.edge_id == edge_id: - return i + +def _write_yaml_document(filepath, data, dumper): + """Write *data* as YAML to *filepath*, creating parent directories.""" + directory = os.path.dirname(os.path.abspath(filepath)) + if directory: + os.makedirs(directory, exist_ok=True) + + with open(filepath, 'w', encoding='utf-8') as stream: + yaml.dump(data, stream, default_flow_style=False, Dumper=dumper) + + +def _log_info(logger, message): + """Log *message* through *logger* when available.""" + if logger is not None: + logger.info(message) + + +def load_tmap2_file( + filepath, + logger=None, + return_layout=False, + navigation_config_file=None, +): + """Load a tmap2 YAML file, optionally pulling actions/definitions from a sidecar file. + + The main map file can point at a second YAML document via the top-level + ``navigation_config_file`` key. The referenced file is resolved relative to + the main map file unless an absolute path is given. + + Only the ``definitions`` and ``actions`` sections are imported from the + sidecar file. If either section already exists in the main map file, the + inline value is kept. + + Args: + filepath: Path to the main topological map YAML file. + logger: Optional ROS logger. + return_layout: When ``True``, also return metadata describing which + sections came from the main map versus the sidecar file. + navigation_config_file: Optional explicit path to the sidecar YAML file. + When provided, this takes precedence over the map's + ``navigation_config_file`` key. + + Returns: + dict or tuple[dict, dict]: Loaded map, plus optional layout metadata. + """ + loaded = _load_yaml_document(filepath) + if not isinstance(loaded, dict): + raise TypeError(f"Expected dict from {filepath}, got {type(loaded)}") + + layout = { + "main_path": os.path.abspath(filepath), + NAVIGATION_CONFIG_FILE_KEY: ( + navigation_config_file or loaded.get(NAVIGATION_CONFIG_FILE_KEY) + ), + "config_path": None, + "section_sources": {}, + } + + config_ref = navigation_config_file or loaded.get(NAVIGATION_CONFIG_FILE_KEY) + if not config_ref: + for section in _EXTERNAL_TMAP_SECTIONS: + layout["section_sources"][section] = "main" if section in loaded else "missing" + return (loaded, layout) if return_layout else loaded + + config_path = _resolve_reference_path(filepath, config_ref) + layout["config_path"] = config_path + _log_info( + logger, + f"Loading navigation config from {config_path}", + ) + + config_data = _load_yaml_document(config_path) + if config_data is None: + config_data = {} + if not isinstance(config_data, dict): + raise TypeError( + f"Expected dict from navigation config {config_path}, got {type(config_data)}" + ) + + merged = deepcopy(loaded) + merged[NAVIGATION_CONFIG_FILE_KEY] = config_ref + for section in _EXTERNAL_TMAP_SECTIONS: + if section in loaded: + layout["section_sources"][section] = "main" + elif section in config_data: + merged[section] = deepcopy(config_data[section]) + layout["section_sources"][section] = "external" + else: + layout["section_sources"][section] = "missing" + + return (merged, layout) if return_layout else merged + + +def save_tmap2_file(tmap, filepath, no_alias=False, layout=None, logger=None): + """Save a tmap2 YAML file, preserving split navigation config when present. + + Args: + tmap: Topological map dictionary to write. + filepath: Output path for the main map YAML file. + no_alias: Use ``NoAliasDumper`` when ``True``. + layout: Optional metadata returned by :func:`load_tmap2_file`. + logger: Optional ROS logger. + """ + dumper = NoAliasDumper if no_alias else yaml.SafeDumper + map_copy = deepcopy(tmap) + config_ref = map_copy.get(NAVIGATION_CONFIG_FILE_KEY) + if not config_ref: + _write_yaml_document(filepath, map_copy, dumper) + return + + section_sources = {} + if layout is not None: + section_sources = dict(layout.get("section_sources", {})) + + if not section_sources: + section_sources = { + section: "external" + for section in _EXTERNAL_TMAP_SECTIONS + if section in map_copy + } + has_external_sections = any( + section_sources.get(section) == "external" + for section in _EXTERNAL_TMAP_SECTIONS + ) + + original_main_path = None + if layout is not None: + original_main_path = layout.get("main_path") + + output_ref = config_ref + if os.path.isabs(config_ref): + if original_main_path and os.path.abspath(filepath) != os.path.abspath(original_main_path): + output_ref = os.path.basename(config_ref) + _log_info( + logger, + "Saving split map to a new location; rewriting absolute " + f"{NAVIGATION_CONFIG_FILE_KEY} to {output_ref}", + ) + config_path = ( + config_ref + if output_ref == config_ref + else os.path.join(os.path.dirname(os.path.abspath(filepath)), output_ref) + ) + else: + config_path = _resolve_reference_path(filepath, output_ref) + + config_doc = {} + for section in _EXTERNAL_TMAP_SECTIONS: + if section_sources.get(section) == "external" and section in map_copy: + config_doc[section] = map_copy.pop(section) + + if output_ref != config_ref: + map_copy[NAVIGATION_CONFIG_FILE_KEY] = output_ref + + _write_yaml_document(filepath, map_copy, dumper) + + if has_external_sections: + _write_yaml_document(config_path, config_doc, dumper) + _log_info(logger, f"Saved navigation config to {config_path}") + + +# ======================== + + +def get_node_from_tmap2(top_map, node_name): + """Given a topological map 2 and a node name return the node object.""" + for i in top_map["nodes"]: + if i["node"]["name"] == node_name: + return i return None def get_edge_from_id_tmap2(top_map, node_name, edge_id): - """ - Given a node and the edge_id it returns the edges object for topomap 2 - """ + """Given a node and the edge_id return the edge object for topomap 2.""" node = get_node_from_tmap2(top_map, node_name) if node: for i in node["node"]["edges"]: if i["edge_id"] == edge_id: return i return None - - -def get_node_names_from_edge_id(top_map, edge_id): - """ - Given a tmap and edge id it returns the names of the edge's origin and destination nodes - """ - for node in top_map.nodes: - origin = node.name - for edge in node.edges: - destination = edge.node - if edge.edge_id == edge_id: - return origin, destination - return None,None - - -def get_node_names_from_edge_id_2(top_map, edge_id): - """ - Given a tmap2 and edge id it returns the names of the edge's origin and destination nodes - """ - for node in top_map["nodes"]: - origin = node["node"]["name"] - for edge in node["node"]["edges"]: - destination = edge["node"] - if edge["edge_id"] == edge_id: - return origin, destination - return None,None -######################################################################################################### diff --git a/topological_navigation/topological_navigation/topological_map.py b/topological_navigation/topological_navigation/topological_map.py deleted file mode 100644 index ac76a331..00000000 --- a/topological_navigation/topological_navigation/topological_map.py +++ /dev/null @@ -1,396 +0,0 @@ -#!/usr/bin/env python -import math -import rospy -import warnings - -from topological_navigation.topological_node import * -from topological_navigation_msgs.msg import TopologicalNode, Edge, Vertex - - -from mongodb_store.message_store import MessageStoreProxy -#import topological_navigation.msg - - -# from http://code.activestate.com/recipes/391367-deprecated/ -def deprecated(func): - """This is a decorator which can be used to mark functions - as deprecated. It will result in a warning being emmitted - when the function is used.""" - def newFunc(*args, **kwargs): - warnings.warn("Call to deprecated function %s of topological_map. You should use functions from topological_navigation/manager.py instead." % func.__name__, - category=DeprecationWarning, - stacklevel=2) - rospy.logwarn("Call to deprecated function {0} of topological_map. You should use functions from topological_navigation/manager.py instead.".format(func.__name__)) - return func(*args, **kwargs) - newFunc.__name__ = func.__name__ - newFunc.__doc__ = func.__doc__ - newFunc.__dict__.update(func.__dict__) - return newFunc - -class topological_map(object): - - def __init__(self, name, msg = None): - if msg is None: - self.name = name - self.nodes = self.loadMap(name) - else: - self.name = msg.pointset - self.nodes = self.map_from_msg(msg.nodes) - - - def _get_node_index(self, node_name): - ind = -1 - counter = 0 - - for i in self.nodes: - if i.name == node_name: - ind = counter - counter+=1 - return ind - - - @deprecated - def update_node_waypoint(self, node_name, new_pose): - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"name": node_name, "pointset": self.name} - query_meta = {} - query_meta["pointset"] = self.name - query_meta["map"] = self.map - available = msg_store.query(TopologicalNode._type, query, query_meta) - if len(available) == 1: - positionZ=available[0][0].pose.position.z - available[0][0].pose = new_pose - available[0][0].pose.position.z = positionZ - msg_store.update(available[0][0], query_meta, query, upsert=True) - else: - rospy.logerr("Impossible to store in DB "+str(len(available))+" waypoints found after query") - rospy.logerr("Available data: "+str(available)) - - @deprecated - def update_node_vertex(self, node_name, vertex_index, vertex_pose): - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"name": node_name, "pointset": self.name} - query_meta = {} - query_meta["pointset"] = self.name - query_meta["map"] = self.map - available = msg_store.query(TopologicalNode._type, query, query_meta) - if len(available) == 1: - #vertex_to_edit=available[0][0].verts[vertex_index] - new_x_pos = -(available[0][0].pose.position.x - vertex_pose.position.x) - new_y_pos = -(available[0][0].pose.position.y - vertex_pose.position.y) - available[0][0].verts[vertex_index].x = new_x_pos - available[0][0].verts[vertex_index].y = new_y_pos - msg_store.update(available[0][0], query_meta, query, upsert=True) - else: - rospy.logerr("Impossible to store in DB "+str(len(available))+" waypoints found after query") - rospy.logerr("Available data: "+str(available)) - - @deprecated - def remove_edge(self, edge_name): - #print 'removing edge: '+edge_name - rospy.loginfo('Removing Edge: '+edge_name) - edged = edge_name.split('_') - #print edged - node_name = edged[0] - #nodeindx = self._get_node_index(edged[0]) - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"name": node_name, "pointset": self.name} - query_meta = {} - query_meta["pointset"] = self.name - query_meta["map"] = self.map - available = msg_store.query(TopologicalNode._type, query, query_meta) - if len(available) == 1: - for i in available[0][0].edges: - #print i.node - if i.node == edged[1]: - available[0][0].edges.remove(i) - msg_store.update(available[0][0], query_meta, query, upsert=True) - else: - rospy.logerr("Impossible to store in DB "+str(len(available))+" waypoints found after query") - rospy.logerr("Available data: "+str(available)) - - @deprecated - def update_edge(self, node_name, edge_id, new_action=None, new_top_vel=None): - msg_store = MessageStoreProxy(collection='topological_maps') - # The query retrieves the node name with the given name from the given pointset. - query = {"name": node_name, "pointset": self.name} - # The meta-information is some additional information about the specific - # map that we are interested in (?) - query_meta = {} - query_meta["pointset"] = self.name - query_meta["map"] = self.map - # This returns a tuple containing the object, if it exists, and some - # information about how it's stored in the database. - available = msg_store.query(TopologicalNode._type, query, query_meta) - if len(available) == 1: - for edge in available[0][0].edges: - if edge.edge_id == edge_id: - edge.action = new_action or edge.action - edge.top_vel = new_top_vel or edge.top_vel - - msg_store.update(available[0][0], query_meta, query, upsert=True) - else: - rospy.logerr("Impossible to store in DB "+str(len(available))+" waypoints found after query") - rospy.logerr("Available data: "+str(available)) - - @deprecated - def update_node_name(self, node_name, new_name): - msg_store = MessageStoreProxy(collection='topological_maps') - # The query retrieves the node name with the given name from the given pointset. - query = {"name": node_name, "pointset": self.name} - # The meta-information is some additional information about the specific - # map that we are interested in (?) - query_meta = {} - query_meta["pointset"] = self.name - query_meta["map"] = self.map - # This returns a tuple containing the object, if it exists, and some - # information about how it's stored in the database. - available = msg_store.query(TopologicalNode._type, query, query_meta) - - if len(available) == 1: - available[0][0].name = new_name - # Also need to update all edges which involve the renamed node - allnodes_query = {"pointset": self.name} - allnodes_query_meta = {} - allnodes_query_meta["pointset"] = self.name - allnodes_query_meta["map"] = self.map - # this produces a list of tuples, each with [0] as the node, [1] as database info - allnodes_available = msg_store.query(TopologicalNode._type, {}, allnodes_query_meta) - - # Check the edges of each node for a reference to the node to be - # renamed, and change the edge id if there is one. Enumerate the - # values so that we can edit the objects in place to send them back - # to the database. - for node_ind, node_tpl in enumerate(allnodes_available): - for edge_ind, edge in enumerate(node_tpl[0].edges): - # change names of the edges in other nodes, and update their values in the database - if node_tpl[0].name != node_name and node_name in edge.edge_id: - allnodes_available[node_ind][0].edges[edge_ind].edge_id = edge.edge_id.replace(node_name, new_name) - # must also update the name of the node this edge goes to - allnodes_available[node_ind][0].edges[edge_ind].node = new_name - curnode_query = {"name": node_tpl[0].name, "pointset": self.name} - msg_store.update(allnodes_available[node_ind][0], allnodes_query_meta, curnode_query, upsert=True) - - # update all edge ids for this node - for edge_ind, edge in enumerate(available[0][0].edges): - available[0][0].edges[edge_ind].edge_id = edge.edge_id.replace(node_name, new_name) - - msg_store.update(available[0][0], query_meta, query, upsert=True) - else: - rospy.logerr("Impossible to store in DB "+str(len(available))+" waypoints found after query") - rospy.logerr("Available data: "+str(available)) - - @deprecated - def add_edge(self, or_waypoint, de_waypoint, action): - #print 'removing edge: '+edge_name - rospy.loginfo('Adding Edge from '+or_waypoint+' to '+de_waypoint+' using '+action) - node_name = or_waypoint - #nodeindx = self._get_node_index(edged[0]) - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"name": node_name, "pointset": self.name} - query_meta = {} - query_meta["pointset"] = self.name - query_meta["map"] = self.map - available = msg_store.query(TopologicalNode._type, query, query_meta) - if len(available) == 1: - found =False - for i in available[0][0].edges: - #print i.node - if i.node == de_waypoint: - found=True - break - if not found: - edge = Edge() - edge.edge_id = "{0}_{1}".format(or_waypoint, de_waypoint) - edge.node = de_waypoint - edge.action = action - edge.top_vel = 0.55 - edge.map_2d = available[0][0].map - available[0][0].edges.append(edge) - msg_store.update(available[0][0], query_meta, query, upsert=True) - else: - rospy.logerr("Edge already exist: Try deleting it first") - else: - rospy.logerr("Impossible to store in DB "+str(len(available))+" waypoints found after query") - rospy.logerr("Available data: "+str(available)) - - @deprecated - def remove_node(self, node_name): - rospy.loginfo('Removing Node: '+node_name) - msg_store = MessageStoreProxy(collection='topological_maps') - query = {"name": node_name, "pointset": self.name} - query_meta = {} - query_meta["pointset"] = self.name - query_meta["map"] = self.map - - available = msg_store.query(TopologicalNode._type, query, query_meta) - - node_found = False - if len(available) == 1: - node_found = True - rm_id = str(available[0][1]['_id']) - print(rm_id) - else: - rospy.logerr("Node not found "+str(len(available))+" waypoints found after query") - #rospy.logerr("Available data: "+str(available)) - - - if node_found: - query_meta = {} - query_meta["pointset"] = self.name - edges_to_rm = [] - message_list = msg_store.query(TopologicalNode._type, {}, query_meta) - for i in message_list: - for j in i[0].edges: - if j.node == node_name: - edge_rm = i[0].name+'_'+node_name - edges_to_rm.append(edge_rm) - - for k in edges_to_rm: - print('remove: '+k) - self.remove_edge(k) - msg_store.delete(rm_id) - - @deprecated - def add_node(self, name, dist, pos, std_action): - rospy.loginfo('Creating Node: '+name) - msg_store = MessageStoreProxy(collection='topological_maps') - - found = False - for i in self.nodes: - if i.name == name: - found = True - - if found: - rospy.logerr("Node already exists, try another name") - else: - rospy.loginfo('Adding node: '+name) - - meta = {} - meta["map"] = self.map - meta["pointset"] = self.name - meta["node"] = name - - node = TopologicalNode() - node.name = name - node.map = self.map - node.pointset = self.name - node.pose = pos - vertices=[(0.69, 0.287), (0.287, 0.69), (-0.287, 0.69), (-0.69, 0.287), (-0.69, -0.287), (-0.287, -0.69), (0.287, -0.69), (0.69, -0.287)] - for j in vertices: - v = Vertex() - v.x = float(j[0]) - v.y = float(j[1]) - node.verts.append(v) - - - cx = node.pose.position.x - cy = node.pose.position.y - close_nodes = [] - for i in self.nodes: - ndist = i._get_distance(cx, cy) - if ndist < dist: - if i.name != 'ChargingPoint': - close_nodes.append(i.name) - - for i in close_nodes: - edge = Edge() - edge.node = i - edge.action = std_action - node.edges.append(edge) - - msg_store.insert(node,meta) - - for i in close_nodes: - self.add_edge(i, name, std_action) - - # need to reload the map when a node is added, for consistency - self.loadMap(self.name) - - @deprecated - def delete_map(self): - - rospy.loginfo('Deleting map: '+self.name) - msg_store = MessageStoreProxy(collection='topological_maps') - - query_meta = {} - query_meta["pointset"] = self.name - - message_list = msg_store.query(TopologicalNode._type, {}, query_meta) - for i in message_list: - rm_id = str(i[1]['_id']) - msg_store.delete(rm_id) - - @deprecated - def map_from_msg(self, nodes): - #self.topol_map = msg.pointset - points = [] - for i in nodes: - self.map = i.map - b = topological_node(i.name) - edges = [] - for j in i.edges: - data = {} - data["node"]=j.node - data["action"]=j.action - edges.append(data) - b.edges = edges - verts = [] - for j in i.verts: - data = [j.x,j.y] - verts.append(data) - b._insert_vertices(verts) - c=i.pose - waypoint=[str(c.position.x), str(c.position.y), str(c.position.z), str(c.orientation.x), str(c.orientation.y), str(c.orientation.z), str(c.orientation.w)] - b.waypoint = waypoint - b._get_coords() - points.append(b) - - return points - - @deprecated - def loadMap(self, point_set): - msg_store = MessageStoreProxy(collection='topological_maps') - - query_meta = {} - query_meta["pointset"] = point_set - - available = len(msg_store.query(TopologicalNode._type, {}, query_meta)) > 0 - - if available <= 0: - rospy.logerr("Desired pointset '"+point_set+"' not in datacentre") - rospy.logerr("Available pointsets: "+str(available)) - raise Exception("Can't find waypoints.") - - else: - query_meta = {} - query_meta["pointset"] = point_set - - message_list = msg_store.query(TopologicalNode._type, {}, query_meta) - - points = [] - for i in message_list: - self.map = i[0].map - b = topological_node(i[0].name) - edges = [] - for j in i[0].edges: - data = {} - data["node"]=j.node - data["action"]=j.action - edges.append(data) - b.edges = edges - - verts = [] - for j in i[0].verts: - data = [j.x,j.y] - verts.append(data) - b._insert_vertices(verts) - - c=i[0].pose - waypoint=[str(c.position.x), str(c.position.y), str(c.position.z), str(c.orientation.x), str(c.orientation.y), str(c.orientation.z), str(c.orientation.w)] - b.waypoint = waypoint - b._get_coords() - - points.append(b) - - return points diff --git a/topological_navigation/topological_navigation/topological_node.py b/topological_navigation/topological_navigation/topological_node.py deleted file mode 100644 index cfe6b649..00000000 --- a/topological_navigation/topological_navigation/topological_node.py +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env python -import math -from geometry_msgs.msg import Pose - -def findInList(name,List): - found = name in List - if found : - pos = List.index(name) - else : - pos = -1 - return pos - - -def update_to_expand(to_expand, new_nodes, maptree, father) : - for i in new_nodes : - found_el=False - for j in to_expand : - if i == j.name : - found_el=True - if not found_el : - for k in maptree : - if i == k.name : - new_el=k - new_el._set_Father(father) - to_expand.append(new_el) - return to_expand - - -def get_node(name, maptree) : - for i in maptree : - if i.name == name : - return i - return None - - -class topological_node(object): - def __init__(self, name): - self.name = name - self.expanded=False - self.father='none' - self.px=0.0 - self.py=0.0 - self.influence_radius=1.5 - - def _insert_waypoint(self, waypoint): - self.waypoint=waypoint - self._get_coords() - - def _get_coords(self): - self.px=float(self.waypoint[0]) - self.py=float(self.waypoint[1]) - - def _get_distance(self, cx, cy): - dist=math.hypot((cx-self.px),(cy-self.py)) - return dist - - def _insert_edges(self, edges): - self.edges=edges - - def _insert_vertices(self, vertices): - self.vertices=vertices - a=0 - for i in self.vertices : - dist=math.hypot(i[0],i[1]) - if dist > a : - a=dist - self.influence_radius=a - - def _get_Children(self) : - self.expanded=True - a=['none'] - for k in self.edges : - a.append(k['node']) - a.pop(0) - return a - - def _get_action(self, node) : - for k in self.edges : - if k['node'] == node : - return k['action'] - - def _set_Father(self,father) : - self.father=father - - def _get_pose(self): - p = Pose() - p.position.x=float(self.waypoint[0]) - p.position.y=float(self.waypoint[1]) - p.position.z=float(self.waypoint[2]) - p.orientation.x=float(self.waypoint[3]) - p.orientation.y=float(self.waypoint[4]) - p.orientation.z=float(self.waypoint[5]) - p.orientation.w=float(self.waypoint[6]) - return p \ No newline at end of file diff --git a/topological_navigation/topological_navigation/topomap_marker.py b/topological_navigation/topological_navigation/topomap_marker.py deleted file mode 100644 index cf5949d3..00000000 --- a/topological_navigation/topological_navigation/topomap_marker.py +++ /dev/null @@ -1,198 +0,0 @@ -#!/usr/bin/env python3 - -import rclpy -from rclpy.node import Node -from rclpy.qos import QoSProfile, DurabilityPolicy - -from std_msgs.msg import String -from visualization_msgs.msg import * -from geometry_msgs.msg import Point - -from topological_navigation_msgs.msg import TopologicalMap -import topological_navigation.tmap_utils as tmap_utils - - -class TopologicalVis(Node): - - def __init__(self): - super().__init__('topological_map_markers') - qos = QoSProfile(depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL) - - # Marker Publisher - self.map_markers = MarkerArray() - self.topmap_pub = self.create_publisher(MarkerArray, '~/vis', 2) - self.topmap_pub.publish(self.map_markers) - - # Rescaller Subscriber - self.scale = 1 - self.rescale_sub = self.create_subscription(String, '~/rescale', self.rescale_callback, qos) - - # Map Subscriber - self.map = None - self.map_sub = self.create_subscription(TopologicalMap, '/topological_map', self.map_callback, qos) - self.get_logger().info('map visualiser init complete') - - - def rescale_callback(self, msg): - self.get_logger().info('new scale recieved') - self.get_logger().info(f'scale: {msg.data}') - self.scale = float(msg.data) - self.map_callback(self.map) - - def map_callback(self, msg): - self.get_logger().info('map callback triggered') - self.get_logger().info(f'name: {msg.name}') - self.get_logger().info(f'map: {msg.map}') - self.get_logger().info(f'pointset: {msg.pointset}') - self.get_logger().info(f'last_updated: {msg.last_updated}') - self.get_logger().info(f'total nodes: {len(msg.nodes)}') - - # Message - self.map = msg - - # Array - self.map_markers = MarkerArray() - self.map_markers.markers=[] - - # Legend - actions = list(set(sum([[edge.action for edge in node.edges] for node in self.map.nodes],[]))) - for i, action in enumerate(actions): - self.map_markers.markers.append(self.get_legend_marker(action, i)) - - # Map - for node in self.map.nodes: - - # Nodes - self.map_markers.markers.append(self.get_node_marker(node)) # Node - self.map_markers.markers.append(self.get_name_marker(node)) # Name - self.map_markers.markers.append(self.get_zone_marker(node)) # Zone - - # Edges - for edge in node.edges: - marker = self.get_edge_marker(node, edge, actions.index(edge.action)) - if marker: - self.map_markers.markers.append(marker) - - # Publish - for i, marker in enumerate(self.map_markers.markers): - marker.id = i - self.topmap_pub.publish(self.map_markers) - self.get_logger().info('new map visual published') - - - def get_legend_marker(self, action, col_id): - col=self.get_colour(col_id) - marker = Marker() - marker.header.frame_id = "map" - marker.type = marker.TEXT_VIEW_FACING - marker.text=action - marker.pose.position.x= 1.0+(0.12*(self.scale*col_id)) - marker.pose.position.y= 0.0 - marker.pose.position.z= 0.2 - marker.pose.orientation.w= 1.0 - marker.scale.z = self.scale * 0.1 - marker.color.a = 0.5 - marker.color.r = float(col[0]) - marker.color.g = float(col[1]) - marker.color.b = float(col[2]) - marker.ns='/legend' - return marker - - def get_name_marker(self, node): - marker = Marker() - marker.header.frame_id = "map" - marker.type = marker.TEXT_VIEW_FACING - marker.text= node.name - marker.pose = node.pose - marker.scale.z = self.scale * 0.12 - marker.color.a = 0.9 - marker.color.r = 0.3 - marker.color.g = 0.3 - marker.color.b = 0.3 - marker.ns='/names' - return marker - - def get_edge_marker(self, node, edge, col_id): - marker = Marker() - marker.header.frame_id = "map" - marker.type = marker.LINE_LIST - V1=Point() - V2=Point() - V1= node.pose.position - to_node=tmap_utils.get_node(self.map, edge.node) - col=self.get_colour(col_id) - if to_node: - V2= to_node.pose.position - marker.pose.orientation.w= 1.0 - marker.scale.x = self.scale * 0.1 - marker.color.a = 0.5 - marker.color.r = float(col[0]) - marker.color.g = float(col[1]) - marker.color.b = float(col[2]) - marker.points.append(V1) - marker.points.append(V2) - marker.ns='/edges' - return marker - else: - rospy.logwarn("No node %s found" %edge.node) - return None - - def get_node_marker(self, node): - marker = Marker() - marker.header.frame_id = "map" - marker.type = Marker.SPHERE - marker.scale.x = self.scale * 0.2 - marker.scale.y = self.scale * 0.2 - marker.scale.z = self.scale * 0.2 - marker.color.a = 0.4 - marker.color.r = 0.2 - marker.color.g = 0.2 - marker.color.b = 0.7 - marker.pose = node.pose - marker.pose.position.z = marker.pose.position.z+0.1 - marker.ns='/nodes' - return marker - - - def get_zone_marker(self, node): - marker = Marker() - marker.header.frame_id = "map" - marker.type = marker.LINE_STRIP - marker.pose.orientation.w= 1.0 - marker.scale.x = self.scale * 0.1 - marker.color.a = 0.8 - marker.color.r = 0.7 - marker.color.g = 0.1 - marker.color.b = 0.2 - - for j in node.verts : - Vert = Point() - Vert.z = 0.05 - Vert.x = node.pose.position.x + j.x - Vert.y = node.pose.position.y + j.y - marker.points.append(Vert) - - Vert = Point() - Vert.z = 0.05 - Vert.x = node.pose.position.x + node.verts[0].x - Vert.y = node.pose.position.y + node.verts[0].y - marker.points.append(Vert) - marker.ns='/zones' - return marker - - def get_colour(self, number): - pallete=[[1,1,1],[0,0,0],[1,0,0],[0,1,0],[0,0,1],[1,1,0],[1,0,1],[0,1,1]] - return pallete[number] if number < len(pallete) else pallete[0] - - -def main(args=None): - rclpy.init(args=args) - - TV = TopologicalVis() - rclpy.spin(TV) - - TV.destroy_node() - rclpy.shutdown() - -if __name__ == '__main__': - main() diff --git a/topological_navigation/topological_navigation/topomap_marker2.py b/topological_navigation/topological_navigation/topomap_marker2.py deleted file mode 100644 index ad556b9d..00000000 --- a/topological_navigation/topological_navigation/topomap_marker2.py +++ /dev/null @@ -1,231 +0,0 @@ -#!/usr/bin/env python3 - -import yaml -import rclpy -from rclpy.node import Node -from rclpy.qos import QoSProfile, DurabilityPolicy - -from std_msgs.msg import String -from visualization_msgs.msg import * -from geometry_msgs.msg import Point - -#from topological_navigation_msgs.msg import TopologicalMap -import topological_navigation.tmap_utils as tmap_utils - - - -# this ensures that all the poses and translates -# are float-type and not int-type as there is an -# assertion in ros2 messages (vector3, pose etc.) -# for float-type [x,y,z,w] keys. -class CustomSafeLoader(yaml.SafeLoader): - def construct_mapping(self, node, deep=False): - mapping = super().construct_mapping(node, deep=deep) - - # this can be extended to test the validity of the tmap2 - # as well at load time (or add missing keys) - for key in ['x', 'y', 'z', 'w']: - if key in mapping and isinstance(mapping[key], int): - mapping[key] = float(mapping[key]) - - return mapping - -class TopologicalVis(Node): - - def __init__(self): - super().__init__('topological_map_markers') - qos = QoSProfile(depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL) - - # Marker Publisher - self.map_markers = MarkerArray() - self.topmap_pub = self.create_publisher(MarkerArray, '~/vis', qos_profile=qos) - self.topmap_pub.publish(self.map_markers) - - # Rescaller Subscriber - self.scale = 1 - self.rescale_sub = self.create_subscription(String, '~/rescale', self.rescale_callback, qos_profile=qos) - - # Map Subscriber - self.map = None - self.map_sub = self.create_subscription(String, '/topological_map_2', self.map_callback, qos_profile=qos) - self.get_logger().info('map visualiser init complete') - - - def rescale_callback(self, msg): - self.get_logger().info('new scale recieved') - self.get_logger().info(f'scale: {msg.data}') - self.scale = float(msg.data) - self.map_callback(self.map) - - def map_callback(self, msg): - # Save Message for Republishing with scale - self.map = msg - - # Load Yaml - # self.tmap = yaml.safe_load(msg.data) - self.tmap = yaml.load(msg.data, Loader = CustomSafeLoader) - - # Display Meta Information - self.get_logger().info(' ') - self.get_logger().info('-----') - self.get_logger().info(' ') - self.get_logger().info('map callback triggered') - self.get_logger().info(f'name: {self.tmap["name"]}') - self.get_logger().info(f'map: {self.tmap["metric_map"]}') - self.get_logger().info(f'pointset: {self.tmap["pointset"]}') - self.get_logger().info(f'last_updated: {self.tmap["meta"]["last_updated"]}') - self.get_logger().info(f'total nodes: {len(self.tmap["nodes"])}') - - # Array - self.map_markers = MarkerArray() - self.map_markers.markers=[] - - # Legend - actions = list(set(sum([[edge['action'] for edge in node['node']['edges']] for node in self.tmap['nodes']],[]))) - for i, action in enumerate(actions): - self.map_markers.markers.append(self.get_legend_marker(action, i)) - - # Map - for node in self.tmap['nodes']: - - # Nodes - self.map_markers.markers.append(self.get_node_marker(node)) # Node - self.map_markers.markers.append(self.get_name_marker(node)) # Name - self.map_markers.markers.append(self.get_zone_marker(node)) # Zone - - # Edges - for edge in node['node']['edges']: - marker = self.get_edge_marker(node, edge, actions.index(edge['action'])) - if marker: - self.map_markers.markers.append(marker) - - # Publish - for i, marker in enumerate(self.map_markers.markers): - marker.id = i - self.topmap_pub.publish(self.map_markers) - self.get_logger().info('new map visual published') - - - def get_legend_marker(self, action, col_id): - col=self.get_colour(col_id) - marker = Marker() - marker.header.frame_id = "map" - marker.type = marker.TEXT_VIEW_FACING - marker.text=action - marker.pose.position.x= 1.0+(0.12*(self.scale*col_id)) - marker.pose.position.y= 0.0 - marker.pose.position.z= 0.2 - marker.pose.orientation.w= 1.0 - marker.scale.z = self.scale * 0.1 - marker.color.a = 0.5 - marker.color.r = float(col[0]) - marker.color.g = float(col[1]) - marker.color.b = float(col[2]) - marker.ns='/legend' - return marker - - def get_name_marker(self, node): - marker = Marker() - marker.header.frame_id = "map" - marker.type = marker.TEXT_VIEW_FACING - marker.text= node['node']['name'] - marker.pose.position.x = node['node']['pose']['position']['x'] - marker.pose.position.y = node['node']['pose']['position']['y'] - marker.pose.position.z = node['node']['pose']['position']['z'] - marker.scale.z = self.scale * 0.12 - marker.color.a = 0.9 - marker.color.r = 0.3 - marker.color.g = 0.3 - marker.color.b = 0.3 - marker.ns='/names' - return marker - - def get_edge_marker(self, node, edge, col_id): - marker = Marker() - marker.header.frame_id = "map" - marker.type = marker.LINE_LIST - V1 = Point() - V1.x = node['node']['pose']['position']['x'] - V1.y = node['node']['pose']['position']['y'] - V1.z = node['node']['pose']['position']['z'] - to_node = tmap_utils.get_node_from_tmap2(self.tmap, edge['node']) - col = self.get_colour(col_id) - if to_node: - V2 = Point() - V2.x = to_node['node']['pose']['position']['x'] - V2.y = to_node['node']['pose']['position']['y'] - V2.z = to_node['node']['pose']['position']['z'] - marker.pose.orientation.w = 1.0 - marker.scale.x = self.scale * 0.1 - marker.color.a = 0.5 - marker.color.r = float(col[0]) - marker.color.g = float(col[1]) - marker.color.b = float(col[2]) - marker.points.append(V1) - marker.points.append(V2) - marker.ns='/edges' - return marker - else: - self.get_logger().warn("No node %s found" %edge['node']) - return None - - def get_node_marker(self, node): - marker = Marker() - marker.header.frame_id = "map" - marker.type = Marker.SPHERE - marker.scale.x = self.scale * 0.2 - marker.scale.y = self.scale * 0.2 - marker.scale.z = self.scale * 0.2 - marker.color.a = 0.4 - marker.color.r = 0.2 - marker.color.g = 0.2 - marker.color.b = 0.7 - marker.pose.position.x = node['node']['pose']['position']['x'] - marker.pose.position.y = node['node']['pose']['position']['y'] - marker.pose.position.z = node['node']['pose']['position']['z'] + 0.2 - marker.ns='/nodes' - return marker - - - def get_zone_marker(self, node): - marker = Marker() - marker.header.frame_id = "map" - marker.type = marker.LINE_STRIP - marker.pose.orientation.w = 1.0 - marker.scale.x = self.scale * 0.1 - marker.color.a = 0.8 - marker.color.r = 0.7 - marker.color.g = 0.1 - marker.color.b = 0.2 - - for j in node['node']['verts']: - vert = Point() - vert.z = node['node']['pose']['position']['z'] - vert.x = node['node']['pose']['position']['x'] + j['x'] - vert.y = node['node']['pose']['position']['y'] + j['y'] - marker.points.append(vert) - - vert = Point() - vert.z = node['node']['pose']['position']['z'] - vert.x = node['node']['pose']['position']['x'] + node['node']['verts'][0]['x'] - vert.y = node['node']['pose']['position']['y'] + node['node']['verts'][0]['y'] - marker.points.append(vert) - marker.ns='/zones' - return marker - - def get_colour(self, number): - pallete=[[1,1,1],[0,0,0],[1,0,0],[0,1,0],[0,0,1],[1,1,0],[1,0,1],[0,1,1]] - return pallete[number] if number < len(pallete) else pallete[0] - - -def main(args=None): - rclpy.init(args=args) - - TV = TopologicalVis() - rclpy.spin(TV) - - TV.destroy_node() - rclpy.shutdown() - -if __name__ == '__main__': - main() diff --git a/topological_navigation/topological_navigation/topomap_to_map_image.py b/topological_navigation/topological_navigation/topomap_to_map_image.py new file mode 100644 index 00000000..fdab86b2 --- /dev/null +++ b/topological_navigation/topological_navigation/topomap_to_map_image.py @@ -0,0 +1,696 @@ +#!/usr/bin/env python3 +"""Generate a Nav2 map image from a topological map. + +Usage: + ros2 run topological_navigation topomap_to_map_image.py input.tmap3.yaml \ + --white-extension-m 2.0 \ + --border-width-m 0.25 \ + -o output.png \ + --map-yaml output.yaml + +The output YAML can be passed to Nav2/localization as the map file. Increase +``--white-extension-m`` to widen the free corridor around topomap edges, and +increase ``--border-width-m`` to thicken the black occupied border. + +The generated image uses the occupancy-map convention expected by Nav2: +white pixels are free space, black pixels are occupied borders, and grey +pixels are unknown outer space. Free space is produced by buffering the +topological graph edges by a configured distance in metres. +""" + +import argparse +import math +import os +import sys +from dataclasses import dataclass +from typing import Dict, Iterable, List, Optional, Sequence, Tuple + +from PIL import Image, ImageDraw +import yaml + + +Point = Tuple[float, float] +Edge = Tuple[str, str] + +UNKNOWN_VALUE = 205 +OCCUPIED_VALUE = 0 +FREE_VALUE = 255 + + +@dataclass(frozen=True) +class TopoNode: + """Node geometry used for image generation.""" + + name: str + point: Point + verts: Tuple[Point, ...] + + +@dataclass(frozen=True) +class MapGeometry: + """Topomap geometry transformed into the output map frame.""" + + nodes: Dict[str, TopoNode] + edges: Tuple[Edge, ...] + frame_id: str + + +@dataclass(frozen=True) +class RasterResult: + """Generated map image plus metadata needed by Nav2 map_server.""" + + image: Image.Image + origin: Point + resolution: float + + +@dataclass(frozen=True) +class RouteEdgeSpec: + """Route edge geometry and corridor widths for rasterization.""" + + source: str + target: str + left_m: float + right_m: float + + +def _as_float(value, field_name: str) -> float: + try: + return float(value) + except (TypeError, ValueError) as exc: + raise ValueError(f"Invalid numeric value for {field_name}: {value!r}") from exc + + +def _yaw_from_quaternion(rotation: dict) -> float: + x = _as_float(rotation.get("x", 0.0), "transformation.rotation.x") + y = _as_float(rotation.get("y", 0.0), "transformation.rotation.y") + z = _as_float(rotation.get("z", 0.0), "transformation.rotation.z") + w = _as_float(rotation.get("w", 1.0), "transformation.rotation.w") + return math.atan2(2.0 * (w * z + x * y), 1.0 - 2.0 * (y * y + z * z)) + + +def _transform_point(point: Point, translation: dict, yaw: float) -> Point: + x, y = point + cos_yaw = math.cos(yaw) + sin_yaw = math.sin(yaw) + tx = _as_float(translation.get("x", 0.0), "transformation.translation.x") + ty = _as_float(translation.get("y", 0.0), "transformation.translation.y") + return ( + tx + (cos_yaw * x) - (sin_yaw * y), + ty + (sin_yaw * x) + (cos_yaw * y), + ) + + +def _node_position(node: dict, node_name: str) -> Point: + pose = node.get("pose", {}) + position = pose.get("position", {}) + if "x" not in position or "y" not in position: + raise ValueError(f"Node {node_name!r} is missing pose.position x/y") + return ( + _as_float(position["x"], f"nodes.{node_name}.pose.position.x"), + _as_float(position["y"], f"nodes.{node_name}.pose.position.y"), + ) + + +def _node_verts(node: dict, node_name: str) -> Tuple[Point, ...]: + verts = node.get("verts", []) + if not verts: + return tuple() + if not isinstance(verts, list): + raise ValueError(f"Node {node_name!r} has non-list verts") + + parsed = [] + for index, vert in enumerate(verts): + if not isinstance(vert, dict) or "x" not in vert or "y" not in vert: + raise ValueError(f"Node {node_name!r} has invalid vert at index {index}") + parsed.append(( + _as_float(vert["x"], f"nodes.{node_name}.verts.{index}.x"), + _as_float(vert["y"], f"nodes.{node_name}.verts.{index}.y"), + )) + return tuple(parsed) + + +def geometry_from_tmap(tmap_data: dict, apply_transform: bool = True) -> MapGeometry: + """Extract drawable nodes and edges from a tmap2/tmap3 YAML dictionary.""" + + if not isinstance(tmap_data, dict): + raise ValueError("Topological map YAML must be a mapping") + + raw_nodes = tmap_data.get("nodes", []) + if not isinstance(raw_nodes, list) or not raw_nodes: + raise ValueError("Topological map must contain a non-empty 'nodes' list") + + transformation = tmap_data.get("transformation", {}) + parent_frame = transformation.get("parent", "map") + topo_frame = transformation.get( + "topo_frame_id", transformation.get("child", parent_frame) + ) + output_frame = parent_frame if apply_transform else topo_frame + translation = transformation.get("translation", {}) if apply_transform else {} + rotation = transformation.get("rotation", {}) if apply_transform else {} + yaw = _yaw_from_quaternion(rotation) + + nodes: Dict[str, TopoNode] = {} + raw_edge_refs: List[Edge] = [] + + for entry_index, entry in enumerate(raw_nodes): + if not isinstance(entry, dict) or not isinstance(entry.get("node"), dict): + raise ValueError(f"Invalid node entry at index {entry_index}") + + node = entry["node"] + node_name = node.get("name") or entry.get("meta", {}).get("node") + if not node_name: + raise ValueError(f"Node entry at index {entry_index} is missing a name") + + local_point = _node_position(node, node_name) + local_verts = _node_verts(node, node_name) + absolute_verts = [ + (local_point[0] + vert[0], local_point[1] + vert[1]) + for vert in local_verts + ] + + point = _transform_point(local_point, translation, yaw) + verts = tuple(_transform_point(vert, translation, yaw) for vert in absolute_verts) + nodes[node_name] = TopoNode(name=node_name, point=point, verts=verts) + + edges = node.get("edges", []) + if not isinstance(edges, list): + raise ValueError(f"Node {node_name!r} has non-list edges") + for edge in edges: + if not isinstance(edge, dict): + continue + target_name = edge.get("node") + if target_name: + raw_edge_refs.append((node_name, target_name)) + + drawable_edges = tuple( + (source, target) + for source, target in raw_edge_refs + if source in nodes and target in nodes + ) + return MapGeometry(nodes=nodes, edges=drawable_edges, frame_id=output_frame) + + +def _all_geometry_points( + geometry: MapGeometry, + include_node_polygons: bool, +) -> Iterable[Point]: + for node in geometry.nodes.values(): + yield node.point + if include_node_polygons: + yield from node.verts + + for source, target in geometry.edges: + yield geometry.nodes[source].point + yield geometry.nodes[target].point + + +def _route_quad_points( + start: Point, + end: Point, + left_m: float, + right_m: float, +) -> Tuple[Point, Point, Point, Point]: + """Build an oriented corridor quad around one directed route edge.""" + + dx = end[0] - start[0] + dy = end[1] - start[1] + seg_len = math.hypot(dx, dy) + if seg_len <= 1e-9: + raise ValueError("Route edge has zero length") + + # Left normal for edge direction (start -> end). + nx = -dy / seg_len + ny = dx / seg_len + + start_left = (start[0] + (nx * left_m), start[1] + (ny * left_m)) + end_left = (end[0] + (nx * left_m), end[1] + (ny * left_m)) + end_right = (end[0] - (nx * right_m), end[1] - (ny * right_m)) + start_right = (start[0] - (nx * right_m), start[1] - (ny * right_m)) + return (start_left, end_left, end_right, start_right) + + +def _edge_width(value: object, default_value: float) -> float: + if value is None: + return default_value + width = _as_float(value, "boundary width") + if width < 0.0: + raise ValueError("Boundary widths must be >= 0") + return width + + +def route_specs_from_edge_data( + route_edges: Sequence[dict], + default_left_m: float, + default_right_m: float, +) -> Tuple[RouteEdgeSpec, ...]: + """Build route edge specs from route edge dictionaries. + + Each route edge may optionally contain ``properties.boundary_left`` and + ``properties.boundary_right``. Missing values fall back to defaults. + """ + + if default_left_m < 0.0 or default_right_m < 0.0: + raise ValueError("Default boundary widths must be >= 0") + + specs: List[RouteEdgeSpec] = [] + for edge in route_edges: + source = edge.get("source") + target = edge.get("target") + if not source or not target: + continue + + props = edge.get("properties", {}) or {} + left_m = _edge_width(props.get("boundary_left"), default_left_m) + right_m = _edge_width(props.get("boundary_right"), default_right_m) + specs.append( + RouteEdgeSpec( + source=str(source), + target=str(target), + left_m=left_m, + right_m=right_m, + ) + ) + + return tuple(specs) + + +def _draw_line_with_round_caps( + draw: ImageDraw.ImageDraw, + start: Tuple[int, int], + end: Tuple[int, int], + radius_px: int, + fill_value: int, +) -> None: + width_px = max(1, (2 * radius_px) + 1) + draw.line([start, end], fill=fill_value, width=width_px) + if radius_px > 0: + for x, y in (start, end): + draw.ellipse( + [x - radius_px, y - radius_px, x + radius_px, y + radius_px], + fill=fill_value, + ) + + +def rasterize_geometry( + geometry: MapGeometry, + white_extension_m: float, + border_width_m: float = 0.25, + resolution: float = 0.05, + padding_m: Optional[float] = None, + include_node_polygons: bool = False, + unknown_value: int = UNKNOWN_VALUE, + occupied_value: int = OCCUPIED_VALUE, + free_value: int = FREE_VALUE, +) -> RasterResult: + """Rasterize topomap geometry into a Nav2 occupancy-style image.""" + + if white_extension_m < 0.0: + raise ValueError("white_extension_m must be >= 0") + if border_width_m < 0.0: + raise ValueError("border_width_m must be >= 0") + if resolution <= 0.0: + raise ValueError("resolution must be > 0") + if padding_m is None: + padding_m = white_extension_m + if padding_m < 0.0: + raise ValueError("padding_m must be >= 0") + for name, value in ( + ("unknown_value", unknown_value), + ("occupied_value", occupied_value), + ("free_value", free_value), + ): + if value < 0 or value > 255: + raise ValueError(f"{name} must be in the range [0, 255]") + + points = list(_all_geometry_points(geometry, include_node_polygons)) + if not points: + raise ValueError("No drawable geometry found in topological map") + + bounds_margin = white_extension_m + border_width_m + padding_m + min_x = min(point[0] for point in points) - bounds_margin + max_x = max(point[0] for point in points) + bounds_margin + min_y = min(point[1] for point in points) - bounds_margin + max_y = max(point[1] for point in points) + bounds_margin + + width = max(1, int(math.ceil((max_x - min_x) / resolution)) + 1) + height = max(1, int(math.ceil((max_y - min_y) / resolution)) + 1) + image_top_y = min_y + ((height - 1) * resolution) + + def world_to_pixel(point: Point) -> Tuple[int, int]: + px = int(round((point[0] - min_x) / resolution)) + py = int(round((image_top_y - point[1]) / resolution)) + return px, py + + image = Image.new("L", (width, height), unknown_value) + draw = ImageDraw.Draw(image) + white_radius_px = int(math.ceil(white_extension_m / resolution)) + border_radius_px = int(math.ceil((white_extension_m + border_width_m) / resolution)) + + if include_node_polygons: + for node in geometry.nodes.values(): + if len(node.verts) < 3: + continue + pixels = [world_to_pixel(point) for point in node.verts] + draw.polygon(pixels, fill=occupied_value) + for index, start in enumerate(pixels): + end = pixels[(index + 1) % len(pixels)] + _draw_line_with_round_caps( + draw, start, end, border_radius_px, occupied_value + ) + draw.polygon(pixels, fill=free_value) + for index, start in enumerate(pixels): + end = pixels[(index + 1) % len(pixels)] + _draw_line_with_round_caps( + draw, start, end, white_radius_px, free_value + ) + + for source, target in geometry.edges: + _draw_line_with_round_caps( + draw, + world_to_pixel(geometry.nodes[source].point), + world_to_pixel(geometry.nodes[target].point), + border_radius_px, + occupied_value, + ) + + for source, target in geometry.edges: + _draw_line_with_round_caps( + draw, + world_to_pixel(geometry.nodes[source].point), + world_to_pixel(geometry.nodes[target].point), + white_radius_px, + free_value, + ) + + return RasterResult(image=image, origin=(min_x, min_y), resolution=resolution) + + +def rasterize_route_geometry( + geometry: MapGeometry, + route_edges: Sequence[RouteEdgeSpec], + border_width_m: float = 0.25, + resolution: float = 0.05, + padding_m: float = 0.0, + unknown_value: int = UNKNOWN_VALUE, + occupied_value: int = OCCUPIED_VALUE, + free_value: int = FREE_VALUE, + route_start: Optional[Point] = None, +) -> RasterResult: + """Rasterize route edges with per-edge widths. + + When ``route_start`` is supplied, it replaces the source-node position of + the first valid edge. This lets a live route corridor start at the robot's + current position while subsequent edges remain anchored to topological + nodes. + """ + + if border_width_m < 0.0: + raise ValueError("border_width_m must be >= 0") + if resolution <= 0.0: + raise ValueError("resolution must be > 0") + if padding_m < 0.0: + raise ValueError("padding_m must be >= 0") + + for name, value in ( + ("unknown_value", unknown_value), + ("occupied_value", occupied_value), + ("free_value", free_value), + ): + if value < 0 or value > 255: + raise ValueError(f"{name} must be in the range [0, 255]") + + valid_edges: List[Tuple[RouteEdgeSpec, Point, Point]] = [] + bounds_points: List[Point] = [] + + for edge in route_edges: + if edge.source not in geometry.nodes or edge.target not in geometry.nodes: + continue + if edge.left_m < 0.0 or edge.right_m < 0.0: + raise ValueError("Boundary widths must be >= 0") + + start = ( + route_start + if route_start is not None and not valid_edges + else geometry.nodes[edge.source].point + ) + end = geometry.nodes[edge.target].point + try: + quad = _route_quad_points(start, end, edge.left_m, edge.right_m) + except ValueError: + continue + + valid_edges.append((edge, start, end)) + bounds_points.extend(quad) + radius = max(edge.left_m, edge.right_m) + border_width_m + bounds_points.extend( + [ + (start[0] - radius, start[1] - radius), + (start[0] + radius, start[1] + radius), + (end[0] - radius, end[1] - radius), + (end[0] + radius, end[1] + radius), + ] + ) + + if not valid_edges or not bounds_points: + raise ValueError("No valid route edges to rasterize") + + min_x = min(p[0] for p in bounds_points) - padding_m + max_x = max(p[0] for p in bounds_points) + padding_m + min_y = min(p[1] for p in bounds_points) - padding_m + max_y = max(p[1] for p in bounds_points) + padding_m + + width = max(1, int(math.ceil((max_x - min_x) / resolution)) + 1) + height = max(1, int(math.ceil((max_y - min_y) / resolution)) + 1) + image_top_y = min_y + ((height - 1) * resolution) + + def world_to_pixel(point: Point) -> Tuple[int, int]: + px = int(round((point[0] - min_x) / resolution)) + py = int(round((image_top_y - point[1]) / resolution)) + return px, py + + image = Image.new("L", (width, height), unknown_value) + draw = ImageDraw.Draw(image) + + # Draw occupied corridor border first. + for edge, start, end in valid_edges: + border_quad = _route_quad_points( + start, + end, + edge.left_m + border_width_m, + edge.right_m + border_width_m, + ) + draw.polygon([world_to_pixel(p) for p in border_quad], fill=occupied_value) + border_radius_px = int( + math.ceil((max(edge.left_m, edge.right_m) + border_width_m) / resolution) + ) + if border_radius_px > 0: + for point in (start, end): + cx, cy = world_to_pixel(point) + draw.ellipse( + [ + cx - border_radius_px, + cy - border_radius_px, + cx + border_radius_px, + cy + border_radius_px, + ], + fill=occupied_value, + ) + + # Draw free-space corridor inside border. + for edge, start, end in valid_edges: + free_quad = _route_quad_points(start, end, edge.left_m, edge.right_m) + draw.polygon([world_to_pixel(p) for p in free_quad], fill=free_value) + free_radius_px = int(math.ceil(max(edge.left_m, edge.right_m) / resolution)) + if free_radius_px > 0: + for point in (start, end): + cx, cy = world_to_pixel(point) + draw.ellipse( + [ + cx - free_radius_px, + cy - free_radius_px, + cx + free_radius_px, + cy + free_radius_px, + ], + fill=free_value, + ) + + return RasterResult(image=image, origin=(min_x, min_y), resolution=resolution) + + +def write_map_yaml( + yaml_path: str, + image_path: str, + raster: RasterResult, + negate: int = 0, + occupied_thresh: float = 0.65, + free_thresh: float = 0.196, +) -> None: + """Write a Nav2 map YAML next to the generated image.""" + + yaml_dir = os.path.dirname(os.path.abspath(yaml_path)) or os.getcwd() + image_ref = os.path.relpath(os.path.abspath(image_path), yaml_dir) + data = { + "image": image_ref, + "resolution": float(raster.resolution), + "origin": [float(raster.origin[0]), float(raster.origin[1]), 0.0], + "negate": int(negate), + "occupied_thresh": float(occupied_thresh), + "free_thresh": float(free_thresh), + } + with open(yaml_path, "w", encoding="utf-8") as stream: + yaml.safe_dump(data, stream, default_flow_style=False, sort_keys=False) + + +def generate_map_image( + tmap_path: str, + image_path: str, + white_extension_m: float, + border_width_m: float = 0.25, + resolution: float = 0.05, + padding_m: Optional[float] = None, + include_node_polygons: bool = False, + apply_transform: bool = True, +) -> RasterResult: + """Load a topological map and write the generated PNG image.""" + + with open(tmap_path, "r", encoding="utf-8") as stream: + tmap_data = yaml.safe_load(stream) + + geometry = geometry_from_tmap(tmap_data, apply_transform=apply_transform) + raster = rasterize_geometry( + geometry, + white_extension_m=white_extension_m, + border_width_m=border_width_m, + resolution=resolution, + padding_m=padding_m, + include_node_polygons=include_node_polygons, + ) + os.makedirs(os.path.dirname(os.path.abspath(image_path)), exist_ok=True) + raster.image.save(image_path) + return raster + + +def _default_output_path(tmap_path: str) -> str: + base, _ = os.path.splitext(tmap_path) + if base.endswith(".tmap3") or base.endswith(".tmap2"): + base, _ = os.path.splitext(base) + return f"{base}_topomap_map.png" + + +def _default_yaml_path(image_path: str) -> str: + base, _ = os.path.splitext(image_path) + return f"{base}.yaml" + + +def build_arg_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + description=( + "Generate a Nav2 map image from topological map edges. White " + "pixels mark buffered topomap corridors, black pixels mark " + "occupied borders, and grey pixels mark unknown outer space." + ) + ) + parser.add_argument("tmap", help="Path to a .tmap2.yaml or .tmap3.yaml file") + parser.add_argument( + "-o", + "--output", + default=None, + help="Output PNG path. Defaults to '_topomap_map.png'.", + ) + parser.add_argument( + "--white-extension-m", + "--edge-buffer-m", + dest="white_extension_m", + type=float, + default=2.0, + help="Metres of white free space to extend from each topomap edge.", + ) + parser.add_argument( + "--resolution", + type=float, + default=0.05, + help="Output map resolution in metres per pixel.", + ) + parser.add_argument( + "--border-width-m", + type=float, + default=0.25, + help="Metres of black occupied border outside the white topomap corridor.", + ) + parser.add_argument( + "--padding-m", + type=float, + default=None, + help=( + "Extra grey padding around the generated map in metres. " + "Defaults to the white extension distance." + ), + ) + parser.add_argument( + "--map-yaml", + default=None, + help="Output Nav2 map YAML path. Defaults to the PNG path with .yaml.", + ) + parser.add_argument( + "--no-map-yaml", + action="store_true", + help="Only write the PNG image.", + ) + parser.add_argument( + "--include-node-polygons", + action="store_true", + help="Also draw topological node influence polygons.", + ) + parser.add_argument( + "--no-transform", + action="store_true", + help="Keep geometry in the topological frame instead of applying map transformation.", + ) + return parser + + +def main(args: Optional[Sequence[str]] = None) -> int: + parser = build_arg_parser() + parsed = parser.parse_args(args) + + image_path = parsed.output or _default_output_path(parsed.tmap) + yaml_path = parsed.map_yaml or _default_yaml_path(image_path) + + try: + raster = generate_map_image( + parsed.tmap, + image_path, + white_extension_m=parsed.white_extension_m, + border_width_m=parsed.border_width_m, + resolution=parsed.resolution, + padding_m=parsed.padding_m, + include_node_polygons=parsed.include_node_polygons, + apply_transform=not parsed.no_transform, + ) + + if not parsed.no_map_yaml: + write_map_yaml(yaml_path, image_path, raster) + + except (OSError, ValueError, yaml.YAMLError) as exc: + print(f"Error: {exc}", file=sys.stderr) + return 1 + + print( + "Wrote {image} ({width}x{height}, resolution={resolution:.3f}, " + "origin=[{origin_x:.3f}, {origin_y:.3f}, 0.0])".format( + image=image_path, + width=raster.image.width, + height=raster.image.height, + resolution=raster.resolution, + origin_x=raster.origin[0], + origin_y=raster.origin[1], + ) + ) + if not parsed.no_map_yaml: + print(f"Wrote {yaml_path}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/topological_navigation/topological_navigation/validate_map.py b/topological_navigation/topological_navigation/validate_map.py new file mode 100644 index 00000000..3754c2a4 --- /dev/null +++ b/topological_navigation/topological_navigation/validate_map.py @@ -0,0 +1,260 @@ +#!/usr/bin/env python3 +""" +Topological Map Schema Validator + +This script validates topological map YAML files against the tmap-schema.yaml schema. +It can be used standalone (without ROS) to verify map files are correctly formatted. + +Usage: + python3 validate_map.py [schema_file.yaml] + +If schema_file is not provided, the script will look for tmap-schema.yaml in the +standard config directory. + +Exit codes: + 0 - Validation successful + 1 - Validation failed + 2 - File not found or other error +""" + +import sys +import os +import argparse + +try: + import yaml +except ImportError: + print("Error: PyYAML is required. Install with: pip install pyyaml") + sys.exit(2) + +try: + import jsonschema +except ImportError: + print("Error: jsonschema is required. Install with: pip install jsonschema") + sys.exit(2) + +from topological_navigation.tmap_utils import load_tmap2_file + + +def find_schema_file(schema_name='tmap-schema.yaml'): + """Find a schema file in standard locations.""" + # Try relative to this script + script_dir = os.path.dirname(os.path.abspath(__file__)) + + # Possible locations for the schema file + possible_paths = [ + os.path.join(script_dir, '..', '..', 'config', schema_name), + os.path.join(script_dir, '..', 'config', schema_name), + os.path.join(script_dir, 'config', schema_name), + ] + + # Try ROS2 package share directory if ament_index is available + try: + from ament_index_python.packages import get_package_share_directory + package_path = get_package_share_directory('topological_navigation') + possible_paths.insert(0, os.path.join(package_path, 'config', schema_name)) + except (ImportError, Exception): + pass + + for path in possible_paths: + normalized_path = os.path.normpath(path) + if os.path.isfile(normalized_path): + return normalized_path + + return None + + +def find_navigation_config_schema_file(): + """Find the schema for split actions/definitions config files.""" + return find_schema_file('navigation-config-schema.yaml') + + +def load_yaml_file(filepath): + """Load a YAML file and return its contents.""" + try: + with open(filepath, 'r', encoding='utf-8') as f: + return yaml.safe_load(f) + except yaml.YAMLError as e: + raise ValueError(f"Invalid YAML syntax: {e}") + except FileNotFoundError: + raise FileNotFoundError(f"File not found: {filepath}") + except Exception as e: + raise RuntimeError(f"Error reading file: {e}") + + +def validate_map( + map_file, + schema_file=None, + verbose=False, + navigation_config_file=None, + navigation_config_schema_file=None, +): + """ + Validate a topological map file against the schema. + + Args: + map_file: Path to the topological map YAML file + schema_file: Path to the schema YAML file (optional) + verbose: Print detailed validation information + navigation_config_file: Optional explicit sidecar YAML file containing + actions and definitions. + navigation_config_schema_file: Optional schema for the sidecar YAML file. + + Returns: + Tuple of (is_valid: bool, message: str) + """ + # Find schema file if not provided + if schema_file is None: + schema_file = find_schema_file() + if schema_file is None: + return False, "Could not find tmap-schema.yaml. Please specify schema file path." + + if verbose: + print(f"Using schema: {schema_file}") + print(f"Validating map: {map_file}") + + # Load schema + try: + schema = load_yaml_file(schema_file) + except Exception as e: + return False, f"Error loading schema: {e}" + + # Load map + try: + tmap, layout = load_tmap2_file( + map_file, + return_layout=True, + navigation_config_file=navigation_config_file, + ) + except Exception as e: + return False, f"Error loading map: {e}" + + config_path = layout.get("config_path") + if config_path: + if navigation_config_schema_file is None: + navigation_config_schema_file = find_navigation_config_schema_file() + if navigation_config_schema_file is None: + return ( + False, + "Could not find navigation-config-schema.yaml. " + "Please specify schema file path.", + ) + + if verbose: + print(f"Using navigation config schema: {navigation_config_schema_file}") + print(f"Validating navigation config: {config_path}") + + try: + navigation_config_schema = load_yaml_file(navigation_config_schema_file) + navigation_config = load_yaml_file(config_path) + jsonschema.validate(navigation_config, navigation_config_schema) + except jsonschema.ValidationError as e: + path = ( + " -> ".join(str(p) for p in e.absolute_path) + if e.absolute_path else "root" + ) + return ( + False, + "Navigation config validation failed at " + f"'{path}':\n {e.message}", + ) + except Exception as e: + return False, f"Error validating navigation config: {e}" + + # Validate + try: + jsonschema.validate(tmap, schema) + + # Additional validation checks + warnings = [] + + # Check for node count + node_count = len(tmap.get('nodes', [])) + if verbose: + print(f"Found {node_count} nodes") + + # Check for duplicate node names + node_names = set() + node_names_list = [] # Keep a list for edge validation + for node_entry in tmap.get('nodes', []): + node = node_entry.get('node', {}) + name = node.get('name') + if name: + if name in node_names: + warnings.append(f"Duplicate node name: {name}") + node_names.add(name) + node_names_list.append(name) + + # Check for edges pointing to non-existent nodes + for node_entry in tmap.get('nodes', []): + node = node_entry.get('node', {}) + for edge in node.get('edges', []): + target = edge.get('node') + if target and target not in node_names: + warnings.append(f"Edge '{edge.get('edge_id')}' points to non-existent node: {target}") + + message = "Validation successful" + if warnings: + message += f"\n\nWarnings ({len(warnings)}):\n" + "\n".join(f" - {w}" for w in warnings) + + return True, message + + except jsonschema.ValidationError as e: + # Format a user-friendly error message + path = " -> ".join(str(p) for p in e.absolute_path) if e.absolute_path else "root" + return False, f"Validation failed at '{path}':\n {e.message}" + except jsonschema.SchemaError as e: + return False, f"Schema error: {e.message}" + + +def main(): + parser = argparse.ArgumentParser( + description='Validate topological map YAML files against the schema.', + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Examples: + %(prog)s my_map.tmap2.yaml + %(prog)s my_map.tmap2.yaml --schema custom_schema.yaml + %(prog)s my_map.tmap2.yaml --navigation-config-file topological_navigation_config.yaml + %(prog)s my_map.tmap2.yaml -v + """ + ) + parser.add_argument('map_file', help='Path to the topological map YAML file') + parser.add_argument('--schema', '-s', help='Path to the schema YAML file (optional)') + parser.add_argument( + '--navigation-config-file', + '--nav-config', + help='Path to a sidecar YAML file containing actions and definitions', + ) + parser.add_argument( + '--navigation-config-schema', + help='Path to the actions/definitions sidecar schema YAML file', + ) + parser.add_argument('--verbose', '-v', action='store_true', help='Print detailed information') + + args = parser.parse_args() + + # Check if map file exists + if not os.path.isfile(args.map_file): + print(f"Error: Map file not found: {args.map_file}") + sys.exit(2) + + # Validate + is_valid, message = validate_map( + args.map_file, + args.schema, + args.verbose, + navigation_config_file=args.navigation_config_file, + navigation_config_schema_file=args.navigation_config_schema, + ) + + if is_valid: + print(f"✓ {message}") + sys.exit(0) + else: + print(f"✗ {message}") + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/topological_navigation/topological_navigation/vertex_controller.py b/topological_navigation/topological_navigation/vertex_controller.py deleted file mode 100644 index fe61c589..00000000 --- a/topological_navigation/topological_navigation/vertex_controller.py +++ /dev/null @@ -1,125 +0,0 @@ -#!/usr/bin/env python - -import sys -import rospy - -from threading import Timer -from geometry_msgs.msg import Pose -from geometry_msgs.msg import Point - -from visualization_msgs.msg import * -from interactive_markers.interactive_marker_server import * - -from topological_navigation_msgs.msg import TopologicalNode -from topological_navigation_msgs.msg import TopologicalMap - -from topological_navigation.topological_map import * - - -class VertexControllers(object): - - def __init__(self) : - #map_name = rospy.get_param('/topological_map_name', 'top_map') - self.timer = Timer(1.0, self.timer_callback) - self._vertex_server = InteractiveMarkerServer("topological_map_zones") - self.map_update = rospy.Publisher('/update_map', std_msgs.msg.Time, queue_size=10) - rospy.Subscriber('/topological_map', TopologicalMap, self.MapCallback) - - - def update_map(self, msg) : - print("updating vertex controllers...") - self.topo_map = topological_map(msg.name, msg=msg) - self._vertex_server.clear() - self._vertex_server.applyChanges() - - for node in self.topo_map.nodes : - node._get_coords() - count=0 - for i in node.vertices : - Vert = Point() - Vert.z = 0.05 - Vert.x = node.px + i[0] - Vert.y = node.py + i[1] - vertname = "%s-%d" %(node.name, count) - Pos = Pose() - Pos.position = Vert - self._vertex_marker(vertname, Pos, vertname) - count+=1 - - - """ - MapCallback - - This function receives the Topological Map - """ - def MapCallback(self, msg) : - self.update_map(msg) - - - def _vertex_marker(self, marker_name, pose, marker_description="vertex marker"): - # create an interactive marker for our server - marker = InteractiveMarker() - marker.header.frame_id = "map" - marker.name = marker_name - marker.description = marker_description - - # the marker in the middle - box_marker = Marker() - box_marker.type = Marker.SPHERE - box_marker.scale.x = 0.25 - box_marker.scale.y = 0.25 - box_marker.scale.z = 0.25 - box_marker.color.r = 0.5 - box_marker.color.g = 0.0 - box_marker.color.b = 0.5 - box_marker.color.a = 0.8 - - # create a non-interactive control which contains the box - box_control = InteractiveMarkerControl() - box_control.always_visible = True - #box_control.always_visible = False - box_control.markers.append( box_marker ) - marker.controls.append( box_control ) - - # move x - control = InteractiveMarkerControl() - control.orientation.w = 1 - control.orientation.x = 0 - control.orientation.y = 1 - control.orientation.z = 0 - control.always_visible = False -# control.name = "move_x" -# control.interaction_mode = InteractiveMarkerControl.MOVE_AXIS - control.name = "move_plane" - control.interaction_mode = InteractiveMarkerControl.MOVE_PLANE - marker.controls.append(control) - - - self._vertex_server.insert(marker, self._vertex_feedback) - self._vertex_server.applyChanges() - - if pose is not None: - pose.position.z=pose.position.z+0.15 - self._vertex_server.setPose( marker.name, pose ) - self._vertex_server.applyChanges() - - - def _vertex_feedback(self, feedback): - self.info = feedback - self.timer.cancel() - del self.timer - self.timer = Timer(1.0, self.timer_callback) - self.timer.start() - - - def timer_callback(self) : - vertex_name = self.info.marker_name.rsplit('-', 1) - node_name = vertex_name[0] - vertex_index = int(vertex_name[1]) - self.topo_map.update_node_vertex(node_name, vertex_index, self.info.pose) - self.map_update.publish(rospy.Time.now()) - - - def clear(): - self._vertex_server.clear() - self._vertex_server.applyChanges() diff --git a/topological_navigation_msgs/CMakeLists.txt b/topological_navigation_msgs/CMakeLists.txt index b5ea5913..e41c076f 100644 --- a/topological_navigation_msgs/CMakeLists.txt +++ b/topological_navigation_msgs/CMakeLists.txt @@ -17,12 +17,12 @@ find_package(rosidl_default_generators REQUIRED) find_package(builtin_interfaces REQUIRED) find_package(std_msgs REQUIRED) find_package(geometry_msgs REQUIRED) -find_package(actionlib_msgs REQUIRED) +find_package(action_msgs REQUIRED) set(msg_deps builtin_interfaces std_msgs geometry_msgs - actionlib_msgs + action_msgs ) @@ -58,44 +58,15 @@ set(msg_files # Declare the custom service files set(srv_files "srv/WriteTopologicalMap.srv" - "srv/UpdateEdgeConfig.srv" - "srv/UpdateRestrictions.srv" - "srv/UpdateEdge.srv" - "srv/UpdateAction.srv" - "srv/RestrictMap.srv" "srv/EvaluateNode.srv" "srv/EvaluateEdge.srv" - "srv/AddDatum.srv" - "srv/GetTaggedNodes.srv" - "srv/GetTags.srv" - "srv/GetNodeTags.srv" - "srv/NodeMetadata.srv" - "srv/GetEdgesBetweenNodes.srv" - "srv/AddNode.srv" - "srv/RmvNode.srv" - "srv/AddEdge.srv" - "srv/AddEdgeRviz.srv" - "srv/AddContent.srv" - "srv/UpdateNodeName.srv" - "srv/UpdateNodeTolerance.srv" - "srv/ModifyTag.srv" - "srv/AddTag.srv" - "srv/GetTopologicalMap.srv" - "srv/UpdateEdgeLegacy.srv" "srv/LocalisePose.srv" "srv/GetRouteTo.srv" "srv/GetRouteBetween.srv" - "srv/EstimateTravelTime.srv" - "srv/PredictEdgeState.srv" - "srv/UpdateFailPolicy.srv" - "srv/ReconfAtEdges.srv" "srv/LoadTopoNavTestScenario.srv" "srv/RunTopoNavTestScenario.srv" - "srv/SetInfluenceZone.srv" - "srv/AddEdgeArray.srv" - "srv/AddNodeArray.srv" - "srv/SetInfluenceZoneArray.srv" - "srv/UpdateEdgeConfigArray.srv" + "srv/ReconfAtEdges.srv" + "srv/LoadTmap.srv" ) @@ -106,6 +77,7 @@ set(action_files "action/GotoNode.action" "action/ExecutePolicyMode.action" "action/BuildTopPrediction.action" + "action/RecordMap.action" ) diff --git a/topological_navigation_msgs/action/RecordMap.action b/topological_navigation_msgs/action/RecordMap.action new file mode 100644 index 00000000..bace7588 --- /dev/null +++ b/topological_navigation_msgs/action/RecordMap.action @@ -0,0 +1,21 @@ +# Start recording a topological map while the robot is driven around. +# +# Recording keeps running (adding a node every time the robot has moved +# `node_distance` metres from the previously recorded node) until the goal is +# cancelled. Loop closure is applied automatically: if the robot re-enters the +# influence zone of an already recorded node, that existing node is reused and +# linked to the previous one instead of creating a duplicate node. + +# goal definition +string map_name # Name/pointset for the recorded map. Empty = keep current default. +float64 node_distance # Minimum distance (m) between recorded nodes. 0 = use the node's configured default. +--- +# result definition +bool success +string message +int32 num_nodes +--- +# feedback +int32 num_nodes +string last_node +string status diff --git a/topological_navigation_msgs/package.xml b/topological_navigation_msgs/package.xml index 8e1eb7ca..6af2f305 100644 --- a/topological_navigation_msgs/package.xml +++ b/topological_navigation_msgs/package.xml @@ -28,7 +28,6 @@ builtin_interfaces std_msgs - actionlib_msgs action_msgs geometry_msgs diff --git a/topological_navigation_msgs/srv/AddContent.srv b/topological_navigation_msgs/srv/AddContent.srv deleted file mode 100644 index 5c3a29bd..00000000 --- a/topological_navigation_msgs/srv/AddContent.srv +++ /dev/null @@ -1,5 +0,0 @@ -string node -string content ---- -bool success -string content \ No newline at end of file diff --git a/topological_navigation_msgs/srv/AddDatum.srv b/topological_navigation_msgs/srv/AddDatum.srv deleted file mode 100644 index 9d8aad99..00000000 --- a/topological_navigation_msgs/srv/AddDatum.srv +++ /dev/null @@ -1,4 +0,0 @@ -float64 latitude -float64 longitude ---- -bool success diff --git a/topological_navigation_msgs/srv/AddEdge.srv b/topological_navigation_msgs/srv/AddEdge.srv deleted file mode 100644 index 9faaf93f..00000000 --- a/topological_navigation_msgs/srv/AddEdge.srv +++ /dev/null @@ -1,7 +0,0 @@ -string origin -string destination -string action -string action_type -string edge_id ---- -bool success diff --git a/topological_navigation_msgs/srv/AddEdgeArray.srv b/topological_navigation_msgs/srv/AddEdgeArray.srv deleted file mode 100644 index 8d56cf40..00000000 --- a/topological_navigation_msgs/srv/AddEdgeArray.srv +++ /dev/null @@ -1,3 +0,0 @@ -topological_navigation_msgs/AddEdgeReq[] data ---- -bool success diff --git a/topological_navigation_msgs/srv/AddEdgeRviz.srv b/topological_navigation_msgs/srv/AddEdgeRviz.srv deleted file mode 100644 index 3665264f..00000000 --- a/topological_navigation_msgs/srv/AddEdgeRviz.srv +++ /dev/null @@ -1,18 +0,0 @@ -# This service allows you to add an edge by providing two poses on the map, and -# will add an edge to the topological map based on the closest nodes to those -# clicked locations. - -# Pose of where the first mouse click happened -geometry_msgs/Pose first -# Pose of where the second mouse click happened -geometry_msgs/Pose second - -# If there are nodes within this distance of a click location (for either the -# start or end node), the edge will not be created -float32 max_distance - -# If true, add two edges - one from first->second, one from second->first -bool bidirectional ---- -bool success -string message \ No newline at end of file diff --git a/topological_navigation_msgs/srv/AddNode.srv b/topological_navigation_msgs/srv/AddNode.srv deleted file mode 100644 index e39a5616..00000000 --- a/topological_navigation_msgs/srv/AddNode.srv +++ /dev/null @@ -1,6 +0,0 @@ -string name -geometry_msgs/Pose pose -# Set to true to add nodes which are in close proximity (currently hardcoded to 8m) -bool add_close_nodes ---- -bool success diff --git a/topological_navigation_msgs/srv/AddNodeArray.srv b/topological_navigation_msgs/srv/AddNodeArray.srv deleted file mode 100644 index 3356a11c..00000000 --- a/topological_navigation_msgs/srv/AddNodeArray.srv +++ /dev/null @@ -1,3 +0,0 @@ -topological_navigation_msgs/AddNodeReq[] data ---- -bool success diff --git a/topological_navigation_msgs/srv/AddTag.srv b/topological_navigation_msgs/srv/AddTag.srv deleted file mode 100644 index effb9b3a..00000000 --- a/topological_navigation_msgs/srv/AddTag.srv +++ /dev/null @@ -1,5 +0,0 @@ -string tag -string[] node ---- -bool success -string meta \ No newline at end of file diff --git a/topological_navigation_msgs/srv/EstimateTravelTime.srv b/topological_navigation_msgs/srv/EstimateTravelTime.srv deleted file mode 100644 index 28566e98..00000000 --- a/topological_navigation_msgs/srv/EstimateTravelTime.srv +++ /dev/null @@ -1,4 +0,0 @@ -string start -string target ---- -builtin_interfaces/Duration travel_time diff --git a/topological_navigation_msgs/srv/GetEdgesBetweenNodes.srv b/topological_navigation_msgs/srv/GetEdgesBetweenNodes.srv deleted file mode 100644 index 0992ee37..00000000 --- a/topological_navigation_msgs/srv/GetEdgesBetweenNodes.srv +++ /dev/null @@ -1,5 +0,0 @@ -string nodea -string nodeb ---- -string[] ids_a_to_b -string[] ids_b_to_a \ No newline at end of file diff --git a/topological_navigation_msgs/srv/GetNodeTags.srv b/topological_navigation_msgs/srv/GetNodeTags.srv deleted file mode 100644 index 1451dc0f..00000000 --- a/topological_navigation_msgs/srv/GetNodeTags.srv +++ /dev/null @@ -1,4 +0,0 @@ -string node_name ---- -bool success -string[] tags \ No newline at end of file diff --git a/topological_navigation_msgs/srv/GetTaggedNodes.srv b/topological_navigation_msgs/srv/GetTaggedNodes.srv deleted file mode 100644 index 92c7ac2b..00000000 --- a/topological_navigation_msgs/srv/GetTaggedNodes.srv +++ /dev/null @@ -1,3 +0,0 @@ -string tag ---- -string[] nodes diff --git a/topological_navigation_msgs/srv/GetTags.srv b/topological_navigation_msgs/srv/GetTags.srv deleted file mode 100644 index 3ad97207..00000000 --- a/topological_navigation_msgs/srv/GetTags.srv +++ /dev/null @@ -1,2 +0,0 @@ ---- -string[] tags diff --git a/topological_navigation_msgs/srv/GetTopologicalMap.srv b/topological_navigation_msgs/srv/GetTopologicalMap.srv deleted file mode 100644 index f0cd0b04..00000000 --- a/topological_navigation_msgs/srv/GetTopologicalMap.srv +++ /dev/null @@ -1,3 +0,0 @@ -string pointset #Pointset to retrieve ---- -topological_navigation_msgs/TopologicalMap map diff --git a/topological_navigation_msgs/srv/LoadTmap.srv b/topological_navigation_msgs/srv/LoadTmap.srv new file mode 100644 index 00000000..89768927 --- /dev/null +++ b/topological_navigation_msgs/srv/LoadTmap.srv @@ -0,0 +1,7 @@ +# Load a (partial) topological map file into the map recorder so that it can +# be extended with further recording. +string filename # Path to the tmap2 YAML file to load. +--- +bool success +string message +int32 num_nodes diff --git a/topological_navigation_msgs/srv/ModifyTag.srv b/topological_navigation_msgs/srv/ModifyTag.srv deleted file mode 100644 index d34a705a..00000000 --- a/topological_navigation_msgs/srv/ModifyTag.srv +++ /dev/null @@ -1,6 +0,0 @@ -string tag -string new_tag -string[] node ---- -bool success -string meta \ No newline at end of file diff --git a/topological_navigation_msgs/srv/NodeMetadata.srv b/topological_navigation_msgs/srv/NodeMetadata.srv deleted file mode 100644 index e29524fe..00000000 --- a/topological_navigation_msgs/srv/NodeMetadata.srv +++ /dev/null @@ -1,9 +0,0 @@ -#string map_name -string pointset -string meta_category ---- -string[] name -string[] description -string[] goto_node -string[] node_type -bool[] at_node diff --git a/topological_navigation_msgs/srv/PredictEdgeState.srv b/topological_navigation_msgs/srv/PredictEdgeState.srv deleted file mode 100644 index 8c52ac2b..00000000 --- a/topological_navigation_msgs/srv/PredictEdgeState.srv +++ /dev/null @@ -1,5 +0,0 @@ -builtin_interfaces/Time epoch ---- -string[] edge_ids -float64[] probs -builtin_interfaces/Duration[] durations diff --git a/topological_navigation_msgs/srv/RestrictMap.srv b/topological_navigation_msgs/srv/RestrictMap.srv deleted file mode 100644 index aff76b8d..00000000 --- a/topological_navigation_msgs/srv/RestrictMap.srv +++ /dev/null @@ -1,6 +0,0 @@ -string state # the state of the robot, e.g. '{"robot": "tall", "task": "uv"}' - ---- - -bool success -string restricted_tmap # the map without the nodes/edges which does not satisfy the restrictions according to the state \ No newline at end of file diff --git a/topological_navigation_msgs/srv/RmvNode.srv b/topological_navigation_msgs/srv/RmvNode.srv deleted file mode 100644 index dc5ebb75..00000000 --- a/topological_navigation_msgs/srv/RmvNode.srv +++ /dev/null @@ -1,3 +0,0 @@ -string name ---- -bool success \ No newline at end of file diff --git a/topological_navigation_msgs/srv/SetInfluenceZone.srv b/topological_navigation_msgs/srv/SetInfluenceZone.srv deleted file mode 100644 index 1324716e..00000000 --- a/topological_navigation_msgs/srv/SetInfluenceZone.srv +++ /dev/null @@ -1,5 +0,0 @@ -string name -float64[] vertices_x -float64[] vertices_y ---- -bool success diff --git a/topological_navigation_msgs/srv/SetInfluenceZoneArray.srv b/topological_navigation_msgs/srv/SetInfluenceZoneArray.srv deleted file mode 100644 index bf3160cf..00000000 --- a/topological_navigation_msgs/srv/SetInfluenceZoneArray.srv +++ /dev/null @@ -1,3 +0,0 @@ -topological_navigation_msgs/SetInfluenceZoneReq[] data ---- -bool success diff --git a/topological_navigation_msgs/srv/UpdateAction.srv b/topological_navigation_msgs/srv/UpdateAction.srv deleted file mode 100644 index 0a8da7e1..00000000 --- a/topological_navigation_msgs/srv/UpdateAction.srv +++ /dev/null @@ -1,5 +0,0 @@ -string action_name # the action for which you are setting the type and goal for every edge in map -string action_type # e.g. move_base_msgs/MoveBaseGoal -string goal # json string setting the args of the goal ---- -bool success diff --git a/topological_navigation_msgs/srv/UpdateEdge.srv b/topological_navigation_msgs/srv/UpdateEdge.srv deleted file mode 100644 index 02ed091d..00000000 --- a/topological_navigation_msgs/srv/UpdateEdge.srv +++ /dev/null @@ -1,8 +0,0 @@ -string edge_id -string action_name -string action_type # e.g. move_base_msgs/MoveBaseGoal -string goal # json string setting the args of the goal -string fail_policy -bool not_fluid # if true then the robot gets to the exact pose of the edge's origin node before it is traversed ---- -bool success diff --git a/topological_navigation_msgs/srv/UpdateEdgeConfig.srv b/topological_navigation_msgs/srv/UpdateEdgeConfig.srv deleted file mode 100644 index 0418f595..00000000 --- a/topological_navigation_msgs/srv/UpdateEdgeConfig.srv +++ /dev/null @@ -1,9 +0,0 @@ -string edge_id -string namespace_name -string name -string value # python uses its eval function to determine the type unless it is a string -bool value_is_string -bool not_reset # if false then the param is reconfigured back to its original value after the edge is traversed ---- -bool success -string message diff --git a/topological_navigation_msgs/srv/UpdateEdgeConfigArray.srv b/topological_navigation_msgs/srv/UpdateEdgeConfigArray.srv deleted file mode 100644 index d7e166e3..00000000 --- a/topological_navigation_msgs/srv/UpdateEdgeConfigArray.srv +++ /dev/null @@ -1,3 +0,0 @@ -topological_navigation_msgs/UpdateEdgeConfigReq[] data ---- -bool success diff --git a/topological_navigation_msgs/srv/UpdateEdgeLegacy.srv b/topological_navigation_msgs/srv/UpdateEdgeLegacy.srv deleted file mode 100644 index 10d17f49..00000000 --- a/topological_navigation_msgs/srv/UpdateEdgeLegacy.srv +++ /dev/null @@ -1,6 +0,0 @@ -string edge_id -string action -float32 top_vel ---- -bool success -string message \ No newline at end of file diff --git a/topological_navigation_msgs/srv/UpdateFailPolicy.srv b/topological_navigation_msgs/srv/UpdateFailPolicy.srv deleted file mode 100644 index 79149368..00000000 --- a/topological_navigation_msgs/srv/UpdateFailPolicy.srv +++ /dev/null @@ -1,11 +0,0 @@ -string fail_policy ---- -bool success - - -# "retry_N" with N the number of retries, tries again to execute the same action -# "wait_S_N" with S the number of seconds and N the number of waits, wait action -# "replan_N" with N the number of replans, generates a new plan which does not pass through the same edge where the fail occurred -# "fail" fails the entire plan - -# can combine fail policy actions e.g "replan_2, fail" diff --git a/topological_navigation_msgs/srv/UpdateNodeName.srv b/topological_navigation_msgs/srv/UpdateNodeName.srv deleted file mode 100644 index 2762bee9..00000000 --- a/topological_navigation_msgs/srv/UpdateNodeName.srv +++ /dev/null @@ -1,5 +0,0 @@ -string node_name -string new_name ---- -bool success -string message \ No newline at end of file diff --git a/topological_navigation_msgs/srv/UpdateNodeTolerance.srv b/topological_navigation_msgs/srv/UpdateNodeTolerance.srv deleted file mode 100644 index 88e708cb..00000000 --- a/topological_navigation_msgs/srv/UpdateNodeTolerance.srv +++ /dev/null @@ -1,6 +0,0 @@ -string node_name -float64 xy_tolerance -float64 yaw_tolerance ---- -bool success -string message \ No newline at end of file diff --git a/topological_navigation_msgs/srv/UpdateRestrictions.srv b/topological_navigation_msgs/srv/UpdateRestrictions.srv deleted file mode 100644 index af0dbb6f..00000000 --- a/topological_navigation_msgs/srv/UpdateRestrictions.srv +++ /dev/null @@ -1,7 +0,0 @@ -string name # node name or edge id -string restrictions_planning # boolean sentence -string restrictions_runtime # boolean sentence -bool update_edges # if updating node restrictions then apply planning restrictions to edges involving the node ---- -bool success -string message diff --git a/topological_navigation_visual/launch/topological_map_visualiser.launch.py b/topological_navigation_visual/launch/topological_map_visualiser.launch.py new file mode 100644 index 00000000..432a3177 --- /dev/null +++ b/topological_navigation_visual/launch/topological_map_visualiser.launch.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +"""Launch file for the unified topological map visualiser. + +Usage +----- +Live visualisation (subscribes to /topological_map_2):: + + ros2 launch topological_navigation_visual topological_map_visualiser.launch.py + +Interactive editing from file:: + + ros2 launch topological_navigation_visual topological_map_visualiser.launch.py \ + map_file:=/path/to/map.tmap2.yaml +""" + +from launch import LaunchDescription +from launch.actions import DeclareLaunchArgument +from launch.substitutions import LaunchConfiguration +from launch_ros.actions import Node + + +def generate_launch_description(): + return LaunchDescription([ + DeclareLaunchArgument( + 'map_file', default_value='', + description='Path to a .tmap2.yaml file. ' + 'Leave empty to subscribe to /topological_map_2.', + ), + DeclareLaunchArgument( + 'auto_save', default_value='false', + description='Periodically save the map (every 30 s).', + ), + DeclareLaunchArgument( + 'marker_scale', default_value='0.5', + description='Base scale factor for markers in RViz.', + ), + DeclareLaunchArgument( + 'edit_mode', default_value='true', + description='Enable interactive drag-and-drop editing.', + ), + DeclareLaunchArgument( + 'nav_action_name', default_value='/topological_navigation', + description='GotoNode action server name for click-to-navigate.', + ), + DeclareLaunchArgument( + 'show_node_labels', default_value='true', + description='Render per-node text labels (disable for large ' + 'maps to keep RViz responsive).', + ), + DeclareLaunchArgument( + 'show_zones', default_value='true', + description='Render node influence-zone polygons.', + ), + DeclareLaunchArgument( + 'show_edges', default_value='true', + description='Render edges between nodes.', + ), + DeclareLaunchArgument( + 'auto_marker_scale', default_value='false', + description='Derive marker_scale automatically from the spatial ' + 'spread of the map.', + ), + DeclareLaunchArgument( + 'interactive_marker_limit', default_value='750', + description='Max node count for which interactive (editable) ' + 'markers are created; above this the map is shown ' + 'read-only.', + ), + Node( + package='topological_navigation_visual', + executable='topological_map_visualiser.py', + name='topological_map_visualiser', + output='screen', + parameters=[{ + 'map_file': LaunchConfiguration('map_file'), + 'auto_save': LaunchConfiguration('auto_save'), + 'marker_scale': LaunchConfiguration('marker_scale'), + 'edit_mode': LaunchConfiguration('edit_mode'), + 'nav_action_name': LaunchConfiguration('nav_action_name'), + 'show_node_labels': LaunchConfiguration('show_node_labels'), + 'show_zones': LaunchConfiguration('show_zones'), + 'show_edges': LaunchConfiguration('show_edges'), + 'auto_marker_scale': LaunchConfiguration('auto_marker_scale'), + 'interactive_marker_limit': LaunchConfiguration( + 'interactive_marker_limit'), + }], + ), + ]) diff --git a/topological_navigation_visual/package.xml b/topological_navigation_visual/package.xml new file mode 100644 index 00000000..9b2669cb --- /dev/null +++ b/topological_navigation_visual/package.xml @@ -0,0 +1,36 @@ + + + + topological_navigation_visual + 1.0.0 + Visualization and interactive editing tools for topological maps + + Marc Hanheide + Ibrahim Hroob + + Apache License 2.0 + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + rclpy + action_msgs + geometry_msgs + nav_msgs + tf2_ros + std_msgs + std_srvs + visualization_msgs + interactive_markers + topological_navigation_msgs + topological_navigation + tf_transformations + python3-numpy + python3-yaml + + + ament_python + + diff --git a/topological_rviz_tools/COLCON_IGNORE b/topological_navigation_visual/resource/topological_navigation_visual similarity index 100% rename from topological_rviz_tools/COLCON_IGNORE rename to topological_navigation_visual/resource/topological_navigation_visual diff --git a/topological_navigation_visual/setup.cfg b/topological_navigation_visual/setup.cfg new file mode 100644 index 00000000..efaa4692 --- /dev/null +++ b/topological_navigation_visual/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/topological_navigation_visual +[install] +install_scripts=$base/lib/topological_navigation_visual diff --git a/topological_navigation_visual/setup.py b/topological_navigation_visual/setup.py new file mode 100644 index 00000000..46898560 --- /dev/null +++ b/topological_navigation_visual/setup.py @@ -0,0 +1,44 @@ +from setuptools import find_packages +from setuptools import setup +from glob import glob + +package_name = 'topological_navigation_visual' + +setup( + name=package_name, + version='1.0.0', + packages=find_packages(), + # Bundled (offline) web front end for topological_web_app.py + package_data={ + package_name: ['web/*.html', 'web/*.js', 'web/*.css', 'web/vendor/*'], + }, + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ('share/' + package_name + '/launch/', glob('launch/*', recursive=True)), + ('share/' + package_name + '/config/', glob('config/*', recursive=True)), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='Ibrahim Hroob', + maintainer_email='ihroob@lincoln.ac.uk', + description='Visualization and interactive editing tools for topological maps', + license='Apache License 2.0', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + # Unified map visualization + interactive editor + 'topological_map_visualiser.py = topological_navigation_visual.scripts.topological_map_visualiser:main', + + # Route and occupancy visualization + 'topological_visual.py = topological_navigation_visual.scripts.topological_visual:main', + + # Web app (map, robot position, route, goals) on port 8083 + 'topological_web_app.py = topological_navigation_visual.scripts.topological_web_app:main', + + # Policy visualization + 'policy_marker.py = topological_navigation_visual.policy_marker:main', + ], + }, +) diff --git a/topological_utils/__init__.py b/topological_navigation_visual/test/__init__.py similarity index 100% rename from topological_utils/__init__.py rename to topological_navigation_visual/test/__init__.py diff --git a/topological_navigation_visual/test/test_topological_map_visualiser.py b/topological_navigation_visual/test/test_topological_map_visualiser.py new file mode 100644 index 00000000..2f03de40 --- /dev/null +++ b/topological_navigation_visual/test/test_topological_map_visualiser.py @@ -0,0 +1,193 @@ +"""Tests for fast marker updates in ``topological_map_visualiser.py``.""" + +from types import SimpleNamespace + +from geometry_msgs.msg import Pose +from visualization_msgs.msg import InteractiveMarkerFeedback + +from topological_navigation_visual.scripts.topological_map_visualiser import ( + TopologicalMapVisualiser, +) + + +class _DummyLogger: + """Small logger stub for unit tests.""" + + def debug(self, _msg): + pass + + def info(self, _msg): + pass + + def warn(self, _msg): + pass + + def warning(self, _msg): + pass + + def error(self, _msg): + pass + + +class _Publisher: + """Publisher stub that records the last message.""" + + def __init__(self): + self.messages = [] + + def publish(self, msg): + self.messages.append(msg) + + +class _InteractiveMarkerServer: + """Minimal server stub for exercising feedback handlers.""" + + def applyChanges(self): + pass + + +class _NoIterList(list): + """List-like object that raises if someone iterates it.""" + + def __iter__(self): + raise AssertionError('unexpected full node-list scan') + + +def _make_node(name, x, y, edges=None): + """Build a minimal tmap node entry.""" + return { + 'meta': {'map': 'test_map', 'node': name, 'pointset': 'test_map'}, + 'node': { + 'name': name, + 'parent_frame': 'map', + 'pose': { + 'position': {'x': float(x), 'y': float(y), 'z': 0.0}, + 'orientation': { + 'x': 0.0, + 'y': 0.0, + 'z': 0.0, + 'w': 1.0, + }, + }, + 'edges': edges or [], + }, + } + + +def _make_visualiser(tmap): + """Create a partially constructed visualiser for unit tests.""" + vis = TopologicalMapVisualiser.__new__(TopologicalMapVisualiser) + vis.get_logger = lambda: _DummyLogger() + vis.tmap = tmap + vis.marker_scale = 0.5 + vis.map_marker_pub = _Publisher() + vis.route_marker_pub = _Publisher() + vis._im_server = _InteractiveMarkerServer() + vis._route_nodes = [] + vis._node_entries_by_name = {} + vis._incoming_edges_by_target = {} + vis._action_names = [] + vis._action_index = {} + vis._marker_ids = { + 'nodes': {}, + 'names': {}, + 'zones': {}, + 'edges': {}, + 'legend': {}, + } + return vis + + +def test_refresh_visual_cache_indexes_incoming_edges_and_actions(): + """The visual cache should index nodes, incoming edges, and action order.""" + tmap = { + 'nodes': [ + _make_node('A', 0.0, 0.0, [ + {'edge_id': 'A_B', 'node': 'B', 'action': 'drive'}, + ]), + _make_node('B', 1.0, 0.0), + _make_node('C', -1.0, 0.0, [ + {'edge_id': 'C_B', 'node': 'B', 'action': 'inspect'}, + ]), + ], + } + vis = _make_visualiser(tmap) + + vis._refresh_visual_cache() + + assert set(vis._node_entries_by_name) == {'A', 'B', 'C'} + assert len(vis._incoming_edges_by_target['B']) == 2 + assert vis._action_names == ['drive', 'inspect'] + assert vis._action_index == {'drive': 0, 'inspect': 1} + + +def test_incremental_node_update_publishes_only_local_markers_for_large_map(): + """Dragging one node should only republish the node and connected edges.""" + nodes = [] + total_nodes = 100 + for idx in range(total_nodes): + edges = [] + if idx < total_nodes - 1: + edges.append({ + 'edge_id': f'N{idx}_N{idx + 1}', + 'node': f'N{idx + 1}', + 'action': 'navigate_to_pose', + }) + nodes.append(_make_node(f'N{idx}', float(idx), 0.0, edges)) + + vis = _make_visualiser({'nodes': nodes}) + vis._refresh_visual_cache() + full_array = vis._build_full_static_marker_array() + + assert len(full_array.markers) == 300 + + vis._publish_incremental_node_update('N50') + incremental = vis.map_marker_pub.messages[-1] + + assert len(incremental.markers) == 4 + assert {marker.ns for marker in incremental.markers} == { + '/nodes', + '/names', + '/edges', + } + + +def test_pose_update_uses_cached_node_lookup(): + """Pose updates should mutate the cached node without scanning all nodes.""" + tmap = { + 'nodes': [ + _make_node('A', 0.0, 0.0, [ + {'edge_id': 'A_B', 'node': 'B', 'action': 'drive'}, + ]), + _make_node('B', 1.0, 0.0), + ], + } + vis = _make_visualiser(tmap) + vis._refresh_visual_cache() + vis._build_full_static_marker_array() + vis._schedule_republish = lambda: None + vis._goto_goal_handle = None + vis._cancel_navigation = lambda: None + vis._compute_and_highlight_route = lambda _name: None + vis._send_goto_goal = lambda _name: None + vis._map_dirty = False + + cached_node = vis._node_entries_by_name['A'] + vis.tmap['nodes'] = _NoIterList(vis.tmap['nodes']) + + pose = Pose() + pose.position.x = 5.0 + pose.position.y = -2.0 + pose.orientation.w = 1.0 + + feedback = SimpleNamespace( + event_type=InteractiveMarkerFeedback.POSE_UPDATE, + marker_name='A', + pose=pose, + ) + + vis._im_feedback(feedback) + + assert vis._map_dirty is True + assert cached_node['pose']['position']['x'] == 5.0 + assert cached_node['pose']['position']['y'] == -2.0 diff --git a/topological_navigation_visual/test/test_viz_utils.py b/topological_navigation_visual/test/test_viz_utils.py new file mode 100644 index 00000000..c821453b --- /dev/null +++ b/topological_navigation_visual/test/test_viz_utils.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python3 +"""Unit tests for :mod:`topological_navigation_visual.viz_utils`. + +These tests are pure-Python (no ROS dependencies) so they run both in the +lightweight CI job and under ``colcon test``. +""" + +import math +import os +import sys + +import pytest + +# Make the package importable without an installed/sourced workspace. +_PKG_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +if _PKG_ROOT not in sys.path: + sys.path.insert(0, _PKG_ROOT) + +from topological_navigation_visual import viz_utils # noqa: E402 + + +def _node(name, x, y, z=0.0, edges=None, verts=None): + """Build a minimal tmap2 node entry.""" + return { + 'node': { + 'name': name, + 'pose': {'position': {'x': x, 'y': y, 'z': z}}, + 'edges': edges or [], + 'verts': verts or [], + } + } + + +# ---------------------------------------------------------------------- +# collect_node_positions / build_position_lookup +# ---------------------------------------------------------------------- +def test_collect_node_positions_basic(): + nodes = [_node('a', 1.0, 2.0, 3.0), _node('b', 4.0, 5.0)] + positions = viz_utils.collect_node_positions(nodes) + assert positions == [(1.0, 2.0, 3.0), (4.0, 5.0, 0.0)] + + +def test_collect_node_positions_skips_invalid(): + nodes = [_node('a', 0.0, 0.0), {'node': {'name': 'b'}}, {}] + positions = viz_utils.collect_node_positions(nodes) + assert positions == [(0.0, 0.0, 0.0)] + + +def test_build_position_lookup(): + nodes = [_node('a', 1.0, 2.0), _node('b', 3.0, 4.0)] + lookup = viz_utils.build_position_lookup(nodes) + assert lookup == {'a': (1.0, 2.0, 0.0), 'b': (3.0, 4.0, 0.0)} + + +# ---------------------------------------------------------------------- +# group_edge_segments +# ---------------------------------------------------------------------- +def test_group_edge_segments_by_action(): + nodes = [ + _node('a', 0.0, 0.0, edges=[ + {'node': 'b', 'action': 'navigate_to_pose'}, + {'node': 'c', 'action': 'row_operation'}, + ]), + _node('b', 1.0, 0.0, edges=[ + {'node': 'c', 'action': 'navigate_to_pose'}, + ]), + _node('c', 2.0, 0.0), + ] + groups = viz_utils.group_edge_segments(nodes) + assert set(groups.keys()) == {'navigate_to_pose', 'row_operation'} + assert len(groups['navigate_to_pose']) == 2 + assert len(groups['row_operation']) == 1 + # Endpoints resolve to the correct coordinates. + assert groups['row_operation'][0] == ((0.0, 0.0, 0.0), (2.0, 0.0, 0.0)) + + +def test_group_edge_segments_skips_missing_target(): + nodes = [ + _node('a', 0.0, 0.0, edges=[{'node': 'ghost', 'action': 'x'}]), + ] + groups = viz_utils.group_edge_segments(nodes) + assert groups == {} + + +def test_group_edge_segments_z_offset_applied(): + nodes = [ + _node('a', 0.0, 0.0, edges=[{'node': 'b', 'action': 'x'}]), + _node('b', 1.0, 1.0), + ] + groups = viz_utils.group_edge_segments(nodes, z_offset=0.1) + seg = groups['x'][0] + assert seg[0][2] == pytest.approx(0.1) + assert seg[1][2] == pytest.approx(0.1) + + +# ---------------------------------------------------------------------- +# collect_zone_segments +# ---------------------------------------------------------------------- +def test_collect_zone_segments_closes_polygon(): + verts = [ + {'x': -1.0, 'y': -1.0}, + {'x': 1.0, 'y': -1.0}, + {'x': 1.0, 'y': 1.0}, + {'x': -1.0, 'y': 1.0}, + ] + nodes = [_node('a', 10.0, 20.0, verts=verts)] + segments = viz_utils.collect_zone_segments(nodes) + # 4 vertices -> 4 segments (polygon is closed). + assert len(segments) == 4 + # Vertices are translated by the node position. + assert segments[0][0] == (9.0, 19.0, 0.0) + # Last segment closes back to the first vertex. + assert segments[-1][1] == (9.0, 19.0, 0.0) + + +def test_collect_zone_segments_skips_degenerate(): + nodes = [ + _node('a', 0.0, 0.0, verts=[{'x': 0.0, 'y': 0.0}]), # 1 vertex + _node('b', 0.0, 0.0), # no verts + ] + assert viz_utils.collect_zone_segments(nodes) == [] + + +# ---------------------------------------------------------------------- +# compute_auto_scale +# ---------------------------------------------------------------------- +def test_compute_auto_scale_fallback_for_few_nodes(): + assert viz_utils.compute_auto_scale([], fallback=0.5) == 0.5 + assert viz_utils.compute_auto_scale([(0.0, 0.0, 0.0)], fallback=0.7) == 0.7 + + +def test_compute_auto_scale_coincident_nodes_fallback(): + pts = [(1.0, 1.0, 0.0), (1.0, 1.0, 0.0)] + assert viz_utils.compute_auto_scale(pts, fallback=0.4) == 0.4 + + +def test_compute_auto_scale_scales_with_spread(): + small = [(0.0, 0.0, 0.0), (1.0, 0.0, 0.0)] + large = [(0.0, 0.0, 0.0), (1000.0, 0.0, 0.0)] + s_small = viz_utils.compute_auto_scale(small) + s_large = viz_utils.compute_auto_scale(large) + assert s_large > s_small + + +def test_compute_auto_scale_is_clamped(): + huge = [(0.0, 0.0, 0.0), (1e9, 1e9, 0.0)] + assert viz_utils.compute_auto_scale(huge) <= viz_utils.MAX_SCALE + tiny = [(0.0, 0.0, 0.0), (1e-9, 0.0, 0.0)] + assert viz_utils.compute_auto_scale(tiny) >= viz_utils.MIN_SCALE + + +def test_compute_auto_scale_expected_value(): + # 4 nodes on a 3x3 box: diagonal = sqrt(18); spacing = diag/2; scale = spacing*0.5 + pts = [(0.0, 0.0, 0.0), (3.0, 0.0, 0.0), (3.0, 3.0, 0.0), (0.0, 3.0, 0.0)] + diag = math.hypot(3.0, 3.0) + expected = (diag / math.sqrt(4)) * 0.5 + assert viz_utils.compute_auto_scale(pts) == pytest.approx(expected) + + +# ---------------------------------------------------------------------- +# ordered_action_names +# ---------------------------------------------------------------------- +def test_ordered_action_names_first_seen_order(): + nodes = [ + _node('a', 0.0, 0.0, edges=[ + {'node': 'b', 'action': 'beta'}, + {'node': 'c', 'action': 'alpha'}, + ]), + _node('b', 1.0, 0.0, edges=[ + {'node': 'c', 'action': 'beta'}, # duplicate + ]), + _node('c', 2.0, 0.0), + ] + assert viz_utils.ordered_action_names(nodes) == ['beta', 'alpha'] diff --git a/topological_navigation_visual/test/test_web_server.py b/topological_navigation_visual/test/test_web_server.py new file mode 100644 index 00000000..6fbc92b0 --- /dev/null +++ b/topological_navigation_visual/test/test_web_server.py @@ -0,0 +1,175 @@ +"""Tests for the web app HTTP server (no ROS required).""" + +import http.client +import json +import os + +import pytest + +from topological_navigation_visual.web_server import ( + DEFAULT_WEB_ROOT, WebAppServer, index_static_files, resolve_static_path, +) +from topological_navigation_visual.web_state import WebAppState + + +def _tmap(): + def node(name, x, edges): + return {'node': { + 'name': name, + 'pose': {'position': {'x': x, 'y': 0.0}, + 'orientation': {'w': 1.0}}, + 'edges': [{'edge_id': '%s_%s' % (name, t), 'node': t} + for t in edges], + }} + return {'name': 'm', 'nodes': [node('A', 0.0, ['B']), + node('B', 1.0, ['A'])]} + + +@pytest.fixture +def server(): + state = WebAppState() + state.set_map(_tmap()) + calls = [] + + def on_goto(node): + calls.append(('goto', node)) + state.goal_requested(node) + return True, 'goal to %s sent' % node + + def on_cancel(): + calls.append(('cancel',)) + return False, 'not available' + + srv = WebAppServer(state, on_goto, on_cancel, host='127.0.0.1', port=0, + min_interval=0.01, keepalive=0.2) + srv.calls = calls + srv.start() + yield srv + srv.stop() + + +def _request(srv, method, path, body=None, headers=None): + conn = http.client.HTTPConnection('127.0.0.1', srv.port, timeout=5) + conn.request(method, path, body=body, headers=headers or {}) + resp = conn.getresponse() + data = resp.read() + conn.close() + return resp, data + + +def _post_json(srv, path, payload): + return _request(srv, 'POST', path, json.dumps(payload), + {'Content-Type': 'application/json'}) + + +def test_bundled_assets_present(): + for rel in ('index.html', 'app.js', 'style.css', + 'vendor/react.production.min.js', + 'vendor/react-dom.production.min.js', + 'vendor/htm.umd.js', 'vendor/cytoscape.min.js'): + assert os.path.isfile(os.path.join(DEFAULT_WEB_ROOT, rel)), rel + + +def test_index_uses_only_relative_urls(): + """Assets must resolve relatively so the app works behind a URL prefix.""" + with open(os.path.join(DEFAULT_WEB_ROOT, 'index.html')) as fh: + index = fh.read() + with open(os.path.join(DEFAULT_WEB_ROOT, 'app.js')) as fh: + app = fh.read() + for text in (index, app): + assert 'http://' not in text and 'https://' not in text + assert 'src="/' not in text and 'href="/' not in text + assert "'/api/" not in text + + +def test_resolve_static_path_blocks_traversal(tmp_path): + (tmp_path / 'index.html').write_text('x') + (tmp_path / 'vendor').mkdir() + (tmp_path / 'vendor' / 'lib.js').write_text('y') + files = index_static_files(str(tmp_path)) + index_path = os.path.realpath(str(tmp_path / 'index.html')) + assert resolve_static_path(files, '/') == \ + (index_path, 'text/html; charset=utf-8') + assert resolve_static_path(files, '/vendor/lib.js')[1] == \ + 'application/javascript' + assert resolve_static_path(files, '/../etc/passwd') is None + assert resolve_static_path(files, '/%2e%2e/etc/passwd') is None + assert resolve_static_path(files, '/vendor/../index.html') is None + assert resolve_static_path(files, '/missing.js') is None + + +def test_serves_index_and_vendor(server): + resp, data = _request(server, 'GET', '/') + assert resp.status == 200 + assert b'
' in data + resp, _ = _request(server, 'GET', '/vendor/react.production.min.js') + assert resp.status == 200 + assert resp.getheader('Content-Type') == 'application/javascript' + resp, _ = _request(server, 'GET', '/../setup.py') + assert resp.status == 404 + + +def test_state_and_map_endpoints(server): + resp, data = _request(server, 'GET', '/api/map') + assert resp.status == 200 + payload = json.loads(data) + assert [n['name'] for n in payload['map']['nodes']] == ['A', 'B'] + resp, data = _request(server, 'GET', '/api/state') + assert resp.status == 200 + assert json.loads(data)['navigation']['active'] is False + + +def test_goto(server): + resp, data = _post_json(server, '/api/goto', {'node': 'B'}) + assert resp.status == 202 + assert json.loads(data)['ok'] is True + assert server.calls == [('goto', 'B')] + assert server.state.snapshot()['navigation']['destination'] == 'B' + + +def test_goto_validation(server): + resp, _ = _post_json(server, '/api/goto', {'node': 'Z'}) + assert resp.status == 404 + resp, _ = _post_json(server, '/api/goto', {}) + assert resp.status == 400 + # Non-JSON content types are rejected (cross-site form posts). + resp, _ = _request(server, 'POST', '/api/goto', 'node=A', + {'Content-Type': 'application/x-www-form-urlencoded'}) + assert resp.status == 400 + assert server.calls == [] + + +def test_cancel_failure_reported(server): + resp, data = _post_json(server, '/api/cancel', {}) + assert resp.status == 503 + assert json.loads(data) == {'ok': False, 'message': 'not available'} + + +def test_event_stream_pushes_map_and_updates(server): + conn = http.client.HTTPConnection('127.0.0.1', server.port, timeout=5) + conn.request('GET', '/api/events') + resp = conn.getresponse() + assert resp.status == 200 + assert resp.getheader('Content-Type') == 'text/event-stream' + + def next_event(): + event = None + while True: + line = resp.fp.readline().decode('utf-8').rstrip('\n') + if line.startswith('event: '): + event = line[len('event: '):] + elif line.startswith('data: ') and event: + return event, json.loads(line[len('data: '):]) + + event, payload = next_event() + assert event == 'map' + assert payload['map']['name'] == 'm' + event, payload = next_event() + assert event == 'state' + assert payload['robot']['current_node'] is None + + server.state.set_current_node('A') + event, payload = next_event() + assert event == 'state' + assert payload['robot']['current_node'] == 'A' + conn.close() diff --git a/topological_navigation_visual/test/test_web_state.py b/topological_navigation_visual/test/test_web_state.py new file mode 100644 index 00000000..f11575d4 --- /dev/null +++ b/topological_navigation_visual/test/test_web_state.py @@ -0,0 +1,173 @@ +"""Tests for the web app backend state store (no ROS required).""" + +import math +import threading + +from topological_navigation_visual.web_state import ( + WebAppState, + is_roboflow_enabled, + route_edge_ids, + tmap_to_graph, + yaw_from_quaternion, +) + + +def _node(name, x, y, edges=(), properties=None): + node = { + 'name': name, + 'pose': { + 'position': {'x': x, 'y': y, 'z': 0.0}, + 'orientation': {'x': 0.0, 'y': 0.0, 'z': 0.0, 'w': 1.0}, + }, + 'edges': [ + {'edge_id': '%s_%s' % (name, t), 'node': t, + 'action': 'NavigateToPose'} + for t in edges + ], + } + if properties is not None: + node['properties'] = properties + return {'meta': {'node': name}, 'node': node} + + +def _tmap(): + return { + 'name': 'test_map', + 'transformation': {'topo_frame_id': 'map'}, + 'nodes': [ + _node('A', 0.0, 0.0, ['B']), + _node('B', 1.0, 0.0, ['A', 'C'], + properties={'roboflow': {'enabled': True}, 'field': 1}), + _node('C', 2.0, 1.0, ['B', 'MISSING']), + ], + } + + +def test_roboflow_detection(): + assert is_roboflow_enabled({'roboflow': {'enabled': True}}) + assert is_roboflow_enabled({'roboflow': {'enabled': 'true'}}) + assert is_roboflow_enabled({'roboflow': True}) + assert not is_roboflow_enabled({'roboflow': {'enabled': False}}) + assert not is_roboflow_enabled({'roboflow': {}}) + assert not is_roboflow_enabled({}) + assert not is_roboflow_enabled(None) + + +def test_yaw_from_quaternion(): + assert yaw_from_quaternion(0, 0, 0, 1) == 0.0 + s = math.sin(math.pi / 4) + assert math.isclose(yaw_from_quaternion(0, 0, s, s), math.pi / 2) + + +def test_tmap_to_graph(): + graph = tmap_to_graph(_tmap()) + assert graph['name'] == 'test_map' + assert graph['frame'] == 'map' + nodes = {n['name']: n for n in graph['nodes']} + assert set(nodes) == {'A', 'B', 'C'} + assert nodes['B']['roboflow'] is True + assert nodes['A']['roboflow'] is False + assert nodes['B']['properties']['field'] == 1 + assert nodes['C']['x'] == 2.0 and nodes['C']['y'] == 1.0 + # Edge to a node not in the map is dropped. + pairs = {(e['source'], e['target']) for e in graph['edges']} + assert pairs == {('A', 'B'), ('B', 'A'), ('B', 'C'), ('C', 'B')} + + +def test_route_edge_ids(): + graph = tmap_to_graph(_tmap()) + assert route_edge_ids(['A', 'B', 'C'], graph['edges']) == ['A_B', 'B_C'] + assert route_edge_ids([], graph['edges']) == [] + assert route_edge_ids(['A'], graph['edges']) == [] + + +def test_set_map_bumps_versions_only_on_change(): + state = WebAppState() + assert state.set_map(_tmap()) + v, mv = state.version, state.map_version + assert not state.set_map(_tmap()) + assert (state.version, state.map_version) == (v, mv) + assert state.has_node('A') and not state.has_node('Z') + assert state.map_frame == 'map' + + +def test_robot_state_snapshot(): + state = WebAppState() + state.set_current_node('A') + state.set_closest_node('none') + state.set_pose(1.23456, -2.0, 0.5, 'map') + state.set_odometry(0.3, 0.4, 0.1) + robot = state.snapshot()['robot'] + assert robot['current_node'] == 'A' + assert robot['closest_node'] is None + assert robot['pose'] == {'x': 1.235, 'y': -2.0, 'yaw': 0.5, + 'frame': 'map'} + assert robot['speed'] == {'linear': 0.5, 'angular': 0.1} + v = state.version + state.set_current_node('A') + assert state.version == v # unchanged value -> no update + + +def test_web_goal_lifecycle_and_route_highlight(): + state = WebAppState(clock=lambda: 42.0) + state.set_map(_tmap()) + state.set_route(['A', 'B', 'C']) + # Route is only reported while navigating. + assert state.snapshot()['navigation']['route'] == [] + + state.goal_requested('C') + nav = state.snapshot()['navigation'] + assert nav['active'] and nav['destination'] == 'C' + + state.goal_accepted('C') + state.set_route(['A', 'B', 'C']) + state.set_move_status({'goal': 'B', 'final_goal': 'C'}) + state.set_current_edge('A_B--test_map') + nav = state.snapshot()['navigation'] + assert nav['route'] == ['A', 'B', 'C'] + assert nav['route_edges'] == ['A_B', 'B_C'] + assert nav['current_goal'] == 'B' + assert nav['current_edge'] == 'A_B' + + state.goal_finished('C', 'succeeded') + state.set_action_statuses([4]) + nav = state.snapshot()['navigation'] + assert not nav['active'] + assert nav['destination'] is None + assert nav['route_edges'] == [] + assert nav['last_result'] == {'target': 'C', 'outcome': 'succeeded', + 'time': 42.0} + + +def test_preempted_goal_does_not_clear_new_goal(): + state = WebAppState() + state.set_map(_tmap()) + state.goal_requested('C') + state.goal_accepted('C') + state.goal_requested('A') + state.goal_finished('C', 'aborted') + nav = state.snapshot()['navigation'] + assert nav['active'] and nav['destination'] == 'A' + + +def test_external_goal_via_action_status(): + state = WebAppState() + state.set_action_statuses([2]) + state.set_move_status({'goal': 'B', 'final_goal': 'C'}) + nav = state.snapshot()['navigation'] + assert nav['active'] + assert nav['destination'] == 'C' and nav['current_goal'] == 'B' + state.set_action_statuses([4, 5]) + assert not state.snapshot()['navigation']['active'] + + +def test_wait_for_change_wakes_up(): + state = WebAppState() + v = state.version + timer = threading.Timer(0.05, state.set_current_node, args=('A',)) + timer.start() + assert state.wait_for_change(v, timeout=2.0) != v + timer.join() + # Times out without change. + v = state.version + assert state.wait_for_change(v, timeout=0.01) == v diff --git a/topological_utils/resource/__init__.py b/topological_navigation_visual/topological_navigation_visual/__init__.py similarity index 100% rename from topological_utils/resource/__init__.py rename to topological_navigation_visual/topological_navigation_visual/__init__.py diff --git a/topological_navigation_visual/topological_navigation_visual/policy_marker.py b/topological_navigation_visual/topological_navigation_visual/policy_marker.py new file mode 100644 index 00000000..808c453f --- /dev/null +++ b/topological_navigation_visual/topological_navigation_visual/policy_marker.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python3 +"""Policy visualisation node. + +Subscribes to ``/topological_map_2`` for the current map and to +``mdp_plan_exec/current_policy_mode`` for the active policy. Publishes +arrow markers on ``~/vis`` to show policy edges. +""" + +import math + +import rclpy +import yaml +from rclpy.node import Node +from rclpy.qos import QoSProfile, DurabilityPolicy + +from geometry_msgs.msg import Pose +from std_msgs.msg import String +from visualization_msgs.msg import Marker, MarkerArray +from tf_transformations import quaternion_from_euler + +from topological_navigation.tmap_utils import CustomSafeLoader +from topological_navigation.networkx_utils import build_graph_from_tmap +from topological_navigation.tmap_utils import get_edge_from_id_tmap2 + +from topological_navigation_msgs.msg import NavRoute + + +class PoliciesVis(Node): + """Visualise the current topological policy as arrows in RViz.""" + + def __init__(self): + super().__init__('topological_policy_markers') + self.lnodes = None + self._graph = None + self.policy = MarkerArray() + + self.marker_pub = self.create_publisher(MarkerArray, '~/vis', 10) + self.marker_pub.publish(self.policy) + + qos = QoSProfile( + depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL + ) + self.create_subscription( + String, '/topological_map_2', self._map_cb, qos + ) + self.create_subscription( + NavRoute, 'mdp_plan_exec/current_policy_mode', + self._policy_cb, qos, + ) + self.get_logger().info('Policy visualiser started') + + def _map_cb(self, msg: String): + self.lnodes = yaml.load(msg.data, Loader=CustomSafeLoader) + self._graph = build_graph_from_tmap( + self.lnodes, logger=self.get_logger(), + ) + self.get_logger().info('Map received for policy visualisation') + + def _policy_cb(self, msg: NavRoute): + if self.lnodes is None or self._graph is None: + return + + self.policy = MarkerArray() + added_sources = [] + + for i in range(len(msg.source)): + source = msg.source[i] + edge_id = msg.edge_id[i] + + if source not in self._graph: + continue + ori_attrs = self._graph.nodes[source] + ori_pose = { + 'position': { + 'x': ori_attrs['x'], + 'y': ori_attrs['y'], + 'z': ori_attrs['z'], + }, + } + + edge_data = get_edge_from_id_tmap2( + self.lnodes, source, edge_id + ) + if edge_data is None: + continue + + tgt_name = edge_data['node'] + if tgt_name not in self._graph: + continue + tgt_attrs = self._graph.nodes[tgt_name] + tgt_pose = { + 'position': { + 'x': tgt_attrs['x'], + 'y': tgt_attrs['y'], + 'z': tgt_attrs['z'], + }, + } + + added_sources.append(source) + colour = ( + [0.1, 0.1, 0.9] + if edge_data['node'] in added_sources + else [0.9, 0.1, 0.1] + ) + self.policy.markers.append( + self._arrow( + ori_pose, tgt_pose, colour + ) + ) + + for idx, m in enumerate(self.policy.markers): + m.id = idx + self.marker_pub.publish(self.policy) + + @staticmethod + def _arrow(pose1_dict, pose2_dict, colour) -> Marker: + m = Marker() + m.header.frame_id = 'map' + m.type = Marker.ARROW + + p1x = float(pose1_dict['position']['x']) + p1y = float(pose1_dict['position']['y']) + p1z = float(pose1_dict['position']['z']) + p2x = float(pose2_dict['position']['x']) + p2y = float(pose2_dict['position']['y']) + + angle = math.atan2(p2y - p1y, p2x - p1x) + qat = quaternion_from_euler(0, 0, angle) + + pose = Pose() + pose.position.x = p1x + pose.position.y = p1y + pose.position.z = p1z + pose.orientation.w = qat[3] + pose.orientation.x = qat[0] + pose.orientation.y = qat[1] + pose.orientation.z = qat[2] + + r = math.hypot(p2y - p1y, p2x - p1x) + m.scale.x = r + m.scale.y = 0.15 + m.scale.z = 0.15 + m.color.a = 0.95 + m.color.r = float(colour[0]) + m.color.g = float(colour[1]) + m.color.b = float(colour[2]) + m.pose = pose + return m + + +def main(args=None): + rclpy.init(args=args) + node = PoliciesVis() + try: + rclpy.spin(node) + except KeyboardInterrupt: + pass + finally: + node.destroy_node() + if rclpy.ok(): + rclpy.shutdown() + + +if __name__ == '__main__': + main() diff --git a/topological_utils/topological_utils/__init__.py b/topological_navigation_visual/topological_navigation_visual/scripts/__init__.py similarity index 100% rename from topological_utils/topological_utils/__init__.py rename to topological_navigation_visual/topological_navigation_visual/scripts/__init__.py diff --git a/topological_navigation_visual/topological_navigation_visual/scripts/topological_map_visualiser.py b/topological_navigation_visual/topological_navigation_visual/scripts/topological_map_visualiser.py new file mode 100644 index 00000000..1bf2e532 --- /dev/null +++ b/topological_navigation_visual/topological_navigation_visual/scripts/topological_map_visualiser.py @@ -0,0 +1,1568 @@ +#!/usr/bin/env python3 +"""Unified topological map visualiser with interactive editing. + +Provides a single ROS 2 node that: +- Subscribes to ``/topological_map_2`` and renders nodes, edges, zones, and + labels as RViz ``MarkerArray`` messages. +- Optionally loads a map directly from a YAML file for editing (``map_file`` + parameter). +- Creates interactive markers for every node, allowing the user to drag + positions (X/Y) and rotate yaw in RViz. +- Saves the modified map back to YAML and re-publishes it on + ``/topological_map_2`` so that downstream nodes pick up changes + immediately. + +Usage +----- +**Live visualisation only** (subscribes to map topic):: + + ros2 run topological_navigation_visual topological_map_visualiser.py + +**Interactive editing from file**:: + + ros2 run topological_navigation_visual topological_map_visualiser.py \\ + --ros-args -p map_file:=/path/to/map.tmap2.yaml + +**Save** (from another terminal):: + + ros2 service call /topological_map_visualiser/save_map std_srvs/srv/Trigger + +""" + +import math +import os +import sys +import tempfile + +import rclpy +from rclpy.node import Node +from rclpy.executors import MultiThreadedExecutor +from rclpy.callback_groups import ReentrantCallbackGroup +from rclpy.parameter import Parameter +from rclpy.qos import QoSProfile, DurabilityPolicy + +import yaml +import tf_transformations + +from geometry_msgs.msg import Point, Pose +from rcl_interfaces.msg import ( + FloatingPointRange, + IntegerRange, + ParameterDescriptor, + SetParametersResult, +) +from std_msgs.msg import String +from std_srvs.srv import Trigger +from visualization_msgs.msg import ( + InteractiveMarker, + InteractiveMarkerControl, + InteractiveMarkerFeedback, + Marker, + MarkerArray, +) +from rclpy.action import ActionClient +from interactive_markers import InteractiveMarkerServer, MenuHandler + +from topological_navigation.tmap_utils import CustomSafeLoader +from topological_navigation.navigation_graph import plan_route +from topological_navigation.networkx_utils import build_graph_from_tmap +from topological_navigation_msgs.action import GotoNode + +from topological_navigation_visual import viz_utils + +# ────────────────────────────────────────────────────────────────── +# Colour palette +# ────────────────────────────────────────────────────────────────── +_PALETTE = [ + [0.2, 0.2, 0.7], + [1.0, 0.0, 0.0], + [0.0, 0.0, 1.0], + [0.0, 1.0, 0.0], + [1.0, 1.0, 0.0], + [1.0, 0.0, 1.0], + [0.0, 1.0, 1.0], + [1.0, 1.0, 1.0], +] + + +def _colour(index: int): + """Return an RGB list from the palette, wrapping around.""" + return _PALETTE[index % len(_PALETTE)] + + +def _node2pose(pose_dict) -> Pose: + """Convert a tmap2 pose dict to a ``geometry_msgs/Pose``.""" + p = Pose() + p.position.x = float(pose_dict['position']['x']) + p.position.y = float(pose_dict['position']['y']) + p.position.z = float(pose_dict['position']['z']) + p.orientation.w = float(pose_dict['orientation']['w']) + p.orientation.x = float(pose_dict['orientation']['x']) + p.orientation.y = float(pose_dict['orientation']['y']) + p.orientation.z = float(pose_dict['orientation']['z']) + return p + + +def _node_xyz(node, z_offset: float = 0.0): + """Return a node's ``(x, y, z)`` position from its tmap2 dict.""" + pos = node['pose']['position'] + return ( + float(pos['x']), + float(pos['y']), + float(pos.get('z', 0.0)) + z_offset, + ) + + +# ══════════════════════════════════════════════════════════════════ +# Main visualiser node +# ══════════════════════════════════════════════════════════════════ +class TopologicalMapVisualiser(Node): + """Unified map visualiser with optional interactive editing.""" + + def __init__(self): + super().__init__('topological_map_visualiser') + + # ── Parameters ────────────────────────────────────────── + # ``map_file`` and ``nav_action_name`` are start-up only. + self.declare_parameter( + 'map_file', '', + ParameterDescriptor( + description='Path to a .tmap2.yaml file. Empty = subscribe ' + 'to /topological_map_2 (start-up only).', + read_only=True, + ), + ) + self.declare_parameter( + 'nav_action_name', '/topological_navigation', + ParameterDescriptor( + description='GotoNode action server for click-to-navigate ' + '(start-up only).', + read_only=True, + ), + ) + + # The following parameters can all be changed at runtime via + # ``ros2 param set`` (see ``_on_set_parameters``). + self.declare_parameter( + 'auto_save', False, + ParameterDescriptor( + description='Periodically save the map to file every 30 s.', + ), + ) + self.declare_parameter( + 'marker_scale', 0.5, + ParameterDescriptor( + description='Base scale factor for RViz markers.', + floating_point_range=[FloatingPointRange( + from_value=float(viz_utils.MIN_SCALE), + to_value=float(viz_utils.MAX_SCALE), + step=0.0, + )], + ), + ) + self.declare_parameter( + 'edit_mode', True, + ParameterDescriptor( + description='Enable interactive drag-and-drop node editing.', + ), + ) + self.declare_parameter( + 'show_node_labels', True, + ParameterDescriptor( + description='Render per-node text labels. Disable for large ' + 'maps — text markers are the most expensive ' + 'RViz primitive.', + ), + ) + self.declare_parameter( + 'show_zones', True, + ParameterDescriptor( + description='Render node influence-zone polygons.', + ), + ) + self.declare_parameter( + 'show_edges', True, + ParameterDescriptor( + description='Render edges between nodes.', + ), + ) + self.declare_parameter( + 'auto_marker_scale', False, + ParameterDescriptor( + description='Derive marker_scale automatically from the ' + 'spatial spread of the map.', + ), + ) + self.declare_parameter( + 'interactive_marker_limit', 750, + ParameterDescriptor( + description='Maximum node count for which interactive ' + '(editable) markers are created. Above this the ' + 'map is shown read-only to keep RViz responsive.', + integer_range=[IntegerRange( + from_value=0, to_value=1_000_000, step=1, + )], + ), + ) + + self.map_file: str = self.get_parameter('map_file').value + nav_action: str = self.get_parameter('nav_action_name').value + self.auto_save: bool = self.get_parameter('auto_save').value + self.edit_mode: bool = self.get_parameter('edit_mode').value + self.show_node_labels: bool = self.get_parameter( + 'show_node_labels').value + self.show_zones: bool = self.get_parameter('show_zones').value + self.show_edges: bool = self.get_parameter('show_edges').value + self.auto_marker_scale: bool = self.get_parameter( + 'auto_marker_scale').value + self.interactive_marker_limit: int = self.get_parameter( + 'interactive_marker_limit').value + + # ``_base_marker_scale`` is the user-requested scale; ``marker_scale`` + # is the *effective* scale (possibly auto-computed) used by markers. + self._base_marker_scale: float = self.get_parameter( + 'marker_scale').value + self.marker_scale: float = self._base_marker_scale + + # Register the runtime parameter callback (ROS 2 Humble compatible). + self._param_apply_timer = None + self.add_on_set_parameters_callback(self._on_set_parameters) + + # ── State ──────────────────────────────────────────────── + self.tmap = None + self._graph = None + self._map_dirty = False + self._node_entries_by_name: dict[str, dict] = {} + self._action_names: list[str] = [] + self._action_index: dict[str, int] = {} + # Names of source nodes for every edge that *terminates* at a node, + # keyed by the target node name. Lets an incremental update redraw + # only the edge markers whose endpoint moved. + self._incoming_edges_by_target: dict[str, list] = {} + # Stable RViz marker ids assigned per namespace, keyed by node name + # (or action name for the legend). Reused by incremental updates so a + # single dragged node republishes the same ids instead of the map. + self._marker_ids: dict[str, dict] = { + 'nodes': {}, + 'names': {}, + 'zones': {}, + 'edges': {}, + 'legend': {}, + } + self._navigating_to: str | None = None + self._current_node: str = 'none' + self._closest_node: str = 'none' + self._route_nodes: list = [] # ordered node names on active route + self._pending_route_target: str | None = None + self._route_retry_timer = None + self._initial_vis_timer = None + + # ── Debounced republish after drag ──────────────────────── + self._republish_timer = None + self._temp_map_dir = os.path.join( + tempfile.gettempdir(), 'topological_maps', + ) + os.makedirs(self._temp_map_dir, exist_ok=True) + + # ── QoS ────────────────────────────────────────────────── + self._latching_qos = QoSProfile( + depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL + ) + self._cb_group = ReentrantCallbackGroup() + + # ── Publishers ─────────────────────────────────────────── + self.map_marker_pub = self.create_publisher( + MarkerArray, + 'topological_map_visualisation', + qos_profile=self._latching_qos, + ) + self.map_topic_pub = self.create_publisher( + String, + '/topological_map_2', + qos_profile=self._latching_qos, + ) + self.route_marker_pub = self.create_publisher( + MarkerArray, + 'topological_route_visualisation', + qos_profile=self._latching_qos, + ) + + # ── Interactive-marker server (for dragging nodes) ────── + self._im_server = InteractiveMarkerServer( + self, 'topological_map_editor' + ) + + # ── GotoNode action client ────────────────────────────── + self._goto_client = ActionClient( + self, + GotoNode, + nav_action, + callback_group=self._cb_group, + ) + self._goto_goal_handle = None + + # ── Menu handler for right-click context menu ──────────── + self._menu_handler = MenuHandler() + self._menu_nav_id = self._menu_handler.insert( + 'Navigate Here', callback=self._menu_navigate_cb, + ) + self._menu_cancel_id = self._menu_handler.insert( + 'Cancel Navigation', callback=self._menu_cancel_cb, + ) + + # ── Subscribe to localisation topics ───────────────────── + self.create_subscription( + String, + '/current_node', + self._current_node_cb, + 10, + callback_group=self._cb_group, + ) + self.create_subscription( + String, + '/closest_node', + self._closest_node_cb, + 10, + callback_group=self._cb_group, + ) + + # ── Load map from file or subscribe to topic ───────────── + if self.map_file: + self._load_map_from_file() + self._publish_map_topic() + self._rebuild_visualisation() + # Delayed re-publish so late-subscribing RViz gets markers + self._initial_vis_timer = self.create_timer( + 2.0, self._delayed_initial_vis, + callback_group=self._cb_group, + ) + else: + self.get_logger().info( + 'No map_file parameter — subscribing to /topological_map_2' + ) + + # Always subscribe so we pick up external updates too + self.create_subscription( + String, + '/topological_map_2', + self._map_topic_cb, + qos_profile=self._latching_qos, + callback_group=self._cb_group, + ) + + # ── Save service ───────────────────────────────────────── + self.create_service( + Trigger, + f'{self.get_name()}/save_map', + self._save_map_service, + callback_group=self._cb_group, + ) + + # ── Auto-save timer ────────────────────────────────────── + # Always create the timer when a file is available; the callback + # gates on ``self.auto_save`` so it can be toggled at runtime. + if self.map_file: + self.create_timer(30.0, self._auto_save_cb) + + self.get_logger().info('Topological map visualiser started') + if self.map_file: + self.get_logger().info(f' map_file : {self.map_file}') + self.get_logger().info(f' edit_mode: {self.edit_mode}') + self.get_logger().info(f' auto_save: {self.auto_save}') + self.get_logger().info( + 'Call //save_map service to persist changes' + ) + + def _refresh_visual_cache(self): + """Build lookup tables used by static-marker updates.""" + self._node_entries_by_name = {} + self._action_names = [] + self._action_index = {} + self._incoming_edges_by_target = {} + + if self.tmap is None: + return + + seen_actions = set() + nodes = self.tmap.get('nodes', []) + for entry in nodes: + node = entry['node'] + self._node_entries_by_name[node['name']] = node + + for entry in nodes: + node = entry['node'] + src_name = node['name'] + for edge in node.get('edges', []): + action = edge.get('action', '') + if action and action not in seen_actions: + seen_actions.add(action) + self._action_names.append(action) + target = edge.get('node') + if target: + self._incoming_edges_by_target.setdefault( + target, [] + ).append(src_name) + + self._action_index = { + action: idx for idx, action in enumerate(self._action_names) + } + + # ────────────────────────────────────────────────────────────── + # Map loading / saving + # ────────────────────────────────────────────────────────────── + def _load_map_from_file(self): + """Load a tmap2 YAML file into ``self.tmap``.""" + try: + with open(self.map_file, 'r') as fh: + self.tmap = yaml.load(fh, Loader=CustomSafeLoader) + self._graph = build_graph_from_tmap( + self.tmap, logger=self.get_logger(), + ) + self.get_logger().info( + f'Loaded map with {len(self.tmap.get("nodes", []))} nodes ' + f'from {self.map_file}' + ) + except Exception as exc: + self.get_logger().error(f'Failed to load map file: {exc}') + sys.exit(1) + + def save_map(self): + """Save current map to the YAML file (with backup).""" + if not self.map_file: + self.get_logger().warn('No map_file set — cannot save') + return False + try: + backup = self.map_file + '.backup' + if os.path.exists(self.map_file): + if os.path.exists(backup): + os.remove(backup) + os.rename(self.map_file, backup) + + with open(self.map_file, 'w') as fh: + yaml.dump( + self.tmap, + fh, + default_flow_style=False, + sort_keys=False, + ) + self.get_logger().info(f'Map saved to {self.map_file}') + self._map_dirty = False + self._publish_map_topic() + return True + + except Exception as exc: + self.get_logger().error(f'Save failed: {exc}') + backup = self.map_file + '.backup' + if os.path.exists(backup): + os.rename(backup, self.map_file) + return False + + # ── Callbacks ──────────────────────────────────────────────── + def _current_node_cb(self, msg: String): + """Track the robot's current topological node.""" + self._current_node = msg.data + + def _closest_node_cb(self, msg: String): + """Track the robot's closest topological node.""" + self._closest_node = msg.data + + def _map_topic_cb(self, msg: String): + """Handle updates from the ``/topological_map_2`` topic.""" + incoming = yaml.load(msg.data, Loader=CustomSafeLoader) + if incoming == self.tmap: + return # no change, avoid flicker + self.tmap = incoming + self._graph = build_graph_from_tmap( + self.tmap, logger=self.get_logger(), + ) + self.get_logger().info('Received updated map from topic') + # Clear first: a new map may have fewer nodes/edges than before. + self._rebuild_visualisation(clear_first=True) + # Delayed re-publish so late-subscribing RViz gets markers + if self._initial_vis_timer is not None: + self.destroy_timer(self._initial_vis_timer) + self._initial_vis_timer = self.create_timer( + 2.0, self._delayed_initial_vis, + callback_group=self._cb_group, + ) + + def _save_map_service(self, request, response): + ok = self.save_map() + response.success = ok + response.message = ( + f'Map saved to {self.map_file}' if ok else 'Save failed' + ) + return response + + def _auto_save_cb(self): + if self.auto_save and self.map_file and self._map_dirty: + self.get_logger().info('Auto-saving map…') + self.save_map() + + def _delayed_initial_vis(self): + """One-shot republish so late-subscribing RViz gets markers.""" + if self._initial_vis_timer is not None: + self.destroy_timer(self._initial_vis_timer) + self._initial_vis_timer = None + if self.tmap is not None: + self._rebuild_static_markers() + self.get_logger().debug( + 'Deferred map visualisation republished' + ) + + # ────────────────────────────────────────────────────────────── + # Runtime (dynamic) parameter handling — ROS 2 Humble compatible + # ────────────────────────────────────────────────────────────── + def _on_set_parameters(self, params): + """Validate and apply parameter updates received at runtime. + + Registered via ``add_on_set_parameters_callback`` (the only + runtime-parameter hook available in ROS 2 Humble). The callback + runs *before* the new values are committed, so we validate here + and read the new values directly from the ``params`` list. The + (potentially expensive) marker rebuild is deferred to a one-shot + timer so it never blocks the parameter-set transaction. + """ + needs_rebuild = False + + for p in params: + name = p.name + + if name == 'marker_scale': + if p.type_ not in ( + Parameter.Type.DOUBLE, Parameter.Type.INTEGER, + ): + return SetParametersResult( + successful=False, + reason='marker_scale must be a number', + ) + value = float(p.value) + if not (viz_utils.MIN_SCALE <= value <= viz_utils.MAX_SCALE): + return SetParametersResult( + successful=False, + reason='marker_scale out of range [%g, %g]' + % (viz_utils.MIN_SCALE, viz_utils.MAX_SCALE), + ) + self._base_marker_scale = value + needs_rebuild = True + + elif name == 'auto_marker_scale': + if p.type_ != Parameter.Type.BOOL: + return SetParametersResult( + successful=False, + reason='auto_marker_scale must be a boolean', + ) + self.auto_marker_scale = bool(p.value) + needs_rebuild = True + + elif name == 'show_node_labels': + if p.type_ != Parameter.Type.BOOL: + return SetParametersResult( + successful=False, + reason='show_node_labels must be a boolean', + ) + self.show_node_labels = bool(p.value) + needs_rebuild = True + + elif name == 'show_zones': + if p.type_ != Parameter.Type.BOOL: + return SetParametersResult( + successful=False, + reason='show_zones must be a boolean', + ) + self.show_zones = bool(p.value) + needs_rebuild = True + + elif name == 'show_edges': + if p.type_ != Parameter.Type.BOOL: + return SetParametersResult( + successful=False, + reason='show_edges must be a boolean', + ) + self.show_edges = bool(p.value) + needs_rebuild = True + + elif name == 'edit_mode': + if p.type_ != Parameter.Type.BOOL: + return SetParametersResult( + successful=False, + reason='edit_mode must be a boolean', + ) + self.edit_mode = bool(p.value) + needs_rebuild = True + + elif name == 'interactive_marker_limit': + if p.type_ != Parameter.Type.INTEGER: + return SetParametersResult( + successful=False, + reason='interactive_marker_limit must be an integer', + ) + if int(p.value) < 0: + return SetParametersResult( + successful=False, + reason='interactive_marker_limit must be >= 0', + ) + self.interactive_marker_limit = int(p.value) + needs_rebuild = True + + elif name == 'auto_save': + if p.type_ != Parameter.Type.BOOL: + return SetParametersResult( + successful=False, + reason='auto_save must be a boolean', + ) + self.auto_save = bool(p.value) + + if needs_rebuild: + self._schedule_param_apply() + + return SetParametersResult(successful=True) + + def _schedule_param_apply(self): + """Defer a full rebuild so it runs outside the param transaction.""" + if self._param_apply_timer is not None: + self._param_apply_timer.cancel() + self.destroy_timer(self._param_apply_timer) + self._param_apply_timer = self.create_timer( + 0.05, self._apply_param_changes, + callback_group=self._cb_group, + ) + + def _apply_param_changes(self): + """Recompute the effective scale and rebuild the visualisation.""" + if self._param_apply_timer is not None: + self._param_apply_timer.cancel() + self.destroy_timer(self._param_apply_timer) + self._param_apply_timer = None + + self._recompute_effective_scale() + # Full rebuild with a clear so toggled-off layers are removed. + self._rebuild_visualisation(clear_first=True) + + def _recompute_effective_scale(self): + """Update ``self.marker_scale`` from the base value / auto mode.""" + if self.auto_marker_scale and self.tmap is not None: + positions = viz_utils.collect_node_positions( + self.tmap.get('nodes', []) + ) + self.marker_scale = viz_utils.compute_auto_scale( + positions, fallback=self._base_marker_scale, + ) + self.get_logger().info( + 'Auto marker scale -> %.3f (%d nodes)' + % (self.marker_scale, len(positions)) + ) + else: + self.marker_scale = self._base_marker_scale + + # ────────────────────────────────────────────────────────────── + # GotoNode navigation helpers + # ────────────────────────────────────────────────────────────── + def _menu_navigate_cb(self, feedback: InteractiveMarkerFeedback): + """Context-menu callback: send GotoNode goal for this node.""" + node_name = feedback.marker_name + self.get_logger().info( + f'Navigate request → {node_name}' + ) + # Compute and highlight route before sending goal + self._compute_and_highlight_route(node_name) + self._send_goto_goal(node_name) + + def _menu_cancel_cb(self, feedback: InteractiveMarkerFeedback): + """Context-menu callback: cancel the active GotoNode goal.""" + self._cancel_navigation() + + def _send_goto_goal(self, target: str): + """Send a ``GotoNode`` goal to the topological navigation server.""" + if not self._goto_client.wait_for_server(timeout_sec=2.0): + self.get_logger().error( + 'GotoNode action server not available — is navigation2 ' + 'running?' + ) + return + goal = GotoNode.Goal() + goal.target = target + goal.no_orientation = False + self.get_logger().info(f'Sending GotoNode goal: target={target}') + + future = self._goto_client.send_goal_async( + goal, feedback_callback=self._goto_feedback_cb, + ) + future.add_done_callback(self._goto_response_cb) + self._navigating_to = target + + def _goto_response_cb(self, future): + """Handle the goal acceptance / rejection response.""" + goal_handle = future.result() + if not goal_handle.accepted: + self.get_logger().warn('GotoNode goal was rejected') + self._navigating_to = None + return + self.get_logger().info('GotoNode goal accepted') + self._goto_goal_handle = goal_handle + result_future = goal_handle.get_result_async() + result_future.add_done_callback(self._goto_result_cb) + + def _goto_result_cb(self, future): + """Handle the final result of a GotoNode action.""" + result = future.result().result + status = 'SUCCESS' if result.success else 'FAILURE' + self.get_logger().info( + f'GotoNode result: {status} (target={self._navigating_to})' + ) + self._navigating_to = None + self._goto_goal_handle = None + self._clear_route_highlight() + + def _goto_feedback_cb(self, feedback_msg): + """Log GotoNode action feedback.""" + fb = feedback_msg.feedback + self.get_logger().debug(f'GotoNode feedback: route={fb.route}') + + def _cancel_navigation(self): + """Cancel the currently active GotoNode goal, if any.""" + if self._goto_goal_handle is not None: + self.get_logger().info('Cancelling active GotoNode goal') + self._goto_goal_handle.cancel_goal_async() + self._navigating_to = None + self._goto_goal_handle = None + self._clear_route_highlight() + else: + self.get_logger().info('No active navigation goal to cancel') + + # ────────────────────────────────────────────────────────────── + # Route highlighting + # ────────────────────────────────────────────────────────────── + def _get_source_node(self) -> str: + """Return the best available source node for route search.""" + if self._current_node and self._current_node != 'none': + return self._current_node + if self._closest_node and self._closest_node != 'none': + return self._closest_node + return 'none' + + def _compute_and_highlight_route(self, target: str): + """Compute route from current node to target and publish markers.""" + source = self._get_source_node() + if source == 'none': + self.get_logger().info( + 'Source node unknown — will retry route highlight' + ) + self._pending_route_target = target + if self._route_retry_timer is None: + self._route_retry_timer = self.create_timer( + 0.5, self._retry_route_highlight, + callback_group=self._cb_group, + ) + return + if self._graph is None: + if self.tmap is not None: + self._graph = build_graph_from_tmap( + self.tmap, logger=self.get_logger(), + ) + else: + self.get_logger().warn( + 'Cannot highlight route — no map loaded' + ) + return + + route_nodes = plan_route( + self._graph, source, target, + logger=self.get_logger(), + ) + if not route_nodes or len(route_nodes) < 2: + self.get_logger().warn( + f'No route found from {source} to {target}' + ) + self._route_nodes = [] + self._clear_route_highlight() + return + + self._route_nodes = route_nodes + self.get_logger().info( + f'Route highlighted: {" → ".join(self._route_nodes)}' + ) + self._publish_route_markers() + + def _retry_route_highlight(self): + """Timer callback: retry route highlighting once source is known.""" + if self._pending_route_target is None or self._navigating_to is None: + # Navigation finished or cancelled before source appeared + self._pending_route_target = None + if self._route_retry_timer is not None: + self.destroy_timer(self._route_retry_timer) + self._route_retry_timer = None + return + + source = self._get_source_node() + if source == 'none': + return # Still unknown — timer will fire again + + target = self._pending_route_target + self._pending_route_target = None + if self._route_retry_timer is not None: + self.destroy_timer(self._route_retry_timer) + self._route_retry_timer = None + + self._compute_and_highlight_route(target) + + def _publish_route_markers(self): + """Create and publish route highlight markers.""" + if not self._route_nodes or self.tmap is None: + return + + marker_array = MarkerArray() + idn = 0 + scale = self.marker_scale + + # Highlight nodes on the route + for node_name in self._route_nodes: + node_data = self._node_entries_by_name.get(node_name) + if node_data is None: + continue + m = Marker() + m.id = idn + m.header.frame_id = node_data.get('parent_frame', 'map') + m.type = Marker.SPHERE + m.scale.x = scale * 0.7 + m.scale.y = scale * 0.7 + m.scale.z = scale * 0.7 + m.color.a = 0.9 + m.color.r = 0.0 + m.color.g = 1.0 + m.color.b = 0.0 + m.pose = _node2pose(node_data['pose']) + m.pose.position.z += 0.15 + m.ns = '/route_nodes' + marker_array.markers.append(m) + idn += 1 + + # Highlight edges along the route + for i in range(len(self._route_nodes) - 1): + src_name = self._route_nodes[i] + dst_name = self._route_nodes[i + 1] + src_data = self._node_entries_by_name.get(src_name) + dst_data = self._node_entries_by_name.get(dst_name) + if src_data is None or dst_data is None: + continue + + m = Marker() + m.id = idn + m.header.frame_id = src_data.get('parent_frame', 'map') + m.type = Marker.LINE_STRIP + m.pose.orientation.w = 1.0 + m.scale.x = scale * 0.12 + m.color.a = 0.9 + m.color.r = 0.0 + m.color.g = 1.0 + m.color.b = 0.0 + + v1 = _node2pose(src_data['pose']).position + v1.z += 0.15 + v2 = _node2pose(dst_data['pose']).position + v2.z += 0.15 + m.points.append(v1) + m.points.append(v2) + m.ns = '/route_edges' + marker_array.markers.append(m) + idn += 1 + + # Source node highlight (cyan) + src_data = self._node_entries_by_name.get(self._route_nodes[0]) + if src_data is not None: + m = Marker() + m.id = idn + m.header.frame_id = src_data.get('parent_frame', 'map') + m.type = Marker.SPHERE + m.scale.x = scale * 0.9 + m.scale.y = scale * 0.9 + m.scale.z = scale * 0.9 + m.color.a = 0.7 + m.color.r = 0.0 + m.color.g = 1.0 + m.color.b = 1.0 + m.pose = _node2pose(src_data['pose']) + m.pose.position.z += 0.2 + m.ns = '/route_endpoints' + marker_array.markers.append(m) + idn += 1 + + # Target node highlight (yellow) + tgt_data = self._node_entries_by_name.get(self._route_nodes[-1]) + if tgt_data is not None: + m = Marker() + m.id = idn + m.header.frame_id = tgt_data.get('parent_frame', 'map') + m.type = Marker.SPHERE + m.scale.x = scale * 0.9 + m.scale.y = scale * 0.9 + m.scale.z = scale * 0.9 + m.color.a = 0.7 + m.color.r = 1.0 + m.color.g = 1.0 + m.color.b = 0.0 + m.pose = _node2pose(tgt_data['pose']) + m.pose.position.z += 0.2 + m.ns = '/route_endpoints' + marker_array.markers.append(m) + idn += 1 + + # Route label + if tgt_data is not None: + m = Marker() + m.id = idn + m.header.frame_id = tgt_data.get('parent_frame', 'map') + m.type = Marker.TEXT_VIEW_FACING + m.text = f'Route: {self._route_nodes[0]} → {self._route_nodes[-1]}' + m.pose = _node2pose(tgt_data['pose']) + m.pose.position.z += 0.6 + m.scale.z = scale * 0.35 + m.color.a = 1.0 + m.color.r = 0.0 + m.color.g = 1.0 + m.color.b = 0.0 + m.ns = '/route_label' + marker_array.markers.append(m) + idn += 1 + + self.route_marker_pub.publish(marker_array) + + def _clear_route_highlight(self): + """Remove route highlight markers from RViz.""" + self._route_nodes = [] + self._pending_route_target = None + if self._route_retry_timer is not None: + self.destroy_timer(self._route_retry_timer) + self._route_retry_timer = None + # Publish a DELETE_ALL marker to clear the route topic + marker_array = MarkerArray() + m = Marker() + m.action = Marker.DELETEALL + marker_array.markers.append(m) + self.route_marker_pub.publish(marker_array) + + # ────────────────────────────────────────────────────────────── + # Publishing helpers + # ────────────────────────────────────────────────────────────── + def _publish_map_topic(self): + """Publish the in-memory map to ``/topological_map_2``.""" + if self.tmap is None: + return + msg = String() + msg.data = yaml.dump( + self.tmap, default_flow_style=False, sort_keys=False + ) + self.map_topic_pub.publish(msg) + self.get_logger().info('Published map to /topological_map_2') + + # ────────────────────────────────────────────────────────────── + # Build / rebuild all visualisation markers + # ────────────────────────────────────────────────────────────── + def _rebuild_visualisation(self, clear_first: bool = False): + """Re-create marker array + interactive markers from ``self.tmap``.""" + if self.tmap is None: + return + + self._recompute_effective_scale() + self._refresh_visual_cache() + nodes = self.tmap.get('nodes', []) + marker_array = self._build_full_static_marker_array( + clear_first=clear_first, + ) + + self.map_marker_pub.publish(marker_array) + + # Interactive editor markers (or clear them when editing is off). + if self.edit_mode: + self._rebuild_interactive_markers(nodes) + else: + self._clear_interactive_markers() + + self.get_logger().info( + f'Visualisation published ({len(nodes)} nodes, ' + f'{len(marker_array.markers)} markers, ' + f'scale={self.marker_scale:.3f})' + ) + + # ────────────────────────────────────────────────────────────── + # Interactive marker layer + # ────────────────────────────────────────────────────────────── + def _rebuild_interactive_markers(self, nodes): + """Create / update interactive markers for every node. + + For very large maps creating an interactive marker per node makes + RViz unresponsive, so above ``interactive_marker_limit`` the map is + shown read-only (static markers only) and a warning is logged. + """ + # Clear existing markers + self._im_server.clear() + + if len(nodes) > self.interactive_marker_limit: + self._im_server.applyChanges() + self.get_logger().warning( + 'Map has %d nodes (> interactive_marker_limit=%d): ' + 'showing read-only. Raise the limit or disable edit_mode ' + 'to suppress this message.' + % (len(nodes), self.interactive_marker_limit) + ) + return + + for entry in nodes: + node = entry['node'] + self._create_edit_marker(node) + + # Apply the right-click context menu to every marker, then + # re-register type-specific callbacks. MenuHandler.apply() + # overwrites the default (catch-all) callback, so BUTTON_CLICK + # and POSE_UPDATE would be silently dropped without this step. + for entry in nodes: + name = entry['node']['name'] + self._menu_handler.apply(self._im_server, name) + self._im_server.setCallback( + name, self._im_feedback, + InteractiveMarkerFeedback.BUTTON_CLICK, + ) + self._im_server.setCallback( + name, self._im_feedback, + InteractiveMarkerFeedback.POSE_UPDATE, + ) + + self._im_server.applyChanges() + + def _clear_interactive_markers(self): + """Remove all interactive markers (used when edit_mode is off).""" + self._im_server.clear() + self._im_server.applyChanges() + + def _create_edit_marker(self, node: dict): + """Insert one interactive marker for *node*.""" + scale = self.marker_scale + + im = InteractiveMarker() + im.header.frame_id = node.get('parent_frame', 'map') + im.name = node['name'] + im.description = '' + + pose = _node2pose(node['pose']) + im.pose = pose + + # ── Visible sphere ────────────────────────────────────── + sphere = Marker() + sphere.type = Marker.SPHERE + sphere.scale.x = scale + sphere.scale.y = scale + sphere.scale.z = scale + sphere.color.r = 0.0 + sphere.color.g = 0.5 + sphere.color.b = 1.0 + sphere.color.a = 0.8 + + vis_ctrl = InteractiveMarkerControl() + vis_ctrl.always_visible = True + vis_ctrl.markers.append(sphere) + vis_ctrl.interaction_mode = InteractiveMarkerControl.BUTTON + vis_ctrl.orientation.w = 1.0 + vis_ctrl.orientation.y = 1.0 # XY plane + im.controls.append(vis_ctrl) + + # ── Move X ────────────────────────────────────────────── + ctrl = InteractiveMarkerControl() + ctrl.orientation.w = 1.0 + ctrl.orientation.x = 1.0 + ctrl.name = 'move_x' + ctrl.interaction_mode = InteractiveMarkerControl.MOVE_AXIS + im.controls.append(ctrl) + + # ── Move Y ────────────────────────────────────────────── + ctrl = InteractiveMarkerControl() + ctrl.orientation.w = 1.0 + ctrl.orientation.z = 1.0 + ctrl.name = 'move_y' + ctrl.interaction_mode = InteractiveMarkerControl.MOVE_AXIS + im.controls.append(ctrl) + + # ── Rotate Z (yaw) ───────────────────────────────────── + ctrl = InteractiveMarkerControl() + ctrl.orientation.w = 1.0 + ctrl.orientation.y = 1.0 + ctrl.name = 'rotate_z' + ctrl.interaction_mode = InteractiveMarkerControl.ROTATE_AXIS + im.controls.append(ctrl) + + # ── Arrow showing orientation ─────────────────────────── + arrow = Marker() + arrow.type = Marker.ARROW + arrow.scale.x = scale * 1.5 + arrow.scale.y = scale * 0.2 + arrow.scale.z = scale * 0.2 + arrow.color.r = 1.0 + arrow.color.a = 1.0 + + arrow_ctrl = InteractiveMarkerControl() + arrow_ctrl.always_visible = True + arrow_ctrl.markers.append(arrow) + im.controls.append(arrow_ctrl) + + # ── Text label ────────────────────────────────────────── + txt = Marker() + txt.type = Marker.TEXT_VIEW_FACING + txt.text = node['name'] + txt.scale.z = scale * 0.5 + txt.color.r = 1.0 + txt.color.g = 1.0 + txt.color.b = 1.0 + txt.color.a = 1.0 + txt.pose.position.z = scale * 0.8 + + txt_ctrl = InteractiveMarkerControl() + txt_ctrl.always_visible = True + txt_ctrl.markers.append(txt) + im.controls.append(txt_ctrl) + + self._im_server.insert(im) + self._im_server.setCallback(im.name, self._im_feedback) + + def _im_feedback(self, feedback: InteractiveMarkerFeedback): + """Handle interactive-marker drag / rotate / click events.""" + # Let MenuHandler process right-click menu selections + if feedback.event_type == InteractiveMarkerFeedback.MENU_SELECT: + return + + # Left-click on node sphere → navigate to that node + if feedback.event_type == InteractiveMarkerFeedback.BUTTON_CLICK: + node_name = feedback.marker_name + self.get_logger().info( + f'Node clicked → navigating to {node_name}' + ) + # Cancel any active navigation before sending new goal + if self._goto_goal_handle is not None: + self._cancel_navigation() + self._compute_and_highlight_route(node_name) + self._send_goto_goal(node_name) + self._im_server.applyChanges() + return + + if feedback.event_type != InteractiveMarkerFeedback.POSE_UPDATE: + self._im_server.applyChanges() + return + + name = feedback.marker_name + node = self._node_entries_by_name.get(name) + if node is None: + self._refresh_visual_cache() + node = self._node_entries_by_name.get(name) + + if node is not None: + node['pose']['position']['x'] = float( + feedback.pose.position.x + ) + node['pose']['position']['y'] = float( + feedback.pose.position.y + ) + node['pose']['position']['z'] = 0.0 + + euler = tf_transformations.euler_from_quaternion([ + feedback.pose.orientation.x, + feedback.pose.orientation.y, + feedback.pose.orientation.z, + feedback.pose.orientation.w, + ]) + yaw = euler[2] + quat = tf_transformations.quaternion_from_euler(0.0, 0.0, yaw) + node['pose']['orientation']['x'] = float(quat[0]) + node['pose']['orientation']['y'] = float(quat[1]) + node['pose']['orientation']['z'] = float(quat[2]) + node['pose']['orientation']['w'] = float(quat[3]) + + self._map_dirty = True + yaw_deg = math.degrees(yaw) + self.get_logger().debug( + f'{name}: pos=({feedback.pose.position.x:.2f}, ' + f'{feedback.pose.position.y:.2f}), yaw={yaw_deg:.1f}°' + ) + + # Republish only the markers touched by this move so the + # visualisation stays responsive even on very large maps. + self._publish_incremental_node_update(name) + + # Keep the route highlight aligned with the dragged node. + if self._route_nodes: + self._publish_route_markers() + + self._im_server.applyChanges() + + # Schedule a debounced republish so downstream nodes + # (navigation, localisation) pick up the change. + self._schedule_republish() + + def _schedule_republish(self): + """Debounce map republish: wait 0.5 s after the last drag event.""" + if self._republish_timer is not None: + self._republish_timer.cancel() + self.destroy_timer(self._republish_timer) + self._republish_timer = self.create_timer( + 0.5, self._deferred_republish, + callback_group=self._cb_group, + ) + + def _deferred_republish(self): + """Republish map, rebuild graph, and save to temp folder.""" + # One-shot: cancel the timer immediately + if self._republish_timer is not None: + self._republish_timer.cancel() + self.destroy_timer(self._republish_timer) + self._republish_timer = None + + # Rebuild the NetworkX graph so route planning uses new positions + self._graph = build_graph_from_tmap( + self.tmap, logger=self.get_logger(), + ) + + # Publish updated map to topic so all subscribers get it + self._publish_map_topic() + self.get_logger().info( + 'Map republished after node position update' + ) + + # Save to temp folder + self._save_to_temp() + + def _save_to_temp(self): + """Save the current map to a temp folder for recovery.""" + if self.tmap is None: + return + map_name = self.tmap.get('pointset', 'unknown_map') + temp_path = os.path.join( + self._temp_map_dir, + f'{map_name}.tmap2.yaml', + ) + try: + with open(temp_path, 'w') as fh: + yaml.dump( + self.tmap, + fh, + default_flow_style=False, + sort_keys=False, + ) + self.get_logger().info(f'Map saved to {temp_path}') + except Exception as exc: + self.get_logger().error(f'Failed to save temp map: {exc}') + + def _map_frame(self) -> str: + """Resolve a single frame id for the batched markers. + + All nodes in a tmap share the same frame in practice, so we use the + first node's ``parent_frame`` (default ``'map'``). + """ + if self.tmap is not None: + for entry in self.tmap.get('nodes', []): + return entry.get('node', {}).get('parent_frame', 'map') + return 'map' + + def _rebuild_static_markers(self, clear_first: bool = False): + """Re-publish static MarkerArray only (no interactive markers).""" + if self.tmap is None: + return + + self._refresh_visual_cache() + marker_array = self._build_full_static_marker_array( + clear_first=clear_first, + ) + self.map_marker_pub.publish(marker_array) + + def _build_full_static_marker_array( + self, clear_first: bool = False, + ) -> MarkerArray: + """Build the static marker set for the whole map (per node). + + Each node owns its own markers so a single dragged node can be + republished on its own (see + :meth:`_publish_incremental_node_update`) instead of rebuilding the + entire map. Per namespace a node contributes at most one marker, + all sharing the node's index as a stable id: + + * node sphere -> ns ``/nodes`` (one per node) + * label -> ns ``/names`` (one per node, optional) + * zone -> ns ``/zones`` (one per node with a polygon) + * edges -> ns ``/edges`` (one ``LINE_LIST`` of the node's + outgoing edges, optional) + * legend -> ns ``/legend`` (one ``TEXT`` per action) + + The assigned ids are cached in ``self._marker_ids`` so incremental + updates reuse them. When *clear_first* is set a ``DELETEALL`` is + prepended so stale markers (toggled-off layers or deleted nodes) + are removed cleanly. + """ + marker_array = MarkerArray() + if clear_first: + clear = Marker() + clear.action = Marker.DELETEALL + marker_array.markers.append(clear) + + # Reset the id cache — full rebuilds reassign ids by node order. + self._marker_ids = { + 'nodes': {}, + 'names': {}, + 'zones': {}, + 'edges': {}, + 'legend': {}, + } + + show_labels = getattr(self, 'show_node_labels', True) + show_zones = getattr(self, 'show_zones', True) + show_edges = getattr(self, 'show_edges', True) + + nodes = self.tmap.get('nodes', []) + for i, entry in enumerate(nodes): + node = entry['node'] + name = node['name'] + frame = node.get('parent_frame', 'map') + + marker_array.markers.append( + self._mk_node_sphere(node, i, frame) + ) + self._marker_ids['nodes'][name] = i + + if show_labels: + marker_array.markers.append(self._mk_name(node, i)) + self._marker_ids['names'][name] = i + + if show_zones: + zone_marker = self._mk_node_zone(node, i, frame) + if zone_marker is not None: + marker_array.markers.append(zone_marker) + self._marker_ids['zones'][name] = i + + if show_edges: + edge_marker = self._mk_node_edges(node, i, frame) + if edge_marker is not None: + marker_array.markers.append(edge_marker) + self._marker_ids['edges'][name] = i + + # Legend -> one TEXT marker per action. + for row, action_name in enumerate(self._action_names): + marker_array.markers.append( + self._mk_legend(action_name, row, row) + ) + self._marker_ids['legend'][action_name] = row + + return marker_array + + def _publish_incremental_node_update(self, name: str): + """Republish only the markers affected when *name* moves. + + Touches the node's own sphere, label, zone, and outgoing-edge + markers, plus the edge markers of any node with an edge that + terminates at *name* (so the moved endpoint follows). Relies solely + on the cached lookups, so it never scans the whole node list. Falls + back to a full static rebuild if the node has no cached marker id + yet (e.g. a node added since the last full rebuild). + """ + node = self._node_entries_by_name.get(name) + if node is None: + return + + node_id = self._marker_ids['nodes'].get(name) + if node_id is None: + self._rebuild_static_markers() + return + + show_labels = getattr(self, 'show_node_labels', True) + show_zones = getattr(self, 'show_zones', True) + show_edges = getattr(self, 'show_edges', True) + frame = node.get('parent_frame', 'map') + + marker_array = MarkerArray() + marker_array.markers.append( + self._mk_node_sphere(node, node_id, frame) + ) + + if show_labels: + label_id = self._marker_ids['names'].get(name, node_id) + marker_array.markers.append(self._mk_name(node, label_id)) + + if show_zones: + zone_id = self._marker_ids['zones'].get(name, node_id) + zone_marker = self._mk_node_zone(node, zone_id, frame) + if zone_marker is not None: + marker_array.markers.append(zone_marker) + + if show_edges: + edge_id = self._marker_ids['edges'].get(name, node_id) + edge_marker = self._mk_node_edges(node, edge_id, frame) + if edge_marker is not None: + marker_array.markers.append(edge_marker) + + # Redraw the edge markers belonging to nodes that point *at* + # this one so their endpoint tracks the move. + for src_name in self._incoming_edges_by_target.get(name, []): + if src_name == name: + continue + src_node = self._node_entries_by_name.get(src_name) + src_id = self._marker_ids['edges'].get(src_name) + if src_node is None or src_id is None: + continue + src_frame = src_node.get('parent_frame', 'map') + src_marker = self._mk_node_edges(src_node, src_id, src_frame) + if src_marker is not None: + marker_array.markers.append(src_marker) + + self.map_marker_pub.publish(marker_array) + + # ────────────────────────────────────────────────────────────── + # Marker factory helpers (per node) + # ────────────────────────────────────────────────────────────── + def _mk_node_sphere(self, node: dict, idn: int, frame: str) -> Marker: + """Build a single ``SPHERE`` marker for one node.""" + m = Marker() + m.id = idn + m.ns = '/nodes' + m.header.frame_id = frame + m.type = Marker.SPHERE + m.action = Marker.ADD + m.pose = _node2pose(node['pose']) + m.pose.position.z += 0.1 + s = self.marker_scale * 0.4 + m.scale.x = s + m.scale.y = s + m.scale.z = s + m.color.a = 0.6 + m.color.r = 0.2 + m.color.g = 0.2 + m.color.b = 0.7 + return m + + def _mk_node_zone(self, node: dict, idn: int, frame: str): + """Build a ``LINE_LIST`` marker for one node's influence zone. + + Returns ``None`` when the node has no usable polygon. + """ + verts = node.get('verts') or [] + if len(verts) < 2: + return None + bx, by, bz = _node_xyz(node) + points = [] + for v in verts: + try: + points.append((bx + float(v['x']), by + float(v['y']), bz)) + except (KeyError, TypeError, ValueError): + return None + if len(points) < 2: + return None + m = Marker() + m.id = idn + m.ns = '/zones' + m.header.frame_id = frame + m.type = Marker.LINE_LIST + m.action = Marker.ADD + m.pose.orientation.w = 1.0 + m.scale.x = max(self.marker_scale * 0.06, 0.02) + m.color.a = 0.8 + m.color.r = 0.7 + m.color.g = 0.1 + m.color.b = 0.2 + for i in range(len(points)): + p1 = points[i] + p2 = points[(i + 1) % len(points)] + m.points.append(Point(x=p1[0], y=p1[1], z=p1[2])) + m.points.append(Point(x=p2[0], y=p2[1], z=p2[2])) + return m + + def _mk_node_edges(self, node: dict, idn: int, frame: str): + """Build a ``LINE_LIST`` of one node's outgoing edges. + + Edges whose target is missing from the map are skipped, and the + marker colour follows the first valid edge's action. Returns + ``None`` when the node has no drawable outgoing edge. + """ + src = _node_xyz(node, z_offset=0.1) + segments = [] + colour_action = '' + for edge in node.get('edges', []) or []: + target = edge.get('node') + tnode = self._node_entries_by_name.get(target) + if tnode is None: + continue + segments.append((src, _node_xyz(tnode, z_offset=0.1))) + if not colour_action: + colour_action = edge.get('action', '') or '' + if not segments: + return None + col = _colour(self._action_index.get(colour_action, idn)) + m = Marker() + m.id = idn + m.ns = '/edges' + m.header.frame_id = frame + m.type = Marker.LINE_LIST + m.action = Marker.ADD + m.pose.orientation.w = 1.0 + m.scale.x = max(self.marker_scale * 0.06, 0.02) + m.color.a = 0.6 + m.color.r = float(col[0]) + m.color.g = float(col[1]) + m.color.b = float(col[2]) + for p1, p2 in segments: + m.points.append(Point(x=p1[0], y=p1[1], z=p1[2])) + m.points.append(Point(x=p2[0], y=p2[1], z=p2[2])) + return m + + def _mk_name(self, node: dict, idn: int) -> Marker: + m = Marker() + m.id = idn + m.header.frame_id = node.get('parent_frame', 'map') + m.type = Marker.TEXT_VIEW_FACING + m.text = node['name'] + m.pose = _node2pose(node['pose']) + m.pose.position.z += 0.25 + m.scale.z = self.marker_scale * 0.24 + m.color.a = 0.9 + m.color.r = 0.3 + m.color.g = 0.3 + m.color.b = 0.3 + m.ns = '/names' + return m + + def _mk_legend( + self, action: str, row: int, idn: int + ) -> Marker: + col_idx = self._action_index.get(action, 0) + col = _colour(col_idx) + m = Marker() + m.id = idn + m.header.frame_id = 'map' + m.type = Marker.TEXT_VIEW_FACING + m.text = action + m.pose.position.x = 1.0 + m.pose.position.y = 0.18 * row + m.pose.position.z = 0.2 + m.pose.orientation.w = 1.0 + m.scale.z = self.marker_scale * 0.3 + m.color.a = 1.0 + m.color.r = float(col[0]) + m.color.g = float(col[1]) + m.color.b = float(col[2]) + m.ns = '/legend' + return m + + +# ══════════════════════════════════════════════════════════════════ +# Entry-point +# ══════════════════════════════════════════════════════════════════ +def main(args=None): + rclpy.init(args=args) + node = TopologicalMapVisualiser() + executor = MultiThreadedExecutor() + executor.add_node(node) + try: + executor.spin() + except KeyboardInterrupt: + pass + finally: + node.get_logger().info('Shutting down topological map visualiser') + node.destroy_node() + if rclpy.ok(): + rclpy.shutdown() + + +if __name__ == '__main__': + main() diff --git a/topological_navigation_visual/topological_navigation_visual/scripts/topological_visual.py b/topological_navigation_visual/topological_navigation_visual/scripts/topological_visual.py new file mode 100644 index 00000000..facb0bae --- /dev/null +++ b/topological_navigation_visual/topological_navigation_visual/scripts/topological_visual.py @@ -0,0 +1,249 @@ +#!/usr/bin/env python3 +"""Route and occupancy visualisation nodes. + +Provides two ROS 2 nodes that run together in a single process: + +- **RouteVisualiserNode** — subscribes to ``topological_navigation/Route`` + and publishes arrow markers between consecutive waypoints on + ``topological_route_visualisation``. +- **OccupancyVisualiserNode** — subscribes to + ``/topological_navigation/occupied_node`` and publishes sphere markers + on ``/topological_navigation/visual/occupied_node``. + +Both require a ``tmap`` parameter pointing to a ``.tmap2.yaml`` file. +""" + +import rclpy +from rclpy.node import Node +from rclpy.executors import MultiThreadedExecutor +from rclpy.qos import QoSProfile, DurabilityPolicy + +import yaml +import numpy as np +import tf_transformations + +from geometry_msgs.msg import Point +from visualization_msgs.msg import Marker, MarkerArray +from topological_navigation_msgs.msg import ( + TopologicalOccupiedNode, + TopologicalRoute, +) + + +# ────────────────────────────────────────────────────────────────── +# Utils +# ────────────────────────────────────────────────────────────────── +def load_waypoints_from_tmap(file_path): + """Load and pre-transform waypoint vertices into the map frame.""" + try: + with open(file_path, 'r') as fh: + tmap_data = yaml.safe_load(fh) + + waypoints = {} + for entry in tmap_data.get('nodes', []): + try: + node = entry['node'] + name = node['name'] + pos = node['pose']['position'] + ori = node['pose']['orientation'] + + t_mat = tf_transformations.translation_matrix( + [pos['x'], pos['y'], pos['z']] + ) + r_mat = tf_transformations.quaternion_matrix( + [ori['x'], ori['y'], ori['z'], ori['w']] + ) + transform = np.dot(t_mat, r_mat) + + verts = [] + for v in node.get('verts', []): + local = np.array([v['x'], v['y'], 0.0, 1.0]) + world = np.dot(transform, local) + verts.append((world[0], world[1])) + + waypoints[name] = { + 'position': (pos['x'], pos['y'], pos['z']), + 'orientation': ( + ori['x'], ori['y'], ori['z'], ori['w'] + ), + 'verts': verts, + } + except KeyError: + continue + return waypoints + + except Exception: + return {} + + +# ══════════════════════════════════════════════════════════════════ +# Route visualiser +# ══════════════════════════════════════════════════════════════════ +class RouteVisualiserNode(Node): + """Subscribes to a route topic and publishes arrow markers.""" + + def __init__(self): + super().__init__('route_visualiser') + self.declare_parameter('tmap', rclpy.Parameter.Type.STRING) + tmap_path = ( + self.get_parameter('tmap').get_parameter_value().string_value + ) + self.tmap = load_waypoints_from_tmap(tmap_path) + + qos = QoSProfile( + depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL + ) + self.pub = self.create_publisher( + MarkerArray, 'topological_route_visualisation', qos_profile=qos + ) + self.create_subscription( + TopologicalRoute, + 'topological_navigation/Route', + self._route_cb, + qos_profile=qos, + ) + self.get_logger().info('Route visualiser started') + + def _route_cb(self, msg: TopologicalRoute): + self._clear() + arr = MarkerArray() + idn = 0 + if self.tmap: + for i in range(1, len(msg.nodes)): + arr.markers.append( + self._arrow(msg.nodes[i - 1], msg.nodes[i], idn) + ) + idn += 1 + self.pub.publish(arr) + + def _clear(self): + arr = MarkerArray() + m = Marker() + m.action = Marker.DELETEALL + arr.markers.append(m) + self.pub.publish(arr) + + def _arrow(self, origin: str, end: str, idn: int) -> Marker: + m = Marker() + m.id = idn + m.header.frame_id = 'map' + m.type = Marker.ARROW + o = self.tmap[origin] + e = self.tmap[end] + v1 = Point( + x=o['position'][0], y=o['position'][1], z=o['position'][2] + 0.25 + ) + v2 = Point( + x=e['position'][0], y=e['position'][1], z=e['position'][2] + 0.25 + ) + m.pose.orientation.w = 1.0 + m.scale.x = 0.08 + m.scale.y = 0.12 + m.scale.z = 0.2 + m.color.a = 1.0 + m.color.r = 0.33 + m.color.g = 0.99 + m.color.b = 0.55 + m.points.append(v1) + m.points.append(v2) + m.ns = '/route_path' + return m + + +# ══════════════════════════════════════════════════════════════════ +# Occupancy visualiser +# ══════════════════════════════════════════════════════════════════ +class OccupancyVisualiserNode(Node): + """Subscribes to occupied-node topics and publishes sphere markers.""" + + def __init__(self): + super().__init__('occupancy_visualiser') + self.declare_parameter('tmap', rclpy.Parameter.Type.STRING) + tmap_path = ( + self.get_parameter('tmap').get_parameter_value().string_value + ) + self.tmap = load_waypoints_from_tmap(tmap_path) + self.last_count = 0 + + qos = QoSProfile( + depth=1, durability=DurabilityPolicy.TRANSIENT_LOCAL + ) + self.pub = self.create_publisher( + MarkerArray, + '/topological_navigation/visual/occupied_node', + qos, + ) + self.create_subscription( + TopologicalOccupiedNode, + '/topological_navigation/occupied_node', + self._cb, + 10, + ) + self.get_logger().info('Occupancy visualiser started') + + def _cb(self, msg: TopologicalOccupiedNode): + names = msg.nodes if msg.nodes else [] + arr = MarkerArray() + + for i, wp in enumerate(names): + data = self.tmap.get(wp) + if not data: + continue + m = Marker() + m.header.frame_id = 'map' + m.header.stamp = self.get_clock().now().to_msg() + m.ns = 'occupied_waypoints' + m.id = i + m.type = Marker.SPHERE + m.action = Marker.ADD + m.pose.position.x = data['position'][0] + m.pose.position.y = data['position'][1] + m.pose.position.z = 0.15 + m.pose.orientation.w = 1.0 + m.scale.x = 1.0 + m.scale.y = 1.0 + m.scale.z = 0.1 + m.color.r = 1.0 + m.color.a = 0.8 + arr.markers.append(m) + + # Delete stale markers + for i in range(len(names), self.last_count): + m = Marker() + m.header.frame_id = 'map' + m.ns = 'occupied_waypoints' + m.id = i + m.action = Marker.DELETE + arr.markers.append(m) + + self.pub.publish(arr) + self.last_count = len(names) + + +# ══════════════════════════════════════════════════════════════════ +# Entry-point +# ══════════════════════════════════════════════════════════════════ +def main(args=None): + rclpy.init(args=args) + + route_node = RouteVisualiserNode() + occupancy_node = OccupancyVisualiserNode() + + executor = MultiThreadedExecutor() + executor.add_node(route_node) + executor.add_node(occupancy_node) + + try: + executor.spin() + except KeyboardInterrupt: + pass + finally: + executor.shutdown() + route_node.destroy_node() + occupancy_node.destroy_node() + if rclpy.ok(): + rclpy.shutdown() + + +if __name__ == '__main__': + main() diff --git a/topological_navigation_visual/topological_navigation_visual/scripts/topological_web_app.py b/topological_navigation_visual/topological_navigation_visual/scripts/topological_web_app.py new file mode 100644 index 00000000..76fca653 --- /dev/null +++ b/topological_navigation_visual/topological_navigation_visual/scripts/topological_web_app.py @@ -0,0 +1,306 @@ +#!/usr/bin/env python3 +# Copyright (c) 2026, topological_navigation contributors +# Licensed under the MIT License. +"""Web app for visualising the topological map, the robot and its route. + +Serves a React front end (all assets bundled, works offline) on a single +port (default 8083). The backend holds all state; browsers only render +what is pushed to them via Server-Sent Events, so every open client shows +the same synchronised view. + +Features +-------- +* Topological map drawn as a zoomable / pannable graph (roboflow-enabled + nodes are coloured differently); hovering a node shows its properties. +* Live robot position (current/closest node and metric pose from TF) and + speed (from odometry). +* Click a node to send the robot there (``GotoNode`` action), current + destination / goal display with a cancel button. +* The planned route is highlighted while navigating. + +Parameters +---------- +port : int (default 8083) + HTTP port serving both the UI and the API. +host : str (default ``0.0.0.0``) + Interface to bind to. +odom_topic : str (default ``/odometry/global``) + ``nav_msgs/Odometry`` topic used for the speed display. +base_frame : str (default ``base_link``) + Robot frame looked up in TF for the metric position. +map_frame : str (default ``''``) + Fixed frame; empty uses the map's ``topo_frame_id`` (or ``map``). +action_name : str (default ``/topological_navigation``) + ``GotoNode`` action server. +pose_rate : float (default 5.0) + Rate [Hz] of the TF pose lookup. +update_rate : float (default 10.0) + Maximum rate [Hz] at which state updates are pushed to clients. +web_root : str (default ``''``) + Directory with the front end; empty uses the bundled assets. +""" + +import json + +import rclpy +import yaml +from action_msgs.msg import GoalStatus, GoalStatusArray +from action_msgs.srv import CancelGoal +from nav_msgs.msg import Odometry +from rclpy.action import ActionClient +from rclpy.executors import ExternalShutdownException +from rclpy.node import Node +from rclpy.qos import ( + DurabilityPolicy, HistoryPolicy, QoSProfile, ReliabilityPolicy, + qos_profile_sensor_data, +) +from std_msgs.msg import String +from tf2_ros import Buffer, TransformException, TransformListener +from topological_navigation_msgs.action import GotoNode +from topological_navigation_msgs.msg import TopologicalRoute + +from topological_navigation_visual.web_server import ( + DEFAULT_PORT, DEFAULT_WEB_ROOT, WebAppServer, +) +from topological_navigation_visual.web_state import ( + WebAppState, yaw_from_quaternion, +) + +_OUTCOMES = { + GoalStatus.STATUS_SUCCEEDED: 'succeeded', + GoalStatus.STATUS_ABORTED: 'aborted', + GoalStatus.STATUS_CANCELED: 'cancelled', +} + + +def parse_map_message(data: str): + """Parse the ``/topological_map_2`` payload (JSON, YAML fallback).""" + try: + return json.loads(data) + except ValueError: + return yaml.safe_load(data) + + +class TopologicalWebApp(Node): + """ROS 2 node feeding :class:`WebAppState` and serving the web UI.""" + + def __init__(self): + super().__init__('topological_web_app') + + self.declare_parameter('port', DEFAULT_PORT) + self.declare_parameter('host', '0.0.0.0') + self.declare_parameter('odom_topic', '/odometry/global') + self.declare_parameter('base_frame', 'base_link') + self.declare_parameter('map_frame', '') + self.declare_parameter('action_name', '/topological_navigation') + self.declare_parameter('pose_rate', 5.0) + self.declare_parameter('update_rate', 10.0) + self.declare_parameter('web_root', '') + + port = int(self.get_parameter('port').value) + host = str(self.get_parameter('host').value) + odom_topic = str(self.get_parameter('odom_topic').value) + self._base_frame = str(self.get_parameter('base_frame').value) + self._map_frame = str(self.get_parameter('map_frame').value) + action_name = str(self.get_parameter('action_name').value) + pose_rate = max(float(self.get_parameter('pose_rate').value), 0.1) + update_rate = max(float(self.get_parameter('update_rate').value), 0.1) + web_root = str(self.get_parameter('web_root').value) or DEFAULT_WEB_ROOT + + self.state = WebAppState() + self._tf_warned = False + + latched = QoSProfile( + depth=1, + reliability=ReliabilityPolicy.RELIABLE, + history=HistoryPolicy.KEEP_LAST, + durability=DurabilityPolicy.TRANSIENT_LOCAL, + ) + best_effort = QoSProfile( + depth=10, + reliability=ReliabilityPolicy.BEST_EFFORT, + history=HistoryPolicy.KEEP_LAST, + ) + + # -- Subscriptions --------------------------------------------- + self.create_subscription( + String, '/topological_map_2', self._map_cb, latched) + self.create_subscription( + String, '/current_node', self._current_node_cb, latched) + self.create_subscription( + String, '/closest_node', self._closest_node_cb, latched) + self.create_subscription( + Odometry, odom_topic, self._odom_cb, qos_profile_sensor_data) + self.create_subscription( + TopologicalRoute, '/topological_navigation/Route', + self._route_cb, best_effort) + self.create_subscription( + String, '/current_edge', self._current_edge_cb, latched) + self.create_subscription( + String, '/topological_navigation/move_action_status', + self._move_status_cb, latched) + self.create_subscription( + String, '/robot_operation_current_status', + self._nav_status_cb, latched) + self.create_subscription( + GoalStatusArray, action_name.rstrip('/') + '/_action/status', + self._action_status_cb, latched) + + # -- Action client + cancel-all service ------------------------ + self._goto_client = ActionClient( + self, GotoNode, action_name) + self._cancel_client = self.create_client( + CancelGoal, action_name.rstrip('/') + '/_action/cancel_goal') + + # -- TF pose lookup -------------------------------------------- + self._tf_buffer = Buffer() + self._tf_listener = TransformListener(self._tf_buffer, self) + self.create_timer(1.0 / pose_rate, self._pose_timer_cb) + + # -- HTTP server ----------------------------------------------- + self.server = WebAppServer( + self.state, on_goto=self.send_goal, on_cancel=self.cancel_goal, + host=host, port=port, web_root=web_root, + min_interval=1.0 / update_rate, logger=self.get_logger(), + ) + self.server.start() + self.get_logger().info( + 'Topological web app serving %s on http://%s:%d/' + % (web_root, host, self.server.port)) + + # ------------------------------------------------------------------ + # Topic callbacks + # ------------------------------------------------------------------ + def _map_cb(self, msg): + try: + tmap = parse_map_message(msg.data) + if self.state.set_map(tmap): + self.get_logger().info('Topological map updated') + except Exception as exc: + self.get_logger().error('Failed to parse topological map: %s' % exc) + + def _current_node_cb(self, msg): + self.state.set_current_node(msg.data) + + def _closest_node_cb(self, msg): + self.state.set_closest_node(msg.data) + + def _odom_cb(self, msg): + twist = msg.twist.twist + self.state.set_odometry( + twist.linear.x, twist.linear.y, twist.angular.z) + + def _route_cb(self, msg): + self.state.set_route(msg.nodes) + + def _current_edge_cb(self, msg): + self.state.set_current_edge(msg.data) + + def _move_status_cb(self, msg): + try: + self.state.set_move_status(json.loads(msg.data)) + except ValueError: + pass + + def _nav_status_cb(self, msg): + self.state.set_nav_status(msg.data) + + def _action_status_cb(self, msg): + self.state.set_action_statuses(s.status for s in msg.status_list) + + def _pose_timer_cb(self): + frame = self._map_frame or self.state.map_frame or 'map' + try: + trans = self._tf_buffer.lookup_transform( + frame, self._base_frame, rclpy.time.Time()) + except TransformException as exc: + if not self._tf_warned: + self.get_logger().warning( + 'TF lookup %s -> %s failed: %s' + % (frame, self._base_frame, exc)) + self._tf_warned = True + self.state.clear_pose() + return + self._tf_warned = False + t = trans.transform.translation + r = trans.transform.rotation + self.state.set_pose( + t.x, t.y, yaw_from_quaternion(r.x, r.y, r.z, r.w), frame) + + # ------------------------------------------------------------------ + # Commands from the web UI (called from HTTP server threads) + # ------------------------------------------------------------------ + def send_goal(self, target): + """Send a ``GotoNode`` goal; returns ``(ok, message)``.""" + if not self._goto_client.wait_for_server(timeout_sec=1.0): + return False, 'navigation action server not available' + goal = GotoNode.Goal() + goal.target = target + goal.no_orientation = False + self.get_logger().info('Web app: sending robot to %s' % target) + self.state.goal_requested(target) + future = self._goto_client.send_goal_async(goal) + future.add_done_callback( + lambda f: self._goal_response_cb(f, target)) + return True, 'goal to %s sent' % target + + def _goal_response_cb(self, future, target): + try: + handle = future.result() + except Exception as exc: + self.state.goal_rejected(target, 'failed: %s' % exc) + return + if handle is None or not handle.accepted: + self.state.goal_rejected(target, 'rejected') + return + self.state.goal_accepted(target) + handle.get_result_async().add_done_callback( + lambda f: self._goal_result_cb(f, target)) + + def _goal_result_cb(self, future, target): + outcome = 'finished' + try: + result = future.result() + outcome = _OUTCOMES.get(result.status, 'finished') + if result.status == GoalStatus.STATUS_SUCCEEDED \ + and not result.result.success: + outcome = 'failed' + except Exception as exc: + outcome = 'failed: %s' % exc + self.get_logger().info('Web app: goal to %s %s' % (target, outcome)) + self.state.goal_finished(target, outcome) + + def cancel_goal(self): + """Cancel all goals on the navigation action server.""" + if not self._cancel_client.wait_for_service(timeout_sec=1.0): + return False, 'navigation cancel service not available' + # An empty request (zero goal id and stamp) cancels all goals, so + # goals sent by other clients can be cancelled from the UI as well. + self._cancel_client.call_async(CancelGoal.Request()) + self.get_logger().info('Web app: cancelling navigation') + self.state.set_message('Cancel requested') + return True, 'cancel requested' + + def destroy_node(self): + self.server.stop() + return super().destroy_node() + + +def main(args=None): + rclpy.init(args=args) + node = TopologicalWebApp() + # All callbacks are non-blocking (HTTP requests are handled in the + # server's own threads), so a single-threaded executor is sufficient + # and far cheaper than a multi-threaded one. + try: + rclpy.spin(node) + except (KeyboardInterrupt, ExternalShutdownException): + pass + finally: + node.destroy_node() + if rclpy.ok(): + rclpy.shutdown() + + +if __name__ == '__main__': + main() diff --git a/topological_navigation_visual/topological_navigation_visual/viz_utils.py b/topological_navigation_visual/topological_navigation_visual/viz_utils.py new file mode 100644 index 00000000..7123406d --- /dev/null +++ b/topological_navigation_visual/topological_navigation_visual/viz_utils.py @@ -0,0 +1,253 @@ +#!/usr/bin/env python3 +"""Pure-Python helpers for the topological map visualiser. + +These functions contain **no ROS dependencies** so they can be unit-tested +without a ROS 2 installation and reused by the visualiser node. They +encapsulate the logic that makes the visualiser scale to large maps: + +- :func:`collect_node_positions` / :func:`build_position_lookup` extract + node coordinates once so markers can be batched. +- :func:`group_edge_segments` collapses every edge into a small number of + line-segment batches keyed by action, so a map with thousands of edges + produces only a handful of RViz markers. +- :func:`collect_zone_segments` batches all influence-zone polygons into a + single line-segment list. +- :func:`compute_auto_scale` estimates a sensible marker scale from the + spatial spread of the nodes, which keeps markers legible on both small + and very large maps. + +A *point* throughout this module is a plain ``(x, y, z)`` tuple of floats and +a *segment* is a ``(point_from, point_to)`` tuple. The visualiser converts +these to ``geometry_msgs/Point`` instances when it builds markers. +""" + +from __future__ import annotations + +import math +from typing import Dict, List, Optional, Sequence, Tuple + +Point3 = Tuple[float, float, float] +Segment = Tuple[Point3, Point3] + +#: Hard limits applied to any computed/!user marker scale so the +#: visualisation never collapses to nothing or explodes off-screen. +MIN_SCALE = 0.05 +MAX_SCALE = 25.0 + + +def _clamp(value: float, low: float, high: float) -> float: + """Clamp *value* into the inclusive ``[low, high]`` range.""" + return max(low, min(high, value)) + + +def _node_position(node: dict) -> Optional[Point3]: + """Return the ``(x, y, z)`` position of a tmap2 *node* dict. + + Returns ``None`` if the node has no usable position. + """ + try: + pos = node['pose']['position'] + return (float(pos['x']), float(pos['y']), float(pos.get('z', 0.0))) + except (KeyError, TypeError, ValueError): + return None + + +def collect_node_positions(nodes: Sequence[dict]) -> List[Point3]: + """Extract ``(x, y, z)`` positions from a list of tmap2 node entries. + + Parameters + ---------- + nodes: + The ``tmap['nodes']`` list, where each entry is a dict with a + ``'node'`` key. + + Returns + ------- + list of (float, float, float) + Positions of every node with a valid pose, in map order. + """ + positions: List[Point3] = [] + for entry in nodes: + node = entry.get('node', {}) + pos = _node_position(node) + if pos is not None: + positions.append(pos) + return positions + + +def build_position_lookup(nodes: Sequence[dict]) -> Dict[str, Point3]: + """Build a ``{node_name: (x, y, z)}`` lookup from tmap2 node entries.""" + lookup: Dict[str, Point3] = {} + for entry in nodes: + node = entry.get('node', {}) + name = node.get('name') + if name is None: + continue + pos = _node_position(node) + if pos is not None: + lookup[name] = pos + return lookup + + +def group_edge_segments( + nodes: Sequence[dict], + z_offset: float = 0.0, +) -> Dict[str, List[Segment]]: + """Group every edge into line segments keyed by action name. + + Batching edges by action lets the visualiser emit a single + ``LINE_LIST`` marker per action (and thus per colour) instead of one + marker per edge. For a map with *E* edges and *A* distinct actions + this reduces the edge marker count from *E* to *A*. + + Parameters + ---------- + nodes: + The ``tmap['nodes']`` list. + z_offset: + Value added to the ``z`` coordinate of every endpoint so edges + render slightly above the ground plane. + + Returns + ------- + dict[str, list[Segment]] + Mapping of action name to a list of ``(from, to)`` segments. + Edges whose target node is missing from the map are skipped. + """ + lookup = build_position_lookup(nodes) + groups: Dict[str, List[Segment]] = {} + + for entry in nodes: + node = entry.get('node', {}) + name = node.get('name') + if name not in lookup: + continue + src = lookup[name] + src = (src[0], src[1], src[2] + z_offset) + for edge in node.get('edges', []) or []: + target = edge.get('node') + if target not in lookup: + continue + dst = lookup[target] + dst = (dst[0], dst[1], dst[2] + z_offset) + action = edge.get('action', '') or '' + groups.setdefault(action, []).append((src, dst)) + + return groups + + +def collect_zone_segments( + nodes: Sequence[dict], + z_offset: float = 0.0, +) -> List[Segment]: + """Batch every influence-zone polygon into a flat list of segments. + + The returned segments are suitable for a single ``LINE_LIST`` marker + that draws all node influence zones at once. Vertices are stored in + node-local coordinates in the map, so they are translated by the + node position here. + + Parameters + ---------- + nodes: + The ``tmap['nodes']`` list. + z_offset: + Value added to the ``z`` coordinate of every vertex. + + Returns + ------- + list[Segment] + One ``(from, to)`` segment per polygon edge (the polygon is + closed automatically). Polygons with fewer than two vertices are + skipped. + """ + segments: List[Segment] = [] + + for entry in nodes: + node = entry.get('node', {}) + verts = node.get('verts') or [] + if len(verts) < 2: + continue + base = _node_position(node) + if base is None: + continue + bx, by, bz = base + bz += z_offset + + points: List[Point3] = [] + valid = True + for v in verts: + try: + points.append((bx + float(v['x']), by + float(v['y']), bz)) + except (KeyError, TypeError, ValueError): + valid = False + break + if not valid or len(points) < 2: + continue + + for i in range(len(points)): + segments.append((points[i], points[(i + 1) % len(points)])) + + return segments + + +def compute_auto_scale( + positions: Sequence[Point3], + fallback: float = 0.5, + min_scale: float = MIN_SCALE, + max_scale: float = MAX_SCALE, +) -> float: + """Estimate a marker scale from the spatial spread of nodes. + + The heuristic uses the bounding-box diagonal divided by ``sqrt(n)`` as + a proxy for the average spacing between nodes, then takes a fraction of + that spacing so markers stay visible without overlapping on dense maps + or vanishing on sparse ones. + + Parameters + ---------- + positions: + Node positions as ``(x, y, z)`` tuples (z is ignored). + fallback: + Scale returned when there are not enough nodes to estimate spread + (fewer than two, or all coincident). + min_scale, max_scale: + Inclusive clamp applied to the result. + + Returns + ------- + float + A marker scale clamped to ``[min_scale, max_scale]``. + """ + pts = list(positions) + n = len(pts) + if n < 2: + return _clamp(fallback, min_scale, max_scale) + + xs = [p[0] for p in pts] + ys = [p[1] for p in pts] + diagonal = math.hypot(max(xs) - min(xs), max(ys) - min(ys)) + if diagonal <= 0.0: + return _clamp(fallback, min_scale, max_scale) + + spacing = diagonal / math.sqrt(n) + scale = spacing * 0.5 + return _clamp(scale, min_scale, max_scale) + + +def ordered_action_names(nodes: Sequence[dict]) -> List[str]: + """Return distinct edge action names in first-seen order. + + The ordering is stable so colour assignment and the legend remain + consistent between rebuilds. + """ + seen: List[str] = [] + seen_set = set() + for entry in nodes: + node = entry.get('node', {}) + for edge in node.get('edges', []) or []: + action = edge.get('action', '') or '' + if action and action not in seen_set: + seen_set.add(action) + seen.append(action) + return seen diff --git a/topological_navigation_visual/topological_navigation_visual/web/app.js b/topological_navigation_visual/topological_navigation_visual/web/app.js new file mode 100644 index 00000000..379bc3fd --- /dev/null +++ b/topological_navigation_visual/topological_navigation_visual/web/app.js @@ -0,0 +1,428 @@ +/* + * Topological navigation web app (React + cytoscape.js, no build step). + * + * The front end is stateless: it renders whatever the backend pushes via + * Server-Sent Events (/api/events) and sends commands with POST requests. + * Only purely visual state (hovered node, viewport) lives in the browser, + * so all open clients always show the same map, robot and goal. + */ +(function () { + 'use strict'; + + const html = htm.bind(React.createElement); + const { useEffect, useRef, useState } = React; + + const COLORS = { + node: '#2563eb', + roboflow: '#16a34a', + edge: '#9ca3af', + route: '#f97316', + currentEdge: '#dc2626', + currentNode: '#0ea5e9', + destination: '#dc2626', + currentGoal: '#f59e0b', + robot: '#111827', + }; + + // Map metres -> graph units such that a typical edge is ~80 units long. + function computeScale(graph) { + const pos = {}; + graph.nodes.forEach((n) => { pos[n.name] = n; }); + const lengths = []; + graph.edges.forEach((e) => { + const a = pos[e.source]; + const b = pos[e.target]; + if (a && b) { + const d = Math.hypot(a.x - b.x, a.y - b.y); + if (d > 1e-6) lengths.push(d); + } + }); + if (!lengths.length) return 50; + lengths.sort((a, b) => a - b); + return 80 / lengths[Math.floor(lengths.length / 2)]; + } + + function toGraph(x, y, scale) { + return { x: x * scale, y: -y * scale }; + } + + async function postJson(url, body) { + const res = await fetch(url, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(body || {}), + }); + let data = {}; + try { data = await res.json(); } catch (e) { /* ignore */ } + if (!res.ok || data.ok === false) { + throw new Error(data.message || ('HTTP ' + res.status)); + } + return data; + } + + function fmt(value, digits, unit) { + if (value === null || value === undefined || Number.isNaN(value)) return '\u2013'; + return value.toFixed(digits) + (unit ? ' ' + unit : ''); + } + + const CY_STYLE = [ + { + selector: 'node.topo', + style: { + 'background-color': COLORS.node, + width: 22, height: 22, + label: 'data(name)', + 'font-size': 10, + color: '#374151', + 'text-valign': 'bottom', + 'text-margin-y': 3, + 'text-background-color': '#ffffff', + 'text-background-opacity': 0.7, + 'text-background-padding': 1, + 'min-zoomed-font-size': 7, + 'border-width': 0, + }, + }, + { selector: 'node.topo.roboflow', style: { 'background-color': COLORS.roboflow } }, + { selector: 'node.topo.route', style: { 'border-width': 3, 'border-color': COLORS.route } }, + { selector: 'node.topo.current-goal', style: { 'border-width': 5, 'border-color': COLORS.currentGoal } }, + { selector: 'node.topo.destination', style: { 'border-width': 5, 'border-color': COLORS.destination, width: 28, height: 28 } }, + { selector: 'node.topo.current', style: { 'border-width': 5, 'border-color': COLORS.currentNode } }, + { selector: 'node.topo.hover', style: { 'overlay-opacity': 0.15, 'overlay-color': '#000000' } }, + { + selector: 'edge.topo', + style: { + width: 2, + 'line-color': COLORS.edge, + 'target-arrow-color': COLORS.edge, + 'target-arrow-shape': 'triangle', + 'arrow-scale': 0.8, + 'curve-style': 'bezier', + }, + }, + { + selector: 'edge.topo.route', + style: { + width: 5, 'line-color': COLORS.route, 'target-arrow-color': COLORS.route, 'z-index': 5, + }, + }, + { + selector: 'edge.topo.current-edge', + style: { + width: 6, 'line-color': COLORS.currentEdge, 'target-arrow-color': COLORS.currentEdge, 'z-index': 6, + }, + }, + { + selector: 'node.robot', + style: { + 'background-color': COLORS.robot, width: 26, height: 26, + 'border-width': 3, 'border-color': '#ffffff', 'z-index': 20, events: 'no', + }, + }, + { + selector: 'node.robot-head', + style: { width: 1, height: 1, opacity: 0, events: 'no' }, + }, + { + selector: 'edge.robot-dir', + style: { + width: 4, 'line-color': COLORS.robot, 'target-arrow-color': COLORS.robot, + 'target-arrow-shape': 'triangle', 'curve-style': 'straight', 'z-index': 20, events: 'no', + }, + }, + ]; + + // ------------------------------------------------------------------ + // Server connection: map + state are pushed by the backend. + // ------------------------------------------------------------------ + function useServerState() { + const [mapSnap, setMapSnap] = useState(null); + const [state, setState] = useState(null); + const [connected, setConnected] = useState(false); + useEffect(() => { + const es = new EventSource('api/events'); + es.addEventListener('map', (e) => setMapSnap(JSON.parse(e.data))); + es.addEventListener('state', (e) => { setState(JSON.parse(e.data)); setConnected(true); }); + es.onopen = () => setConnected(true); + es.onerror = () => setConnected(false); + return () => es.close(); + }, []); + return { mapSnap, state, connected }; + } + + // ------------------------------------------------------------------ + // Map view (cytoscape) + // ------------------------------------------------------------------ + function MapView({ mapSnap, state, onNodeClick, cyRef }) { + const containerRef = useRef(null); + const scaleRef = useRef(50); + const nodesRef = useRef({}); + const clickRef = useRef(onNodeClick); + const [hover, setHover] = useState(null); + clickRef.current = onNodeClick; + + // Create the cytoscape instance once. + useEffect(() => { + const cy = cytoscape({ + container: containerRef.current, + style: CY_STYLE, + autoungrabify: true, + boxSelectionEnabled: false, + wheelSensitivity: 0.3, + minZoom: 0.02, + maxZoom: 20, + }); + cy.on('mouseover', 'node.topo', (evt) => { + const n = evt.target; + n.addClass('hover'); + const p = n.renderedPosition(); + setHover({ name: n.data('name'), x: p.x, y: p.y }); + containerRef.current.style.cursor = 'pointer'; + }); + cy.on('mouseout', 'node.topo', (evt) => { + evt.target.removeClass('hover'); + setHover(null); + containerRef.current.style.cursor = ''; + }); + cy.on('viewport', () => setHover(null)); + cy.on('tap', 'node.topo', (evt) => clickRef.current(evt.target.data('name'))); + cyRef.current = cy; + return () => { cy.destroy(); cyRef.current = null; }; + }, []); + + // Rebuild graph elements whenever the backend map changes. + const map = mapSnap && mapSnap.map; + useEffect(() => { + const cy = cyRef.current; + if (!cy) return; + cy.elements().remove(); + nodesRef.current = {}; + if (!map) return; + const scale = computeScale(map); + scaleRef.current = scale; + const elements = []; + map.nodes.forEach((n) => { + nodesRef.current[n.name] = n; + elements.push({ + group: 'nodes', + data: { id: 'n:' + n.name, name: n.name }, + position: toGraph(n.x, n.y, scale), + classes: 'topo' + (n.roboflow ? ' roboflow' : ''), + }); + }); + map.edges.forEach((e, i) => { + elements.push({ + group: 'edges', + data: { id: 'e:' + i + ':' + e.id, edgeId: e.id, source: 'n:' + e.source, target: 'n:' + e.target }, + classes: 'topo', + }); + }); + cy.add(elements); + cy.fit(undefined, 40); + }, [mapSnap && mapSnap.map_version]); + + // Apply live robot / navigation state. + useEffect(() => { + const cy = cyRef.current; + if (!cy || !state || !map) return; + const nav = state.navigation; + const robot = state.robot; + const routeNodes = new Set(nav.route || []); + const routeEdges = new Set(nav.route_edges || []); + cy.batch(() => { + cy.nodes('.topo').forEach((n) => { + const name = n.data('name'); + n.toggleClass('current', name === robot.current_node); + n.toggleClass('destination', name === nav.destination); + n.toggleClass('current-goal', name === nav.current_goal); + n.toggleClass('route', routeNodes.has(name)); + }); + cy.edges('.topo').forEach((e) => { + const id = e.data('edgeId'); + e.toggleClass('route', routeEdges.has(id)); + e.toggleClass('current-edge', nav.active && id === nav.current_edge); + }); + + const pose = robot.pose; + let r = cy.getElementById('__robot'); + if (!pose) { + cy.remove('.robot, .robot-head, .robot-dir'); + return; + } + const scale = scaleRef.current; + const p = toGraph(pose.x, pose.y, scale); + const h = { x: p.x + 30 * Math.cos(pose.yaw), y: p.y - 30 * Math.sin(pose.yaw) }; + if (r.empty()) { + cy.add([ + { group: 'nodes', data: { id: '__robot' }, position: p, classes: 'robot', selectable: false }, + { group: 'nodes', data: { id: '__robot_head' }, position: h, classes: 'robot-head', selectable: false }, + { group: 'edges', data: { id: '__robot_dir', source: '__robot', target: '__robot_head' }, classes: 'robot-dir' }, + ]); + } else { + r.position(p); + cy.getElementById('__robot_head').position(h); + } + }); + }, [state, mapSnap && mapSnap.map_version]); + + const hoverNode = hover && nodesRef.current[hover.name]; + return html` +
+ ${!map && html`
Waiting for topological map\u2026
`} + ${hoverNode && html`<${NodeTooltip} node=${hoverNode} x=${hover.x} y=${hover.y} + outgoing=${map.edges.filter((e) => e.source === hoverNode.name)} />`} + `; + } + + function ConfirmModal({ message, onConfirm, onCancel }) { + return html` + `; + } + + function NodeTooltip({ node, x, y, outgoing }) { + const props = node.properties || {}; + const hasProps = Object.keys(props).length > 0; + const edgeText = outgoing.map((e) => e.target + (e.action ? ' (' + e.action + ')' : '')).join(', '); + return html` +
+

${node.name}

+
x ${fmt(node.x, 2)}, y ${fmt(node.y, 2)}, yaw ${fmt(node.yaw, 2)} + ${node.roboflow ? ' \u00b7 roboflow enabled' : ''}
+ ${edgeText && html`
\u2192 ${edgeText}
`} + ${hasProps + ? html`
${JSON.stringify(props, null, 2)}
` + : html`
no properties
`} +
Click to send the robot here
+
`; + } + + // ------------------------------------------------------------------ + // Side panel + // ------------------------------------------------------------------ + function KV({ rows }) { + return html`
${rows.map(([k, v]) => html` +
${k}
${v === null || v === undefined || v === '' ? '\u2013' : v}
`)} +
`; + } + + function SidePanel({ mapSnap, state, connected, notice, onCancel }) { + const map = mapSnap && mapSnap.map; + const robot = state ? state.robot : {}; + const nav = state ? state.navigation : {}; + const pose = robot.pose; + const speed = robot.speed; + const result = nav.last_result; + return html` + `; + } + + // ------------------------------------------------------------------ + // App + // ------------------------------------------------------------------ + function App() { + const { mapSnap, state, connected } = useServerState(); + const cyRef = useRef(null); + const [notice, setNotice] = useState(null); + const [confirmTarget, setConfirmTarget] = useState(null); + + const report = (promise) => promise + .then((d) => setNotice({ text: d.message, error: false })) + .catch((err) => setNotice({ text: err.message, error: true })); + + const onNodeClick = (name) => setConfirmTarget(name); + const confirmGoto = () => { + report(postJson('api/goto', { node: confirmTarget })); + setConfirmTarget(null); + }; + const onCancel = () => report(postJson('api/cancel', {})); + + const fit = () => { if (cyRef.current) cyRef.current.fit(cyRef.current.nodes('.topo'), 40); }; + const centreRobot = () => { + const cy = cyRef.current; + if (!cy) return; + const r = cy.getElementById('__robot'); + if (r.nonempty()) cy.center(r); + }; + const hasPose = !!(state && state.robot.pose); + + return html` +
+
+ <${MapView} mapSnap=${mapSnap} state=${state} onNodeClick=${onNodeClick} cyRef=${cyRef} /> +
+ + +
+
+ <${SidePanel} mapSnap=${mapSnap} state=${state} connected=${connected} + notice=${notice} onCancel=${onCancel} /> + ${confirmTarget && html`<${ConfirmModal} + message=${'Send the robot to node "' + confirmTarget + '"?'} + onConfirm=${confirmGoto} onCancel=${() => setConfirmTarget(null)} />`} +
`; + } + + ReactDOM.createRoot(document.getElementById('root')).render(html`<${App} />`); +}()); diff --git a/topological_navigation_visual/topological_navigation_visual/web/index.html b/topological_navigation_visual/topological_navigation_visual/web/index.html new file mode 100644 index 00000000..9dbc968a --- /dev/null +++ b/topological_navigation_visual/topological_navigation_visual/web/index.html @@ -0,0 +1,42 @@ + + + + + + Topological Navigation + + +
+ + + + diff --git a/topological_navigation_visual/topological_navigation_visual/web/style.css b/topological_navigation_visual/topological_navigation_visual/web/style.css new file mode 100644 index 00000000..a00ae9c2 --- /dev/null +++ b/topological_navigation_visual/topological_navigation_visual/web/style.css @@ -0,0 +1,101 @@ +* { box-sizing: border-box; } + +html, body, #root { + height: 100%; + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + font-size: 14px; + color: #1f2937; + background: #f3f4f6; +} + +.app { display: flex; height: 100%; } + +.map-pane { position: relative; flex: 1; min-width: 0; } +.cy { position: absolute; inset: 0; background: #ffffff; } + +.map-toolbar { + position: absolute; top: 10px; left: 10px; z-index: 5; + display: flex; gap: 6px; +} + +.overlay { + position: absolute; inset: 0; display: flex; align-items: center; + justify-content: center; color: #6b7280; font-size: 18px; pointer-events: none; +} + +.tooltip { + position: absolute; z-index: 10; pointer-events: none; + max-width: 360px; max-height: 60vh; overflow: hidden; + background: rgba(17, 24, 39, 0.92); color: #f9fafb; + border-radius: 6px; padding: 8px 10px; font-size: 12px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25); +} +.tooltip h4 { margin: 0 0 4px 0; font-size: 14px; } +.tooltip pre { margin: 4px 0 0 0; white-space: pre-wrap; word-break: break-word; font-size: 11px; } +.tooltip .muted { color: #9ca3af; } + +.side { + width: 320px; flex-shrink: 0; overflow-y: auto; padding: 12px; + background: #f9fafb; border-left: 1px solid #e5e7eb; +} +.side h1 { font-size: 18px; margin: 0 0 4px 0; } +.side h2 { + font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em; + color: #6b7280; margin: 16px 0 6px 0; +} + +.card { + background: #ffffff; border: 1px solid #e5e7eb; border-radius: 6px; padding: 8px 10px; +} + +.kv { display: grid; grid-template-columns: auto 1fr; gap: 4px 10px; } +.kv dt { color: #6b7280; } +.kv dd { margin: 0; font-weight: 600; word-break: break-word; } + +.status { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: #6b7280; } +.dot { width: 9px; height: 9px; border-radius: 50%; background: #dc2626; } +.dot.ok { background: #16a34a; } + +.btn { + border: 1px solid #d1d5db; background: #ffffff; color: #1f2937; + border-radius: 5px; padding: 5px 10px; cursor: pointer; font-size: 13px; +} +.btn:hover:not(:disabled) { background: #f3f4f6; } +.btn:disabled { opacity: 0.5; cursor: not-allowed; } +.btn.danger { background: #dc2626; border-color: #b91c1c; color: #ffffff; width: 100%; margin-top: 8px; } +.btn.danger:hover:not(:disabled) { background: #b91c1c; } + +.badge { + display: inline-block; padding: 1px 7px; border-radius: 10px; font-size: 12px; + background: #e5e7eb; color: #374151; font-weight: 600; +} +.badge.active { background: #fed7aa; color: #9a3412; } + +.route { font-size: 12px; color: #374151; word-break: break-word; margin-top: 6px; } +.notice { margin-top: 8px; font-size: 12px; color: #374151; } +.notice.error { color: #b91c1c; } + +.modal-backdrop { + position: fixed; inset: 0; z-index: 50; background: rgba(17, 24, 39, 0.5); + display: flex; align-items: center; justify-content: center; +} +.modal { + background: #ffffff; border-radius: 8px; padding: 16px 20px; max-width: 360px; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3); +} +.modal p { margin: 0 0 14px 0; } +.modal-actions { display: flex; justify-content: flex-end; gap: 8px; } +.modal-actions .btn { width: auto; margin-top: 0; } + +.legend { list-style: none; padding: 0; margin: 0; font-size: 12px; } +.legend li { display: flex; align-items: center; gap: 8px; margin: 3px 0; } +.swatch { width: 14px; height: 14px; border-radius: 50%; display: inline-block; } +.swatch.ring { background: #ffffff; border: 3px solid; } +.swatch.line { border-radius: 2px; height: 4px; } + +@media (max-width: 760px) { + .app { flex-direction: column; } + .map-pane { flex: 1 1 60%; } + .side { width: 100%; flex: 1 1 40%; border-left: none; border-top: 1px solid #e5e7eb; } +} diff --git a/topological_utils/LICENSE b/topological_navigation_visual/topological_navigation_visual/web/vendor/THIRD_PARTY_LICENSES.txt similarity index 73% rename from topological_utils/LICENSE rename to topological_navigation_visual/topological_navigation_visual/web/vendor/THIRD_PARTY_LICENSES.txt index 261eeb9e..939c186a 100644 --- a/topological_utils/LICENSE +++ b/topological_navigation_visual/topological_navigation_visual/web/vendor/THIRD_PARTY_LICENSES.txt @@ -1,3 +1,82 @@ +Third-party libraries vendored for offline use by the topological navigation web app. +All are distributed under the MIT License; full license texts follow. + +================================================================ +react-18.3.1 +================================================================ +MIT License + +Copyright (c) Facebook, Inc. and its affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +================================================================ +react-dom-18.3.1 +================================================================ +MIT License + +Copyright (c) Facebook, Inc. and its affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +================================================================ +cytoscape-3.34.3 +================================================================ +Copyright (c) 2016-2026, The Cytoscape Consortium. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the “Software”), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +================================================================ +htm-3.1.1 +================================================================ + Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ @@ -186,7 +265,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2018 Google Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -198,4 +277,4 @@ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and - limitations under the License. + limitations under the License. \ No newline at end of file diff --git a/topological_navigation_visual/topological_navigation_visual/web/vendor/cytoscape.min.js b/topological_navigation_visual/topological_navigation_visual/web/vendor/cytoscape.min.js new file mode 100644 index 00000000..bab26b76 --- /dev/null +++ b/topological_navigation_visual/topological_navigation_visual/web/vendor/cytoscape.min.js @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2016-2026, The Cytoscape Consortium. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the “Software”), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).cytoscape=t()}(this,(function(){"use strict";function e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,i=e},f:function(){try{o||null==n.return||n.return()}finally{if(s)throw i}}}}function a(e,t,n){return(t=s(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,s=[],l=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(e){u=!0,a=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(u)throw a}}return s}}(e,t)||u(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(t){return function(t){if(Array.isArray(t))return e(t)}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||u(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t);if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e,"string");return"symbol"==typeof t?t:t+""}function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function u(t,n){if(t){if("string"==typeof t)return e(t,n);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?e(t,n):void 0}}var c="undefined"==typeof window?null:window,d=c?c.navigator:null;c&&c.document;var h,f,p,g,v,y,m,b,x,w,E,k,T,C,P,S,B,D,_,A,M,R,I,N,L,z,O,V,F=l(""),X=l({}),j=l((function(){})),Y="undefined"==typeof HTMLElement?"undefined":l(HTMLElement),q=function(e){return e&&e.instanceString&&U(e.instanceString)?e.instanceString():null},W=function(e){return null!=e&&l(e)==F},U=function(e){return null!=e&&l(e)===j},H=function(e){return!Q(e)&&(Array.isArray?Array.isArray(e):null!=e&&e instanceof Array)},K=function(e){return null!=e&&l(e)===X&&!H(e)&&e.constructor===Object},G=function(e){return null!=e&&l(e)===l(1)&&!isNaN(e)},Z=function(e){return G(e)&&Math.floor(e)===e},$=function(e){return"undefined"===Y?void 0:null!=e&&e instanceof HTMLElement},Q=function(e){return J(e)||ee(e)},J=function(e){return"collection"===q(e)&&e._private.single},ee=function(e){return"collection"===q(e)&&!e._private.single},te=function(e){return"core"===q(e)},ne=function(e){return"stylesheet"===q(e)},re=function(e){return null==e||!(""!==e&&!e.match(/^\s+$/))},ae=function(e){return function(e){return null!=e&&l(e)===X}(e)&&U(e.then)},ie=function(e,t){t||(t=function(){if(1===arguments.length)return arguments[0];if(0===arguments.length)return"undefined";for(var e=[],t=0;tt?1:0},ye=null!=Object.assign?Object.assign.bind(Object):function(e){for(var t=arguments,n=1;n255)return;t.push(Math.floor(i))}var o=r[1]||r[2]||r[3],s=r[1]&&r[2]&&r[3];if(o&&!s)return;var l=n[4];if(void 0!==l){if((l=parseFloat(l))<0||l>1)return;t.push(l)}}return t}(e)||function(e){var t,n,r,a,i,o,s,l;function u(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var c=new RegExp("^"+pe+"$").exec(e);if(c){if((n=parseInt(c[1]))<0?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,(r=parseFloat(c[2]))<0||r>100)return;if(r/=100,(a=parseFloat(c[3]))<0||a>100)return;if(a/=100,void 0!==(i=c[4])&&((i=parseFloat(i))<0||i>1))return;if(0===r)o=s=l=Math.round(255*a);else{var d=a<.5?a*(1+r):a+r-a*r,h=2*a-d;o=Math.round(255*u(h,d,n+1/3)),s=Math.round(255*u(h,d,n)),l=Math.round(255*u(h,d,n-1/3))}t=[o,s,l,i]}return t}(e)},be={transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},xe=function(e){for(var t=e.map,n=e.keys,r=n.length,a=0;a=o||t<0||v&&e-p>=c}function x(){var e=t();if(b(e))return w(e);h=setTimeout(x,function(e){var t=o-(e-f);return v?a(t,c-(e-p)):t}(e))}function w(e){return h=void 0,y&&l?m(e):(l=u=void 0,d)}function E(){var e=t(),n=b(e);if(l=arguments,u=this,f=e,n){if(void 0===h)return function(e){return p=e,h=setTimeout(x,o),g?m(e):d}(f);if(v)return clearTimeout(h),h=setTimeout(x,o),m(f)}return void 0===h&&(h=setTimeout(x,o)),d}return o=n(o)||0,e(s)&&(g=!!s.leading,c=(v="maxWait"in s)?r(n(s.maxWait)||0,o):c,y="trailing"in s?!!s.trailing:y),E.cancel=function(){void 0!==h&&clearTimeout(h),p=0,l=f=u=h=void 0},E.flush=function(){return void 0===h?d:w(t())},E},O}(),Ae=ke(_e),Me=c?c.performance:null,Re=Me&&Me.now?function(){return Me.now()}:function(){return Date.now()},Ie=function(){if(c){if(c.requestAnimationFrame)return function(e){c.requestAnimationFrame(e)};if(c.mozRequestAnimationFrame)return function(e){c.mozRequestAnimationFrame(e)};if(c.webkitRequestAnimationFrame)return function(e){c.webkitRequestAnimationFrame(e)};if(c.msRequestAnimationFrame)return function(e){c.msRequestAnimationFrame(e)}}return function(e){e&&setTimeout((function(){e(Re())}),1e3/60)}}(),Ne=function(e){return Ie(e)},Le=Re,ze=9261,Oe=5381,Ve=function(e){for(var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ze;!(t=e.next()).done;)n=65599*n+t.value|0;return n},Fe=function(e){return 65599*(arguments.length>1&&void 0!==arguments[1]?arguments[1]:ze)+e|0},Xe=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Oe;return(t<<5)+t+e|0},je=function(e){return 2097152*e[0]+e[1]},Ye=function(e,t){return[Fe(e[0],t[0]),Xe(e[1],t[1])]},qe=function(e,t){var n={value:0,done:!1},r=0,a=e.length;return Ve({next:function(){return r=0;r--)e[r]===t&&e.splice(r,1)},ht=function(e){e.splice(0,e.length)},ft=function(e,t,n){return n&&(t=le(n,t)),e[t]},pt=function(e,t,n,r){n&&(t=le(n,t)),e[t]=r},gt="undefined"!=typeof Map?Map:function(){return n((function e(){t(this,e),this._obj={}}),[{key:"set",value:function(e,t){return this._obj[e]=t,this}},{key:"delete",value:function(e){return this._obj[e]=void 0,this}},{key:"clear",value:function(){this._obj={}}},{key:"has",value:function(e){return void 0!==this._obj[e]}},{key:"get",value:function(e){return this._obj[e]}}])}(),vt=function(){return n((function e(n){if(t(this,e),this._obj=Object.create(null),this.size=0,null!=n){var r;r=null!=n.instanceString&&n.instanceString()===this.instanceString()?n.toArray():n;for(var a=0;a2&&void 0!==arguments[2])||arguments[2];if(void 0!==e&&void 0!==t&&te(e)){var r=t.group;if(null==r&&(r=t.data&&null!=t.data.source&&null!=t.data.target?"edges":"nodes"),"nodes"===r||"edges"===r){this.length=1,this[0]=this;var a=this._private={cy:e,single:!0,data:t.data||{},position:t.position||{x:0,y:0},autoWidth:void 0,autoHeight:void 0,autoPadding:void 0,compoundBoundsClean:!1,listeners:[],group:r,style:{},rstyle:{},styleCxts:[],styleKeys:{},removed:!0,selected:!!t.selected,selectable:void 0===t.selectable||!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:void 0===t.grabbable||!!t.grabbable,pannable:void 0===t.pannable?"edges"===r:!!t.pannable,active:!1,classes:new yt,animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],parent:t.parent&&t.parent.isNode()?t.parent:null,traversalCache:{},backgrounding:!1,bbCache:null,bbCacheShift:{x:0,y:0},bodyBounds:null,overlayBounds:null,labelBounds:{all:null,source:null,target:null,main:null},arrowBounds:{source:null,target:null,"mid-source":null,"mid-target":null}};if(null==a.position.x&&(a.position.x=0),null==a.position.y&&(a.position.y=0),t.renderedPosition){var i=t.renderedPosition,o=e.pan(),s=e.zoom();a.position={x:(i.x-o.x)/s,y:(i.y-o.y)/s}}var l=[];H(t.classes)?l=t.classes:W(t.classes)&&(l=t.classes.split(/\s+/));for(var u=0,c=l.length;ut?1:0},u=function(e,t,a,i,o){var s;if(null==a&&(a=0),null==o&&(o=n),a<0)throw new Error("lo must be non-negative");for(null==i&&(i=e.length);an;0<=n?t++:t--)u.push(t);return u}.apply(this).reverse()).length;ig;0<=g?++h:--h)v.push(i(e,r));return v},p=function(e,t,r,a){var i,o,s;for(null==a&&(a=n),i=e[r];r>t&&a(i,o=e[s=r-1>>1])<0;)e[r]=o,r=s;return e[r]=i},g=function(e,t,r){var a,i,o,s,l;for(null==r&&(r=n),i=e.length,l=t,o=e[t],a=2*t+1;a0;){var w=y.pop(),E=g(w),k=w.id();if(d[k]=E,E!==1/0)for(var T=w.neighborhood().intersect(f),C=0;C0)for(n.unshift(t);c[a];){var i=c[a];n.unshift(i.edge),n.unshift(i.node),a=(r=i.node).id()}return o.spawn(n)}}}},At={kruskal:function(e){e=e||function(e){return 1};for(var t=this.byGroup(),n=t.nodes,r=t.edges,a=n.length,i=new Array(a),o=n,s=function(e){for(var t=0;t0;){if(l=g.pop(),u=l.id(),v.delete(u),w++,u===d){for(var E=[],k=a,T=d,C=m[T];E.unshift(k),null!=C&&E.unshift(C),null!=(k=y[T]);)C=m[T=k.id()];return{found:!0,distance:h[u],path:this.spawn(E),steps:w}}p[u]=!0;for(var P=l._private.edges,S=0;SP&&(f[C]=P,y[C]=T,m[C]=x),!a){var S=T*u+k;!a&&f[S]>P&&(f[S]=P,y[S]=k,m[S]=x)}}}for(var B=0;B1&&void 0!==arguments[1]?arguments[1]:i,r=[],a=m(e);;){if(null==a)return t.spawn();var o=y(a),l=o.edge,u=o.pred;if(r.unshift(a[0]),a.same(n)&&r.length>0)break;null!=l&&r.unshift(l),a=u}return s.spawn(r)},hasNegativeWeightCycle:p,negativeWeightCycles:g}}},Ot=Math.sqrt(2),Vt=function(e,t,n){0===n.length&&rt("Karger-Stein must be run on a connected (sub)graph");for(var r=n[e],a=r[1],i=r[2],o=t[a],s=t[i],l=n,u=l.length-1;u>=0;u--){var c=l[u],d=c[1],h=c[2];(t[d]===o&&t[h]===s||t[d]===s&&t[h]===o)&&l.splice(u,1)}for(var f=0;fr;){var a=Math.floor(Math.random()*t.length);t=Vt(a,e,t),n--}return t},Xt={kargerStein:function(){var e=this,t=this.byGroup(),n=t.nodes,r=t.edges;r.unmergeBy((function(e){return e.isLoop()}));var a=n.length,i=r.length,o=Math.ceil(Math.pow(Math.log(a)/Math.LN2,2)),s=Math.floor(a/Ot);if(!(a<2)){for(var l=[],u=0;u0?1:e<0?-1:0},Gt=function(e,t){return Math.sqrt(Zt(e,t))},Zt=function(e,t){var n=t.x-e.x,r=t.y-e.y;return n*n+r*r},$t=function(e){for(var t=e.length,n=0,r=0;r=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},nn=function(e,t,n){e.x1=Math.min(e.x1,t),e.x2=Math.max(e.x2,t),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,n),e.y2=Math.max(e.y2,n),e.h=e.y2-e.y1},rn=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},an=function(e){var t,n,r,a,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0];if(1===o.length)t=n=r=a=o[0];else if(2===o.length)t=r=o[0],a=n=o[1];else if(4===o.length){var s=i(o,4);t=s[0],n=s[1],r=s[2],a=s[3]}return e.x1-=a,e.x2+=n,e.y1-=t,e.y2+=r,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},on=function(e,t){e.x1=t.x1,e.y1=t.y1,e.x2=t.x2,e.y2=t.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1},sn=function(e,t){return!(e.x1>t.x2)&&(!(t.x1>e.x2)&&(!(e.x2t.y2)&&!(t.y1>e.y2)))))))},ln=function(e,t,n){return e.x1<=t&&t<=e.x2&&e.y1<=n&&n<=e.y2},un=function(e,t){return ln(e,t.x,t.y)},cn=function(e,t){return ln(e,t.x1,t.y1)&&ln(e,t.x2,t.y2)},dn=null!==(St=Math.hypot)&&void 0!==St?St:function(e,t){return Math.sqrt(e*e+t*t)};function hn(e,t,n,r,a,i){var o=function(e,t){if(e.length<3)throw new Error("Need at least 3 vertices");var n=function(e,t){return{x:e.x+t.x,y:e.y+t.y}},r=function(e,t){return{x:e.x-t.x,y:e.y-t.y}},a=function(e,t){return{x:e.x*t,y:e.y*t}},i=function(e,t){return e.x*t.y-e.y*t.x},o=function(e,t,o,s){var l=r(t,e),u=r(s,o),c=i(l,u);if(Math.abs(c)<1e-9)return n(e,a(l,.5));var d=i(r(o,e),u)/c;return n(e,a(l,d))},s=e.map((function(e){return{x:e.x,y:e.y}}));(function(e){for(var t=0,n=0;n7&&void 0!==arguments[7]?arguments[7]:"auto",c="auto"===u?Mn(a,i):u,d=a/2,h=i/2,f=(c=Math.min(c,d,h))!==d,p=c!==h;if(f){var g=r-h-o;if((s=Cn(e,t,n,r,n-d+c-o,g,n+d-c+o,g,!1)).length>0)return s}if(p){var v=n+d+o;if((s=Cn(e,t,n,r,v,r-h+c-o,v,r+h-c+o,!1)).length>0)return s}if(f){var y=r+h+o;if((s=Cn(e,t,n,r,n-d+c-o,y,n+d-c+o,y,!1)).length>0)return s}if(p){var m=n-d-o;if((s=Cn(e,t,n,r,m,r-h+c-o,m,r+h-c+o,!1)).length>0)return s}var b=n-d+c,x=r-h+c;if((l=kn(e,t,n,r,b,x,c+o)).length>0&&l[0]<=b&&l[1]<=x)return[l[0],l[1]];var w=n+d-c,E=r-h+c;if((l=kn(e,t,n,r,w,E,c+o)).length>0&&l[0]>=w&&l[1]<=E)return[l[0],l[1]];var k=n+d-c,T=r+h-c;if((l=kn(e,t,n,r,k,T,c+o)).length>0&&l[0]>=k&&l[1]>=T)return[l[0],l[1]];var C=n-d+c,P=r+h-c;return(l=kn(e,t,n,r,C,P,c+o)).length>0&&l[0]<=C&&l[1]>=P?[l[0],l[1]]:[]},pn=function(e,t,n,r,a,i,o){var s=o,l=Math.min(n,a),u=Math.max(n,a),c=Math.min(r,i),d=Math.max(r,i);return l-s<=e&&e<=u+s&&c-s<=t&&t<=d+s},gn=function(e,t,n,r,a,i,o,s,l){var u=Math.min(n,o,a)-l,c=Math.max(n,o,a)+l,d=Math.min(r,s,i)-l,h=Math.max(r,s,i)+l;return!(ec||th)},vn=function(e,t,n,r,a,i,o,s){var l=[];!function(e,t,n,r,a){var i,o,s,l,u,c,d,h;0===e&&(e=1e-5),s=-27*(r/=e)+(t/=e)*(9*(n/=e)-t*t*2),i=(o=(3*n-t*t)/9)*o*o+(s/=54)*s,a[1]=0,d=t/3,i>0?(u=(u=s+Math.sqrt(i))<0?-Math.pow(-u,1/3):Math.pow(u,1/3),c=(c=s-Math.sqrt(i))<0?-Math.pow(-c,1/3):Math.pow(c,1/3),a[0]=-d+u+c,d+=(u+c)/2,a[4]=a[2]=-d,d=Math.sqrt(3)*(-c+u)/2,a[3]=d,a[5]=-d):(a[5]=a[3]=0,0===i?(h=s<0?-Math.pow(-s,1/3):Math.pow(s,1/3),a[0]=2*h-d,a[4]=a[2]=-(h+d)):(l=(o=-o)*o*o,l=Math.acos(s/Math.sqrt(l)),h=2*Math.sqrt(o),a[0]=-d+h*Math.cos(l/3),a[2]=-d+h*Math.cos((l+2*Math.PI)/3),a[4]=-d+h*Math.cos((l+4*Math.PI)/3)))}(1*n*n-4*n*a+2*n*o+4*a*a-4*a*o+o*o+r*r-4*r*i+2*r*s+4*i*i-4*i*s+s*s,9*n*a-3*n*n-3*n*o-6*a*a+3*a*o+9*r*i-3*r*r-3*r*s-6*i*i+3*i*s,3*n*n-6*n*a+n*o-n*e+2*a*a+2*a*e-o*e+3*r*r-6*r*i+r*s-r*t+2*i*i+2*i*t-s*t,1*n*a-n*n+n*e-a*e+r*i-r*r+r*t-i*t,l);for(var u=[],c=0;c<6;c+=2)Math.abs(l[c+1])<1e-7&&l[c]>=0&&l[c]<=1&&u.push(l[c]);u.push(1),u.push(0);for(var d,h,f,p=-1,g=0;g=0?fl?(e-a)*(e-a)+(t-i)*(t-i):u-d},mn=function(e,t,n){for(var r,a,i,o,s=0,l=0;l=e&&e>=i||r<=e&&e<=i))continue;(e-r)/(i-r)*(o-a)+a>t&&s++}return s%2!=0},bn=function(e,t,n,r,a,i,o,s,l){var u,c=new Array(n.length);null!=s[0]?(u=Math.atan(s[1]/s[0]),s[0]<0?u+=Math.PI/2:u=-u-Math.PI/2):u=s;for(var d,h=Math.cos(-u),f=Math.sin(-u),p=0;p0){var g=wn(c,-l);d=xn(g)}else d=c;return mn(e,t,d)},xn=function(e){for(var t,n,r,a,i,o,s,l,u=new Array(e.length/2),c=0;c=0&&p<=1&&v.push(p),g>=0&&g<=1&&v.push(g),0===v.length)return[];var y=v[0]*s[0]+e,m=v[0]*s[1]+t;return v.length>1?v[0]==v[1]?[y,m]:[y,m,v[1]*s[0]+e,v[1]*s[1]+t]:[y,m]},Tn=function(e,t,n){return t<=e&&e<=n||n<=e&&e<=t?e:e<=t&&t<=n||n<=t&&t<=e?t:n},Cn=function(e,t,n,r,a,i,o,s,l){var u=e-a,c=n-e,d=o-a,h=t-i,f=r-t,p=s-i,g=d*h-p*u,v=c*h-f*u,y=p*c-d*f;if(0!==y){var m=g/y,b=v/y,x=-.001;return x<=m&&m<=1.001&&x<=b&&b<=1.001||l?[e+m*c,t+m*f]:[]}return 0===g||0===v?Tn(e,n,o)===o?[o,s]:Tn(e,n,a)===a?[a,i]:Tn(a,o,n)===n?[n,r]:[]:[]},Pn=function(e,t,n,r,a){var i=[],o=r/2,s=a/2,l=t,u=n;i.push({x:l+o*e[0],y:u+s*e[1]});for(var c=1;c0){var m=wn(g,-s);u=xn(m)}else u=g}else u=n;for(var b=0;bu&&(u=t)},d=function(e){return l[e]},h=0;h0?b.edgesTo(m)[0]:m.edgesTo(b)[0];var w=r(x);m=m.id(),u[m]>u[g]+w&&(u[m]=u[g]+w,h.nodes.indexOf(m)<0?h.push(m):h.updateItem(m),l[m]=0,n[m]=[]),u[m]==u[g]+w&&(l[m]=l[m]+l[g],n[m].push(g))}else for(var E=0;E0;){for(var P=t.pop(),S=0;S0&&o.push(n[s]);0!==o.length&&a.push(r.collection(o))}return a}(c,l,t,r);return b=function(e){for(var t=0;t5&&void 0!==arguments[5]?arguments[5]:er,o=r,s=0;s=2?or(e,t,n,0,rr,ar):or(e,t,n,0,nr)},squaredEuclidean:function(e,t,n){return or(e,t,n,0,rr)},manhattan:function(e,t,n){return or(e,t,n,0,nr)},max:function(e,t,n){return or(e,t,n,-1/0,ir)}};function lr(e,t,n,r,a,i){var o;return o=U(e)?e:sr[e]||sr.euclidean,0===t&&U(e)?o(a,i):o(t,n,r,a,i)}sr["squared-euclidean"]=sr.squaredEuclidean,sr.squaredeuclidean=sr.squaredEuclidean;var ur=ct({k:2,m:2,sensitivityThreshold:1e-4,distance:"euclidean",maxIterations:10,attributes:[],testMode:!1,testCentroids:null}),cr=function(e){return ur(e)},dr=function(e,t,n,r,a){var i="kMedoids"!==a?function(e){return n[e]}:function(e){return r[e](n)},o=n,s=t;return lr(e,r.length,i,(function(e){return r[e](t)}),o,s)},hr=function(e,t,n){for(var r=n.length,a=new Array(r),i=new Array(r),o=new Array(t),s=null,l=0;ln)return!1}return!0},yr=function(e,t,n){for(var r=0;ra&&(a=t[l][u],i=u);o[i].push(e[l])}for(var c=0;c=a.threshold||"dendrogram"===a.mode&&1===e.length)return!1;var f,p=t[o],g=t[r[o]];f="dendrogram"===a.mode?{left:p,right:g,key:p.key}:{value:p.value.concat(g.value),key:p.key},e[p.index]=f,e.splice(g.index,1),t[p.key]=f;for(var v=0;vn[g.key][y.key]&&(i=n[g.key][y.key])):"max"===a.linkage?(i=n[p.key][y.key],n[p.key][y.key]1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=!(arguments.length>5&&void 0!==arguments[5])||arguments[5];arguments.length>3&&void 0!==arguments[3]&&!arguments[3]?(n0&&e.splice(0,t)):e=e.slice(t,n);for(var i=0,o=e.length-1;o>=0;o--){var s=e[o];a?isFinite(s)||(e[o]=-1/0,i++):e.splice(o,1)}r&&e.sort((function(e,t){return e-t}));var l=e.length,u=Math.floor(l/2);return l%2!=0?e[u+1+i]:(e[u-1+i]+e[u+i])/2}(e):"mean"===t?function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=0,a=0,i=t;i1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=1/0,a=t;a1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length,r=-1/0,a=t;ao&&(i=l,o=t[a*e+l])}i>0&&r.push(i)}for(var u=0;u=P?(S=P,P=D,B=_):D>S&&(S=D);for(var A=0;A0?1:0;k[E%u.minIterations*t+z]=O,L+=O}if(L>0&&(E>=u.minIterations-1||E==u.maxIterations-1)){for(var V=0,F=0;F0&&r.push(a);return r}(t,i,o),Y=function(e,t,n){for(var r=Nr(e,t,n),a=0;al&&(s=u,l=c)}n[a]=i[s]}return Nr(e,t,n)}(t,r,j),q={},W=0;W1||o>1)&&(u=!0),c[t]=[],e.outgoers().forEach((function(e){e.isEdge()&&c[t].push(e.id())}))}else d[t]=[void 0,e.target().id()]})):l.forEach((function(e){var t=e.id();e.isNode()?(e.degree(!0)%2&&(n?r?u=!0:r=t:n=t),c[t]=[],e.connectedEdges().forEach((function(e){return c[t].push(e.id())}))):d[t]=[e.source().id(),e.target().id()]}));var h={found:!1,trail:void 0};if(u)return h;if(r&&n)if(s){if(a&&r!=a)return h;a=r}else{if(a&&r!=a&&n!=a)return h;a||(a=r)}else a||(a=l[0].id());var f=function(e){for(var t,n,r,a=e,i=[e];c[a].length;)t=c[a].shift(),n=d[t][0],a!=(r=d[t][1])?(c[r]=c[r].filter((function(e){return e!=t})),a=r):s||a==n||(c[n]=c[n].filter((function(e){return e!=t})),a=n),i.unshift(t),i.unshift(a);return i},p=[],g=[];for(g=f(a);1!=g.length;)0==c[g[0]].length?(p.unshift(l.getElementById(g.shift())),p.unshift(l.getElementById(g.shift()))):g=f(g.shift()).concat(g);for(var v in p.unshift(l.getElementById(g.shift())),c)if(c[v].length)return h;return h.found=!0,h.trail=this.spawn(p,!0),h}},Fr=function(){var e=this,t={},n=0,r=0,a=[],i=[],o={},s=function(l,u,c){l===c&&(r+=1),t[u]={id:n,low:n++,cutVertex:!1};var d,h,f,p,g=e.getElementById(u).connectedEdges().intersection(e);0===g.size()?a.push(e.spawn(e.getElementById(u))):g.forEach((function(n){d=n.source().id(),h=n.target().id(),(f=d===u?h:d)!==c&&(p=n.id(),o[p]||(o[p]=!0,i.push({x:u,y:f,edge:n})),f in t?t[u].low=Math.min(t[u].low,t[f].id):(s(l,f,u),t[u].low=Math.min(t[u].low,t[f].low),t[u].id<=t[f].low&&(t[u].cutVertex=!0,function(n,r){for(var o=i.length-1,s=[],l=e.spawn();i[o].x!=n||i[o].y!=r;)s.push(i.pop().edge),o--;s.push(i.pop().edge),s.forEach((function(n){var r=n.connectedNodes().intersection(e);l.merge(n),r.forEach((function(n){var r=n.id(),a=n.connectedEdges().intersection(e);l.merge(n),t[r].cutVertex?l.merge(a.filter((function(e){return e.isLoop()}))):l.merge(a)}))})),a.push(l)}(u,f))))}))};e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||(r=0,s(n,n),t[n].cutVertex=r>1)}}));var l=Object.keys(t).filter((function(e){return t[e].cutVertex})).map((function(t){return e.getElementById(t)}));return{cut:e.spawn(l),components:a}},Xr=function(){var e=this,t={},n=0,r=[],a=[],i=e.spawn(e),o=function(s){if(a.push(s),t[s]={index:n,low:n++,explored:!1},e.getElementById(s).connectedEdges().intersection(e).forEach((function(e){var n=e.target().id();n!==s&&(n in t||o(n),t[n].explored||(t[s].low=Math.min(t[s].low,t[n].low)))})),t[s].index===t[s].low){for(var l=e.spawn();;){var u=a.pop();if(l.merge(e.getElementById(u)),t[u].low=t[s].index,t[u].explored=!0,u===s)break}var c=l.edgesWith(l),d=l.merge(c);r.push(d),i=i.difference(d)}};return e.forEach((function(e){if(e.isNode()){var n=e.id();n in t||o(n)}})),{cut:i,components:r}},jr={};[xt,_t,At,Rt,Nt,zt,Xt,zn,Vn,Xn,Yn,Jn,kr,Ar,zr,Vr,{hopcroftTarjanBiconnected:Fr,htbc:Fr,htb:Fr,hopcroftTarjanBiconnectedComponents:Fr},{tarjanStronglyConnected:Xr,tsc:Xr,tscc:Xr,tarjanStronglyConnectedComponents:Xr}].forEach((function(e){ye(jr,e)})); +/*! + Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable + Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com) + Licensed under The MIT License (http://opensource.org/licenses/MIT) + */ +var Yr=function(e){if(!(this instanceof Yr))return new Yr(e);this.id="Thenable/1.0.7",this.state=0,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},"function"==typeof e&&e.call(this,this.fulfill.bind(this),this.reject.bind(this))};Yr.prototype={fulfill:function(e){return qr(this,1,"fulfillValue",e)},reject:function(e){return qr(this,2,"rejectReason",e)},then:function(e,t){var n=this,r=new Yr;return n.onFulfilled.push(Hr(e,r,"fulfill")),n.onRejected.push(Hr(t,r,"reject")),Wr(n),r.proxy}};var qr=function(e,t,n,r){return 0===e.state&&(e.state=t,e[n]=r,Wr(e)),e},Wr=function(e){1===e.state?Ur(e,"onFulfilled",e.fulfillValue):2===e.state&&Ur(e,"onRejected",e.rejectReason)},Ur=function(e,t,n){if(0!==e[t].length){var r=e[t];e[t]=[];var a=function(){for(var e=0;e0:void 0}},clearQueue:function(){return function(){var e=this,t=void 0!==e.length?e:[e];if(!(this._private.cy||this).styleEnabled())return this;for(var n=0;n-1}}(),a=function(){if(Ya)return ja;Ya=1;var e=Oi();return ja=function(t,n){var r=this.__data__,a=e(r,t);return a<0?(++this.size,r.push([t,n])):r[a][1]=n,this},ja}();function i(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&t%1==0&&t0&&this.spawn(r).updateStyle().emit("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return null!=t&&t._private.classes.has(e)},toggleClass:function(e,t){H(e)||(e=e.match(/\S+/g)||[]);for(var n=this,r=void 0===t,a=[],i=0,o=n.length;i0&&this.spawn(a).updateStyle().emit("class"),n},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var n=this;if(null==t)t=250;else if(0===t)return n;return n.addClass(e),setTimeout((function(){n.removeClass(e)}),t),n}};To.className=To.classNames=To.classes;var Co={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:"\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'",number:de,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$",group:"node|edge|\\*",directedEdge:"\\s+->\\s+",undirectedEdge:"\\s+<->\\s+"};Co.variable="(?:[\\w-.]|(?:\\\\"+Co.metaChar+"))+",Co.className="(?:[\\w-]|(?:\\\\"+Co.metaChar+"))+",Co.value=Co.string+"|"+Co.number,Co.id=Co.variable,function(){var e,t,n;for(e=Co.comparatorOp.split("|"),n=0;n=0||"="!==t&&(Co.comparatorOp+="|\\!"+t)}();var Po=0,So=1,Bo=2,Do=3,_o=4,Ao=5,Mo=6,Ro=7,Io=8,No=9,Lo=10,zo=11,Oo=12,Vo=13,Fo=14,Xo=15,jo=16,Yo=17,qo=18,Wo=19,Uo=20,Ho=[{selector:":selected",matches:function(e){return e.selected()}},{selector:":unselected",matches:function(e){return!e.selected()}},{selector:":selectable",matches:function(e){return e.selectable()}},{selector:":unselectable",matches:function(e){return!e.selectable()}},{selector:":locked",matches:function(e){return e.locked()}},{selector:":unlocked",matches:function(e){return!e.locked()}},{selector:":visible",matches:function(e){return e.visible()}},{selector:":hidden",matches:function(e){return!e.visible()}},{selector:":transparent",matches:function(e){return e.transparent()}},{selector:":grabbed",matches:function(e){return e.grabbed()}},{selector:":free",matches:function(e){return!e.grabbed()}},{selector:":removed",matches:function(e){return e.removed()}},{selector:":inside",matches:function(e){return!e.removed()}},{selector:":grabbable",matches:function(e){return e.grabbable()}},{selector:":ungrabbable",matches:function(e){return!e.grabbable()}},{selector:":animated",matches:function(e){return e.animated()}},{selector:":unanimated",matches:function(e){return!e.animated()}},{selector:":parent",matches:function(e){return e.isParent()}},{selector:":childless",matches:function(e){return e.isChildless()}},{selector:":child",matches:function(e){return e.isChild()}},{selector:":orphan",matches:function(e){return e.isOrphan()}},{selector:":nonorphan",matches:function(e){return e.isChild()}},{selector:":compound",matches:function(e){return e.isNode()?e.isParent():e.source().isParent()||e.target().isParent()}},{selector:":loop",matches:function(e){return e.isLoop()}},{selector:":simple",matches:function(e){return e.isSimple()}},{selector:":active",matches:function(e){return e.active()}},{selector:":inactive",matches:function(e){return!e.active()}},{selector:":backgrounding",matches:function(e){return e.backgrounding()}},{selector:":nonbackgrounding",matches:function(e){return!e.backgrounding()}}].sort((function(e,t){return function(e,t){return-1*ve(e,t)}(e.selector,t.selector)})),Ko=function(){for(var e,t={},n=0;n0&&u.edgeCount>0)return it("The selector `"+e+"` is invalid because it uses both a compound selector and an edge selector"),!1;if(u.edgeCount>1)return it("The selector `"+e+"` is invalid because it uses multiple edge selectors"),!1;1===u.edgeCount&&it("The selector `"+e+"` is deprecated. Edge selectors do not take effect on changes to source and target nodes after an edge is added, for performance reasons. Use a class or data selector on edges instead, updating the class or data of an edge when your app detects a change in source or target nodes.")}return!0},toString:function(){if(null!=this.toStringCache)return this.toStringCache;for(var e=function(e){return null==e?"":e},t=function(t){return W(t)?'"'+t+'"':e(t)},n=function(e){return" "+e+" "},r=function(r,i){var o=r.type,s=r.value;switch(o){case Po:var l=e(s);return l.substring(0,l.length-1);case Do:var u=r.field,c=r.operator;return"["+u+n(e(c))+t(s)+"]";case Ao:var d=r.operator,h=r.field;return"["+e(d)+h+"]";case _o:return"["+r.field+"]";case Mo:var f=r.operator;return"[["+r.field+n(e(f))+t(s)+"]]";case Ro:return s;case Io:return"#"+s;case No:return"."+s;case Yo:case Xo:return a(r.parent,i)+n(">")+a(r.child,i);case qo:case jo:return a(r.ancestor,i)+" "+a(r.descendant,i);case Wo:var p=a(r.left,i),g=a(r.subject,i),v=a(r.right,i);return p+(p.length>0?" ":"")+g+v;case Uo:return""}},a=function(e,t){return e.checks.reduce((function(n,a,i){return n+(t===e&&0===i?"$":"")+r(a,t)}),"")},i="",o=0;o1&&o=0&&(t=t.replace("!",""),c=!0),t.indexOf("@")>=0&&(t=t.replace("@",""),u=!0),(o||l||u)&&(a=o||s?""+e:"",i=""+n),u&&(e=a=a.toLowerCase(),n=i=i.toLowerCase()),t){case"*=":r=a.indexOf(i)>=0;break;case"$=":r=a.indexOf(i,a.length-i.length)>=0;break;case"^=":r=0===a.indexOf(i);break;case"=":r=e===n;break;case">":d=!0,r=e>n;break;case">=":d=!0,r=e>=n;break;case"<":d=!0,r=e0;){var u=a.shift();t(u),i.add(u.id()),o&&r(a,i,u)}return e}function ps(e,t,n){if(n.isParent())for(var r=n._private.children,a=0;a1&&void 0!==arguments[1])||arguments[1],ps)},hs.forEachUp=function(e){return fs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],gs)},hs.forEachUpAndDown=function(e){return fs(this,e,!(arguments.length>1&&void 0!==arguments[1])||arguments[1],vs)},hs.ancestors=hs.parents,(us=cs={data:Eo.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:Eo.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:Eo.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Eo.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:Eo.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:Eo.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];if(e)return e._private.data.id}}).attr=us.data,us.removeAttr=us.removeData;var ys,ms,bs=cs,xs={};function ws(e){return function(t){var n=this;if(void 0===t&&(t=!0),0!==n.length&&n.isNode()&&!n.removed()){for(var r=0,a=n[0],i=a._private.edges,o=0;ot})),minIndegree:Es("indegree",(function(e,t){return et})),minOutdegree:Es("outdegree",(function(e,t){return et}))}),ye(xs,{totalDegree:function(e){for(var t=0,n=this.nodes(),r=0;r0,c=u;u&&(l=l[0]);var d=c?l.position():{x:0,y:0};return a={x:s.x-d.x,y:s.y-d.y},void 0===e?a:a[e]}for(var h=0;h0,v=g;g&&(p=p[0]);var y=v?p.position():{x:0,y:0};void 0!==t?f.position(e,t+y[e]):void 0!==a&&f.position({x:a.x+y.x,y:a.y+y.y})}}else if(!i)return;return this}},ys.modelPosition=ys.point=ys.position,ys.modelPositions=ys.points=ys.positions,ys.renderedPoint=ys.renderedPosition,ys.relativePoint=ys.relativePosition;var Cs,Ps,Ss=ms,Bs=function(e){switch(e){case"left":case"right-inside":return"left";case"right":case"left-inside":return"right";default:return"center"}},Ds=function(e){switch(e){case"top":case"bottom-inside":return"top";case"bottom":case"top-inside":return"bottom";default:return"center"}};Cs=Ps={},Ps.renderedBoundingBox=function(e){var t=this.boundingBox(e),n=this.cy(),r=n.zoom(),a=n.pan(),i=t.x1*r+a.x,o=t.x2*r+a.x,s=t.y1*r+a.y,l=t.y2*r+a.y;return{x1:i,x2:o,y1:s,y2:l,w:o-i,h:l-s}},Ps.dirtyCompoundBoundsCache=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();return t.styleEnabled()&&t.hasCompoundNodes()?(this.forEachUp((function(t){if(t.isParent()){var n=t._private;n.compoundBoundsClean=!1,n.bbCache=null,e||t.emitAndNotify("bounds")}})),this):this},Ps.updateCompoundBounds=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.cy();if(!t.styleEnabled()||!t.hasCompoundNodes())return this;if(!e&&t.batching())return this;function n(e){if(e.isParent()){var t=e._private,n=e.children(),r="include"===e.pstyle("compound-sizing-wrt-labels").value,a={width:{val:e.pstyle("min-width").pfValue,left:e.pstyle("min-width-bias-left"),right:e.pstyle("min-width-bias-right")},height:{val:e.pstyle("min-height").pfValue,top:e.pstyle("min-height-bias-top"),bottom:e.pstyle("min-height-bias-bottom")}},i=n.boundingBox({includeLabels:r,includeOverlays:!1,useCache:!1}),o=t.position;0!==i.w&&0!==i.h||((i={w:e.pstyle("width").pfValue,h:e.pstyle("height").pfValue}).x1=o.x-i.w/2,i.x2=o.x+i.w/2,i.y1=o.y-i.h/2,i.y2=o.y+i.h/2);var s=a.width.left.value;"px"===a.width.left.units&&a.width.val>0&&(s=100*s/a.width.val);var l=a.width.right.value;"px"===a.width.right.units&&a.width.val>0&&(l=100*l/a.width.val);var u=a.height.top.value;"px"===a.height.top.units&&a.height.val>0&&(u=100*u/a.height.val);var c=a.height.bottom.value;"px"===a.height.bottom.units&&a.height.val>0&&(c=100*c/a.height.val);var d=y(a.width.val-i.w,s,l),h=d.biasDiff,f=d.biasComplementDiff,p=y(a.height.val-i.h,u,c),g=p.biasDiff,v=p.biasComplementDiff;t.autoPadding=function(e,t,n,r){if("%"!==n.units)return"px"===n.units?n.pfValue:0;switch(r){case"width":return e>0?n.pfValue*e:0;case"height":return t>0?n.pfValue*t:0;case"average":return e>0&&t>0?n.pfValue*(e+t)/2:0;case"min":return e>0&&t>0?e>t?n.pfValue*t:n.pfValue*e:0;case"max":return e>0&&t>0?e>t?n.pfValue*e:n.pfValue*t:0;default:return 0}}(i.w,i.h,e.pstyle("padding"),e.pstyle("padding-relative-to").value),t.autoWidth=Math.max(i.w,a.width.val),o.x=(-h+i.x1+i.x2+f)/2,t.autoHeight=Math.max(i.h,a.height.val),o.y=(-g+i.y1+i.y2+v)/2}function y(e,t,n){var r=0,a=0,i=t+n;return e>0&&i>0&&(r=t/i*e,a=n/i*e),{biasDiff:r,biasComplementDiff:a}}}for(var r=0;re.x2?r:e.x2,e.y1=ne.y2?a:e.y2,e.w=e.x2-e.x1,e.h=e.y2-e.y1)},Ms=function(e,t){return null==t?e:As(e,t.x1,t.y1,t.x2,t.y2)},Rs=function(e,t,n){return ft(e,t,n)},Is=function(e,t,n){if(!t.cy().headless()){var r,a,i=t._private,o=i.rstyle,s=o.arrowWidth/2;if("none"!==t.pstyle(n+"-arrow-shape").value){"source"===n?(r=o.srcX,a=o.srcY):"target"===n?(r=o.tgtX,a=o.tgtY):(r=o.midX,a=o.midY);var l=i.arrowBounds=i.arrowBounds||{},u=l[n]=l[n]||{};u.x1=r-s,u.y1=a-s,u.x2=r+s,u.y2=a+s,u.w=u.x2-u.x1,u.h=u.y2-u.y1,rn(u,1),As(e,u.x1,u.y1,u.x2,u.y2)}}},Ns=function(e,t,n){if(!t.cy().headless()){var r;r=n?n+"-":"";var a=t._private,i=a.rstyle;if(t.pstyle(r+"label").strValue){var o,s,l,u,c=t.pstyle("text-halign"),d=t.pstyle("text-valign"),h=Rs(i,"labelWidth",n),f=Rs(i,"labelHeight",n),p=Rs(i,"labelX",n),g=Rs(i,"labelY",n),v=t.pstyle(r+"text-margin-x").pfValue,y=t.pstyle(r+"text-margin-y").pfValue,m=t.isEdge(),b=t.pstyle(r+"text-rotation"),x=t.pstyle("text-outline-width").pfValue,w=t.pstyle("text-border-width").pfValue/2,E=t.pstyle("text-background-padding").pfValue,k=f,T=h,C=T/2,P=k/2;if(m)o=p-C,s=p+C,l=g-P,u=g+P;else{switch(Bs(c.value)){case"left":o=p-T,s=p;break;case"center":o=p-C,s=p+C;break;case"right":o=p,s=p+T}switch(Ds(d.value)){case"top":l=g-k,u=g;break;case"center":l=g-P,u=g+P;break;case"bottom":l=g,u=g+k}}var S=v-Math.max(x,w)-E-2,B=v+Math.max(x,w)+E+2,D=y-Math.max(x,w)-E-2,_=y+Math.max(x,w)+E+2;o+=S,s+=B,l+=D,u+=_;var A=n||"main",M=a.labelBounds,R=M[A]=M[A]||{};R.x1=o,R.y1=l,R.x2=s,R.y2=u,R.w=s-o,R.h=u-l,R.leftPad=S,R.rightPad=B,R.topPad=D,R.botPad=_;var I=m&&"autorotate"===b.strValue,N=null!=b.pfValue&&0!==b.pfValue;if(I||N){var L=I?Rs(a.rstyle,"labelAngle",n):b.pfValue,z=Math.cos(L),O=Math.sin(L),V=(o+s)/2,F=(l+u)/2;if(!m){switch(Bs(c.value)){case"left":V=s;break;case"right":V=o}switch(Ds(d.value)){case"top":F=u;break;case"bottom":F=l}}var X=function(e,t){return{x:(e-=V)*z-(t-=F)*O+V,y:e*O+t*z+F}},j=X(o,l),Y=X(o,u),q=X(s,l),W=X(s,u);o=Math.min(j.x,Y.x,q.x,W.x),s=Math.max(j.x,Y.x,q.x,W.x),l=Math.min(j.y,Y.y,q.y,W.y),u=Math.max(j.y,Y.y,q.y,W.y)}var U=A+"Rot",H=M[U]=M[U]||{};H.x1=o,H.y1=l,H.x2=s,H.y2=u,H.w=s-o,H.h=u-l,As(e,o,l,s,u),As(a.labelBounds.all,o,l,s,u)}return e}},Ls=function(e,t){if(!t.cy().headless()){var n=t.pstyle("outline-opacity").value,r=t.pstyle("outline-width").value+t.pstyle("outline-offset").value;zs(e,t,n,r,"outside",r/2)}},zs=function(e,t,n,r,a,i){if(!(0===n||r<=0||"inside"===a)){var o=t.cy().renderer(),s=o.nodeShapes[o.getNodeShape(t)];if(s){var l=t.position(),u=l.x,c=l.y,d=t.width(),h=t.height();if(s.hasMiterBounds){"center"===a&&(r/=2);var f=s.miterBounds(u,c,d,h,r);Ms(e,f)}else null!=i&&i>0&&an(e,[i,i,i,i])}}},Os=function(e,t){var n,r,a,i,o,s,l,u=e._private.cy,c=u.styleEnabled(),d=u.headless(),h=tn(),f=e._private,p=e.isNode(),g=e.isEdge(),v=f.rstyle,y=p&&c?e.pstyle("bounds-expansion").pfValue:[0],m=function(e){return"none"!==e.pstyle("display").value},b=!c||m(e)&&(!g||m(e.source())&&m(e.target()));if(b){var x=0;c&&t.includeOverlays&&0!==e.pstyle("overlay-opacity").value&&(x=e.pstyle("overlay-padding").value);var w=0;c&&t.includeUnderlays&&0!==e.pstyle("underlay-opacity").value&&(w=e.pstyle("underlay-padding").value);var E=Math.max(x,w),k=0;if(c&&(k=e.pstyle("width").pfValue/2),p&&t.includeNodes){var T=e.position();o=T.x,s=T.y;var C=e.outerWidth()/2,P=e.outerHeight()/2;As(h,n=o-C,a=s-P,r=o+C,i=s+P),c&&Ls(h,e),c&&t.includeOutlines&&!d&&Ls(h,e),c&&function(e,t){if(!t.cy().headless()){var n=t.pstyle("border-opacity").value,r=t.pstyle("border-width").pfValue,a=t.pstyle("border-position").value;zs(e,t,n,r,a)}}(h,e)}else if(g&&t.includeEdges)if(c&&!d){var S=e.pstyle("curve-style").strValue;if(n=Math.min(v.srcX,v.midX,v.tgtX),r=Math.max(v.srcX,v.midX,v.tgtX),a=Math.min(v.srcY,v.midY,v.tgtY),i=Math.max(v.srcY,v.midY,v.tgtY),As(h,n-=k,a-=k,r+=k,i+=k),"haystack"===S){var B=v.haystackPts;if(B&&2===B.length){if(n=B[0].x,a=B[0].y,n>(r=B[1].x)){var D=n;n=r,r=D}if(a>(i=B[1].y)){var _=a;a=i,i=_}As(h,n-k,a-k,r+k,i+k)}}else if("bezier"===S||"unbundled-bezier"===S||ce(S,"segments")||ce(S,"taxi")){var A;switch(S){case"bezier":case"unbundled-bezier":A=v.bezierPts;break;case"segments":case"taxi":case"round-segments":case"round-taxi":A=v.linePts}if(null!=A)for(var M=0;M(r=N.x)){var L=n;n=r,r=L}if((a=I.y)>(i=N.y)){var z=a;a=i,i=z}As(h,n-=k,a-=k,r+=k,i+=k)}if(c&&t.includeEdges&&g&&(Is(h,e,"mid-source"),Is(h,e,"mid-target"),Is(h,e,"source"),Is(h,e,"target")),c)if("yes"===e.pstyle("ghost").value){var O=e.pstyle("ghost-offset-x").pfValue,V=e.pstyle("ghost-offset-y").pfValue;As(h,h.x1+O,h.y1+V,h.x2+O,h.y2+V)}var F=f.bodyBounds=f.bodyBounds||{};on(F,h),an(F,y),rn(F,1),c&&(n=h.x1,r=h.x2,a=h.y1,i=h.y2,As(h,n-E,a-E,r+E,i+E));var X=f.overlayBounds=f.overlayBounds||{};on(X,h),an(X,y),rn(X,1);var j=f.labelBounds=f.labelBounds||{};null!=j.all?((l=j.all).x1=1/0,l.y1=1/0,l.x2=-1/0,l.y2=-1/0,l.w=0,l.h=0):j.all=tn(),c&&t.includeLabels&&(t.includeMainLabels&&Ns(h,e,null),g&&(t.includeSourceLabels&&Ns(h,e,"source"),t.includeTargetLabels&&Ns(h,e,"target")))}return h.x1=_s(h.x1),h.y1=_s(h.y1),h.x2=_s(h.x2),h.y2=_s(h.y2),h.w=_s(h.x2-h.x1),h.h=_s(h.y2-h.y1),h.w>0&&h.h>0&&b&&(an(h,y),rn(h,1)),h},Vs=function(e){var t=0,n=function(e){return(e?1:0)<0&&void 0!==arguments[0]?arguments[0]:il,t=arguments.length>1?arguments[1]:void 0,n=0;n=0;s--)o(s);return this},sl.removeAllListeners=function(){return this.removeListener("*")},sl.emit=sl.trigger=function(e,t,n){var r=this.listeners,a=r.length;return this.emitting++,H(t)||(t=[t]),cl(this,(function(e,i){null!=n&&(r=[{event:i.event,type:i.type,namespace:i.namespace,callback:n}],a=r.length);for(var o=function(){var n=r[s];if(n.type===i.type&&(!n.namespace||n.namespace===i.namespace||".*"===n.namespace)&&e.eventMatches(e.context,n,i)){var a=[i];null!=t&&function(e,t){for(var n=0;n1&&!r){var a=this.length-1,i=this[a],o=i._private.data.id;this[a]=void 0,this[e]=i,n.set(o,{ele:i,index:e})}return this.length--,this},unmergeOne:function(e){e=e[0];var t=this._private,n=e._private.data.id,r=t.map.get(n);if(!r)return this;var a=r.index;return this.unmergeAt(a),this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&W(e)){var n=e;e=t.mutableElements().filter(n)}for(var r=0;r=0;t--){e(this[t])&&this.unmergeAt(t)}return this},map:function(e,t){for(var n=[],r=this,a=0;ar&&(r=s,n=o)}return{value:r,ele:n}},min:function(e,t){for(var n,r=1/0,a=this,i=0;i=0&&a1&&void 0!==arguments[1])||arguments[1],n=this[0],r=n.cy();if(r.styleEnabled()&&n){n._private.styleDirty&&(n._private.styleDirty=!1,r.style().apply(n));var a=n._private.style[e];return null!=a?a:t?r.style().getDefaultProperty(e):null}},numericStyle:function(e){var t=this[0];if(t.cy().styleEnabled()&&t){var n=t.pstyle(e);return void 0!==n.pfValue?n.pfValue:n.value}},numericStyleUnits:function(e){var t=this[0];if(t.cy().styleEnabled())return t?t.pstyle(e).units:void 0},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=this[0];return n?t.style().getRenderedStyle(n,e):void 0},style:function(e,t){var n=this.cy();if(!n.styleEnabled())return this;var r=!1,a=n.style();if(K(e)){var i=e;a.applyBypass(this,i,r),this.emitAndNotify("style")}else if(W(e)){if(void 0===t){var o=this[0];return o?a.getStylePropertyValue(o,e):void 0}a.applyBypass(this,e,t,r),this.emitAndNotify("style")}else if(void 0===e){var s=this[0];return s?a.getRawStyle(s):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var n=!1,r=t.style(),a=this;if(void 0===e)for(var i=0;i0&&t.push(c[0]),t.push(s[0])}return this.spawn(t,!0).filter(e)}),"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}}),Nl.neighbourhood=Nl.neighborhood,Nl.closedNeighbourhood=Nl.closedNeighborhood,Nl.openNeighbourhood=Nl.openNeighborhood,ye(Nl,{source:ds((function(e){var t,n=this[0];return n&&(t=n._private.source||n.cy().collection()),t&&e?t.filter(e):t}),"source"),target:ds((function(e){var t,n=this[0];return n&&(t=n._private.target||n.cy().collection()),t&&e?t.filter(e):t}),"target"),sources:Vl({attr:"source"}),targets:Vl({attr:"target"})}),ye(Nl,{edgesWith:ds(Fl(),"edgesWith"),edgesTo:ds(Fl({thisIsSrc:!0}),"edgesTo")}),ye(Nl,{connectedEdges:ds((function(e){for(var t=[],n=0;n0);return i},component:function(){var e=this[0];return e.cy().mutableElements().components(e)[0]}}),Nl.componentsOf=Nl.components;var jl=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(void 0!==e){var a=new gt,i=!1;if(t){if(t.length>0&&K(t[0])&&!J(t[0])){i=!0;for(var o=[],s=new yt,l=0,u=t.length;l0&&void 0!==arguments[0])||arguments[0],r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=this,i=a.cy(),o=i._private,s=[],l=[],u=0,c=a.length;u0){for(var I=e.length===a.length?a:new jl(i,e),N=0;N0&&void 0!==arguments[0])||arguments[0],t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=this,r=[],a={},i=n._private.cy;function o(e){var n=a[e.id()];t&&e.removed()||n||(a[e.id()]=!0,e.isNode()?(r.push(e),function(e){for(var t=e._private.edges,n=0;n0&&(e?k.emitAndNotify("remove"):t&&k.emit("remove"));for(var T=0;T=.001?function(t,r){for(var a=0;a<4;++a){var i=h(r,e,n);if(0===i)return r;r-=(d(r,e,n)-t)/i}return r}(t,o):0===l?o:function(t,r,a){var i,o,s=0;do{(i=d(o=r+(a-r)/2,e,n)-t)>0?a=o:r=o}while(Math.abs(i)>1e-7&&++s<10);return o}(t,r,r+a)}var p=!1;function g(){p=!0,e===t&&n===r||function(){for(var t=0;t<11;++t)s[t]=d(t*a,e,n)}()}var v=function(a){return p||g(),e===t&&n===r?a:0===a?0:1===a?1:d(f(a),t,r)};v.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]};var y="generateBezier("+[e,t,n,r]+")";return v.toString=function(){return y},v} +/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */var Ul=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,n,r){var a={x:t.x+r.dx*n,v:t.v+r.dv*n,tension:t.tension,friction:t.friction};return{dx:a.v,dv:e(a)}}function n(n,r){var a={dx:n.v,dv:e(n)},i=t(n,.5*r,a),o=t(n,.5*r,i),s=t(n,r,o),l=1/6*(a.dx+2*(i.dx+o.dx)+s.dx),u=1/6*(a.dv+2*(i.dv+o.dv)+s.dv);return n.x=n.x+l*r,n.v=n.v+u*r,n}return function e(t,r,a){var i,o,s,l={x:-1,v:0,tension:null,friction:null},u=[0],c=0,d=1e-4;for(t=parseFloat(t)||500,r=parseFloat(r)||20,a=a||null,l.tension=t,l.friction=r,o=(i=null!==a)?(c=e(t,r))/a*.016:.016;s=n(s||l,o),u.push(1+s.x),c+=16,Math.abs(s.x)>d&&Math.abs(s.v)>d;);return i?function(e){return u[e*(u.length-1)|0]}:c}}(),Hl=function(e,t,n,r){var a=Wl(e,t,n,r);return function(e,t,n){return e+(t-e)*a(n)}},Kl={linear:function(e,t,n){return e+(t-e)*n},ease:Hl(.25,.1,.25,1),"ease-in":Hl(.42,0,1,1),"ease-out":Hl(0,0,.58,1),"ease-in-out":Hl(.42,0,.58,1),"ease-in-sine":Hl(.47,0,.745,.715),"ease-out-sine":Hl(.39,.575,.565,1),"ease-in-out-sine":Hl(.445,.05,.55,.95),"ease-in-quad":Hl(.55,.085,.68,.53),"ease-out-quad":Hl(.25,.46,.45,.94),"ease-in-out-quad":Hl(.455,.03,.515,.955),"ease-in-cubic":Hl(.55,.055,.675,.19),"ease-out-cubic":Hl(.215,.61,.355,1),"ease-in-out-cubic":Hl(.645,.045,.355,1),"ease-in-quart":Hl(.895,.03,.685,.22),"ease-out-quart":Hl(.165,.84,.44,1),"ease-in-out-quart":Hl(.77,0,.175,1),"ease-in-quint":Hl(.755,.05,.855,.06),"ease-out-quint":Hl(.23,1,.32,1),"ease-in-out-quint":Hl(.86,0,.07,1),"ease-in-expo":Hl(.95,.05,.795,.035),"ease-out-expo":Hl(.19,1,.22,1),"ease-in-out-expo":Hl(1,0,0,1),"ease-in-circ":Hl(.6,.04,.98,.335),"ease-out-circ":Hl(.075,.82,.165,1),"ease-in-out-circ":Hl(.785,.135,.15,.86),spring:function(e,t,n){if(0===n)return Kl.linear;var r=Ul(e,t,n);return function(e,t,n){return e+(t-e)*r(n)}},"cubic-bezier":Hl};function Gl(e,t,n,r,a){if(1===r)return n;if(t===n)return n;var i=a(t,n,r);return null==e||((e.roundValue||e.color)&&(i=Math.round(i)),void 0!==e.min&&(i=Math.max(i,e.min)),void 0!==e.max&&(i=Math.min(i,e.max))),i}function Zl(e,t){return null!=e.pfValue||null!=e.value?null==e.pfValue||null!=t&&"%"===t.type.units?e.value:e.pfValue:e}function $l(e,t,n,r,a){var i=null!=a?a.type:null;n<0?n=0:n>1&&(n=1);var o=Zl(e,a),s=Zl(t,a);if(G(o)&&G(s))return Gl(i,o,s,n,r);if(H(o)&&H(s)){for(var l=[],u=0;u0?("spring"===d&&h.push(o.duration),o.easingImpl=Kl[d].apply(null,h)):o.easingImpl=Kl[d]}var f,p=o.easingImpl;if(f=0===o.duration?1:(n-l)/o.duration,o.applying&&(f=o.progress),f<0?f=0:f>1&&(f=1),null==o.delay){var g=o.startPosition,v=o.position;if(v&&a&&!e.locked()){var y={};Jl(g.x,v.x)&&(y.x=$l(g.x,v.x,f,p)),Jl(g.y,v.y)&&(y.y=$l(g.y,v.y,f,p)),e.position(y)}var m=o.startPan,b=o.pan,x=i.pan,w=null!=b&&r;w&&(Jl(m.x,b.x)&&(x.x=$l(m.x,b.x,f,p)),Jl(m.y,b.y)&&(x.y=$l(m.y,b.y,f,p)),e.emit("pan"));var E=o.startZoom,k=o.zoom,T=null!=k&&r;T&&(Jl(E,k)&&(i.zoom=en(i.minZoom,$l(E,k,f,p),i.maxZoom)),e.emit("zoom")),(w||T)&&e.emit("viewport");var C=o.style;if(C&&C.length>0&&a){for(var P=0;P=0;t--){(0,e[t])()}e.splice(0,e.length)},c=i.length-1;c>=0;c--){var d=i[c],h=d._private;h.stopped?(i.splice(c,1),h.hooked=!1,h.playing=!1,h.started=!1,u(h.frames)):(h.playing||h.applying)&&(h.playing&&h.applying&&(h.applying=!1),h.started||eu(0,d,e),Ql(t,d,e,n),h.applying&&(h.applying=!1),u(h.frames),null!=h.step&&h.step(e),d.completed()&&(i.splice(c,1),h.hooked=!1,h.playing=!1,h.started=!1,u(h.completes)),s=!0)}return n||0!==i.length||0!==o.length||r.push(t),s}for(var i=!1,o=0;o0?t.notify("draw",n):t.notify("draw")),n.unmerge(r),t.emit("step")}var nu={animate:Eo.animate(),animation:Eo.animation(),animated:Eo.animated(),clearQueue:Eo.clearQueue(),delay:Eo.delay(),delayAnimation:Eo.delayAnimation(),stop:Eo.stop(),addToAnimationPool:function(e){this.styleEnabled()&&this._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){var e=this;if(e._private.animationsRunning=!0,e.styleEnabled()){var t=e.renderer();t&&t.beforeRender?t.beforeRender((function(t,n){tu(n,e)}),t.beforeRenderPriorities.animations):function t(){e._private.animationsRunning&&Ne((function(n){tu(n,e),t()}))}()}}},ru={qualifierCompare:function(e,t){return null==e||null==t?null==e&&null==t:e.sameText(t)},eventMatches:function(e,t,n){var r=t.qualifier;return null==r||e!==n.target&&J(n.target)&&r.matches(n.target)},addEventFields:function(e,t){t.cy=e,t.target=e},callbackContext:function(e,t,n){return null!=t.qualifier?n.target:e}},au=function(e){return W(e)?new os(e):e},iu={createEmitter:function(){var e=this._private;return e.emitter||(e.emitter=new ol(ru,this)),this},emitter:function(){return this._private.emitter},on:function(e,t,n){return this.emitter().on(e,au(t),n),this},removeListener:function(e,t,n){return this.emitter().removeListener(e,au(t),n),this},removeAllListeners:function(){return this.emitter().removeAllListeners(),this},one:function(e,t,n){return this.emitter().one(e,au(t),n),this},once:function(e,t,n){return this.emitter().one(e,au(t),n),this},emit:function(e,t){return this.emitter().emit(e,t),this},emitAndNotify:function(e,t){return this.emit(e),this.notify(e,t),this}};Eo.eventAliasesOn(iu);var ou={png:function(e){return e=e||{},this._private.renderer.png(e)},jpg:function(e){var t=this._private.renderer;return(e=e||{}).bg=e.bg||"#fff",t.jpg(e)}};ou.jpeg=ou.jpg;var su={layout:function(e){var t=this;if(null!=e)if(null!=e.name){var n=e.name,r=t.extension("layout",n);if(null!=r){var a;a=W(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var i=new r(ye({},e,{cy:t,eles:a}));return i}rt("No such layout `"+n+"` found. Did you forget to import it and `cytoscape.use()` it?")}else rt("A `name` must be specified to make a layout");else rt("Layout options must be specified to make a layout")}};su.createLayout=su.makeLayout=su.layout;var lu={notify:function(e,t){var n=this._private;if(this.batching()){n.batchNotifications=n.batchNotifications||{};var r=n.batchNotifications[e]=n.batchNotifications[e]||this.collection();null!=t&&r.merge(t)}else if(n.notificationsEnabled){var a=this.renderer();!this.destroyed()&&a&&a.notify(e,t)}},notifications:function(e){var t=this._private;return void 0===e?t.notificationsEnabled:(t.notificationsEnabled=!!e,this)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},batching:function(){return this._private.batchCount>0},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchStyleEles=this.collection(),e.batchNotifications={}),e.batchCount++,this},endBatch:function(){var e=this._private;if(0===e.batchCount)return this;if(e.batchCount--,0===e.batchCount){e.batchStyleEles.updateStyle();var t=this.renderer();Object.keys(e.batchNotifications).forEach((function(n){var r=e.batchNotifications[n];r.empty()?t.notify(n):t.notify(n,r)}))}return this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch((function(){for(var n=Object.keys(e),r=0;r0;)t.removeChild(t.childNodes[0]);e._private.renderer=null,e.mutableElements().forEach((function(e){var t=e._private;t.rscratch={},t.rstyle={},t.animation.current=[],t.animation.queue=[]}))},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};cu.invalidateDimensions=cu.resize;var du={collection:function(e,t){return W(e)?this.$(e):Q(e)?e.collection():H(e)?(t||(t={}),new jl(this,e,t.unique,t.removed)):new jl(this)},nodes:function(e){var t=this.$((function(e){return e.isNode()}));return e?t.filter(e):t},edges:function(e){var t=this.$((function(e){return e.isEdge()}));return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};du.elements=du.filter=du.$;var hu={},fu="t";hu.apply=function(e){for(var t=this,n=t._private.cy.collection(),r=0;r0;if(h||d&&f){var p=void 0;h&&f||h?p=u.properties:f&&(p=u.mappedProperties);for(var g=0;g1&&(v=1),s.color){var w=a.valueMin[0],E=a.valueMax[0],k=a.valueMin[1],T=a.valueMax[1],C=a.valueMin[2],P=a.valueMax[2],S=null==a.valueMin[3]?1:a.valueMin[3],B=null==a.valueMax[3]?1:a.valueMax[3],D=[Math.round(w+(E-w)*v),Math.round(k+(T-k)*v),Math.round(C+(P-C)*v),Math.round(S+(B-S)*v)];n={bypass:a.bypass,name:a.name,value:D,strValue:"rgb("+D[0]+", "+D[1]+", "+D[2]+")"}}else{if(!s.number)return!1;var _=a.valueMin+(a.valueMax-a.valueMin)*v;n=this.parse(a.name,_,a.bypass,h)}if(!n)return g(),!1;n.mapping=a,a=n;break;case o.data:for(var A=a.field.split("."),M=d.data,R=0;R0&&i>0){for(var s={},l=!1,u=0;u0?e.delayAnimation(o).play().promise().then(t):t()})).then((function(){return e.animation({style:s,duration:i,easing:e.pstyle("transition-timing-function").value,queue:!1}).play().promise()})).then((function(){n.removeBypasses(e,a),e.emitAndNotify("style"),r.transitioning=!1}))}else r.transitioning&&(this.removeBypasses(e,a),e.emitAndNotify("style"),r.transitioning=!1)},hu.checkTrigger=function(e,t,n,r,a,i){var o=this.properties[t],s=a(o);e.removed()||null!=s&&s(n,r,e)&&i(o)},hu.checkZOrderTrigger=function(e,t,n,r){var a=this;this.checkTrigger(e,t,n,r,(function(e){return e.triggersZOrder}),(function(){a._private.cy.notify("zorder",e)}))},hu.checkBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,(function(e){return e.triggersBounds}),(function(t){e.dirtyCompoundBoundsCache(),e.dirtyBoundingBoxCache()}))},hu.checkConnectedEdgesBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,(function(e){return e.triggersBoundsOfConnectedEdges}),(function(t){e.connectedEdges().forEach((function(e){e.dirtyBoundingBoxCache()}))}))},hu.checkParallelEdgesBoundsTrigger=function(e,t,n,r){this.checkTrigger(e,t,n,r,(function(e){return e.triggersBoundsOfParallelEdges}),(function(t){e.parallelEdges().forEach((function(e){e.dirtyBoundingBoxCache()}))}))},hu.checkTriggers=function(e,t,n,r){e.dirtyStyleCache(),this.checkZOrderTrigger(e,t,n,r),this.checkBoundsTrigger(e,t,n,r),this.checkConnectedEdgesBoundsTrigger(e,t,n,r),this.checkParallelEdgesBoundsTrigger(e,t,n,r)};var pu={applyBypass:function(e,t,n,r){var a=[];if("*"===t||"**"===t){if(void 0!==n)for(var i=0;it.length?i.substr(t.length):""}function s(){n=n.length>r.length?n.substr(r.length):""}for(i=i.replace(/[/][*](\s|.)+?[*][/]/g,"");;){if(i.match(/^\s*$/))break;var l=i.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!l){it("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+i);break}t=l[0];var u=l[1];if("core"!==u)if(new os(u).invalid){it("Skipping parsing of block: Invalid selector found in string stylesheet: "+u),o();continue}var c=l[2],d=!1;n=c;for(var h=[];;){if(n.match(/^\s*$/))break;var f=n.match(/^\s*(.+?)\s*:\s*(.+?)(?:\s*;|\s*$)/);if(!f){it("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+c),d=!0;break}r=f[0];var p=f[1],g=f[2];if(this.properties[p])a.parse(p,g)?(h.push({name:p,val:g}),s()):(it("Skipping property: Invalid property definition in: "+r),s());else it("Skipping property: Invalid property name in: "+r),s()}if(d){o();break}a.selector(u);for(var v=0;v=7&&"d"===t[0]&&(u=new RegExp(s.data.regex).exec(t))){if(n)return!1;var h=s.data;return{name:e,value:u,strValue:""+t,mapped:h,field:u[1],bypass:n}}if(t.length>=10&&"m"===t[0]&&(c=new RegExp(s.mapData.regex).exec(t))){if(n)return!1;if(d.multiple)return!1;var f=s.mapData;if(!d.color&&!d.number)return!1;var p=this.parse(e,c[4]);if(!p||p.mapped)return!1;var g=this.parse(e,c[5]);if(!g||g.mapped)return!1;if(p.pfValue===g.pfValue||p.strValue===g.strValue)return it("`"+e+": "+t+"` is not a valid mapper because the output range is zero; converting to `"+e+": "+p.strValue+"`"),this.parse(e,p.strValue);if(d.color){var v=p.value,y=g.value;if(!(v[0]!==y[0]||v[1]!==y[1]||v[2]!==y[2]||v[3]!==y[3]&&(null!=v[3]&&1!==v[3]||null!=y[3]&&1!==y[3])))return!1}return{name:e,value:c,strValue:""+t,mapped:f,field:c[1],fieldMin:parseFloat(c[2]),fieldMax:parseFloat(c[3]),valueMin:p.value,valueMax:g.value,bypass:n}}}if(d.multiple&&"multiple"!==r){var m;if(m=l?t.split(/\s+/):H(t)?t:[t],d.evenMultiple&&m.length%2!=0)return null;for(var b=[],x=[],w=[],E="",k=!1,T=0;T0?" ":"")+C.strValue}return d.validate&&!d.validate(b,x)?null:d.singleEnum&&k?1===b.length&&W(b[0])?{name:e,value:b[0],strValue:b[0],bypass:n}:null:{name:e,value:b,pfValue:w,strValue:E,bypass:n,units:x}}var P,S=function(){for(var r=0;rd.max||d.strictMax&&t===d.max))return null;var M={name:e,value:t,strValue:""+t+(B||""),units:B,bypass:n};return d.unitless||"px"!==B&&"em"!==B?M.pfValue=t:M.pfValue="px"!==B&&B?this.getEmSizeInPixels()*t:t,"ms"!==B&&"s"!==B||(M.pfValue="ms"===B?t:1e3*t),"deg"!==B&&"rad"!==B||(M.pfValue="rad"===B?t:(P=t,Math.PI*P/180)),"%"===B&&(M.pfValue=t/100),M}if(d.propList){var R=[],I=""+t;if("none"===I);else{for(var N=I.split(/\s*,\s*|\s+/),L=0;L0&&l>0&&!isNaN(n.w)&&!isNaN(n.h)&&n.w>0&&n.h>0)return{zoom:o=(o=(o=Math.min((s-2*t)/n.w,(l-2*t)/n.h))>this._private.maxZoom?this._private.maxZoom:o)=n.minZoom&&(n.maxZoom=t),this},minZoom:function(e){return void 0===e?this._private.minZoom:this.zoomRange({min:e})},maxZoom:function(e){return void 0===e?this._private.maxZoom:this.zoomRange({max:e})},getZoomedViewport:function(e){var t,n,r=this._private,a=r.pan,i=r.zoom,o=!1;if(r.zoomingEnabled||(o=!0),G(e)?n=e:K(e)&&(n=e.level,null!=e.position?t=jt(e.position,i,a):null!=e.renderedPosition&&(t=e.renderedPosition),null==t||r.panningEnabled||(o=!0)),n=(n=n>r.maxZoom?r.maxZoom:n)t.maxZoom||!t.zoomingEnabled?i=!0:(t.zoom=s,a.push("zoom"))}if(r&&(!i||!e.cancelOnFailedZoom)&&t.panningEnabled){var l=e.pan;G(l.x)&&(t.pan.x=l.x,o=!1),G(l.y)&&(t.pan.y=l.y,o=!1),o||a.push("pan")}return a.length>0&&(a.push("viewport"),this.emit(a.join(" ")),this.notify("viewport")),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.emit("pan viewport"),this.notify("viewport")),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(W(e)){var n=e;e=this.mutableElements().filter(n)}else Q(e)||(e=this.mutableElements());if(0!==e.length){var r=e.boundingBox(),a=this.width(),i=this.height();return{x:(a-(t=void 0===t?this._private.zoom:t)*(r.x1+r.x2))/2,y:(i-t*(r.y1+r.y2))/2}}}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e,t,n=this._private,r=n.container,a=this;return n.sizeCache=n.sizeCache||(r?(e=a.window().getComputedStyle(r),t=function(t){return parseFloat(e.getPropertyValue(t))},{width:r.clientWidth-t("padding-left")-t("padding-right"),height:r.clientHeight-t("padding-top")-t("padding-bottom")}):{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,n=this.renderedExtent(),r={x1:(n.x1-e.x)/t,x2:(n.x2-e.x)/t,y1:(n.y1-e.y)/t,y2:(n.y2-e.y)/t};return r.w=r.x2-r.x1,r.h=r.y2-r.y1,r},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}},multiClickDebounceTime:function(e){return e?(this._private.multiClickDebounceTime=e,this):this._private.multiClickDebounceTime}};Tu.centre=Tu.center,Tu.autolockNodes=Tu.autolock,Tu.autoungrabifyNodes=Tu.autoungrabify;var Cu={data:Eo.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeData:Eo.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),scratch:Eo.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:Eo.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0})};Cu.attr=Cu.data,Cu.removeAttr=Cu.removeData;var Pu=function(e){var t=this,n=(e=ye({},e)).container;n&&!$(n)&&$(n[0])&&(n=n[0]);var r=n?n._cyreg:null;(r=r||{})&&r.cy&&(r.cy.destroy(),r={});var a=r.readies=r.readies||[];n&&(n._cyreg=r),r.cy=t;var i=void 0!==c&&void 0!==n&&!e.headless,o=e;o.layout=ye({name:i?"grid":"null"},o.layout),o.renderer=ye({name:i?"canvas":"null"},o.renderer);var s=function(e,t,n){return void 0!==t?t:void 0!==n?n:e},l=this._private={container:n,ready:!1,options:o,elements:new jl(this),listeners:[],aniEles:new jl(this),data:o.data||{},scratch:{},layout:null,renderer:null,destroyed:!1,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:s(!0,o.zoomingEnabled),userZoomingEnabled:s(!0,o.userZoomingEnabled),panningEnabled:s(!0,o.panningEnabled),userPanningEnabled:s(!0,o.userPanningEnabled),boxSelectionEnabled:s(!0,o.boxSelectionEnabled),autolock:s(!1,o.autolock,o.autolockNodes),autoungrabify:s(!1,o.autoungrabify,o.autoungrabifyNodes),autounselectify:s(!1,o.autounselectify),styleEnabled:void 0===o.styleEnabled?i:o.styleEnabled,zoom:G(o.zoom)?o.zoom:1,pan:{x:K(o.pan)&&G(o.pan.x)?o.pan.x:0,y:K(o.pan)&&G(o.pan.y)?o.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1,multiClickDebounceTime:s(250,o.multiClickDebounceTime)};this.createEmitter(),this.selectionType(o.selectionType),this.zoomRange({min:o.minZoom,max:o.maxZoom});l.styleEnabled&&t.setStyle([]);var u=ye({},o,o.renderer);t.initRenderer(u);!function(e,t){if(e.some(ae))return Gr.all(e).then(t);t(e)}([o.style,o.elements],(function(e){var n=e[0],i=e[1];l.styleEnabled&&t.style().append(n),function(e,n,r){t.notifications(!1);var a=t.mutableElements();a.length>0&&a.remove(),null!=e&&(K(e)||H(e))&&t.add(e),t.one("layoutready",(function(e){t.notifications(!0),t.emit(e),t.one("load",n),t.emitAndNotify("load")})).one("layoutstop",(function(){t.one("done",r),t.emit("done")}));var i=ye({},t._private.options.layout);i.eles=t.elements(),t.layout(i).run()}(i,(function(){t.startAnimationLoop(),l.ready=!0,U(o.ready)&&t.on("ready",o.ready);for(var e=0;e0,l=!!t.boundingBox,u=tn(l?t.boundingBox:structuredClone(n.extent()));if(Q(t.roots))e=t.roots;else if(H(t.roots)){for(var c=[],d=0;d0;){var B=C.shift(),D=T(B,P);if(D)B.outgoers().filter((function(e){return e.isNode()&&r.has(e)})).forEach(S);else if(null===D){it("Detected double maximal shift for node `"+B.id()+"`. Bailing maximal adjustment due to cycle. Use `options.maximal: true` only on DAGs.");break}}}var _=0;if(t.avoidOverlap)for(var A=0;A0&&y[0].length<=3?i/2:0),s=2*Math.PI/y[r].length*a;return 0===r&&1===y[0].length&&(o=1),{x:q+o*Math.cos(s),y:U+o*Math.sin(s)}}var c=y[r].length,d=Math.max(1===c?0:l?(u.w-2*t.padding-K.w)/((t.grid?Z:c)-1):(u.w-2*t.padding-K.w)/((t.grid?Z:c)+1),_);return{x:q+(a+1-(c+1)/2)*d,y:U+(r+1-(O+1)/2)*G}}(e),u,$[t.direction])})),this};var Ru={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function Iu(e){this.options=ye({},Ru,e)}Iu.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,a=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,i=r.nodes().not(":parent");t.sort&&(i=i.sort(t.sort));for(var o,s=tn(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l=s.x1+s.w/2,u=s.y1+s.h/2,c=(void 0===t.sweep?2*Math.PI-2*Math.PI/i.length:t.sweep)/Math.max(1,i.length-1),d=0,h=0;h1&&t.avoidOverlap){d*=1.75;var v=Math.cos(c)-Math.cos(0),y=Math.sin(c)-Math.sin(0),m=Math.sqrt(d*d/(v*v+y*y));o=Math.max(m,o)}return r.nodes().layoutPositions(this,t,(function(e,n){var r=t.startAngle+n*c*(a?1:-1),i=o*Math.cos(r),s=o*Math.sin(r);return{x:l+i,y:u+s}})),this};var Nu,Lu={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,nodeDimensionsIncludeLabels:!1,height:void 0,width:void 0,spacingFactor:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function zu(e){this.options=ye({},Lu,e)}zu.prototype.run=function(){for(var e=this.options,t=e,n=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,r=e.cy,a=t.eles,i=a.nodes().not(":parent"),o=tn(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),s=o.x1+o.w/2,l=o.y1+o.h/2,u=[],c=0,d=0;d0)Math.abs(m[0].value-x.value)>=v&&(m=[],y.push(m));m.push(x)}var w=c+t.minNodeSpacing;if(!t.avoidOverlap){var E=y.length>0&&y[0].length>1,k=(Math.min(o.w,o.h)/2-w)/(y.length+E?1:0);w=Math.min(w,k)}for(var T=0,C=0;C1&&t.avoidOverlap){var D=Math.cos(B)-Math.cos(0),_=Math.sin(B)-Math.sin(0),A=Math.sqrt(w*w/(D*D+_*_));T=Math.max(A,T)}P.r=T,T+=w}if(t.equidistant){for(var M=0,R=0,I=0;I=e.numIter)&&(Uu(r,e),r.temperature=r.temperature*e.coolingFactor,!(r.temperature=e.animationThreshold&&i(),Ne(c)):(ac(r,e),s())};c()}else{for(;u;)u=o(l),l++;ac(r,e),s()}return this},Vu.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.emit("layoutstop"),this},Vu.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var Fu=function(e,t,n){for(var r=n.eles.edges(),a=n.eles.nodes(),i=tn(n.boundingBox?n.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()}),o={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:a.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:r.size(),temperature:n.initialTemp,clientWidth:i.w,clientHeight:i.h,boundingBox:i},s=n.eles.components(),l={},u=0;u0){o.graphSet.push(w);for(u=0;ur.count?0:r.graph},ju=function(e,t,n,r){var a=r.graphSet[n];if(-10)var s=(u=r.nodeOverlap*o)*a/(g=Math.sqrt(a*a+i*i)),l=u*i/g;else{var u,c=$u(e,a,i),d=$u(t,-1*a,-1*i),h=d.x-c.x,f=d.y-c.y,p=h*h+f*f,g=Math.sqrt(p);s=(u=(e.nodeRepulsion+t.nodeRepulsion)/p)*h/g,l=u*f/g}e.isLocked||(e.offsetX-=s,e.offsetY-=l),t.isLocked||(t.offsetX+=s,t.offsetY+=l)}},Zu=function(e,t,n,r){if(n>0)var a=e.maxX-t.minX;else a=t.maxX-e.minX;if(r>0)var i=e.maxY-t.minY;else i=t.maxY-e.minY;return a>=0&&i>=0?Math.sqrt(a*a+i*i):0},$u=function(e,t,n){var r=e.positionX,a=e.positionY,i=e.height||1,o=e.width||1,s=n/t,l=i/o,u={};return 0===t&&0n?(u.x=r,u.y=a+i/2,u):0t&&-1*l<=s&&s<=l?(u.x=r-o/2,u.y=a-o*n/2/t,u):0=l)?(u.x=r+i*t/2/n,u.y=a+i/2,u):0>n&&(s<=-1*l||s>=l)?(u.x=r-i*t/2/n,u.y=a-i/2,u):u},Qu=function(e,t){for(var n=0;n1){var p=t.gravity*d/f,g=t.gravity*h/f;c.offsetX+=p,c.offsetY+=g}}}}},ec=function(e,t){var n=[],r=0,a=-1;for(n.push.apply(n,e.graphSet[0]),a+=e.graphSet[0].length;r<=a;){var i=n[r++],o=e.idToIndex[i],s=e.layoutNodes[o],l=s.children;if(0n)var a={x:n*e/r,y:n*t/r};else a={x:e,y:t};return a},rc=function(e,t){var n=e.parentId;if(null!=n){var r=t.layoutNodes[t.idToIndex[n]],a=!1;return(null==r.maxX||e.maxX+r.padRight>r.maxX)&&(r.maxX=e.maxX+r.padRight,a=!0),(null==r.minX||e.minX-r.padLeftr.maxY)&&(r.maxY=e.maxY+r.padBottom,a=!0),(null==r.minY||e.minY-r.padTopp&&(d+=f+t.componentSpacing,c=0,h=0,f=0)}}},ic={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,nodeDimensionsIncludeLabels:!1,spacingFactor:void 0,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,animateFilter:function(e,t){return!0},ready:void 0,stop:void 0,transform:function(e,t){return t}};function oc(e){this.options=ye({},ic,e)}oc.prototype.run=function(){var e=this.options,t=e,n=e.cy,r=t.eles,a=r.nodes().not(":parent");t.sort&&(a=a.sort(t.sort));var i=tn(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(0===i.h||0===i.w)r.nodes().layoutPositions(this,t,(function(e){return{x:i.x1,y:i.y1}}));else{var o=a.size(),s=Math.sqrt(o*i.h/i.w),l=Math.round(s),u=Math.round(i.w/i.h*s),c=function(e){if(null==e)return Math.min(l,u);Math.min(l,u)==l?l=e:u=e},d=function(e){if(null==e)return Math.max(l,u);Math.max(l,u)==l?l=e:u=e},h=t.rows,f=null!=t.cols?t.cols:t.columns;if(null!=h&&null!=f)l=h,u=f;else if(null!=h&&null==f)l=h,u=Math.ceil(o/l);else if(null==h&&null!=f)u=f,l=Math.ceil(o/u);else if(u*l>o){var p=c(),g=d();(p-1)*g>=o?c(p-1):(g-1)*p>=o&&d(g-1)}else for(;u*l=o?d(y+1):c(v+1)}var m=i.w/u,b=i.h/l;if(t.condense&&(m=0,b=0),t.avoidOverlap)for(var x=0;x=u&&(A=0,_++)},R={},I=0;I(r=yn(e,t,x[w],x[w+1],x[w+2],x[w+3])))return v(n,r),!0}else if("bezier"===i.edgeType||"multibezier"===i.edgeType||"self"===i.edgeType||"compound"===i.edgeType)for(x=i.allpts,w=0;w+5(r=vn(e,t,x[w],x[w+1],x[w+2],x[w+3],x[w+4],x[w+5])))return v(n,r),!0;m=m||a.source,b=b||a.target;var E=o.getArrowWidth(l,c),k=[{name:"source",x:i.arrowStartX,y:i.arrowStartY,angle:i.srcArrowAngle},{name:"target",x:i.arrowEndX,y:i.arrowEndY,angle:i.tgtArrowAngle},{name:"mid-source",x:i.midX,y:i.midY,angle:i.midsrcArrowAngle},{name:"mid-target",x:i.midX,y:i.midY,angle:i.midtgtArrowAngle}];for(w=0;w0&&(y(m),y(b))}function b(e,t,n){return ft(e,t,n)}function x(n,r){var a,i=n._private,o=p;a=r?r+"-":"",n.boundingBox();var s=i.labelBounds[r||"main"],l=n.pstyle(a+"label").value;if("yes"===n.pstyle("text-events").strValue&&l){var u=b(i.rscratch,"labelX",r),c=b(i.rscratch,"labelY",r),d=b(i.rscratch,"labelAngle",r),h=n.pstyle(a+"text-margin-x").pfValue,f=n.pstyle(a+"text-margin-y").pfValue,g=s.x1-o-h,y=s.x2+o-h,m=s.y1-o-f,x=s.y2+o-f;if(d){var w=Math.cos(d),E=Math.sin(d),k=function(e,t){return{x:(e-=u)*w-(t-=c)*E+u,y:e*E+t*w+c}},T=k(g,m),C=k(g,x),P=k(y,m),S=k(y,x),B=[T.x+h,T.y+f,P.x+h,P.y+f,S.x+h,S.y+f,C.x+h,C.y+f];if(mn(e,t,B))return v(n),!0}else if(ln(s,e,t))return v(n),!0}}n&&(l=l.interactive);for(var w=l.length-1;w>=0;w--){var E=l[w];E.isNode()?y(E)||x(E):m(E)||x(E)||x(E,"source")||x(E,"target")}return u},getAllInBox:function(e,t,n,r){var a=this.getCachedZSortedEles().interactive,o=2/this.cy.zoom(),s=[],l=Math.min(e,n),u=Math.max(e,n),c=Math.min(t,r),d=Math.max(t,r),h=tn({x1:e=l,y1:t=c,x2:n=u,y2:r=d}),f=[{x:h.x1,y:h.y1},{x:h.x2,y:h.y1},{x:h.x2,y:h.y2},{x:h.x1,y:h.y2}],p=[[f[0],f[1]],[f[1],f[2]],[f[2],f[3]],[f[3],f[0]]];function g(e,t,n){return ft(e,t,n)}function v(e,t){var n=e._private,r=o;e.boundingBox();var a=n.labelBounds.main;if(!a)return null;var i=g(n.rscratch,"labelX",t),s=g(n.rscratch,"labelY",t),l=g(n.rscratch,"labelAngle",t),u=e.pstyle("text-margin-x").pfValue,c=e.pstyle("text-margin-y").pfValue,d=a.x1-r-u,h=a.x2+r-u,f=a.y1-r-c,p=a.y2+r-c;if(l){var v=Math.cos(l),y=Math.sin(l),m=function(e,t){return{x:(e-=i)*v-(t-=s)*y+i,y:e*y+t*v+s}};return[m(d,f),m(h,f),m(h,p),m(d,p)]}return[{x:d,y:f},{x:h,y:f},{x:h,y:p},{x:d,y:p}]}function y(e,t,n,r){function a(e,t,n){return(n.y-e.y)*(t.x-e.x)>(t.y-e.y)*(n.x-e.x)}return a(e,n,r)!==a(t,n,r)&&a(e,t,n)!==a(e,t,r)}for(var m=0;m0?-(Math.PI-i.ang):Math.PI+i.ang),Vc(t,n,Oc),Ec=zc.nx*Oc.ny-zc.ny*Oc.nx,kc=zc.nx*Oc.nx-zc.ny*-Oc.ny,Pc=Math.asin(Math.max(-1,Math.min(1,Ec))),Math.abs(Pc)<1e-6)return xc=t.x,wc=t.y,void(Bc=_c=0);Tc=1,Cc=!1,kc<0?Pc<0?Pc=Math.PI+Pc:(Pc=Math.PI-Pc,Tc=-1,Cc=!0):Pc>0&&(Tc=-1,Cc=!0),_c=void 0!==t.radius?t.radius:r,Sc=Pc/2,Ac=Math.min(zc.len/2,Oc.len/2),a?(Dc=Math.abs(Math.cos(Sc)*_c/Math.sin(Sc)))>Ac?(Dc=Ac,Bc=Math.abs(Dc*Math.sin(Sc)/Math.cos(Sc))):Bc=_c:(Dc=Math.min(Ac,_c),Bc=Math.abs(Dc*Math.sin(Sc)/Math.cos(Sc))),Ic=t.x+Oc.nx*Dc,Nc=t.y+Oc.ny*Dc,xc=Ic-Oc.ny*Bc*Tc,wc=Nc+Oc.nx*Bc*Tc,Mc=t.x+zc.nx*Dc,Rc=t.y+zc.ny*Dc,Lc=t};function Xc(e,t){0===t.radius?e.lineTo(t.cx,t.cy):e.arc(t.cx,t.cy,t.radius,t.startAngle,t.endAngle,t.counterClockwise)}function jc(e,t,n,r){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];return 0===r||0===t.radius?{cx:t.x,cy:t.y,radius:0,startX:t.x,startY:t.y,stopX:t.x,stopY:t.y,startAngle:void 0,endAngle:void 0,counterClockwise:void 0}:(Fc(e,t,n,r,a),{cx:xc,cy:wc,radius:Bc,startX:Mc,startY:Rc,stopX:Ic,stopY:Nc,startAngle:zc.ang+Math.PI/2*Tc,endAngle:Oc.ang-Math.PI/2*Tc,counterClockwise:Cc})}var Yc=.01,qc=Math.sqrt(.02),Wc={};function Uc(e){var t=[];if(null!=e){for(var n=0;n0?Math.max(e-t,0):Math.min(e+t,0)},S=P(T,E),B=P(C,k),D=!1;"auto"===v?g=Math.abs(S)>Math.abs(B)?a:r:v===l||v===s?(g=r,D=!0):v!==i&&v!==o||(g=a,D=!0);var _,A=g===r,M=A?B:S,R=A?C:T,I=Kt(R),N=!1;(D&&(m||x)||!(v===s&&R<0||v===l&&R>0||v===i&&R>0||v===o&&R<0)||(M=(I*=-1)*Math.abs(M),N=!0),m)?_=(b<0?1+b:b)*M:_=(b<0?M:0)+b*I;var L=function(e){return Math.abs(e)=Math.abs(M)},z=L(_),O=L(Math.abs(M)-Math.abs(_));if((z||O)&&!N)if(A){var V=Math.abs(R)<=d/2,F=Math.abs(T)<=h/2;if(V){var X=(u.x1+u.x2)/2,j=u.y1,Y=u.y2;n.segpts=[X,j,X,Y]}else if(F){var q=(u.y1+u.y2)/2,W=u.x1,U=u.x2;n.segpts=[W,q,U,q]}else n.segpts=[u.x1,u.y2]}else{var H=Math.abs(R)<=c/2,K=Math.abs(C)<=f/2;if(H){var G=(u.y1+u.y2)/2,Z=u.x1,$=u.x2;n.segpts=[Z,G,$,G]}else if(K){var Q=(u.x1+u.x2)/2,J=u.y1,ee=u.y2;n.segpts=[Q,J,Q,ee]}else n.segpts=[u.x2,u.y1]}else if(A){var te=u.y1+_+(p?d/2*I:0),ne=u.x1,re=u.x2;n.segpts=[ne,te,re,te]}else{var ae=u.x1+_+(p?c/2*I:0),ie=u.y1,oe=u.y2;n.segpts=[ae,ie,ae,oe]}if(n.isRound){var se=e.pstyle("taxi-radius").value,le="arc-radius"===e.pstyle("radius-type").value[0];n.radii=new Array(n.segpts.length/2).fill(se),n.isArcRadius=new Array(n.segpts.length/2).fill(le)}},Wc.tryToCorrectInvalidPoints=function(e,t){var n=e._private.rscratch;if("bezier"===n.edgeType){var r=t.srcPos,a=t.tgtPos,i=t.srcW,o=t.srcH,s=t.tgtW,l=t.tgtH,u=t.srcShape,c=t.tgtShape,d=t.srcCornerRadius,h=t.tgtCornerRadius,f=t.srcRs,p=t.tgtRs,g=!G(n.startX)||!G(n.startY),v=!G(n.arrowStartX)||!G(n.arrowStartY),y=!G(n.endX)||!G(n.endY),m=!G(n.arrowEndX)||!G(n.arrowEndY),b=3*(this.getArrowWidth(e.pstyle("width").pfValue,e.pstyle("arrow-scale").value)*this.arrowShapeWidth),x=Gt({x:n.ctrlpts[0],y:n.ctrlpts[1]},{x:n.startX,y:n.startY}),w=xg.poolIndex()){var v=p;p=g,g=v}var y=d.srcPos=p.position(),m=d.tgtPos=g.position(),b=d.srcW=p.outerWidth(),x=d.srcH=p.outerHeight(),E=d.tgtW=g.outerWidth(),k=d.tgtH=g.outerHeight(),T=d.srcShape=n.nodeShapes[t.getNodeShape(p)],C=d.tgtShape=n.nodeShapes[t.getNodeShape(g)],P=d.srcCornerRadius="auto"===p.pstyle("corner-radius").value?"auto":p.pstyle("corner-radius").pfValue,S=d.tgtCornerRadius="auto"===g.pstyle("corner-radius").value?"auto":g.pstyle("corner-radius").pfValue,B=d.tgtRs=g._private.rscratch,D=d.srcRs=p._private.rscratch;d.dirCounts={north:0,west:0,south:0,east:0,northwest:0,southwest:0,northeast:0,southeast:0};for(var _=0;_=qc||(q=Math.sqrt(Math.max(Y*Y,Yc)+Math.max(j*j,Yc)));var W=d.vector={x:Y,y:j},U=d.vectorNorm={x:W.x/q,y:W.y/q},H={x:-U.y,y:U.x};d.nodesOverlap=!G(q)||C.checkPoint(L[0],L[1],0,E,k,m.x,m.y,S,B)||T.checkPoint(O[0],O[1],0,b,x,y.x,y.y,P,D),d.vectorNormInverse=H,e={nodesOverlap:d.nodesOverlap,dirCounts:d.dirCounts,calculatedIntersection:!0,hasBezier:d.hasBezier,hasUnbundled:d.hasUnbundled,eles:d.eles,srcPos:m,srcRs:B,tgtPos:y,tgtRs:D,srcW:E,srcH:k,tgtW:b,tgtH:x,srcIntn:V,tgtIntn:z,srcShape:C,tgtShape:T,posPts:{x1:X.x2,y1:X.y2,x2:X.x1,y2:X.y1},intersectionPts:{x1:F.x2,y1:F.y2,x2:F.x1,y2:F.y1},vector:{x:-W.x,y:-W.y},vectorNorm:{x:-U.x,y:-U.y},vectorNormInverse:{x:-H.x,y:-H.y}}}var K=N?e:d;M.nodesOverlap=K.nodesOverlap,M.srcIntn=K.srcIntn,M.tgtIntn=K.tgtIntn,M.isRound=R.startsWith("round"),r&&(p.isParent()||p.isChild()||g.isParent()||g.isChild())&&(p.parents().anySame(g)||g.parents().anySame(p)||p.same(g)&&p.isParent())?t.findCompoundLoopPoints(A,K,_,I):p===g?t.findLoopPoints(A,K,_,I):R.endsWith("segments")?t.findSegmentsPoints(A,K):R.endsWith("taxi")?t.findTaxiPoints(A,K):"straight"===R||!I&&d.eles.length%2==1&&_===Math.floor(d.eles.length/2)?t.findStraightEdgePoints(A):t.findBezierPoints(A,K,_,I,N),t.findEndpoints(A),t.tryToCorrectInvalidPoints(A,K),t.checkForInvalidEdgeWarning(A),t.storeAllpts(A),t.storeEdgeProjections(A),t.calculateArrowAngles(A),t.recalculateEdgeLabelProjections(A),t.calculateLabelAngles(A)}},w=0;w0){var J=f,ee=Zt(J,qt(i)),te=Zt(J,qt(Q)),ne=ee;if(te2)Zt(J,{x:Q[2],y:Q[3]})0){var ve=p,ye=Zt(ve,qt(i)),me=Zt(ve,qt(ge)),be=ye;if(me2)Zt(ve,{x:ge[2],y:ge[3]})=u||m){c={cp:g,segment:y};break}}if(c)break}var b=c.cp,x=c.segment,w=(u-h)/x.length,E=x.t1-x.t0,k=s?x.t0+E*w:x.t1-E*w;k=en(0,k,1),t=Jt(b.p0,b.p1,b.p2,k),a=function(e,t,n,r){var a=en(0,r-.001,1),i=en(0,r+.001,1),o=Jt(e,t,n,a),s=Jt(e,t,n,i);return Qc(o,s)}(b.p0,b.p1,b.p2,k);break;case"straight":case"segments":case"haystack":for(var T,C,P,S,B=0,D=r.allpts.length,_=0;_+3=u));_+=2);var A=(u-C)/T;A=en(0,A,1),t=function(e,t,n,r){var a=t.x-e.x,i=t.y-e.y,o=Gt(e,t),s=a/o,l=i/o;return n=null==n?0:n,r=null!=r?r:n*o,{x:e.x+s*r,y:e.y+l*r}}(P,S,A),a=Qc(P,S)}o("labelX",n,t.x),o("labelY",n,t.y),o("labelAutoAngle",n,a)}};u("source"),u("target"),this.applyLabelDimensions(e)}},Zc.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},Zc.applyPrefixedLabelDimensions=function(e,t){var n=e._private,r=this.getLabelText(e,t),a=We(r,e._private.labelDimsKey);if(ft(n.rscratch,"prefixedLabelDimsKey",t)!==a){pt(n.rscratch,"prefixedLabelDimsKey",t,a);var i=this.calculateLabelDimensions(e,r),o=e.pstyle("line-height").pfValue,s=e.pstyle("font-size").pfValue,l=e.pstyle("text-wrap").strValue,u=ft(n.rscratch,"labelWrapCachedLines",t)||[],c="wrap"!==l?1:Math.max(u.length,1),d=s*o,h=i.width,f=i.height+(c-1)*(o-1)*s;pt(n.rstyle,"labelWidth",t,h),pt(n.rscratch,"labelWidth",t,h),pt(n.rstyle,"labelHeight",t,f),pt(n.rscratch,"labelHeight",t,f),pt(n.rscratch,"labelLineHeight",t,d),pt(n.rscratch,"labelActualDescent",t,i.labelActualDescent)}},Zc.getLabelText=function(e,t){var n=e._private,a=t?t+"-":"",i=e.pstyle(a+"label").strValue,o=e.pstyle("text-transform").value,s=function(e,r){return r?(pt(n.rscratch,e,t,r),r):ft(n.rscratch,e,t)};if(!i)return"";"none"==o||("uppercase"==o?i=i.toUpperCase():"lowercase"==o&&(i=i.toLowerCase()));var l=e.pstyle("text-wrap").value;if("wrap"===l){var u=s("labelKey");if(null!=u&&s("labelWrapKey")===u)return s("labelWrapCachedText");for(var c=i.split("\n"),d=e.pstyle("text-max-width").pfValue,h="anywhere"===e.pstyle("text-overflow-wrap").value,f=[],p=/[\s\u200b]+|$/g,g=0;gd){var b,x="",w=0,E=r(v.matchAll(p));try{for(E.s();!(b=E.n()).done;){var k=b.value,T=k[0],C=v.substring(w,k.index);w=k.index+T.length;var P=0===x.length?C:x+C+T;this.calculateLabelDimensions(e,P).width<=d?x+=C+T:(x&&f.push(x),x=C+T)}}catch(e){E.e(e)}finally{E.f()}x.match(/^[\s\u200b]+$/)||f.push(x)}else f.push(v)}s("labelWrapCachedLines",f),i=s("labelWrapCachedText",f.join("\n")),s("labelWrapKey",u)}else if("ellipsis"===l){var S=e.pstyle("text-max-width").pfValue,B="",D=!1;if(this.calculateLabelDimensions(e,i).widthS)break;B+=i[_],_===i.length-1&&(D=!0)}return D||(B+="…"),B}return i},Zc.getLabelJustification=function(e){var t=e.pstyle("text-justification").strValue,n=e.pstyle("text-halign").strValue;return"auto"===t?e.isNode()?function(e){switch(e){case"left":case"right-inside":return"right";case"right":case"left-inside":return"left";default:return"center"}}(n):"center":t},Zc.calculateLabelDimensions=function(e,t){var n=this.cy.window().document,r=e.pstyle("font-style").strValue,a=e.pstyle("font-size").pfValue,i=e.pstyle("font-family").strValue,o=e.pstyle("font-weight").strValue,s=e.pstyle("text-metrics").strValue||"font",l=this.labelCalcCanvas,u=this.labelCalcCanvasContext;if(!l){l=this.labelCalcCanvas=n.createElement("canvas"),u=this.labelCalcCanvasContext=l.getContext("2d");var c=l.style;c.position="absolute",c.left="-9999px",c.top="-9999px",c.zIndex="-1",c.visibility="hidden",c.pointerEvents="none"}u.font="".concat(r," ").concat(o," ").concat(a,"px ").concat(i);for(var d=0,h=0,f=t.split("\n"),p=f.length,g=0,v=0,y=0;y1&&void 0!==arguments[1])||arguments[1];if(t.merge(e),n)for(var r=0;r=e.desktopTapThreshold2}var P=a(t);v&&(e.hoverData.tapholdCancelled=!0);n=!0,r(g,["mousemove","vmousemove","tapdrag"],t,{x:c[0],y:c[1]});var S=function(e){return{originalEvent:t,type:e,position:{x:c[0],y:c[1]}}},B=function(){e.data.bgActivePosistion=void 0,e.hoverData.selecting||o.emit(S("boxstart")),p[4]=1,e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw()};if(3===e.hoverData.which){if(v){var D=S("cxtdrag");b?b.emit(D):o.emit(D),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&g===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.emit(S("cxtdragout")),e.hoverData.cxtOver=g,g&&g.emit(S("cxtdragover")))}}else if(e.hoverData.dragging){if(n=!0,o.panningEnabled()&&o.userPanningEnabled()){var _;if(e.hoverData.justStartedPan){var A=e.hoverData.mdownPos;_={x:(c[0]-A[0])*s,y:(c[1]-A[1])*s},e.hoverData.justStartedPan=!1}else _={x:x[0]*s,y:x[1]*s};o.panBy(_),o.emit(S("dragpan")),e.hoverData.dragged=!0}c=e.projectIntoViewport(t.clientX,t.clientY)}else if(1!=p[4]||null!=b&&!b.pannable()){if(b&&b.pannable()&&b.active()&&b.unactivate(),b&&b.grabbed()||g==y||(y&&r(y,["mouseout","tapdragout"],t,{x:c[0],y:c[1]}),g&&r(g,["mouseover","tapdragover"],t,{x:c[0],y:c[1]}),e.hoverData.last=g),b)if(v){if(o.boxSelectionEnabled()&&P)b&&b.grabbed()&&(d(w),b.emit(S("freeon")),w.emit(S("free")),e.dragData.didDrag&&(b.emit(S("dragfreeon")),w.emit(S("dragfree")))),B();else if(b&&b.grabbed()&&e.nodeIsDraggable(b)){var M=!e.dragData.didDrag;M&&e.redrawHint("eles",!0),e.dragData.didDrag=!0,e.hoverData.draggingEles||u(w,{inDragLayer:!0});var R={x:0,y:0};if(G(x[0])&&G(x[1])&&(R.x+=x[0],R.y+=x[1],M)){var I=e.hoverData.dragDelta;I&&G(I[0])&&G(I[1])&&(R.x+=I[0],R.y+=I[1])}e.hoverData.draggingEles=!0,w.silentShift(R).emit(S("position")).emit(S("drag")),e.redrawHint("drag",!0),e.redraw()}}else!function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(x[0]),t.push(x[1])):(t[0]+=x[0],t[1]+=x[1])}();n=!0}else if(v){if(e.hoverData.dragging||!o.boxSelectionEnabled()||!P&&o.panningEnabled()&&o.userPanningEnabled()){if(!e.hoverData.selecting&&o.panningEnabled()&&o.userPanningEnabled()){i(b,e.hoverData.downs)&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,p[4]=0,e.data.bgActivePosistion=qt(h),e.redrawHint("select",!0),e.redraw())}}else B();b&&b.pannable()&&b.active()&&b.unactivate()}return p[2]=c[0],p[3]=c[1],n?(t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),!1):void 0}}),!1),e.registerBinding(t,"mouseup",(function(t){if((1!==e.hoverData.which||1===t.which||!e.hoverData.capture)&&e.hoverData.capture){e.hoverData.capture=!1;var i=e.cy,o=e.projectIntoViewport(t.clientX,t.clientY),s=e.selection,l=e.findNearestElement(o[0],o[1],!0,!1),u=e.dragData.possibleDragElements,c=e.hoverData.down,h=a(t);e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,c&&c.unactivate();var f=function(e){return{originalEvent:t,type:e,position:{x:o[0],y:o[1]}}};if(3===e.hoverData.which){var p=f("cxttapend");if(c?c.emit(p):i.emit(p),!e.hoverData.cxtDragged){var g=f("cxttap");c?c.emit(g):i.emit(g)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(r(l,["mouseup","tapend","vmouseup"],t,{x:o[0],y:o[1]}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||e.hoverData.isOverThresholdDrag||(r(c,["click","tap","vclick"],t,{x:o[0],y:o[1]}),x=!1,t.timeStamp-w<=i.multiClickDebounceTime()?(b&&clearTimeout(b),x=!0,w=null,r(c,["dblclick","dbltap","vdblclick"],t,{x:o[0],y:o[1]})):(b=setTimeout((function(){x||r(c,["oneclick","onetap","voneclick"],t,{x:o[0],y:o[1]})}),i.multiClickDebounceTime()),w=t.timeStamp)),null!=c||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||a(t)||(i.$(n).unselect(["tapunselect"]),u.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=u=i.collection()),l!=c||e.dragData.didDrag||e.hoverData.selecting||null!=l&&l._private.selectable&&(e.hoverData.dragging||("additive"===i.selectionType()||h?l.selected()?l.unselect(["tapunselect"]):l.select(["tapselect"]):h||(i.$(n).unmerge(l).unselect(["tapunselect"]),l.select(["tapselect"]))),e.redrawHint("eles",!0)),e.hoverData.selecting){var v=i.collection(e.getAllInBox(s[0],s[1],s[2],s[3]));e.redrawHint("select",!0),v.length>0&&e.redrawHint("eles",!0),i.emit(f("boxend"));var y=function(e){return e.selectable()&&!e.selected()};"additive"===i.selectionType()||h||i.$(n).unmerge(v).unselect(),v.emit(f("box")).stdFilter(y).select().emit(f("boxselect")),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!s[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var m=c&&c.grabbed();d(u),m&&(c.emit(f("freeon")),u.emit(f("free")),e.dragData.didDrag&&(c.emit(f("dragfreeon")),u.emit(f("dragfree"))))}}s[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.hoverData.isOverThresholdDrag=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null,e.hoverData.which=null}}),!1);var k,T,C,P,S,B,D,_,A,M,R,I,N,L,z=[],O=1e5,V=function(t){var n=!1,r=t.deltaY;if(null==r&&(null!=t.wheelDeltaY?r=t.wheelDeltaY/4:null!=t.wheelDelta&&(r=t.wheelDelta/4)),0!==r){if(null==k)if(z.length>=4){k=!1;var a,i=z;if(i[0]>=5)a=function(e){for(var t=Math.abs(e[0]),n=1;n0&&(t=Wt(t,e[n]))}return t}(i),a>1&&(k=!0,O=a)}else z.push(Math.abs(r)),n=!0;else k&&(O=Math.min(Math.abs(r),O));if(!e.scrollingPage){var o=e.cy,s=o.zoom(),l=o.pan(),u=e.projectIntoViewport(t.clientX,t.clientY),c=[u[0]*s+l.x,u[1]*s+l.y];if(e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.cxtStarted||0!==e.selection[4])t.preventDefault();else if(o.panningEnabled()&&o.userPanningEnabled()&&o.zoomingEnabled()&&o.userZoomingEnabled()){var d;t.preventDefault(),e.data.wheelZooming=!0,clearTimeout(e.data.wheelTimeout),e.data.wheelTimeout=setTimeout((function(){e.data.wheelZooming=!1,e.redrawHint("eles",!0),e.redraw()}),150),n&&Math.abs(r)>5&&(r=5*Kt(r)),d=r/-250,k&&(d/=O,d*=3),d*=e.wheelSensitivity,1===t.deltaMode&&(d*=33);var h=o.zoom()*Math.pow(10,d);"gesturechange"===t.type&&(h=e.gestureStartZoom*t.scale),o.zoom({level:h,renderedPosition:{x:c[0],y:c[1]}}),o.emit({type:"gesturechange"===t.type?"pinchzoom":"scrollzoom",originalEvent:t,position:{x:u[0],y:u[1]}})}}}};e.registerBinding(e.container,"wheel",V,!0),e.registerBinding(t,"scroll",(function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout((function(){e.scrollingPage=!1}),250)}),!0),e.registerBinding(e.container,"gesturestart",(function(t){e.gestureStartZoom=e.cy.zoom(),e.hasTouchStarted||t.preventDefault()}),!0),e.registerBinding(e.container,"gesturechange",(function(t){e.hasTouchStarted||V(t)}),!0),e.registerBinding(e.container,"mouseout",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseout",position:{x:n[0],y:n[1]}})}),!1),e.registerBinding(e.container,"mouseover",(function(t){var n=e.projectIntoViewport(t.clientX,t.clientY);e.cy.emit({originalEvent:t,type:"mouseover",position:{x:n[0],y:n[1]}})}),!1);var F,X,j,Y,q,W,U,H=function(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))},K=function(e,t,n,r){return(n-e)*(n-e)+(r-t)*(r-t)};if(e.registerBinding(e.container,"touchstart",F=function(t){if(e.hasTouchStarted=!0,m(t)){f(),e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var n=e.cy,a=e.touchData.now,i=e.touchData.earlier;if(t.touches[0]){var o=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);a[0]=o[0],a[1]=o[1]}if(t.touches[1]){o=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);a[2]=o[0],a[3]=o[1]}if(t.touches[2]){o=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);a[4]=o[0],a[5]=o[1]}var l=function(e){return{originalEvent:t,type:e,position:{x:a[0],y:a[1]}}};if(t.touches[1]){e.touchData.singleTouchMoved=!0,d(e.dragData.touchDragEles);var h=e.findContainerClientCoords();M=h[0],R=h[1],I=h[2],N=h[3],T=t.touches[0].clientX-M,C=t.touches[0].clientY-R,P=t.touches[1].clientX-M,S=t.touches[1].clientY-R,L=0<=T&&T<=I&&0<=P&&P<=I&&0<=C&&C<=N&&0<=S&&S<=N;var p=n.pan(),g=n.zoom();B=H(T,C,P,S),D=K(T,C,P,S),A=[((_=[(T+P)/2,(C+S)/2])[0]-p.x)/g,(_[1]-p.y)/g];if(D<4e4&&!t.touches[2]){var v=e.findNearestElement(a[0],a[1],!0,!0),y=e.findNearestElement(a[2],a[3],!0,!0);return v&&v.isNode()?(v.activate().emit(l("cxttapstart")),e.touchData.start=v):y&&y.isNode()?(y.activate().emit(l("cxttapstart")),e.touchData.start=y):n.emit(l("cxttapstart")),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(t.touches[2])n.boxSelectionEnabled()&&t.preventDefault();else if(t.touches[1]);else if(t.touches[0]){var b=e.findNearestElements(a[0],a[1],!0,!0),x=b[0];if(null!=x&&(x.activate(),e.touchData.start=x,e.touchData.starts=b,e.nodeIsGrabbable(x))){var w=e.dragData.touchDragEles=n.collection(),E=null;e.redrawHint("eles",!0),e.redrawHint("drag",!0),x.selected()?(E=n.$((function(t){return t.selected()&&e.nodeIsGrabbable(t)})),u(E,{addToList:w})):c(x,{addToList:w}),s(x),x.emit(l("grabon")),E?E.forEach((function(e){e.emit(l("grab"))})):x.emit(l("grab"))}r(x,["touchstart","tapstart","vmousedown"],t,{x:a[0],y:a[1]}),null==x&&(e.data.bgActivePosistion={x:o[0],y:o[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout((function(){!1!==e.touchData.singleTouchMoved||e.pinching||e.touchData.selecting||r(e.touchData.start,["taphold"],t,{x:a[0],y:a[1]})}),e.tapholdDuration)}if(t.touches.length>=1){for(var k=e.touchData.startPosition=[null,null,null,null,null,null],z=0;z=e.touchTapThreshold2}if(n&&e.touchData.cxt){t.preventDefault();var E=t.touches[0].clientX-M,k=t.touches[0].clientY-R,_=t.touches[1].clientX-M,I=t.touches[1].clientY-R,N=K(E,k,_,I);if(N/D>=2.25||N>=22500){e.touchData.cxt=!1,e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var z=p("cxttapend");e.touchData.start?(e.touchData.start.unactivate().emit(z),e.touchData.start=null):o.emit(z)}}if(n&&e.touchData.cxt){z=p("cxtdrag");e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.emit(z):o.emit(z),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var O=e.findNearestElement(s[0],s[1],!0,!0);e.touchData.cxtOver&&O===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.emit(p("cxtdragout")),e.touchData.cxtOver=O,O&&O.emit(p("cxtdragover")))}else if(n&&t.touches[2]&&o.boxSelectionEnabled())t.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||o.emit(p("boxstart")),e.touchData.selecting=!0,e.touchData.didSelect=!0,a[4]=1,a&&0!==a.length&&void 0!==a[0]?(a[2]=(s[0]+s[2]+s[4])/3,a[3]=(s[1]+s[3]+s[5])/3):(a[0]=(s[0]+s[2]+s[4])/3,a[1]=(s[1]+s[3]+s[5])/3,a[2]=(s[0]+s[2]+s[4])/3+1,a[3]=(s[1]+s[3]+s[5])/3+1),e.redrawHint("select",!0),e.redraw();else if(n&&t.touches[1]&&!e.touchData.didSelect&&o.zoomingEnabled()&&o.panningEnabled()&&o.userZoomingEnabled()&&o.userPanningEnabled()){if(t.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),te=e.dragData.touchDragEles){e.redrawHint("drag",!0);for(var V=0;V0&&!e.hoverData.draggingEles&&!e.swipePanning&&null!=e.data.bgActivePosistion&&(e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.redraw())}},!1),e.registerBinding(t,"touchcancel",j=function(t){var n=e.touchData.start;e.touchData.capture=!1,n&&n.unactivate()}),e.registerBinding(t,"touchend",Y=function(t){var a=e.touchData.start;if(e.touchData.capture){0===t.touches.length&&(e.touchData.capture=!1),t.preventDefault();var i=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var o=e.cy,s=o.zoom(),l=e.touchData.now,u=e.touchData.earlier;if(t.touches[0]){var c=e.projectIntoViewport(t.touches[0].clientX,t.touches[0].clientY);l[0]=c[0],l[1]=c[1]}if(t.touches[1]){c=e.projectIntoViewport(t.touches[1].clientX,t.touches[1].clientY);l[2]=c[0],l[3]=c[1]}if(t.touches[2]){c=e.projectIntoViewport(t.touches[2].clientX,t.touches[2].clientY);l[4]=c[0],l[5]=c[1]}var h,f=function(e){return{originalEvent:t,type:e,position:{x:l[0],y:l[1]}}};if(a&&a.unactivate(),e.touchData.cxt){if(h=f("cxttapend"),a?a.emit(h):o.emit(h),!e.touchData.cxtDragged){var p=f("cxttap");a?a.emit(p):o.emit(p)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!t.touches[2]&&o.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var g=o.collection(e.getAllInBox(i[0],i[1],i[2],i[3]));i[0]=void 0,i[1]=void 0,i[2]=void 0,i[3]=void 0,i[4]=0,e.redrawHint("select",!0),o.emit(f("boxend"));g.emit(f("box")).stdFilter((function(e){return e.selectable()&&!e.selected()})).select().emit(f("boxselect")),g.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=a&&a.unactivate(),t.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(t.touches[1]);else if(t.touches[0]);else if(!t.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var v=e.dragData.touchDragEles;if(null!=a){var y=a._private.grabbed;d(v),e.redrawHint("drag",!0),e.redrawHint("eles",!0),y&&(a.emit(f("freeon")),v.emit(f("free")),e.dragData.didDrag&&(a.emit(f("dragfreeon")),v.emit(f("dragfree")))),r(a,["touchend","tapend","vmouseup","tapdragout"],t,{x:l[0],y:l[1]}),a.unactivate(),e.touchData.start=null}else{var m=e.findNearestElement(l[0],l[1],!0,!0);r(m,["touchend","tapend","vmouseup","tapdragout"],t,{x:l[0],y:l[1]})}var b=e.touchData.startPosition[0]-l[0],x=b*b,w=e.touchData.startPosition[1]-l[1],E=(x+w*w)*s*s;e.touchData.singleTouchMoved||(a||o.$(":selected").unselect(["tapunselect"]),r(a,["tap","vclick"],t,{x:l[0],y:l[1]}),q=!1,t.timeStamp-U<=o.multiClickDebounceTime()?(W&&clearTimeout(W),q=!0,U=null,r(a,["dbltap","vdblclick"],t,{x:l[0],y:l[1]})):(W=setTimeout((function(){q||r(a,["onetap","voneclick"],t,{x:l[0],y:l[1]})}),o.multiClickDebounceTime()),U=t.timeStamp)),null!=a&&!e.dragData.didDrag&&a._private.selectable&&E2){for(var f=[c[0],c[1]],p=Math.pow(f[0]-e,2)+Math.pow(f[1]-t,2),g=1;g0)return g[0]}return null},f=Object.keys(d),p=0;p0?u:fn(a,i,e,t,n,r,o,s)},checkPoint:function(e,t,n,r,a,i,o,s){var l=2*(s="auto"===s?Mn(r,a):s);if(bn(e,t,this.points,i,o,r,a-l,[0,-1],n))return!0;if(bn(e,t,this.points,i,o,r-l,a,[0,-1],n))return!0;var u=r/2+2*n,c=a/2+2*n;return!!mn(e,t,[i-u,o-c,i-u,o,i+u,o,i+u,o-c])||(!!En(e,t,l,l,i+r/2-s,o+a/2-s,n)||!!En(e,t,l,l,i-r/2+s,o+a/2-s,n))}}},sd.registerNodeShapes=function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",Dn(3,0)),this.generateRoundPolygon("round-triangle",Dn(3,0)),this.generatePolygon("rectangle",Dn(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generateCutRectangle(),this.generateBarrel(),this.generateBottomRoundrectangle();var n=[0,1,1,0,0,-1,-1,0];this.generatePolygon("diamond",n),this.generateRoundPolygon("round-diamond",n),this.generatePolygon("pentagon",Dn(5,0)),this.generateRoundPolygon("round-pentagon",Dn(5,0)),this.generatePolygon("hexagon",Dn(6,0)),this.generateRoundPolygon("round-hexagon",Dn(6,0)),this.generatePolygon("heptagon",Dn(7,0)),this.generateRoundPolygon("round-heptagon",Dn(7,0)),this.generatePolygon("octagon",Dn(8,0)),this.generateRoundPolygon("round-octagon",Dn(8,0));var r=new Array(20),a=An(5,0),i=An(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s=e.deqFastCost*g)break}else if(a){if(f>=e.deqCost*l||f>=e.deqAvgCost*s)break}else if(p>=e.deqNoDrawCost*hd)break;var v=e.deq(t,d,c);if(!(v.length>0))break;for(var y=0;y0&&(e.onDeqd(t,u),!a&&e.shouldRedraw(t,u,d,c)&&r())}),a(t))}}},pd=function(){return n((function e(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:et;t(this,e),this.idsByKey=new gt,this.keyForId=new gt,this.cachesByLvl=new gt,this.lvls=[],this.getKey=n,this.doesEleInvalidateKey=r}),[{key:"getIdsFor",value:function(e){null==e&&rt("Can not get id list for null key");var t=this.idsByKey,n=this.idsByKey.get(e);return n||(n=new yt,t.set(e,n)),n}},{key:"addIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).add(t)}},{key:"deleteIdForKey",value:function(e,t){null!=e&&this.getIdsFor(e).delete(t)}},{key:"getNumberOfIdsForKey",value:function(e){return null==e?0:this.getIdsFor(e).size}},{key:"updateKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t),r=this.getKey(e);this.deleteIdForKey(n,t),this.addIdForKey(r,t),this.keyForId.set(t,r)}},{key:"deleteKeyMappingFor",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteIdForKey(n,t),this.keyForId.delete(t)}},{key:"keyHasChangedFor",value:function(e){var t=e.id();return this.keyForId.get(t)!==this.getKey(e)}},{key:"isInvalid",value:function(e){return this.keyHasChangedFor(e)||this.doesEleInvalidateKey(e)}},{key:"getCachesAt",value:function(e){var t=this.cachesByLvl,n=this.lvls,r=t.get(e);return r||(r=new gt,t.set(e,r),n.push(e)),r}},{key:"getCache",value:function(e,t){return this.getCachesAt(t).get(e)}},{key:"get",value:function(e,t){var n=this.getKey(e),r=this.getCache(n,t);return null!=r&&this.updateKeyMappingFor(e),r}},{key:"getForCachedKey",value:function(e,t){var n=this.keyForId.get(e.id());return this.getCache(n,t)}},{key:"hasCache",value:function(e,t){return this.getCachesAt(t).has(e)}},{key:"has",value:function(e,t){var n=this.getKey(e);return this.hasCache(n,t)}},{key:"setCache",value:function(e,t,n){n.key=e,this.getCachesAt(t).set(e,n)}},{key:"set",value:function(e,t,n){var r=this.getKey(e);this.setCache(r,t,n),this.updateKeyMappingFor(e)}},{key:"deleteCache",value:function(e,t){this.getCachesAt(t).delete(e)}},{key:"delete",value:function(e,t){var n=this.getKey(e);this.deleteCache(n,t)}},{key:"invalidateKey",value:function(e){var t=this;this.lvls.forEach((function(n){return t.deleteCache(e,n)}))}},{key:"invalidate",value:function(e){var t=e.id(),n=this.keyForId.get(t);this.deleteKeyMappingFor(e);var r=this.doesEleInvalidateKey(e);return r&&this.invalidateKey(n),r||0===this.getNumberOfIdsForKey(n)}}])}(),gd=7.99,vd={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},yd=ct({getKey:null,doesEleInvalidateKey:et,drawElement:null,getBoundingBox:null,getRotationPoint:null,getRotationOffset:null,isVisible:Je,allowEdgeTxrCaching:!0,allowParentTxrCaching:!0}),md=function(e,t){var n=this;n.renderer=e,n.onDequeues=[];var r=yd(t);ye(n,r),n.lookup=new pd(r.getKey,r.doesEleInvalidateKey),n.setupDequeueing()},bd=md.prototype;bd.reasons=vd,bd.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},bd.getRetiredTextureQueue=function(e){var t=this.eleImgCaches.retired=this.eleImgCaches.retired||{};return t[e]=t[e]||[]},bd.getElementQueue=function(){return this.eleCacheQueue=this.eleCacheQueue||new Bt((function(e,t){return t.reqs-e.reqs}))},bd.getElementKeyToQueue=function(){return this.eleKeyToCacheQueue=this.eleKeyToCacheQueue||{}},bd.getElement=function(e,t,n,r,a){var i=this,o=this.renderer,s=o.cy.zoom(),l=this.lookup;if(!t||0===t.w||0===t.h||isNaN(t.w)||isNaN(t.h)||!e.visible()||e.removed())return null;if(!i.allowEdgeTxrCaching&&e.isEdge()||!i.allowParentTxrCaching&&e.isParent())return null;if(null==r&&(r=Math.ceil(Ht(s*n))),r<-4)r=-4;else if(s>=7.99||r>3)return null;var u=Math.pow(2,r),c=t.h*u,d=t.w*u,h=o.eleTextBiggerThanMin(e,u);if(!this.isVisible(e,h))return null;var f,p=l.get(e,r);if(p&&p.invalidated&&(p.invalidated=!1,p.texture.invalidatedWidth-=p.width),p)return p;if(f=c<=25?25:c<=50?50:50*Math.ceil(c/50),c>1024||d>1024)return null;var g=i.getTextureQueue(f),v=g[g.length-2],y=function(){return i.recycleTexture(f,d)||i.addTexture(f,d)};v||(v=g[g.length-1]),v||(v=y()),v.width-v.usedWidthr;S--)C=i.getElement(e,t,n,S,vd.downscale);P()}else{var B;if(!x&&!w&&!E)for(var D=r-1;D>=-4;D--){var _=l.get(e,D);if(_){B=_;break}}if(b(B))return i.queueElement(e,r),B;v.context.translate(v.usedWidth,0),v.context.scale(u,u),this.drawElement(v.context,e,t,h,!1),v.context.scale(1/u,1/u),v.context.translate(-v.usedWidth,0)}return p={x:v.usedWidth,texture:v,level:r,scale:u,width:d,height:c,scaledLabelShown:h},v.usedWidth+=Math.ceil(d+8),v.eleCaches.push(p),l.set(e,r,p),i.checkTextureFullness(v),p},bd.invalidateElements=function(e){for(var t=0;t=.2*e.width&&this.retireTexture(e)},bd.checkTextureFullness=function(e){var t=this.getTextureQueue(e.height);e.usedWidth/e.width>.8&&e.fullnessChecks>=10?dt(t,e):e.fullnessChecks++},bd.retireTexture=function(e){var t=e.height,n=this.getTextureQueue(t),r=this.lookup;dt(n,e),e.retired=!0;for(var a=e.eleCaches,i=0;i=t)return i.retired=!1,i.usedWidth=0,i.invalidatedWidth=0,i.fullnessChecks=0,ht(i.eleCaches),i.context.setTransform(1,0,0,1,0,0),i.context.clearRect(0,0,i.width,i.height),dt(r,i),n.push(i),i}},bd.queueElement=function(e,t){var n=this.getElementQueue(),r=this.getElementKeyToQueue(),a=this.getKey(e),i=r[a];if(i)i.level=Math.max(i.level,t),i.eles.merge(e),i.reqs++,n.updateItem(i);else{var o={eles:e.spawn().merge(e),level:t,reqs:1,key:a};n.push(o),r[a]=o}},bd.dequeue=function(e){for(var t=this,n=t.getElementQueue(),r=t.getElementKeyToQueue(),a=[],i=t.lookup,o=0;o<1&&n.size()>0;o++){var s=n.pop(),l=s.key,u=s.eles[0],c=i.hasCache(u,s.level);if(r[l]=null,!c){a.push(s);var d=t.getBoundingBox(u);t.getElement(u,d,e,s.level,vd.dequeue)}}return a},bd.removeFromQueue=function(e){var t=this.getElementQueue(),n=this.getElementKeyToQueue(),r=this.getKey(e),a=n[r];null!=a&&(1===a.eles.length?(a.reqs=Qe,t.updateItem(a),t.pop(),n[r]=null):a.eles.unmerge(e))},bd.onDequeue=function(e){this.onDequeues.push(e)},bd.offDequeue=function(e){dt(this.onDequeues,e)},bd.setupDequeueing=fd({deqRedrawThreshold:100,deqCost:.15,deqAvgCost:.1,deqNoDrawCost:.9,deqFastCost:.9,deq:function(e,t,n){return e.dequeue(t,n)},onDeqd:function(e,t){for(var n=0;n=3.99||n>2)return null;r.validateLayersElesOrdering(n,e);var o,s,l=r.layersByLevel,u=Math.pow(2,n),c=l[n]=l[n]||[];if(r.levelIsComplete(n,e))return c;!function(){var t=function(t){if(r.validateLayersElesOrdering(t,e),r.levelIsComplete(t,e))return s=l[t],!0},a=function(e){if(!s)for(var r=n+e;-4<=r&&r<=2&&!t(r);r+=e);};a(1),a(-1);for(var i=c.length-1;i>=0;i--){var o=c[i];o.invalid&&dt(c,o)}}();var d=function(t){var a=(t=t||{}).after;!function(){if(!o){o=tn();for(var t=0;t32767||s>32767)return null;if(i*s>16e6)return null;var l=r.makeLayer(o,n);if(null!=a){var d=c.indexOf(a)+1;c.splice(d,0,l)}else(void 0===t.insert||t.insert)&&c.unshift(l);return l};if(r.skipping&&!i)return null;for(var h=null,f=e.length/1,p=!i,g=0;g=f||!cn(h.bb,v.boundingBox()))&&!(h=d({insert:!0,after:h})))return null;s||p?r.queueLayer(h,v):r.drawEleInLayer(h,v,n,t),h.eles.push(v),m[n]=h}}return s||(p?null:c)},wd.getEleLevelForLayerLevel=function(e,t){return e},wd.drawEleInLayer=function(e,t,n,r){var a=this.renderer,i=e.context,o=t.boundingBox();0!==o.w&&0!==o.h&&t.visible()&&(n=this.getEleLevelForLayerLevel(n,r),a.setImgSmoothing(i,!1),a.drawCachedElement(i,t,null,null,n,true),a.setImgSmoothing(i,!0))},wd.levelIsComplete=function(e,t){var n=this.layersByLevel[e];if(!n||0===n.length)return!1;for(var r=0,a=0;a0)return!1;if(i.invalid)return!1;r+=i.eles.length}return r===t.length},wd.validateLayersElesOrdering=function(e,t){var n=this.layersByLevel[e];if(n)for(var r=0;r0){e=!0;break}}return e},wd.invalidateElements=function(e){var t=this;0!==e.length&&(t.lastInvalidationTime=Le(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,(function(e,n,r){t.invalidateLayer(e)})))},wd.invalidateLayer=function(e){if(this.lastInvalidationTime=Le(),!e.invalid){var t=e.level,n=e.eles,r=this.layersByLevel[t];dt(r,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var a=0;a3&&void 0!==arguments[3])||arguments[3],a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],o=this,s=t._private.rscratch;if((!i||t.visible())&&!s.badLine&&null!=s.allpts&&!isNaN(s.allpts[0])){var l;n&&(l=n,e.translate(-l.x1,-l.y1));var u=i?t.pstyle("opacity").value:1,c=i?t.pstyle("line-opacity").value:1,d=t.pstyle("curve-style").value,h=t.pstyle("line-style").value,f=t.pstyle("width").pfValue,p=t.pstyle("line-cap").value,g=t.pstyle("line-outline-width").value,v=t.pstyle("line-outline-color").value,y=u*c,m=u*c,b=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:y;"straight-triangle"===d?(o.eleStrokeStyle(e,t,n),o.drawEdgeTrianglePath(t,e,s.allpts)):(e.lineWidth=f,e.lineCap=p,o.eleStrokeStyle(e,t,n),o.drawEdgePath(t,e,s.allpts,h),e.lineCap="butt")},x=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:m;o.drawArrowheads(e,t,n)};if(e.lineJoin="round","yes"===t.pstyle("ghost").value){var w=t.pstyle("ghost-offset-x").pfValue,E=t.pstyle("ghost-offset-y").pfValue,k=t.pstyle("ghost-opacity").value,T=y*k;e.translate(w,E),b(T),x(T),e.translate(-w,-E)}else!function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:y;e.lineWidth=f+g,e.lineCap=p,g>0?(o.colorStrokeStyle(e,v[0],v[1],v[2],n),"straight-triangle"===d?o.drawEdgeTrianglePath(t,e,s.allpts):(o.drawEdgePath(t,e,s.allpts,h),e.lineCap="butt")):e.lineCap="butt"}();a&&o.drawEdgeUnderlay(e,t),b(),x(),a&&o.drawEdgeOverlay(e,t),o.drawElementText(e,t,null,r),n&&e.translate(l.x1,l.y1)}}},Vd=function(e){if(!["overlay","underlay"].includes(e))throw new Error("Invalid state");return function(t,n){if(n.visible()){var r=n.pstyle("".concat(e,"-opacity")).value;if(0!==r){var a=this,i=a.usePaths(),o=n._private.rscratch,s=2*n.pstyle("".concat(e,"-padding")).pfValue,l=n.pstyle("".concat(e,"-color")).value;t.lineWidth=s,"self"!==o.edgeType||i?t.lineCap="round":t.lineCap="butt",a.colorStrokeStyle(t,l[0],l[1],l[2],r),a.drawEdgePath(n,t,o.allpts,"solid")}}}};Od.drawEdgeOverlay=Vd("overlay"),Od.drawEdgeUnderlay=Vd("underlay"),Od.drawEdgePath=function(e,t,n,a){var i,o=e._private.rscratch,s=t,l=!1,u=this.usePaths(),c=e.pstyle("line-dash-pattern").pfValue,d=e.pstyle("line-dash-offset").pfValue;if(u){var h=n.join("$");o.pathCacheKey&&o.pathCacheKey===h?(i=t=o.pathCache,l=!0):(i=t=new Path2D,o.pathCacheKey=h,o.pathCache=i)}if(s.setLineDash)switch(a){case"dotted":s.setLineDash([1,1]);break;case"dashed":s.setLineDash(c),s.lineDashOffset=d;break;case"solid":s.setLineDash([])}if(!l&&!o.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(n[0],n[1]),o.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var f=2;f+35&&void 0!==arguments[5]?arguments[5]:5,o=Math.min(i,r/2,a/2);e.beginPath(),e.moveTo(t+o,n),e.lineTo(t+r-o,n),e.quadraticCurveTo(t+r,n,t+r,n+o),e.lineTo(t+r,n+a-o),e.quadraticCurveTo(t+r,n+a,t+r-o,n+a),e.lineTo(t+o,n+a),e.quadraticCurveTo(t,n+a,t,n+a-o),e.lineTo(t,n+o),e.quadraticCurveTo(t,n,t+o,n),e.closePath()}Xd.eleTextBiggerThanMin=function(e,t){if(!t){var n=e.cy().zoom(),r=this.getPixelRatio(),a=Math.ceil(Ht(n*r));t=Math.pow(2,a)}return!(e.pstyle("font-size").pfValue*t5&&void 0!==arguments[5])||arguments[5],o=this;if(null==r){if(i&&!o.eleTextBiggerThanMin(t))return}else if(!1===r)return;if(t.isNode()){var s=t.pstyle("label");if(!s||!s.value)return;var l=o.getLabelJustification(t),u="glyph"===t.pstyle("text-metrics").strValue;e.textAlign=l,e.textBaseline=u?"alphabetic":"bottom"}else{var c=t.element()._private.rscratch.badLine,d=t.pstyle("label"),h=t.pstyle("source-label"),f=t.pstyle("target-label");if(c||(!d||!d.value)&&(!h||!h.value)&&(!f||!f.value))return;e.textAlign="center",e.textBaseline="bottom"}var p,g=!n;n&&(p=n,e.translate(-p.x1,-p.y1)),null==a?(o.drawText(e,t,null,g,i),t.isEdge()&&(o.drawText(e,t,"source",g,i),o.drawText(e,t,"target",g,i))):o.drawText(e,t,a,g,i),n&&e.translate(p.x1,p.y1)},Xd.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var n=0;n2&&void 0!==arguments[2])||arguments[2],r=t.pstyle("font-style").strValue,a=t.pstyle("font-size").pfValue+"px",i=t.pstyle("font-family").strValue,o=t.pstyle("font-weight").strValue,s=n?t.effectiveOpacity()*t.pstyle("text-opacity").value:1,l=t.pstyle("text-outline-opacity").value*s,u=t.pstyle("color").value,c=t.pstyle("text-outline-color").value;e.font=r+" "+o+" "+a+" "+i,e.lineJoin="round",this.colorFillStyle(e,u[0],u[1],u[2],s),this.colorStrokeStyle(e,c[0],c[1],c[2],l)},Xd.getTextAngle=function(e,t){var n,r=e._private.rscratch,a=t?t+"-":"",i=e.pstyle(a+"text-rotation");if("autorotate"===i.strValue){var o=ft(r,"labelAngle",t);n=e.isEdge()?o:0}else n="none"===i.strValue?0:i.pfValue;return n},Xd.drawText=function(e,t,n){var r=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=t._private.rscratch,o=a?t.effectiveOpacity():1;if(!a||0!==o&&0!==t.pstyle("text-opacity").value){"main"===n&&(n=null);var s,l,u=ft(i,"labelX",n),c=ft(i,"labelY",n),d=this.getLabelText(t,n);if(null!=d&&""!==d&&!isNaN(u)&&!isNaN(c)){this.setupTextStyle(e,t,a);var h,f=n?n+"-":"",p=ft(i,"labelWidth",n),g=ft(i,"labelHeight",n),v=ft(i,"labelActualDescent",n),y=t.pstyle(f+"text-margin-x").pfValue,m=t.pstyle(f+"text-margin-y").pfValue,b=t.isEdge(),x=t.pstyle("text-halign").value,w=t.pstyle("text-valign").value;b&&(x="center",w="center"),u+=y,c+=m,0!==(h=r?this.getTextAngle(t,n):0)&&(s=u,l=c,e.translate(s,l),e.rotate(h),u=0,c=0);var E=Bs(x),k=Ds(w);switch(k){case"top":break;case"center":c+=g/2;break;case"bottom":c+=g}var T=t.pstyle("text-background-opacity").value,C=t.pstyle("text-border-opacity").value,P=t.pstyle("text-border-width").pfValue,S=t.pstyle("text-background-padding").pfValue,B=t.pstyle("text-background-shape").strValue,D="round-rectangle"===B||"roundrectangle"===B,_="circle"===B;if(T>0||P>0&&C>0){var A=e.fillStyle,M=e.strokeStyle,R=e.lineWidth,I=t.pstyle("text-background-color").value,N=t.pstyle("text-border-color").value,L=t.pstyle("text-border-style").value,z=T>0,O=P>0&&C>0,V=u-S;switch(E){case"left":V-=p;break;case"center":V-=p/2}var F=c-g-S,X=p+2*S,j=g+2*S;if(z&&(e.fillStyle="rgba(".concat(I[0],",").concat(I[1],",").concat(I[2],",").concat(T*o,")")),O&&(e.strokeStyle="rgba(".concat(N[0],",").concat(N[1],",").concat(N[2],",").concat(C*o,")"),e.lineWidth=P,e.setLineDash))switch(L){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=P/4,e.setLineDash([]);break;default:e.setLineDash([])}if(D?(e.beginPath(),jd(e,V,F,X,j,2)):_?(e.beginPath(),function(e,t,n,r,a){var i=Math.min(r,a)/2,o=t+r/2,s=n+a/2;e.beginPath(),e.arc(o,s,i,0,2*Math.PI),e.closePath()}(e,V,F,X,j)):(e.beginPath(),e.rect(V,F,X,j)),z&&e.fill(),O&&e.stroke(),O&&"double"===L){var Y=P/2;e.beginPath(),D?jd(e,V+Y,F+Y,X-2*Y,j-2*Y,2):e.rect(V+Y,F+Y,X-2*Y,j-2*Y),e.stroke()}e.fillStyle=A,e.strokeStyle=M,e.lineWidth=R,e.setLineDash&&e.setLineDash([])}var q=2*t.pstyle("text-outline-width").pfValue;if(q>0&&(e.lineWidth=q),c-=v,"wrap"===t.pstyle("text-wrap").value){var W=ft(i,"labelWrapCachedLines",n),U=ft(i,"labelLineHeight",n),H=p/2,K=this.getLabelJustification(t);switch("auto"===K||("left"===E?"left"===K?u+=-p:"center"===K&&(u+=-H):"center"===E?"left"===K?u+=-H:"right"===K&&(u+=H):"right"===E&&("center"===K?u+=H:"right"===K&&(u+=p))),k){case"top":case"center":case"bottom":c-=(W.length-1)*U}for(var G=0;G0&&e.strokeText(W[G],u,c),e.fillText(W[G],u,c),c+=U}else q>0&&e.strokeText(d,u,c),e.fillText(d,u,c);0!==h&&(e.rotate(-h),e.translate(-s,-l))}}};var Yd={drawNode:function(e,t,n){var r,a,i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=!(arguments.length>5&&void 0!==arguments[5])||arguments[5],l=this,u=t._private,c=u.rscratch,d=t.position();if(G(d.x)&&G(d.y)&&(!s||t.visible())){var h,f,p=s?t.effectiveOpacity():1,g=l.usePaths(),v=!1,y=t.padding();r=t.width()+2*y,a=t.height()+2*y,n&&(f=n,e.translate(-f.x1,-f.y1));for(var m=t.pstyle("background-image").value,b=new Array(m.length),x=new Array(m.length),w=0,E=0;E0&&void 0!==arguments[0]?arguments[0]:S;l.eleFillStyle(e,t,n)},Y=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:N;l.colorStrokeStyle(e,B[0],B[1],B[2],t)},q=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:V;l.colorStrokeStyle(e,z[0],z[1],z[2],t)},W=function(e,t,n,r){var a,i=l.nodePathCache=l.nodePathCache||[],o=Ue("polygon"===n?n+","+r.join(","):n,""+t,""+e,""+X),s=i[o],u=!1;return null!=s?(a=s,u=!0,c.pathCache=a):(a=new Path2D,i[o]=c.pathCache=a),{path:a,cacheHit:u}},U=t.pstyle("shape").strValue,H=t.pstyle("shape-polygon-points").pfValue;if(g){e.translate(d.x,d.y);var K=W(r,a,U,H);h=K.path,v=K.cacheHit}var Z=function(){if(!v){var n=d;g&&(n={x:0,y:0}),l.nodeShapes[l.getNodeShape(t)].draw(h||e,n.x,n.y,r,a,X,c)}g?e.fill(h):e.fill()},$=function(){for(var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p,r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=u.backgrounding,i=0,o=0;o0&&void 0!==arguments[0]&&arguments[0],i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;l.hasPie(t)&&(l.drawPie(e,t,i),n&&(g||l.nodeShapes[l.getNodeShape(t)].draw(e,d.x,d.y,r,a,X,c)))},J=function(){var n=arguments.length>0&&void 0!==arguments[0]&&arguments[0],i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;l.hasStripe(t)&&(e.save(),g?e.clip(c.pathCache):(l.nodeShapes[l.getNodeShape(t)].draw(e,d.x,d.y,r,a,X,c),e.clip()),l.drawStripe(e,t,i),e.restore(),n&&(g||l.nodeShapes[l.getNodeShape(t)].draw(e,d.x,d.y,r,a,X,c)))},ee=function(){var t=(C>0?C:-C)*(arguments.length>0&&void 0!==arguments[0]?arguments[0]:p),n=C>0?0:255;0!==C&&(l.colorFillStyle(e,n,n,n,t),g?e.fill(h):e.fill())},te=function(){if(P>0){if(e.lineWidth=P,e.lineCap=A,e.lineJoin=_,e.setLineDash)switch(D){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash(R),e.lineDashOffset=I;break;case"solid":case"double":e.setLineDash([])}if("center"!==M){if(e.save(),e.lineWidth*=2,"inside"===M)g?e.clip(h):e.clip();else{var t=new Path2D;t.rect(-r/2-P,-a/2-P,r+2*P,a+2*P),t.addPath(h),e.clip(t,"evenodd")}g?e.stroke(h):e.stroke(),e.restore()}else g?e.stroke(h):e.stroke();if("double"===D){e.lineWidth=P/3;var n=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",g?e.stroke(h):e.stroke(),e.globalCompositeOperation=n}e.setLineDash&&e.setLineDash([])}},ne=function(){if(L>0){if(e.lineWidth=L,e.lineCap="butt",e.setLineDash)switch(O){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}var n=d;g&&(n={x:0,y:0});var i=l.getNodeShape(t),o=P;"inside"===M&&(o=0),"outside"===M&&(o*=2);var s,u=(r+o+(L+F))/r,c=(a+o+(L+F))/a,h=r*u,f=a*c,p=l.nodeShapes[i].points;if(g)s=W(h,f,i,p).path;if("ellipse"===i)l.drawEllipsePath(s||e,n.x,n.y,h,f);else if(["round-diamond","round-heptagon","round-hexagon","round-octagon","round-pentagon","round-polygon","round-triangle","round-tag"].includes(i)){var v=0,y=0,m=0;"round-diamond"===i?v=1.4*(o+F+L):"round-heptagon"===i?(v=1.075*(o+F+L),m=-(o/2+F+L)/35):"round-hexagon"===i?v=1.12*(o+F+L):"round-pentagon"===i?(v=1.13*(o+F+L),m=-(o/2+F+L)/15):"round-tag"===i?(v=1.12*(o+F+L),y=.07*(o/2+L+F)):"round-triangle"===i&&(v=(o+F+L)*(Math.PI/2),m=-(o+F/2+L)/Math.PI),0!==v&&(h=r*(u=(r+v)/r),["round-hexagon","round-tag"].includes(i)||(f=a*(c=(a+v)/a)));for(var b=h/2,x=f/2,w=(X="auto"===X?Rn(h,f):X)+(o+L+F)/2,E=new Array(p.length/2),k=new Array(p.length/2),T=0;T0){if(r=r||n.position(),null==a||null==i){var d=n.padding();a=n.width()+2*d,i=n.height()+2*d}this.colorFillStyle(t,l[0],l[1],l[2],s),this.nodeShapes[u].draw(t,r.x,r.y,a+2*o,i+2*o,c),t.fill()}}}};Yd.drawNodeOverlay=qd("overlay"),Yd.drawNodeUnderlay=qd("underlay"),Yd.hasPie=function(e){return(e=e[0])._private.hasPie},Yd.hasStripe=function(e){return(e=e[0])._private.hasStripe},Yd.drawPie=function(e,t,n,r){t=t[0],r=r||t.position();var a,i=t.cy().style(),o=t.pstyle("pie-size"),s=t.pstyle("pie-hole"),l=t.pstyle("pie-start-angle").pfValue,u=r.x,c=r.y,d=t.width(),h=t.height(),f=Math.min(d,h)/2,p=0;if(this.usePaths()&&(u=0,c=0),"%"===o.units?f*=o.pfValue:void 0!==o.pfValue&&(f=o.pfValue/2),"%"===s.units?a=f*s.pfValue:void 0!==s.pfValue&&(a=s.pfValue/2),!(a>=f))for(var g=1;g<=i.pieBackgroundN;g++){var v=t.pstyle("pie-"+g+"-background-size").value,y=t.pstyle("pie-"+g+"-background-color").value,m=t.pstyle("pie-"+g+"-background-opacity").value*n,b=v/100;b+p>1&&(b=1-p);var x=1.5*Math.PI+2*Math.PI*p,w=(x+=l)+2*Math.PI*b;0===v||p>=1||p+b>1||(0===a?(e.beginPath(),e.moveTo(u,c),e.arc(u,c,f,x,w),e.closePath()):(e.beginPath(),e.arc(u,c,f,x,w),e.arc(u,c,a,w,x,!0),e.closePath()),this.colorFillStyle(e,y[0],y[1],y[2],m),e.fill(),p+=b)}},Yd.drawStripe=function(e,t,n,r){t=t[0],r=r||t.position();var a=t.cy().style(),i=r.x,o=r.y,s=t.width(),l=t.height(),u=0,c=this.usePaths();e.save();var d=t.pstyle("stripe-direction").value,h=t.pstyle("stripe-size");switch(d){case"vertical":break;case"righward":e.rotate(-Math.PI/2)}var f=s,p=l;"%"===h.units?(f*=h.pfValue,p*=h.pfValue):void 0!==h.pfValue&&(f=h.pfValue,p=h.pfValue),c&&(i=0,o=0),o-=f/2,i-=p/2;for(var g=1;g<=a.stripeBackgroundN;g++){var v=t.pstyle("stripe-"+g+"-background-size").value,y=t.pstyle("stripe-"+g+"-background-color").value,m=t.pstyle("stripe-"+g+"-background-opacity").value*n,b=v/100;b+u>1&&(b=1-u),0===v||u>=1||u+b>1||(e.beginPath(),e.rect(i,o+p*u,f,p*b),e.closePath(),this.colorFillStyle(e,y[0],y[1],y[2],m),e.fill(),u+=b)}e.restore()};var Wd,Ud={};function Hd(e,t,n){var r=e.createShader(t);if(e.shaderSource(r,n),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS))throw new Error(e.getShaderInfoLog(r));return r}function Kd(e,t,n){void 0===n&&(n=t);var r=e.makeOffscreenCanvas(t,n),a=r.context=r.getContext("2d");return r.clear=function(){return a.clearRect(0,0,r.width,r.height)},r.clear(),r}function Gd(e){var t=e.pixelRatio,n=e.cy.zoom(),r=e.cy.pan();return{zoom:n*t,pan:{x:r.x*t,y:r.y*t}}}function Zd(e,t){return!!t.picking||"solid"===e.pstyle("background-fill").value&&("none"===e.pstyle("background-image").strValue&&(0===e.pstyle("border-width").value||(0===e.pstyle("border-opacity").value||"solid"===e.pstyle("border-style").value)))}function $d(e,t){if(e.length!==t.length)return!1;for(var n=0;n>8&255)/255,n[2]=(e>>16&255)/255,n[3]=(e>>24&255)/255,n}function eh(e){return e[0]+(e[1]<<8)+(e[2]<<16)+(e[3]<<24)}function th(e,t){switch(t){case"float":return[1,e.FLOAT,4];case"vec2":return[2,e.FLOAT,4];case"vec3":return[3,e.FLOAT,4];case"vec4":return[4,e.FLOAT,4];case"int":return[1,e.INT,4];case"ivec2":return[2,e.INT,4]}}function nh(e,t,n){switch(t){case e.FLOAT:return new Float32Array(n);case e.INT:return new Int32Array(n)}}function rh(e,t,n,r,a,i){switch(t){case e.FLOAT:return new Float32Array(n.buffer,i*r,a);case e.INT:return new Int32Array(n.buffer,i*r,a)}}function ah(e,t,n,r){var a=i(th(e,n),3),o=a[0],s=a[1],l=a[2],u=nh(e,s,t*o),c=o*l,d=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,d),e.bufferData(e.ARRAY_BUFFER,t*c,e.DYNAMIC_DRAW),e.enableVertexAttribArray(r),s===e.FLOAT?e.vertexAttribPointer(r,o,s,!1,c,0):s===e.INT&&e.vertexAttribIPointer(r,o,s,c,0),e.vertexAttribDivisor(r,1),e.bindBuffer(e.ARRAY_BUFFER,null);for(var h=new Array(t),f=0;ft.minMbLowQualFrames&&(t.motionBlurPxRatio=t.mbPxRBlurry)),t.clearingMotionBlur&&(t.motionBlurPxRatio=1),t.textureDrawLastFrame&&!d&&(c[t.NODE]=!0,c[t.SELECT_BOX]=!0);var m=n.style(),b=n.zoom(),x=void 0!==o?o:b,w=n.pan(),E={x:w.x,y:w.y},k={zoom:b,pan:{x:w.x,y:w.y}},T=t.prevViewport;void 0===T||k.zoom!==T.zoom||k.pan.x!==T.pan.x||k.pan.y!==T.pan.y||g&&!p||(t.motionBlurPxRatio=1),s&&(E=s),x*=l,E.x*=l,E.y*=l;var C=t.getCachedZSortedEles();function P(e,n,r,a,i){var o=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",t.colorFillStyle(e,255,255,255,t.motionBlurTransparency),e.fillRect(n,r,a,i),e.globalCompositeOperation=o}function S(e,n){var i,l,c,d;t.clearingMotionBlur||e!==u.bufferContexts[t.MOTIONBLUR_BUFFER_NODE]&&e!==u.bufferContexts[t.MOTIONBLUR_BUFFER_DRAG]?(i=E,l=x,c=t.canvasWidth,d=t.canvasHeight):(i={x:w.x*f,y:w.y*f},l=b*f,c=t.canvasWidth*f,d=t.canvasHeight*f),e.setTransform(1,0,0,1,0,0),"motionBlur"===n?P(e,0,0,c,d):r||void 0!==n&&!n||e.clearRect(0,0,c,d),a||(e.translate(i.x,i.y),e.scale(l,l)),s&&e.translate(s.x,s.y),o&&e.scale(o,o)}if(d||(t.textureDrawLastFrame=!1),d){if(t.textureDrawLastFrame=!0,!t.textureCache){t.textureCache={},t.textureCache.bb=n.mutableElements().boundingBox(),t.textureCache.texture=t.data.bufferCanvases[t.TEXTURE_BUFFER];var B=t.data.bufferContexts[t.TEXTURE_BUFFER];B.setTransform(1,0,0,1,0,0),B.clearRect(0,0,t.canvasWidth*t.textureMult,t.canvasHeight*t.textureMult),t.render({forcedContext:B,drawOnlyNodeLayer:!0,forcedPxRatio:l*t.textureMult}),(k=t.textureCache.viewport={zoom:n.zoom(),pan:n.pan(),width:t.canvasWidth,height:t.canvasHeight}).mpan={x:(0-k.pan.x)/k.zoom,y:(0-k.pan.y)/k.zoom}}c[t.DRAG]=!1,c[t.NODE]=!1;var D=u.contexts[t.NODE],_=t.textureCache.texture;k=t.textureCache.viewport;D.setTransform(1,0,0,1,0,0),h?P(D,0,0,k.width,k.height):D.clearRect(0,0,k.width,k.height);var A=m.core("outside-texture-bg-color").value,M=m.core("outside-texture-bg-opacity").value;t.colorFillStyle(D,A[0],A[1],A[2],M),D.fillRect(0,0,k.width,k.height);b=n.zoom();S(D,!1),D.clearRect(k.mpan.x,k.mpan.y,k.width/k.zoom/l,k.height/k.zoom/l),D.drawImage(_,k.mpan.x,k.mpan.y,k.width/k.zoom/l,k.height/k.zoom/l)}else t.textureOnViewport&&!r&&(t.textureCache=null);var R=n.extent(),I=t.pinching||t.hoverData.dragging||t.swipePanning||t.data.wheelZooming||t.hoverData.draggingEles||t.cy.animated(),N=t.hideEdgesOnViewport&&I,L=[];if(L[t.NODE]=!c[t.NODE]&&h&&!t.clearedForMotionBlur[t.NODE]||t.clearingMotionBlur,L[t.NODE]&&(t.clearedForMotionBlur[t.NODE]=!0),L[t.DRAG]=!c[t.DRAG]&&h&&!t.clearedForMotionBlur[t.DRAG]||t.clearingMotionBlur,L[t.DRAG]&&(t.clearedForMotionBlur[t.DRAG]=!0),c[t.NODE]||a||i||L[t.NODE]){var z=h&&!L[t.NODE]&&1!==f;S(D=r||(z?t.data.bufferContexts[t.MOTIONBLUR_BUFFER_NODE]:u.contexts[t.NODE]),h&&!z?"motionBlur":void 0),N?t.drawCachedNodes(D,C.nondrag,l,R):t.drawLayeredElements(D,C.nondrag,l,R),t.debug&&t.drawDebugPoints(D,C.nondrag),a||h||(c[t.NODE]=!1)}if(!i&&(c[t.DRAG]||a||L[t.DRAG])){z=h&&!L[t.DRAG]&&1!==f;S(D=r||(z?t.data.bufferContexts[t.MOTIONBLUR_BUFFER_DRAG]:u.contexts[t.DRAG]),h&&!z?"motionBlur":void 0),N?t.drawCachedNodes(D,C.drag,l,R):t.drawCachedElements(D,C.drag,l,R),t.debug&&t.drawDebugPoints(D,C.drag),a||h||(c[t.DRAG]=!1)}if(this.drawSelectionRectangle(e,S),h&&1!==f){var O=u.contexts[t.NODE],V=t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE],F=u.contexts[t.DRAG],X=t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG],j=function(e,n,r){e.setTransform(1,0,0,1,0,0),r||!y?e.clearRect(0,0,t.canvasWidth,t.canvasHeight):P(e,0,0,t.canvasWidth,t.canvasHeight);var a=f;e.drawImage(n,0,0,t.canvasWidth*a,t.canvasHeight*a,0,0,t.canvasWidth,t.canvasHeight)};(c[t.NODE]||L[t.NODE])&&(j(O,V,L[t.NODE]),c[t.NODE]=!1),(c[t.DRAG]||L[t.DRAG])&&(j(F,X,L[t.DRAG]),c[t.DRAG]=!1)}t.prevViewport=k,t.clearingMotionBlur&&(t.clearingMotionBlur=!1,t.motionBlurCleared=!0,t.motionBlur=!0),h&&(t.motionBlurTimeout=setTimeout((function(){t.motionBlurTimeout=null,t.clearedForMotionBlur[t.NODE]=!1,t.clearedForMotionBlur[t.DRAG]=!1,t.motionBlur=!1,t.clearingMotionBlur=!d,t.mbFrames=0,c[t.NODE]=!0,c[t.DRAG]=!0,t.redraw()}),100)),r||n.emit("render")},Ud.drawSelectionRectangle=function(e,t){var n=this,r=n.cy,a=n.data,i=r.style(),o=e.drawOnlyNodeLayer,s=e.drawAllLayers,l=a.canvasNeedsRedraw,u=e.forcedContext;if(n.showFps||!o&&l[n.SELECT_BOX]&&!s){var c=u||a.contexts[n.SELECT_BOX];if(t(c),1==n.selection[4]&&(n.hoverData.selecting||n.touchData.selecting)){var d=n.cy.zoom(),h=i.core("selection-box-border-width").value/d;c.lineWidth=h,c.fillStyle="rgba("+i.core("selection-box-color").value[0]+","+i.core("selection-box-color").value[1]+","+i.core("selection-box-color").value[2]+","+i.core("selection-box-opacity").value+")",c.fillRect(n.selection[0],n.selection[1],n.selection[2]-n.selection[0],n.selection[3]-n.selection[1]),h>0&&(c.strokeStyle="rgba("+i.core("selection-box-border-color").value[0]+","+i.core("selection-box-border-color").value[1]+","+i.core("selection-box-border-color").value[2]+","+i.core("selection-box-opacity").value+")",c.strokeRect(n.selection[0],n.selection[1],n.selection[2]-n.selection[0],n.selection[3]-n.selection[1]))}if(a.bgActivePosistion&&!n.hoverData.selecting){d=n.cy.zoom();var f=a.bgActivePosistion;c.fillStyle="rgba("+i.core("active-bg-color").value[0]+","+i.core("active-bg-color").value[1]+","+i.core("active-bg-color").value[2]+","+i.core("active-bg-opacity").value+")",c.beginPath(),c.arc(f.x,f.y,i.core("active-bg-size").pfValue/d,0,2*Math.PI),c.fill()}var p=n.lastRedrawTime;if(n.showFps&&p){p=Math.round(p);var g=Math.round(1e3/p),v="1 frame = "+p+" ms = "+g+" fps";if(c.setTransform(1,0,0,1,0,0),c.fillStyle="rgba(255, 0, 0, 0.75)",c.strokeStyle="rgba(255, 0, 0, 0.75)",c.font="30px Arial",!Wd){var y=c.measureText(v);Wd=y.actualBoundingBoxAscent}c.fillText(v,0,Wd);c.strokeRect(0,Wd+10,250,20),c.fillRect(0,Wd+10,250*Math.min(g/60,1),20)}s||(l[n.SELECT_BOX]=!1)}};var ih="undefined"!=typeof Float32Array?Float32Array:Array;function oh(){var e=new ih(9);return ih!=Float32Array&&(e[1]=0,e[2]=0,e[3]=0,e[5]=0,e[6]=0,e[7]=0),e[0]=1,e[4]=1,e[8]=1,e}function sh(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e}function lh(e,t,n){var r=t[0],a=t[1],i=t[2],o=t[3],s=t[4],l=t[5],u=t[6],c=t[7],d=t[8],h=n[0],f=n[1];return e[0]=r,e[1]=a,e[2]=i,e[3]=o,e[4]=s,e[5]=l,e[6]=h*r+f*o+u,e[7]=h*a+f*s+c,e[8]=h*i+f*l+d,e}function uh(e,t,n){var r=t[0],a=t[1],i=t[2],o=t[3],s=t[4],l=t[5],u=t[6],c=t[7],d=t[8],h=Math.sin(n),f=Math.cos(n);return e[0]=f*r+h*o,e[1]=f*a+h*s,e[2]=f*i+h*l,e[3]=f*o-h*r,e[4]=f*s-h*a,e[5]=f*l-h*i,e[6]=u,e[7]=c,e[8]=d,e}function ch(e,t,n){var r=n[0],a=n[1];return e[0]=r*t[0],e[1]=r*t[1],e[2]=r*t[2],e[3]=a*t[3],e[4]=a*t[4],e[5]=a*t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e}Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)});var dh=function(){return n((function e(n,r,a,i){t(this,e),this.debugID=Math.floor(1e4*Math.random()),this.r=n,this.texSize=r,this.texRows=a,this.texHeight=Math.floor(r/a),this.enableWrapping=!0,this.locked=!1,this.texture=null,this.needsBuffer=!0,this.freePointer={x:0,row:0},this.keyToLocation=new Map,this.canvas=i(n,r,r),this.scratch=i(n,r,this.texHeight,"scratch")}),[{key:"lock",value:function(){this.locked=!0}},{key:"getKeys",value:function(){return new Set(this.keyToLocation.keys())}},{key:"getScale",value:function(e){var t=e.w,n=e.h,r=this.texHeight,a=this.texSize,i=r/n,o=t*i,s=n*i;return o>a&&(o=t*(i=a/t),s=n*i),{scale:i,texW:o,texH:s}}},{key:"draw",value:function(e,t,n){var r=this;if(this.locked)throw new Error("can't draw, atlas is locked");var a=this.texSize,i=this.texRows,o=this.texHeight,s=this.getScale(t),l=s.scale,u=s.texW,c=s.texH,d=function(e,r){if(n&&r){var a=r.context,i=e.x,s=e.row,u=i,c=o*s;a.save(),a.translate(u,c),a.scale(l,l),n(a,t),a.restore()}},h=[null,null],f=function(){d(r.freePointer,r.canvas),h[0]={x:r.freePointer.x,y:r.freePointer.row*o,w:u,h:c},h[1]={x:r.freePointer.x+u,y:r.freePointer.row*o,w:0,h:c},r.freePointer.x+=u,r.freePointer.x==a&&(r.freePointer.x=0,r.freePointer.row++)},p=function(){r.freePointer.x=0,r.freePointer.row++};if(this.freePointer.x+u<=a)f();else{if(this.freePointer.row>=i-1)return!1;this.freePointer.x===a?(p(),f()):this.enableWrapping?function(){var e=r.scratch,t=r.canvas;e.clear(),d({x:0,row:0},e);var n=a-r.freePointer.x,i=u-n,s=o,l=r.freePointer.x,f=r.freePointer.row*o,p=n;t.context.drawImage(e,0,0,p,s,l,f,p,s),h[0]={x:l,y:f,w:p,h:c};var g=n,v=(r.freePointer.row+1)*o,y=i;t&&t.context.drawImage(e,g,0,y,s,0,v,y,s),h[1]={x:0,y:v,w:y,h:c},r.freePointer.x=i,r.freePointer.row++}():(p(),f())}return this.keyToLocation.set(e,h),this.needsBuffer=!0,h}},{key:"getOffsets",value:function(e){return this.keyToLocation.get(e)}},{key:"isEmpty",value:function(){return 0===this.freePointer.x&&0===this.freePointer.row}},{key:"canFit",value:function(e){if(this.locked)return!1;var t=this.texSize,n=this.texRows,r=this.getScale(e).texW;return!(this.freePointer.x+r>t)||this.freePointer.row1&&void 0!==arguments[1]?arguments[1]:{},i=a.forceRedraw,o=void 0!==i&&i,s=a.filterEle,l=void 0===s?function(){return!0}:s,u=a.filterType,c=void 0===u?function(){return!0}:u,d=!1,h=!1,f=r(e);try{for(f.s();!(t=f.n()).done;){var p=t.value;if(l(p)){var g,v=r(this.renderTypes.values());try{var y=function(){var e=g.value,t=e.type;if(c(t)){var r=n.collections.get(e.collection),a=e.getKey(p),i=Array.isArray(a)?a:[a];if(o)i.forEach((function(e){return r.markKeyForGC(e)})),h=!0;else{var s=e.getID?e.getID(p):p.id(),l=n._key(t,s),u=n.typeAndIdToKey.get(l);void 0===u||$d(i,u)||(d=!0,n.typeAndIdToKey.delete(l),u.forEach((function(e){return r.markKeyForGC(e)})))}}};for(v.s();!(g=v.n()).done;)y()}catch(e){v.e(e)}finally{v.f()}}}}catch(e){f.e(e)}finally{f.f()}return h&&(this.gc(),d=!1),d}},{key:"gc",value:function(){var e,t=r(this.collections.values());try{for(t.s();!(e=t.n()).done;){e.value.gc()}}catch(e){t.e(e)}finally{t.f()}}},{key:"getOrCreateAtlas",value:function(e,t,n,r){var a=this.renderTypes.get(t),i=this.collections.get(a.collection),o=!1,s=i.draw(r,n,(function(t){a.drawClipped?(t.save(),t.beginPath(),t.rect(0,0,n.w,n.h),t.clip(),a.drawElement(t,e,n,!0,!0),t.restore()):a.drawElement(t,e,n,!0,!0),o=!0}));if(o){var l=a.getID?a.getID(e):e.id(),u=this._key(t,l);this.typeAndIdToKey.has(u)?this.typeAndIdToKey.get(u).push(r):this.typeAndIdToKey.set(u,[r])}return s}},{key:"getAtlasInfo",value:function(e,t){var n=this,r=this.renderTypes.get(t),a=r.getKey(e);return(Array.isArray(a)?a:[a]).map((function(a){var o=r.getBoundingBox(e,a),s=n.getOrCreateAtlas(e,t,o,a),l=i(s.getOffsets(a),2),u=l[0];return{atlas:s,tex:u,tex1:u,tex2:l[1],bb:o}}))}},{key:"getDebugInfo",value:function(){var e,t=[],n=r(this.collections);try{for(n.s();!(e=n.n()).done;){var a=i(e.value,2),o=a[0],s=a[1].getCounts(),l=s.keyCount,u=s.atlasCount;t.push({type:o,keyCount:l,atlasCount:u})}}catch(e){n.e(e)}finally{n.f()}return t}}])}(),ph=function(){return n((function e(n){t(this,e),this.globalOptions=n,this.atlasSize=n.webglTexSize,this.maxAtlasesPerBatch=n.webglTexPerBatch,this.batchAtlases=[]}),[{key:"getMaxAtlasesPerBatch",value:function(){return this.maxAtlasesPerBatch}},{key:"getAtlasSize",value:function(){return this.atlasSize}},{key:"getIndexArray",value:function(){return Array.from({length:this.maxAtlasesPerBatch},(function(e,t){return t}))}},{key:"startBatch",value:function(){this.batchAtlases=[]}},{key:"getAtlasCount",value:function(){return this.batchAtlases.length}},{key:"getAtlases",value:function(){return this.batchAtlases}},{key:"canAddToCurrentBatch",value:function(e){return this.batchAtlases.length!==this.maxAtlasesPerBatch||this.batchAtlases.includes(e)}},{key:"getAtlasIndexForBatch",value:function(e){var t=this.batchAtlases.indexOf(e);if(t<0){if(this.batchAtlases.length===this.maxAtlasesPerBatch)throw new Error("cannot add more atlases to batch");this.batchAtlases.push(e),t=this.batchAtlases.length-1}return t}}])}(),gh={SCREEN:{name:"screen",screen:!0},PICKING:{name:"picking",picking:!0}},vh=1,yh=2,mh=function(){return n((function e(n,r,a){t(this,e),this.r=n,this.gl=r,this.maxInstances=a.webglBatchSize,this.atlasSize=a.webglTexSize,this.bgColor=a.bgColor,this.debug=a.webglDebug,this.batchDebugInfo=[],a.enableWrapping=!0,a.createTextureCanvas=Kd,this.atlasManager=new fh(n,a),this.batchManager=new ph(a),this.simpleShapeOptions=new Map,this.program=this._createShaderProgram(gh.SCREEN),this.pickingProgram=this._createShaderProgram(gh.PICKING),this.vao=this._createVAO()}),[{key:"addAtlasCollection",value:function(e,t){this.atlasManager.addAtlasCollection(e,t)}},{key:"addTextureAtlasRenderType",value:function(e,t){this.atlasManager.addRenderType(e,t)}},{key:"addSimpleShapeRenderType",value:function(e,t){this.simpleShapeOptions.set(e,t)}},{key:"invalidate",value:function(e){var t=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).type,n=this.atlasManager;return t?n.invalidate(e,{filterType:function(e){return e===t},forceRedraw:!0}):n.invalidate(e)}},{key:"gc",value:function(){this.atlasManager.gc()}},{key:"_createShaderProgram",value:function(e){var t=this.gl,n="#version 300 es\n precision highp float;\n\n uniform mat3 uPanZoomMatrix;\n uniform int uAtlasSize;\n \n // instanced\n in vec2 aPosition; // a vertex from the unit square\n \n in mat3 aTransform; // used to transform verticies, eg into a bounding box\n in int aVertType; // the type of thing we are rendering\n\n // the z-index that is output when using picking mode\n in vec4 aIndex;\n \n // For textures\n in int aAtlasId; // which shader unit/atlas to use\n in vec4 aTex; // x/y/w/h of texture in atlas\n\n // for edges\n in vec4 aPointAPointB;\n in vec4 aPointCPointD;\n in vec2 aLineWidth; // also used for node border width\n\n // simple shapes\n in vec4 aCornerRadius; // for round-rectangle [top-right, bottom-right, top-left, bottom-left]\n in vec4 aColor; // also used for edges\n in vec4 aBorderColor; // aLineWidth is used for border width\n\n // output values passed to the fragment shader\n out vec2 vTexCoord;\n out vec4 vColor;\n out vec2 vPosition;\n // flat values are not interpolated\n flat out int vAtlasId; \n flat out int vVertType;\n flat out vec2 vTopRight;\n flat out vec2 vBotLeft;\n flat out vec4 vCornerRadius;\n flat out vec4 vBorderColor;\n flat out vec2 vBorderWidth;\n flat out vec4 vIndex;\n \n void main(void) {\n int vid = gl_VertexID;\n vec2 position = aPosition; // TODO make this a vec3, simplifies some code below\n\n if(aVertType == ".concat(0,") {\n float texX = aTex.x; // texture coordinates\n float texY = aTex.y;\n float texW = aTex.z;\n float texH = aTex.w;\n\n if(vid == 1 || vid == 2 || vid == 4) {\n texX += texW;\n }\n if(vid == 2 || vid == 4 || vid == 5) {\n texY += texH;\n }\n\n float d = float(uAtlasSize);\n vTexCoord = vec2(texX / d, texY / d); // tex coords must be between 0 and 1\n\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n }\n else if(aVertType == ").concat(4," || aVertType == ").concat(7," \n || aVertType == ").concat(5," || aVertType == ").concat(6,") { // simple shapes\n\n // the bounding box is needed by the fragment shader\n vBotLeft = (aTransform * vec3(0, 0, 1)).xy; // flat\n vTopRight = (aTransform * vec3(1, 1, 1)).xy; // flat\n vPosition = (aTransform * vec3(position, 1)).xy; // will be interpolated\n\n // calculations are done in the fragment shader, just pass these along\n vColor = aColor;\n vCornerRadius = aCornerRadius;\n vBorderColor = aBorderColor;\n vBorderWidth = aLineWidth;\n\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n }\n else if(aVertType == ").concat(1,") {\n vec2 source = aPointAPointB.xy;\n vec2 target = aPointAPointB.zw;\n\n // adjust the geometry so that the line is centered on the edge\n position.y = position.y - 0.5;\n\n // stretch the unit square into a long skinny rectangle\n vec2 xBasis = target - source;\n vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x));\n vec2 point = source + xBasis * position.x + yBasis * aLineWidth[0] * position.y;\n\n gl_Position = vec4(uPanZoomMatrix * vec3(point, 1.0), 1.0);\n vColor = aColor;\n } \n else if(aVertType == ").concat(2,") {\n vec2 pointA = aPointAPointB.xy;\n vec2 pointB = aPointAPointB.zw;\n vec2 pointC = aPointCPointD.xy;\n vec2 pointD = aPointCPointD.zw;\n\n // adjust the geometry so that the line is centered on the edge\n position.y = position.y - 0.5;\n\n vec2 p0, p1, p2, pos;\n if(position.x == 0.0) { // The left side of the unit square\n p0 = pointA;\n p1 = pointB;\n p2 = pointC;\n pos = position;\n } else { // The right side of the unit square, use same approach but flip the geometry upside down\n p0 = pointD;\n p1 = pointC;\n p2 = pointB;\n pos = vec2(0.0, -position.y);\n }\n\n vec2 p01 = p1 - p0;\n vec2 p12 = p2 - p1;\n vec2 p21 = p1 - p2;\n\n // Find the normal vector.\n vec2 tangent = normalize(normalize(p12) + normalize(p01));\n vec2 normal = vec2(-tangent.y, tangent.x);\n\n // Find the vector perpendicular to p0 -> p1.\n vec2 p01Norm = normalize(vec2(-p01.y, p01.x));\n\n // Determine the bend direction.\n float sigma = sign(dot(p01 + p21, normal));\n float width = aLineWidth[0];\n\n if(sign(pos.y) == -sigma) {\n // This is an intersecting vertex. Adjust the position so that there's no overlap.\n vec2 point = 0.5 * width * normal * -sigma / dot(normal, p01Norm);\n gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);\n } else {\n // This is a non-intersecting vertex. Treat it like a mitre join.\n vec2 point = 0.5 * width * normal * sigma * dot(normal, p01Norm);\n gl_Position = vec4(uPanZoomMatrix * vec3(p1 + point, 1.0), 1.0);\n }\n\n vColor = aColor;\n } \n else if(aVertType == ").concat(3," && vid < 3) {\n // massage the first triangle into an edge arrow\n if(vid == 0)\n position = vec2(-0.15, -0.3);\n if(vid == 1)\n position = vec2( 0.0, 0.0);\n if(vid == 2)\n position = vec2( 0.15, -0.3);\n\n gl_Position = vec4(uPanZoomMatrix * aTransform * vec3(position, 1.0), 1.0);\n vColor = aColor;\n }\n else {\n gl_Position = vec4(2.0, 0.0, 0.0, 1.0); // discard vertex by putting it outside webgl clip space\n }\n\n vAtlasId = aAtlasId;\n vVertType = aVertType;\n vIndex = aIndex;\n }\n "),r=this.batchManager.getIndexArray(),a="#version 300 es\n precision highp float;\n\n // declare texture unit for each texture atlas in the batch\n ".concat(r.map((function(e){return"uniform sampler2D uTexture".concat(e,";")})).join("\n\t"),"\n\n uniform vec4 uBGColor;\n uniform float uZoom;\n\n in vec2 vTexCoord;\n in vec4 vColor;\n in vec2 vPosition; // model coordinates\n\n flat in int vAtlasId;\n flat in vec4 vIndex;\n flat in int vVertType;\n flat in vec2 vTopRight;\n flat in vec2 vBotLeft;\n flat in vec4 vCornerRadius;\n flat in vec4 vBorderColor;\n flat in vec2 vBorderWidth;\n\n out vec4 outColor;\n\n ").concat("\n float circleSD(vec2 p, float r) {\n return distance(vec2(0), p) - r; // signed distance\n }\n","\n ").concat("\n float rectangleSD(vec2 p, vec2 b) {\n vec2 d = abs(p)-b;\n return distance(vec2(0),max(d,0.0)) + min(max(d.x,d.y),0.0);\n }\n","\n ").concat("\n float roundRectangleSD(vec2 p, vec2 b, vec4 cr) {\n cr.xy = (p.x > 0.0) ? cr.xy : cr.zw;\n cr.x = (p.y > 0.0) ? cr.x : cr.y;\n vec2 q = abs(p) - b + cr.x;\n return min(max(q.x, q.y), 0.0) + distance(vec2(0), max(q, 0.0)) - cr.x;\n }\n","\n ").concat("\n float ellipseSD(vec2 p, vec2 ab) {\n p = abs( p ); // symmetry\n\n // find root with Newton solver\n vec2 q = ab*(p-ab);\n float w = (q.x1.0) ? d : -d;\n }\n","\n\n vec4 blend(vec4 top, vec4 bot) { // blend colors with premultiplied alpha\n return vec4( \n top.rgb + (bot.rgb * (1.0 - top.a)),\n top.a + (bot.a * (1.0 - top.a)) \n );\n }\n\n vec4 distInterp(vec4 cA, vec4 cB, float d) { // interpolate color using Signed Distance\n // scale to the zoom level so that borders don't look blurry when zoomed in\n // note 1.5 is an aribitrary value chosen because it looks good\n return mix(cA, cB, 1.0 - smoothstep(0.0, 1.5 / uZoom, abs(d))); \n }\n\n void main(void) {\n if(vVertType == ").concat(0,") {\n // look up the texel from the texture unit\n ").concat(r.map((function(e){return"if(vAtlasId == ".concat(e,") outColor = texture(uTexture").concat(e,", vTexCoord);")})).join("\n\telse "),"\n } \n else if(vVertType == ").concat(3,") {\n // mimics how canvas renderer uses context.globalCompositeOperation = 'destination-out';\n outColor = blend(vColor, uBGColor);\n outColor.a = 1.0; // make opaque, masks out line under arrow\n }\n else if(vVertType == ").concat(4," && vBorderWidth == vec2(0.0)) { // simple rectangle with no border\n outColor = vColor; // unit square is already transformed to the rectangle, nothing else needs to be done\n }\n else if(vVertType == ").concat(4," || vVertType == ").concat(7," \n || vVertType == ").concat(5," || vVertType == ").concat(6,") { // use SDF\n\n float outerBorder = vBorderWidth[0];\n float innerBorder = vBorderWidth[1];\n float borderPadding = outerBorder * 2.0;\n float w = vTopRight.x - vBotLeft.x - borderPadding;\n float h = vTopRight.y - vBotLeft.y - borderPadding;\n vec2 b = vec2(w/2.0, h/2.0); // half width, half height\n vec2 p = vPosition - vec2(vTopRight.x - b[0] - outerBorder, vTopRight.y - b[1] - outerBorder); // translate to center\n\n float d; // signed distance\n if(vVertType == ").concat(4,") {\n d = rectangleSD(p, b);\n } else if(vVertType == ").concat(7," && w == h) {\n d = circleSD(p, b.x); // faster than ellipse\n } else if(vVertType == ").concat(7,") {\n d = ellipseSD(p, b);\n } else {\n d = roundRectangleSD(p, b, vCornerRadius.wzyx);\n }\n\n // use the distance to interpolate a color to smooth the edges of the shape, doesn't need multisampling\n // we must smooth colors inwards, because we can't change pixels outside the shape's bounding box\n if(d > 0.0) {\n if(d > outerBorder) {\n discard;\n } else {\n outColor = distInterp(vBorderColor, vec4(0), d - outerBorder);\n }\n } else {\n if(d > innerBorder) {\n vec4 outerColor = outerBorder == 0.0 ? vec4(0) : vBorderColor;\n vec4 innerBorderColor = blend(vBorderColor, vColor);\n outColor = distInterp(innerBorderColor, outerColor, d);\n } \n else {\n vec4 outerColor;\n if(innerBorder == 0.0 && outerBorder == 0.0) {\n outerColor = vec4(0);\n } else if(innerBorder == 0.0) {\n outerColor = vBorderColor;\n } else {\n outerColor = blend(vBorderColor, vColor);\n }\n outColor = distInterp(vColor, outerColor, d - innerBorder);\n }\n }\n }\n else {\n outColor = vColor;\n }\n\n ").concat(e.picking?"if(outColor.a == 0.0) discard;\n else outColor = vIndex;":"","\n }\n "),i=function(e,t,n){var r=Hd(e,e.VERTEX_SHADER,t),a=Hd(e,e.FRAGMENT_SHADER,n),i=e.createProgram();if(e.attachShader(i,r),e.attachShader(i,a),e.linkProgram(i),!e.getProgramParameter(i,e.LINK_STATUS))throw new Error("Could not initialize shaders");return i}(t,n,a);i.aPosition=t.getAttribLocation(i,"aPosition"),i.aIndex=t.getAttribLocation(i,"aIndex"),i.aVertType=t.getAttribLocation(i,"aVertType"),i.aTransform=t.getAttribLocation(i,"aTransform"),i.aAtlasId=t.getAttribLocation(i,"aAtlasId"),i.aTex=t.getAttribLocation(i,"aTex"),i.aPointAPointB=t.getAttribLocation(i,"aPointAPointB"),i.aPointCPointD=t.getAttribLocation(i,"aPointCPointD"),i.aLineWidth=t.getAttribLocation(i,"aLineWidth"),i.aColor=t.getAttribLocation(i,"aColor"),i.aCornerRadius=t.getAttribLocation(i,"aCornerRadius"),i.aBorderColor=t.getAttribLocation(i,"aBorderColor"),i.uPanZoomMatrix=t.getUniformLocation(i,"uPanZoomMatrix"),i.uAtlasSize=t.getUniformLocation(i,"uAtlasSize"),i.uBGColor=t.getUniformLocation(i,"uBGColor"),i.uZoom=t.getUniformLocation(i,"uZoom"),i.uTextures=[];for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:gh.SCREEN;this.panZoomMatrix=e,this.renderTarget=t,this.batchDebugInfo=[],this.wrappedCount=0,this.simpleCount=0,this.startBatch()}},{key:"startBatch",value:function(){this.instanceCount=0,this.batchManager.startBatch()}},{key:"endFrame",value:function(){this.endBatch()}},{key:"_isVisible",value:function(e,t){return!!e.visible()&&(!t||!t.isVisible||t.isVisible(e))}},{key:"drawTexture",value:function(e,t,n){var a=this.atlasManager,o=this.batchManager,s=a.getRenderTypeOpts(n);if(this._isVisible(e,s)&&(!e.isEdge()||this._isValidEdge(e))){if(this.renderTarget.picking&&s.getTexPickingMode){var l=s.getTexPickingMode(e);if(l===vh)return;if(l==yh)return void this.drawPickingRectangle(e,t,n)}var u,c=r(a.getAtlasInfo(e,n));try{for(c.s();!(u=c.n()).done;){var d=u.value,h=d.atlas,f=d.tex1,p=d.tex2;o.canAddToCurrentBatch(h)||this.endBatch();for(var g=o.getAtlasIndexForBatch(h),v=0,y=[[f,!0],[p,!1]];v=this.maxInstances&&this.endBatch()}}}}catch(e){c.e(e)}finally{c.f()}}}},{key:"setTransformMatrix",value:function(e,t,n,r){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],i=0;if(n.shapeProps&&n.shapeProps.padding&&(i=e.pstyle(n.shapeProps.padding).pfValue),r){var o=r.bb,s=r.tex1,l=r.tex2,u=s.w/(s.w+l.w);a||(u=1-u);var c=this._getAdjustedBB(o,i,a,u);this._applyTransformMatrix(t,c,n,e)}else{var d=n.getBoundingBox(e),h=this._getAdjustedBB(d,i,!0,1);this._applyTransformMatrix(t,h,n,e)}}},{key:"_applyTransformMatrix",value:function(e,t,n,r){var a,i;sh(e);var o=n.getRotation?n.getRotation(r):0;if(0!==o){var s=n.getRotationPoint(r);lh(e,e,[s.x,s.y]),uh(e,e,o);var l=n.getRotationOffset(r);a=l.x+(t.xOffset||0),i=l.y+(t.yOffset||0)}else a=t.x1,i=t.y1;lh(e,e,[a,i]),ch(e,e,[t.w,t.h])}},{key:"_getAdjustedBB",value:function(e,t,n,r){var a=e.x1,i=e.y1,o=e.w,s=e.h;t&&(a-=t,i-=t,o+=2*t,s+=2*t);var l=0,u=o*r;return n&&r<1?o=u:!n&&r<1&&(a+=l=o-u,o=u),{x1:a,y1:i,w:o,h:s,xOffset:l,yOffset:e.yOffset}}},{key:"drawPickingRectangle",value:function(e,t,n){var r=this.atlasManager.getRenderTypeOpts(n),a=this.instanceCount;this.vertTypeBuffer.getView(a)[0]=4,Jd(t,this.indexBuffer.getView(a)),Qd([0,0,0],1,this.colorBuffer.getView(a));var i=this.transformBuffer.getMatrixView(a);this.setTransformMatrix(e,i,r),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}},{key:"drawNode",value:function(e,t,n){var r=this.simpleShapeOptions.get(n);if(this._isVisible(e,r)){var a=r.shapeProps,i=this._getVertTypeForShape(e,a.shape);if(void 0===i||r.isSimple&&!r.isSimple(e,this.renderTarget))this.drawTexture(e,t,n);else{var o=this.instanceCount;if(this.vertTypeBuffer.getView(o)[0]=i,5===i||6===i){var s=r.getBoundingBox(e),l=this._getCornerRadius(e,a.radius,s),u=this.cornerRadiusBuffer.getView(o);u[0]=l,u[1]=l,u[2]=l,u[3]=l,6===i&&(u[0]=0,u[2]=0)}Jd(t,this.indexBuffer.getView(o));var c=this.renderTarget.picking?1:"node-body"===n?e.effectiveOpacity():1,d=this.renderTarget.picking?1:e.pstyle(a.opacity).value*c;Qd(e.pstyle(a.color).value,d,this.colorBuffer.getView(o));var h=this.lineWidthBuffer.getView(o);if(h[0]=0,h[1]=0,a.border){var f=e.pstyle("border-width").value;if(f>0){Qd(e.pstyle("border-color").value,c*e.pstyle("border-opacity").value,this.borderColorBuffer.getView(o));var p=e.pstyle("border-position").value;if("inside"===p)h[0]=0,h[1]=-f;else if("outside"===p)h[0]=f,h[1]=0;else{var g=f/2;h[0]=g,h[1]=-g}}}var v=this.transformBuffer.getMatrixView(o);this.setTransformMatrix(e,v,r),this.simpleCount++,this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}}},{key:"_getVertTypeForShape",value:function(e,t){switch(e.pstyle(t).value){case"rectangle":return 4;case"ellipse":return 7;case"roundrectangle":case"round-rectangle":return 5;case"bottom-round-rectangle":return 6;default:return}}},{key:"_getCornerRadius",value:function(e,t,n){var r=n.w,a=n.h;if("auto"===e.pstyle(t).value)return Mn(r,a);var i=e.pstyle(t).pfValue,o=r/2,s=a/2;return Math.min(i,s,o)}},{key:"drawEdgeArrow",value:function(e,t,n){if(e.visible()){var r,a,i,o=e._private.rscratch;if("source"===n?(r=o.arrowStartX,a=o.arrowStartY,i=o.srcArrowAngle):(r=o.arrowEndX,a=o.arrowEndY,i=o.tgtArrowAngle),!(isNaN(r)||null==r||isNaN(a)||null==a||isNaN(i)||null==i))if("none"!==e.pstyle(n+"-arrow-shape").value){var s=e.pstyle(n+"-arrow-color").value,l=e.pstyle("opacity").value*e.pstyle("line-opacity").value,u=e.pstyle("width").pfValue,c=e.pstyle("arrow-scale").value,d=this.r.getArrowWidth(u,c),h=this.instanceCount,f=this.transformBuffer.getMatrixView(h);sh(f),lh(f,f,[r,a]),ch(f,f,[d,d]),uh(f,f,i),this.vertTypeBuffer.getView(h)[0]=3,Jd(t,this.indexBuffer.getView(h)),Qd(s,l,this.colorBuffer.getView(h)),this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}}}},{key:"drawEdgeLine",value:function(e,t){if(e.visible()){var n=this._getEdgePoints(e);if(n){var r=e.pstyle("opacity").value,a=e.pstyle("line-opacity").value,i=e.pstyle("width").pfValue,o=e.pstyle("line-color").value,s=r*a;if(n.length/2+this.instanceCount>this.maxInstances&&this.endBatch(),4==n.length){var l=this.instanceCount;this.vertTypeBuffer.getView(l)[0]=1,Jd(t,this.indexBuffer.getView(l)),Qd(o,s,this.colorBuffer.getView(l)),this.lineWidthBuffer.getView(l)[0]=i;var u=this.pointAPointBBuffer.getView(l);u[0]=n[0],u[1]=n[1],u[2]=n[2],u[3]=n[3],this.instanceCount++,this.instanceCount>=this.maxInstances&&this.endBatch()}else for(var c=0;c=this.maxInstances&&this.endBatch()}}}}},{key:"_isValidEdge",value:function(e){var t=e._private.rscratch;return!t.badLine&&null!=t.allpts&&!isNaN(t.allpts[0])}},{key:"_getEdgePoints",value:function(e){var t=e._private.rscratch;if(this._isValidEdge(e)){var n=t.allpts;if(4==n.length)return n;var r=this._getNumSegments(e);return this._getCurveSegmentPoints(n,r)}}},{key:"_getNumSegments",value:function(e){return Math.min(Math.max(15,5),this.maxInstances)}},{key:"_getCurveSegmentPoints",value:function(e,t){if(4==e.length)return e;for(var n=Array(2*(t+1)),r=0;r<=t;r++)if(0==r)n[0]=e[0],n[1]=e[1];else if(r==t)n[2*r]=e[e.length-2],n[2*r+1]=e[e.length-1];else{var a=r/t;this._setCurvePoint(e,a,n,2*r)}return n}},{key:"_setCurvePoint",value:function(e,t,n,r){if(!(e.length<=2)){for(var a=Array(e.length-2),i=0;i0}},u=function(e){return"yes"===e.pstyle("text-events").strValue?yh:vh},c=function(e){var t=e.position(),n=t.x,r=t.y,a=e.outerWidth(),i=e.outerHeight();return{w:a,h:i,x1:n-a/2,y1:r-i/2}};n.drawing.addAtlasCollection("node",{texRows:e.webglTexRowsNodes}),n.drawing.addAtlasCollection("label",{texRows:e.webglTexRows}),n.drawing.addTextureAtlasRenderType("node-body",{collection:"node",getKey:t.getStyleKey,getBoundingBox:t.getElementBox,drawElement:t.drawElement}),n.drawing.addSimpleShapeRenderType("node-body",{getBoundingBox:c,isSimple:Zd,shapeProps:{shape:"shape",color:"background-color",opacity:"background-opacity",radius:"corner-radius",border:!0}}),n.drawing.addSimpleShapeRenderType("node-overlay",{getBoundingBox:c,isVisible:l("overlay"),shapeProps:{shape:"overlay-shape",color:"overlay-color",opacity:"overlay-opacity",padding:"overlay-padding",radius:"overlay-corner-radius"}}),n.drawing.addSimpleShapeRenderType("node-underlay",{getBoundingBox:c,isVisible:l("underlay"),shapeProps:{shape:"underlay-shape",color:"underlay-color",opacity:"underlay-opacity",padding:"underlay-padding",radius:"underlay-corner-radius"}}),n.drawing.addTextureAtlasRenderType("label",{collection:"label",getTexPickingMode:u,getKey:wh(t.getLabelKey,null),getBoundingBox:Eh(t.getLabelBox,null),drawClipped:!0,drawElement:t.drawLabel,getRotation:o(null),getRotationPoint:t.getLabelRotationPoint,getRotationOffset:t.getLabelRotationOffset,isVisible:s("label")}),n.drawing.addTextureAtlasRenderType("edge-source-label",{collection:"label",getTexPickingMode:u,getKey:wh(t.getSourceLabelKey,"source"),getBoundingBox:Eh(t.getSourceLabelBox,"source"),drawClipped:!0,drawElement:t.drawSourceLabel,getRotation:o("source"),getRotationPoint:t.getSourceLabelRotationPoint,getRotationOffset:t.getSourceLabelRotationOffset,isVisible:s("source-label")}),n.drawing.addTextureAtlasRenderType("edge-target-label",{collection:"label",getTexPickingMode:u,getKey:wh(t.getTargetLabelKey,"target"),getBoundingBox:Eh(t.getTargetLabelBox,"target"),drawClipped:!0,drawElement:t.drawTargetLabel,getRotation:o("target"),getRotationPoint:t.getTargetLabelRotationPoint,getRotationOffset:t.getTargetLabelRotationOffset,isVisible:s("target-label")});var d=Ae((function(){console.log("garbage collect flag set"),n.data.gc=!0}),1e4);n.onUpdateEleCalcs((function(e,t){var r=!1;t&&t.length>0&&(r|=n.drawing.invalidate(t)),r&&d()})),function(e){var t=e.render;e.render=function(n){n=n||{};var r=e.cy;e.webgl&&(r.zoom()>gd?(!function(e){var t=e.data.contexts[e.WEBGL];t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)}(e),t.call(e,n)):(!function(e){var t=function(t){t.save(),t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,e.canvasWidth,e.canvasHeight),t.restore()};t(e.data.contexts[e.NODE]),t(e.data.contexts[e.DRAG])}(e),Ch(e,n,gh.SCREEN)))};var n=e.matchCanvasSize;e.matchCanvasSize=function(t){n.call(e,t),e.pickingFrameBuffer.setFramebufferAttachmentSizes(e.canvasWidth,e.canvasHeight),e.pickingFrameBuffer.needsDraw=!0},e.findNearestElements=function(t,n,a,o){return function(e,t,n){var a,o,s,l=function(e,t,n){var r,a,o,s,l=Gd(e),u=l.pan,c=l.zoom,d=function(e,t,n,r,a){var i=r*n+t.x,o=a*n+t.y;return[i,o=Math.round(e.canvasHeight-o)]}(e,u,c,t,n),h=i(d,2),f=h[0],p=h[1],g=6;if(r=f-g/2,a=p-g/2,s=g,0===(o=g)||0===s)return[];var v=e.data.contexts[e.WEBGL];v.bindFramebuffer(v.FRAMEBUFFER,e.pickingFrameBuffer),e.pickingFrameBuffer.needsDraw&&(v.viewport(0,0,v.canvas.width,v.canvas.height),Ch(e,null,gh.PICKING),e.pickingFrameBuffer.needsDraw=!1);var y=o*s,m=new Uint8Array(4*y);v.readPixels(r,a,o,s,v.RGBA,v.UNSIGNED_BYTE,m),v.bindFramebuffer(v.FRAMEBUFFER,null);for(var b=new Set,x=0;x=0&&b.add(w)}return b}(e,t,n),u=e.getCachedZSortedEles(),c=r(l);try{for(c.s();!(s=c.n()).done;){var d=u[s.value];if(!a&&d.isNode()&&(a=d),!o&&d.isEdge()&&(o=d),a&&o)break}}catch(e){c.e(e)}finally{c.f()}return[a,o].filter(Boolean)}(e,t,n)};var a=e.invalidateCachedZSortedEles;e.invalidateCachedZSortedEles=function(){a.call(e),e.pickingFrameBuffer.needsDraw=!0};var o=e.notify;e.notify=function(t,n){o.call(e,t,n),"viewport"===t||"bounds"===t?e.pickingFrameBuffer.needsDraw=!0:"background"===t&&e.drawing.invalidate(n,{type:"node-body"})}}(n)};var wh=function(e,t){return function(n){var r=e(n),a=xh(n,t);return a.length>1?a.map((function(e,t){return"".concat(r,"_").concat(t)})):r}},Eh=function(e,t){return function(n,r){var a=e(n);if("string"==typeof r){var i=r.indexOf("_");if(i>0){var o=Number(r.substring(i+1)),s=xh(n,t),l=a.h/s.length,u=l*o,c=a.y1+u;return{x1:a.x1,w:a.w,y1:c,h:l,yOffset:u}}}return a}};function kh(e,t){var n=e.canvasWidth,r=e.canvasHeight,a=Gd(e),i=a.pan,o=a.zoom;t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,n,r),t.translate(i.x,i.y),t.scale(o,o)}function Th(e,t,n){var r=e.drawing;t+=1,n.isNode()?(r.drawNode(n,t,"node-underlay"),r.drawNode(n,t,"node-body"),r.drawTexture(n,t,"label"),r.drawNode(n,t,"node-overlay")):(r.drawEdgeLine(n,t),r.drawEdgeArrow(n,t,"source"),r.drawEdgeArrow(n,t,"target"),r.drawTexture(n,t,"label"),r.drawTexture(n,t,"edge-source-label"),r.drawTexture(n,t,"edge-target-label"))}function Ch(e,t,n){var a;e.webglDebug&&(a=performance.now());var i=e.drawing,o=0;if(n.screen&&e.data.canvasNeedsRedraw[e.SELECT_BOX]&&function(e,t){e.drawSelectionRectangle(t,(function(t){return kh(e,t)}))}(e,t),e.data.canvasNeedsRedraw[e.NODE]||n.picking){var s=e.data.contexts[e.WEBGL];n.screen?(s.clearColor(0,0,0,0),s.enable(s.BLEND),s.blendFunc(s.ONE,s.ONE_MINUS_SRC_ALPHA)):s.disable(s.BLEND),s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),s.viewport(0,0,s.canvas.width,s.canvas.height);var l=function(e){var t=e.canvasWidth,n=e.canvasHeight,r=Gd(e),a=r.pan,i=r.zoom,o=oh();lh(o,o,[a.x,a.y]),ch(o,o,[i,i]);var s=oh();!function(e,t,n){e[0]=2/t,e[1]=0,e[2]=0,e[3]=0,e[4]=-2/n,e[5]=0,e[6]=-1,e[7]=1,e[8]=1}(s,t,n);var l,u,c,d,h,f,p,g,v,y,m,b,x,w,E,k,T,C,P,S,B,D=oh();return l=D,c=o,d=(u=s)[0],h=u[1],f=u[2],p=u[3],g=u[4],v=u[5],y=u[6],m=u[7],b=u[8],x=c[0],w=c[1],E=c[2],k=c[3],T=c[4],C=c[5],P=c[6],S=c[7],B=c[8],l[0]=x*d+w*p+E*y,l[1]=x*h+w*g+E*m,l[2]=x*f+w*v+E*b,l[3]=k*d+T*p+C*y,l[4]=k*h+T*g+C*m,l[5]=k*f+T*v+C*b,l[6]=P*d+S*p+B*y,l[7]=P*h+S*g+B*m,l[8]=P*f+S*v+B*b,D}(e),u=e.getCachedZSortedEles();if(o=u.length,i.startFrame(l,n),n.screen){for(var c=0;c0&&i>0){h.clearRect(0,0,a,i),h.globalCompositeOperation="source-over";var f=this.getCachedZSortedEles();if(e.full)h.translate(-n.x1*l,-n.y1*l),h.scale(l,l),this.drawElements(h,f),h.scale(1/l,1/l),h.translate(n.x1*l,n.y1*l);else{var p=t.pan(),g={x:p.x*l,y:p.y*l};l*=t.zoom(),h.translate(g.x,g.y),h.scale(l,l),this.drawElements(h,f),h.scale(1/l,1/l),h.translate(-g.x,-g.y)}e.bg&&(h.globalCompositeOperation="destination-over",h.fillStyle=e.bg,h.rect(0,0,a,i),h.fill())}return d},Rh.png=function(e){return Nh(e,this.bufferCanvasImage(e),"image/png")},Rh.jpg=function(e){return Nh(e,this.bufferCanvasImage(e),"image/jpeg")};var Lh={nodeShapeImpl:function(e,t,n,r,a,i,o,s){switch(e){case"ellipse":return this.drawEllipsePath(t,n,r,a,i);case"polygon":return this.drawPolygonPath(t,n,r,a,i,o);case"round-polygon":return this.drawRoundPolygonPath(t,n,r,a,i,o,s);case"roundrectangle":case"round-rectangle":return this.drawRoundRectanglePath(t,n,r,a,i,s);case"cutrectangle":case"cut-rectangle":return this.drawCutRectanglePath(t,n,r,a,i,o,s);case"bottomroundrectangle":case"bottom-round-rectangle":return this.drawBottomRoundRectanglePath(t,n,r,a,i,s);case"barrel":return this.drawBarrelPath(t,n,r,a,i)}}},zh=Vh,Oh=Vh.prototype;function Vh(e){var t=this,n=t.cy.window().document;e.webgl&&(Oh.CANVAS_LAYERS=t.CANVAS_LAYERS=4,console.log("webgl rendering enabled")),t.data={canvases:new Array(Oh.CANVAS_LAYERS),contexts:new Array(Oh.CANVAS_LAYERS),canvasNeedsRedraw:new Array(Oh.CANVAS_LAYERS),bufferCanvases:new Array(Oh.BUFFER_COUNT),bufferContexts:new Array(Oh.CANVAS_LAYERS)};var r="-webkit-tap-highlight-color",a="rgba(0,0,0,0)";t.data.canvasContainer=n.createElement("div");var i=t.data.canvasContainer.style;t.data.canvasContainer.style[r]=a,i.position="relative",i.zIndex="0",i.overflow="hidden";var o=e.cy.container();o.appendChild(t.data.canvasContainer),o.style[r]=a;var s={"-webkit-user-select":"none","-moz-user-select":"-moz-none","user-select":"none","-webkit-tap-highlight-color":"rgba(0,0,0,0)","outline-style":"none"};d&&d.userAgent.match(/msie|trident|edge/i)&&(s["-ms-touch-action"]="none",s["touch-action"]="none");for(var l=0;l=5&&((s||!n&&5===u)&&(p.push(u,0,s,t),u=6),n&&(p.push(u,n,0,t),u=6)),s=""},o=0;o"===e?(u=1,s=""):s=e+s[0]:r?e===r?r="":s+=e:'"'===e||"'"===e?r=e:">"===e?(h(),u=1):u&&("="===e?(u=5,t=s,s=""):"/"===e&&(u<5||">"===n[o][f+1])?(h(),3===u&&(p=p[0]),u=p,(p=p[0]).push(2,0,u),u=0):" "===e||"\t"===e||"\n"===e||"\r"===e?(h(),u=2):s+=e),3===u&&"!--"===s&&(u=4,p=p[0])}return h(),p}(t)),u),arguments,[])).length>1?u:u[0]}}); diff --git a/topological_navigation_visual/topological_navigation_visual/web/vendor/react-dom.production.min.js b/topological_navigation_visual/topological_navigation_visual/web/vendor/react-dom.production.min.js new file mode 100644 index 00000000..fb4e099c --- /dev/null +++ b/topological_navigation_visual/topological_navigation_visual/web/vendor/react-dom.production.min.js @@ -0,0 +1,267 @@ +/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +(function(){/* + Modernizr 3.0.0pre (Custom Build) | MIT +*/ +'use strict';(function(Q,zb){"object"===typeof exports&&"undefined"!==typeof module?zb(exports,require("react")):"function"===typeof define&&define.amd?define(["exports","react"],zb):(Q=Q||self,zb(Q.ReactDOM={},Q.React))})(this,function(Q,zb){function m(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;cb}return!1}function Y(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}function $d(a,b,c,d){var e=R.hasOwnProperty(b)?R[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k="\n"+e[g].replace(" at new "," at ");a.displayName&&k.includes("")&&(k=k.replace("",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{ce=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:"")?bc(a): +""}function fj(a){switch(a.tag){case 5:return bc(a.type);case 16:return bc("Lazy");case 13:return bc("Suspense");case 19:return bc("SuspenseList");case 0:case 2:case 15:return a=be(a.type,!1),a;case 11:return a=be(a.type.render,!1),a;case 1:return a=be(a.type,!0),a;default:return""}}function de(a){if(null==a)return null;if("function"===typeof a)return a.displayName||a.name||null;if("string"===typeof a)return a;switch(a){case Bb:return"Fragment";case Cb:return"Portal";case ee:return"Profiler";case fe:return"StrictMode"; +case ge:return"Suspense";case he:return"SuspenseList"}if("object"===typeof a)switch(a.$$typeof){case gg:return(a.displayName||"Context")+".Consumer";case hg:return(a._context.displayName||"Context")+".Provider";case ie:var b=a.render;a=a.displayName;a||(a=b.displayName||b.name||"",a=""!==a?"ForwardRef("+a+")":"ForwardRef");return a;case je:return b=a.displayName||null,null!==b?b:de(a.type)||"Memo";case Ta:b=a._payload;a=a._init;try{return de(a(b))}catch(c){}}return null}function gj(a){var b=a.type; +switch(a.tag){case 24:return"Cache";case 9:return(b.displayName||"Context")+".Consumer";case 10:return(b._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return a=b.render,a=a.displayName||a.name||"",b.displayName||(""!==a?"ForwardRef("+a+")":"ForwardRef");case 7:return"Fragment";case 5:return b;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return de(b);case 8:return b===fe?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler"; +case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"===typeof b)return b.displayName||b.name||null;if("string"===typeof b)return b}return null}function Ua(a){switch(typeof a){case "boolean":case "number":case "string":case "undefined":return a;case "object":return a;default:return""}}function ig(a){var b=a.type;return(a=a.nodeName)&&"input"===a.toLowerCase()&&("checkbox"===b||"radio"=== +b)}function hj(a){var b=ig(a)?"checked":"value",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=""+a[b];if(!a.hasOwnProperty(b)&&"undefined"!==typeof c&&"function"===typeof c.get&&"function"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=""+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=""+a},stopTracking:function(){a._valueTracker= +null;delete a[b]}}}}function Pc(a){a._valueTracker||(a._valueTracker=hj(a))}function jg(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d="";a&&(d=ig(a)?a.checked?"true":"false":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Qc(a){a=a||("undefined"!==typeof document?document:void 0);if("undefined"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}function ke(a,b){var c=b.checked;return E({},b,{defaultChecked:void 0,defaultValue:void 0, +value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function kg(a,b){var c=null==b.defaultValue?"":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Ua(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:"checkbox"===b.type||"radio"===b.type?null!=b.checked:null!=b.value}}function lg(a,b){b=b.checked;null!=b&&$d(a,"checked",b,!1)}function le(a,b){lg(a,b);var c=Ua(b.value),d=b.type;if(null!=c)if("number"===d){if(0===c&&""===a.value||a.value!= +c)a.value=""+c}else a.value!==""+c&&(a.value=""+c);else if("submit"===d||"reset"===d){a.removeAttribute("value");return}b.hasOwnProperty("value")?me(a,b.type,c):b.hasOwnProperty("defaultValue")&&me(a,b.type,Ua(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}function mg(a,b,c){if(b.hasOwnProperty("value")||b.hasOwnProperty("defaultValue")){var d=b.type;if(!("submit"!==d&&"reset"!==d||void 0!==b.value&&null!==b.value))return;b=""+a._wrapperState.initialValue; +c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;""!==c&&(a.name="");a.defaultChecked=!!a._wrapperState.initialChecked;""!==c&&(a.name=c)}function me(a,b,c){if("number"!==b||Qc(a.ownerDocument)!==a)null==c?a.defaultValue=""+a._wrapperState.initialValue:a.defaultValue!==""+c&&(a.defaultValue=""+c)}function Db(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e>>=0;return 0===a?32:31-(qj(a)/rj|0)|0}function hc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a& +4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return a}}function Vc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=hc(h):(f&=g,0!==f&&(d=hc(f)))}else g=c&~e,0!==g?d=hc(g):0!==f&&(d=hc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&& +(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a); +return b}function ic(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-ta(b);a[b]=c}function uj(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=$g(c)}}function bh(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?bh(a,b.parentNode):"contains"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function ch(){for(var a=window,b=Qc();b instanceof a.HTMLIFrameElement;){try{var c="string"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break; +b=Qc(a.document)}return b}function Ie(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&("input"===b&&("text"===a.type||"search"===a.type||"tel"===a.type||"url"===a.type||"password"===a.type)||"textarea"===b||"true"===a.contentEditable)}function Tj(a){var b=ch(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&bh(c.ownerDocument.documentElement,c)){if(null!==d&&Ie(c))if(b=d.start,a=d.end,void 0===a&&(a=b),"selectionStart"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length); +else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=ah(c,f);var g=ah(c,d);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset), +a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});"function"===typeof c.focus&&c.focus();for(c=0;cMb||(a.current=Se[Mb],Se[Mb]=null,Mb--)} +function y(a,b,c){Mb++;Se[Mb]=a.current;a.current=b}function Nb(a,b){var c=a.type.contextTypes;if(!c)return cb;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function ea(a){a=a.childContextTypes;return null!==a&&void 0!==a}function th(a,b,c){if(J.current!==cb)throw Error(m(168)); +y(J,b);y(S,c)}function uh(a,b,c){var d=a.stateNode;b=b.childContextTypes;if("function"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(m(108,gj(a)||"Unknown",e));return E({},c,d)}function ld(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||cb;pb=J.current;y(J,a);y(S,S.current);return!0}function vh(a,b,c){var d=a.stateNode;if(!d)throw Error(m(169));c?(a=uh(a,b,pb),d.__reactInternalMemoizedMergedChildContext=a,v(S),v(J),y(J,a)):v(S); +y(S,c)}function wh(a){null===La?La=[a]:La.push(a)}function jk(a){md=!0;wh(a)}function db(){if(!Te&&null!==La){Te=!0;var a=0,b=z;try{var c=La;for(z=1;a>=g;e-=g;Ma=1<<32-ta(b)+e|c<t?(q=l,l=null):q=l.sibling;var A=r(e,l,h[t],k);if(null===A){null===l&&(l=q);break}a&&l&&null===A.alternate&&b(e,l);g=f(A,g,t);null===m?n=A:m.sibling=A;m=A;l=q}if(t===h.length)return c(e,l),D&&qb(e,t),n;if(null===l){for(;t< +h.length;t++)l=u(e,h[t],k),null!==l&&(g=f(l,g,t),null===m?n=l:m.sibling=l,m=l);D&&qb(e,t);return n}for(l=d(e,l);tt?(A=q,q=null):A=q.sibling;var x=r(e,q,w.value,k);if(null===x){null===q&&(q=A);break}a&&q&&null===x.alternate&&b(e,q);g=f(x,g,t);null===l?n=x:l.sibling=x;l=x;q=A}if(w.done)return c(e,q),D&&qb(e,t),n;if(null===q){for(;!w.done;t++,w=h.next())w=u(e,w.value,k),null!==w&&(g=f(w,g,t),null===l?n=w:l.sibling=w,l=w);D&&qb(e,t);return n}for(q=d(e,q);!w.done;t++,w=h.next())w=p(q,e,t,w.value,k),null!==w&&(a&&null!==w.alternate&&q.delete(null===w.key?t:w.key),g=f(w,g,t),null===l?n=w:l.sibling= +w,l=w);a&&q.forEach(function(a){return b(e,a)});D&&qb(e,t);return n}function v(a,d,f,h){"object"===typeof f&&null!==f&&f.type===Bb&&null===f.key&&(f=f.props.children);if("object"===typeof f&&null!==f){switch(f.$$typeof){case sd:a:{for(var k=f.key,n=d;null!==n;){if(n.key===k){k=f.type;if(k===Bb){if(7===n.tag){c(a,n.sibling);d=e(n,f.props.children);d.return=a;a=d;break a}}else if(n.elementType===k||"object"===typeof k&&null!==k&&k.$$typeof===Ta&&Ch(k)===n.type){c(a,n.sibling);d=e(n,f.props);d.ref=vc(a, +n,f);d.return=a;a=d;break a}c(a,n);break}else b(a,n);n=n.sibling}f.type===Bb?(d=sb(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=rd(f.type,f.key,f.props,null,a.mode,h),h.ref=vc(a,d,f),h.return=a,a=h)}return g(a);case Cb:a:{for(n=f.key;null!==d;){if(d.key===n)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=$e(f,a.mode,h);d.return=a; +a=d}return g(a);case Ta:return n=f._init,v(a,d,n(f._payload),h)}if(cc(f))return x(a,d,f,h);if(ac(f))return I(a,d,f,h);qd(a,f)}return"string"===typeof f&&""!==f||"number"===typeof f?(f=""+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Ze(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return v}function af(){bf=Rb=td=null}function cf(a,b){b=ud.current;v(ud);a._currentValue=b}function df(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|= +b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}function Sb(a,b){td=a;bf=Rb=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(ha=!0),a.firstContext=null)}function qa(a){var b=a._currentValue;if(bf!==a)if(a={context:a,memoizedValue:b,next:null},null===Rb){if(null===td)throw Error(m(308));Rb=a;td.dependencies={lanes:0,firstContext:a}}else Rb=Rb.next=a;return b}function ef(a){null===tb?tb=[a]:tb.push(a)}function Eh(a,b,c,d){var e=b.interleaved; +null===e?(c.next=c,ef(b)):(c.next=e.next,e.next=c);b.interleaved=c;return Oa(a,d)}function Oa(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}function ff(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Fh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue= +{baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function Pa(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}function fb(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(p&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return kk(a,c)}e=d.interleaved;null===e?(b.next=b,ef(d)):(b.next=e.next,e.next=b);d.interleaved=b;return Oa(a,c)}function vd(a,b,c){b= +b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;xe(a,c)}}function Gh(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f, +shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=b;c.lastBaseUpdate=b}function wd(a,b,c,d){var e=a.updateQueue;gb=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,n=k.next;k.next=null;null===g?f=n:g.next=n;g=k;var l=a.alternate;null!==l&&(l=l.updateQueue,h=l.lastBaseUpdate,h!==g&&(null===h?l.firstBaseUpdate=n:h.next=n,l.lastBaseUpdate=k))}if(null!==f){var m=e.baseState;g=0;l= +n=k=null;h=f;do{var r=h.lane,p=h.eventTime;if((d&r)===r){null!==l&&(l=l.next={eventTime:p,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,next:null});a:{var x=a,v=h;r=b;p=c;switch(v.tag){case 1:x=v.payload;if("function"===typeof x){m=x.call(p,m,r);break a}m=x;break a;case 3:x.flags=x.flags&-65537|128;case 0:x=v.payload;r="function"===typeof x?x.call(p,m,r):x;if(null===r||void 0===r)break a;m=E({},m,r);break a;case 2:gb=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects= +[h]:r.push(h))}else p={eventTime:p,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===l?(n=l=p,k=m):l=l.next=p,g|=r;h=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===l&&(k=m);e.baseState=k;e.firstBaseUpdate=n;e.lastBaseUpdate=l;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);ra|=g;a.lanes=g;a.memoizedState=m}}function Hh(a, +b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;bc?c:4;a(!0);var d=sf.transition;sf.transition= +{};try{a(!1),b()}finally{z=c,sf.transition=d}}function $h(){return sa().memoizedState}function qk(a,b,c){var d=hb(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(ai(a))bi(b,c);else if(c=Eh(a,b,c,d),null!==c){var e=Z();xa(c,a,d,e);ci(c,b,d)}}function ok(a,b,c){var d=hb(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(ai(a))bi(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState, +h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(ua(h,g)){var k=b.interleaved;null===k?(e.next=e,ef(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(n){}finally{}c=Eh(a,b,e,d);null!==c&&(e=Z(),xa(c,a,d,e),ci(c,b,d))}}function ai(a){var b=a.alternate;return a===C||null!==b&&b===C}function bi(a,b){zc=Ad=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function ci(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;xe(a,c)}}function ya(a,b){if(a&& +a.defaultProps){b=E({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}function tf(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:E({},b,c);a.memoizedState=c;0===a.lanes&&(a.updateQueue.baseState=c)}function di(a,b,c,d,e,f,g){a=a.stateNode;return"function"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!qc(c,d)||!qc(e,f):!0}function ei(a,b,c){var d=!1,e=cb;var f=b.contextType;"object"===typeof f&& +null!==f?f=qa(f):(e=ea(b)?pb:J.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Nb(a,e):cb);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Dd;a.stateNode=b;b._reactInternals=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}function fi(a,b,c,d){a=b.state;"function"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);"function"===typeof b.UNSAFE_componentWillReceiveProps&& +b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Dd.enqueueReplaceState(b,b.state,null)}function uf(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs={};ff(a);var f=b.contextType;"object"===typeof f&&null!==f?e.context=qa(f):(f=ea(b)?pb:J.current,e.context=Nb(a,f));e.state=a.memoizedState;f=b.getDerivedStateFromProps;"function"===typeof f&&(tf(a,b,f,c),e.state=a.memoizedState);"function"===typeof b.getDerivedStateFromProps||"function"===typeof e.getSnapshotBeforeUpdate||"function"!== +typeof e.UNSAFE_componentWillMount&&"function"!==typeof e.componentWillMount||(b=e.state,"function"===typeof e.componentWillMount&&e.componentWillMount(),"function"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Dd.enqueueReplaceState(e,e.state,null),wd(a,c,e,d),e.state=a.memoizedState);"function"===typeof e.componentDidMount&&(a.flags|=4194308)}function Ub(a,b){try{var c="",d=b;do c+=fj(d),d=d.return;while(d);var e=c}catch(f){e="\nError generating stack: "+f.message+ +"\n"+f.stack}return{value:a,source:b,stack:e,digest:null}}function vf(a,b,c){return{value:a,source:null,stack:null!=c?c:null,digest:null!=b?b:null}}function wf(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}function gi(a,b,c){c=Pa(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Ed||(Ed=!0,xf=d);wf(a,b)};return c}function hi(a,b,c){c=Pa(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if("function"===typeof d){var e=b.value;c.payload=function(){return d(e)}; +c.callback=function(){wf(a,b)}}var f=a.stateNode;null!==f&&"function"===typeof f.componentDidCatch&&(c.callback=function(){wf(a,b);"function"!==typeof d&&(null===ib?ib=new Set([this]):ib.add(this));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:""})});return c}function ii(a,b,c){var d=a.pingCache;if(null===d){d=a.pingCache=new rk;var e=new Set;d.set(b,e)}else e=d.get(b),void 0===e&&(e=new Set,d.set(b,e));e.has(c)||(e.add(c),a=sk.bind(null,a,b,c),b.then(a,a))}function ji(a){do{var b; +if(b=13===a.tag)b=a.memoizedState,b=null!==b?null!==b.dehydrated?!0:!1:!0;if(b)return a;a=a.return}while(null!==a);return null}function ki(a,b,c,d,e){if(0===(a.mode&1))return a===b?a.flags|=65536:(a.flags|=128,c.flags|=131072,c.flags&=-52805,1===c.tag&&(null===c.alternate?c.tag=17:(b=Pa(-1,1),b.tag=2,fb(c,b,1))),c.lanes|=1),a;a.flags|=65536;a.lanes=e;return a}function aa(a,b,c,d){b.child=null===a?li(b,null,c,d):Vb(b,a.child,c,d)}function mi(a,b,c,d,e){c=c.render;var f=b.ref;Sb(b,e);d=mf(a,b,c,d,f, +e);c=nf();if(null!==a&&!ha)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Qa(a,b,e);D&&c&&Ue(b);b.flags|=1;aa(a,b,d,e);return b.child}function ni(a,b,c,d,e){if(null===a){var f=c.type;if("function"===typeof f&&!yf(f)&&void 0===f.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=f,oi(a,b,f,d,e);a=rd(c.type,null,d,b,b.mode,e);a.ref=b.ref;a.return=b;return b.child=a}f=a.child;if(0===(a.lanes&e)){var g=f.memoizedProps;c=c.compare;c=null!==c?c:qc;if(c(g,d)&&a.ref=== +b.ref)return Qa(a,b,e)}b.flags|=1;a=eb(f,d);a.ref=b.ref;a.return=b;return b.child=a}function oi(a,b,c,d,e){if(null!==a){var f=a.memoizedProps;if(qc(f,d)&&a.ref===b.ref)if(ha=!1,b.pendingProps=d=f,0!==(a.lanes&e))0!==(a.flags&131072)&&(ha=!0);else return b.lanes=a.lanes,Qa(a,b,e)}return zf(a,b,c,d,e)}function pi(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if("hidden"===d.mode)if(0===(b.mode&1))b.memoizedState={baseLanes:0,cachePool:null,transitions:null},y(Ga,ba),ba|=c; +else{if(0===(c&1073741824))return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a,cachePool:null,transitions:null},b.updateQueue=null,y(Ga,ba),ba|=a,null;b.memoizedState={baseLanes:0,cachePool:null,transitions:null};d=null!==f?f.baseLanes:c;y(Ga,ba);ba|=d}else null!==f?(d=f.baseLanes|c,b.memoizedState=null):d=c,y(Ga,ba),ba|=d;aa(a,b,e,c);return b.child}function qi(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=512,b.flags|=2097152}function zf(a, +b,c,d,e){var f=ea(c)?pb:J.current;f=Nb(b,f);Sb(b,e);c=mf(a,b,c,d,f,e);d=nf();if(null!==a&&!ha)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Qa(a,b,e);D&&d&&Ue(b);b.flags|=1;aa(a,b,c,e);return b.child}function ri(a,b,c,d,e){if(ea(c)){var f=!0;ld(b)}else f=!1;Sb(b,e);if(null===b.stateNode)Fd(a,b),ei(b,c,d),uf(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,n=c.contextType;"object"===typeof n&&null!==n?n=qa(n):(n=ea(c)?pb:J.current,n=Nb(b, +n));var l=c.getDerivedStateFromProps,m="function"===typeof l||"function"===typeof g.getSnapshotBeforeUpdate;m||"function"!==typeof g.UNSAFE_componentWillReceiveProps&&"function"!==typeof g.componentWillReceiveProps||(h!==d||k!==n)&&fi(b,g,d,n);gb=!1;var r=b.memoizedState;g.state=r;wd(b,d,g,e);k=b.memoizedState;h!==d||r!==k||S.current||gb?("function"===typeof l&&(tf(b,c,l,d),k=b.memoizedState),(h=gb||di(b,c,h,d,r,k,n))?(m||"function"!==typeof g.UNSAFE_componentWillMount&&"function"!==typeof g.componentWillMount|| +("function"===typeof g.componentWillMount&&g.componentWillMount(),"function"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),"function"===typeof g.componentDidMount&&(b.flags|=4194308)):("function"===typeof g.componentDidMount&&(b.flags|=4194308),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=n,d=h):("function"===typeof g.componentDidMount&&(b.flags|=4194308),d=!1)}else{g=b.stateNode;Fh(a,b);h=b.memoizedProps;n=b.type===b.elementType?h:ya(b.type,h);g.props= +n;m=b.pendingProps;r=g.context;k=c.contextType;"object"===typeof k&&null!==k?k=qa(k):(k=ea(c)?pb:J.current,k=Nb(b,k));var p=c.getDerivedStateFromProps;(l="function"===typeof p||"function"===typeof g.getSnapshotBeforeUpdate)||"function"!==typeof g.UNSAFE_componentWillReceiveProps&&"function"!==typeof g.componentWillReceiveProps||(h!==m||r!==k)&&fi(b,g,d,k);gb=!1;r=b.memoizedState;g.state=r;wd(b,d,g,e);var x=b.memoizedState;h!==m||r!==x||S.current||gb?("function"===typeof p&&(tf(b,c,p,d),x=b.memoizedState), +(n=gb||di(b,c,n,d,r,x,k)||!1)?(l||"function"!==typeof g.UNSAFE_componentWillUpdate&&"function"!==typeof g.componentWillUpdate||("function"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,x,k),"function"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,x,k)),"function"===typeof g.componentDidUpdate&&(b.flags|=4),"function"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=1024)):("function"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|= +4),"function"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),b.memoizedProps=d,b.memoizedState=x),g.props=d,g.state=x,g.context=k,d=n):("function"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),"function"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),d=!1)}return Af(a,b,c,d,f,e)}function Af(a,b,c,d,e,f){qi(a,b);var g=0!==(b.flags&128);if(!d&&!g)return e&&vh(b,c,!1), +Qa(a,b,f);d=b.stateNode;tk.current=b;var h=g&&"function"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=Vb(b,a.child,null,f),b.child=Vb(b,null,h,f)):aa(a,b,h,f);b.memoizedState=d.state;e&&vh(b,c,!0);return b.child}function si(a){var b=a.stateNode;b.pendingContext?th(a,b.pendingContext,b.pendingContext!==b.context):b.context&&th(a,b.context,!1);gf(a,b.containerInfo)}function ti(a,b,c,d,e){Qb();Ye(e);b.flags|=256;aa(a,b,c,d);return b.child}function Bf(a){return{baseLanes:a, +cachePool:null,transitions:null}}function ui(a,b,c){var d=b.pendingProps,e=F.current,f=!1,g=0!==(b.flags&128),h;(h=g)||(h=null!==a&&null===a.memoizedState?!1:0!==(e&2));if(h)f=!0,b.flags&=-129;else if(null===a||null!==a.memoizedState)e|=1;y(F,e&1);if(null===a){Xe(b);a=b.memoizedState;if(null!==a&&(a=a.dehydrated,null!==a))return 0===(b.mode&1)?b.lanes=1:"$!"===a.data?b.lanes=8:b.lanes=1073741824,null;g=d.children;a=d.fallback;return f?(d=b.mode,f=b.child,g={mode:"hidden",children:g},0===(d&1)&&null!== +f?(f.childLanes=0,f.pendingProps=g):f=Gd(g,d,0,null),a=sb(a,d,c,null),f.return=b,a.return=b,f.sibling=a,b.child=f,b.child.memoizedState=Bf(c),b.memoizedState=Cf,a):Df(b,g)}e=a.memoizedState;if(null!==e&&(h=e.dehydrated,null!==h))return uk(a,b,g,d,h,e,c);if(f){f=d.fallback;g=b.mode;e=a.child;h=e.sibling;var k={mode:"hidden",children:d.children};0===(g&1)&&b.child!==e?(d=b.child,d.childLanes=0,d.pendingProps=k,b.deletions=null):(d=eb(e,k),d.subtreeFlags=e.subtreeFlags&14680064);null!==h?f=eb(h,f):(f= +sb(f,g,c,null),f.flags|=2);f.return=b;d.return=b;d.sibling=f;b.child=d;d=f;f=b.child;g=a.child.memoizedState;g=null===g?Bf(c):{baseLanes:g.baseLanes|c,cachePool:null,transitions:g.transitions};f.memoizedState=g;f.childLanes=a.childLanes&~c;b.memoizedState=Cf;return d}f=a.child;a=f.sibling;d=eb(f,{mode:"visible",children:d.children});0===(b.mode&1)&&(d.lanes=c);d.return=b;d.sibling=null;null!==a&&(c=b.deletions,null===c?(b.deletions=[a],b.flags|=16):c.push(a));b.child=d;b.memoizedState=null;return d} +function Df(a,b,c){b=Gd({mode:"visible",children:b},a.mode,0,null);b.return=a;return a.child=b}function Hd(a,b,c,d){null!==d&&Ye(d);Vb(b,a.child,null,c);a=Df(b,b.pendingProps.children);a.flags|=2;b.memoizedState=null;return a}function uk(a,b,c,d,e,f,g){if(c){if(b.flags&256)return b.flags&=-257,d=vf(Error(m(422))),Hd(a,b,g,d);if(null!==b.memoizedState)return b.child=a.child,b.flags|=128,null;f=d.fallback;e=b.mode;d=Gd({mode:"visible",children:d.children},e,0,null);f=sb(f,e,g,null);f.flags|=2;d.return= +b;f.return=b;d.sibling=f;b.child=d;0!==(b.mode&1)&&Vb(b,a.child,null,g);b.child.memoizedState=Bf(g);b.memoizedState=Cf;return f}if(0===(b.mode&1))return Hd(a,b,g,null);if("$!"===e.data){d=e.nextSibling&&e.nextSibling.dataset;if(d)var h=d.dgst;d=h;f=Error(m(419));d=vf(f,d,void 0);return Hd(a,b,g,d)}h=0!==(g&a.childLanes);if(ha||h){d=O;if(null!==d){switch(g&-g){case 4:e=2;break;case 16:e=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:e= +32;break;case 536870912:e=268435456;break;default:e=0}e=0!==(e&(d.suspendedLanes|g))?0:e;0!==e&&e!==f.retryLane&&(f.retryLane=e,Oa(a,e),xa(d,a,e,-1))}Ef();d=vf(Error(m(421)));return Hd(a,b,g,d)}if("$?"===e.data)return b.flags|=128,b.child=a.child,b=vk.bind(null,a),e._reactRetry=b,null;a=f.treeContext;fa=Ka(e.nextSibling);la=b;D=!0;wa=null;null!==a&&(na[oa++]=Ma,na[oa++]=Na,na[oa++]=rb,Ma=a.id,Na=a.overflow,rb=b);b=Df(b,d.children);b.flags|=4096;return b}function vi(a,b,c){a.lanes|=b;var d=a.alternate; +null!==d&&(d.lanes|=b);df(a.return,b,c)}function Ff(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.renderingStartTime=0,f.last=d,f.tail=c,f.tailMode=e)}function wi(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;aa(a,b,d.children,c);d=F.current;if(0!==(d&2))d=d&1|2,b.flags|=128;else{if(null!==a&&0!==(a.flags&128))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&& +vi(a,c,b);else if(19===a.tag)vi(a,c,b);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}y(F,d);if(0===(b.mode&1))b.memoizedState=null;else switch(e){case "forwards":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===xd(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);Ff(b,!1,e,c,f);break;case "backwards":c= +null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===xd(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}Ff(b,!0,c,null,f);break;case "together":Ff(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}function Fd(a,b){0===(b.mode&1)&&null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2)}function Qa(a,b,c){null!==a&&(b.dependencies=a.dependencies);ra|=b.lanes;if(0===(c&b.childLanes))return null;if(null!==a&&b.child!==a.child)throw Error(m(153));if(null!== +b.child){a=b.child;c=eb(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=eb(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}function wk(a,b,c){switch(b.tag){case 3:si(b);Qb();break;case 5:Ih(b);break;case 1:ea(b.type)&&ld(b);break;case 4:gf(b,b.stateNode.containerInfo);break;case 10:var d=b.type._context,e=b.memoizedProps.value;y(ud,d._currentValue);d._currentValue=e;break;case 13:d=b.memoizedState;if(null!==d){if(null!==d.dehydrated)return y(F,F.current& +1),b.flags|=128,null;if(0!==(c&b.child.childLanes))return ui(a,b,c);y(F,F.current&1);a=Qa(a,b,c);return null!==a?a.sibling:null}y(F,F.current&1);break;case 19:d=0!==(c&b.childLanes);if(0!==(a.flags&128)){if(d)return wi(a,b,c);b.flags|=128}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);y(F,F.current);if(d)break;else return null;case 22:case 23:return b.lanes=0,pi(a,b,c)}return Qa(a,b,c)}function Dc(a,b){if(!D)switch(a.tailMode){case "hidden":b=a.tail;for(var c=null;null!== +b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case "collapsed":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}function W(a){var b=null!==a.alternate&&a.alternate.child===a.child,c=0,d=0;if(b)for(var e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags&14680064,d|=e.flags&14680064,e.return=a,e=e.sibling;else for(e=a.child;null!==e;)c|=e.lanes|e.childLanes, +d|=e.subtreeFlags,d|=e.flags,e.return=a,e=e.sibling;a.subtreeFlags|=d;a.childLanes=c;return b}function xk(a,b,c){var d=b.pendingProps;Ve(b);switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return W(b),null;case 1:return ea(b.type)&&(v(S),v(J)),W(b),null;case 3:d=b.stateNode;Tb();v(S);v(J);jf();d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)pd(b)?b.flags|=4:null===a||a.memoizedState.isDehydrated&&0===(b.flags& +256)||(b.flags|=1024,null!==wa&&(Gf(wa),wa=null));xi(a,b);W(b);return null;case 5:hf(b);var e=ub(xc.current);c=b.type;if(null!==a&&null!=b.stateNode)yk(a,b,c,d,e),a.ref!==b.ref&&(b.flags|=512,b.flags|=2097152);else{if(!d){if(null===b.stateNode)throw Error(m(166));W(b);return null}a=ub(Ea.current);if(pd(b)){d=b.stateNode;c=b.type;var f=b.memoizedProps;d[Da]=b;d[uc]=f;a=0!==(b.mode&1);switch(c){case "dialog":B("cancel",d);B("close",d);break;case "iframe":case "object":case "embed":B("load",d);break; +case "video":case "audio":for(e=0;e\x3c/script>",a=a.removeChild(a.firstChild)):"string"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),"select"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Da]=b;a[uc]=d;zk(a,b,!1,!1);b.stateNode=a;a:{g=qe(c,d);switch(c){case "dialog":B("cancel",a);B("close",a);e=d;break;case "iframe":case "object":case "embed":B("load",a);e=d;break; +case "video":case "audio":for(e=0;eHf&&(b.flags|=128,d=!0,Dc(f,!1),b.lanes=4194304)}else{if(!d)if(a=xd(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dc(f,!0),null===f.tail&&"hidden"===f.tailMode&&!g.alternate&&!D)return W(b),null}else 2*P()-f.renderingStartTime>Hf&&1073741824!==c&&(b.flags|= +128,d=!0,Dc(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=b,f.tail=b.sibling,f.renderingStartTime=P(),b.sibling=null,c=F.current,y(F,d?c&1|2:c&1),b;W(b);return null;case 22:case 23:return ba=Ga.current,v(Ga),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(ba&1073741824)&&(W(b),b.subtreeFlags&6&&(b.flags|=8192)):W(b),null;case 24:return null; +case 25:return null}throw Error(m(156,b.tag));}function Bk(a,b,c){Ve(b);switch(b.tag){case 1:return ea(b.type)&&(v(S),v(J)),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Tb(),v(S),v(J),jf(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return hf(b),null;case 13:v(F);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(m(340));Qb()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return v(F),null;case 4:return Tb(), +null;case 10:return cf(b.type._context),null;case 22:case 23:return ba=Ga.current,v(Ga),null;case 24:return null;default:return null}}function Wb(a,b){var c=a.ref;if(null!==c)if("function"===typeof c)try{c(null)}catch(d){G(a,b,d)}else c.current=null}function If(a,b,c){try{c()}catch(d){G(a,b,d)}}function Ck(a,b){Jf=Zc;a=ch();if(Ie(a)){if("selectionStart"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection(); +if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(M){c=null;break a}var g=0,h=-1,k=-1,n=0,q=0,u=a,r=null;b:for(;;){for(var p;;){u!==c||0!==e&&3!==u.nodeType||(h=g+e);u!==f||0!==d&&3!==u.nodeType||(k=g+d);3===u.nodeType&&(g+=u.nodeValue.length);if(null===(p=u.firstChild))break;r=u;u=p}for(;;){if(u===a)break b;r===c&&++n===e&&(h=g);r===f&&++q===d&&(k=g);if(null!==(p=u.nextSibling))break;u=r;r=u.parentNode}u=p}c=-1===h||-1===k?null: +{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Kf={focusedElem:a,selectionRange:c};Zc=!1;for(l=b;null!==l;)if(b=l,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,l=a;else for(;null!==l;){b=l;try{var x=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;case 1:if(null!==x){var v=x.memoizedProps,z=x.memoizedState,w=b.stateNode,A=w.getSnapshotBeforeUpdate(b.elementType===b.type?v:ya(b.type,v),z);w.__reactInternalSnapshotBeforeUpdate=A}break;case 3:var t= +b.stateNode.containerInfo;1===t.nodeType?t.textContent="":9===t.nodeType&&t.documentElement&&t.removeChild(t.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(m(163));}}catch(M){G(b,b.return,M)}a=b.sibling;if(null!==a){a.return=b.return;l=a;break}l=b.return}x=zi;zi=!1;return x}function Gc(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&If(b,c,f)}e=e.next}while(e!==d)}} +function Id(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Lf(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}"function"===typeof b?b(a):b.current=a}}function Ai(a){var b=a.alternate;null!==b&&(a.alternate=null,Ai(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Da],delete b[uc],delete b[Me],delete b[Dk], +delete b[Ek]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Bi(a){return 5===a.tag||3===a.tag||4===a.tag}function Ci(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Bi(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags& +2))return a.stateNode}}function Mf(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=kd));else if(4!==d&&(a=a.child,null!==a))for(Mf(a,b,c),a=a.sibling;null!==a;)Mf(a,b,c),a=a.sibling}function Nf(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a); +else if(4!==d&&(a=a.child,null!==a))for(Nf(a,b,c),a=a.sibling;null!==a;)Nf(a,b,c),a=a.sibling}function jb(a,b,c){for(c=c.child;null!==c;)Di(a,b,c),c=c.sibling}function Di(a,b,c){if(Ca&&"function"===typeof Ca.onCommitFiberUnmount)try{Ca.onCommitFiberUnmount(Uc,c)}catch(h){}switch(c.tag){case 5:X||Wb(c,b);case 6:var d=T,e=za;T=null;jb(a,b,c);T=d;za=e;null!==T&&(za?(a=T,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):T.removeChild(c.stateNode));break;case 18:null!==T&&(za? +(a=T,c=c.stateNode,8===a.nodeType?Re(a.parentNode,c):1===a.nodeType&&Re(a,c),nc(a)):Re(T,c.stateNode));break;case 4:d=T;e=za;T=c.stateNode.containerInfo;za=!0;jb(a,b,c);T=d;za=e;break;case 0:case 11:case 14:case 15:if(!X&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?If(c,b,g):0!==(f&4)&&If(c,b,g));e=e.next}while(e!==d)}jb(a,b,c);break;case 1:if(!X&&(Wb(c,b),d=c.stateNode,"function"===typeof d.componentWillUnmount))try{d.props= +c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){G(c,b,h)}jb(a,b,c);break;case 21:jb(a,b,c);break;case 22:c.mode&1?(X=(d=X)||null!==c.memoizedState,jb(a,b,c),X=d):jb(a,b,c);break;default:jb(a,b,c)}}function Ei(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Fk);b.forEach(function(b){var d=Gk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}function Aa(a,b,c){c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=P()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*Mk(d/1960))-d;if(10a?16:a;if(null===lb)var d=!1;else{a=lb;lb=null;Qd=0;if(0!==(p&6))throw Error(m(331));var e=p;p|=4;for(l=a.current;null!==l;){var f=l,g=f.child;if(0!==(l.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kP()-Of?wb(a,0):Sf|=c);ia(a,b)}function Ti(a,b){0===b&&(0===(a.mode&1)?b=1:(b=Rd,Rd<<=1,0===(Rd&130023424)&&(Rd=4194304)));var c=Z();a=Oa(a,b);null!==a&&(ic(a,b,c),ia(a,c))}function vk(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Ti(a,c)}function Gk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane); +break;case 19:d=a.stateNode;break;default:throw Error(m(314));}null!==d&&d.delete(b);Ti(a,c)}function Mi(a,b){return xh(a,b)}function Tk(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function yf(a){a= +a.prototype;return!(!a||!a.isReactComponent)}function Uk(a){if("function"===typeof a)return yf(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===ie)return 11;if(a===je)return 14}return 2}function eb(a,b){var c=a.alternate;null===c?(c=pa(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child= +a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};c.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}function rd(a,b,c,d,e,f){var g=2;d=a;if("function"===typeof a)yf(a)&&(g=1);else if("string"===typeof a)g=5;else a:switch(a){case Bb:return sb(c.children,e,f,b);case fe:g=8;e|=8;break;case ee:return a=pa(12,c,b,e|2),a.elementType=ee,a.lanes=f,a;case ge:return a= +pa(13,c,b,e),a.elementType=ge,a.lanes=f,a;case he:return a=pa(19,c,b,e),a.elementType=he,a.lanes=f,a;case Ui:return Gd(c,e,f,b);default:if("object"===typeof a&&null!==a)switch(a.$$typeof){case hg:g=10;break a;case gg:g=9;break a;case ie:g=11;break a;case je:g=14;break a;case Ta:g=16;d=null;break a}throw Error(m(130,null==a?a:typeof a,""));}b=pa(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function sb(a,b,c,d){a=pa(7,a,d,b);a.lanes=c;return a}function Gd(a,b,c,d){a=pa(22,a,d,b);a.elementType= +Ui;a.lanes=c;a.stateNode={isHidden:!1};return a}function Ze(a,b,c){a=pa(6,a,null,b);a.lanes=c;return a}function $e(a,b,c){b=pa(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}function Vk(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority= +0;this.eventTimes=we(0);this.expirationTimes=we(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=we(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=null}function Vf(a,b,c,d,e,f,g,h,k,l){a=new Vk(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=pa(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null, +pendingSuspenseBoundaries:null};ff(f);return a}function Wk(a,b,c){var d=3