bringup — Launch Orchestration¶
The bringup package is the single entry point for the entire fishing-arm stack.
It owns no application logic; instead it wires together ros2_control, TF, and
delegates to the other packages via IncludeLaunchDescription.
Source: software/src/bringup/
Auto-generated tables: bringup
Role in the stack¶
robot.launch.py is the only launch file most operators need. It:
Resolves the
use_simflag at xacro time, selecting the hardware plugin.Starts
robot_state_publisher(both modes).Starts either
mujoco_ros2_control(sim) orcontroller_manager(HW).Spawns ros2_control controllers via
controller_manager/spawnernodes.Includes application launches from
control,sensors,planning, anddiagnostics.
flowchart TB
RL["robot.launch.py"]
RL --> RSP["robot_state_publisher"]
RL -->|"use_sim=true"| MJ["mujoco_ros2_control"]
RL -->|"use_sim=false"| CM["controller_manager"]
RL --> SP["controller spawners"]
RL --> CL["control.launch.py"]
RL --> SL["sensor.launch.py"]
RL --> FL["fish.launch.py<br/>(sim only)"]
RL --> DL["diagnostics.launch.py<br/>(record:=true)"]
RL --> HC["hardware_check<br/>(hardware_check:=true)"]
Launch arguments¶
Argument |
Default |
Effect |
|---|---|---|
|
|
MuJoCo simulation vs Dynamixel hardware |
|
|
Hide MuJoCo GUI (sim only) |
|
|
Auto-shutdown after N seconds (0 = until Ctrl-C) |
|
|
Enable diagnostics recorder + animation (sim) |
|
|
Open-loop motor/sensor test; disables controller |
|
|
|
Full argument list with descriptions is regenerated in the bringup page on every build.
Sim vs hardware branching¶
The use_sim argument is passed into xacro when the URDF is generated:
xacro fishing-robot.urdf.xacro use_sim:=true headless:=false
This swaps the <hardware> plugin inside <ros2_control> before any controller
loads. See description — Robot Model Assets and ROS 2 Communication Graph for the resulting
differences in nodes and topics.
Controller spawners¶
These spawners talk to /controller_manager and are identical in both modes
for the arm controllers:
Spawner |
Controller |
Mode |
|---|---|---|
|
Publishes |
both |
|
Accepts |
both |
|
Forwards fish effort to MuJoCo |
sim only |
|
Publishes rod-tip FTS wrench |
sim only |
Configuration lives in config/controllers.yaml.
Application delegation¶
Rather than declaring application nodes inline, robot.launch.py delegates:
Included launch |
Package |
Condition |
|---|---|---|
|
|
|
|
|
always |
|
|
|
|
|
|
The sensor source is set programmatically:
source = 'sim_fts' if use_sim else 'hardware'
Configuration files¶
config/controllers.yaml¶
Declares the ros2_control controller types and joint lists. Key entries:
position_trajectory_controller— jointsJoint_1,Joint_2; position command interface.fish_effort_controller(sim) — jointfish_swim; effort interface for the virtual fish.tension_sensor_broadcaster(sim) — sensortension_sensor→/tension_sensor_broadcaster/wrench.
config/params.yaml¶
Shared tuning for both tension controllers (admittance_controller and
force_feedback_controller namespaces). Passed to whichever controller node
control.launch.py starts. See control — Tension Controllers for parameter semantics.
Interactions with other packages¶
Package |
Interaction |
|---|---|
|
Supplies xacro/URDF processed with |
|
Included via |
|
Included via |
|
Included only in sim; fish disturbance drives |
|
|
|
Indirect — all app nodes use |
Typical launch commands¶
# Default simulation
ros2 launch bringup robot.launch.py
# Headless sim with 30 s recording
ros2 launch bringup robot.launch.py headless:=true record:=true run_duration:=30
# Hardware with Chaoyi controller
ros2 launch bringup robot.launch.py use_sim:=false controller_type:=force_feedback
# Pre-flight open-loop check (works in sim or HW)
ros2 launch bringup robot.launch.py hardware_check:=true