Files
TG3/tg3_local_teleop/config.toml

120 lines
4.5 KiB
TOML

[network]
# Direct OmniSocket KCP input. No robot-side ZMQ receiving proxy is used.
transport = "omnisocket"
omnisocket_server = "175.178.116.187:14049"
omnisocket_peer_id = "tg3-009027fa8190-robot"
omnisocket_expected_sender = "tg3-009027fa8190-iarm"
omnisocket_max_packet_age_ms = 300.0
# The native session can remain blocked on an old connection after the public
# Hub disappears. Publication stops at source_timeout_s; after this longer
# interval the process exits and 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"
source_timeout_s = 0.25
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,
]
[locomotion]
# Right C remains an immediate deadman: while teleoperation is active, C plus
# a left-stick command acts on the next 50 Hz tick. There is 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
# 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]
[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