虚拟驾驶环境搭建(四)

本文介绍了虚拟驾驶环境中障碍物移动的改进,包括从两侧随机出现的实现。通过需求分析和伪代码,详细阐述了如何避免障碍物骤现和提前消失的问题,以及如何通过按键切换障碍物出现模式。代码实现部分展示了具体的逻辑处理,以确保障碍物的移动更加符合实际驾驶情境。
摘要由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;
            // 刚移动到边界
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值