【ROS2机器人入门到实战】速度转换-机器人最大速度测量

9.速度转换-机器人最大速度测量

写在前面

  1. 当前平台文章汇总地址:ROS2机器人从入门到实战
  2. 获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取
  3. 教程配套机器人开发平台:两驱版| 四驱版
  4. 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn

你好,我是小鱼。有了上一节的测量值,这一节我们尝试对电机最大速度进行测量。

一、新建工程并导入开源库

新建example26_max_speed_measurement

在这里插入图片描述

添加依赖

[env:featheresp32]  ; 这是一个环境配置标签,指定了代码将运行的硬件平台和框架
platform = espressif32  ; 指定了使用的平台为Espressif 32
board = featheresp32  ; 指定使用的硬件板为Feather ESP32
framework = arduino  ; 指定使用的框架为Arduino
lib_deps =  ; 列出所有依赖库的URL,这些库将被下载和安装
	https://github.com/fishros/Esp32PcntEncoder.git  ; ESP32 编码器驱动库

二、编写代码

编写代码

#include <Arduino.h>
#include <Esp32PcntEncoder.h>

Esp32PcntEncoder encoders[2]; // 创建一个数组用于存储两个编码器
int64_t last_ticks[2]; // 记录上一次读取的计数器数值
int32_t pt[2]; // 记录两次读取之间的计数器差值
int64_t last_update_time; // 记录上一次更新时间
float speeds[2]; // 记录两个电机的速度

void setup()
{
  // 1.初始化串口
  Serial.begin(115200); // 初始化串口通信,设置通信速率为115200

  // 2.设置编码器
  encoders[0].init(0, 32, 33); // 初始化第一个编码器,使用GPIO 32和33连接
  encoders[1].init(1, 26, 25); // 初始化第二个编码器,使用GPIO 26和25连接

  // 3.让电机1以最大速度转起来
  pinMode(23, OUTPUT);
  digitalWrite(23, HIGH);
}

void loop()
{
  delay(10); // 等待10毫秒

  // 4.计算两个电机的速度
  uint64_t dt = millis() - last_update_time; // 计算两次读取之间的时间差
  pt[0] = encoders[0].getTicks() - last_ticks[0]; // 计算第一个编码器两次读取之间的计数器差值
  pt[1] = encoders[1].getTicks() - last_ticks[1]; // 计算第二个编码器两次读取之间的计数器差值

  speeds[0] = float(pt[0] * 0.1051566) / dt; // 计算第一个电机的速度
  speeds[1] = float(pt[1] * 0.1051566) / dt; // 计算第二个电机的速度

  // 5.更新记录
  last_update_time = millis(); // 更新上一次更新时间
  last_ticks[0] = encoders[0].getTicks(); // 更新第一个编码器的计数器数值
  last_ticks[1] = encoders[1].getTicks(); // 更新第二个编码器的计数器数值

  // 6.打印信息
  Serial.printf("tick1=%d,tick2=%d\n", encoders[0].getTicks(), encoders[1].getTicks()); // 打印两个编码器的计数器数值
  Serial.printf("spped1=%f,spped2=%f\n", speeds[0], speeds[1]); // 打印两个电机的速度
}

loop()函数中,首先等待10毫秒,然后读取两个编码器的计数器数值,并且计算出它们的旋转速度。

其中,last_ticks数组用于存储上一次读取的计数器数值,pt数组存储两次读取之间的计数器增量,last_update_time变量存储上一次读取的时间,speeds数组存储两个编码器的旋转速度。

最后,通过串口打印出两个编码器的计数器数值和旋转速度。此外,还让GPIO 23输出高电平,使电机1以最大速度转动。

三、下载测试

下载代码,观察串口打印

在这里插入图片描述

最大速度为-0.389079m/s

四、总结

本节我们完成了对电机速度的测量,下一节我们尝试利用PID动态的控制电机保持在某个转速。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值