多个超声波读取模块(ROS)

  • 1 背景
  • 2 使用教程
    • 2.1 接线说明
    • 2.2 上传协议
  • 3 ROS节点使用
    • 3.1 下载与配置
    • 3.3 常见问题-无串口权限
  • 4 更新程序
  • 参考资料

该模块是一个开源模块,并提供了配套的ROS节点,接收串口上传的数据并发布到指定的Topic上面。目前支持 HC-SR04 、HY-SRF05和US-015这几个型号超声波模块。主要功能如下:

  • 1: 同时读取12个超声波模块数据,通过串口打包上传,频率为20Hz。
  • 2: 提供配套ROS节点程序,可将测量数据发布到ROS Topic上。
  • 3: 开源ROS节点程序[3],并提供单片机端hex文件下载,使用其他单片机开发板也可以轻易使用。

1 背景

在制作智能小车、自主导航小车的过程中我们通常会使用超声波来弥补小车的测量盲区,或者直接设计基于超声波的避障小车。这其中都涉及到多个超声波模块的读取。一方面我们可以选取市面上已有的串行超声波模块通过IIC或者485总线实现多个超声波级联。但是如下面表格1所示,市面上级联的超声波模块最便宜的也需要100元一个,这样12个成本约为1200元。如果使用其他模块则更贵。另一方面超声波在读取的时候需要频繁调用定时器中断函数测量回波电平的宽度实现距离的测量。而这个过程会占用大量的cpu资源,因此我们将这部分功能独立出来为一个模块,单独使用一个单片机去读取超声波模块的数据并通过串口转发出去。

2 使用教程

2.1 接线说明

如下图所示,使用模块时需连接超声波模块

  • P1-P12 为超声波连接1-12通道
  • 电源输入电压为直流5-12V DC-DC圆孔2.5mm
  • 绿色灯为电源指示灯
  • 红色灯闪烁频率大约为20Hz 表示正常测量过程

SWD下载接口线序如下图所示

超声波接线说明:目前支持 HC-SR04 超声波模块

HC-SR04模块接线如下图所示:
- 红色——VCC
- 黑色——GND
- 黄色——Trig
- 绿色——Echo


板子安装孔位置和外形尺寸如下:

2.2 上传协议

数据格式为: 帧头+数据长度+命令类型+数据+校验+帧尾。数据上传频率为20Hz,波特率使用115200。

  • 帧头:固定为两个字节: 0xAE, 0xEE
  • 数据长度:为所有字节的和(包含了帧头和帧尾)
  • 命令类型:固定为: 0xA1
  • 数据位:包含12个通道的超声波测量值,每个通道占用2个字节,共计24字节,采用高位在前方式(大端数据模式)发送,测量数据的单位为mm。 即为:[CH1_HSB CH1_LSB … CH12_HSB CH12_LSB]
  • 校验位:所有数据位的加和取低八位(包括帧头和帧尾)
  • 帧尾:固定为两个字节 0xEF,0xFE

3 ROS节点使用

3.1 下载与配置

1 安装依赖项

sudo apt-get install ros-melodic-rosserial
cd catkin_ws/src
git clone https://github.com/RuPingCen/ultrasonic-ros.git

2.编译代码

cd ..
catkin_make

3 启动ROS节点

roslaunch ultrasonic_ros ultrasonic_ros.launch

启动节点以后可以看到终端打印输出的数据

4 使用 echo 命令打印查看超声波的数据

rostopic echo /ultrasonic/data


5 使用 hz 命令查看话题发布的频率

rostopic hz /ultrasonic/data

3.3 常见问题-无串口权限

启动节点时候提示没有串口设备或者没有启动权限,这时候需要修改串口权限。
step1: 检查是否识别到USB转串口驱动

查看设备的ID号 ls /dev/ttyUSB*

这里我们可以通过一个简单的方式来修改串口权限

sudo chmod 766 /dev/ttyUSB0

上述的方式每次拔插串口以后都需要执行修改权限的命令比较麻烦,可以使用我们的脚本文件把串口权限写入rule文件中。
step2: 用记事本打开“ultrasonic-ros/scripts/ultrasonic.rules” 目录下的文件,会看到如下内容

cd ultrasonic-ros/scripts
gedit ultrasonic.rules


step3: 这里的1a86和7523 就是上面图中我设备的ID号,这里修改成为你自己的ID号以后,把文件拷贝到/etc/udev/rules.d目录下就可以使用 /dev/ultrasonic 替代 /dev/ttyUSB0 来访问模块了

sudo cp ultrasonic.rules /etc/udev/rules.d/

4 更新程序

为了使得没有购买这个板子的小伙伴使用我们的程序,我们提供了Hex文件下载。通过STLink进行烧写程序,对照我们提供的原理图接线也可以实现多个超声波的读取(需要一定的动手能力)。板载芯片为STM32F103C8T6。

SWD下载接口线序如下图所示

从ST官方的下载烧写软件:STM32 ST-LINK utility 4.5.0 安装时候一直下一步默认即可,安装完成以后打开软件,使用STLink连接到STM32板子。

接下来点击这个插头一样的东西(如果没有识别到就拔插一下STLink下载器)

成功以后就可以看到芯片的信息

接下来选中github网页中目录 ultrasonic-ros/reference/hex目录下的hex文件 ultrasonic_V1.0.0.hex

成功打开以后这两个地方会有信息提示成功打开文件

接下来点击烧写程序

程序下载完成以后扳子上的红色LED开始闪烁表示程序下载成功了

参考资料

[1] https://github.com/RuPingCen/ultrasonic-ros/tree/master/reference/hex
[2] https://www.st.com/en/development-tools/stsw-link004.html
[3] https://github.com/RuPingCen/ultrasonic-ros

多个超声波读取模块(ROS)相关推荐

  1. ROS 之 arduino 驱动 超声波测距模块

    US-015是目前市场上分辨率最高,重复测量一致性最好的超声波测距模块:US-015的分辨率高于1mm,可达0.5mm,测距精度高:重复测量一致性好,测距稳定可靠.US-015超声波测距模块可实现2c ...

  2. 51单片机 普中V2 超声波测距 报警 显示 基于MCS51单片机的超声波测距模块的开发

    基于MCS51单片机的超声波测距模块的开发 采用C51程序设计语言,完成下列功能要求. l 必选功能: (1) 超声波模块和单片机的接口设计,画出完整的电路原理图.(15分) (2) 开发板上电时,显 ...

  3. Arduino用超声波测距模块HC-SR04获得精确测量值——误差数据的排除

    在Arduino板上最常用的测距模块就是超声波传感器HC-SR04,因为该模块使用方便,价格便宜(某宝上4元左右包邮).它的主要性能指标为:采用40KHz超声波,测距:2cm-400cm,分辨率:3m ...

  4. 51单片机:HCSR04超声波测距模块及1602显示—C51程序(超详细)

    测试完成于STC89C516单片机,晶振12MHZ.超声波模块Echo=P1^0.Trig=P1^1,1602液晶8位数据口=P0.E=P2^7.RS=P2^6.RW=P2^5.. 程序文件分为4部分 ...

  5. STM32单片机基于HAL库开发HC-SR04 超声波测距模块(终极版)

    参考: 某宝HC-SR04 超声波测距模块商品详情页 STM32L051C8T6 HAL库 输入捕获进行超声波测距 案例 STM32CubeMX学习笔记3--TIM2输入捕获(SR-04测距) cub ...

  6. HC-SR04超声波测距模块使用方法和例程(STM32)

    基于STM32和HC-SR04模块实现超声波测距功能 最近在学STM32做个简单的应用实践一下,顺便水一篇文章. 本文用的单片机是STM32F103C8T6,超声波测距模块是HC-SR04,显示测距结 ...

  7. 学习并使用HC-SR04超声波测距模块+STM32

    ** 超声波测距原理 ** 参考博客: https://blog.csdn.net/qq_40734815/article/details/105992801 https://blog.csdn.ne ...

  8. STM32蓝牙控制循迹避障小车源代码——3.舵机、超声波测距模块

    STM32蓝牙控制循迹避障小车源代码--3.舵机.超声波测距模块 注意-所需模块: US-015超声波模块 SG90舵机云台 接线:舵机超声波: A1–P2.7 B8–Trig B9–Echo 代码 ...

  9. stm32控制超声波测距模块HC-SR04

    引脚:PB15 TRIG,PB0 ECHO: 不同距离,LED对应不良.闪烁.亮状态,并通过串口发送到PC; TIM3定时中断,测出脉宽长度,没有像野火一样使用捕捉功能: 1.HS-SR04模块实物图 ...

最新文章

  1. 成熟的GAN会自己分析脸部纹理!英伟达StyleGAN团队出新作,网友:竟然还能有突破...
  2. 医疗在线服务InQuicker,融资0元年盈利400万美元!拒绝风投与炒作
  3. hashCode()方法(覆盖hashCode()方法)
  4. 阿里开源Canal--①简介
  5. iOS之深入解析Runloop的底层原理
  6. JAVA WEB之Spring4.x JdbcTemplate
  7. 牛客-Forsaken喜欢独一无二的树【并查集,最小生成树】
  8. [html] viewport常见设置都有哪些?
  9. C# 杀掉指定进程
  10. shell编程中if []的用法注意
  11. 基于深度学习的2D和3D仿射变换配准
  12. Frida系列--自动化生成脚本
  13. 计算机web前端岗位职责,web前端开发工程师岗位的职责
  14. C/C++实现atoll函数
  15. 【微信小程序更改appid失败】微信小程序修改appid一直失败报错tourist appid解决办法
  16. 微微一笑很倾城(2)
  17. 【毕业N年系列】 毕业第二年
  18. 区块链技术在中小企业型的应用
  19. idea generated-requests.http 表单请求示例
  20. slambook2 ch3 Ubuntu18.04下运行和调试

热门文章

  1. coreldraw x4怎么写字_CorelDraw X4做出凹凸文字的方法步骤
  2. uincloud版完成微信支付(个人经验)
  3. C++map函数的用法
  4. CentOS7下系统一键安装后报502 Bad Gateway
  5. jpa利用pageable分页排序
  6. 排序-Pageable
  7. JavaScript 生成器函数
  8. java中如何定义一个数组
  9. mysql 查询之被人忽略的行行比较
  10. 如何在HTML中使用PHP