ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

机械臂运动控制从零到实战:运动学、动力学与ROS开发避坑指南

机械臂运动控制从零到实战:运动学、动力学与ROS开发避坑指南 机械臂运动控制这个方向我断断续续搞了快四年从最早拿舵机拼五自由度玩具臂到后来用UR5e做视觉抓取中间踩过的坑能写满一个笔记本。很多人一上来就问该学ROS还是该学运动学其实这个问题本身就问反了——你得先搞清楚机械臂到底是怎么动起来的再去谈用什么工具。这篇内容我打算把从零到能跑通一个完整抓取流程的路径拆开讲包括运动学建模的数学底子、动力学为什么不能跳过、ROS里那些包到底在干什么、以及实机上最容易翻车的几个环节。不管你是做毕业设计的学生还是刚转行做机器人开发的工程师只要跟着这条线走一遍至少能少走半年弯路。1. 先搞清楚机械臂动这件事到底难在哪1.1 从我想让它到那个点到每个关节转多少度人拿杯子这个动作大脑根本不需要解什么方程但机械臂不行。你告诉它末端执行器移动到桌面坐标(0.3, 0.2, 0.5)它需要反推出六个关节各自该转多少度——这就是逆运动学要解决的问题。听起来简单实际上这里藏着三个让人头疼的地方。第一个是多解性。同一个末端位姿机械臂可能有八组甚至更多关节角组合能到达。就像你的手摸到后脑勺肘部可以朝上也可以朝下都能摸到。选哪组这取决于你的应用场景——避障、关节限位、能耗最优每个目标对应的解都不一样。第二个是奇异位形。当机械臂完全伸直或者某些关节共线时逆运动学的雅可比矩阵会降秩这时候微小的末端位移可能需要关节速度趋于无穷大。实机上表现出来就是关节突然猛转或者直接报错停机。我第一次调UR5e的时候就撞上过末端走到工作空间边缘机械臂突然抖了一下吓得我赶紧拍急停。第三个是实时性。工业场景里控制周期通常是1ms到10ms意味着逆运动学求解必须在毫秒级完成。数值解法比如雅可比伪逆迭代虽然通用但迭代次数不确定有时候收敛慢解析解法快但只适用于特定构型。这个取舍后面会详细讲。1.2 运动学和动力学一个管在哪一个管怎么动很多初学者会把这两个概念混在一起。打个比方运动学是地图导航——告诉你从A点到B点该怎么走动力学是车辆工程——告诉你发动机要输出多大扭矩、刹车要多大力度才能按这个路线走。运动学只关心几何关系关节角、末端位姿、速度、加速度之间的映射。它不关心机械臂有多重、惯量多大、电机能不能带动。你做轨迹规划、避障、工作空间分析用的都是运动学。动力学才关心力和力矩。机械臂每个连杆有质量、有惯量运动过程中会产生科氏力、离心力、重力分量。如果你只用运动学算出来的关节角去发指令低速情况下可能勉强能跑一旦速度提上来跟踪误差会大得离谱甚至出现振荡。我见过有人用纯运动学控制一个负载2kg的六轴臂做快速拾放结果末端抖得像筛糠后来加了重力补偿和惯量前馈才稳住。所以正确的学习顺序是先运动学建立空间直觉再动力学理解力矩来源最后在控制器里把两者结合起来。1.3 为什么ROS成了绕不开的一环ROS不是唯一的方案但它是目前生态最完整的。你需要的运动学求解器KDL、TRAC-IK、IKFast、动力学库RBDL、Pinocchio、仿真环境Gazebo、可视化工具RViz、硬件接口ros_control全都有现成的包。自己从零写当然可以但时间成本太高。不过ROS也有它的坑。比如MoveIt默认用的KDL求解器在奇异位形附近表现很差很多人跑Demo没问题一上实机就发现规划失败率奇高。这时候换成TRAC-IK往往能立竿见影。再比如ros_control的控制器切换逻辑如果不理解它的实时性约束很容易写出阻塞式代码导致控制周期抖动。提示如果你刚开始学不要一上来就装完整版ROS桌面环境然后跑MoveIt Demo。先用手动写一个简单的正运动学可视化理解每个关节坐标系怎么变换的再去用现成工具否则出了问题你根本不知道是哪一层错了。2. 运动学建模从DH参数到实际代码2.1 DH参数不是唯一选择但值得先学Denavit-Hartenberg参数是经典教材里的标准方法用四个参数连杆长度a、连杆扭转α、关节偏移d、关节角θ描述相邻连杆的变换关系。它的好处是系统化照着规则填表就能建出模型。坏处是对于某些构型比如平行关节或者相交关节DH参数会出现不唯一或者奇异的情况。我个人的建议是先用DH参数把标准六轴臂建一遍理解坐标系怎么附着在连杆上、变换矩阵怎么连乘。这个过程走通了再去了解改进DHMDH和指数积PoE方法。PoE用螺旋理论描述数学上更优雅对奇异构型也更鲁棒但学习曲线陡一些。以UR5e为例它的DH参数表大概长这样关节a (m)α (rad)d (m)θ (rad)10π/20.1625θ12-0.42500θ23-0.392200θ340π/20.1333θ450-π/20.0997θ56000.0996θ6填这个表的时候最容易错的是α的符号和d的正负。我的经验是先画图把每个坐标系的原点和轴向标清楚再填表。不要对着别人的参数表抄因为不同教材的坐标系定义可能差一个旋转。2.2 正运动学矩阵连乘的代码实现正运动学就是给定关节角算末端位姿。用Python写的话核心就是一个变换矩阵连乘import numpy as np def dh_transform(a, alpha, d, theta): 单个DH连杆的齐次变换矩阵 ct, st np.cos(theta), np.sin(theta) ca, sa np.cos(alpha), np.sin(alpha) return np.array([ [ct, -st*ca, st*sa, a*ct], [st, ct*ca, -ct*sa, a*st], [0, sa, ca, d], [0, 0, 0, 1] ]) def forward_kinematics(dh_params, joint_angles): 输入DH参数表和关节角返回末端位姿矩阵 T np.eye(4) for (a, alpha, d, _), theta in zip(dh_params, joint_angles): T T dh_transform(a, alpha, d, theta) return T这段代码跑通之后你可以用RViz或者matplotlib把每个关节坐标系画出来直观检查你的模型对不对。我当初就是靠这个办法发现自己的α符号搞反了——末端位置差了十几厘米一画图立刻看出来。2.3 逆运动学解析解和数值解的取舍逆运动学是真正的难点。解析解封闭解只对特定构型存在比如Pieper准则要求三个相邻关节轴交于一点或者相互平行。UR系列、Panda这些经典臂都满足所以有解析解。但如果你自己设计了一个非标准构型大概率只能用数值解。数值解最常用的是雅可比伪逆迭代def inverse_kinematics_numerical(target_pose, q_init, dh_params, max_iter100, tol1e-6): q q_init.copy() for i in range(max_iter): current_pose forward_kinematics(dh_params, q) error pose_error(target_pose, current_pose) # 6维位姿误差 if np.linalg.norm(error) tol: return q, True J compute_jacobian(dh_params, q) # 6xN雅可比矩阵 dq np.linalg.pinv(J) error q dq * 0.5 # 步长因子防止振荡 return q, False这里有几个实操细节值得说。步长因子不能设太大否则会在解附近来回跳也不能太小否则收敛慢。我一般从0.5开始试如果振荡就降到0.2。雅可比伪逆在奇异位形附近会数值不稳定需要加阻尼也就是用阻尼最小二乘DLS代替伪逆lambda_damp 0.01 dq J.T np.linalg.inv(J J.T lambda_damp**2 * np.eye(6)) error这个阻尼系数λ的选取也有讲究太小起不到阻尼作用太大收敛变慢。经验值是0.01到0.1之间根据机械臂的尺度和任务精度调整。注意数值解每次只能找到一个解而且依赖初始猜测。如果你需要多解比如避障时选肘部朝上的解要么用解析解枚举所有分支要么用随机重启的数值解法跑多次。2.4 雅可比矩阵不只是求逆运动学用的雅可比矩阵描述的是关节速度到末端速度的线性映射v J(q) * dq。它的每一列代表某个关节单独运动时末端产生的速度。理解雅可比是理解奇异位形、力传递、冗余分解的基础。计算雅可比有两种方法几何法和微分变换法。几何法直观但需要对每个关节判断旋转轴方向微分变换法可以从DH变换矩阵直接推导代码实现更统一。我一般用微分变换法因为不容易出错。雅可比的条件数是衡量离奇异位形有多远的指标。条件数越大越接近奇异。实际控制里可以实时监控条件数超过阈值就降速或者报警。这个技巧在工业现场很实用能避免很多莫名其妙的停机。3. 动力学为什么你的机械臂高速时抖得像筛糠3.1 拉格朗日方程和牛顿-欧拉两条路殊途同归动力学建模有两个主流方法。拉格朗日方程从能量角度出发形式优雅适合理论推导牛顿-欧拉递推从力和力矩平衡出发计算效率高适合实时控制。拉格朗日方程的通用形式是M(q) * ddq C(q, dq) * dq G(q) τ其中M是惯量矩阵C包含科氏力和离心力项G是重力项τ是关节力矩。这个方程看起来简洁但M、C、G的解析表达式对于六轴臂来说极其冗长手推基本不现实必须用符号计算工具比如SymPy或者数值库RBDL、Pinocchio。牛顿-欧拉递推分两步前向递推算每个连杆的速度和加速度后向递推算力和力矩。计算复杂度是O(n)比拉格朗日方法的O(n³)因为要算M矩阵高效得多。所以实时控制里基本都用牛顿-欧拉。3.2 重力补偿最基础也最容易被忽略如果你只做一件事来改善机械臂的动态性能那就是重力补偿。机械臂静止时电机需要输出力矩来抵抗重力否则关节会往下掉。很多便宜的舵机臂没有重力补偿断电就瘫通电后位置保持也软绵绵的。重力项G(q)只跟当前关节角有关可以离线算好存成查找表也可以在线用库实时算。Pinocchio算重力项非常快微秒级完全能满足1kHz控制周期。我实测过一个对比同一个六轴臂不做重力补偿时位置跟踪误差在低速下大概2-3mm加上重力补偿后降到0.5mm以内。高速时差距更大因为科氏力和离心力也开始起作用。3.3 惯量和科氏力高速高负载时才露出獠牙惯量矩阵M(q)描述的是关节加速度和力矩之间的关系。它跟构型有关——机械臂伸得越直末端惯量对肩部关节的影响越大。科氏力和离心力C(q, dq)则跟速度的平方成正比低速时可以忽略高速时急剧增大。什么时候必须考虑这些我的经验是关节速度超过额定值30%或者负载超过额定值50%时纯重力补偿就不够了需要完整的动力学前馈。具体做法是把期望轨迹的ddq和dq代入动力学方程算出前馈力矩叠加到PID控制器的输出上。# 动力学前馈 PID反馈 tau_ff M(q_des) ddq_des C(q_des, dq_des) dq_des G(q_des) tau_fb Kp (q_des - q) Kd (dq_des - dq) tau_cmd tau_ff tau_fb这个结构叫计算力矩控制是工业机械臂最常用的方案。前馈负责提供主要的力矩反馈负责修正误差。调参时先把前馈关掉调PID调稳了再加前馈前馈的系数从0.5开始慢慢加到1.0。3.4 摩擦最阴险的非线性因素摩擦是动力学建模里最容易被低估的。它分库仑摩擦跟速度方向相反大小恒定和粘滞摩擦跟速度成正比。低速时库仑摩擦占主导会导致爬行现象高速时粘滞摩擦让力矩曲线偏离线性。辨识摩擦参数的标准做法是让关节以不同速度匀速转动记录力矩拟合出库仑项和粘滞项。但实机上有个麻烦——减速器的摩擦特性跟温度有关冷机和热机差别很大。我见过一台臂冷机时跟踪误差0.1mm跑半小时热了之后变成0.5mm就是摩擦变化导致的。工程上的妥协方案是在控制器里加一个摩擦前馈项参数取冷热机的中间值同时把位置环增益调低一点靠反馈来吃掉残余误差。如果精度要求极高就得加温度传感器做在线补偿但那就复杂了。4. ROS里的机械臂开发工具链和实战路径4.1 从URDF到MoveIt模型描述和规划框架ROS里描述机械臂几何结构用URDF或者新一代的SDF。URDF是XML格式定义连杆、关节、视觉网格、碰撞体、惯性参数。写URDF最容易犯的错是惯性参数瞎填——很多人直接从SolidWorks导出但导出的惯量张量经常是错的单位不对或者参考系不对。惯量错了动力学仿真就会飞。MoveIt是ROS里的运动规划框架它把逆运动学求解、碰撞检测、轨迹规划、控制器接口都封装好了。配置MoveIt用Setup Assistant跟着向导走就行。但有几个地方需要手动调求解器选择默认KDL建议换成TRAC-IK。在kinematics.yaml里改。规划组定义把机械臂和夹爪分成不同的planning group规划时更灵活。碰撞体简化视觉网格往往很精细碰撞检测用简化几何体圆柱、球代替能大幅提升规划速度。我做过一个测试同一个UR5e模型用精细网格做碰撞检测规划一次要200ms换成简化碰撞体后降到20ms。实时性要求高的场景这个优化是必须的。4.2 ros_control硬件接口和控制器管理ros_control是ROS里连接规划和硬件的中间层。它的架构是硬件接口Hardware Interface负责跟实际电机通信控制器Controller负责计算控制量控制器管理器Controller Manager负责加载、切换、卸载控制器。写硬件接口的时候最关键的是实时性。read()和write()函数在实时线程里跑里面不能有内存分配、不能有阻塞调用、不能有不确定延迟的操作。我见过有人在write()里调用ROS的日志输出结果控制周期从1ms抖到10ms机械臂直接报警。正确的做法是在非实时线程里准备好数据实时线程只做内存拷贝和CAN/ EtherCAT收发。如果用的是总线舵机通信协议本身可能就有几毫秒延迟这时候控制周期要相应放宽或者用前馈补偿来弥补。4.3 仿真Gazebo够用但别全信Gazebo是ROS里最常用的仿真环境能模拟重力、碰撞、传感器噪声。对于验证运动学、规划算法、状态机逻辑Gazebo完全够用。但它的接触模型和摩擦模型跟真实世界差距不小所以仿真里能抓起来的物体实机上不一定抓得稳。我的做法是仿真里验证算法逻辑和大致轨迹实机上再调抓取参数。抓取力、接近速度、夹爪开合时机这些必须在实机上试。仿真里调好的参数实机上至少要把抓取力加大20%-30%。如果要做视觉抓取Gazebo里可以加RGB-D相机插件模拟RealSense或者Kinect。但仿真的深度图噪声模型比较简单实机上深度图的边缘噪声、反光噪声、缺失区域都要单独处理。4.4 手眼标定视觉抓取的第一道坎手眼标定是让相机坐标系和机械臂坐标系对齐的过程。分两种eye-in-hand相机装在末端和eye-to-hand相机固定在工作台外。标定原理都是解AXXB方程但实操中有很多细节。标定板的选择棋盘格最常用但需要完整可见。如果工作空间受限可以用ArUco码或者圆点标定板。标定点的数量理论上三组就够但实际至少采15-20组分布要覆盖整个工作空间。标定点的姿态不要只平移要包含不同旋转角度否则旋转部分的标定不准。标定误差的检查标定完之后让机械臂末端去碰一个已知点看相机识别的坐标和机械臂坐标差多少。我一般要求误差在1mm以内才算合格。如果误差大先检查标定板的平整度和相机的内参标定。提示手眼标定最容易忽略的是相机内参。很多人直接用手册上的标称值但实际镜头的焦距和畸变跟标称值有偏差。一定要用棋盘格单独标定相机内参再去做手眼标定。5. 实机调试那些文档里不会写的事5.1 关节限位和软限位别等撞了才想起来每个关节都有硬限位机械挡块和软限位编码器或软件设定。硬限位撞一次可能就损坏减速器所以软限位必须设得比硬限位保守。我一般留5-10度的余量。但软限位也不是万能的。如果控制器发了一个超出软限位的目标位置有些驱动器会直接报错停机有些会截断到限位值。这两种行为在不同品牌驱动器上不一样必须查手册确认。我遇到过一台臂软限位截断后没有报错但实际位置停在限位处而规划器以为已经到了目标位置后续轨迹全乱了。5.2 通信延迟和抖动控制周期的隐形杀手机械臂控制的实时性不仅取决于控制器还取决于通信链路。EtherCAT延迟通常在微秒级CAN总线在毫秒级串口和USB延迟更大且不确定。如果你用的是总线舵机通信延迟可能到5-10ms这时候控制周期设1ms没有意义因为指令根本发不出去。我的建议是先测通信延迟。发一个指令记录发送时间和实际执行时间多测几次取统计值。然后控制周期设为通信延迟的3-5倍。比如延迟5ms控制周期设20ms。这样虽然控制带宽低了但稳定性有保障。5.3 标定和校准零位、工具坐标系、工件坐标系机械臂的零位标定决定了所有关节角的参考。出厂时一般标好了但换编码器电池或者拆装关节后需要重新标。零位标定通常需要专用工装或者机械限位对齐不同品牌方法不一样。工具坐标系TCP标定是告诉机械臂末端执行器的位置和姿态。四点法最常用让工具尖端以四个不同姿态碰同一个固定点解出TCP。姿态变化越大标定越准。我一般用六个姿态多两个做校验。工件坐标系是告诉机械臂工作台的位置。如果工作台固定不动标一次就行如果工作台会移动比如传送带就需要动态更新。5.4 安全急停、限速、碰撞检测安全永远是第一位的。急停按钮必须随手可及而且急停后要手动复位才能重新使能。限速在调试阶段尤其重要我一般把速度限制在额定值的20%以下确认轨迹没问题再逐步提高。碰撞检测分两种基于电流的检测电机电流异常增大和基于力矩传感器的直接测关节力矩。基于电流的方案不需要额外硬件但灵敏度低轻碰检测不到基于力矩传感器的灵敏度高但成本也高。UR系列用的是电流关节力矩估计的方案效果不错。调试时的安全习惯手放在急停上眼睛盯着机械臂不要看屏幕。我见过太多人盯着RViz里的轨迹机械臂撞了都没反应过来。6. 进阶方向从能跑到跑得好6.1 轨迹规划不只是点到点基础的MoveIt规划是点到点的但实际应用往往需要连续轨迹。比如涂胶、焊接、打磨要求末端沿特定路径匀速运动。这时候需要笛卡尔空间轨迹规划在任务空间定义路径点插补出密集的位姿序列再逆解成关节轨迹。插补方式有直线、圆弧、样条。直线插补简单但加速度不连续高速时冲击大样条插补平滑但计算量大。工业上常用S型速度曲线加速度连续冲击小。轨迹规划还要考虑时间最优和冲击最优的权衡。时间最优让机械臂跑得最快但加速度可能超出电机能力冲击最优让运动最平滑但速度慢。实际调参时先保证不超限再逐步压缩时间。6.2 力控和柔顺控制让机械臂手感纯位置控制在接触环境时会出问题——比如装配、抛光、抓取易碎物体。这时候需要力控。最基础的是阻抗控制把机械臂等效成一个弹簧-阻尼系统末端受到外力时会顺着力的方向偏移而不是硬扛。阻抗控制的参数是刚度和阻尼。刚度高机械臂硬位置精度好但容易撞坏刚度低机械臂软安全但位置精度差。装配任务一般用低刚度高阻尼既柔顺又不振荡。实现阻抗控制需要力矩传感器或者关节力矩估计。如果没有传感器可以用电流环近似——电机电流跟输出力矩成正比通过电流推算外力。精度差一些但成本低很多。6.3 视觉伺服让机械臂看着动视觉伺服分两种基于位置的视觉伺服PBVS和基于图像的视觉伺服IBVS。PBVS先从图像算出目标位姿再控制机械臂去那个位姿IBVS直接最小化图像特征误差不经过三维重建。PBVS实现简单但依赖相机标定精度IBVS对标定误差鲁棒但容易陷入局部极小。实际抓取任务里PBVS用得更多因为抓取需要精确的三维位姿。视觉伺服的延迟是个大问题。相机采集、图像处理、位姿计算、指令下发整个链路可能几十毫秒。如果机械臂动得快等指令到了目标已经移走了。解决办法是预测——用卡尔曼滤波估计目标的运动速度提前补偿延迟。6.4 强化学习听起来很美落地很难强化学习在机械臂上的应用这两年很热但真正落地的少。主要问题是样本效率——训练一个抓取策略可能需要几十万次尝试实机上根本跑不起。仿真里训练再迁移到实机sim-to-real又面临动力学差距和视觉差距。目前比较务实的做法是用强化学习做局部优化比如在传统规划器给出的轨迹基础上用RL微调抓取姿态和力度。或者用模仿学习先人工示教几条轨迹再用RL扩展。如果你只是想做毕业设计或者demo仿真里跑RL没问题。但如果要上实机建议先把传统方法跑通再考虑RL。7. 我踩过的几个典型坑和排查思路7.1 逆解突然跳变导致机械臂猛转现象机械臂在跟踪一条连续轨迹时某个时刻突然猛转一下然后恢复。排查记录关节角序列发现某个关节角从170度跳到了-170度。原因逆解的多解性——数值求解器在迭代过程中跳到了另一个分支。解决在逆解函数里加关节角连续性约束每次求解时以上一时刻的关节角为参考选择最接近的解。def select_nearest_solution(solutions, q_prev): 从多组解中选择与上一时刻关节角最接近的 min_dist float(inf) best None for q in solutions: dist np.linalg.norm(q - q_prev) if dist min_dist: min_dist dist best q return best这个坑我踩了两次才长记性。第一次以为是控制器问题换了控制器还是跳第二次才想到是逆解分支切换。7.2 仿真里能抓实机上抓飞现象Gazebo里抓取成功率90%以上实机上不到30%。排查对比仿真和实机的差异发现三个问题。一是实机的夹爪闭合速度比仿真慢物体在夹爪闭合前就滑了二是实机的深度图在物体边缘有噪声位姿估计偏了几毫米三是实机的桌面摩擦系数比仿真低物体被碰一下就滑走。解决夹爪闭合速度调快抓取前先让夹爪预闭合到物体宽度附近深度图做滤波边缘用中值滤波平滑桌面贴防滑垫。这三个改完成功率提到80%以上。7.3 控制周期抖动导致驱动器报警现象机械臂跑几分钟后驱动器报位置超差报警。排查用示波器测控制周期发现偶尔有10ms的抖动正常是1ms。原因硬件接口的write()函数里调用了ros::Time::now()这个调用在某些情况下会阻塞。解决把时间戳获取移到非实时线程实时线程只用缓存的时间。这个坑的教训是实时线程里不要调用任何ROS的API包括日志、时间、参数服务器。所有ROS交互都在非实时线程完成实时线程只做纯计算和硬件收发。7.4 手眼标定误差大导致抓取偏移现象手眼标定后机械臂去抓物体总是偏几厘米。排查检查标定流程发现标定板的姿态变化太小基本只有平移没有旋转。原因旋转信息不足导致旋转部分的标定方程病态。解决重新采集标定点每个点都改变末端姿态至少±30度标定误差从5mm降到0.8mm。手眼标定的口诀姿态要多变点位要分散数量要够多。三组点只能解方程二十组点才能保证精度。7.5 动力学前馈导致振荡现象加了动力学前馈后机械臂低速时出现高频振荡。排查检查前馈力矩的符号和幅值发现惯量矩阵的符号搞反了。原因URDF里的惯性参数参考系不对导致算出来的惯量矩阵是负定的。解决重新导出URDF确认惯性参数的参考系是连杆质心坐标系单位是kg·m²。这个坑提醒我URDF的惯性参数一定要验证。最简单的验证方法是看惯量矩阵是否正定、对角元素是否为正。如果不对动力学前馈还不如不加。8. 给不同阶段学习者的路径建议如果你是完全零基础我的建议是先花一周时间把正运动学搞明白用Python写一个六轴臂的正解可视化能画出末端轨迹。然后花两周学逆运动学先理解解析解的原理再用数值解写一个通用的求解器。这两步走完你对机械臂的空间运动就有直觉了。接下来花一周学ROS基础重点是话题、服务、TF变换。然后装MoveIt跑通一个仿真抓取Demo。这时候你会遇到各种配置问题别怕一个个查。MoveIt的配置是机械臂开发里最繁琐但也最锻炼人的环节。动力学可以放到后面学。先把位置控制跑稳再考虑加动力学前馈。如果你做的是低速拾放纯运动学控制加PID反馈就够用了。只有高速高精度场景才需要完整动力学。实机调试是最锻炼人的。仿真里跑得再好实机上总有意外。我的经验是每次上实机前先在脑子里过一遍可能出什么问题急停在哪限速设了多少。调试时从低速开始确认没问题再提速。不要一上来就跑全速撞一次可能半个月工资就没了。最后说一个心态问题。机械臂开发是个交叉学科涉及机械、电子、控制、软件、算法。没有人一开始就全懂都是边做边学。遇到问题先定位是哪一层的问题——是模型错了、算法错了、通信错了还是硬件错了。定位准了解决就快。我见过很多人一遇到问题就换框架、换库、换硬件结果问题还在因为根因没找到。如果你正在做机械臂相关的毕业设计或者项目建议先把一个简单的抓取流程跑通——从相机识别到规划到执行哪怕精度不高。跑通之后再优化各个环节。一个能跑的简单系统比一个跑不起来的复杂系统有价值得多。
返回列表