MyAGV Plus API 使用说明
注: 以下 API 均为 Python API,使用前请先安装
pymycobotPython SDK 包。这是基于最新myagvplus与myagvplusapi源码适配的文档。
1. 系统 & 产品信息
get_system_version()
- 功能: 获取主固件版本号
- 返回值:
float(版本号)
get_modify_version()
- 功能: 获取次固件版本号(已修复精度,直接返回真实值)
- 返回值:
float(版本号)
power_on()
- 功能: 开启机器人(开启继电器并使能所有电机,初始化为速度控制模式)
- 返回值:
int(1: 成功, 0: 失败)
power_off()
- 功能: 关闭机器人(禁用电机并关闭继电器电源)
- 返回值:
int(1: 成功, 0: 失败)
is_power_on()
- 功能: 检查机器人底盘继电器电源是否已开启
- 返回值:
int(1: 开机, 0: 关机)
get_robot_status()
- 功能: 读取机器人硬件异常状态信息
- 返回值:
list[int][电池状态, 陀螺仪状态, 电量水平]- 电池状态: 0-正常, 1-异常
- 陀螺仪状态: 0-正常, 1-异常
- 电量水平: 0-正常, 1-警告(<=19.6V), 2-低电量(<19.0V)
get_all_msg()
- 功能: 一次性获取所有底盘状态信息与传感器读数
- 返回值:
list0: (int) 电池状态 (0正常, 1异常)1: (int) 陀螺仪状态 (0正常, 1异常)2: (int) 电量水平 (0正常, 1警告, 2极低)3: (str) 充电状态 (二进制格式字符串)4: (float) 主电池电压5: (float) 副电池电压6: (list[float]) 解析出的 18 字节陀螺仪数据7: (float) 高精度主电池电压 (若支持)8: (float) 高精度副电池电压 (若支持)
2. 运动控制
注意:
- 平移移动指令的速度参数
speed的有效范围均为 0.01 ~ 1.60 m/s。传入越界参数将直接引发警告并返回。- 安全互锁与欠压保护:若双电池出现欠压 (<19.0V) 或某个电机过载死锁,后台线程将自动锁止所有运动,随后发出的运动指令将被拦截拦截。
move_forward(speed)
- 功能: 平移机器人向前
- 返回值:
int(1: 成功, -1: 失败/被拦截)
move_backward(speed)
- 功能: 平移机器人向后
- 返回值:
int(1: 成功, -1: 失败/被拦截)
move_left_lateral(speed)
- 功能: 平移机器人向左
- 返回值:
int(1: 成功, -1: 失败/被拦截)
move_right_lateral(speed)
- 功能: 平移机器人向右
- 返回值:
int(1: 成功, -1: 失败/被拦截)
turn_left(angular_speed)
- 功能: 原地向左旋转
- 参数:
angular_speed(float): 角速度 - 返回值:
int(1: 成功, -1: 失败/被拦截)
turn_right(angular_speed)
- 功能: 原地向右旋转
- 参数:
angular_speed(float): 角速度 - 返回值:
int(1: 成功, -1: 失败/被拦截)
stop()
- 功能: 停止所有移动
- 返回值:
int(1: 成功, -1: 失败/被拦截)
set_auto_report_state(state)
- 功能: 设置底层数据的自动报告状态 (ESP32每 50ms 主动回传)
- 参数:
state(int): 0-关闭, 1-开启 - 返回值:
int(1: 成功, 0: 失败)
get_auto_report_state()
- 功能: 获取当前的自动报告状态
- 返回值:
int(0: 关闭, 1: 开启)
get_auto_report_message()
- 功能: 被动获取最新一次的自动报告数据解析结果
- 返回值:
list(结构与get_all_msg返回值一致)
3. 电机辅助控制
set_motor_enable(motor_id, state)
- 功能: 设置电机的使能状态
- 参数:
motor_id(int): 1~4 代表单电机state(int): 0-禁用, 1-使能
- 返回值:
int(1: 成功)
get_motor_enable_status()
- 功能: 获取所有电机使能状态
- 返回值:
list[int][m1, m2, m3, m4](0-禁用/离线, 1-使能/在线)
get_motor_status()
- 功能: 获取各个 DM 电机的硬件错误状态码(0 表示正常)
- 返回值:
list[int][m1, m2, m3, m4]
clear_motor_error(motor_id)
- 功能: 电机异常死锁自愈接口,对报错的电机进行复位。
- 参数:
motor_id(int): 1~4 - 返回值:
int(1: 成功)
get_motor_temps()
- 功能: 获取各电机 MOS 的当前温度
- 返回值:
list[float][m1, m2, m3, m4]
get_motor_velocity(motor_id)
- 功能: 获取指定电机的当前转速
- 参数:
motor_id(int): 1~4 - 返回值:
float(角速度 rad/s)
get_motor_torque(motor_id)
- 功能: 获取指定电机当前的输出扭矩
- 参数:
motor_id(int): 1~4 - 返回值:
float(扭矩 N·m)
get_motor_move_speeds()
- 功能: 批量获取 4 个电机的行驶速度
- 返回值:
list[float][m1, m2, m3, m4]
get_motor_turn_speeds()
- 功能: 批量获取 4 个电机的转速
- 返回值:
list[float][m1, m2, m3, m4]
get_motor_torques()
- 功能: 批量获取 4 个电机的当前输出扭矩
- 返回值:
list[float][m1, m2, m3, m4]
4. IO 控制与通讯
set_led_mode(mode)
- 功能: 设置 LED 模式
- 参数:
mode(int): 0-电量指示模式 (默认), 1-DIY 自定义模式 - 返回值:
int(1: 成功, 0: 失败)
set_led_color(brightness, color)
- 功能: 设置 DIY LED 颜色(需要先调用
set_led_mode(1)) - 参数:
brightness(int): 亮度 0 - 255color(tuple): RGB 元组(R, G, B)
- 返回值:
int(1: 成功, 0: 失败)
get_pin_input(pin)
- 功能: 获取输入 IO 状态
- 参数:
pin(int): 引脚编号 1 - 6 - 返回值:
int(当前电平状态; -1 为读取失败或无此引脚)
set_pin_output(pin, state)
- 功能: 设置输出 IO 电平
- 参数:
pin(int): 1 - 6state(int): 0-低电平, 1-高电平
- 返回值:
int(1: 成功, 0: 失败)
set_communication_state(state, force=False)
- 功能: 切换底层通讯状态模式。当切换至
1(Socket) 时,本地串口将被智能释放。 - 参数:
state(int): 0-串口通讯 (默认), 1-Socket 通讯, 2-蓝牙通讯force(bool): 是否强制覆盖锁定状态
- 返回值:
int(1: 成功, -1: 失败)
get_communication_state()
- 功能: 获取当前通讯状态
- 返回值:
int(0-串口, 1-Socket, 2-蓝牙)
5. WiFi & 蓝牙
get_wifi_ip()
- 功能: 获取当前连接的 Wi-Fi 局域网 IP
- 返回值:
str(IP地址,失败返回空字符串)
get_wifi_account()
- 功能: 获取当前连接的 Wi-Fi 账号 (SSID)名称
- 返回值:
str(SSID,失败返回空字符串)
get_bluetooth_address()
- 功能: 获取本地蓝牙适配器的 MAC 地址
- 返回值:
str(蓝牙 MAC,失败返回空字符串)
6. 使用案例
6.1 获取 AGVPlus 的系统信息
from pymycobot import MyAGVPlus
# 初始化 AGVPlus 对象
agv_plus = MyAGVPlus("/dev/myagvplus_controller", baudrate=921600, esp32_port='/dev/ttyACM0', esp32_baud=115200, debug=True)
# 获取主固件版本号
version = agv_plus.get_system_version()
print(version)
# 获取电池与底盘所有状态信息
print(agv_plus.get_all_msg())
6.2 控制 AGVPlus 行走及灯光
import time
from pymycobot import MyAGVPlus
agv_plus = MyAGVPlus("/dev/myagvplus_controller", baudrate=921600, esp32_port='/dev/ttyACM0', esp32_baud=115200, debug=True)
# 开启机器人(包含继电器上电和电机使能等过程,需等待6秒钟)
agv_plus.power_on()
# 切换 LED 为 DIY 模式并设置为红色
agv_plus.set_led_mode(1)
agv_plus.set_led_color(255, (255, 0, 0))
# 控制 AGVPlus 以 0.5m/s 的速度前进
agv_plus.move_forward(0.5)
time.sleep(3)
# 原地旋转
agv_plus.turn_left(0.3)
time.sleep(2)
# 停止移动
agv_plus.stop()
# 关闭机器人电源并禁用电机
agv_plus.power_off()
6.3 获取网络信息并切换通信模式为 Socket
from pymycobot import MyAGVPlus
agv_plus = MyAGVPlus("/dev/myagvplus_controller", baudrate=921600, esp32_port='/dev/ttyACM0', esp32_baud=115200, debug=True)
# 获取 AGVPlus 的 WIFI 账号
account = agv_plus.get_wifi_account()
print(f"SSID: {account}")
# 获取 AGVPlus 的 IP 地址
ip = agv_plus.get_wifi_ip()
print(f"IP: {ip}")
# 将当前通信模式设置为 Socket 模式
set_result = agv_plus.set_communication_state(1)
if set_result == 1:
print("Set communication mode to Socket successfully.")
6.4 启动并使用 Socket 守护进程进行无缝远程控制
Socket 模式能够让您在任意一台连入同一局域网的电脑上零延迟地控制 AGV,完美支持二次开发。
第一步:在小车主板 (Jetson Nano/树莓派) 上启动网络守护进程 打开终端,运行:
python3 -m pymycobot.myagvplussocket_server # 或运行特定的 agv_socket_server.py
(注意:该程序运行期间,后台会自动侦测通讯状态,接管物理串口的 9000 端口。)
第二步:在代码中调用切换状态指令
agv_plus.set_communication_state(1)
底层将立刻释放物理串口的使用权!后台的 socket server 检测到模式变为 1 就会接管底盘。
第三步:在远端电脑上控制
from pymycobot.myagvplussocket import MyAGVPlusSocket
import time
# 连接至小车 IP,指定 9000 端口
agv = MyAGVPlusSocket("192.168.1.132", 9000)
print(agv.get_motor_move_speeds()) # 远程读取速度信息
agv.move_left_lateral(0.3) # 远程控制左横移
time.sleep(2)
agv.stop()