# PiPER机械臂示教模式后无法切换回CAN控制模式

> 原文链接：https://robotics.hellobike.com/pitfalls/2026-01-29-piper-sdk-103
> 频道：pitfalls | 更新日期：2026-01-29 | 标签：auto, github-issue, piper_sdk
> 核心摘要：示教模式切CAN失败因指令序列错误，需先MotionCtrl_1退回STANDBY并延时，再MotionCtrl_2设CAN模式并使能。

# PiPER机械臂示教模式后无法切换回CAN控制模式

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[机械臂无法从STANDBY模式切换回CAN模式](https://github.com/agilexrobotics/piper_sdk/issues/103)（GitHub agilexrobotics/piper_sdk #103）

**状态**：已解决

## 问题

用户在使用完示教模式（0x02）后尝试切换回CAN控制模式（0x01），机械臂始终停留在STANDBY状态。原代码直接调用`MotionCtrl_1(0x00, 0x00, 0x02)`退出示教后立即执行使能与模式设置，未正确处理中间状态转换时序，导致模式切换指令被忽略或失效。

## 环境

机型：agilex-piper；SDK：piper_sdk；控制接口：CAN；模式状态：STANDBY(0x00)/TEACH(0x02)/CAN_CTRL(0x01)

## 解决办法

1. 若当前为示教模式(0x02)，先调用`self.piper.MotionCtrl_1(0x02, 0, 0)`恢复至待机模式，并强制`time.sleep(1)`等待状态稳定。
2. 调用`self.piper.MotionCtrl_2(0x01, 0x00, 100, 0x00)`设置目标为CAN控制模式，再次`time.sleep(1)`确保指令下发完成。
3. 循环调用`self.piper.EnablePiper()`直至返回True，完成电机使能。
4. 再次发送`self.piper.MotionCtrl_2(0x01, 0x00, 100, 0x00)`确认模式，并通过轮询`GetArmStatus().arm_status.ctrl_mode == 0x01`验证切换成功。
5. 注意：切换过程中机械臂会失能自由落体，务必提前手动扶持或放置安全位置。

讨论原作者：@chiawenwang 等，版权归原作者所有。
:::

## 原始参考来源 (Sources)

- [GitHub agilexrobotics/piper_sdk #103：机械臂无法从STANDBY模式切换回CAN模式](https://github.com/agilexrobotics/piper_sdk/issues/103)