interfaces — Custom Messages

The interfaces package defines shared ROS 2 message types used across multiple application packages. It is an ament_cmake interface package — no runtime nodes.

Source: software/src/interfaces/msg/
Auto-generated tables: interfaces

Messages

FishingTension.msg

std_msgs/Header header
float32 tension_newtons
float32 target_tension_newtons

Field

Type

Semantics

header.stamp

builtin_interfaces/Time

Sample time

header.frame_id

string

Typically rod_tip_link

tension_newtons

float32

Measured line tension (N) — primary control input

target_tension_newtons

float32

Reserved for future feedforward/display; currently 0.0 from sensor node

Built as interfaces/msg/FishingTension → included in Python as:

from interfaces.msg import FishingTension

Topic usage

Topic

Publisher

Subscribers

/fishing_arm/tension

sensors — Line Tension Sensing / load_cell_node

control — Tension Controllers (admittance or force_feedback), diagnostics — Recording & Bring-Up Tests (recorder, hardware_check)

        flowchart LR
    S["sensors<br/>load_cell_node"] -->|"/fishing_arm/tension<br/>FishingTension"| C["control<br/>tension controller"]
    S --> D1["diagnostics<br/>recorder"]
    S --> D2["diagnostics<br/>hardware_check"]
    

Design rationale

A custom message (rather than reusing geometry_msgs/WrenchStamped or std_msgs/Float64) provides:

  1. Semantic clarity — tension in Newtons along the line, not a generic wrench.

  2. Stable API — controllers depend on one field (tension_newtons).

  3. Room for extensiontarget_tension_newtons for future overlay/debug.

The sim path internally uses WrenchStamped from tension_sensor_broadcaster but converts to FishingTension before the control layer.

Build dependency graph

Any package that imports FishingTension must declare:

<depend>interfaces</depend>

Current dependents: control, sensors, diagnostics.