MyAGV Plus API 使用说明

注: 以下 API 均为 Python API,使用前请先安装 pymycobot Python SDK 包。这是基于最新 myagvplusmyagvplusapi 源码适配的文档。


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()

  • 功能: 一次性获取所有底盘状态信息与传感器读数
  • 返回值: list
    • 0: (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. 运动控制

注意:

  1. 平移移动指令的速度参数 speed 的有效范围均为 0.01 ~ 1.60 m/s。传入越界参数将直接引发警告并返回。
  2. 安全互锁与欠压保护:若双电池出现欠压 (<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 - 255
    • color (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 - 6
    • state (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()

results matching ""

    No results matching ""