首页 > 其他分享 >ros2 - slam - 使用编码器测量轮子最大速度

ros2 - slam - 使用编码器测量轮子最大速度

时间:2024-07-02 12:57:51浏览次数:16  
标签:编码器 encoders last 读取 计数器 slam 速度 ros2

新建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动态的控制电机保持在某个转速。

标签:编码器,encoders,last,读取,计数器,slam,速度,ros2
From: https://www.cnblogs.com/ai-ldj/p/18279691

相关文章

  • ros2 - slam - 编码器测速原理
    上节做完小车,遥控时小车前进时你应该会发现,小车很难走一条直线,但明明我们给到两个电机的PWM占空比都是相同的,原因在于每一个电机的硬件参数并不能完全的保证一致,所以当我们采用开环控制时,即使我们给到每个电机相同的电压,也不能让两个电机保持相同的转速。要解决这个问题我们就要......
  • ros2 slam - 订阅ROS2 Twist
    本节我们结合上一节电机控制以及前面章节的MicroROS话题订阅部分知识点,来实现一个可以用键盘遥控的小车。新建工程example24_ros2_car 修改配置[env:featheresp32];这是一个环境配置标签,指定了代码将运行的硬件平台和框架platform=espressif32;指定了使用的平台为E......
  • ros - slam - 电机控制之速度控制实验
    前面说到通过控制对应的IO上的PWM占空比即可完成对电机速度的控制。关于PWM的介绍在ROS2硬件控制篇的舵机控制中已经介绍过了,所以我们知道通过改变PWM的占空比可以实现对输出电压的大小调节。占空比越大,输出电压越高;占空比越小,输出电压越低。接着我们通过一个实验来验证下一、新建......
  • ros slam 之移动机器人常用传感器
    本节我们对移动机器人底盘结构进行简单的介绍,并着重介绍FishBot基础版的组成结构。对于一个移动底盘来说,所要提供的核心功能有两个-感知和执行能力,我们分别进行介绍。一、感知-传感器所谓感知即通过给类传感器获取环境信息的能力。在移动机器人中,我们常用的传感器有 距离传......
  • ros slam microros之H电桥电机驱动原理介绍
    一、电机驱动原理介绍正式编写代码前,我们先了解下电机驱动的原理,以便于我们了解我们如何才能通过代码控制电机的转速和正反转。1.1H桥电路让电机动起来只需要通电就行,比如我们用的额定电压为12V130RPM的电机,当给到12V的电压时可以达到额定转速130转/分,但如果我们给8V的电压,此时......
  • ros2 - microros - 雷达 -可视化点云
    上一节完成了指定角度距离的测量这一节我们将其合成ROS的laserscan消息,并将其通过microros发布到上位机,最终实现rviz2的可视化。 一、雷达消息介绍使用指令ros2interfaceshowsensor_msgs/msg/LaserScan,可以看到ROS2对雷达数据接口的定义。#Singlescanfromaplanarlas......
  • x264 编码器x264.h文件中结构体详细介绍
    x264_picture_t定义:在x264.h文件中定义typedefstructx264_picture_t{/*In:forcepicturetype(ifnotauto)*Ifx264encodingparametersareviolatedintheforcingofpicturetypes,*x264willcorrecttheinputpicture......
  • ROS2创建简单的C++功能包
    1.创建功能包终端下,进入ws00_helloworld/src目录,使用如下指令创建一个C++功能包:ros2pkgcreatepkg01_helloworld_cpp--build-typeament_cmake--dependenciesrclcpp--node-namehelloworld执行完毕,在src目录下将生成一个名为pkg01_helloworld_cpp的目录,且目录中已经......
  • ORB-SLAM3 源码分析
    一、ORB-SLAM3介绍ORB-SLAM3是一个先进的同时定位与地图构建(SimultaneousLocalizationandMapping,SLAM)系统,实现了基于视觉惯导紧耦合,同时能够对多地图进行复用;另外支持单目/双目/RGB-D作为输入,支持针孔以及鱼眼相机模型。是目前种类最齐全、工程化最好、精度和鲁棒性整体最佳的......
  • 机器翻译及实践 初级版:含注意力机制的编码器—解码器模型
    机器翻译及实践初级版:含注意力机制的编码器—解码器模型前言一、什么是机器翻译?二、所需要的前置知识(一).Seq2Seq1.什么是Seq2Seq2.机器翻译为什么要用Seq2Seq3.如何使用Seq2Seq3.1编码器的实现3.2解码器的实现3.3训练模型(二).注意力机制1.什么是注意力机制2.机器翻译为......