基本微型Python库
一个现代化的Python 3库,用于使用Basicmicro包串行模式控制Basicmicro电机控制器。
特性
- 完全支持所有Basicmicro数据包串行命令
- 全面的类型提示,以实现更好的IDE集成
- 调试详细日志记录
- 上下文管理器支持安全资源处理
- 异常处理,实现稳健的错误管理
- 大量文件
- 模块化文件结构,可更好地维护
安装
来自PyPI(推荐)
pip install basicmicro来源
克隆存储库并安装:
git clone https://github.com/basicmicro/basicmicro_python.git
cd basicmicro_python
pip install -e .平台特定说明
视窗
在Windows上,您需要为控制器标识正确的COM端口:
- 打开设备管理器(右键单击“开始”菜单→ 设备管理器)
- 展开“端口(COM和LPT)”
- 找到您的控制器(例如“USB串行设备”)并记下COM端口(例如COM3)
示例用法:
controller = Basicmicro("COM3", 38400)Linux
在Linux上,串行端口通常位于/dev目录中:
controller = Basicmicro("/dev/ttyACM0", 38400) # or /dev/ttyUSB0您可能需要将用户添加到“dialout”组以获得访问串行端口的权限:
sudo usermod -a -G dialout $USER然后注销并重新登录以使更改生效。
macOS
在macOS上,串行端口将位于/dev目录中:
controller = Basicmicro("/dev/tty.usbserial-XXXXXXXX", 38400)确切的名称将取决于您的USB串行适配器。
快速开始
import logging
from basicmicro import Basicmicro
# Enable logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# Using context manager for automatic resource handling
with Basicmicro("/dev/ttyACM0", 38400) as controller: # Use "COM3" on Windows
address = 0x80 # Default address
# Simple motor control
controller.DutyM1(address, 16384) # Half speed forward for motor 1
controller.DutyM2(address, -8192) # Quarter speed backward for motor 2
# Read encoder values
enc1 = controller.ReadEncM1(address)
if enc1[0]: # Check if read was successful
print(f"Encoder 1 count: {enc1[1]}")
# Set velocity PID values
controller.SetM1VelocityPID(address, kp=1.0, ki=0.5, kd=0.25, qpps=44000)使用示例
基本电机控制
from basicmicro import Basicmicro
# Initialize and open connection
controller = Basicmicro("/dev/ttyACM0", 38400) # Use "COM3" on Windows
controller.Open()
address = 0x80 # Default controller address
# Control motors by duty cycle (-32767 to +32767)
controller.DutyM1(address, 16384) # 50% forward
controller.DutyM2(address, -8192) # 25% backward
# Control motors by speed (encoder counts per second)
controller.SpeedM1(address, 1000) # 1000 counts per second forward
controller.SpeedM2(address, -500) # 500 counts per second backward
# Control both motors simultaneously
controller.DutyM1M2(address, 8192, -8192) # Motor 1 forward, Motor 2 backward
# Always close connection when done
controller.close()使用上下文管理器
from basicmicro import Basicmicro
# The context manager automatically closes the connection when done
with Basicmicro("/dev/ttyACM0", 38400) as controller: # Use "COM3" on Windows
address = 0x80
# Read battery voltages
main_batt = controller.ReadMainBatteryVoltage(address)
logic_batt = controller.ReadLogicBatteryVoltage(address)
if main_batt[0] and logic_batt[0]:
print(f"Main battery: {main_batt[1]/10.0}V")
print(f"Logic battery: {logic_batt[1]/10.0}V")
# Read temperatures
temp = controller.ReadTemp(address)
if temp[0]:
print(f"Temperature: {temp[1]/10.0}°C")读取编码器和速度
from basicmicro import Basicmicro
import time
controller = Basicmicro("/dev/ttyACM0", 38400) # Use "COM3" on Windows
controller.Open()
address = 0x80
# Reset encoders to zero
controller.ResetEncoders(address)
# Set motor speed
controller.SpeedM1(address, 1000) # 1000 counts per second
# Monitor encoders and speed
try:
for _ in range(10):
enc = controller.ReadEncM1(address)
speed = controller.ReadSpeedM1(address)
if enc[0] and speed[0]:
print(f"Encoder: {enc[1]}, Speed: {speed[1]} counts/sec, Status: {enc[2]}")
time.sleep(0.5)
finally:
controller.DutyM1(address, 0) # Stop motor
controller.close()设置PID参数
from basicmicro import Basicmicro
controller = Basicmicro("/dev/ttyACM0", 38400) # Use "COM3" on Windows
controller.Open()
address = 0x80
# Set velocity PID parameters
kp = 1.0 # Proportional constant
ki = 0.5 # Integral constant
kd = 0.25 # Derivative constant
qpps = 44000 # Maximum speed in quadrature pulses per second
controller.SetM1VelocityPID(address, kp, ki, kd, qpps)
# Read back the PID settings to verify
result = controller.ReadM1VelocityPID(address)
if result[0]:
print(f"P: {result[1]}, I: {result[2]}, D: {result[3]}, QPPS: {result[4]}")
controller.close()示例
有关更详细的示例,请查看 examples 目录:
- 基本动作:演示基本的运动控制
- 加速和位置:显示加速时的速度和位置控制
- PID配置:读取和设置PID参数的示例
- 状态和诊断:读取控制器状态和诊断信息
- 配置管理:管理控制器设置
- CAN通信:使用CAN总线接口
- 混合模式和差动驱动:控制差动驱动机器人
- 高级脚本:多线程控制和复杂序列
使用以下命令运行示例:
python -m examples.01_basic_movement -p COM3 # On Windows
python -m examples.01_basic_movement -p /dev/ttyACM0 # On Linux日志记录
该库使用Python的标准日志模块。要启用日志记录,请执行以下操作:
import logging
# Configure global logging level
logging.basicConfig(
level=logging.INFO, # Set to DEBUG for more detailed output
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# Enable DEBUG level for just the basicmicro module
logging.getLogger('basicmicro').setLevel(logging.DEBUG)文档
有关API的详细文档,请参阅 API 参考.
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
贡献
欢迎投稿!请随时提交拉取请求。
______________________________________________________________________
支持的硬件
此库适用于所有当前的Basicmicro电机控制器:
- RoboClaw电机控制器 --双通道刷直流,2×7A至2×300A,最高60VDC
- MCP工业电机控制器 --30A至60A,60VDC,CAN总线,RS-232,MCL脚本
资源
- 运动工作室 --免费配置和PID整定软件(Windows)
- 数据表、用户手册和CAD --数据表、用户手册、CAD模型和图纸
- 教程和指南 --文章、指南和新闻
- 联系支持 --技术支持和销售咨询
