# arm_bridge.yaml
#
# Bridge config for the 6-DOF agenticros_arm sim. Feeds ros_gz_bridge's
# parameter_bridge so Gazebo Harmonic topics produced by the arm's
# JointPositionController + JointStatePublisher + PosePublisher plugins
# are exposed as the ROS 2 topics agent code expects.
#
# Direction notation:
#   GZ_TO_ROS   — gazebo publishes, ROS subscribes (joint feedback, TF, clock)
#   ROS_TO_GZ   — ROS publishes, gazebo subscribes (joint commands)
#   BIDIRECTIONAL — rarely needed
#
# Topic naming convention: /arm/<joint>/cmd_pos for joint commands. Same
# naming pattern across all six joints so a Claude / Codex / Gemini
# `ros2_publish` tool call only needs to vary the joint name.

# ---------------- Clock (GZ -> ROS) ----------------
- ros_topic_name: "/clock"
  gz_topic_name: "/clock"
  ros_type_name: "rosgraph_msgs/msg/Clock"
  gz_type_name: "gz.msgs.Clock"
  direction: GZ_TO_ROS

# ---------------- /tf  (GZ -> ROS) ----------------
- ros_topic_name: "/tf"
  gz_topic_name: "/model/agenticros_arm/pose"
  ros_type_name: "tf2_msgs/msg/TFMessage"
  gz_type_name: "gz.msgs.Pose_V"
  direction: GZ_TO_ROS

- ros_topic_name: "/tf_static"
  gz_topic_name: "/model/agenticros_arm/pose_static"
  ros_type_name: "tf2_msgs/msg/TFMessage"
  gz_type_name: "gz.msgs.Pose_V"
  direction: GZ_TO_ROS

# ---------------- Joint feedback (GZ -> ROS) ----------------
# robot_state_publisher consumes this to update the URDF transforms in
# RViz and to publish per-link /tf entries. The gz topic name matches the
# <topic>joint_states</topic> field on the SDF's JointStatePublisher
# plugin (gz-sim treats that as the literal topic, no model prefix).
- ros_topic_name: "/joint_states"
  gz_topic_name: "/joint_states"
  ros_type_name: "sensor_msgs/msg/JointState"
  gz_type_name: "gz.msgs.Model"
  direction: GZ_TO_ROS

# ---------------- Joint position commands (ROS -> GZ) ----------------
# Send std_msgs/Float64 (radians) to any of these to drive a joint.
- ros_topic_name: "/arm/shoulder_pan/cmd_pos"
  gz_topic_name: "/arm/shoulder_pan/cmd_pos"
  ros_type_name: "std_msgs/msg/Float64"
  gz_type_name: "gz.msgs.Double"
  direction: ROS_TO_GZ

- ros_topic_name: "/arm/shoulder_lift/cmd_pos"
  gz_topic_name: "/arm/shoulder_lift/cmd_pos"
  ros_type_name: "std_msgs/msg/Float64"
  gz_type_name: "gz.msgs.Double"
  direction: ROS_TO_GZ

- ros_topic_name: "/arm/elbow/cmd_pos"
  gz_topic_name: "/arm/elbow/cmd_pos"
  ros_type_name: "std_msgs/msg/Float64"
  gz_type_name: "gz.msgs.Double"
  direction: ROS_TO_GZ

- ros_topic_name: "/arm/wrist_1/cmd_pos"
  gz_topic_name: "/arm/wrist_1/cmd_pos"
  ros_type_name: "std_msgs/msg/Float64"
  gz_type_name: "gz.msgs.Double"
  direction: ROS_TO_GZ

- ros_topic_name: "/arm/wrist_2/cmd_pos"
  gz_topic_name: "/arm/wrist_2/cmd_pos"
  ros_type_name: "std_msgs/msg/Float64"
  gz_type_name: "gz.msgs.Double"
  direction: ROS_TO_GZ

- ros_topic_name: "/arm/wrist_3/cmd_pos"
  gz_topic_name: "/arm/wrist_3/cmd_pos"
  ros_type_name: "std_msgs/msg/Float64"
  gz_type_name: "gz.msgs.Double"
  direction: ROS_TO_GZ
