【Arduino 动手做】SLIDE全向轮机器人平台

2025-07-101620
AI 快速预览详细 收起
SLIDE全向轮机器人平台是一个开源项目,旨在教育和探索全能机器人的应用。该项目使用Arduino控制步进电机,并通过Processing运行纵杆接口。通过安装AccelStepper和MultiStepper库,用户可以轻松控制多个步进电机,实现全方位移动。适用于STEM教育和青少年科创比赛,帮助学生理解holonomic驱动器的原理和应用。
S.L.I.D.E (Seamless locomotion in diverse environments) 是一个全向轮平台,旨在探索全能机器人的各种应用。

SLIDE 是一个开源项目,旨在教育和探索整体机器人的世界。SLIDE 可以在各种室内环境中实施,例如仓库、餐厅或医院,由于人员接近,传统机器人的导航更加困难。Holonomic 机器人可以轻松地在狭小空间内导航,因为它们可以向任何方向行驶。

该项目的目的不是用于商业应用,而是用于教育目的。一般来说,学生们会追求传统的驾驶机器人,如滑移转向或 Ackerman 驾驶。该项目旨在展示 holonomic 驱动器的酷炫应用,并可能增加对该领域的一些兴趣。

Arduino 将通过 USB 电缆连接到 RPI,并从 RPI USB 获取电源。扩展板将直接连接到 12V 电源。虽然盾牌位于 Arduino 的顶部,但只要将跳线设置为如下所示,它就不会从中汲取能量。

法典

我们将使用 Arduino IDE 对 Arduino 进行编程以控制步进电机,并使用 Processing 来运行纵杆接口。处理程序将在 Raspberry PI 上运行。在视频中,我正在使用手机通过 VNC 服务器连接到 RPI,您也可以使用您的 PC 并使用鼠标移动纵杆。

Arduino 代码

我们将使用 AccelStepper 库来处理电机控制和串行通信,以接收纵杆值。本指南将介绍必要的库、安装步骤和代码背后的逻辑。

必需的库

AccelStepper:此库允许您轻松控制步进电机。它支持各种类型的驾驶员,并提供速度控制、加速等功能。
MultiStepper:此库有助于同时管理多个步进电机。
安装库

要安装这些库,请执行以下步骤:

打开 Arduino IDE。
转到 Sketch > Include Library > Manage Libraries...
在 Library Manager 中,搜索 “AccelStepper” 并单击 “Install” 按钮。
同样,搜索“MultiStepper”并安装它。

【Arduino 动手做】SLIDE全向轮机器人平台图3

【Arduino 动手做】SLIDE全向轮机器人平台图1

【Arduino 动手做】SLIDE全向轮机器人平台图2

【Arduino 动手做】SLIDE全向轮机器人平台图6

【Arduino 动手做】SLIDE全向轮机器人平台图4

【Arduino 动手做】SLIDE全向轮机器人平台图5

【Arduino 动手做】SLIDE全向轮机器人平台图7

【Arduino 动手做】SLIDE全向轮机器人平台图8

【Arduino 动手做】SLIDE全向轮机器人平台图9

【Arduino 动手做】SLIDE全向轮机器人平台图10

【Arduino 动手做】SLIDE全向轮机器人平台图13

【Arduino 动手做】SLIDE全向轮机器人平台图12

【Arduino 动手做】SLIDE全向轮机器人平台图11

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
驴友花雕
驴友花雕
作者
项目代码
[code]#include
#include
// Define the number of steps per revolution for your stepper motors
#define STEPS_PER_REVOLUTION 3200 // 200 steps/rev * 16 (1/16th microstepping)
// Define the pins for each stepper motor
#define MOTOR1_STEP_PIN 2
#define MOTOR1_DIR_PIN 5
#define MOTOR2_STEP_PIN 3
#define MOTOR2_DIR_PIN 6
#define MOTOR3_STEP_PIN 4
#define MOTOR3_DIR_PIN 7
#define MOTOR4_STEP_PIN 12
#define MOTOR4_DIR_PIN 13
// Define the maximum speed and acceleration for the stepper motors
#define MAX_SPEED 2000
#define ACCELERATION 500
// Create instances of AccelStepper for each motor
AccelStepper stepperX(AccelStepper::DRIVER, MOTOR1_STEP_PIN, MOTOR1_DIR_PIN);
AccelStepper stepperY(AccelStepper::DRIVER, MOTOR2_STEP_PIN, MOTOR2_DIR_PIN);
AccelStepper stepperZ(AccelStepper::DRIVER, MOTOR3_STEP_PIN, MOTOR3_DIR_PIN);
AccelStepper stepperA(AccelStepper::DRIVER, MOTOR4_STEP_PIN, MOTOR4_DIR_PIN);
void setup() {
// Set up the serial connection for communication with the PC
Serial.begin(115200);
// Set up each stepper motor with max speed and acceleration
stepperX.setMaxSpeed(MAX_SPEED);
stepperX.setAcceleration(ACCELERATION);
stepperY.setMaxSpeed(MAX_SPEED);
stepperY.setAcceleration(ACCELERATION);
stepperZ.setMaxSpeed(MAX_SPEED);
stepperZ.setAcceleration(ACCELERATION);
stepperA.setMaxSpeed(MAX_SPEED);
stepperA.setAcceleration(ACCELERATION);
}
void loop() {
// Check if data is available on the serial port
if (Serial.available() > 0) {
// Read the CSV values
String input = Serial.readStringUntil('\n');
int values[4];
int i = 0;
char *ptr = strtok((char *)input.c_str(), ",");
while (ptr != NULL) {
values[i++] = atoi(ptr);
ptr = strtok(NULL, ",");
}
// Control the robot using the joystick values
int leftX = values[0];
int leftY = values[1];
int rightX = values[2];
int rightY = values[3];
// Calculate motor speeds based on joystick values
int motorXSpeed = leftX - rightX;
int motorYSpeed = leftY - rightX;
int motorZSpeed = -leftX - rightX;
int motorASpeed = -leftY - rightX;
// Set motor speeds
stepperX.setSpeed(motorXSpeed);
stepperY.setSpeed(motorYSpeed);
stepperZ.setSpeed(motorZSpeed);
stepperA.setSpeed(motorASpeed);
}
// Move each motor
stepperX.runSpeed();
stepperY.runSpeed();
stepperZ.runSpeed();
stepperA.runSpeed();
}[/code]
- 没有更多了 -