677|0

501

帖子

4

TA的资源

纯净的硅(高级)

楼主
 

【玄铁杯第三届RISC-V应用创新大赛】基于LicheePi 4A的3D自动驾驶模拟平台 [复制链接]

  本帖最后由 qinyunti 于 2023-12-2 23:40 编辑

视频


 

 

2023年“玄铁杯”第三届RISC-V应用创新大赛 - LicheePi 4A 专场

基于LicheePi 4A的3D自动驾驶模拟平台

一. 前言

二. torcs介绍

2.1Torcs介绍

2.2先睹为快

三.开发架构

四.开发环境搭建

4.1参考

4.2更新源安装必要工具

4.3安装Python3和PIP3

4.4安装numpy

4.5安装matplotlib

4.6安装xautomation

4.7安装OpenAI-Gym

4.8安装vtorcs-RL-color

五.自动驾驶模拟初体验

六. 基本开发介绍

6.1 程序架构

6.2 传感器和执行器

6.1. 运行过程

6.2 处理视觉输入

6.3 gym_torcs使用样例

6.4 DDPG

七.优化

7.1 编译问题

7.2渲染硬件加速

7.2 代码优化

7.3 内存泄露

八.总结

 

2023年“玄铁杯”第三届RISC-V应用创新大赛 - LicheePi 4A 专场

基于LicheePi 4A的3D自动驾驶模拟平台

  • 前言

Lichee Pi 4A 是基于Lichee Module 4A 核心板的 Linux 开发板,以 TH1520 为主控核心,搭载 4TOPS@Int8 AI 算力的 NPU,支持双屏 4K 显示输出,支持 4K 摄像头接入,双千兆 POE 网口和多个 USB 接口,音频由 C906 核心处理,性能强劲,接口丰富。是目前高性能RISC-V开发板的突出者。

本文分享《基于LicheePi 4A的3D自动驾驶模拟平台》,充分展现LicheePi 4A强劲的性能和完善的开发环境和能力。

3D自动驾驶模拟平台基于开源项目torcs实现。本文从torcs介绍体验,板上构建torcs开发环境,自动驾驶测试体验,torcs的基本开发,优化等,分享整个过程, 体现LicheePi 4A本身运行的优异性能和作为开发主机的非凡能力等方方面面。

 

开发板官方链接

https://wiki.sipeed.com/hardware/zh/lichee/th1520/lp4a.html

 

开发板介绍和基本的开发环境搭建操作等参考本人在论坛发布的其他帖子

【玄铁杯第三届RISC-V应用创新大赛】开箱视频 - 平头哥RISC-V活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

【玄铁杯第三届RISC-V应用创新大赛】Python开发体验-实现串口调试助手与串口测试 - 平头哥RISC-V活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

【玄铁杯第三届RISC-V应用创新大赛】使用VNC远程桌面 - 平头哥RISC-V活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

【玄铁杯第三届RISC-V应用创新大赛】板上开发环境搭建与sqlite3构建与性能测试 - 平头哥RISC-V活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

【玄铁杯第三届RISC-V应用创新大赛】命令行WIFI配置与升级系统SSH登录 - 平头哥RISC-V活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

【玄铁杯第三届RISC-V应用创新大赛】烧录系统 - 平头哥RISC-V活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

【玄铁杯第三届RISC-V应用创新大赛】开箱与原理图和PCB概览及PCB问题分享 - 平头哥RISC-V活动专区 - 电子工程世界-论坛 (eeworld.com.cn)

 

  • 下载附件  保存到相册

    2023-12-2 22:42 上传

     

    TORCS即The Open Racing Car Simulator是一个高度可移植的支持多平台的赛车模拟器。

    可以作为普通赛车游戏,也可以作为AI赛车游戏和研究平台。可运行在Linux (x86、AMD64和PPC)、FreeBSD、OpenSolaris和Windows上。

    具有以下特征:

    1. 适合游戏玩家,研究人员,工程师和教师使用的3D赛车模拟平台
    2. 多赛道,赛手和汽车可用
    3. 复杂物理模型
    4. 支持所有输入设备(方向盘,操纵杆,游戏垫,…)
    5. 大量的社区内容/附加软件可用
    6. 易于修改(许多基于TORCS的科学/工业研究项目即是证明)
    7. 易于添加/创建内容
    8. 模块化架构
    9. 优异的性能和稳定性

     

    项目见

    https://sourceforge.net/projects/torcs/

    链接已隐藏,如需查看请登录或者注册

    作者个人网站:http://www.berniw.org/

     

    众多项目也是基于torcs开发的,比如

    1. CyberTorcs 是由上海交通大学智能车实验室基于赛车游戏Torcs (The Open Racing Car Simulator) 开发的仿真平台,主要用于辅助控制理论学科的教学和研究工作。

     

    创建赛车赛道模型使用的是accc工具,参考

    https://www3.cs.stonybrook.edu/~stripe/

    赛道可以使用trackeditor编辑。

     

    Torcs在linux下构建

    -依赖 plib 1.8.5(只支持该版本), FreeGLUT /GLUT, 在AMD64下运行64位Linux版本时编译plib 使用 -fPIC。

    - git clone

    链接已隐藏,如需查看请登录或者注册

    - cd torcs

    - ./configure (--help可以查看支持的选项, 比如--enable-debug 和--disable-xrandr).

    - make

    - make install

    - make datainstall

     

    torcs运行,支持命令行参数如下

    * -l 列出动态链接库。

    * -d gdb下运行在异常退出时打印栈回溯信息, 在--enable-debug编译时才有意义。

    * -g Valgrind下运行 (需要使能debug编译),用于检查内存泄漏。

    * -e 显示要在GDB下运行时发出的命令

    * -s 禁用多纹理,这对旧的显卡很重要

    * -m 使用X鼠标光标,在比赛期间不隐藏

    * -r pathtoraceconfigfile, 仅从命令行运行,用于测试和AI训练

    * -k (keep) 抑制调用dlclose以保持模块加载(对于Valgrind运行,以避免调用堆栈中的"??"

     

    可以参考文件https://arxiv.org/pdf/1304.1672.pdf

    下载附件  保存到相册

    2023-12-2 22:42 上传

     

    进入菜单,options下可以进行一些配置

     

     

    比如opengl配置

     

     

     

     

    声音配置

     

    屏幕配置

     

    图形配置

     

    模式如下

    Practice模式可以进入演示模式

     

    比如Quick Race->New Race模式可以快速进行体验, 按键的方向键进行操作控制。

     

    按键F1可查看快捷键帮助。

    .开发架构

    前面体验了torcs,但是直接安装的torcs只能作为游戏体验,我们搭建基于torcs的3D自动驾驶模拟平台还需要一些额外的准备工作。好在已经有了类似的开源项目,我们即基于gym_torcs来进行。

    Gym-TORCS是基于TORCS的强化学习(RL)环境,用于RL实验的TORCS的python包装,具有与OpenAI-gym环境兼容的简单接口(类似但不完全兼容)。目前的实现只适用于练习模式下的单轨比赛。如果您想使用多赛道或其他赛车模式(快速比赛等),您可能需要修改环境,“autostart.sh”或使用TORCS的GUI的比赛配置文件。

    基于 vtorcs(

    链接已隐藏,如需查看请登录或者注册
    和 torcs 的python客户端(http://xed.ch/project/snakeoil/index.html)开发。依赖python,numpy,Xautomation,OpenAI-Gym。

    开发框架如下

     

    Python:绑定Python开发

    Xautomation:xautomation是一组命令行程序,用于控制X并执行“视觉抓取”以查找屏幕上的内容。控制接口允许鼠标移动,点击,按钮上/下,键上/下等,并且使用XTest扩展,这样就不会有xse在应用程序忽略发送事件时出现的恼人问题。。visgrep程序查找图像内部的图像并报告坐标,允许程序查找按钮等,在屏幕上点击。参见https://linux.die.net/man/7/xautomation

    OpenAI-Gym:一个开源Python库,通过提供一个标准API来在学习算法和环境之间进行通信,以及一组符合该API的标准环境,用于开发和比较强化学习算法。自从发布以来,Gym的API已经成为这个领域的标准。

    参见

    链接已隐藏,如需查看请登录或者注册

    Numpy: 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

    Ligxxx-dev各种开发库:依赖于上图中各种库。

    vtorcs-RL-color:基于vtorcs修改

    链接已隐藏,如需查看请登录或者注册
    ,用于处理色视觉(即RGB)的矢量的扩展。

    链接已隐藏,如需查看请登录或者注册

    cd gym/

    python3 setup.py install

     

    链接已隐藏,如需查看请登录或者注册

    cd gym_torcs/

    cd vtorcs-RL-color/

    sudo apt-get install libglib2.0-dev  

    sudo apt-get install libgl1-mesa-dev

    sudo apt-get install libglu1-mesa-dev  

    sudo apt-get install libalut-dev

    sudo apt-get install libopenal-dev

    sudo apt-get install libxrender-dev

     

    sudo apt-get install freeglut3-dev 

    提示libxext-dev : Depends: libxext6 (= 2:1.3.4-1) but 2:1.3.4-1+b1 is to be installed

    则sudo apt-get install --reinstall libxext6=2:1.3.4-1

    再重新安装freeglut3-dev

     

    sudo apt-get install libplib-dev

    提示

     libplib-dev : Depends: libplib1 (= 1.8.5-14) but 1.8.5-14+b1 is to be installed

    E: Unable to correct problems, you have held broken packages.

    则sudo apt-get install --reinstall libplib1=1.8.5-14

    再重新安装 libplib-dev

     

    sudo apt-get install libxi-dev

    提示 libxi-dev : Depends: libxi6 (= 2:1.8-1) but 2:1.8-1+b1 is to be installed

    则sudo apt-get install --reinstall libxi6=2:1.8-1

    再重新安装libxi-dev

     

    sudo apt-get install libxmu-dev

     

    sudo apt-get install libxrandr-dev

    提示 libxrandr-dev : Depends: libxrandr2 (= 2:1.5.2-2) but 2:1.5.2-2+b1 is to be installed

    则sudo apt-get install --reinstall libxrandr2=2:1.5.2-2

    再重重新安装libxrandr-dev

     

    sudo apt-get install libpng-dev

     

    ./configure

     

    提示configure: error: Can't find libGL.

    查找find /usr -name libGL*是有/usr/lib/xxx-linux-gnu/libGL.so.1的

     sudo cp /usr/lib/xxx-linux-gnu/libGL.so.1 /usr/lib/xxx-linux-gnu/libGL.so

     

    提示onfigure: error: Can't find libXxf86vm.

    搜索find /usr -name libXxf86vm*

    是有的

    root@lpi4a:~/Desktop/gym_torcs/vtorcs-RL-color# find /usr -name libXxf86vm*

    /usr/lib/riscv64-linux-gnu/libXxf86vm.so.1.0.0

    /usr/lib/riscv64-linux-gnu/libXxf86vm.so.1

    复制一份改个名字

    sudo cp /usr/lib/riscv64-linux-gnu/libXxf86vm.so.1 /usr/lib/riscv64-linux-gnu/libXxf86vm.so

     

    make

     

    提示

     error: 'isnan' was not declared in this scope; did you mean 'std::isnan'?

    nano ./src/drivers/olethros/geometry.cpp把 isnan 改为 std::isnan

     

    提示

    fg_gm.cpp:64:10: fatal error: X11/extensions/xf86vmode.h: No such file or directory

    sudo apt install apt-file

    apt-file update

    apt-file search xf86vmode.h

    找到如下libxxf86vm-dev: /usr/include/X11/extensions/xf86vmode.h

    于是安装sudo apt-get install libxxf86vm-dev

    但是又提示

    libxxf86vm-dev : Depends: libxxf86vm1 (= 1:1.1.4-1) but 1:1.1.4-1+b2 is to be installed

    则sudo apt-get install --reinstall libxxf86vm1=1:1.1.4-1

    再安装libxxf86vm-dev

     

    sudo make install

    sudo make datainstall

     

    提示

    /lib/libshl_th1520.so.2 is not a symbolic link

    ln -s /lib/libshl_th1520.so /lib/libshl_th1520.so.2

     

    运行torcs,支持的参数

    -l

    -d

    -e

    -s

    -m

    以上和原版torcs一样

    -vision 使用vision 输入

     

    五.自动驾驶模拟初体验

    前面完成了开发环境的搭建,现在就来开始体验一番自动驾驶模拟的乐趣。

    sudo torcs

    启动界面如下

     

    稍等进入菜单

     

    Race->Practice->New Race

     

     

    终端提示Waiting for request on port 3101

     

     

    另外开一个终端

    cd gym_torcs/

    python3 snakeoil3_gym.py

    提示

    Client connected on 3101..............

     

    原来终端提示

    Waiting for request on port 3101

    OpenAL backend info:

      Vendor: OpenAL Community

      Renderer: OpenAL Soft

      Version: 1.1 ALSOFT 1.23.1

      Available sources: 256

      Available buffers: 1024 or more

      Dynamic Sources: requested: 235, created: 235

      #static sources: 21

      #dyn sources   : 235

     

    开始根据脚本自动运行起来了,即进行自动驾驶模拟了。

     

     

    如果是训练测试则可以不开GUI。

     

    • 下载附件  保存到相册

      2023-12-2 22:43 上传

       

      1. 机器人程序作为客户端通过UDP连接到TORCS服务端server-bot(scr server)。

      每个客户端一个服务器机器人;每个服务器bot都在服务器的一个单独端口上侦听。

      1. 每个游戏tic(大约相当于20毫秒的模拟时间),服务器都会向每个bot发送当前的传感器输入,更新比赛状态,并将其发送回客户端。然后等待10ms(实时)来接收机器人的动作。如果没有动作到达,模拟将继续,并使用上次执行的动作。
      2. 机器人代码和服务器之间建立了物理分离,建立了抽象层、传感器和执行器模型。器人程序可自由选择编程语言。仅限制对设计器定义的信息的访问
      3. 客户端可以通过向服务器发送特殊操作来请求重新启动比赛。

       

       

      下载附件  保存到相册

      2023-12-2 22:43 上传

       

       

      下载附件  保存到相册

      2023-12-2 22:43 上传

       

       

      6.4 DDPG

       

      https://yanpanlau.github.io/2016/10/11/Torcs-Keras.html

       

       

          Python 2.7

          Keras 1.1.0

          Tensorflow r0.10

          gym_torcs

       

       

      git clone 

      链接已隐藏,如需查看请登录或者注册

      cd DDPG-Keras-Torcs

      cp *.* ~/gym_torcs

      cd ~/gym_torcs

      python ddpg.py 

      七.优化

      7.1 编译问题

      提示

       error: 'isnan' was not declared in this scope; did you mean 'std::isnan'?

      nano ./src/drivers/olethros/geometry.cpp把 isnan 改为 std::isnan

       

      7.2渲染硬件加速

      7.2 代码优化

      7.3 内存泄露

      八.总结

      以上完成了基于LicheePi 4A的3D自动驾驶模拟平台搭建与开发,实现了使用LicheePi 4A玩转3D赛车游戏,玩转自动驾驶模拟。

      得益于LicheePi 4A优秀的性能和环境,通过以上可以看出直接板上进行开发也是完全能够胜任的,同时也体现了其优秀的综合性能。集可玩性和生产力工具为一体,作为开发,DIY等都是不错的选择。

       

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表