bringup

Top-level launch orchestration for the fishing arm: sim/real switch, ros2_control, and delegation to application packages.

  • Build type: ament_cmake

  • Version: 0.0.0

  • License: MIT

  • Maintainer(s): nzge

  • Source: src/bringup/

Launch files

robot.launch.py

ros2 launch bringup robot.launch.py

Launch argument

Default

Description

use_sim

true

Launch MuJoCo simulation (true) or the physical Dynamixel arm (false)

headless

false

Run MuJoCo without the GUI viewer window (sim only)

run_duration

0

Auto-shutdown the launch after N seconds (0 = until Ctrl-C)

record

false

Capture diagnostics plots + animation of the run (sim only)

hardware_check

false

Run the motor/sensor bring-up self-test, then shut down

controller_type

admittance

Tension controller: admittance (Julie), force_feedback (Chaoyi), or none

Source: bringup/launch/robot.launch.py

Parameters & configuration

controllers.yaml

Node controller_manager

Parameter

Default

Type

update_rate

100

int

joint_state_broadcaster.type

'joint_state_broadcaster/JointStateBroadcaster'

str

position_trajectory_controller.type

'joint_trajectory_controller/JointTrajectoryController'

str

fish_effort_controller.type

'forward_command_controller/ForwardCommandController'

str

tension_sensor_broadcaster.type

'force_torque_sensor_broadcaster/ForceTorqueSensorBroadcaster'

str

Node position_trajectory_controller

Parameter

Default

Type

joints

['Joint_1', 'Joint_2']

list

command_interfaces

['position']

list

state_interfaces

['position', 'velocity']

list

state_publish_rate

50.0

float

action_monitor_rate

20.0

float

allow_partial_joints_goal

False

bool

Node fish_effort_controller

Parameter

Default

Type

joints

['fish_swim']

list

interface_name

'effort'

str

Node tension_sensor_broadcaster

Parameter

Default

Type

sensor_name

'tension_sensor'

str

frame_id

'rod_tip_link'

str

Full file
controller_manager:
  ros__parameters:
    update_rate: 100 # Hz

    joint_state_broadcaster:
      type: joint_state_broadcaster/JointStateBroadcaster

    position_trajectory_controller:
      type: joint_trajectory_controller/JointTrajectoryController

    # --- Simulation-only controllers (spawned only when use_sim:=true) ---
    fish_effort_controller:
      type: forward_command_controller/ForwardCommandController

    tension_sensor_broadcaster:
      type: force_torque_sensor_broadcaster/ForceTorqueSensorBroadcaster

position_trajectory_controller:
  ros__parameters:
    joints:
      - Joint_1
      - Joint_2
    command_interfaces:
      - position
    state_interfaces:
      - position
      - velocity
    state_publish_rate: 50.0
    action_monitor_rate: 20.0
    allow_partial_joints_goal: false

# The fish pulls the line via an effort command on its MuJoCo slide joint.
# fish_agent publishes std_msgs/Float64MultiArray on /fish_effort_controller/commands.
fish_effort_controller:
  ros__parameters:
    joints:
      - fish_swim
    interface_name: effort

# Publishes the rod-tip load cell as geometry_msgs/WrenchStamped on
# /tension_sensor_broadcaster/wrench. load_cell converts it to FishingTension.
tension_sensor_broadcaster:
  ros__parameters:
    sensor_name: tension_sensor
    frame_id: rod_tip_link

Source: bringup/config/controllers.yaml

controllers_hw.yaml

Node controller_manager

Parameter

Default

Type

update_rate

100

int

joint_state_broadcaster.type

'joint_state_broadcaster/JointStateBroadcaster'

str

position_trajectory_controller.type

'joint_trajectory_controller/JointTrajectoryController'

str

Node position_trajectory_controller

Parameter

Default

Type

joints

['Joint_2']

list

command_interfaces

['position']

list

state_interfaces

['position', 'velocity']

list

state_publish_rate

50.0

float

action_monitor_rate

20.0

float

allow_partial_joints_goal

True

bool

Full file
controller_manager:
  ros__parameters:
    update_rate: 100 # Hz

    joint_state_broadcaster:
      type: joint_state_broadcaster/JointStateBroadcaster

    position_trajectory_controller:
      type: joint_trajectory_controller/JointTrajectoryController

position_trajectory_controller:
  ros__parameters:
    joints:
      - Joint_2
    command_interfaces:
      - position
    state_interfaces:
      - position
      - velocity
    state_publish_rate: 50.0
    action_monitor_rate: 20.0
    # Control still publishes Joint_1 hold commands; ignore the unconnected base.
    allow_partial_joints_goal: true

Source: bringup/config/controllers_hw.yaml

params.yaml

Node admittance_controller

Parameter

Default

Type

target_tension

3.5

float

safety_tension_limit

20.0

float

control_dof

1

int

pitch_joint

'Joint_2'

str

base_joint

'Joint_1'

str

joint_1_hold

1.57

float

q_init

1.745

float

q_hook

1.4

float

q_neutral

1.605

float

q_min

0.1

float

q_max

2.2

float

bite_time

2.4

float

hook_duration

1.2

float

fsm_enabled

True

bool

tension_filter_alpha

0.055

float

control_rate_hz

50.0

float

m_v

0.6

float

b_v

5.5

float

k_v

20.0

float

k_f

8.0

float

kp_track

140.0

float

kd_track

20.0

float

ki_track

0.0

float

k_g

9.95

float

rod_length

0.185

float

j_alpha

0.05

float

pos_int_limit

0.15

float

max_torque

20.0

float

Node force_feedback_controller

Parameter

Default

Type

target_tension

3.5

float

safety_tension_limit

20.0

float

control_dof

1

int

pitch_joint

'Joint_2'

str

base_joint

'Joint_1'

str

joint_1_hold

1.57

float

q_init

1.745

float

q_hook

1.4

float

q_neutral

1.605

float

q_min

0.1

float

q_max

2.2

float

bite_time

2.4

float

hook_duration

1.2

float

fsm_enabled

True

bool

tension_filter_alpha

0.055

float

control_rate_hz

50.0

float

tension_to_angle_gain

0.261799

float

qeq_alpha

0.04

float

max_qeq_step

0.00384

float

raise_gain

1.25

float

lower_gain

0.8

float

Full file
# Shared fishing tension controllers (Julie admittance + Chaoyi force feedback).
# Select at launch: controller_type:=admittance | force_feedback | none

admittance_controller:
  ros__parameters:
    target_tension: 3.5
    safety_tension_limit: 20.0

    # 1DOF mode (notebook-equivalent): control pitch_joint only; lock base_joint.
    control_dof: 1
    pitch_joint: Joint_2
    base_joint: Joint_1
    joint_1_hold: 1.57   # base_joint lock angle (rad)

    # Pitch setpoints (rad). Smaller = rod raised = higher tension.
    q_init: 1.745
    q_hook: 1.40
    q_neutral: 1.605
    q_min: 0.10
    q_max: 2.20

    bite_time: 2.4
    hook_duration: 1.2
    fsm_enabled: true
    tension_filter_alpha: 0.055
    control_rate_hz: 50.0

    # Julie admittance (virtual mass-spring-damper)
    m_v: 0.6
    b_v: 5.5
    k_v: 20.0
    k_f: 8.0
    kp_track: 140.0
    kd_track: 20.0
    ki_track: 0.0
    k_g: 9.95
    rod_length: 0.185
    j_alpha: 0.05
    pos_int_limit: 0.15
    max_torque: 20.0

force_feedback_controller:
  ros__parameters:
    target_tension: 3.5
    safety_tension_limit: 20.0

    control_dof: 1
    pitch_joint: Joint_2
    base_joint: Joint_1
    joint_1_hold: 1.57

    q_init: 1.745
    q_hook: 1.40
    q_neutral: 1.605
    q_min: 0.10
    q_max: 2.20

    bite_time: 2.4
    hook_duration: 1.2
    fsm_enabled: true
    tension_filter_alpha: 0.055
    control_rate_hz: 50.0

    # Chaoyi asymmetric proportional feedback (tuned for 3.5 N target in MuJoCo)
    tension_to_angle_gain: 0.261799   # rad/N (~15 deg/N)
    qeq_alpha: 0.04
    max_qeq_step: 0.00384             # rad (~0.22 deg)
    raise_gain: 1.25
    lower_gain: 0.80

Source: bringup/config/params.yaml

params_hw.yaml

Node admittance_controller

Parameter

Default

Type

fsm_enabled

False

bool

bite_time

0.0

float

hook_duration

0.0

float

Node force_feedback_controller

Parameter

Default

Type

fsm_enabled

False

bool

bite_time

0.0

float

hook_duration

0.0

float

Full file
# Hardware bring-up overrides (layered on params.yaml when use_sim:=false).
# Skips the sim-style bite/hook timeline so tension regulation starts immediately.

admittance_controller:
  ros__parameters:
    fsm_enabled: false
    bite_time: 0.0
    hook_duration: 0.0

force_feedback_controller:
  ros__parameters:
    fsm_enabled: false
    bite_time: 0.0
    hook_duration: 0.0

Source: bringup/config/params_hw.yaml

Dependencies

  • Build tool: ament_cmake

  • Runtime: control controller_manager description diagnostics force_torque_sensor_broadcaster forward_command_controller joint_state_broadcaster joint_trajectory_controller planning robot_state_publisher sensors xacro

  • Test: ament_lint_auto ament_lint_common