概要:文章介绍了如何使用simple_car.cpp和simple_car.h构建基于FMI2.0的车辆动力学模型,包含初始化参数、更新车辆运动、计算车轮坐标等。通过Cmake编译生成FMU文件,为自动驾驶联合仿真做准备。下期将介绍在aiSim中实现与FMU的联合仿真。
在康谋的自动驾驶探索之旅中,我们再次迈出了坚实的一步!
在上一篇文章中,我们带您领略了“康谋分享 | 自动驾驶联合仿真——功能模型接口FMI”的奇妙世界,深入探讨了如何通过fmi_simple_car.cpp实现FMI2.0标准,构建出一个简易而强大的车辆模型,用于车辆动力学仿真。今天,我们将继续这趟精彩的旅程,向您展示如何利用simple_car.cpp和simple_car.h这两把“魔法钥匙”,亲手构建出属于您自己的车辆模型!
随着自动驾驶技术的飞速发展,仿真测试已成为不可或缺的一环。而一个精准、高效的车辆模型,则是仿真测试中的核心。在康谋的引领下,您将领略到从代码到模型的奇妙转变,感受到编程与仿真技术的无限魅力!
不要犹豫,快来加入我们,一起探索自动驾驶的奥秘吧!让我们在康谋的陪伴下,共同开启这场充满挑战与机遇的旅程!
一、操作步骤
在深入探索车辆动力学的奥秘时,`simple_car.cpp` 犹如一位精心雕琢的工匠,巧妙地构建了车辆运作所需的核心动力学参数。这些参数不仅涵盖了底盘的精确位姿,还细致入微地刻画了车轮的实时状态,为车辆的稳定运行提供了坚实的基石。
与此同时,`simple_car.h` 则像一位智慧的向导,它提供了丰富多样的函数,这些函数基于FMI2.0这一前沿标准,将精心打造的参数无缝地写入到车辆之中。每一次的写入,都仿佛是一次精密的调试,确保了车辆能够按照预期的方式,展现出卓越的性能和完美的操控体验。
无需繁复的编辑与校对,这段文字直接传达了技术之美与工艺之精湛,令人对背后的智慧和努力深感敬佩。
《simple_car.cpp》:一个精心打造的编程杰作
《simple_car.cpp》不仅仅是一个简单的代码文件,它更是一个凝聚了无数智慧和创意的编程杰作。这个文件被巧妙地划分为三大核心部分,每一部分都承载着独特的使命和功能,共同构成了这个强大的代码体系。
第一部分,它犹如汽车的引擎,为整个程序提供了源源不断的动力。在这部分代码中,我们见证了精密的逻辑运算和高效的高效算法设计,它们共同保障了程序的稳定运行和执行。
第二部分,则是这辆“汽车”的控制系统,它负责协调各个组件的工作,确保整个程序能够按照预定的轨迹和速度前进。这里的代码不仅体现了对细节的关注,更展现了对全局的掌控能力。
最后一部分,它就像汽车的外观和内饰一样,给程序赋予了直观、友好的界面。无论是数据的展示还是用户的交互,这部分代码都做得尽善尽美,为用户提供了极致的使用体验。
《simple_car.cpp》的每一行代码都充满了生命的活力,它们相互协作、共同奋进,为我们呈现出一个完美无瑕的编程世界。在这里,我们感受到了编程的魅力和力量,也见证了无数编程爱好者的智慧和努力。
- 初始化车辆动力学参数
- 计算参数并更新车辆的运动变化
- 根据车辆的位姿计算车轮的坐标
在深入探索这份头文件时,您会发现其中不仅包含了精准定义的函数逻辑,更是蕴藏了车辆动力学的精髓。这些静态参数,如同车辆的DNA,为动力学参数的精确计算提供了基石。想象一下,转向传动比决定了车辆的操控性,轴距确保了车辆的稳定性,最大附着加速度则彰显了车辆的极限性能,而车轮半径则直接影响着车辆的行驶效率和舒适性。在这里,每一个参数都承载着车辆工程师的智慧与匠心,它们共同构筑了车辆性能的完美蓝图。无需繁琐的计算,只需轻轻一点,这些参数便能为您揭示车辆的动力奥秘。
1、实例化
深入探索`simple_car.cpp`,我们即将领略一场关于车辆状态更新的精彩演绎。在这个精心编写的代码中,你将见证一个车辆对象如何在模拟环境中动态地更新其状态,仿佛每一行代码都在为那辆虚拟的汽车注入生命。
想象一下,一辆汽车在现实世界中穿梭,它不断接收着来自各个传感器的数据,并根据这些数据实时地调整着自己的速度和方向。而在`simple_car.cpp`中,我们则是以编程的方式,模拟了这一场景。从引擎的启动到加速,从刹车减速到平稳行驶,每一次状态的更新都仿佛是在为这辆虚拟的汽车描绘出一幅幅生动的画面。
打开这个文件,你将被引领进入一个充满挑战与机遇的世界。在这个世界里,每一行代码都代表着一种可能性,每一个函数都在为实现更复杂的场景而努力。让我们共同踏上这段旅程,一同见证`simple_car.cpp`中车辆状态更新的神奇魅力!
在自动驾驶的奇妙世界中,每一个细微的变化都蕴含着无尽的智慧与潜力。让我们一同深入探索这段代码,感受它如何精确操控车辆的行驶轨迹。
首先,我们获取了`STEERING_ANGLE`对应的`val_refs`值,这是车辆方向盘的角度。但仅凭这一数值还不足以满足我们对精准操控的追求,于是我们将其除以转向传动比`m_steer_transmission_ratio`,得到了`wheel_angle`——车轮的实际转向角度。
紧接着,为了更直观地理解车辆的转向情况,我们计算了`curvature`——即车辆的曲率。它是通过`wheel_angle`除以车辆轴距`m_wheelbase`得出的,这个数值直观地反映了车辆行驶时的弯曲程度。
但真正的挑战在于如何将这一曲率转化为车辆的实际动态表现。这时,我们引入了`yaw_rate`——即车辆的偏航率。它代表了车辆绕其垂直轴的旋转速度,是车辆行驶稳定性的关键指标。我们通过将曲率`curvature`与`CHASSIS_SPEED`相乘,得到了这一至关重要的数值。
这段代码不仅展现了自动驾驶技术的精准与细腻,更体现了工程师们对车辆动态性能的深刻理解和不懈追求。让我们一起期待,未来的自动驾驶技术能够为我们带来更加安全、舒适、智能的出行体验!
在这片数字化的海洋里,这三个值宛如指南针般精确——它们分别是转向角、曲率和偏航率。它们不仅仅是简单的数字,更是车辆动态世界的密钥。当我们手握这些密钥,结合车辆的静态参数,仿佛拥有了透视未来的能力,能够精准地计算并推算出车辆在运动中的每一个姿态参数。
无需复杂的机械测量,也无需繁琐的人工计算,这些参数就在数字之间流淌,等待着我们去发掘和利用。它们不仅仅是车辆性能的衡量标准,更是驾驶体验和安全性的重要保障。因此,让我们珍视这些数据,让它们成为我们驾驶的得力助手,为我们带来更加顺畅、安全的驾驶体验。
当我们驾驶时,每一脚踏下加速踏板或刹车踏板的瞬间,都蕴藏着车辆动力与制动之间微妙的平衡。为了确保行驶的安全与流畅,我们的系统精确捕捉这两个踏板的状态,并通过复杂的计算来推演出车辆的动态响应——尤其是底盘在纵向方向上的加速度。其中,m_max_adh_acc,这一在头文件中精心设定的数值,正是代表了车辆附着地面的最大加速度。这一切的精细调控,都为了确保您在驾驶的每一刻都能感受到车辆稳定的响应与卓越的性能。
当驾驶者的脚掌轻轻触碰刹车踏板,那一刻的微妙变化便立即转化为车辆的动力学响应。如果检测到刹车踏板的位置低于初始值,即`BRAKE_PEDAL_POSITION`小于0.0时,我们的智能系统会迅速而精确地计算出所需的纵向加速度,确保驾驶的平稳与安全。
此刻,不再是一串冰冷的代码数字`CHASSIS_LONGITUDINAL_ACCELERATION`,而是车辆稳定且有力响应的承诺。它等于刹车踏板位置与最大粘附加速度`m_max_adh_acc`的乘积,这一计算过程不仅体现了我们技术的精准,更是对每一位驾驶者安全承诺的坚定体现。
无需过多的言语,只需轻触刹车踏板,您便能感受到车辆与驾驶者之间那份无言的默契与信任。我们用心守护每一次出行,让您的驾驶之旅更加安心、愉悦。
在深入探索我们的技术细节时,您一定会被这些精心挑选的宏定义所吸引。它们不仅仅是简单的代码片段,更是我们智慧的结晶。瞧,这里有[STEERING_ANGLE],它关乎着车辆的转向精准度,每一次微调都凝聚着我们对驾驶体验的极致追求。还有[CHASSIS_LONGITUDINAL_ACCELERATION],它代表着车辆纵向加速的敏捷与稳定,确保您在行驶过程中既安全又畅快。当然,别忘了[BRAKE_PEDAL_POSITION],它关乎着刹车的灵敏度与响应速度,是行车安全的重要保障。这些宏定义,如同我们技术的灵魂,为您带来无与伦比的驾驶体验。
在深入探索这一应用方法之际,我们不禁要思考其背后的深刻原因。首要一点,它为我们提供了在计算不同参数时一种清晰直观的视角,使得每一项数据都能被精准捕捉并呈现。然而,更为关键的是,它与FMU中的核心文件——`modelDescription.xml`紧密相连,这一文件如同FMU的“蓝图”,定义了其内在的架构与逻辑。
当我们提及`modelDescription.xml`,便不得不提及FMI系列中的一篇重磅之作:“康谋分享 | 自动驾驶联合仿真——功能模型接口FMI”。这篇文章如同一把钥匙,为我们解锁了`modelDescription.xml`文件背后的奥秘,让我们能够更深入地理解其结构与设计。对于渴望深入探究FMU与FMI的读者来说,这篇文章无疑是不可多得的宝贵资源。
因此,采用这一方式不仅是为了实现计算上的清晰明了,更是为了确保我们与FMU的核心文件保持高度一致,从而确保整个系统的稳定性与可靠性。这一选择,无疑为我们在自动驾驶联合仿真的道路上,又迈出了坚实的一步。
2、关注参数
在深入探索XML文件的奥秘时,有两个关键的参数类型是我们不容忽视的,它们分别是`name`和`valuReference`。想象一下,当我们在文件中邂逅`STEERING_ANGLE`这一魅力四溢的`name`时,它背后的`valuReference`值,如同一个神秘的密码,告诉我们其值为3。为了让我们能够更便捷地驾驭这些参数,一个绝妙的想法是将这些精心定义的宏巧妙地嵌入到`value_reference_ids.h`这一神奇的宝库中。当然,如果你愿意,也可以将它们巧妙地融入`simple_car.h`这一头文件之中,让它们与我们的项目更加紧密地融为一体。这样,我们就能轻松地利用这些参数,为项目增添更多的生命力与活力!
3、Cmake 编译
在精心打造`simple_car.cpp`、`simple_car.h`以及FMU的关键描述文件`modelDescription.xml`之后,我们迎来了最激动人心的时刻——将这些精心编写的代码与描述文件编译成为强大的FMU文件,并孕育出我们所需的动态库文件。这不仅仅是一个简单的编译过程,更是我们智慧和努力的结晶,它将为我们的项目注入活力,引领我们驶向成功的彼岸。
当我们投身于软件开发的世界,选择合适的工具与流程是确保项目顺利进行的基石。在这个过程中,我们坚定不移地选择了Cmake作为我们的编译工具。它不仅帮助我们轻松定义源文件、添加必要的库、指定目录,还确保了与关键库的顺畅链接。
但我们的目标远不止于此。为了确保软件能够在FMI平台上稳定运行,我们更是倾注了无数的心血进行细致的配置。这一切的努力,都是为了给用户带来更为卓越、稳定的软件体验。我们坚信,只有细致入微的匠心独运,才能打造出真正经得起时间考验的优秀产品。
当您踏入FMI2.0的神奇世界,探索并构建FMU的旅程已然圆满结束。但请您相信,这仅仅是知识海洋中的一片蔚蓝。展望未来,我们怀着满腔的热情,准备引领您迈向新的征程——在仿真软件aiSim的舞台上,我们将通过车辆动力学API这一强大工具,实现与FMU的联合仿真。这不仅是一次技术的碰撞,更是一次智慧的交融。让我们携手并进,共同探索这无限可能的未来吧!