feat: package TG3 TS1P OmniSocket teleoperation
This commit is contained in:
119
tg3_local_teleop/config.toml
Normal file
119
tg3_local_teleop/config.toml
Normal file
@@ -0,0 +1,119 @@
|
||||
[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
|
||||
Reference in New Issue
Block a user