4、LGSVL安装与配置:源码编译与Docker部署、启动LGSVL模拟器、基本配置与测试
好,咱们进入正题。LGSVL 这个模拟器,说实话,我最早接触它的时候,它还是个比较小众的项目。但后来被 LG 收购后,发展得很快。现在虽然项目已经归档了,但它的代码和架构思路,对咱们做联合仿真的人来说,依然非常有参考价值。
安装 LGSVL,主要有两条路:源码编译 和 Docker 部署。我个人更推荐新手先走 Docker 路线,省心。但如果你想深入定制,或者像我一样喜欢折腾底层,那源码编译是必经之路。
4.1 源码编译:硬核玩家的选择
为什么要源码编译?说白了,就是你想改它的渲染管线、加自己的传感器模型,或者像我之前遇到的一个项目——需要对接一个非标准的激光雷达驱动——这时候,预编译的二进制包根本满足不了你。
编译环境,我建议用 Ubuntu 18.04 或 20.04。为什么?因为 LGSVL 的依赖库版本跟 Ubuntu 的 LTS 版本绑定得比较紧。我曾经试过在 22.04 上编译,结果折腾了两天,最后还是老老实实换回了 20.04。
步骤其实不复杂,但每一步都有坑:
- 安装依赖:主要是 ROS、CUDA、以及一些图形库。嗯,这里要注意,CUDA 版本别装太新,10.0 到 10.2 之间最稳。
- 克隆代码:从 GitHub 上拉下来,记得用
--recurse-submodules参数,不然子模块会缺失。 - 编译:用
catkin_make或者colcon build。我个人习惯用colcon,因为它的输出更清晰,出错时容易定位。
# 克隆代码(带子模块)
git clone --recurse-submodules https://github.com/lgsvl/simulator.git
cd simulator
# 安装依赖(以 Ubuntu 20.04 为例)
sudo apt-get install -y \
ros-noetic-desktop-full \
libvulkan-dev \
libglfw3-dev \
libglm-dev \
libeigen3-dev
# 编译
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
编译过程中,最常遇到的问题就是 Vulkan 相关的链接错误。为什么会这样?因为你的显卡驱动可能不支持 Vulkan,或者版本太低。我建议你先跑一下 vulkaninfo 命令,确认一下环境是否就绪。
build 目录下的临时文件很容易冲突。如果你中途改了 CMakeLists.txt,记得先 rm -rf build/ install/ 再重新编译。我曾经因为没清理,浪费了整整一个下午。
4.2 Docker 部署:五分钟快速上手
如果你只是想快速跑起来,看看效果,那 Docker 部署绝对是首选。LGSVL 官方提供了 Docker 镜像,拉下来就能用。
步骤很简单:
- 安装 Docker:这个不用我多说了吧?
sudo apt install docker.io搞定。 - 拉取镜像:
docker pull lgsvl/simulator:latest - 运行容器:注意要挂载一些目录,比如你的地图文件、车辆配置等。
# 拉取镜像
docker pull lgsvl/simulator:latest
# 运行容器(带图形界面支持)
docker run -it --rm \
--net=host \
--gpus all \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
lgsvl/simulator:latest
这里有个关键点:--net=host 和 --gpus all。前者是为了让容器内的网络跟宿主机共享,方便后面跟 Carla 通信;后者是为了启用 GPU 加速。如果你没有 NVIDIA 显卡,或者没装 nvidia-docker,那图形性能会非常差,卡成 PPT。
xvfb 模拟一个虚拟显示器。命令是 xvfb-run docker run ...。我当初在云端部署时,就是靠这招搞定的。
4.3 启动 LGSVL 模拟器
不管是源码编译还是 Docker,启动后的界面都是一样的。你会看到一个简洁的启动器界面,上面有 “Open Browser” 和 “Simulator” 两个按钮。
我个人习惯直接点 “Simulator”,因为这样会启动一个独立的窗口,操作起来更直观。但如果你需要远程控制,或者像我一样喜欢用浏览器调试,那点 “Open Browser” 也行,它会打开一个 Web 界面,端口默认是 8080。
启动后,你会看到默认的场景——一个空旷的停车场,中间停着一辆车。嗯,这就是 LGSVL 的“Hello World”。
4.4 基本配置与测试
模拟器跑起来了,接下来就是配置。你需要做三件事:
- 加载地图:LGSVL 支持加载自定义的 HD Map,格式是
.xodr(OpenDRIVE)。你也可以用官方提供的几个示例地图,比如San Francisco或Borregas Ave。 - 配置车辆:在 “Vehicles” 选项卡里,你可以选择车辆模型。默认是一辆普通的轿车,但你可以导入自己的 URDF 模型。
- 设置传感器:这是最关键的一步。你需要给车辆装上摄像头、激光雷达、GPS 等传感器。LGSVL 的传感器配置是通过 JSON 文件来定义的。
下面是一个简单的传感器配置示例,包含一个前置摄像头和一个 32 线激光雷达:
{
"sensors": [
{
"type": "Camera",
"name": "Main Camera",
"params": {
"width": 1920,
"height": 1080,
"fov": 90,
"x": 2.0,
"y": 0.0,
"z": 1.5,
"pitch": 0.0,
"yaw": 0.0,
"roll": 0.0
}
},
{
"type": "Lidar",
"name": "Velodyne VLP-32C",
"params": {
"channels": 32,
"range": 100.0,
"rotationFrequency": 10.0,
"x": 0.0,
"y": 0.0,
"z": 2.0,
"pitch": 0.0,
"yaw": 0.0,
"roll": 0.0
}
}
]
}
配置好之后,点击 “Run”,模拟器就会开始运行。你可以用键盘控制车辆移动,或者通过 ROS 话题发送控制指令。
最后,别忘了测试一下 时间同步。LGSVL 和 Carla 联合仿真时,时间戳必须对齐。你可以在 LGSVL 的日志里看到每一帧的时间戳,跟 Carla 的对比一下。如果偏差超过 10ms,那就需要调整一下系统时钟或者网络延迟了。
嗯,到这里,LGSVL 的安装与基本配置就完成了。下一章,我们会把 Carla 和 LGSVL 连起来,真正开始联合仿真。到时候,你会发现这两个模拟器配合起来,威力远大于单个使用。