205 lines
7.9 KiB
TOML
205 lines
7.9 KiB
TOML
[network]
|
|
# Direct OmniSocket KCP input. No robot-side ZMQ receiving proxy is used.
|
|
transport = "omnisocket"
|
|
omnisocket_server = "192.168.5.14:14049"
|
|
omnisocket_peer_id = "tg3-009027fa8190-robot"
|
|
omnisocket_expected_sender = "tg3-009027fa8190-iarm"
|
|
omnisocket_max_packet_age_ms = 300.0
|
|
# The deployed OmniSocket receiver does not exchange a Hub heartbeat while idle.
|
|
# Re-register periodically with make-before-break so a Hub restart cannot leave
|
|
# a false connected state and healthy refreshes never create a routing gap.
|
|
# Active traffic resets this timer and is never interrupted by this refresh.
|
|
omnisocket_idle_session_refresh_s = 30.0
|
|
# The native session can remain blocked on an old connection after the public
|
|
# Hub disappears. An active session that receives no business frame for this
|
|
# interval exits so systemd creates a completely fresh session.
|
|
omnisocket_restart_after_stale_s = 2.0
|
|
# Retained only as a direct-LAN fallback when transport is changed to "zmq".
|
|
iarm_endpoint = "tcp://192.168.5.14:5003"
|
|
expected_iarm_id = "IArm009027FA8190"
|
|
expected_iarm_type = "TS1P"
|
|
minimum_arm_frequency_hz = 30.0
|
|
|
|
[ros]
|
|
command_topic = "/encoder_identical_joint"
|
|
rl_state_topic = "/hric/robot/rl_state"
|
|
arm_state_topic = "/freq_change/arm_status"
|
|
home_service = "/tg3_local_teleop/return_home"
|
|
cancel_home_service = "/tg3_local_teleop/cancel_home"
|
|
publish_rate_hz = 50.0
|
|
|
|
[robot]
|
|
required_state = "HBWALK"
|
|
required_status = "running"
|
|
state_timeout_s = 1.0
|
|
arm_state_timeout_s = 0.25
|
|
|
|
[control]
|
|
# OmniSocket start/stop is timed on EAI before any business frame is sent.
|
|
# This value remains for the direct-ZMQ fallback latch.
|
|
auto_home_on_stop = true
|
|
start_stop_hold_seconds = 3.0
|
|
max_slew_rad_s = 1.0
|
|
# This custom margin is checked only when teleoperation starts. It is not
|
|
# checked while collecting/following. Vendor limit protection is unchanged.
|
|
joint_limit_margin_rad = 0.03
|
|
|
|
# Joint order: left 11..17, then right 21..27. Values are the TG3.0 limits
|
|
# from the supplied 26.04.x SDK document, expressed in radians.
|
|
joint_lower_rad = [
|
|
-2.8449, -0.1920, -2.8449, -2.5482, -2.8449, -1.3265, -1.3265,
|
|
-2.8449, -3.3336, -2.8449, -2.5482, -2.8449, -1.3265, -1.3265,
|
|
]
|
|
joint_upper_rad = [
|
|
2.8449, 3.3336, 2.8449, 0.1920, 2.8449, 1.3265, 1.3265,
|
|
2.8449, 0.1920, 2.8449, 0.1920, 2.8449, 1.3265, 1.3265,
|
|
]
|
|
|
|
[data_collection]
|
|
# Left joystick press (L3) is a dedicated raw xTELE field and is not registered
|
|
# by the installed xTELE 0.1.2 button handlers. It only toggles recording while
|
|
# a validated teleoperation session is armed. Z+C STOP/safety disarm always
|
|
# ends an active recording without delaying robot control or Home.
|
|
enabled = true
|
|
button_hold_seconds = 1.0
|
|
button_release_seconds = 0.5
|
|
# This threshold qualifies only the L3 button edge; it is not a robot-motion
|
|
# watchdog and does not restore the removed 0.25 s network disarm gate.
|
|
button_input_timeout_s = 0.25
|
|
control_retry_seconds = 0.5
|
|
ack_timeout_seconds = 5.0
|
|
heartbeat_interval_seconds = 0.5
|
|
heartbeat_timeout_seconds = 3.0
|
|
status_stale_seconds = 4.0
|
|
control_topic = "/tg3/data_collection/control"
|
|
status_topic = "/tg3/data_collection/status"
|
|
iarm_frame_topic = "/tg3/data_collection/iarm_frame"
|
|
base_directory = "/home/nvidia/tg3_data_collection"
|
|
minimum_free_gib = 20.0
|
|
max_duration_seconds = 1800.0
|
|
|
|
# Explicit control-data whitelist. Camera images and point clouds are omitted
|
|
# by default to bound disk and network load; never replace this with `-a` on the
|
|
# live robot. /robot_state is the authoritative measured robot state.
|
|
topics = [
|
|
"/robot_state",
|
|
"/encoder_identical_joint",
|
|
"/arm/cmd",
|
|
"/freq_change/arm_status",
|
|
"/data_logger/arm_status",
|
|
"/left_hand/set_motor_multi",
|
|
"/right_hand/set_motor_multi",
|
|
"/left_hand/motor_status",
|
|
"/right_hand/motor_status",
|
|
"/left_hand/touch_status",
|
|
"/right_hand/touch_status",
|
|
"/hric/robot/cmd_vel",
|
|
"/hric/robot/cmd_vel_status",
|
|
"/hric/robot/rl_state",
|
|
"/imu_data",
|
|
"/power/board/key_status",
|
|
"/power/board/status",
|
|
"/power/battery/status",
|
|
"/tg3/data_collection/control",
|
|
"/tg3/data_collection/status",
|
|
"/tg3/data_collection/iarm_frame",
|
|
]
|
|
|
|
# Refuse a new episode if these core streams are absent from the live ROS
|
|
# graph. Other whitelisted streams may appear later and rosbag discovery will
|
|
# subscribe to them without restarting the recorder.
|
|
required_topics = [
|
|
"/robot_state",
|
|
"/encoder_identical_joint",
|
|
"/freq_change/arm_status",
|
|
"/left_hand/motor_status",
|
|
"/right_hand/motor_status",
|
|
"/hric/robot/rl_state",
|
|
"/tg3/data_collection/control",
|
|
"/tg3/data_collection/status",
|
|
"/tg3/data_collection/iarm_frame",
|
|
]
|
|
|
|
[locomotion]
|
|
# The two original immediate bindings are independent: right C + left-stick
|
|
# vertical controls translation; left Z + right-stick horizontal controls
|
|
# in-place yaw. Both act on the next 50 Hz tick, with no second hold.
|
|
enabled = true
|
|
command_topic = "/hric/robot/cmd_vel"
|
|
# This bridge never publishes FSM commands. The robot must already report
|
|
# HBWALK/running through the existing safety gate before velocity is allowed.
|
|
# Match the TG3 secondary-development TwistStamped example.
|
|
frame_id = "pelvis"
|
|
hold_seconds = 0.0
|
|
joystick_deadzone = 0.2
|
|
joystick_expo = 2.0
|
|
# Turning is linear after the deadzone so medium right-stick travel is not
|
|
# suppressed by the quadratic forward-motion curve. The official yaw cap is
|
|
# unchanged.
|
|
yaw_joystick_expo = 1.0
|
|
# TianGong secondary-development /cmd_vel limits for full/half-body walking:
|
|
# linear.x [-0.8, +1.0] m/s and angular.z [-0.8, +0.8] rad/s.
|
|
max_forward_m_s = 1.0
|
|
max_reverse_m_s = 0.8
|
|
max_angular_rad_s = 0.8
|
|
forward_axis_sign = 1.0
|
|
yaw_axis_sign = -1.0
|
|
zero_burst_frames = 10
|
|
|
|
[hands]
|
|
# TianGong 3.0 on this robot uses BrainCo Revo2 hands. Commands are published
|
|
# only while the same physical 3-second teleoperation latch is armed.
|
|
enabled = true
|
|
left_command_topic = "/left_hand/set_motor_multi"
|
|
right_command_topic = "/right_hand/set_motor_multi"
|
|
left_status_topic = "/left_hand/motor_status"
|
|
right_status_topic = "/right_hand/motor_status"
|
|
status_timeout_s = 0.25
|
|
|
|
# Vendor robot_tele_server uses mode 5 and an 800 ms expected duration.
|
|
mode = 5
|
|
duration_ms = 800
|
|
position_min = 1
|
|
position_max = 1000
|
|
# Commissioning limit: no commanded motor may change faster than 400/1000 of
|
|
# its full stroke per second. The driver keeps its own current/stall protection.
|
|
slew_units_per_s = 400.0
|
|
invert_scalar = false
|
|
|
|
# Scalar hand.position=0 is the robot's measured default-open pose. The closed
|
|
# endpoint is the conservative BrainCoRevo2 "normal" grasp from the installed
|
|
# xTELE GestureController.
|
|
# Order: thumb bend, thumb rotation, index, middle, ring, little.
|
|
open_normalized = [0.4, 0.4, 0.05, 0.05, 0.05, 0.05]
|
|
closed_normalized = [0.9, 0.5, 0.45, 0.52, 0.52, 0.45]
|
|
|
|
# Right B owns a robot-side, release-guarded pointing gesture while a teleop
|
|
# session is armed. Both activation and deactivation require one continuous
|
|
# 1-second hold, separated by at least 0.5 seconds of stable release. A new
|
|
# session is always release-locked. The pose is xTELE GestureController's
|
|
# BrainCoRevo2 gesture 2 ("single index finger"), state 0, in motor order:
|
|
# thumb bend, thumb rotation, index, middle, ring, little.
|
|
right_b_point_gesture_enabled = true
|
|
right_b_point_gesture_hold_seconds = 1.0
|
|
right_b_point_gesture_release_seconds = 0.5
|
|
right_b_point_pose_normalized = [0.2, 0.688, 0.0, 0.98, 0.98, 0.98]
|
|
|
|
[home]
|
|
# Deliberately slower than manual teleoperation. This Home pose was captured
|
|
# from the robot's real arm feedback on 2026-08-06. Joint order is 11..17,
|
|
# followed by 21..27; values are radians. Home is not the motor-zero pose.
|
|
slew_rad_s = 0.25
|
|
joint_goal_rad = [
|
|
0.1842578799, 0.1234146282, 0.0396494754, -0.4828015864,
|
|
-0.0024294013, 0.0065013529, -0.0040423824,
|
|
0.1721130311, -0.1383204311, -0.0142812012, -0.3408825397,
|
|
0.0026911981, 0.0039934102, -0.0030838961,
|
|
]
|
|
# Abort if the commanded trajectory gets more than ~4.6 degrees ahead of
|
|
# measured robot motion.
|
|
max_tracking_error_rad = 0.08
|
|
command_tolerance_rad = 0.005
|
|
actual_tolerance_rad = 0.03
|
|
settle_s = 1.0
|
|
timeout_s = 30.0
|