CARLA仿真器架构解析(1)---项目文件结构

感情迁移 提交于 2020-12-18 13:03:56

背景

  CARLA是Intel公司基于虚幻四引擎开发的自动驾驶仿真器,仿真器作为一个服务器端,用户可以通过CARLA提供的python API进行编程,从仿真器服务端获取自己需要的传感器数据。既然用户平时都是编写客户端的代码,我们又何需去看服务端是如何实现的呢?笔者认为,Intel公司的代码能力是很强的,通过CARLA仿真器源码的阅读,我们可以从使用CARLA的阶段进阶到熟悉并且可以修改CARLA的地图,因为CARLA仿真器也是一年又一年的在更新迭代,也添加了许多新的工具,说明还有许多不足的地方,我们可以通过这个方式成为开源社区贡献者的一员。并且CARLA这样的Server-Client的方式,其实是将仿真器的瓶颈设置在了网络传输的速率之上,因为Server-Client的数据传输依靠的是RPC的传输方式,如果网络带宽跟不上,也就无法进行实时仿真。另外,由于CARLA是基于虚幻引擎编写的,那也就给想要学习虚幻引擎的朋友提供了一个非常好的学习机会,不仅是从游戏制作的角度,更是从仿真器开发制作的角度来看待这款引擎。

CARLA获取和编译

  具体可以参考我之前的文章CARLA中导入RoadRunner建模高精度地图(一) ------ 环境配置篇,并且我们通过右键点击Unreal/CarlaUE4/CarlaUE4.uproject->Generate Visual Studio project file来生成sln工程文件,打开之后我们就可以看到CARLA中关于C++部分的代码实现,从下图可以看到carla是作为unreal的一个插件放入的工程当中的,类似与airsim的实现方式,如果有虚幻引擎基础的同学,可以通过添加log函数,来看到我们可以通过修改plugins来查看CARLA是如何组织结构的。
在这里插入图片描述

架构分析

  CARLA插件下面的Source源文件依赖于一个更为重要的依赖,就是其依赖的库如rpc、boost、以及一些对于传感器数据进行序列化所需要的一些库等等,而这些文件在VS工程当中并没有显示出来。在这里插入图片描述在这里插入图片描述
  我们可以聚焦到Source/Carla/Settings/QualityLevelUE.h文件,我对这个文件比较感兴趣是因为在CARLA启动的时候,如果我们使用命令行"CarlaUE4.exe -quality-level=Low",则可以开启低画质模式,该文件引用了<carla/rpc/QualityLevel.h>,而QualityLevelUE.h文件自身被CarlaSettings.h以及CarlaSettingsDelegate.h文件包含,我们做一个小实验,可以看到CarlaSettings.h中的107行,发现CARLA默认启动的画质参数为Epic,即最高画质,我们将其内容修改为Low,再在UEEditor里面Compile C++代码,再次启动CARLA,可以看到画质变低了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  而我们再去深究其改变画质的原理,可以看到CarlaSettingsDelegate.cpp的71行ApplyQualityLevelPostRestart()函数中根据不同的初始化信息,CARLA中对于画质也有不同的调整。




 switch (QualityLevel)
  {
   
   
    case EQualityLevel::Low:
    {
   
   
      // execute tweaks for quality
      LaunchLowQualityCommands(InWorld);
      // iterate all directional lights, deactivate shadows
      SetAllLights(InWorld, CarlaSettings->LowLightFadeDistance, false, true);
      // Set all the roads the low quality materials
      SetAllRoads(InWorld, CarlaSettings->LowRoadPieceMeshMaxDrawDistance, CarlaSettings->LowRoadMaterials);
      // Set all actors with static meshes a max disntace configured in the
      // global settings for the low quality
      SetAllActorsDrawDistance(InWorld, CarlaSettings->LowStaticMeshMaxDrawDistance);
      // Disable all post process volumes
      SetPostProcessEffectsEnabled(InWorld, false);
      break;
    }
    default:
      UE_LOG(LogCarla, Warning, TEXT("Unknown quality level, falling back to default."));
    case EQualityLevel::Epic:
    {
   
   
      LaunchEpicQualityCommands(InWorld);
      SetAllLights(InWorld, 0.0f, true, false);
      SetAllRoads(InWorld, 0, CarlaSettings->EpicRoadMaterials);
      SetAllActorsDrawDistance(InWorld, 0);
      SetPostProcessEffectsEnabled(InWorld, true);
      break;
    }
  }
  AppliedLowPostResetQualityLevel = QualityLevel;

总结

  这次主要是带大家了解了CARLA项目的文件结构并且进行了一个小实验,下次博文重点带大家看一下CARLA中有关于传感器的实现方式,谢谢支持!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!