迷你智能车Liguanxi-smart-car【星火计划】
描述
项目说明
想法的诞生
2021年,B站大佬“稚晖君”制作了一台自行车,我看到他使用了ROS系统,能进行二维地图创建,路径规划,图像识别。
还有浙江大学Fast-Lab的飞行器,也使用了ROS机器人系统,进行各种智能化的操作。
我原本以为ROS系统是非常复杂难以理解的,没想到稍作学习后发现,ROS系统相当于是难度高了一些的"乐高积木",会有大佬将代码封装成各种“功能包”就像是Arduino的“库”,我不需要去写导航算法或者建图算法只要去官网下载对应版本的代码包然后修改里面的部分参数,然后将这些包连接起来就可以完成建图与导航等各种看起来高大上的操作。
当然实际操作和理论还是有点差别的。
为了实践,我想购买一台成品小车,学习一下ROS,却发现价格实在太贵了……如果要完成基本的建图功能价格要上千元。当然最后我还是花了2400多买了一台,学习了1个月。
完成基础的学习后,发现小车基本用不上了摆在一边吃灰 ,这学习成本稍微有点高啊。原本以为就这么着了,结果我又发现“鱼香ROS”这位大佬做了一个可以远程运行ROS系统的小车。当然,整体比我这大了一些,价格也要600-700。
于是,我又行了!
我就想着,我是否能将我这1个月的学习复现?我是否也能制作一台低成本并且相对小巧的智能小车?
抱着这个想法就开始了这个项目。最终,项目尺寸为一个巴掌大,成本控制在260元左右,外观精致一些,所以一定要外壳
成品图片
开源协议
GPL3.0
这是GUN的通用公共许可证,只要在工程项目中使用了GPL协议下的产品,那么这个工程项目必须采用GPL协议,也就是说必须开源和免费。
GPL的出发点是代码的开源与免费使用和引用、修改、衍生代码的开源与免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。
GPL最显著的特点是“病毒性传播”和“不允许闭源的商业发布”,我们熟悉的Linux就是使用了GPL许可。
项目相关功能
主要的功能完成情况
1.使用手机APP可以手动控制小车运动(已完成)
2.手机端显示建图结果与视频画面(待定)
3.不使用电脑的情况下凭借自身算力进行简易的避障(待定)
4.使用电脑运行ROS,利用激光雷达进行二维建图使用RVIZ可视化工具显示(已完成)
5.使用电脑运行ROS,利用激光雷达进行多点与单点导航,使用RVIZ可视化工具显示(已完成)
6.可以RRT自主探索建图(未完成)
7.雷达跟踪目标(未完成)
8.利用摄像头进行目标追踪 (待定)
9.可通过USB进行充放电(已完成)
项目属性
本项目为首次公开,为本人原创项目。
底盘代码主体框架使用Liguanxi-UAV飞行器代码修改而来,代码风格与上一个项目相同
其余部分代码参考
百度/CSDN论坛
B站UP主“鱼香ROS”
B站UP主 “机器人工匠阿杰”的教程
《ROS教育机器人实训教程》
项目进度
项目的整体进度,申请项目耗材费用必填!
2024年1月15 - 2024年2月3号 项目立项以及补充ROS以及网络通信等基础知识
2024年2月4号 - 2024年2月8号 使用soliworks建立模型,确认外形以及零件结构
2024年2月9号 - 2024年2月12号 新建虚拟机搭建ROS系统相关编译环境
2024年2月12号 - 2024年2月17号 搭建ESP32代码的基本雏形外设代码以及手机APP遥控(第一版,使用arduino代码编辑器,点灯科技APP)
2024年2月18号 - 2024年2月18号 确定具体元件型号,具体实现方向并建立嘉立创工程
2024年2月18号 - 2024年2月23号 完成第一版PCB电路
2024年2月23号 - 2024年4月1号 工作原因项目暂停开发一段时间
2024年4月1号 - 2024年4月4号 验证通信UDP/TCP通信链路的可行性,使用RVIZ可以观测到雷达数据
2024年4月5号 - 2024年4月7号 推翻第一版PCB与底板代码设计,重新设计第二版
2024年4月8号 - 2024年4月11号 修改模型适配新的底盘辅助轮
2024年4月12号 - 2024年4月20号 工作原因项目暂停开发一段时间
2024年4月20号 - 2024年4月22号 搭建ESP32代码的基本雏形外设代码以及手机APP遥控(第二版,使用ESPressif代码编辑器,自己写安卓APP从源代码开始)
2024年4月22号 - 2024年4月24号 学习Android Studio使用java编写遥控器APP程序
2024年4月24号 - 2024年5月1号 完成第二版PCB,进行PCB与SMT的制作(嘉立创报销1047.48元)SMT价格居多并非器件价格
2024年5月1号 - 2024年5月3号 模型调整,添加天线与修改摄像头
2024年5月4号 - 2024年5月5号 配置功能包进行建图测试成功
2024年5月5号 - 2024年5月12号 工作原因项目暂停开发一段时间
2024年5月13号 - 2024年5月18号 PCB到货测试基本代码,底盘部分进行传感器读取与换算,电路检查
2024年5月18号 - 2024年5月22号 PCB功能异常,天线电路无法使用,补充射频电路知识与高速电路设计规范重新设计第三版PCB并进行打样
2024年5月23号 - 2024年5月25号 在等待新PCB时进行ROS系统与底盘系统的联合调试,解决自动重连,数据发送异常等若干问题
2024年5月26号 - 2024年5月26号 第三版PCB到货,进行焊接调试
2024年5月26号 - 2024年5月28号 进行建图操作,但连接还是不稳定,WiFi信号比较差,初步判断是滤波电路没有配置好,学习相关知识并购入网络矢量分析仪,准备进行调整
2024年5月28号 - 2024年6月1号 建图过程中发现两个辅助轮会导致小车随着雷达的转动而摆动,结构不太合理,后参考大量差速小车修改底盘,改为三轮式即2个主动轮一个辅助轮,下沉电池,精简结构
2024年6月2号 - 2024年6月2号 由于网络矢量分析仪还未到货,先进行简易的计算使用通用搭配信号好了不少,进行一次完整的建图,并保存
2024年6月3号 - 2024年6月3号 完善开源文档
2024年6月4号 - 2024年6月5号 使用矢量网络分析仪配合SmithV4.1调整天线电路参数,最终控制驻波比在±1.3内,修改WiFi信道
2024年6月5号 - 2024年6月6号 优化PCB布线,学习对应的布线规则,尽量符合规范
2024年6月6号 - 2024年6月7号 全部切换TCP通信,修改定位参数,定位效果明显提升
2024年6月8号 - 2024年6月8号 制作BOM表,通信链路示意图,完善部分开源工程。
2024年6月9号 - 2024年6月10号 调试导航功能,不断调整代价地图与小车的参数,组装新的车体,拍摄演示视频
2024年6月11号 - 2024年6月15号 PCB到货焊接验证
2024年6月16号 - 2024年6月17号 优化小车底盘加入运动闭环,以及匿名上位机调试
2024年6月18号 - 2024年6月18号 完善开源文档
预计8月份前完成大部分功能
硬件设计原理
首先声明,本人学识尚浅,旨在制作中学习对应的知识,首次设计比较密集的电路,如有不妥之处,可在评论区指出。
主控芯片部分
一般来说,机器人系统ROS都需要在树莓派等微型电脑上运行,而我想要以最低的成本去完成这个项目,所以我将运行ROS系统电脑从机载转到上位机,通过WiFi与连接小车,这样就可以节省一台微型电脑。
但是!雷达的数据大概1ms发送一次,一块ESP32显然不够用了!所以,我选择使用两个ESP32作为主控。
- 一块专门用来转发雷达数据
- 另一块进行运动控制,读取传感器数据
类似的结构鱼香ROS有制作,不过体型现对比较大,电路集成度较低。
天线部分
esp32天线部分比较讲究,涉及到高速线路
首先是阻抗匹配,根据乐鑫的硬件设计指南,射频部分需做50R阻抗匹配
并且乐鑫还给出了PCB的叠层示意图,这个叠层我还是有点懵,看不懂后面就使用了嘉立创的阻抗计算器,计算这个阻抗对应什么厚度的铜箔与多少宽度的线。
最后选用JLC04161H-7628
4层板,PCB厚度:1.6,走线宽度:32.2mil
器件摆放与走线规划
然后还有器件的摆放与走线,乐鑫的硬件设计指南也给出了示例
使用四层板,顶层摆件,能走顶层的线基本都走顶层
内层1全覆铜,保证一个完整的地平面
内层2走一些信号线
底层走电源,因为底层的铜箔厚度为1oz内层2的铜箔厚度仅为0.5oz,如果在内层2走线相比与底层走线宽度要翻倍
天线参数调试
但是天线处的π形电路参数需要根据实际的设计来调整,所以就使用网络矢量分析仪进行测试调整。
先将芯片取下,将测试线焊接到天线引脚π形滤波电路初始参数串连一个0R电阻
另一端接到矢量网络分析仪,扫描起始频率设置为2.4Ghz,终止频率为2.5Ghz,调整光标到2.412Ghz,因为小车AP模式使用WiFi为信道1对应就是2.412Ghz的频率
调整好后如下图所示,显示出天线在指定频率下的性能,驻波比为1.838,史密斯数值为79.26 + j25.63Ω,驻波为1.0时天线性能最佳
打开 软件
输入测量的史密斯数值79.26 + j25.63Ω,以及对应的频率
确认输入后显示对应的点,与仪器上测量的基本对应,仪器上显示的是简化版的史密斯圆,大圆的中心对应着50Ω阻抗,矢量分析仪省略了左边的小圆
通过右上角工具栏添加串联或并联的电容或电感,让测量的点尽量逼近中心,每个连接方法会有不同的特性
最后计算出需要串联1.5pf的电容,在天线端并联10.6nH的电感即可让天线性能达到最佳
软件计算并非完全准确,还需要实际连接再做轻微调整,先将0Ω电阻替换为1.5PF史密斯数值几乎达到中心,并不需要串联电感,最后经过测试串接2.7PF效果最佳
天线调试就完成了,将天线取下,装上芯片即可。
还有晶振部分也算高速电路了,需要GND包围做屏蔽层,走线也采用了圆弧拐角。
电池设计为不可拆卸,所以添加了一个充电电路,采用TP4056充电芯片,查看手册,根据手册画出电路
充电电流设置为400ma,充电电流根据R21电阻的阻值来调节
电池接口处使用一个开关控制电池是否充电,还有一个电流检测电路用于检测电池放电与充电电压,如果在没接充电器时开关是控制电源的,如果接上充电器开关就是控制是否充电的
通过R14电阻来检测电流, 根据欧姆定律 I=U/R 也就是电流经过电阻,电阻两端会产生压差,这个压差除以R14阻值等于经过电阻的电流,这个电阻两端的压差比较小,所以使用一个运算放大器将电压放大再给单片机检测
电源先升压为5V再稳压为3.3V供给单片机和传感器使用
下载部分使用了CH342F该芯片有两个端口可以使用一个USB同时下载两个单片机,并且考虑到空间比较紧凑所以采用DMMT3904来代替两个NPN的三极管
imu数据的传感器使用MPU6050
电机驱动采用DRV8833带两个N20电机
电压测量电路,测量电池电压,采用电阻分压给ADC端口
激光雷达,使用LD14,主要是便宜,淘宝货咸鱼买拆机LD14雷达25-60元不等(新的要250左右),后续可能会尝试兼容x2
蜂鸣器,打算做没电报警,或者其他一些开机提示音等其他提示音
预留给摄像头板
摄像头的电路图(未完成)
软件说明
编译环境
ESP32使用espressif-IED 2.6.0版本来编辑与编译代码
虚拟机使用VM软件来创建
虚拟机系统使用Ubuntu20.04
ROS系统使用ROS1 Noetic版本
noetic/Installation/Ubuntu - ROS Wiki 网站可以查看安装方法
但是官网安装比较繁琐可以使用鱼香ROS一键安装工具非常的好用(赞美大佬)
输入命令wget http://fishros.com/install -O fishros && . fishros
输入命令后只需点数字一步一步下去就可以安装了
ROS系统使用noetic版本,还是使用ROS1,这个结构并非是我首先使用,鱼香ROS等大佬早就在使用了,比较成熟的方案是在ESP32上运行ROS2的库这样就可以在ESP32上直接发布话题,可我只会一点ROS1的皮毛,再去学习ROS2还是比较困难的,所以我就采用了TCP转接串口的方式去兼容原有的包,这样就只用简易的操作一下就可以完成功能了。
系统安装可以使用 鱼香ROS一键安装工具非常的好用
wget http://fishros.com/install -O fishros && . fishros
定位算法使用robot_pose_ekf,只使用里程计和激光雷达去进行定位
建图算法采用karto建图算法,参数默认
导航使用Navigation导航架构,简单理解为这个框架由amcl自适应蒙特卡洛定位功能包提供定位,map-server将建图的地图数据发布出来,然后根据rviz发布的目标定位进行路径规划输出路径和底盘移动数据控制小车到达目标点
底盘与电脑通过WIFI连接,具体的通信链路如下图所示
雷达的通信链路 ,雷达转发采用TCP发送到ROS上位机,再由socat创建虚拟串口进行TCP与串口的转接,最后串口输入到雷达的功能包内
建图效果
运动控制板通信采用TCP与ROS上位机连接,再由socat创建虚拟串口进行TCP与串口的转接,最后串口输出到底盘的节点内,处理后输出TF和里程计,接收cmd_vel的值发送回底盘控制运动
导航效果
地图
地图一共有3层,第一层原始地图(黑色的)
第二层全局代价地图(内粉色外蓝色但颜色比较浅)
第三层是局部代价地图(内粉色外蓝色但颜色比较深)长宽为1.5m在车身周围
蒙特卡洛定位
红色箭头是蒙特卡洛定位粒子,蒙特卡洛定位的原理是先,放出大量粒子,将每一个粒子看作是一个小车可能存在的位置,然后小车移动是不断进行判断哪个粒子的与当前传感器判断的更符合,然后不断去掉偏差太大的,然后重新放出偏差更小的,最终蒙特卡洛粒子就会聚集在小车的真实位置附近了。
路径规划
全局规划路径根据设置的坐标点生成一条路径,根据这个路径可以避开建图时已知的障碍(绿色)
局部规划路径,在全局规划路径上遇到障碍就规划一条局部的路径绕过障碍,如果无法避开再重新进行全局路径规划(红色)
局部规划使用DWA
手机APP与底盘驱动的esp32做UDP通信
在手机上的效果(未完全开发,仅仅只完成可行性测试)
实物展示
验证机,使用开发板直接飞线搭建,用来验证基本的代码
第一版模型,内贴天线,无摄像头
第二版模型,新增外置天线,新增带镜头的摄像头
第三版模型,修改摄像头为贴片式,轮子改为3点式,可以适应大多数地面,电池沉入底盘,PCB空间增大
最后就是成本,统计出了BOM表,预算有一些超标了总价格达到了280元,后面一个版本会尽量减少一些不同规格的阻容,将价格压回260元
以上价格是在制作者没有任何电阻电容储备的情况下,需要全部重新购买一遍阻容,制作完成会剩下大量的电阻电容,如果制作者有电阻电容储备制作成品减低至200元
设计注意事项
电路较为密集,需要制作者有一定的焊接功底和判断电路故障的能力
其他
如果你觉得这个项目还不错的话,可以点赞+收藏支持一下。
平时工作比较忙,不出意外的话,项目会在8月份完成剩下的功能。
有一些资料远远大于50M所以不能放到附件,存到了QQ群 263879824 ,有需要可加群自取,最新版本的代码也会在群文件中实时更新
演示视频:演示视频上传附件即可,附件最大只能长传50M的文件,大于50M的文件可放置在其他网盘或视频网站上,只需把地址链接放入这里即可
工程附件:参加活动的作品必须把工程相关的程序附件上传至开源平台或个人的代码存储云端,附件最大支持50M上传(请勿在立创工作区上传,有限制)