精华内容
下载资源
问答
  • 解决float浮动元素不占据位置

    千次阅读 2020-08-18 16:36:02
    1、利用after 设置div .clearfix:after { content: ''; display: block; clear: both; visibility: hidden ; } 2、利用overflow 设置div, div { overflow: hidden; } 3、利用clearn 浮动元素后添加div ...}

    1、利用after

    设置div

    .clearfix:after {
    	content: '';
    	display: block;
    	clear: both;
    	visibility: hidden ;
    }
    

    2、利用overflow

    设置div,

    div {
    	overflow: hidden;
    }
    

    3、利用clearn

    浮动元素后添加div

    div {
    	clear:both
    }
    
    展开全文
  • 让div占据父元素剩下的所有位置

    万次阅读 2019-05-15 14:44:35
    场景模拟: 现在有一个父容器,里面有俩个div,左边的要给一个固定的200px的宽度,父容器剩下的宽度都归右边的div该怎么完成? ...<div class="wrap"> <div class="left"><.../div>...

    场景模拟:

    现在有一个父容器,里面有俩个div,左边的要给一个固定的200px的宽度,父容器剩下的宽度都归右边的div该怎么完成?
    HTML代码:

    <div class="wrap">
        <div class="left"></div>
        <div class="right">CSDN吴小迪</div>
    </div>
    

    解决问题的方法:

    一:CSS3弹性盒

    CSS代码:

    .wrap{
       display: flex;
       background: green;
    }
    .left{
       height: 100px;
       width: 200px;
       background: yellow;
    }
    .right{
       height: 100px;
       flex: 1;
       background: orangered;
    }
    
    二:给左边元素一个浮动

    CSS代码:

    .left{
    	height: 100px;
        width: 200px;
        background: yellow;
        float: left;
    }
    .right{
        height: 100px;
        background: orangered;
    }
    

    俩个代码实现的效果是一样的,效果图如下:
    在这里插入图片描述

    展开全文
  • 生成对抗网络在深度学习中占据非常重要的位置.pdf
  • 今天用Chrome DevTool中Timeline的帧模式查看网页的性能,发现一个让我很迷惑的问题,如下:我们知道,上图中的柱状体代表了每一帧所用的时间,高度越大,时间越长(其中30/60...从分析结果可知,这些透明的部分占据

    今天用Chrome DevTool中Timeline的帧模式查看网页的性能,发现一个让我很迷惑的问题,如下:

    Timeline面板

    我们知道,上图中的柱状体代表了每一帧所用的时间,高度越大,时间越长(其中30/60fps的基准线分别对应着33.3ms和16.6ms),而其中的透明部分,则代表刷新周期中空闲的部分(idle)。

    透明的部分是空闲

    我的疑惑是,透明的idle部分,为什么不能利用起来渲染下一帧呢?从分析结果可知,这些透明的部分占据了绝大部分,以至于大部分时间fps均在30以下。

    思考良久都无法解释这个现象,于是打算去stackoverflow提问,发现已经有人提问过这个问题:http://stackoverflow.com/questions/23166435/large-idle-bars-in-chrome-dev-tools-frames-timeline

    采纳的答案如下

    Drawing shapes to a canvas is apparently computationally expensive, and must fall under “activity that was not instrumented by DevTools.” I solved my performance issue by first drawing shapes to an offscreen canvas cache, then using drawImage to copy back to the main canvas.

    大意是canvas的渲染是很复杂的过程,这个过程不能被DevTool完整地检测到。

    显然这个回答也不够确切,如果有朋友对这个问题有了解,可留言与我交流。

    展开全文
  • 论文研究-占据合作网络切割点位置与关键研发者创造力.pdf, 以往研究大多集中于分析个体关联关系,自我中心网或整体网这三个层面的静态特征对关键研发者创造力的作用机制...
  • <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">...meta name="viewport" content="width=device-width, initial-scale=1.0">...分明span中没东西却占据位置
  • 当text长度小于hint时,SmartHintTextView右方不会占据多余的位置。 举个栗子 博客 Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the ...
  • 占据栅格地图构建(Occupancy Grid Map)

    千次阅读 多人点赞 2020-10-13 00:57:19
    占据栅格地图构建(Occupancy Grid Map) 上一篇文章介绍了,移动机器人地图构建问题,主要以gmapping为例,讲解了地图构建的整个流程。看过前面文章的小伙伴肯定都知道,gmapping算法把SLAM问题分解成两个部分,...

    占据栅格地图构建(Occupancy Grid Map)

    上一篇文章介绍了,移动机器人地图构建问题,主要以gmapping为例,讲解了地图构建的整个流程。看过前面文章的小伙伴肯定都知道,gmapping算法把SLAM问题分解成两个部分,定位问题和地图构建问题。而gmapping中的地图构建就是采用占据栅格地图构建算法实现的。

    之前文章:https://blog.csdn.net/zhao_ke_xue/article/details/108944811

    之前一直说地图构建问题是个简单问题,但它真的十分有用。懂了占据栅格地图构建算法,就意味着SLAM问题不再是抽象的理论公式,它变成了浮现在你我脑海里的动态构建过程。这将对我们完整理解各种激光SLAM算法起着十分重要的作用。

    image-20201012155653393

    1、地图的分类

    移动机器人常见的地图有三种:尺度地图、拓扑地图、语义地图。

    image-20201012163652699

    尺度地图:具有真实的物理尺寸,如栅格地图、特征地图、点云地图;常用于地图构建、定位、SLAM、小规模路径规划。

    拓扑地图:不具备真实的物理尺寸,只表示不同地点的连通关系和距离,如铁路网,常用于超大规模的机器人路径规划。

    语义地图:加标签的尺度地图,公认SLAM的未来–SLAM和深度学习的结合,常用于人机交互。

    其中对尺度地图进行补充说明,如下图所示。

    image-20201012171710015

    2、占据栅格地图构建算法

    顾名思义,占据栅格地图构建算法当然构建的是栅格地图。

    2.1、为什么使用占用栅格地图构建算法构建地图?

    在开始讲解之前,我们要明确一些事情。

    第一,构建栅格地图需要使用激光雷达传感器。

    第二,激光雷达传感器是有噪声存在的,通俗的说,“不一定准”

    举个例子,机器人在同一位姿下的不同时刻,通过激光雷达对一个固定的障碍物的探测距离不一致,一帧为5m,一帧为5.1m,我们难道要把5m和5.1m的位置都标记为障碍物?这也就是使用占据栅格地图构建算法的原因。

    2.2、什么是占据栅格地图构建算法?

    为了解决这一问题,我们引入占据栅格地图(Occupancy Grid Map)的概念。我们将地图栅格化,对于每一个栅格的状态要么占用,要么空闲,要么未知(即初始化状态)。

    image-20201012175433660

    关于占据栅格地图构建算法的引出、推导、演化,从下面的图片得出。(哈哈,图省事,在word里推导的)

    image-20201012225630926

    image-20201012225810841

    image-20201012225943012

    image-20201012230042062

    2.3、举个例子验证占据栅格地图构建算法

    首先,我们假设 looccu = 0.9,lofree = -0.7。那么,显而易见,一个栅格状态的数值越大,就越表示该栅格为占据状态,相反数值越小,就表示改栅格为空闲状态。(这也就解决了此前文中提出的激光雷达观测值"不一定准"的问题)

    image-20201012231231222

    上图是用两次激光扫描数据更新地图的过程。在结果中,颜色越深越表示栅格是空闲的,颜色越浅越表示是占据的。这里要区分常用的激光SLAM算法中的地图,只是表述方式的不同,没有对错之分。

    3、如何通过激光数据构建栅格地图?

    3.1、算法核心依据

    通过上述的讲解,你是否了抓住算法实现的的重要依据是什么?要是没有,你就要反思一下自己是否仔细读了这篇文章?

    显然,整篇文章得出的一个结论就是下图所示,这里假设lofree和looccu为确定的数值,一般情况下一正一负。

    image-20201012232519649

    然后,我们通过激光雷达数据栅格进行判断,如果判定栅格是空闲,就执行上面公式;如果判定栅格是占据,就执行下面的公式。在经过许多帧激光雷达数据的洗礼之后,每一个栅格都存储了一个值,此时我们可以自己设定阈值与该值比较,来做栅格最终状态的判定。

    3.2、算法输入数据

    激光雷达数据包(每个扫描点包含角度(逆时针为正方向)和距离,每帧激光数据包含若干扫描点,激光雷达数据包包含若干帧激光雷达数据)

    机器人位姿数据包(每一个位姿包含世界坐标系下的机器人位置和航向角,初始航向角与世界坐标系X轴正方向重合,逆时针为正方向)

    地图参数(需要构建地图的高度和宽度,构建地图的起始点,lofree和looccu的设定值,地图的分辨率)

    假设激光雷达坐标系和机器人坐标系重合

    3.3、算法步骤

    这里以处理第一帧激光雷达为例,从上向下依次介绍。

    (1)读取一帧激光雷达数据和该帧对应的机器人位姿

        //获取每一帧的激光雷达、机器人位姿数据
        GeneralLaserScan scan = scans[i];
        Eigen::Vector3d robotPose = robot_poses[i];
    

    (2)计算该帧机器人位置的栅格序号

        //获取该帧机器人位姿的栅格序号
        GridIndex robotIndex = ConvertWorld2GridIndex(robotPose(0),robotPose(1));
    

    即从世界坐标系转入栅格坐标系,每个栅格序号有x,y两个数字。这里与地图分辨率有关,比如说:地图分辨率为0.05,也就是1m用20个栅格表示。

    例如:世界坐标系下机器人位置(1,1)对应栅格坐标系的(20,20)。

    注意:世界坐标系与像素坐标系区分开来,他们之间的y轴方向相反,其他都一致,地图的显示使用的像素坐标系(栅格坐标系)。

    (3)遍历该帧激光雷达数据的所有扫描点执行以下操作

    计算每一个激光点击中栅格在像素坐标系下的栅格序号

          //明确这里的世界坐标系world_x,不是真实的世界坐标系,而是像素坐标系,y轴与真实的世界坐标系相反,这样是laser_y加负号的原因
          double laser_x =   dist * cos(theta + angle);
          double laser_y =  -dist * sin(theta + angle);
    
          //得到该激光扫描点,在世界坐标系下(像素坐标系下)的位置
          double world_x = laser_x + robotPose(0);
          double world_y = laser_y + robotPose(1);
    
          //将该激光扫描点在世界坐标系下的位置,转化为栅格序号
          GridIndex mapIndex = ConvertWorld2GridIndex(world_x,world_y);
    

    image-20201013003218328

    从当前机器人位姿的栅格序号到该激光扫描点的栅格序号划线,找出所有空闲的栅格序号

          //从机器人的栅格序号到该激光扫描点的栅格序号划线
          //目的:找到两点之间途径的空闲栅格,将栅格序号存入std::vector<GridIndex>中
          std::vector<GridIndex> freeIndex = TraceLine(robotIndex.x,robotIndex.y,mapIndex.x,mapIndex.y);
    

    image-20201013001705858

    遍历所有空闲的栅格更新空闲栅格状态

          data += mapParams.log_free;//log_free=-1,data将变小
    

    更新该激光扫描点击中的栅格状态

          data += mapParams.log_occ;//log_occ=2,data将变大
    

    (4)结束

    4、占据栅格地图构建算法c++实现

    这里分享核心代码,具体算法功能包,可在公众号:小白学移动机器人,发送:栅格地图,即可获得。

    本算法功能包,给出了详细的中文注释,是提升c++编程技能的阅读良品。

    //占据栅格地图构建算法
    //输入激光雷达数据和机器人位姿数据
    //目的:通过遍历所有帧数据,为pMap[]中的每个穿过的空闲栅格或者击中栅格赋新值,中间有个计算方法,也就是占用栅格地图构建的理论实现
    void OccupanyMapping(std::vector<GeneralLaserScan>& scans,std::vector<Eigen::Vector3d>& robot_poses)
    {
      std::cout <<"Scans Size:"<<scans.size()<<std::endl;
      std::cout <<"Poses Size:"<<robot_poses.size()<<std::endl;
    
      //遍历所有帧激光雷达数据
      for(int i = 0; i < scans.size();i++)
      {
        //获取每一帧的激光雷达、机器人位姿数据
        GeneralLaserScan scan = scans[i];
        Eigen::Vector3d robotPose = robot_poses[i];
    
        //获取该帧机器人位姿的栅格序号
        GridIndex robotIndex = ConvertWorld2GridIndex(robotPose(0),robotPose(1));
    
        //判断该帧机器人位姿的栅格序号,是否在自己设定的栅格地图范围内
        if(isValidGridIndex(robotIndex) == false) continue;
      
        //遍历该帧激光雷达数据所有扫描点
        for(int id = 0; id < scan.range_readings.size();id++)
        {
          //取出该激光雷达扫描点的距离和角度
          double dist = scan.range_readings[id];
          double angle = scan.angle_readings[id];
          //剔除异常数据,跳过该次循环,不作处理
          if(std::isinf(dist) || std::isnan(dist)) continue;
          //机器人航向角,机器人x轴与世界坐标系x轴夹角
          double theta = robotPose(2);
    
          //在旋转过后(与世界坐标系(像素坐标系下)平行)的激光雷达坐标系下的坐标x,y
          //该开始一直不理解这个为啥laser_y要加一个负号
          //明确激光雷达数据的角度逆时针变化
          //明确机器人航向角与世界坐标系x轴呈逆时针变化
          //明确这里的世界坐标系world_x,不是真实的世界坐标系,而是像素坐标系,y轴与真实的世界坐标系相反,这样是laser_y加负号的原因
          double laser_x =   dist * cos(theta + angle);
          double laser_y =  -dist * sin(theta + angle);
    
          //得到该激光扫描点,在世界坐标系下(像素坐标系下)的位置
          double world_x = laser_x + robotPose(0);
          double world_y = laser_y + robotPose(1);
    
          //将该激光扫描点在世界坐标系下的位置,转化为栅格序号
          GridIndex mapIndex = ConvertWorld2GridIndex(world_x,world_y);
    
          //判断该激光扫描点的栅格序号,是否在自己设定的栅格地图900x900范围内,如果不在则跳过
          if(isValidGridIndex(mapIndex) == false)continue;
    
          //从机器人的栅格序号到该激光扫描点的栅格序号划线
          //目的:找到两点之间途径的空闲栅格,将栅格序号存入std::vector<GridIndex>中
          std::vector<GridIndex> freeIndex = TraceLine(robotIndex.x,robotIndex.y,mapIndex.x,mapIndex.y);
    
          //遍历该扫描激光点通过的所有空闲栅格
          for(int k = 0; k < freeIndex.size();k++)
          {
            GridIndex tmpIndex = freeIndex[k];
            //将空闲栅格的栅格序号,转化到数组序号,该数组用于存储每一个栅格的数据
            int linearIndex = GridIndexToLinearIndex(tmpIndex);
            //取出该栅格代表的数据
            int data = pMap[linearIndex];
            //根据栅格空闲规则,执行data += mapParams.log_free;
            if(data > 0)//默认data=50
              data += mapParams.log_free;//log_free=-1,data将变小
            else
              data = 0;
            //给该空闲栅格赋新值,最小为0
            pMap[linearIndex] = data;
          }
          //更新该激光扫描点集中的栅格,
          int tmpIndex = GridIndexToLinearIndex(mapIndex);
          int data = pMap[tmpIndex];
          //根据栅格击中规则,执行data += mapParams.log_occ;
          if(data < 100)//默认data=50
            data += mapParams.log_occ;//log_occ=2,data将变大
          else
            data = 100;
          //给击中的栅格赋新值,最大100
          pMap[tmpIndex] = data;
          //到这里,对一个位姿下的一个激光扫描数据经过的空闲栅格和击中栅格的pMap进行了重新赋值
        }
        //到这里,对一个位姿下的一帧激光扫描数据经过的空闲栅格和击中栅格进行了重新赋值
      }
      //到这里,对所有帧激光扫描数据经过的空闲栅格和击中栅格进行了重新赋值
    }
    

    以往链接,点击访问。

    上一篇不可错过的gmapping算法使用与详细解释
    下一篇我手写了个SLAM算法!
    系列文章从零搭建ROS机器人

    如果你感觉,我的文章比较适合你,关注我,点个赞,给你不一样的惊喜。

    稿定设计导出-20200810-205521
    在这里插入图片描述

    展开全文
  • 占据栅格地图如何解决动态障碍物

    千次阅读 2020-04-04 10:13:20
    占据栅格地图 在3D点云中,占据概率栅格地图比较常用。一般的概率更新形式有贝叶斯更新,Crartographer中用的就是这种。在别的论文中也看到了其他的更新形式。 对于SLAM而言,动态障碍物的影响体现在匹配和建图两个...
  • /* 你会读到两个字符串,每个字符串占据一行,每个字符串的长度均小于10000字符,而且第一个字符串的长度小于第二个字符串的。 你的程序要找出第一个字符串在第二个字符串中出现的位置,输出这些位置,如果找不到,...
  • 如何让div占据剩余的高度

    千次阅读 2020-01-03 15:25:07
    如何让div占据剩余的高度 1、父级div设置: display: flex; flex-direction: column; 2、设置该div: flex: 1;
  • 这一个因为滚动条占据空间引起的bug, 查了一下资料, 最后也解决了,顺便研究一下这个属性, 做一下总结,分享给大家看看。 正文 昨天, 测试提了个问题, 现象是一个输入框的聚焦提示偏了, 让我修一下, 如下图: ...
  • 占据栅格地图法识别动静态障碍物

    千次阅读 2020-05-03 10:44:48
    关于占据概率栅格检测动静态障碍物的两点思考 三维激光点云创建二维占据栅格所引起的错误 直接将三维投影到二维,点云的分布如下图。其中A点为发射激光的原点,其中1点和2点为同属于一个障碍物上的点,在三维空间...
  • border占据边距的问题

    千次阅读 2016-03-15 20:46:17
    box-sizing 属性允许您以特定的方式定义匹配某个区域的特定元素。  例如,假如您需要并排放置两个带边框的框,可通过将 box-sizing 设置为 "border-box"。这可令浏览器呈现出带有指定宽度和高度的框,并把边框和...
  • 占据栅格地图(Occupancy Grid Map)

    万次阅读 2018-10-15 20:54:04
    写在前面:这篇文章是Coursera上的课程(Robotics: Estimation and Learning),权当笔记,激光传感器的数据可以在课程内下载。... 占据栅格地图的表示方法与更新方法; 利用激光传感器数据构建...
  • 占据栅格地图的表示方法与更新方法;利用激光传感器数据构建占据栅格地图。 1. 机器人地图的分类 地图有很多种表示方式,例如,用经纬度标识地方的世界地图,城市的地铁图,校园...
  • 当把几个组件添加到页面时,即使之前已经设置好了组件的大小和位置,最后一个组件还是会占据整个界面,覆盖其他的组件 比如下面整个程序: labPhoneNum = new JLabel("手机号:"); labPhoneNum....
  • 2020 年 4月份从公布的编程语言来看,占据榜首前十...从图中可以看出,java和C语言还是占据前两名的位置。经过一年时间,java还是榜首的位置,说明java热度一直都未减少。Java和C语言排名占比相差较小,只有0.01%。...
  • 解决方案: 给el-col添加一个透明的border样式 没加border样式时 加了border 样式后 这样就解决了,el-col 没内容时,仍然占据空间.
  • bss段不占据磁盘空间的理解

    千次阅读 多人点赞 2017-04-05 19:23:51
    既然不占据实际的磁盘空间(是指不占据应该分配的内存大小),那么它的大小和符号存在哪呢? .bss 段占据的大小存放在ELF文件格式中的段表(Section Table)中,段表存放了各个段的各种信息,比如段的名字、段的类型...
  • 让padding、border等不占据宽度

    千次阅读 2017-02-22 15:03:10
    box-sizing:border-box;  -moz-box-sizing:border-box; /* Firefox */  -webkit-box-sizing:border-box; /* Safari */
  • TIOBE今日公布了2009年4月的编程语言排行榜,本期前十的榜单与上期相比没明显变化,Java、C、C++依然以绝对优势占据前三甲的位置;排名第四到十位的分别是:PHP、VB、Python、C#、JavaScript、Perl和Ruby。Ruby经过...
  • Win 10装机量占据全球台式机总量的5%

    千次阅读 2015-09-02 06:11:24
    根据NetMarketShare最新市场调研数据,截止8月31日,Win 10全球装机量已经占据了全球台式机总量的5.21%,排名第四。另外,Windows 7占57.67%, Windows XP占 12.14%,Windows 8.1占11.39%,Mac OS占4,76%,而Linux...
  • /** * 设置瀑布流布局中的某个item,独占一行、占一列、占两列、等等 ... * @param position 目标item所在的位置 * @param TARGET_ITEM_TYPE 目标item的条目类型 * @param parentView 该item的整个布局
  • 解决 换行符占据空间

    千次阅读 2016-07-19 13:06:56
    把parent中的font-size 设置为0

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 155,506
精华内容 62,202
关键字:

占据的位置