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”并安装它。













项目代码
#include <AccelStepper.h>
#include <MultiStepper.h>
// 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();
}
【Arduino 动手做】SLIDE全向轮机器人平台
项目链接:https://benchrobotics.com/arduino/slide-omniwheel-robot-platform/
项目作者:舒布汉姆·巴特
项目视频(5分钟):https://www.youtube.com/watch?v=CuAKjQ_rSYo&t=2s
项目代码:https://github.com/sastejugaad/SLIDE
https://github.com/sastejugaad/SLIDE/blob/main/SLIDE_Joystick_v1/SLIDE_Joystick_v1.ino
3D 文件:https://grabcad.com/library/slide-omniwheel-robot-platform-1


评论