Metadata-Version: 2.4
Name: armw
Version: 2.0.1
Summary: ARMW: Agnostic Robot MiddleWare
Author-email: Nathan McGuire <nmcguire@whoi.edu>
Maintainer-email: Caileigh Fitzgerald <cfitzgerald@whoi.edu>, Eric Gallimore <egallimore@whoi.edu>
Project-URL: Homepage, http://acomms.whoi.edu
Project-URL: Documentation, https://ros.pages.whoi.edu/armw/
Project-URL: Repository, https://git.whoi.edu/ros/armw.git
Project-URL: Issues, https://git.whoi.edu/ros/armw/-/issues
Project-URL: Changelog, https://git.whoi.edu/ros/armw/-/blob/main/CHANGELOG.md?ref_type=heads
Keywords: Library,Python Modules,Scientific/Engineering
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3.6
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Scientific/Engineering
Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)
Requires-Python: >=3.6
Description-Content-Type: text/markdown
Requires-Dist: deprecated

# Agnostic Robot Middleware

 [![pipeline status](https://git.whoi.edu/ros/armw/badges/master/pipeline.svg)](https://git.whoi.edu/ros/armw/-/commits/master) 
 [![coverage report](https://git.whoi.edu/ros/armw/badges/master/coverage.svg)](https://git.whoi.edu/ros/armw/-/commits/master) 
 [![Latest Release](https://git.whoi.edu/ros/armw/-/badges/release.svg)](https://git.whoi.edu/ros/armw/-/releases) 

A shim layer that will let the same code run in ROS1 and ROS2

## Native Backend (No ROS Runtime Required)

You can force the new native backend at runtime:

```bash
set ARMW_MIDDLEWARE=native
```

The native backend supports:

- Runtime message/service loading from ROS-compatible `.msg` / `.srv`
- Cross-process pub/sub (local IPC first)
- RPC service client/server
- Parameter APIs and a native parameter server wrapper

### Message Definition Search Paths

`MessageFactory` resolves packages from:

1. Current working directory
2. `ROS_PACKAGE_PATH`
3. `AMENT_PREFIX_PATH`
4. `CMAKE_PREFIX_PATH`

Package lookup checks:

- `<root>/<package>`
- `<root>/src/<package>`
- `<root>/share/<package>`

### Native Backend Configuration

Environment variables:

- `ARMW_MIDDLEWARE`: backend selection (`native`, `ros1`, `ros2`)
- `ARMW_NATIVE_TRANSPORT`: `local_ipc` (default) or `tcp`
- `ARMW_NATIVE_IPC_DIR`: base directory for local IPC endpoints (default: OS temp `armw_rpc` directory)
- `ARMW_NATIVE_IPC_AUTHKEY`: auth key for local IPC listener/client auth (default: `armw`)
- `ARMW_NATIVE_TCP_HOST`: TCP host when using `tcp` transport (default: `127.0.0.1`)
- `ARMW_NATIVE_TCP_BASE_PORT`: base TCP port when using `tcp` transport (default: `45000`)
- `ARMW_NATIVE_RPC_TIMEOUT`: default RPC call timeout seconds (default: `2.0`)
- `ARMW_NATIVE_BROKER_STARTUP_TIMEOUT`: pub/sub broker startup wait seconds (default: `1.0`)
- `ARMW_NATIVE_BROKER_CONNECT_TIMEOUT`: pub/sub broker connect timeout seconds (default: `0.2`)

These also have optional `armw.globals` overrides with matching names:
`NATIVE_TRANSPORT_MODE`, `NATIVE_IPC_DIR`, `NATIVE_IPC_AUTHKEY`, `NATIVE_TCP_HOST`, `NATIVE_TCP_BASE_PORT`,
`NATIVE_RPC_TIMEOUT`, `NATIVE_BROKER_STARTUP_TIMEOUT`, `NATIVE_BROKER_CONNECT_TIMEOUT`.
