当前位置: 首页 > news >正文

星慈光编程虫2号小车讲解第一篇--向前向后

星慈光编程虫2号小车是一款基于微控制器(如Arduino)的编程教学小车,常用于学习机器人控制和编程基础。本讲解将重点介绍小车的基本运动:前进、后退、左转和右转。这些运动通过控制电机实现,通常涉及调整电机的方向和速度。小编将逐步解释原理、编程实现和注意事项,帮助您快速上手。

目录

准备工作

硬件:

软件:

运动原理

麦克拉姆轮的运动原理

基本概念

向前运动

向后运动

向左平移(向左横移)

向右平移(向右横移)

旋转运动

代码

宏定义

设置引脚 setup()函数

辅助函数

up()

down()

完整代码:让小车不停向前移动5秒,向后移动5秒

准备工作

硬件:
  1. Arduino UNO R3 原装进口
  2. 星慈光 HJ-P20R34
  3. 驱动版编程虫2号小车套装
软件:

arduino IDEhttps://www.arduino.cc/en/software/

运动原理

星慈光编程虫2号小车使用麦克拉姆轮驱动。

麦克拉姆轮的运动原理

麦克拉姆轮(Mecanum wheel)是一种特殊设计的轮子,常用于全向移动机器人。它的轮缘上安装有多个倾斜的辊子(通常呈45度角),这些辊子允许轮子在滚动时产生侧向力。通过独立控制每个轮子的旋转方向和速度,机器人可以实现复杂的运动,包括向前、向后、向左平移、向右平移以及旋转。下面小编将逐步解释如何实现这些基本运动。

基本概念
  • 麦克拉姆轮通常安装在机器人的四个角落:前左轮(FL)、前右轮(FR)、后左轮(BL)、后右轮(BR)。
  • 每个轮子的辊子角度决定了其力分解:当轮子旋转时,产生的力可以分解为纵向分量(沿机器人前进方向)和横向分量(垂直于前进方向)。
  • 通过组合四个轮子的旋转,可以合成机器人的整体运动。运动方向由轮子速度向量控制,其中正速度表示轮子向前旋转(例如,顺时针),负速度表示向后旋转(逆时针)。
向前运动
  • 原理:机器人向正前方移动时,需要所有轮子产生的纵向分量叠加,而横向分量相互抵消。
  • 控制方式
    • 所有四个轮子以相同速度向前旋转(正速度)。
    • 例如:FL = +v, FR = +v, BL = +v, BR = +v(其中 v 是速度值)。
  • 为什么有效:每个轮子的力分解中,纵向分量主导,横向分量由于对称布局而抵消,合力推动机器人向前。
  • 简化公式:机器人的纵向速度v_x与轮子速度成正比: v_x \propto \frac{w_{\text{FL}} + w_{\text{FR}} + w_{\text{BL}} + w_{\text{BR}}}{4}  其中 w 表示轮子角速度。
向后运动
  • 原理:与向前运动相反,所有轮子向后旋转,纵向分量叠加向后。
  • 控制方式
    • 所有四个轮子以相同速度向后旋转(负速度)。
    • 例如:FL = -v, FR = -v, BL = -v, BR = -v
  • 为什么有效:力分解中,纵向分量反向,横向分量抵消,机器人整体向后移动。
  • 简化公式:纵向速度v_x为负值。
旋转运动
  • 顺时针旋转:左轮向前旋转(FL = +v, BL = +v),右轮向后旋转(FR = -v, BR = -v)。
  • 逆时针旋转:左轮向后旋转(FL = -v, BL = -v),右轮向前旋转(FR = +v, BR = +v)。

代码

宏定义
// M1
#define FR1 6
#define FR2 10
// M2
#define FL1  5
#define FL2  9
// M3
#define BR1  A5
#define BR2  11
// M4
#define BL1  A4
#define BL2  3
设置引脚 setup()函数
  pinMode(FR1, OUTPUT);pinMode(FR2, OUTPUT);pinMode(FL1, OUTPUT);pinMode(FL2, OUTPUT);pinMode(BR1, OUTPUT);pinMode(BR2, OUTPUT);pinMode(BL1, OUTPUT);pinMode(BL2, OUTPUT);
辅助函数
  1. up()
    void up() {digitalWrite(FR1, 0);digitalWrite(FR2, 1);digitalWrite(FL1, 0);digitalWrite(FL2, 1);digitalWrite(BR1, 0);digitalWrite(BR2, 1);digitalWrite(BL1, 0);digitalWrite(BL2, 1);
    }
  2. down()
    void down() {digitalWrite(FR1, 1);digitalWrite(FR2, 0);digitalWrite(FL1, 1);digitalWrite(FL2, 0);digitalWrite(BR1, 1);digitalWrite(BR2, 0);digitalWrite(BL1, 1);digitalWrite(BL2, 0);
    }

  • 1表示高电平,0表示低电平

完整代码:让小车不停向前移动5秒,向后移动5秒

// M1
#define FR1 6
#define FR2 10
// M2
#define FL1  5
#define FL2  9
// M3
#define BR1  A5
#define BR2  1
// M4
#define BL1  A4
#define BL2  3
void setup() {pinMode(FR1, OUTPUT);pinMode(FR2, OUTPUT);pinMode(FL1, OUTPUT);pinMode(FL2, OUTPUT);pinMode(BR1, OUTPUT);pinMode(BR2, OUTPUT);pinMode(BL1, OUTPUT);pinMode(BL2, OUTPUT);
}// 00停,01前,10退
void up() {digitalWrite(FR1, 0);digitalWrite(FR2, 1);digitalWrite(FL1, 0);digitalWrite(FL2, 1);digitalWrite(BR1, 0);digitalWrite(BR2, 1);digitalWrite(BL1, 0);digitalWrite(BL2, 1);
}
void down() {digitalWrite(FR1, 1);digitalWrite(FR2, 0);digitalWrite(FL1, 1);digitalWrite(FL2, 0);digitalWrite(BR1, 1);digitalWrite(BR2, 0);digitalWrite(BL1, 1);digitalWrite(BL2, 0);
}void loop() {up();delay(5000);down();delay(5000);
}

下一篇:星慈光编程虫2号小车讲解第二篇--向左向右平移https://blog.csdn.net/LiuYiCheng123456/article/details/149360016?spm=1001.2014.3001.5501

http://www.lryc.cn/news/599061.html

相关文章:

  • 【Web APIs】JavaScript 节点操作 ⑧ ( 删除节点 - removeChild 函数 | 删除节点 - 代码示例 | 删除网页评论案例 )
  • 【软件与环境】--SSH连接远程服务器工具:FinalShell
  • LLM中的位置嵌入矩阵(Position Embedding Matrix)是什么
  • Python编程进阶知识之第五课处理数据(matplotlib)
  • 星慈光编程虫2号小车讲解第二篇--向左向右平移
  • Linux join命令快速从大文件中匹配内容
  • C语言:20250724笔记(函数-指针)
  • STL学习(?map容器)
  • Linux 内核基础统简全解:Kbuild、内存分配和地址映射
  • 量子威胁下的区块链进化:后量子密码学时代的分布式账本革命
  • 《 java 随想录》| 数组
  • ollama无法拉取模型导致报错
  • Java并发编程第八篇(CountDownLatch组件分析)
  • Python Day15 面向对象核心特性笔记 及 例题分析
  • 深度学习(鱼书)day01--感知机
  • 基于CloudBase+React+CodeBudddy的云上智能睡眠应用开发实践
  • Rust与YOLO目标检测实战
  • rust-结构体使用示例
  • 论文阅读:《无约束多目标优化的遗传算法,群体和进化计算》
  • Eureka-服务注册,服务发现
  • SpringBoot航空订票系统的设计与实现
  • 华为OpenStack架构学习9篇 连载—— 01 OpenStack架构介绍【附全文阅读】
  • docker pull weaviate 国内拉取失败的问题
  • java中如何返回一个可以执行返回操作(return action)的函数或对象
  • rust-枚举
  • 技术赋能多元探索:我的技术成长与行业洞察
  • 【安卓笔记】lifecycle与viewModel
  • MySQL的底层原理--InnoDB记录存储结构
  • Ollama(5)服务接口压力测试
  • PostgreSQL 保留关键字冲突问题:语法错误 在 “user“ 或附近的 LINE 1: CREATE TABLE user