unreal 驾驶模拟_unreal 如何调用unreal studio - CSDN
  • 优化障碍物的出现.

    龙云尧个人博客,转载请注明出处。

    CSDN地址:http://blog.csdn.net/michael753951/article/details/75074051

    个人blog地址:http://yaoyl.cn/huan-jing-da-jian-si-2/


    障碍物移动的改进

    在之前的版本中.我们的障碍物移动和场景移动放在同一个for循环中,虽然减少了代码的操作,但是很容易出现边界问题,程序运行中往往会出现障碍物骤现,或者障碍物还未抵达车前方便突然消失的情况,为了修改这出bug,我将重写这部分代码.

    需求分析

    无脑写代码的多数结果都是bug不断,并且写完后文就忘记前文.为了提高代码的清晰度和准确性,挺尸帮我们捋清思路,我们先通过写伪代码的方式整理一下我们的程序有哪些需求,以及粗略的实现方式.

    需求

    障碍物能够从左侧楼栋出现,到达路中央之后,将停留一小段时间(等待车撞上).

    对这个过程进行分解分析,我们可以大致得到如下流程:

    • 障碍物出现的时机: 左侧有障碍物 & 距离上次消失已经有10s以上
    • 障碍静止时机: 已经达到路中间, 并且停留时间没有达到2s
    • 障碍物消失诗句时机: 停留2s之后,障碍物消失

    伪代码

    • 首先判断障碍物是否已经消失,然后判断左侧是否有障碍物,然后检查消失时间是否已经达到10s,如果满足条件,就更新appear标志, 让障碍物开始移动
    • 开始步进障碍物, 直到达到边界, 此时更新appear_tmp, 更新appear标志, 记录下当前时间
    • 如果当前状态为静止, 并且停留时间还未到达2s,保持pos不变
    • 否则如果停留时间超过2s,就将appear更新为消失, 让障碍物消失, 同时用appear_tmp记录下消失的时间, 方便之后判断障碍物的出现时机

    代码实现

        // 先获取左侧建筑情况
        int left_temp = building_left_flag;
        // bdw_appear有3个值, 0表示已经消失, 1表示正在进行移动, 2表示移动到边界,已经静止
        if(bdw_appear == 0) {
            if(left_temp >> 11 & 0b1 == 1) {
                time(&appear);
                // 如果距离上次出现已经5s,就更新记录,同时更新flag
                if(appear - appear_tmp >= 5){
                    appear_tmp = appear;
                    bdw_appear = 1;
                }
            }
        }else if(bdw_appear == 1){
            glBindTexture(GL_TEXTURE_2D, texture[4]);
            glLoadIdentity();
            glTranslatef(child_run_len, -1.0f, -7.0f);
            glCallList(children);
            if(child_run_len >= -0.5) {
                //child_run_len = -3.0f;
                //bdw_appear = false;
                // 刚移动到边界
                if(bdw_appear == 1){
                    time(&appear_tmp);
                    child_pos = -7.0f;
                    bdw_appear = 2;
                }
                child_run_len = -0.5f;
            }else{
                // 小孩的速度恒定
                child_run_len += 0.1f;
            }
        }else{
            time(&appear);
            // 如果距离上次出现已经5s,就更新记录,同时更新flag
            if(appear - appear_tmp >= 2){
                appear_tmp = appear;
                child_run_len = -3.0f;
                bdw_appear = 0;
            }else{
                glBindTexture(GL_TEXTURE_2D, texture[4]);
                glLoadIdentity();
                // 障碍物的pos还要加上run_len, 这样能够让障碍物在达到路中央静止之后, 和周围物体一起移动,产生向人靠近的感觉
                glTranslatef(child_run_len, -1.0f, child_pos+run_len);
                glCallList(children);
            }
        }

    实现障碍物从两侧随机出现

    为了和真实驾驶更加相似,我们不应该让障碍物只从单侧出现,而是因该让其两侧都有可能出现.因此,我们需要在原来的代码上进行进一步的修改.

    需求分析

    需求

    首先我们暂时让不倒翁的出现有两种情况, 情况一, 从左侧出现, 情况二, 从两侧随机出现. 通过按键’c’来控制模式的转换(改变appear_mode的值).

    因此, 当我们按下’c’键时, 需要对模式进行转换. 接下来在DrawGLScene中将根据appear_mode的值进行一系列操作. 如果appear_mode为默认的0, 就让障碍物从左侧出现, 如果appear_mode为1, 就让障碍物从两侧出现.

    如果障碍物从两侧出现的话, 每次障碍物将要出现的时候, 我们需要用一个flag标志保存障碍物本次出现是从左侧出现还是右侧出现. 在绘制障碍物的时候, 我们将通过这个flag来判断物体是如何运动.

    • 障碍物出现的时机: 本身已经消失, 距离上次消失已经有10s以上, 决定好从哪一侧出现, 并且该侧有楼栋
    • 障碍物移动的时机: 本身已经出现, 根据上一步已经得到的flag判定是向左还是向右, 直到到临界点
    • 障碍物静止的时机: 已经达到路中间,并且停留时间并未超过2s
    • 障碍物消失的时机: 已经静止超过2s

    伪代码

    • 首先我们需要在KeyPressed函数中, 添加按键’c’的控制事件, 另其对appear_mode进行修改.
    • 接下来在DrawGLScene中, 我们将对这个appear_mode进行判断. 如果appear_mode为0,就按照之前的代码执行. 如果appear_mode为1, 则进入两侧出现事件.
    • 当appear_mode为1时, 如果当前状态为消失, 如果当前已经消失10s以上, 则随机决定在哪应该出现障碍物, 然后检查该侧是否有楼栋, 如果有楼栋, 则保存裁决位置(左或者右), 同时更新当前状态为移动
    • 当appear_mode为1时, 当前状态为移动时, 根据裁决, 如果裁决决定从左侧出来, 则起点设置为左侧, 同时,不断增加child_run_len,直到到达边界; 如果裁决决定从右侧出来, 则起点设置为1.0f位置, 同时不断减小, 直到到达-0.5f位置停止.
    • 停止时, 将appear_mode设置为2, 记录开始时间, 在原地停留两秒之后, 消失.

    代码实现

        int left_temp = building_left_flag;
        int right_temp = building_right_flag;
        if(appear_mode == 0) {
            // bdw_appear有3个值, 0表示已经消失, 1表示正在进行移动, 2表示移动到边界,已经静止
            if(bdw_appear == 0) {
                if(left_temp >> 11 & 0b1 == 1) {
                    time(&appear);
                    // 如果距离上次出现已经5s,就更新记录,同时更新flag
                    if(appear - appear_tmp >= 5) {
                        appear_tmp = appear;
                        bdw_appear = 1;
                        child_run_len = -3.0f;
                    }
                }
            } else if(bdw_appear == 1) {
                glBindTexture(GL_TEXTURE_2D, texture[4]);
                glLoadIdentity();
                glTranslatef(child_run_len, -1.0f, -7.0f);
                glCallList(children);
                if(child_run_len >= -0.5) {
                    //child_run_len = -3.0f;
                    //bdw_appear = false;
                    // 刚移动到边界
                    if(bdw_appear == 1) {
                        time(&appear_tmp);
                        child_pos = -7.0f;
                        bdw_appear = 2;
                    }
                    child_run_len = -0.5f;
                } else {
                    // 小孩的速度恒定
                    child_run_len += 0.1f;
                }
            } else {
                time(&appear);
                // 如果距离上次出现已经5s,就更新记录,同时更新flag
                if(appear - appear_tmp >= 2) {
                    appear_tmp = appear;
                    child_run_len = -3.0f;
                    bdw_appear = 0;
                } else {
                    glBindTexture(GL_TEXTURE_2D, texture[4]);
                    glLoadIdentity();
                    glTranslatef(child_run_len, -1.0f, child_pos+run_len);
                    glCallList(children);
                }
            }
        }else if(appear_mode == 1) {
            if(bdw_appear == 0) {
                time(&appear);
                if(appear - appear_tmp >= 5){
                    // 奇数为左侧, 偶数为右侧
                    if(rand() & 0b1 == 1) {
                        if(left_temp >> 11 & 0b1 == 1) {
                            time(&appear);
                            appear_tmp = appear;
                            bdw_appear = 1;
                            left_or_right_flag = 1;
                            child_run_len = -3.0f;
                        }
                    }else{
                        if(right_temp >> 11 & 0b1 == 1) {
                            time(&appear);
                            appear_tmp = appear;
                            bdw_appear = 1;
                            left_or_right_flag = 0;
                            child_run_len = 1.0f;
                        }
                    }
                }
            } else if(bdw_appear == 1) {
                if(left_or_right_flag == 1){
                    glBindTexture(GL_TEXTURE_2D, texture[4]);
                    glLoadIdentity();
                    glTranslatef(child_run_len, -1.0f, -7.0f);
                    glCallList(children);
                    if(child_run_len >= -0.5) {
                        //child_run_len = -3.0f;
                        //bdw_appear = false;
                        // 刚移动到边界
                        if(bdw_appear == 1) {
                            time(&appear_tmp);
                            child_pos = -7.0f;
                            bdw_appear = 2;
                        }
                        child_run_len = -0.5f;
                    } else {
                        // 小孩的速度恒定
                        child_run_len += 0.1f;
                    }
                }else{
                    glBindTexture(GL_TEXTURE_2D, texture[4]);
                    glLoadIdentity();
                    glTranslatef(child_run_len, -1.0f, -7.0f);
                    glCallList(children);
                    if(child_run_len <= -0.5f) {
                        if(bdw_appear == 1) {
                            time(&appear_tmp);
                            child_pos = -7.0f;
                            bdw_appear = 2;
                        }
                    } else {
                        child_run_len -= 0.1f;
                    }
                }
            } else {
                time(&appear);
                // 如果距离上次出现已经5s,就更新记录,同时更新flag
                if(appear - appear_tmp >= 2) {
                    appear_tmp = appear;
                    child_run_len = -3.0f;
                    bdw_appear = 0;
                } else {
                    glBindTexture(GL_TEXTURE_2D, texture[4]);
                    glLoadIdentity();
                    glTranslatef(child_run_len, -1.0f, child_pos+run_len);
                    glCallList(children);
                }
            }
        }
    展开全文
  • 开源自动驾驶仿真平台 AirSim (1) - Unreal EngineAirSim 官方Github: https://github.com/Microsoft/AirSimAirSim 是微软的开源自动驾驶仿真平台(其实它还能做很多事情,这里主要用于自动驾驶仿真研究)。...

    开源自动驾驶仿真平台 AirSim (1) - Unreal Engine

    AirSim 官方Github: https://github.com/Microsoft/AirSim

    AirSim 是微软的开源自动驾驶仿真平台(其实它还能做很多事情,这里主要用于自动驾驶仿真研究)。

    AirSim 没有独立的官网,它托管在 Github 上面。

    AirSim 使用了 Unreal Engine 作为自己的图像开发引擎。所以想要运行AirSim,我们必须先会用Unreal Engine和它使用的平台工具。

    下面我简单介绍一下 Unreal Engine,和如何使用它。

    1 什么是Unreal Engine [1]

    Unreal是UNREAL ENGINE(虚幻引擎)的简写,由Epic开发,是目前世界知名授权最广的游戏引擎之一,占有全球商用游戏引擎80%的市场份额。

    “Unreal Engine 3”3D引擎采用了目前最新的即时光迹追踪、HDR光照技术、虚拟位移…等新技术,而且能够每秒钟实时运算两亿个多边形运算,效能是目前“Unreal Engine”的100倍,而通过nVIDIA的GeForce 6800显示卡与“Unreal Engine 3”3D引擎的搭配,可以实时运算出电影CG等级的画面,效能非常非常恐怖。

    基于它开发的大作无数,除《虚幻竞技场3》外,还包括《战争机器》、《质量效应》、《生化奇兵》等等。在美国和欧洲,虚幻引擎主要用于主机游戏的开发,在亚洲,中韩众多知名游戏开发商购买该引擎主要用于次世代网游的开发,如《剑灵》、《TERA》、《战地之王》、《一舞成名》等。 iPhone上的游戏有《无尽之剑》(1、2、3)、《蝙蝠侠》等

    2 安装和使用 Unreal Engine [2]

    想要使用 Unreal Engine,我们需要下载 Epic 开发的 Epic Games Launcher。然后,从 Epic Games Launcher 中再下载所需要版本的 Unreal Engine。

    2.1 下载和安装 Epic Games Launcher

    注意!首相要下载cmake!

    官网:https://cmake.org/

    在 Unreal Engine 官网下载所对应系统的 Epic Games Launcher。

    https://www.unrealengine.com/download

    可能需要注册一个帐号才能使用。

    *我在一次登录的时候还遇到了限制登录人数,让我等待的事情。

    2.2 下载 Unreal Engine 4.16.3

    clip_image001

    这个图片是官方的,现在应该是 4.16.3 这个版本。

    注意开始的时候可能找不到 4.16.3,注意版本号旁边有一个小三角,下拉可以选择版本。

    *官方文档特别强调需要使用 4.16 版本,否则可能不成功。低版本自然不行,高版本也可能带来问题。

    2.3 下载虚拟场景

    选择 Epic Games Launcher 中左侧的 Learn,然后在右侧的页面中一直下拉找到 Landscape Mountains点进去。这个场景是官方教程使用的,第一次玩它用这个就没错。

    clip_image001[4]

    选择 Create Project,然后选择一个路径存下(路径要看一下,因为下面要用到)。

    这个场景是比较小的,不过也有 2G 左右。请耐心等待。

    这个软件运行起来确实有些不稳定,我尝试下载了很多次才成功,有一次竟然出现了这个场景 Unavailabe 的情况。只能无数次重新打开它来解决了。

     

    下载好场景,Unreal Engine 这一块的任务就基本完成啦

    展开全文
  • AirSim is a simulator for drones, cars and more built on Unreal Engine. It is open-source, cross platform and supports hardware-in-loop with popular flight controllers such as PX4 for physi

    1. Airsim 概述

    AirSim是基于Unreal Engine引擎或者Unity引擎,打造的一个无人机/无人车的仿真平台,凭借着Unreal Engine的性能,能够出色的进行基于计算机视觉算法的autonomous vehicles的仿真,AirSim在使用时作为一个UE4的插件,可以嵌到任意Unreal environment中,所以我们可以根据需求实现不同任务,不同场景的仿真。

    Our goal is to develop AirSim as a platform for AI research to experiment with deep learning, computer vision and reinforcement learning algorithms for autonomous vehicles. For this purpose, AirSim also exposes APIs to retrieve data and control vehicles in a platform independent way.
             ——Microsoft

    微软想把它打造成人工智能研究的仿真平台,以无人驾驶为主(比如自主无人机、自动驾驶汽车),在Airsim中跑深度学习,计算机视觉和强化学习算法。

    2. Unreal Engine 概述

    The Unreal Engine is a game engine developed by Epic Games.With its code written in C++, the Unreal Engine features a high degree of portability and is a tool used by many game developers today.The current release is Unreal Engine 4, designed for Microsoft Windows, macOS, Linux, SteamOS, HTML5, iOS, Android, Nintendo Switch, PlayStation 4, Xbox One and virtual reality (SteamVR/HTC Vive, Oculus Rift, PlayStation VR, Google Daydream, OSVR and Samsung Gear VR).

    3. 在Linux下环境搭建

    3.1. 手动 编译安装 UnrealEngine

    UnrealEngine在github上私有的项目,https://github.com/EpicGames/UnrealEngine.git 不信你点点看。
    但是只要你申请加入Unreal engine项目的组织,还是可以Clone下来的,具体步骤。

    1、首先登陆UnrealEngine的缔造者Epic的官网,注册一个账号
    2、然后在Epic的个人页面下–账号关联,关联到自己的GitHub账号 (这个关联表明你申请加入EpicGames的开发,他会向你发出一个加入邀请)
    3、登陆GitHub,在https://github.com/EpicGames 确认邀请就可以了

    这里写图片描述

    接下来就按照Build It on Linux的步骤,下载、编译安装 就可以啦

    git clone -b 4.18 https://github.com/EpicGames/UnrealEngine.git
    cd UnrealEngine
    //few times Epic folks broke the build so we will get commit that works
    // git checkout af96417313a908b20621a443175ba91683c238c8
    ./Setup.sh
    ./GenerateProjectFiles.sh
     make
     //注意 UnrealEngine这个东西很占地方,不仅下载大,编译更大,所以你的HOME下至少要有20G的Free Space,不然等你编译的时候,空间占满了,就失败了,我开始就这样,后来把我的双系统Windows下的一个分区挂到home下的一个文件夹下,才解决。
    

    3.2 编译airsim 插件

         # go to folder where you clone GitHub projects
         git clone https://github.com/Microsoft/AirSim.git
         cd AirSim
         ./setup.sh  // 配置依赖
         ./build.sh  //编译airsim库
         cd ros
         catkin_make // 编译airsim_ros接口
         
    

    ./Engine/Binaries/Linux/UE4Editor 执行这个这个路径下的可执行程序,启动Unreal Engine试试。有两点说明。

    1. 如果在初始化启动的过程中出错了(比如OpenGL的错误),说明你要按照NVIDIA的显卡驱动
    2. 这个软件很大,对显卡的显存要求也比较高

    3.3 使用编译好的binaries环境+Airsim

    These are experimental Linux binaries for Ubuntu 16.04
    https://github.com/microsoft/AirSim/releases/tag/v1.2.0Linux

    • Africa (safari-like environment with moving animals and poachers)
    • Blocks
    • City (large environment with moving vehicles and pedestrians)
    • Forest
    • LandscapeMountains
    • Neighborhood (small urban neighbourhood block)
    • SimpleMaze
    • SubT
    • TrapCam (hunting trap camera simulator with large and small game)
    • Warehouse
    • ZhangJiaJie
    场景 描述
    Africa.zip 1.05G
    Blocks.zip 327 MB
    CityEnviron.zip.001 1.66 GB
    CityEnviron.zip.002 1.24 GB
    Forest.zip 1.17 GB
    LandscapeMountains.zip 657 MB
    Neighborhood.zip 1.42 GB
    SimpleMaze.zip 423 MB
    TrapCam.zip.001 1.76 GB
    TrapCam.zip.002 1.33 GB
    Warehouse.zip 837 MB
    ZhangJiaJie.zip 517 MB

    Source code (zip)
    Source code (tar.gz)

    OK 至此,Airsim+UnrealEngine 在Linux下的环境就搭建好了,可以自己先体验一下。
    后面再分享Airsim+UnrealEngine的使用

    4. 如何启动 无人车/无人机自动驾驶仿真环境

    要启动基于Airsim+UnrealEngine4 搭建无人车/无人机自动驾驶仿真环境,需要两个方面:

    • airsim+UE4 也就是配置了airsim插件的UE4 environment
    • airsim settings 不同的配置可以设置不同的仿真类型/传感器类型等
    • airsim API, 有了以上两者,我们通过什么方式取回image, 得到vehicle的状态,并执行control cmd,这就要通过api与其进行数据交互。

    首先关于airsim+UE4

    • 简单的方式,可以使用airsim发布的编译好的binaries环境,这种二进制文件,通过执行一个脚本可以直接运行。
    • 另一种方式是自己编译UE4,以及enviromnent,并且在环境中添加airsim plugin,这种方式更加灵活,有时编译容易出错,说版本不匹配。

    其次关于settings.json的设置:

    AirSim Settings.json 很总要

    最后是airsim API

    airsim 采用RPC网络通信,所以可以通过创建rpc client与仿真器的rpc server进行交互。airsim提供了C++ /Python的接口用于基于api的程序开发。可以参考相应的C++ APIs Guide设计

    [参考文档]

    5. 最简单的方式配置示例

    实现UE4+airsim 实现无人机在simple_flight mode下带有双目+深度的模式

    - 场景, 使用linux下预先编译好的 Block.zip 
    执行命令: ./Blocks.sh
    
    - settign文件
    - api
    - 
    

    6. 四种仿真类型

    {
      "SettingsVersion": 1.2,
      "SimMode": "Multirotor" // Car or ComputerVision
    }
    

    6.1 Hardware-in-Loop(HITL)

    • flight controller runs in actual hardware such as Naze32 or Pixhawk chip.
    • connect this hardware to PC using USB port
    • Simulator talks to the device to retrieve actuator signals and send it simulated sensor data
    {
      "SettingsVersion": 1.2,
      "SimMode": "Multirotor",
      "Vehicles": {
        "PX4": {
          "VehicleType": "PX4Multirotor"
        }
      }
    }
    

    参考文档px4_setup.md

    6.2 Software-In-Loop Simulation (SITL)

    {
        "SettingsVersion": 1.2,
        "SimMode": "Multirotor",
        "Vehicles": {
            "PX4": {
                "VehicleType": "PX4Multirotor",
                "UseSerial": false
            }
        }
    }
    
    • firmware runs in your computer as opposed to separate board

    参考文档 px4_sitl.md
    Airsim SIL简单说明

    6.3 airsim simple_flight (default)

    参考simple_flight.md

    • 特性:可以通过输入 angle rate, angle level, velocity or position的方式控制

    6.4 Computer Vision (without flight controller)

    {
      "SettingsVersion": 1.2,
      "SimMode": "ComputerVision"
    }
    
    • In this mode, physics engine is disabled and there is no vehicle, just cameras
    • You can move around using keyboard (use F1 to see help on keys). Or you can call APIs to move cameras around and take images.
    • You can press Record button to continuously generate images.

    7. 获取传感器的类型和数据

    参考文档 sensors.md

    airsim 目前支持六种类型传感器

    Camera 
    Barometer = 1
    Imu = 2
    Gps = 3
    Magnetometer = 4
    Distance Sensor = 5
    Lidar = 6
    

    7.1 camera数据

    • 首先指定哪个位置的摄像头,可以使用id或者name [“0”, “1”, “2”, “3”, “4”] or [front_center, front_right, front_left, bottom_center and back_center]
    • 指定图像的类型/分辨率以及各种相机参数
      图像的类型指 [场景图/深度图/视差图/语义分割图等等吧]
    // ImageType 0~7
      Scene = 0, 
      DepthPlanner = 1,   //(更类似于双目深度估计结果SGM) all points that are in plan parallel to camera have same depth
      DepthPerspective = 2,//(类似于depth_image_proc 来参生点云)using a projection ray that hits that pixel.
      DepthVis = 3, //用于深度可视化的 从近到远被量化成 从黑到白
      DisparityNormalized = 4,// 视差图,视差被归一化0-1  use (Xl - Xr)/Xmax
      Segmentation = 5, //场景的语义分割图
      SurfaceNormals = 6,
      Infrared = 7 //根据 object ID 映射成 grey scale 0-255
    
    {
      "SettingsVersion": 1.2,
      "CameraDefaults": {
          "CaptureSettings": [
            {
              "ImageType": 0,
              "Width": 256,
              "Height": 144,
              "FOV_Degrees": 90,
              "AutoExposureSpeed": 100,
              "MotionBlurAmount": 0
            }
        ]
      },
      "SimMode": "ComputerVision"
    }
    

    参考image_apis.md
    一个获取双目和深度图的示例

    7.2 Lidar data

    {
        "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings_json.md",
        "SettingsVersion": 1.2,
    
        "SimMode": "Multirotor",
    
         "Vehicles": {
    		"Drone1": {
    			"VehicleType": "simpleflight",
    			"AutoCreate": true,
    			"Sensors": {
    			    "LidarSensor1": { 
    					"SensorType": 6,
    					"Enabled" : true,
    					"NumberOfChannels": 16,
    					"RotationsPerSecond": 10,
    					"PointsPerSecond": 100000,
    					"X": 0, "Y": 0, "Z": -1,
    					"Roll": 0, "Pitch": 0, "Yaw" : 0,
    					"VerticalFOVUpper": -15,
    					"VerticalFOVLower": -25,
    					"HorizontalFOVStart": -20,
    					"HorizontalFOVEnd": 20,
    					"DrawDebugPoints": true,
    					"DataFrame": "SensorLocalFrame"
    				},
    				"LidarSensor2": { 
    				   "SensorType": 6,
    					"Enabled" : true,
    					"NumberOfChannels": 4,
    					"RotationsPerSecond": 10,
    					"PointsPerSecond": 10000,
    					"X": 0, "Y": 0, "Z": -1,
    					"Roll": 0, "Pitch": 0, "Yaw" : 0,
    					"VerticalFOVUpper": -15,
    					"VerticalFOVLower": -25,
    					"DrawDebugPoints": true,
    					"DataFrame": "SensorLocalFrame"
    				}
    			}
    		}
        }
    }
    

    参考文档 lidar.md

    Aerial Informatics and Robotics Platform 官方Airsim说明文档

    【1/编译安装】
    Unreal Engine + AirSim/docs/build_linux.md
    [Unreal Engine + AirSim/docs/build_windows.md]

    【2/启动与使用】

    camera_views.md
    通过F1开关camera settings.json设置image mode 机器性能影响帧率

    flight_controller.md
    简要说明 Flight Controller HIL SIL simple_flight PX4

    hello_drone.md 介绍hello drone如何工作的
    Airsim启动时,会启动RPC server, Hello Drone uses the RPC client to connect it.

    multi_vehicle.md :Setting Up Multiple Vehicles

    px4_build.md  
    make posix_sitl_default
    ./build_posix_sitl_default/src/firmware/posix/px4 ./posix-configs/SITL/init/ekf2/iris

    px4_setup.md PX4 Setup for AirSim
    Setting up PX4 Hardware-in-Loop
    Setting up PX4 Software-in-Loop

    px4_sitl.md 详细讲Setting up PX4 Software-in-Loop

    FAQ.md

    log_viewer.md Log Viewer是一个数据调试工具

    【3/深究Airsim】
    design.md & paper

    code_structure.md Airsim代码组织结构
    AirLib包含(Physics engine、Sensor models、Vehicle models、Control library)
    Unreal/Plugins/AirSim Unreal Engine中用于自动驾驶的一个插件
    MavLinkCom  
    Sample Programs 一些例程examples hellocar helloDrone Droneshell

    custom_drone.md AirLib on a Real Drone

    apis.md —— c++ API hello drone/ hello car
    python.md——Python API接口使用
    image_apis.md

    reinforcement_learning.md Reinforcement Learning in AirSim

    Remote Control.md 遥控的使用

    Hardware-In-Loop Simulation)(HIL)

    YouTube有关HIL using Airsim的视频教程
    UE+AirSim& PX4+遥控器 在Windows环境下搭建

    Pixhawk 有关硬件在环仿真的说明


    强化学习demo
    DeepQNeuralNetwork in AirSim using CNTK
    https://github.com/Microsoft/AirSim/blob/master/PythonClient/DQNdrone.py

    Autonomous vehicle navigation based on Deep Reinforcement Learnin using AirSim

    参考文档:
    Building On Linux

    展开全文
  • 智能交通系统(ITS)是一种典型的网络物理系统(CPS),通过网络和物理组件进行监控控制,例如互连的自动车辆(CAV)。An intelligent transporta...
        

    640?wx_fmt=jpeg


    智能交通系统(ITS)是一种典型的网络物理系统(CPS),通过网络和物理组件进行监控控制,例如互连的自动车辆(CAV)。

    An intelligent transportation systems (ITS) is a typical cyber-physical system (CPS) in which physical components, for example, Connected Automated Vehicles (CAVs), are monitored and controlled through a network of cyber and physical components. 


    因此,此类系统包含事件驱动动力学时间驱动动力学

    Such systems, therefore, contain event-driven dynamics along with time-driven dynamics. 


    基于SimEvents的离散事件和混合仿真框架有助于测试ITS的安全性和性能评估,并用于建立Mcity测试设施的交通仿真模型。

    The proposed discrete-event and hybrid simulation framework based on SimEvents facilitates testing for safety and performance evaluation of an ITS and has been used to build a traffic simulation model of the Mcity test facility. 


    本代码专门为测试CAV而设计,包含各种道路/车道配置和完整的仪表系统。

    It is specifically designed for testing CAVs and contains various road/lane configurations and a complete instrumentation system. 


    这使得用户能够在微观层面上研究交通,包括不同交通场景下CAV新控制算法的有效性、交通系统事件驱动方面以及通信延迟的影响。

    This enables users to study traffic at the microscopic level, including the effectiveness of new control algorithms for CAVs under different traffic scenarios, the event-driven aspects of transportation systems, and the effects of communication delays. 


    该框架跨越多个工具箱,包括MATLAB、Simulink和SimEvents。

    The framework spans multiple toolboxes including MATLAB, Simulink, and SimEvents.


    包括三种主要的不同场景:

    1. CAV通过两个相邻的无信号交叉口,采用最优控制策略

    2. 使用(i)最优控制(ii)控制屏障函数在高速公路入口匝道处融合CAV

    3. 使用最优控制(CAV)和智能驾驶模型(非CAV)通过信号交叉口的CAV和/或非CAV


    通过指定Matlab离散事件系统(MATLAB DES)的模块参数,可以在特定场景下尝试不同的控制器。例如,对于在高速公路入口匝道上的CAV合流,可以选择最优控制器或基于控制屏障功能的控制器。此外,如果您想研究排队行为,可以观察信号交叉口2的排队长度。根据您的研究目的,您可以自由编辑或创建自己的流量场景


    Three major different scenarios are included: 

    1. CAVs crossing two adjacent unsignalized intersections using optimal control 

    2. CAVs merging at freeway on-ramp using (i) optimal control (ii) control barrier functions 

    3. CAVs and/or non-CAVs crossing a signalized intersection using optimal control (CAVs) and the intelligent driver model (non-CAVs) 

    By specifying the Block Parameters of the MATLAB Discrete-Event System (MATLAB DES), you may try different controllers given a particular scenario. For example, for CAVs merging at freeway on-ramp, you can select either an optimal controller or a control barrier function-based controller. In addition, you may observe the queue length of the signalized intersection 2 if you'd like to study the queueing behavior. Feel free to make edits or create your own traffic scenarios depending on your research purpose.


    注意:

    1. 在对某个场景(如信号交叉口1)进行仿真时,请将其他场景(如无信号交叉口、高速公路入口匝道等)的MATLAB离散事件系统模块设置为“xxx-Dummy”模式。


    2. 如果CAV和INFO实体没有自动加载,双击初始化模块“init”


    NOTE: 

    1. When running simulation for a certain scenario, e.g., signalized intersection 1, please set the MATLAB Discrete-Event System blocks of other scenarios, e.g., unsignalized intersections, freeway on-ramp, etc., to "xxx_Dummy" mode. 

    2. Double click the initialization block "init" if the CAV and INFO entities are not load automatically


    可视化是基于原始形式的。目前正在进行的工作包括改进可视化和为整个城市创建地图。

    Visualization is primitive. Ongoing work includes improving the visualization and creating a map for the whole Mcity.


    完整源码下载请点击“阅读原文”

    展开全文
  • Airsim最初是微软推出的一个模拟飞行的平台,之后增加了模拟驾驶的内容,这个平台据网上的资料是微软的一个较小的开源项目,因此也没有得到太大的重视,我看了一下平台好像也好久没有更新了,平台上的问题也没有什么...
  • 参照...我跑了一个car simulation的项目,没有接入外设,是纯模拟的,具体效果如上图。  微软的这套airsim框架已经开源,可以在github上找到:https://github.com/Microso
  • 发表于 2018-02-20 | 更新于...盘点几款在无人驾驶研究中可以使用的开源模拟平台,包括Carla、AirSim、Udacity self-driving car simulator、Apollo、Autoware。 个人研究无人驾驶的门槛确实挺高,一方面是由于无...
  • 自动驾驶是目前比较热门的话题,包含的技术领域五花八门,例如:雷达、摄像头、汽车电控、激光雷达、物体识别、高精度地图、导航技术等等。让我们一起来聊一聊 MathWorks 这几年的自动驾驶之路,分享最新的技术投入...
  • 基于Unreal游戏引擎的lidar传感器仿真及场景重建(混合点云) <912285@163.com> 目的: 自动驾驶中激光雷达传感器非常重要,是感知的重要数据来源。3D感知模块的开发和测试过程中需要大量的标注好的点云数据...
  • 将静态场景转换成一个动态的场景, 完成基本的需求.
  • 无人驾驶模拟器 现在有关汽车的模拟器非常多,但是我们能用的可能还是比较少的。 首先是本次寻找模拟器的需求: 环境能够自己修改,自行添加车辆、行人等,运动物体的速度可以自己修改或者不修改也行. 能够得到每个...
  • 自动驾驶显示平台

    2020-01-19 16:33:18
    数据展示 数据类型 车道模型: 车道线 车道中心线 路边界 车道连接线 车道属性变化,比如roadid、Laneid 曲率、坡度、航向 道路部件: ...自动驾驶领域代表平台 下面是目前主流的平台 Udacity...
  • AirSim是一个依托于Unreal Engine的无人机模拟器(项目Github地址),将来还将有望能应用在无人驾驶汽车上。它是一个Unreal插件,能够被安插在任何Unreal系统中。AirSim是一个开源项目,它有良好的平台延展性(即...
  • 自动驾驶工具箱 设计,模拟和测试ADAS和自动驾驶系统 自动驾驶工具箱™提供用于设计,模拟和测试ADAS和自动驾驶系统的算法和工具。 您可以设计和测试视觉和激光雷达感知系统,以及传感器融合,路径规划和车辆...
  • 自动驾驶仿真软件列表 目前做的比较好的自动驾驶仿真平台的列表和个人评价,仅供参考 点击名称进入官网/github主页 列表的分类基于仿真软件的基础构架 不另外说明的话,都是可在Windows上使用的 自动驾驶仿真...
  • MATLAB 自动驾驶工具箱( Automated Driving Toolbox)简介1 概况2 功能2.1 真值打标签(Ground Truth Labeling)2.1.1 自动打标签2.1.2 测试感知算法2.2 驾驶场景仿真(Driving Scenario Simulation)2.2.1长方体...
  • CARLA是用于自动驾驶研究的开源模拟器。CARLA是从零开始开发的,旨在支持自动驾驶系统的开发,训练和验证。除了开源代码和协议,CARLA还提供了为此目的而创建且可以免费使用的开放数字资产(城市布局,建筑物,车辆...
  • 51Sim One自动驾驶仿真平台,试用版可以申请使用了。 https://wj.qq.com/s2/3355632/0aa4/ 51Sim-One自动驾驶仿真平台 51Sim-One 51SimOne自动驾驶仿真平台 4月22日 51Sim-One是51VR自主研发的一款集多传感器...
  • 简介CARLA 的开发包括从最基础的直到支持城市自动驾驶系统的开发、训练和验证。 除了开源代码和协议,CARLA 还提供了为自动驾驶创建的开源数字资源(包括城市布局、建筑以及车辆),这些资源都是可以免费获取和使用...
1 2 3 4 5 ... 8
收藏数 144
精华内容 57
关键字:

unreal 驾驶模拟