谭皓天

机器人运动控制算法工程师

做基于模型的机器人控制:力矩级 QP、全身控制、阻抗 / 导纳与力控制。 用 C++ 从零搭过双臂闭链协作、人形机器人 loco-manipulation、22 自由度触觉灵巧手三套控制栈, 并在 UR10e 上完成了果园套袋机器人的实机开发。

上海大学 · 精密仪器及机械(机器人运动控制方向)硕士 · 2027 届

UR10e 果园套袋01 桃园套袋 · 实机 双臂联合优化穿梁02 双臂闭链协作 人形机器人托箱行走03 人形 Loco-Manipulation 触觉灵巧手抓取04 触觉灵巧手
98.0%
果园实车套袋成功率
441 / 450 个幼果,伤果率 0%
+10.0mm
双臂越障最小安全距离
基线控制器 −30.2 mm(穿透)
9 / 9
人形托真实箱子走满 20 s
去掉学习的参考修正后 2 / 9
17mN
灵巧手指尖力稳态误差
开环 235 mN · 电机力矩估力 248 mN

项目

一个果园实机系统,三套从零实现的控制栈

UR10e 规划场景与语义点云
果园实车连续作业(16× 加速)UR10e 规划场景与语义点云(RViz)
01UR10e + 履带底盘 实机

桃园套袋机器人

履带底盘沿树行跟踪路径、逐树停车;车体到达停车点后,机械臂带着套袋末端伸进树冠,接近被枝叶遮挡的桃子完成套袋。硬枝不能碰,叶片可以推开;纯位置控制一旦接触就会刮伤枝叶、碰落果实。

98.0%
实车套袋成功率(441 / 450)
0%
伤果率,树冠内导纳柔顺接近
≈ 6s
单果套袋耗时
15 × 30
果园实车测试:批次 × 目标幼果
作业流程
  1. 障碍观测语义点云:硬 / 软 / 桃
  2. 粗定位Fast Path,失败回退 MTC
  3. 精定位沿枝轴扇形采样 + IK 筛选
  4. 最终接近语义风险 ABIT* 规划 + 末端导纳柔顺
  5. 套袋笛卡尔直插 + IO 控制末端

方法

  • 末端导纳控制:刚度与叶面法向对齐的各向异性设计,接触枝叶时柔顺让位
  • RGB-D 语义分割构建双通道体素场:树干是不可碰障碍,树叶是可穿过的风险代价,接入 ABIT* 规划
  • 粗定位与最终接近都有规划失败时的 MTC 回退

技术难点

  • 树冠内作业无法完全避开枝叶,需要在接触中保护树体
  • 桃子位姿与枝轴约束下,套袋姿态可行域很窄
  • 双相机标定与 map → base_link 坐标统一

我的实现

  • 底盘 Frenet MPC 路径跟踪器(C++ / OSQP),替换原 Pure Pursuit 内核
  • ur10e_peach ROS1 主控节点(C++)与车体–机械臂通信协议
  • 末端导纳控制器设计、数值稳定性分析与实机部署
  • 分割全链路:数据采集 → SegFormer-B2 / UNet 训练 → ONNX → ROS1 节点
果园实车测试15 批次 × 30 个目标幼果,成功套袋 441 个,成功率 98.0%
作业质量伤果率 0%,单果套袋约 6 s
硬障碍分割像素召回 90.6%,逐图召回 84.4%,ONNX 部署
语义风险规划ABIT* 代价加入语义风险积分;相比把树叶也当障碍,成功率 50%–69% → 100%;较无语义基线沿途风险降低 26%
柔性接触按叶面法向分配刚度矩阵,10 N 死区下稳态接触力降低 55%,同等接触力下沿叶面偏移降至 1/10
实机视频待放入:assets/video/orchard_approach.mp4
树冠内接近与套袋(实时速度)
底盘路径跟踪 · Frenet MPC
  1. 误差模型横向偏差 / 航向误差线性化
  2. 曲率前馈未来 2 s 曲率剖面
  3. QPOSQP,82 变量 / 120 约束
  4. 实时求解10 Hz 重解 / 50 Hz 控制
  5. v, ωCAN 下发履带底盘
模型Frenet 系下以横向偏差、航向误差为状态建立线性化误差模型,未来 2 s(20 步)曲率剖面作前馈
约束线速度、角速度幅值与 Δu 都作为 QP 内硬约束
实时性Hessian 预构建 + 稀疏约束矩阵热更新 + OSQP 热启动
终点位置误差与 Pure Pursuit 同路径田测对比:0.120 → 0.055 m(−54%)
跟踪与效率横向误差 p95 −11%,平均车速 +10%
Pure Pursuit 与 Frenet MPC 逐趟田测对比
同一路径田测逐趟分布:Pure Pursuit 22 趟,Frenet MPC 23 趟
  • ROS1 Noetic
  • MoveIt / MTC
  • Frenet MPC
  • OSQP
  • OMPL
  • 导纳控制
  • UR10e
  • RealSense
  • 手眼标定
  • C++
  • Python
  • SegFormer
  • ONNX Runtime
联合优化:边抬升边滚转斜穿横梁后插槽
slot_gate:物体 SE(3) + 时间联合优化,边抬升边滚转、约 60° 斜穿低矮横梁后插槽,到达时间 15.5 → 7.6 s
02MuJoCo 仿真 GitHub ↗

双臂闭链协作操作

两台 Franka Panda 抓持同一物体形成闭链,要同时控制物体运动、负载分配与内力,并在障碍和模型误差下既不撞、又能完成插槽与螺钉装配;每臂 1 维冗余用关节零空间调整肘部构型。抓取既可用刚性连接,也可用手指摩擦接触。

15.5→7.6s
联合优化后穿梁到达时间
+10.6mm
地图误差 3 cm 下安全距离(只按规划执行穿透 12.6 mm)
0.25mm
接触夹取穿梁插槽终态误差
48.5→87.6mm
零空间开启后手臂到圆柱最小间隙
分层避障与控制链路
  1. 轨迹优化物体 SE(3) + 时间联合优化,离线决定绕行方向
  2. CBF 参考滤波1 kHz,3–4 维 QP,在线最小修正参考
  3. 协作控制 + 零空间物体空间阻抗、负载分配、内力反馈、肘部构型任务
  4. 力矩级 QPddq(14) + λ(6) + slack(8),关节层兜底
  5. τ 左 / 右臂刚性或摩擦接触夹取

方法

  • 序列凸规划做物体 SE(3) + 时间联合优化,碰撞约束覆盖物体与闭链 IK 下的两臂
  • CBF 参考滤波以偏移和虚拟时间为变量,约束物体–障碍距离,取代原先的越障状态机
  • 固定尺寸力矩级 QP 统一闭链、关节、力矩与碰撞约束;抓取矩阵分配负载,内力零空间反馈
  • 动力学一致零空间投影 Nᵀ:姿态保持、关节限位与手臂构型避障,不影响两手 TCP

技术难点

  • 局部方法(CBF、QP)能保证不撞,但选不对绕行方向;只按规划执行又扛不住地图误差和扰动
  • 关节层硬拦时参考仍往障碍里走,两臂隔着物体较劲,接触夹取会失接触
  • 平行夹爪抗扭能力弱,等权分配会把约 92% 的俯仰力矩压到指垫法向
  • 零空间只能改肘部、动不了手,离障碍最近的是手时要交给轨迹规划

我的实现

  • C++17 / Eigen 实现轨迹优化器、CBF 滤波(LDP / NNLS 精确求解)、协作阻抗、零空间任务与力矩 QP
  • 手指摩擦接触夹取:预抓取 → 接近 → 对准 → 闭合,抗扭感知的 wrench 分配
  • plant 与控制器模型分离,可注入地图误差、标定误差与外力;130 项测试,malloc 插桩验证零堆分配
分层必要性只用 CBF:绕错方向,离目标 95 mm 未完成;只用力矩 QP:跟踪误差 160 mm;联合优化 + CBF + QP:8.5 mm、7.6 s
执行层偏差地图误差 3 cm:只按规划穿透 12.6 mm;+CBF 保持 10.6 mm,内力 13.0 → 7.2 N(对比仅 QP 兜底);接触夹取下仅 QP 兜底失接触
关节零空间插槽阶段左 / 右臂到圆柱间隙 55.8 / 48.5 → 89.7 / 87.6 mm,物体误差 11.14 → 10.74 mm,物体轨迹不变
在线越障普通协作控制 −30.2 mm(穿透)→ CBF 参考滤波 +10.0 mm,参考偏移按需 133.5 mm
接触夹取对准误差 0.33 mm;穿梁插槽终态 0.25 mm / 0.05°;螺钉装配拧紧力矩 0.999 / 1.0 N·m
零空间关 / 开:名义航点、CBF、QP 完全相同,开启后插槽时两臂主动收肘、远离圆柱
接触夹取螺钉装配
接触夹取装配:左臂稳持工件,右臂用内六角螺丝刀预紧 → 拧紧 → HOLD
  • C++17
  • Eigen
  • MuJoCo
  • 力矩级 QP
  • CBF
  • 轨迹优化
  • 阻抗控制
  • 零空间控制
  • 摩擦接触
  • GTest
最终策略:托 5 kg 箱子以 1.0 m/s 行走,箱子只靠前臂摩擦托住,对称交替步态
03Isaac Lab + MuJoCo 仿真 GitHub ↗

人形机器人 Loco-Manipulation

Unitree H1 边走边托箱。腿–地接触难以精确建模,交给 RL;手臂需要毫米级精度和关节硬约束,交给 QP。关键在于两者的耦合、训练端与部署端的一致性,以及步态本身是否合理。

6.1mm
手部误差 RMS(关节固定时 22.1 mm)
7→9/ 9
力矩限幅对齐后部署存活
0.02–0.05
步态左右对称指数(修复前 0.96–1.34)
9 / 9
μ = 0.5 真实箱子托满 20 s(修复前 7/9)
控制架构
  1. RL 策略Isaac Lab PPO,4096 并行环境,含步态时钟观测
  2. 腿部动作 + 双手目标残差残差:双手内夹 / 抬高
  3. 上肢速度级 QP9 DoF,手部位置 + 前臂俯仰任务
  4. qdes + τff基座运动前馈 + 负载重力前馈
  5. MuJoCo 部署50 Hz 策略 / 100 Hz QP / 500 Hz PD

方法

  • 上肢加权 QP 放进 RL 训练回路,GPU 批量求解,与 C++ 版逐项对齐
  • RL 在 QP 的手部目标上学习参考残差,由 QP 精确执行,约束始终有效
  • 周期步态奖励(时钟、着地时序、摆动高度)+ 左右镜像数据增强,修正跛行步态

技术难点

  • 训练端(GPU QP / torch / Isaac)与部署端(C++ OSQP / MuJoCo)必须逐层一致
  • 带负载 1.0 m/s 行走部署时摔倒,候选原因很多
  • 默认腾空时间奖励偏好“一腿长撑、一腿悬空”;从旧策略热启动会困在旧步态里

我的实现

  • C++ 控制栈:MuJoCo 动力学接口、OSQP 封装、上肢 QP、49 维力矩级 WBC(站立)
  • 单变量对照实验定位到踝关节力矩限幅在训练 / 部署两端不一致
  • 按关节轴推导镜像映射(roll / yaw 取负、相位平移半周期),单元测试验证
步态修复对称指数 0.96–1.34 → 0.02–0.05;摆动脚抬高 36–48 → 7.6–8.2 cm;能耗 CoT 0.71–1.31 → 0.31–0.77
真实箱子接触纯分层 0/9 → 混合方案 9/9(μ = 0.75);步态修复后 μ = 0.5 7/9 → 9/9;去掉残差仅 2/9
QP 进训练回路部署存活 9/9,随机扰动近似上肢仅 2/9
一致性核对GPU QP vs OSQP 2.4e-4 rad/s;torch vs C++ 前馈力矩 1.3e-15
  • C++17
  • Eigen
  • OSQP
  • MuJoCo
  • WBC
  • Isaac Lab
  • PPO (rsl_rl)
  • PyTorch
  • 步态奖励设计
触觉自适应握力
撤支撑 → 加载 → 摩擦突降 → 冲击,触觉策略 35 ms 内把握力提到 5 N;右侧为拇指 / 食指实时压力图
04MuJoCo 仿真 GitHub ↗

触觉灵巧手:从力矩控制到触觉闭环抓取

Sharpa Wave 22 自由度灵巧手。关节摩擦折算到指尖约 1 N,和捏持所需的 1–3 N 同一量级,电机电流估计的力不可用;摩擦系数未知且会变,物体在指尖滚动编码器也看不到。

17mN
指尖力稳态误差(开环 235 / 电机估力 248 mN)
11 / 12
随机扰动场景抓稳,握力低 27%
0.94°
手内转角误差(原 5.9°)
29µs
抓取力 QP 单次求解
控制链路
  1. 触觉阵列Hertz + Mindlin 仿真,每指尖 3900–5500 taxel
  2. 触觉估计力、压力中心、摩擦系数、摩擦利用率
  3. 抓取力 QP + 滑移反射线性化摩擦锥,OSQP
  4. 指尖力控阻抗内环 + 触觉力外环
  5. 关节力矩重力 + 摩擦 + 加速度前馈

方法

  • 导纳式指尖力控:位置误差能“顶过”关节摩擦,接触丢失时不会积分饱和
  • 单帧触觉图像拟合 Mindlin 模型,在线估计摩擦系数与离滑移的距离
  • 物体级手内操作 + 基于 SDF 与 LM 优化的 2–5 指抓取合成

技术难点

  • 控制器模型与仿真手存在 ±20% 参数失配,测量含噪声、量化和延迟
  • 摩擦系数只在接近滑移时可观测,需要用物理下界加缓慢探测估计
  • 两指“拔河”正反馈、摩擦被补偿两遍、taxel 多重比较误报

我的实现

  • 从零实现正运动学、Jacobian、RNEA、惯量矩阵,与 MuJoCo 对齐到机器精度
  • 触觉仿真、触觉估计器、广义动量摩擦观测器
  • 多指抓取控制器与自适应握力策略,约 5700 行 C++
滑动力控10° 斜板滑动力 RMSE 1.08 → 0.51 N,接触丢失 43% → 12%
触觉估计法向力误差约 1%,压力中心误差 26 µm
抓取合成11 种物体(15–80 mm,15 g–0.5 kg)自动合成 2–5 指抓取并抓稳,控制器不调参
多指收益⌀55 mm 球单指握力 5.5 N → 1.3 N(两指 → 五指)
触觉仿真:切向力增大时,滑移区从接触边缘向中心扩展
触觉力控:在倾角未知的 10° 斜板上保持 1 N 法向力往复滑动
手内操作:捏住物体画圆、绕竖直轴转 ±15°,再承受推力扰动
四指 / 五指抓取合成:5 种 50–80 mm、0.3–0.5 kg 物体,撤支撑后再加 50% 负载
两指 / 三指抓取合成:6 种小物体(笔、方块、圆柱、球等),同一套控制器、不针对物体调参
  • C++
  • Eigen
  • MuJoCo
  • OSQP
  • 力控 / 导纳
  • 抓取力优化
  • 触觉估计
  • CMake / ctest

技术栈

控制算法

  • 力矩级 QP / WBC
  • 笛卡尔 / 物体空间阻抗
  • 导纳控制
  • 力 / 阻抗混合控制
  • 闭链约束与内力控制
  • 抓取力优化
  • 控制屏障函数 CBF
  • 轨迹优化(序列凸规划)
  • 负载分配
  • 前馈 + PD 关节控制
  • 摩擦观测器

建模与优化

  • 刚体动力学 / RNEA
  • Jacobian
  • 抓取矩阵
  • 接触力学
  • OSQP
  • LM 优化

编程与工程

  • C++17
  • Eigen
  • Python
  • CMake
  • GTest
  • GitHub Actions
  • NumPy / Matplotlib

仿真与平台

  • MuJoCo
  • Isaac Lab
  • UR10e 实机
  • Franka Panda
  • Unitree H1
  • Sharpa Wave

机器人中间件

  • ROS1
  • MoveIt
  • MTC
  • OMPL
  • ROS2
  • ur_robot_driver

规划 / 感知 / 学习

  • TRRT / BiTRRT
  • 语义分割
  • SegFormer
  • ONNX Runtime
  • YOLOv8-OBB
  • RealSense
  • 手眼标定
  • OctoMap
  • PPO
  • PyTorch

教育背景

  • 上海大学2024.09 — 2027.06 精密仪器及机械(机器人运动控制方向)· 硕士
  • 西安理工大学2020.09 — 2024.06 机器人工程 · 本科

联系方式