下载附件
保存到相册
2023-12-2 22:42 上传
TORCS即The Open Racing Car Simulator是一个高度可移植的支持多平台的赛车模拟器。
可以作为普通赛车游戏,也可以作为AI赛车游戏和研究平台。可运行在Linux (x86、AMD64和PPC)、FreeBSD、OpenSolaris和Windows上。
具有以下特征:
- 适合游戏玩家,研究人员,工程师和教师使用的3D赛车模拟平台
- 多赛道,赛手和汽车可用
- 复杂物理模型
- 支持所有输入设备(方向盘,操纵杆,游戏垫,…)
- 大量的社区内容/附加软件可用
- 易于修改(许多基于TORCS的科学/工业研究项目即是证明)
- 易于添加/创建内容
- 模块化架构
- 优异的性能和稳定性
项目见
https://sourceforge.net/projects/torcs/
作者个人网站:http://www.berniw.org/
众多项目也是基于torcs开发的,比如
- 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 上传
- 机器人程序作为客户端通过UDP连接到TORCS服务端server-bot(scr server)。
每个客户端一个服务器机器人;每个服务器bot都在服务器的一个单独端口上侦听。
- 每个游戏tic(大约相当于20毫秒的模拟时间),服务器都会向每个bot发送当前的传感器输入,更新比赛状态,并将其发送回客户端。然后等待10ms(实时)来接收机器人的动作。如果没有动作到达,模拟将继续,并使用上次执行的动作。
- 机器人代码和服务器之间建立了物理分离,建立了抽象层、传感器和执行器模型。器人程序可自由选择编程语言。仅限制对设计器定义的信息的访问
- 客户端可以通过向服务器发送特殊操作来请求重新启动比赛。
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等都是不错的选择。