laser

[AR/VR教程] SteamVR Unity工具包(一):概览和控制器事件

烂漫一生 提交于 2020-12-17 14:15:36
Quick Start 快速上手 · Clone this repository git clone https://github.com/thestonefox/SteamVR_Unity_Toolkit.git · Open the SteamVR_Unity_Toolkit within · Import the SteamVR Plugin from the Unity Asset Store · Browse the Examples scenes for example usage of the scripts · 克隆仓库 git clone https://github.com/thestonefox/SteamVR_Unity_Toolkit.git · 用 Unity3d 打开 SteamVR_Unity_Toolkit · 从 Unity 资源商店导入 SteamVR Plugin · 浏览 Examples 场景作为例子来看脚本的用法 Summary 概要 This toolkit provides many common VR functionality within Unity3d such as (but not limited to): 这个工具包提供了很多Unity3d里的常用VR功能,如下(但并不局限于此): · Controller

python入门 -- 学习笔记4

半城伤御伤魂 提交于 2020-11-24 04:42:42
习题38:列表的操作 当你看到像 mystuff.append('hello') 这样的代码时,你事实上已经在 Python 内部激发了一个连锁反应。以下是它的工作原理: 1. Python 看到你用到了 mystuff ,于是就去找到这个变量。也许它需要倒着检查看你有没有在哪里用 = 创建过这个变量,或者检查它是不是一个函数参数,或者看它是不是一个全局变量。不管哪种方式,它得先找到 mystuff 这个变量才行。 2. 一旦它找到了 mystuff ,就轮到处理句点 . (period) 这个操作符,而且开始查看 mystuff内部的一些变量了。由于 mystuff 是一个列表,Python 知道mystuff 支持一些函数。 3. 接下来轮到了处理 append 。Python 会将 “append” 和 mystuff 支持的所有函数的名称一一对比,如果确实其中有一个叫 append 的函数,那么 Python 就会去使用这个函数。 4. 接下来 Python 看到了括号 ( (parenthesis) 并且意识到, “噢,原来这应该是一个函数”,到了这里,它就正常会调用这个函数了,不过这里的函数还要多一个参数才行。 5. 这个额外的参数其实是…… mystuff! 我知道,很奇怪是不是?不过这就是 Python 的工作原理,所以还是记住这一点,就当它是正常的好了

【程序员幽默】CPU新用途:烤肉,倍儿香!

ⅰ亾dé卋堺 提交于 2020-11-08 12:49:34
点击上方 “ 程序员共成长 ”, 选择“置顶或者星标” 你关注的就是我关心的! @IT程序猿 微博网友评论: @王奇迹阿: 当Android studio运行时 ... @类犬的猫: 首先得把硅脂清除干净 @远歌song: 别给电脑加盖了以后 影响排烟 @笨蛋小昕Texas: 加了heat sink我还被烫过手呢 @laser杨万荣: 跑一次Android ROM编译,温度就会直线上升。 - End - 点击 阅读原文 ,领取万元学习资料 本文分享自微信公众号 - Java专栏(finishbug)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“ OSC源创计划 ”,欢迎正在阅读的你也加入,一起分享。 来源: oschina 链接: https://my.oschina.net/u/4057226/blog/4579216

一分钟看懂WDM

余生颓废 提交于 2020-10-29 11:12:54
大家好,我是小枣君。 昨天给大家介绍5G前传的时候,有读者问我,现在经常看到CWDM、DWDM、MWDM、LWDM,这些WDM到底是什么意思,有什么区别。 今天这篇文章,我给大家做一个简要介绍和对比。 WDM,英文全称是 Wavelength Division Multiplexing, 波分复用。它 是将多种不同波长的光信号通过合波器汇合在一起,并耦合到同一根光纤中,以此进行数据传输的技术。 WDM的工作原理 波长×频率=光速(恒定值),所以波分复用其实就是频分复用 简单来说,我们也可以把WDM看作是一个高速公路——不同类型的车辆涌入这条公路,到了目的地之后再分道扬镳。 WDM的作用,就是提升光纤的传输容量,提高光纤资源的利用效率。 对于WDM系统来说,想要让它正常工作,显然要控制各个光信号的波长(频率)。如果波长间隔太短,容易“撞车”。如果波长间隔太长,利用率又很低。 早期的时候,技术条件有限,波长间隔会控制在几十nm。这种比较分散的波分复用,叫做稀疏波分复用,也就是CWDM(Coarse WDM)。 后来,技术越来越先进,波长间隔压得越来越短,到了几nm的级别,就成了紧密的WDM,叫做密集波分复用,就是DWDM(Dense WDM)。 CWDM的波长间隔20nm,波长范围从1270nm 到1610nm,有18个波段。 CWDM 18个波段的中心波长 最开始的时候

Camera系统之ISP综述

左心房为你撑大大i 提交于 2020-10-15 05:04:53
1.ISP位置 ISP(Image Signal Processor),即图像信号处理器,用于处理图像信号传感器输出的图像信号。它在相机系统中占有核心主导的地位,是构成相机的重要设备。 主要内部构成 如下图所示,ISP 内部包含 CPU、SUP IP、IF 等设备,事实上,可以认为 ISP 是一个 SOC,可以运行各种算法程序,实时处理图像信号。 ISP 架构 CPU CPU 即中央处理器,可以运行 AF、LSC 等各种图像处理算法,控制外围设备。现代的 ISP 内部的 CPU 一般都是 ARM Cortex-A 系列的,例如 Cortex-A5、Cortex-A7。 SUB IP SUB IP 是各种功能模块的通称,对图像进行各自专业的处理。常见的 SUB IP 如 DIS、CSC、VRA 等。 图像传输接口 图像传输接口主要分两种,并口 ITU 和串口 CSI。CSI 是 MIPI CSI 的简称,鉴于 MIPI CSI 的诸多优点,在手机相机领域,已经广泛使用 MIPI-CSI 接口传输图像数据和各种自定义数据。外置 ISP 一般包含 MIPI-CSIS 和 MIPI-CSIM 两个接口。内置 ISP 一般只需要 MIPI-CSIS 接口。 通用外围设备 通用外围设备指 I2C、SPI、PWM、UART、WATCHDOG 等。ISP 中包含 I2C 控制器,用于读取 OTP

基于激光雷达的目标跟随功能移植到自己的ROS机器人小车上

回眸只為那壹抹淺笑 提交于 2020-10-05 18:04:00
文章目录 前言 一、下载目标跟随的源码 二、修改话题名称 1.修改/cmd_vel话题名称 2.修改/scan话题名称 3.修改双电机正反转 4.目标跟随功能测试 前言 本人尝试把github上的一个目标跟随项目移植到自己的机器人小车上,并且成功了,最终小车可以跟着人移动,在这里分享一下心得。基于激光雷达的目标跟随,通过获取激光雷达的信息,跟随最近的物体。 一、下载目标跟随的源码 源码地址:https://github.com/rauwuckl/ros_simple_follower 我使用的是ubuntu16.04,把下载好的压缩包解压出ros_simple_follower文件,复制到自己工作空间/src文件夹下,进入到/home/catkin_ws,然后使用catkin_make命令编译功能包。 二、修改话题名称 跟随功能包follow需要发布/cmd_vel话题,底盘控制订阅/cmd_vel速度话题;激光雷达需要发布/scan话题,跟随功能包订阅/scan话题。 1.修改/cmd_vel话题名称 .打开ros_simple_follower功能包,找到follower.py,把话题/cmd_vel/yolo修改为/cmd_vel。(这里要修改为自己机器人小车对应的速度话题名称,在终端启动roscore命令后,新打开一个终端输入rostopic list命令可以查看话题列表)

现实版“镭射眼”!佩戴这款新型隐形眼镜,一个眼神搞定一切

此生再无相见时 提交于 2020-09-27 23:56:06
大数据文摘出品 来源:dailymail 编译:李雷、夏雅薇 最近,法国科学家从X战警的镭射眼身上得到灵感,研发出一种 隐形眼镜 ,可以 发射红色激光束对准佩戴者所看到的物体 。 这款眼镜的原理是在普通尺寸的隐形眼镜上装配了一个垂直腔表面激光发射器(VCSEL),用于向佩戴者观看的方向发射激光。 研究人员使用现成的零部件创建了一个可用于 凝视识别 的眼镜原型。 凝视识别是一个新兴的研究领域,可能成为人工智能的下一个前沿阵地。 凝视识别可以使人们 跨过触摸屏或鼠标来控制电子设备 ,在无需触碰屏幕或按键的情况下即可选择显示器上的选项。 这款内置红外线激光的隐形眼镜命名为“cyclops lens”(镭射眼镜),取自X战警漫画中的著名英雄“镭射眼”。 如图所示,隐形眼镜原型内部的电子设备(左)和人眼佩戴的电子设备(右)。该系统可以被看作是“一种使用红外(iR)激光嵌入式无线智能隐形眼镜的新型眼部跟踪系统” 在设计上,每只眼的隐形镜片外框都安装了 摄像系统 ,用于跟踪人的视线。 来自南斯的法国大西洋高等矿业电信学校的研究人员在一项实验中,将这款隐形眼镜 安装在可旋转的假眼 上,再将一个分束器放置在带了眼镜的假眼前,用于定位两眼分别发出的光束。 研究人员在研究报告中表示:“ 分束器镀了膜 ,可以反射两眼激光点产生的红外光束,同时又对眼睛透明,以避免不必要的反射。” 最后,

ROS中利用V-rep进行地图构建仿真

我们两清 提交于 2020-08-19 13:15:39
V-rep中显示激光扫描点     在VREP自带的场景中找到practicalPathPlanningDemo.ttt文件,删除场景中多余的物体只保留静态的地图。然后在Model browser→components→sensors中找到SICK TiM310 Fast激光雷达,拖入场景中:   打开脚本参数修改器,可以修改雷达扫描范围(默认为270°),是否显示雷达扫描线(true),以及最大探测距离(默认为4m)这三个参数。地图大小为5m×5m,我们将雷达最大探测距离改为2m   将激光雷达放到地图中任意位置,点击仿真按钮可以看到扫描光线(如果电脑比较卡可以将showLaserSegments这个参数设为false,就不会显示扫描线)如下图所示:   SICK_TiM310激光雷达在V-rep中是由两个视角为135°的视觉传感器模拟的,这两个视觉传感器可以探测深度信息:   双击视觉传感器图标,修改Filter中Coordinate Extraction的参数与传感器X/Y方向分辨率一致。X方向默认值为135,即会返回135个数据点,这里要改为256。   我们可以在V-rep中绘制出激光扫描图:在场景中添加一个Graph,将其设为显示处理(Explicit handling),然后添加用户自定义数据x和y:   然后点击Edit XY graphs按钮

DEMO: 一种单目视觉里程计的深度增强方法

混江龙づ霸主 提交于 2020-08-13 14:08:37
点击上方“ 3D视觉工坊 ”,选择“星标” 干货第一时间送达 作者:robot L | 来源:知乎 https://zhuanlan.zhihu.com/p/149349921 本文仅做学术分享,如有侵权,请联系删除。 主要内容 从粗到精的相机自运动估计流程:基于相邻两帧之间的约束进行帧帧位姿估计(相机频率),优化当前帧位姿,得到粗糙的位姿估计;在滑动窗内执行BA,利用窗口内所有约束优化窗口内所有帧的位姿(0.25-1Hz),得到准确的位姿估计。最后融合上述两种估计得到相机频率的准确位姿估计。 亮点 分别使用 稀疏LiDAR点云/深度图片 和 三角化 获得特征点的深度 。 对于 有深度 和 无深度 的特征点,构建两种不同约束共同用于位姿优化。 J. Zhang, M. Kaess, S. Singh. Real-time Depth Enhanced Monocular Odometry . IEEE/RSJ International Conference on Intelligent Robots and Systems , 4973-4980, 2014. J. Zhang, M. Kaess, S. Singh. A real-time method for depth enhanced visual odometry. Autonomous Robots , 41(1),

amcl node.cpp

放肆的年华 提交于 2020-08-09 07:21:03
1.主函数 主函数主要作用是: 定义一个信号变量,管理节点 定义amclNode对象 int main(int argc, char** argv) { ros::init(argc, argv, "amcl"); ros::NodeHandle nh; // Override default sigint handler signal(SIGINT, sigintHandler); // Make our node available to sigintHandler amcl_node_ptr.reset(new AmclNode()); if (argc == 1) { // run using ROS input ros::spin(); } else if ((argc == 3) && (std::string(argv[1]) == "--run-from-bag")) { amcl_node_ptr->runFromBag(argv[2]); } // Without this, our boost locks are not shut down nicely amcl_node_ptr.reset(); // To quote Morgan, Hooray! return(0); } 2.amclNode对象的构造 1.有一个配置相关的递归互斥锁锁 2