自动驾驶仿真:python和carsim联合仿真案例

文章目录


前言

carsim内部有许多相关联合仿真的demo,simulink、labview等等都有涉及,这里简单介绍下python和carsim联合仿真的方法,虽然carsim官方有个Steer_Control.py相关的案例,但是感觉比较冗余,这里抽出重点部分和大家交流探讨下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Carsim官方案例

在carsim项目文件夹路径下,例:C:\Program Files (x86)\CarSim2022.1_Data\Extensions\Custom_Py,里面有几个案例可以参考下。

二、Carsim配置

1、车辆模型

1)这里的车辆模型随便选一个就行了

2、procedure配置

1)开环的节气门开度控制-油门

2)开环的制动主缸压力控制-刹车

3)开环的方向盘角度控制

4)运行条件选择Run forver

3、Run Control配置

1)选择运行模型为:Self-Contained Solvers

2)选择类型为C Wrapper,64-bit

3)按照默认选择外部的解释器

4)配置输入分别为:节气门开度,制动主缸压力,方向盘角度

5)配置输出

三、python编写

1)第一步先找到vs_solver.py,用于调用simfile获取相关carsim dll的引用。vs_solver.py路径在C:\Program Files (x86)\CarSim2022.1_Data\Extensions\Custom_Py,我们在下面代码中会引用vs_solver.py。

2)代码部分都很简单,一个是import vs_solver,另外一个比较重要的是simfile的路径需要填写,一般在你创建项目目录下如:C:\Program Files (x86)\CarSim2022.1_Data\simfile.sim,这个一定要根据你项目路径来填写。

python 复制代码
import os
import keyboard
import ctypes
import vs_solver

class carsim_simulation():
    def __init__(self):
        self.simfile_path = r'C:\Program Files (x86)\CarSim2022.1_Data\simfile.sim'
        self.vs = vs_solver.vs_solver()
        self.vs_dll_exist_flag = self.vs_dll_is_exist()
        self.configuration = self.vs.read_configuration(self.simfile_path)

    def vs_dll_is_exist(self):
        dll_path = self.vs.get_dll_path(self.simfile_path)
        if dll_path is not None and os.path.exists(dll_path):
            vs_dll = ctypes.cdll.LoadLibrary(dll_path)
            if self.vs.get_api(vs_dll):
                exist_flag = True
            else:
                exist_flag = False
                print(f'can not get dll api, please check the dll {dll_path}')
        else:
            exist_flag = False
            print(f'please check dll_path or simfile_path existence or not')
        return exist_flag

    def get_export_array(self):
        return self.vs.copy_export_vars(carsim_sim.configuration.get('n_export'))

    def get_time_step(self):
        return self.configuration.get('t_step')

    def stop(self, t_current):
        self.vs.terminate_run(t_current)

if __name__ == '__main__':
    carsim_sim = carsim_simulation()
    t_current = carsim_sim.get_time_step()
    export_array = carsim_sim.get_export_array()
    status = 0
    while status == 0:
        #更新当前时间
        t_current = t_current + carsim_sim.get_time_step()
        import_array = [0.1, 0, 0]
3        status, export_array = carsim_sim.vs.integrate_io(t_current, import_array, export_array)
        print(f'current_x: {export_array[0]}, current_y: {export_array[6]}')
        if keyboard.is_pressed('q'):
            carsim_sim.stop(t_current)
            break

四、运行carsim

1)运行carsim等待几秒会出现黑窗,然后关掉黑窗即可。

五、运行python

1)运行python脚本之后结果哗啦啦就出来了,就很简单。

总结

1、这里关于solvers的细节其实都没说,因为里面确实也没什么内容好讲的,本质就是调用carsim.dll,如果你需要更多的函数解析其实可以看vs_api.h,路径在C:\Program Files (x86)\CarSim2022.1_Data\Extensions\Custom_C\common,具体内容如下图所示。

相关推荐
only-qi3 分钟前
大模型应用如何保证实时性和多轮对话一致性
人工智能·llm
数据智研7 分钟前
【数据分享】中国民政统计年鉴(1949-2025)
大数据·人工智能·信息可视化·数据分析
武子康10 分钟前
GPT-Live 可能怎样实现:从公开行为到架构约束的证据梯度
人工智能
问商十三载11 分钟前
大模型采信内容看的不是字数?2026语义信噪比模型深度解析
人工智能
能年玲奈喝榴莲牛奶24 分钟前
使用AI编写-资产和漏洞管理系统
人工智能·python·网络安全·安全服务
__Wedream__28 分钟前
ICPR 2022 多教师知识蒸馏技术应用于图像超分辨率重建——MTKDSR
图像处理·人工智能·深度学习·超分辨率重建·图像复原和增强
元岳数字人小元31 分钟前
数字人开源技术优势解析,助力智能交互普及落地
运维·人工智能·开源·人机交互·交互
一夜白头催人泪39 分钟前
从0到1搭建AI驱动的UI自动化:无代码DOM设计文档
人工智能·ui·自动化
ACP广源盛139246256731 小时前
Ling‑3.0‑flash 昇腾 0‑Day 适配落地@ACP#IX9104 在国产高密度算力矩阵中的机遇与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
JXJD20041 小时前
AI 推理服务器高速连接器线束自动化设备定制指南 全场景互连非标整线方案参考
服务器·人工智能·自动化