Hello 大家好,我是摸鱼仔,学生时期专业是车辆工程,做了一些ADAS方面的研究。由于毕业后工作不再从事研发类工作,但是又不想把学生时期学的东西忘掉(主要是对这些东西还是比较感兴趣的),因此平时在摸鱼的时候,喜欢做一些小东西。从今天起就先挖个坑,专门记录一下自己做小东西的过程。

    这次算是第一次的一个分享,最近在做的小东西是和自己专业结合的一个自动驾驶小车(目标),我将从0搭建一个自动驾驶小车。我的自动驾驶小车想实现的功能是给小车一个目标位置,小车可以自主移动到目标位置。这个目标其实是一个很宽泛的目标。在整个项目的实现过程中,我会设置很多具体的功能让自己的小车来实现。

    由于小车涉及机械,电子等多方面的知识,可能有很多知识是我自己不懂的,因此我们的项目是以功能为导向进行的。如果在介绍的过程中有什么不正确的地方,也烦请观众老爷指出。也欢迎各个小伙伴来跟我交流。

    首先这次小车的地盘使用了如图的樱花D5S后驱车架

    选择这个车架主要是基于以下几点的考量:

      • 这个车架是一个阿克曼转向结构的车架(Ackermann steering,如图),这种转向结构与现实生活中的车辆的转向结构相同;
      • 常用的单轨车辆动力学模型的建模中,一般都假设车辆是后轮驱动的,因此我们选择了后驱结构的车架;
      • 车架上有部分预留螺孔比较适合于扩展。

    首先,我们需要先测量我们所需要的车架的部分物理数据。

  • 转向角测量方案设计

    这里,我先分享一下小车转向角的测量方法。由于对小车的转向结构进行建模复现的难度比较大,因此我选择了直接测量转向角。对于转角的测量我首先想到的是使用转角传感器进行测量,常见的转角传感器如图:

    转角传感器其实就是一个转动变阻器(原理图如图),使用电阻两端的电压值的大小表示转角的大小。

    为了使用转角传感器来测量转向角,需要想办法把轮胎转轴的转动与转角传感器的转动联动起来。由于我们选择的车架前轮下球头使用的是一个带有六角扳手口的球头,因此结合下球头的特点与转角传感器的特点,我设计了一个传动杆(如图),将前轮的转动角度传递给转角传感器

    由于两个前轮的转角在转动的过程中是有一定差距的,我们在测量时,对于某个固定的舵机角度,需要分别测量两个轮的转角,再将两个求平均,作为该舵机角度下测量到的前轮转转角值。为了满足两个前轮转角同时测量的要求,这里我设计了如图的转角测量装置。

转向角测量程序设计

    一切准备妥当以后,我们开始进行程序设计,我们程序的概念图如图

    主要由三部分组成:

      • 上位机:负责向下位机发出期望的舵机转角;接收下位机返回的转向角数据;记录实验测量数据。
      • 下位机:接收舵机转交数据,并控制舵机使舵机转到相应的位置;接收转角传感器传回的电信号,并将该信号转化为角度信息并发送给上位机。
      • 执行机构:包含舵机,小车地盘和转向角测量装置。

转向角测量结果及分析

    我们将测量结果导入到Matlab中,对测量结果进行拟合,拟合曲线如图:

    从测量结果中我们可以发现,

      • 左侧车轮和右侧车轮的转向角在一定的舵机角度下是存在差异的,这与真实的车辆的情况相同;
      • 同一个舵机角度的情况下,前轮从左向右转动和从右向左转动所得到的转向角大小有一定的差异,这部分差异主要是由于小车转向机构存在的虚位导致的
      • 最终的转向角曲线是取了从左向右转和从右向左转的角度中间值得到的。

结语

    至此,我们已经测量得到了舵机转角和小车转向角的数学关系。我们提出的测量方法,虽然啊精度有待提升,但是对于1:10比例的小车已经足够了,可以为后面的下位机控制程序的设计提供一定的支持。

    如果各位大佬有更好的转向角测量方法,也欢迎一起交流呀!