搭建ROS小车——下位机篇(基于arduino mega2560,L298N)

2023-05-16

ROS与arduino的通讯使用了ros_arduino_bridge,代码也是根据学校师兄的代码进行修改的,师兄说直接烧录就可以使用了但我还是遇到了很多问题,Debug的很难受,以下操作仅供参考,需要根据实际情况自行调整

L298N的使用

在这里插入图片描述

连接方式

  1. 不调速:直接与IN1、IN2连接,ENA、ENB键帽不动(键帽的作用是让ENA、ENB默认与5V连接,这样才能驱动电机转动,只有ENA、ENB处于高电平时对应的电机才能转动)
  2. 调速:IN1.2.3.4与arduino连接后,将ENA、ENB在IN平行一侧的针脚与arduino的PWM输出引脚连接,对ENA和ENB使能端输入PWM脉冲
    • 也有文章说可以直接arduino的pwm输出直接连接IN1、IN2来调速,但是在多次尝试后发现不行

与arduino的连接

这里要注意L298N与arduino一定要共地,直接GND与arduino的GND连接,调试的时候可以将L298N的5V口与arduino连接供电(因为供电口键帽没有拔掉的时候5V可以用来输出)

附上接线部分代码

//电机定义,ENCODER_1代表编码器正极,A标号为左侧电机
#define  PWMA  10
#define  AIN1  4
#define  AIN2  5
#define  AENCODER_1     3    //INT1--中断号 只能读取B相的
#define  AENCODER_2     2    //INT0
#define  PWMB  11
#define  BIN1  6
#define  BIN2  7
#define  BENCODER_1     18   //INT5
#define  BENCODER_2     19   //INT4
//需要注意arduino mega的中断引脚以及引脚号,后边会用到,如果进行修改的话需要按照自己的接线来修改

arduino

使用mega的原因如下

  • 引脚比较多,也是ros_arduino_bridge原代码中使用的板子
  • 中断引脚比较多,将来如果要做四轮或者三轮小车可以使用
  • 电源引脚也比较多,不用在外部焊接排针

注:原版比较贵,这里我用的是国产板

已经将代码上传到github上,同步进行更新,文末附带连接,下边说明一下代码(代码中已经有大量注释,这里只讲一些自己觉得重要的)以及项目进行过程中遇到的问题,有遇到相同问题的小伙伴可以一起讨论

  • 代码中使用了大量的宏定义,阅读代码时需要留意这部分代码,上下文结合
  • communication这部分是上下位机通讯用的,可以根据自己需要进行修改
  • 中断:中断这个地方有个隐藏技巧,因为编码器的正负极的方向是一样的,但是装到轮子上后就是方向相反的了,所以如果编码器1进入正极引脚对应的中断,那么编码器2就进入负极对应的中断,这样做当机器人向某个方向走的时候,才能两个编码器同时进入中断。如果都让两个编码器的正极对应的线进入中断,那么前几个数值可能会有正负值跳变
  • pid调试:这里可以参考这篇文章,不过ros_arduino_bridge的pid代码感觉有点奇怪,因为我曾经遇到一个问题,不上电的时候,pid.out会慢慢增加到255,全速转动,推测是pid问题

代码:https://github.com/LinErTe/roscar

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

搭建ROS小车——下位机篇(基于arduino mega2560,L298N) 的相关文章

  • 使用 Arduino 将serial.read()转换为可用的字符串

    我正在使用两个 Arduino 来相互发送纯文本字符串新软系列 https docs arduino cc learn built in libraries software serial and an RF http en wikiped
  • Arduino F()宏的实现

    我试图了解 Arduino 中的 F 宏实际上对 PGMEM 和 RAM 做了什么以及运行时的影响是什么 有人可以指出定义这个宏的文件吗 这可能是旧版本 但定义它的一个地方是Wstring h as in here http andybro
  • 如何使用 PHP 读取串口 [重复]

    这个问题在这里已经有答案了 如何使用 php 从连接到我的服务器 运行 kali linux 的旧笔记本电脑 上的 COM 端口的 arduino 读取串行数据 以便我可以在网页上显示数据 我读过有关同一问题的其他问题 所有这些问题要么超级
  • Arduino:将数据存储在 EEPROM 中的轻量级压缩算法

    我想将大量数据存储到我的 Arduino 上ATmega168 http www atmel com devices atmega168 aspx ATmega328 http www atmel com devices atmega328
  • C++ 递减单字节(易失性)数组的元素不是原子的!为什么? (另外:如何在 Atmel AVR mcus/Arduino 中强制原子性)

    由于试图通过一些我不知道的简单内容来调试我的代码 我损失了几天的时间 实际上是大约 25 小时的工作 事实证明 在 AVR ATmega328 8 位微控制器 Arduino 上 用 C 递减单字节数组的元素不是原子操作 并且需要原子访问防
  • 使用 pySerial 等待 Arduino 自动重置

    我正在尝试在 Linux 上使用非常简单的代码 为了展示问题 从 Arduino 板上读取行 Python代码 arduino py import serial arduino serial Serial dev ttyACM0 with
  • 批处理文件:从串口接收数据并将其写入txt文件

    我正在尝试通过 USB 串行端口从 Arduino 提取一些数据并将其写入 txt 文件 因此 我使用批处理文件 Windows 7 普通cmd 它发送例如 d 从 Arduino 请求所需的数据 收到 d 后 Arduino 开始向 PC
  • Arduino I2S 正弦波

    我正在开发一个项目 我想通过组合不同的正弦波来生成 简单 声音 我使用的是 arduino mkrZero 因为它内置了 I2S 接口 并且似乎有足够的处理能力来满足我的需求 I have wired my system exactly l
  • ARDUINO 常数有什么用?以前是22,现在是100

    我正在使用热电偶并下载了 MAX6675 库 我想知道以下几行中 ARDUINO 常量的值是做什么用的 if ARDUINO gt 100 lcd write byte 0 else lcd print 0 BYTE endif lcd p
  • DCF77 解码器与噪声信号

    我几乎完成了我的开源 DCF77 解码器项目 当我注意到标准 Arduino DCF77 库在噪声信号上表现非常差时 这一切就开始了 特别是当天线靠近计算机或洗衣机正在运行时 我永远无法从解码器中获取时间 我的第一个方法是向输入信号添加 数
  • 如何订阅“/scan”主题、修改消息并发布到新主题?

    我想通过订阅message ranges来改进turtlebot3的LDS 01传感器 通过应用一些算法修改messange ranges并将其发布到新主题 如下所示 但是当我运行编码时出现错误 错误是 遇到溢出的情况 错误是 运行时警告
  • 静态 uint8_t 数组的输入过程和类型

    我目前正在尝试将 Arduino IDE 中的整数变量转换为静态 uint8 t 数组的值 我在用 include
  • 为什么使用 libnfc 和 PN532 SHIELD 时“找不到 NFC 设备”

    我在 ArchLinux 上安装了 libnfc 并通过我的 Adafruit PN532 arduino SHIELD 使用它 nfc list返回消息 未找到 NFC 设备 我在 etc nfc devices d pn532 conf
  • ESP8266 I2C从机不确认数据

    我有一个 TM4C123 处理器作为 I2C 主处理器 一个 ESP8266 作为从处理器 对于 ESP 我使用的是 Arduino IDE 并在 2 5 2 版安装了 ESP8266 支持 它应该支持 I2C 从模式 但是 我无法让它工作
  • 无法在 Ubuntu 20.04 上安装 ROS Melodic

    我正在尝试使用这些命令在 Ubuntu 20 04 上安装 ROS Melodic sudo sh c echo deb http packages ros org ros ubuntu lsb release sc main gt etc
  • 使用 Java 控制 Arduino

    我正在寻找一个LED http en wikipedia org wiki Light emitting diode用Java程序打开和关闭 我用 C 完成了这个项目大约 5 分钟 但用 Java 似乎更具挑战性 我让 Arduino 等待
  • 使用 Ardulink 命令 Arduino Uno

    我试图在我的 JAVA 应用程序中使用 Ardulink 库来命令我的 Arduino Uno 但没有成功 我不知道我错过了什么 这是我的代码 Link link Link getDefaultInstance boolean connec
  • Arduino C++ 代码:可以使用虚函数和异常吗?

    跟进这条评论 https stackoverflow com questions 452139 writing firmware assembly or high level 452401从问题中编写固件 汇编还是高级 https stac
  • 安装 ROS 时 Cmake 未检测到 boost-python

    我一直在尝试在我的 Mac 上安装 ROS 并根据不同版本的 boost 使用不同的库解决了错误 然而 似乎有一个库甚至没有检测到 boost python 这是我得到的错误 CMake Error at usr local share c
  • Arduino 高低

    我有一个 Arduino 我想知道到底是什么HIGH and LOW意思是 就实际值而言 它们是否有符号ints unsigned ints unsigned char是 他们的价值观是什么 我猜HIGH and LOW可能是unsigne

随机推荐