先记住三个项目各自负责什么项目大白话主要技术点动捕 / G1 遥操作把人的动作整理成机器人能跟随的动作参考数据适配、多态、线程、队列、UDP、重定向CAN 机械臂把“机械臂去哪里”变成 CAN 电机指令并读取反馈IK、贝塞尔轨迹、协议编码、编码器、串级控制EtherCAT 执行器平台管理四个关节的使能、周期控制、反馈和故障ros2_control、PDO、CiA402、CSP、WKC、周期测量先走动捕项目你抬起左手数据怎样变成 G1 的动作。1多数据源统一接口、Adapter 边界、增加新设备——对应题 02、10、13、14发生在图里的“输入适配器”。不同设备说的是不同的“语言”有的给厘米有的给米有的给欧拉角有的给四元数有的是相对父骨骼的姿态有的是全局姿态。适配器先把这些差异处理掉统一输出人体骨骼帧。后面的 GMR 才能用同一种方式处理。当前公共接口MotionInput约定了四件事open(); // 打开输入源 pollFrame(); // 尝试拿一帧 close(); // 关闭输入源 name(); // 说明是什么输入源pollFrame()返回optionalNoitomFrame有数据就给一帧暂时没有就返回空。NoitomFrame虽然带 Noitom 名字实际已经作为多种输入的共同结构使用。边界这样记厂家怎么表达人体数据归适配器机器人应该摆成什么姿态归 GMR怎么排队、怎么发送归公共主流程。所以厘米转米适配器。人体局部骨骼算全局骨骼适配器。人的胳膊比机器人长怎样调整动作GMR。G1 关节限位机器人重定向相关逻辑。网络发送发送模块。增加 OptiTrack 时通常新增一个适配器再补启动选择、构建依赖和验证。它如果只给散点标记还需要先重建人体骨架不能直接交给现有 GMR。2单位、欧拉角、四元数、坐标系、人体 FK——对应题 02当前 Axis 适配器主要做这些转换位置厘米 → 米 旋转欧拉角 → 四元数 骨架局部位姿 → 全局位姿 坐标转换到下游约定 骨骼映射成下游需要的身体条目举个例子前臂的局部位置是相对上臂描述的。上臂转了前臂在世界中的位置也跟着变。因此程序沿父子关系计算子骨骼全局位置 父骨骼全局位置 父骨骼旋转后的子骨骼局部位移这就是这里的人体骨架正运动学。四元数可以理解为“用四个数表达朝向的一种方式”。项目还必须统一它的排列顺序例如w、x、y、z否则同样四个数可能被理解成错误朝向。3抽象类、多态、virtual、虚析构——对应题 10、11发生在“主流程调用输入源”的地方。启动时程序选中 Axis后面统一写input-pollFrame();虽然指针类型是MotionInput实际对象是 Axis 适配器所以会执行 Axis 的取帧方法。这就是运行时多态。大白话是主流程只说“给我一帧”具体设备自己负责怎样给。虚函数通常多一层间接调用常见实现还会给对象增加虚表指针。但项目里更需要关注解析、求解、空轮询和发送耗时不能直接认定虚函数是瓶颈。虚析构负责另一件事通过基类指针释放具体输入源时也正确执行具体类型的清理逻辑。4模板与运行中切换——对应题 12。模板更适合编译时已经知道类型的情况。你的输入源是启动时根据参数选择用抽象接口比较直接。但启动时可选输入不等于运行中可以随时切换。真正热切换还要停止旧读取 → 关闭旧连接 → 处理旧队列 → 重置帧号和插值历史 → 打开新输入否则旧设备的数据可能混到新设备后面。当前结束统计仍有获取 Noitom 专有信息的dynamic_cast说明诊断接口还有进一步统一的空间。5三个线程为什么拆开——对应题 15。对应接收、GMR、发送三个业务线程。想象三个人流水作业接收员把人体帧收进来 计算员把人体帧算成机器人参考 发送员把机器人参考发出去如果一个人包办发送卡住时接收也跟着停。拆开后中间用队列交接可以缓冲短时间的快慢差异。另外还有统计线程所以“整个程序只有三个线程”这个说法不准确。6FIFO、处理瓶颈、队列容量——对应题 16、17。两个业务队列当前使用deque按先来先处理的顺序工作没有设置容量上限。例如每秒收到 50 帧 GMR 每秒只能处理 40 帧 每秒积压 10 帧持续十秒就多了约一百帧待处理。机器人可能仍在跟几秒前的动作。所以队列解决的是短时波动长期处理能力不足时它会变成延迟和内存增长。面试可以说当前实现保证按顺序处理已入队的数据但无界 FIFO 在持续过载时会积压这是已有实现的限制。7丢最新、丢最旧、每帧都不能丢——对应题 18、19。实时跟随通常更需要新动作。人已经放下手机器人继续执行几秒前的抬手历史完整也没有用。但下游策略需要连续动作窗口不能简单只留一个最新姿态。合理的改进方向是保留较新的连续片段并处理切换、速度计算和过渡。这里还要分清两个要求每帧都保存可以可靠录制之后离线处理。每帧都执行长期处理能力必须跟上或者源端降速。停止读取 UDP不会可靠地让发送端减速可能只是把内核接收缓存撑满。这些属于改进方案当前代码仍是 FIFO。8mutex、锁范围、push/pop 争锁——对应题库 mutex 问题。发生在两个线程交接数据的队列上接收 → 输入队列 → GMR GMR → 输出队列 → 发送同一个队列的入队和出队使用同一把锁会争锁。锁保护的是检查队列 → 取出一帧 → 修改队列状态当前 GMR 计算和网络发送放在锁外避免长时间占着队列锁。普通deque即使只有一个生产者和一个消费者也不能直接同时操作它的内部结构。9条件变量、轮询、predicate、虚假唤醒——对应条件变量问题。队列为空时消费者没必要一直检查。条件变量相当于没活先休息有活或需要结束时再起来检查。等待时释放队列锁生产者才能入队醒来后重新拿锁检查。但醒来不代表一定有数据可能是超时、退出通知或虚假唤醒。因此代码要判断队列非空或者上游已经结束这就是 predicate。通知负责叫醒队列状态才决定有没有工作。当前业务队列等待还有超时返回因此返回后仍检查是否为空。10atomic 与 mutex、重复启动、无锁队列——对应题 24 及相关问题。atomic适合独立标志例如stop_requested_.store(true);意思是“请求停止”。mutex适合保护一组必须一起完成的操作例如检查队列并出队。不能给普通队列增加一个原子计数就说整个队列线程安全了。计数安全容器内部仍可能被同时修改。重复启动也是同样道理线程 A 看到 runningfalse 线程 B 也看到 runningfalse 两者各自启动线程原子读写分别安全不代表“检查再修改”这个组合安全。compare_exchange可以竞争一个启动资格但完整启动还涉及初始化、线程创建和失败回滚。无锁 SPSC 队列需要单独设计索引、内存顺序和槽位复用当前业务队列采用锁。专门的无锁 SPSC 队列常用一个固定大小的环形数组生产者负责写入位置 → [帧][帧][空][空] ← 消费者负责读取位置生产者只推进写索引消费者只推进读索引通过原子操作协调生产者先写好帧再公布“这格可以读了” 消费者先确认可以读取完后公布“这格可以复用了”这样可以避免用互斥锁但必须正确处理内存可见性、满队列和槽位复用。不能把普通deque加两个原子索引就当成无锁队列。11正常 shutdown、notify_all、join——对应题 26、27 和末尾 shutdown 题。当前退出顺序是请求停止 → 接收结束不再生产 → GMR 处理完输入队列 → 发送处理完输出队列 → join 回收线程三个标志要分清标志含义stop_requested_请求停下来receiver_finished_接收已经结束gmr_finished_GMR 已经结束“请求停止”时接收线程可能还在完成当前一次取帧因此 GMR 不能马上认定再也没有数据。join()是等待线程结束不是强制杀死线程。notify_all()只能唤醒条件变量不能自动打断所有网络阻塞操作。排空历史动作是正常收尾逻辑机器人急停需要立即阻断后续运动不能继续执行积压帧。12UDP 乱序、边界、connect、sendto——对应题 28、29。发生在动捕数据进入电脑的网络接收处。UDP 可以保留数据报边界但不承诺到达、有序、无重复也没有内置确认和重传。因此发送100、101、102 收到100、102、101程序需要看帧号不能把到达顺序直接当动作顺序。UDP 可以connect()主要设置默认对端并通常限制接收来源它没有 TCP 那样的连接握手。sendto()成功通常只说明本机接受了发送请求。对方收到、处理完成、机器人执行是后续不同的结果。sendto()是一个网络发送函数常用于 UDP把一段数据发给指定的 IP 和端口。可以把它理解成“把这份数据寄到这个地址。”简化调用形式sendto(socket, 数据, 数据长度, 标志, 目标地址, 地址长度);参数大白话socket使用哪个网络通信接口数据、数据长度要发送什么、发多少字节标志特殊发送选项通常填0目标地址对方的 IP 和端口地址长度地址结构占多少字节放到动捕场景一帧人体动作 → 编码成字节 → sendto() → 指定 IP、端口 → 对方用 recvfrom() 接收13缺口、5 ms 重排窗口、迟到帧——对应题 31 和缺帧问题。收到100、101、103此时只能说 102 有缺口可能还在路上。当前 Axis 适配器会缓存后面的帧并在缺口处有限等待默认窗口是 5 ms102 及时到达 → 按顺序交付 等不到 → 跳到可交付帧 102 后来才到 → 作为旧帧处理正常连续帧不用固定等 5 ms。窗口越大可能补到更多迟到帧也可能增加等待。代码默认值不能说成已经证明的最优值。14双路去重、帧号回绕、故障覆盖——对应题 32、33、34。当前两路 socket 由同一个接收线程读取共用按posture_index组织的缓存。主路100、101、103 辅路100、101、102、103 合并100、101、102、103同一编号第一次被程序处理时保留数据后续副本记为重复。因此保留的是程序先处理的副本未必是物理网络最先到达的副本。边界也要讲清第二路默认端口为 0需要配置才启用。双路必须是同一会话、同一人的同一动作流。当前没有比较同编号两份内容是否冲突。两路共用网络设备时共同故障仍可能影响两路。当前直接比较帧号大小对源端重启归零和编号回绕还需要改进。双路提高补帧机会不能保证永不丢帧。15时间戳统一——对应题 09。Axis 当前写的是timestamp_ms 帧号 × 20 ms它是按 50 Hz 推出来的时间线。两台设备都写1000 ms可能只是各自启动后一秒并不代表同一物理时刻。要测端到端延迟必须知道什么时候采集 什么时候收到 什么时候处理 什么时候执行 这些时钟之间是什么关系字段名相同不代表完成了时钟同步。16GMR、MuJoCo、DAQP、为什么不能复制人体角度——对应题 38、39。发生在中间的“人体动作 → 机器人姿态”。人的骨架和机器人不一样长度、转轴、自由度、活动范围都有差异直接复制角度可能让手的位置完全不对。GMR 根据人体骨骼位姿、机器人模型、映射和身高等参数求出G1 根部位置和朝向 29 个关节位置参考大白话是根据机器人的身体条件找一个尽量像人的姿态。MuJoCo 提供机器人模型和运动学计算DAQP 参与约束求解。这里没有展开为算法从零研发经历题库明确你的主要职责是接入、适配、集成和验证。GMR 输出是希望机器人达到的参考不是电机力矩也不单独保证动态站稳。17插值、速度计算、为什么少两帧——对应题 37。发生在 GMR 后面的发送处理。输入输出频率不同时当前插值器位置和关节角 → 线性插值 根部朝向 → 四元数 SLERP 速度 → 相邻姿态变化除以时间大白话在已有动作之间补中间姿态形成下游需要的时间节奏。等频分支前两次先建立历史第三次才开始输出。它利用前后姿态计算中间帧的速度所以会出现输入 N 帧、输出 N−2 帧。18序列化、ZeroMQ/gRPC、参考缓存、ONNX——对应题 07 的下游。发送前程序把动作字段整理为约定消息并序列化为字节再经 ZeroMQ 或 gRPC 发送。可以这样分工部分作用Protobuf约定数据字段及编码ZeroMQ / gRPC把消息送到对端机器人参考缓存保存连续动作片段ONNX 跟踪策略结合参考、关节反馈、IMU 等生成控制输出LowCmd / DDS把关节命令交给机器人底层机器人策略要同时知道“想怎么动”和“现在实际怎样”因此不是收到 GMR 姿态就直接照抄电机目标。19内部不新增丢帧、28 万帧证据——对应题 35、36。数量相等只能提供部分证据。少一帧又重复一帧总数也能一样。严格核对需要源帧身份贯穿处理阶段并说明插值改变数量的规则。再走 CAN 机械臂让机械臂的手移动到一个指定位置。20FK、IK、多解、无解——对应运动学题 2、3。FK 是知道每个关节角 → 算手在哪里、朝哪边IK 是知道手要到哪里、朝哪边 → 算关节怎么转kinematics.py沿关节链相乘变换矩阵计算 FKmove_pose.py路径调用 IK最后把关节目标交给轨迹脚本。IK 可能多解同一个手的位置肘部可以有不同摆法。也可能无解目标超出工作范围或者限位不允许。数值算法没收敛还可能是初始姿态或参数问题不能直接认定目标不存在解。21Jacobian、奇异位形、DLS——对应运动学题 6、7、9。雅可比描述的是当前姿态下各关节动一点手大概会往哪边动。IK 每次用它算一小步关节调整再重新算位置和误差。接近奇异姿态时某个末端运动方向变得很难实现。直接求逆可能把很小的末端误差放大成很大的关节调整。你的代码使用 DLS既减少末端误差 也抑制过大的关节调整当前实现还有限制单步调整、检查限位、尝试缩小步长、检查误差是否下降以及收敛容差。阻尼越大步子越保守可能越慢它不能让机械臂获得本来没有的运动能力。22三次贝塞尔、共同运动时间——对应题 6.21。发生在关节目标已经算出来之后。目标角只告诉机械臂终点。轨迹规划补上“中间每个时刻怎样走”。当前单目标路径相当于q(t) 起点 (终点 − 起点) × (3u² − 2u³) u t / T起终点速度为零。所有关节共用运动时长 T所以按同一时间线起步和到达。23五次贝塞尔、C0/C1/C2、反向路点——对应题 6.20、6.21。多段轨迹接起来时连续性大白话C0位置接上没有位置跳变C1速度也接上不突然变速C2加速度也接上不突然改变加速度当前五次路径为相邻段设置共同的路点速度路点加速度设为零。同向运动时路点速度参考相邻段的速度需要反向时路点速度设为零让这个关节先停再反向。24轨迹约束、峰值、凸包界。发送之前要检查整段轨迹位置有没有超限 速度有没有超限 加速度有没有超限 时间是否合理单目标三次路径使用解析峰值最大速度 1.5 × |角度变化| / T 最大加速度 6 × |角度变化| / T²多路点路径利用位置、速度、加速度控制点的凸包界做保守检查。大白话是用数学界限检查整条曲线避免只抽几个点漏掉中间超限。这些约束不包含碰撞检测也不能替代真实负载下的执行验证。25CAN 驱动和电机协议为什么分层。协议层负责“电机听得懂什么”驱动层负责“怎样通过设备发出去”。MIT / C620 协议层参数编码、帧解析 SocketCAN / ZLG / mock实际收发接口换 CAN 接口卡不应该重写整套运动规划换电机协议也不应该把上层全部改掉。26MIT 参数编码、位打包、反馈映射。经典 CAN 一帧最多 8 字节无法直接装下五个普通浮点数。MIT 协议把位置、速度、Kp、Kd、力矩映射为指定范围的整数再按规定的位宽拼进字节。例如可以把一个范围内的位置映射到 16 位整数。发送端编码接收端按同一量程还原。当前 MIT 后端发送位置和增益速度、力矩前馈为零。反馈使用帧 ID 0并根据首字节中的 master ID 找对应关节。27C620 编码器多圈累计——对应题 84、6.2。C620 单圈编码器范围是08191例如上次8190 这次3 直接相减−8187 实际可能只是正转了 5 个计数代码修正差值 4096 → 减 8192 差值 −4096 → 加 8192 然后累计修正后的差值最后结合方向、减速比、起始位置转换为关节角。它有前提相邻有效反馈之间转动不到半圈。第一次反馈只是建立基准程序重启后也不能自动恢复绝对多圈位置。关节靠配置中的通道和电机 ID 对应不靠报文到达顺序。28位置 P、速度 PI、积分饱和——对应题 6.3、6.4。发生在 C620 后端。目标位置 − 实际位置 → 位置 P 算希望速度 希望速度 − 实际速度 → 速度 PI 算电流指令大白话先决定该多快追过去再决定用多大电流实现这个速度。积分项会积累持续误差。但电流到上限时再继续积累可能造成之后冲过头。这套主机串级控制属于 C620 路径。MIT 和 EtherCAT CSP 不能都说成使用同一套主机 PID。接下来把 ROS2 放进两个机械臂项目里。29Topic、Service、Action——对应题 40。它们分别对应三种交流方式方式大白话项目例子Topic持续广播新消息/joint_statesService请求做一次较短操作使能、停用等管理服务Action提交耗时任务能看结果、能取消FollowJointTrajectory轨迹持续几秒适合 Action。关节反馈持续更新适合 Topic。动捕持续参考使用 UDP、ZeroMQ/gRPC 等链路不能说每帧都走 ROS2 Action。30QoS、reliable、best effort——对应题 41、43、44。QoS 是发布者和订阅者对交付方式的约定。reliable提供可靠交付机制。best effort尽力交付不提供同样的补传保证。传感器常更看重新鲜数据但是否适合丢样还取决于算法和任务。订阅端要求 reliable发布端只提供 best effort在可靠性这一项上不兼容。反过来的组合在这一项上可以兼容。31depth、KEEP_LAST、程序积压——对应题 42。KEEP_LAST depthN表示保留最近 N 个样本。它只管理这一层消息历史不能限制程序所有队列。例如 ROS2 接收缓存只有一条但回调把每条消息放入另一个无界队列程序仍会积压。动捕项目里的两个业务队列就是理解这个问题的具体例子。32rosbag2、自定义录制、回放。CAN 模拟集成日志已有 rosbag2 验证。它可以录 ROS 消息回看反馈、控制器状态和诊断。动捕链有自己的录制及 NPZ 路径原始 UDP/ZeroMQ 不会自动被 rosbag2 录进去需要桥接成 ROS 消息。回放能重放消息不自动重现原来的网络乱序、线程阻塞和真实机械行为。33URDF、TF、robot_state_publisher、joint_state_publisher。这样记URDF身体怎么连接 joint_states关节现在转了多少 robot_state_publisher根据二者算连杆变换 TF把当前坐标关系发布出去 RViz显示出来joint_state_publisher可以提供模型检查用的关节值实机状态应来自真实反馈经joint_state_broadcaster发布。RViz 动了只证明显示链在工作不独立证明真实电机动了。34ros2_control、controller_manager、ArmSystem / LeftArmSystem——对应题 48。两个项目复用了框架但硬件插件不同CANArmSystem → 所选电机后端 EtherCATLeftArmSystem → LeftArmCore → LeftArmBus控制器只关心标准关节目标和反馈插件负责设备适配。controller_manager管理控制器及接口占用并组织周期执行read → update → write框架不会自动替你完成电机使能、单位换算和故障保护。35command/state interface、position/velocity/effort——对应题 51、52。command希望关节到哪里 state实际反馈关节在哪里同名的joint_1/position在两类接口里含义不同不能用目标冒充反馈。LeftArmSystem 当前提供命令position 反馈position、velocity 另外提供健康诊断状态没有关节 effort 接口。转动位置通常用 rad速度用 rad/s电流也不能直接称为关节力矩。36生命周期、configure/activate、初始化对齐——对应题 08、54。大白话流程init读取参数、检查接口 configure建立通信和配置 activate确认准备完成并使能 deactivate停止正常输出 cleanup/shutdown清理资源 error处理异常configure 和 activate 分开是因为通信接通和允许运动是两个阶段。激活时目标对齐实际位置防止设备当前在 1 rad默认目标却是 0 rad一使能突然往零点追。控制器取得命令接口时还要处理接管。硬件准备完成不代表任意旧目标都可以继续执行。最后走 EtherCAT 平台四个关节怎样按周期执行并在异常时一起处理。37网关、system_manager、管理与运动的分工。网关负责接请求、检查状态、转成 ROS 操作。system_manager负责系统是否准备好、能否使能、是否故障、怎样停用。轨迹控制器负责具体动作的时间安排。所以网页按一次“运动”不是网页直接给电机发每周期指令。管理请求被接受也不代表使能已经完成需要看后续系统状态。38read/update/write——对应题 50 和完整控制链题。一个典型周期read读取实际反馈 update轨迹控制器算此刻目标 write检查、换算、提交目标LeftArmSystem 的 read 检查总线和驱动反馈再更新关节状态。write 读取 position 命令交给核心检查和编码然后通过总线发送。write 负责本周期目标的处理不从头规划整段轨迹。39关节角与编码器计数、四轴整组保护。ROS 用 rad驱动器用整数计数目标计数 零点计数 目标角度 × 每弧度计数反馈反向换算。当前LeftArmCore检查有限数、范围、整数编码、目标步长、变化速度和跟随误差。所有轴检查通过后才更新整组目标避免前三轴更新成功、第四轴失败导致指令不一致。EtherCAT 用以太网帧组织周期过程数据交换。从站在帧经过时读取自己的命令、写入反馈。放到你的项目里就是每周期交换四轴目标、控制字、编码器和状态。选它的原因是适合周期多轴交换并有同步机制不能仅凭使用 EtherCAT 就宣布实机同步精度达标。41PDO、SDO、对象索引、Rx/Tx——对应题 58。可以把 PDO 理解为预先约定好格式的周期数据区SDO 理解为访问设备参数的配置或维护通道。项目里的主要对象对象用途0x607A目标位置0x6040控制字0x6064实际位置0x606C实际速度0x6041状态字0x6061模式显示0x6060模式设置8 表示 CSPRxPDO、TxPDO 按驱动器视角命名驱动器接收命令发送反馈。42CiA402、Controlword、Statusword、掩码、使能成功。对应题库的 CiA402 四组问题。Controlword主站希望驱动器做什么 Statusword驱动器实际处于什么状态典型推进Switch On Disabled → Ready to Switch On → Switched On → Operation Enabled常见请求值为0x0006 → 0x0007 → 0x000F。发一步读反馈确认再推进。0x6040是对象地址0x000F是写进去的值别混淆。状态字还有其他位所以通过掩码提取关心的部分。例如当前判断(sw 0x006F) 0x0027当前激活规则要求四轴反馈完整、都处于 Operation Enabled、模式显示都为 8。EtherCAT OP 是通信状态Operation Enabled 是驱动使能状态控制器接管则又是下一层。43CSP、PP、周期更新、插补——对应题 6366。CSP 是主站周期给位置目标本周期到 0.01 rad 下一周期到 0.012 rad 再下一周期到 0.014 rad驱动器内部伺服跟踪这些目标。PP 则更偏向主站给目标及轮廓参数由驱动器负责相应运动轮廓。PP 也能更新目标不能说只能发送一次。当前四关节 ROS2 配置是 100 Hz名义 10 ms单电机je_single_motor_csp_dc.cpp写的是 1 ms。这是不同程序。JTC 在主机侧根据时间插补轨迹。常见 spline 路径中位置、速度、加速度字段的完整程度决定线性、三次或五次插补。硬件只接 position 命令也不妨碍速度和加速度参与主机插补。44DC、参考时钟、同步接口、多轴走偏——对应题 67、68、70。DC 解决的是多个从站的时间基准问题。四轴都收到命令还需要尽量在一致时刻采样和执行。否则一轴执行当前目标另一轴仍执行上一时刻目标组合出来的机械臂姿态就偏了。当前总线代码具备配置 DC 提供 application_time 同步参考时钟 同步从站时钟但四关节模板里的dc_assign_activate是 0同步调用受配置控制。因此可以讲接入机制不能把高精度 DC 同步列为已经验收的成果。共同提交四轴目标也不自动等于硬件严格同步。45WKC、异常、正常、一次异常是否停——对应题 7173。WKC 是本次 EtherCAT 数据报读写完成情况的计数不是简单的在线设备数量。期望值和映射及命令有关。当前代码重点检查wc_state EC_WC_COMPLETE异常说明本次交换不完整但不能独自指出哪根线、哪个站出问题。正常也只说明交换层符合预期不能证明驱动已经使能或电机到位。当前运行路径中一次不完整反馈会触发故障锁存和停止输出处理启动阶段首次有效反馈之前有不同的等待规则。“软件进入故障处理”与“机械立即停止”仍是不同结果。46总线断开、反馈 NaN、故障锁存——对应题 55。当前 LeftArmSystem 的故障处理包括锁存故障 → 关闭运动命令 → 尝试失能 → 对外反馈标为无效 → 返回 ERROR它不会把目标角度冒充实际反馈。故障锁存就是原因暂时消失也不自动续跑旧动作。当前物理后端不能直接套用模拟或 CAN 的恢复流程。总线断了失能命令还可能送不到因此驱动看门狗和实际停机行为需要现场验证。47SCHED_FIFO、优先级、忙循环——对应题 7577。这是 Linux 调度层位于周期控制代码下面。SCHED_FIFO 让可运行的高优先级实时线程优先运行。同优先级不像普通时间片一样自动轮转。但控制线程依赖网卡和其他线程。设得太高并持续忙等可能压住它依赖的数据处理反而影响控制。周期等待通常按绝对时刻安排计划在 10、20、30 ms 工作如果每次“工作完再睡 10 ms”工作耗时会不断加进周期。当前模拟计时使用绝对时间等待不代表已经完成实时调度配置。48mlockall、缺页、绑核、网卡 IRQ——对应题 7880。这些都为了减少周期执行的不确定性技术大白话缺页访问内存时系统临时补准备工作可能耗时不稳定mlockall尽量把内存留在 RAM减少换出换入预分配、预触碰提前准备循环要用的内存CPU affinity限制线程在哪些核上运行IRQ affinity查看和安排设备中断处理在哪些核上运行绑核不等于独占也不等于没有锁等待或缺页。线程在哪个核不能直接推断网卡中断也在那里。题库提到的/proc/interrupts和 IRQ affinity 文件就是排查入口。这些是你能解释和用于部署测量的方法不能说现有模拟测试验证了全部效果。49jitter、P99、执行耗时、超期——对应题 81、82。需要分开测唤醒延迟实际醒来比计划晚多少 执行耗时这一轮工作用了多久 周期间隔相邻两次执行隔了多久 截止是否错过工作是否按要求完成现有平台记录有 WSL2、100 Hz、普通调度下六轮测试共 12000 个周期。未包含真实 EtherCAT PDO也没有配置实时调度、隔离或锁页。P99 是大多数样本的分布指标最大值和超期次数也要看不能只报平均值。剩下的是验证、排障和个人职责把它们放在三条链路的交界处理解。50哪些实际运行过、哪些是模拟——对应题 02、06、74、83。你需要按“具体路径 环境 结果”回答动捕代码有多种适配器已有 Noitom SDK 接入和 Axis 回放材料不能说所有品牌现场穿戴设备都验收过。CAN已有六轴 C620 模拟闭环以及七轴 MIT can_mock 的 ROS2 Jazzy 集成记录。EtherCAT可以讲软件实现及离线验证四轴配置和部署说明不能代替四轴实机验收。51机器人突然不动、ROS2 有命令却不动——对应排障题 11、12、7.X。沿链路找最后正常、最先异常的位置目标有没有更新 → 控制器有没有接受 → 控制器是否 active → write 是否执行 → 换算后的目标是否正确 → 总线是否交换成功 → 驱动是否使能、模式正确 → 实际位置是否变化动捕额外看 GMR 输出和队列积压CAN 看通道、ID、反馈年龄及错误EtherCAT 看 WKC、从站和 CiA402 状态。Topic 有数据、发送函数成功都只证明某一层不能直接证明电机执行。52偶尔抽一下——对应排障题 13。先比较目标与反馈目标自己跳了 → 查轨迹拼接、旧队列、时间间隔、重新使能对齐 目标平滑反馈突然跳 → 查编码器跨圈、单位、方向、协议解析 目标和反馈输入正常运动异常 → 查控制参数、周期、电流、供电和机械这样可以把问题分到具体层避免先凭感觉改 PID。53运行半小时才出问题——对应排障题 14。关注趋势和异常前后的记录队列是否持续增长 内存是否增长 反馈年龄是否变大 温度是否上升 周期是否出现停顿 计数是否回绕适合用有限长度缓冲保留关键周期数据故障时再保存。ROS 消息可用 rosbag2底层时序另记。这部分是排查方案不能因为题库写了就说所有长期监测已经实现。54AI 使用、GMR 责任、三分钟介绍。题库里的三分钟介绍就是把前面的主链串起来再突出自己的工作项目介绍时突出动捕数据接入、语义统一、线程队列、通信、集成验证CAN运动学、轨迹约束、协议编码、反馈和保护EtherCAT标准控制链、标定换算、整组检查、使能和故障管理GMR 核心属于集成模块。AI 可以辅助样板和测试但个人职责仍要依据真实参与范围表达并能解释最终代码。你可以用下面三个“小动作”检查自己有没有把知识点连起来人抬手适配器先把人体数据统一接收线程入队GMR 算 G1 姿态发送线程做插值和速度计算再传给机器人。机器人结合自身反馈跟踪这个参考。机械臂的手去一个位置IK 先求关节目标贝塞尔规划中间运动并检查约束Action 交给轨迹控制器执行ArmSystem 交给电机后端MIT 发位置和增益C620 由主机算电流反馈再回来。EtherCAT 四轴执行一段轨迹系统管理先确认允许运动控制器按周期生成目标LeftArmSystem 读取反馈LeftArmCore 换算并检查整组目标IgH 交换 PDO驱动器执行。异常时锁存并阻断后续命令。以后遇到一个技术名词先问自己**它是在整理数据、计算目标、传输命令、实际控制还是确认结果**放到这五个位置里再解释实现就不会只剩背定义。
阅读完成 · 觉得有帮助?