ROS系统深度解析:一功能突破成就解锁新认知

发表时间: 2024-06-05 14:12

没想到吧,这个飞盘一样的圆柱体,竟然是一辆智能小车。

开源网址:https://oshwhub.com/liguanxi/mini-smart-car

它能利用自身的激光雷达实时绘制地图,再通过RVIZ可视化工具实时显示。

有网友精辟总结:

哈哈!是有点点像,但不多啊!

那么,想实现这一功能,具体怎么设计软硬件?

下面尽可能通俗易懂的说明一下。


一、硬件设计原理

ESP32-S3底板_原理图

ESP32-S3底板_PCB图

ESP32-S摄像头板_原理图

ESP32-S摄像头板_PCB图

(1)为什么要用两个主控?

一般来说,机器人系统ROS都需要在树莓派等微型电脑上运行,而我想要以最低的成本去完成这个项目,所以我将运行ROS系统电脑从机载转到上位机,通过WiFi与连接小车,这样就可以节省一台微型电脑

但是!雷达的数据大概1ms发送一次,一块ESP32显然不够用了!所以,我选择使用两个ESP32作为主控。

  • 一块专门用来转发雷达数据
  • 另一块进行运动控制,读取传感器数据

类似的结构鱼香ROS有制作,不过体型比较大,集成度低。


(2)天线部分

2.1 阻匹配 技巧

esp32天线部分比较讲究,涉及到高速线路,这里的射频部分做了50R阻抗匹配

这个叠层我还是有点懵,看不懂后面就使用了嘉立创的阻抗计算器,计算这个阻抗对应什么厚度的铜箔多少宽度的线

最后选用4层板,PCB厚度:1.6,走线宽度:13.2mil


2.2 器件摆放与走线 要点

这里参考乐鑫的硬件设计指南。

4层PCB内层1全覆铜,底层走普通信号,内层2走电源。

天线处的Π形滤波电路,用网络矢量分析仪 进行测试调整。步骤如下:

  • 使用矢量分析仪测量天线
  • 根据测量出的史密斯图进行仿真测试
  • 逐步调整电感与电容至最佳比例:驻波比靠近1,史密斯图显示阻抗在50欧姆左右即可

如下图频率所示,在2.431GHz左右时,驻波比在1.348,阻抗在55.21左右,代表此电路在2.4GHz的频率下性能接近最佳。

图片截取于“清澈的泉水”的视频立创EDA绘制2.4GHz RF射频双层板制作


(3)晶振部分

晶振部分也算高速电路了,需要GND包围做屏蔽层


(4)电池设计原理

电池设计为不可拆卸,所以添加了一个充电电路。采用TP4056设计,充电电流设置为400ma

这里的开关控制和电流检测电路,简单说就是:

  • 在没接充电器时,开关是控制电源
  • 接上充电器时,开关是控制是否充电

这部分电路的作用是——将电源先升压为5V,再稳压为3.3V,供给单片机传感器使用。


(5)下载部分

自动下载电路使用了CH342F该芯片,有两个端口,可以使用一个USB同时下载两个单片机。考虑到空间比较紧凑,所以采用DMMT3904来代替两个NPN的三极管


(6)其他电路说明

  • imu数据传感器:MPU6050
  • 电机驱动:DRV8833,带两个N20电机
  • 激光雷达:LD14,主要是便宜,淘宝货咸鱼买拆机LD14雷达25-60元不等(新的要250左右),后续可能会尝试兼容x2
  • 5V电源接口预留给摄像头板


二、软件说明

如何通过软件设计,实现二维地图搭建+规划路径的功能?

(1)编译环境与工具

esp32使用idf4.4编译环境

使用espressif-ide编辑代码

ROS系统使用noetic版本,还是使用ROS1。

这个结构并非是我首先使用,鱼香ROS等大佬早就在使用了。


(2)只会ROS1皮毛,怎么实现二维地图搭建?

比较成熟的方案是在ESP32上运行ROS2的库,这样就可以在ESP32上直接发布话题。

可我只会一点ROS1的皮毛,再去学习ROS2还是比较困难的,所以我就采用了TCP转接串口的方式去兼容原有的包,这样就只用简易的操作一下就可以完成功能了:

定位算法使用robot_pose_ekf,只使用里程计和激光雷达去进行定位。

建图算法采用karto建图算法,参数默认。

导航使用Navigation导航架构,简单理解一下:

这个框架amcl自适应蒙特卡洛定位功能包 提供定位

map-server将建图的地图数据发布出来,然后根据rviz发布的目标定位,进行路径规划,输出路径和底盘移动数据,控制小车到达目标点。

底盘与上位机使用socat来进行TCP/UDP到串口的转接

雷达的通信链路 :雷达转发采用UDP发送到ROS上位机,再由socat创建虚拟串口进行UDP与串口的转接。

建图效果

运动控制板通信采用TCP与ROS上位机连接,再由socat创建虚拟串口进行TCP与串口的转接。

手机APP与底盘驱动的esp32做UDP通信。

在手机上的效果:


三、想法的诞生(成本说明)

我是如何接触到ROS的呢?

2021年,B站大佬稚晖君制作了一台自行车,我看到他使用了ROS系统,能进行二维地图创建与路径规划。

还有浙江大学Fast-Lab的飞行器,也使用了ROS机器人系统,进行各种智能化的操作。

于是命运的齿轮就此转动。

我原本以为ROS系统是非常复杂难以理解的,没想到稍作学习后发现,ROS系统相当于是难度高了一些的"乐高积木",会有大佬将代码封装成各种“功能包”。

就像是Arduino的“库”,我不需要去写导航算法或者建图算法,只要去官网下载对应版本的代码包,然后修改里面的部分参数,然后将这些包连接起来,就可以完成建图与导航等,实现各种看起来高大上的操作。

实际操作和理论还是有点差别的。

为了实践,我想购买一台成品小车,学习一下ROS,却发现价格实在太贵了……如果要完成基本的建图功能价格要上千元。

当然最后我还是花了2400多买了一台,学习了1个月。结果……

完成基础的学习后,发现小车基本用不上了摆在一边吃灰[衰]。恰好这时候看到“鱼香ROS”这位大佬做了一个可以远程运行ROS系统的小车。当然,比我这大了一些,价格也要600-700。

于是,我又行了!

我就想着,我是否能将我这1个月的学习复现?

我是否也能制作一台低成本并且相对小巧的智能小车?

抱着这个想法就开始了这个项目。

最终,项目尺寸为一个巴掌大,成本控制在260元左右

【正文完】

关注我,看一手优质开源项目