按位置转动 |
按位置转动,是指给定一个位置参数,让电机运动到该位置。
按位置转动包含三种不同的模式:
——
1.1 直接位置模式
在该模式下,电机从一个位置直接转动到一个或多个指定位置。直接PID控制位置,对实时位置命令响应迅速,急起急停,但位置命令频率高时容易抖动。
1.2 滤波位置模式
在该模式下,电机从一个位置平滑地转动到一个或多个指定位置。电机的运动曲线经过滤波处理,有一个加速和减速的过程。对实时位置命令响应较快,但运动姿态平顺,位置命令频率高时表现优异。
1.3 轨迹位置模式
在该模式下,电机从一个位置平滑地转动到一个指定位置,只对最终指定位置发生响应。电机有一个均匀加速的过程和一个均匀减速的过程。无法快速响应实时位置命令,但运动非常平顺,且轨迹的运动时间非常稳定,位置命令频率低时较为常用。
3.1 实现步骤
3.1根据3D图,完成电机模组的装配,扫描二维码,可查看及下载3D文件。
3.2 按照图示,完成电路连接。
4.Python编程(Linux)
以下代码在Linux系统(Ubuntu 18.04)下,Jupyter环境中测试实现。
4.1 输入并运行以下代码,可实现直接位置模式:
1. # 初始化电机对象
2. from protobot.can_bus import Robot
3. from protobot.can_bus.nodes import MotorFactory
4. motor = Robot().add_device('motor0', MotorFactory(), node_id=0x10, reduction=-44)
5. # 电机使能
6. motor.enable()
7. # 进入直接位置模式
8. motor.position_mode()
9. # 设置位置参数
10. motor.set_pos(6.28) # 6.28代表2π位置,您可以修改为其他参数以体验本功能
4.2 输入并运行以下代码,可实现滤波位置模式:
1.# 初始化电机对象(Linux)
2.from protobot.can_bus import Robot
3.from protobot.can_bus.nodes import MotorFactory
4.motor = Robot().add_device('motor0', MotorFactory(), node_id=0x10, reduction=-44)
5.# 电机使能
6.motor.enable()
7.# 进入滤波位置模式
8.motor.position_filter_mode(1) # 括号中的参数代表“滤波带宽 / 控制频率(Hz)”,数值越高,频率越高
9.# 设置位置参数
10.motor.set_pos(6.28) # 6.28代表2π位置,您可以修改为其他参数以体验本功能
4.3 输入并运行以下代码,可实现轨迹位置模式: 1.# 初始化电机对象(Linux) 2.from protobot.can_bus import Robot 3.from protobot.can_bus.nodes import MotorFactory 4.motor = Robot().add_device('motor0', MotorFactory(), node_id=0x10, reduction=-44) 5.# 电机使能 6.motor.enable() 7.# 进入轨迹位置模式 8.motor.position_traj_mode(2,0.5,0.5) # 括号中的参数代表“(最高速度,加速度,减速度)” 9.# 设置位置参数 10.motor.set_pos(6.28) # 6.28代表2π位置,您可以修改为其他参数以体验本功能
5.Python编程(Windows) 在Windows10系统下,Jupyter环境中运行代码时,只需要将“初始化电机对象”部分的代码替换为以下内容即可: 1.# 初始化电机对象 2.from protobot.can_bus import Robot 3.from protobot.can_bus.nodes import MotorFactory 4.robot = Robot(bustype='pcan', channel='PCAN_USBBUS1', bitrate=1000000) 5.motor = robot.add_device('motor0', MotorFactory(), 0x10, reduction=-44) 其余代码相同。
4.4 分别用三种模式,依次走到A、B、C三个位置: 1.# 初始化电机对象(Linux) 2.from protobot.can_bus import Robot 3.from protobot.can_bus.nodes import MotorFactory 4.motor = Robot().add_device('motor0', MotorFactory(), node_id=0x10, reduction=-44) 5.# 电机使能 6.motor.enable() 7.# 进入直接位置模式 8.motor.position_mode() 9.# 设置位置参数 10.motor.set_pos(6.28) 11.robot.delay(2) #该函数代表为上一行的动作流出多长时间,括号里的2代表2秒, 12.# 进入滤波位置模式 13.motor.position_filter_mode(1) 14.# 设置位置参数 15.motor.set_pos(0) 16.robot.delay(3) #由于滤波位置模式有加减速过程,所以留给的时间稍微长一些 17.# 进入轨迹位置模式 18.motor.position_traj_mode(2,0.5,0.5) 19.# 设置位置参数 20.motor.set_pos(-6.28) 21.robot.delay(3)#由于轨迹位置模式有加减速过程,所以留给的时间稍微长一些
|