相关商品
AS-6DOF 铝合金机械臂 6自由度 机械手 Arduino实验教学平台
本店售价:¥1049.00
Robonova-2 金刚战士 Metal fighter 春晚舞蹈机器人 人形机器人
本店售价:¥9800.00
6WD 铝合金搜救机器人平台 小车 75:1 轮式机器人平台
本店售价:¥1890.00
AS-6DOF 铝合金机械臂 6自由度 机械手 Arduino实验教学平台 含32路舵机控制部分
本店售价:¥1435.00
Arduino 4WD 移动机器人平台 铝合金小车(黑色) 电子大赛
本店售价:¥209.00
Arduino 4WD 移动机器人平台 铝合金小车电子大赛(12V 100R 金属电机)
本店售价:¥298.00
Arduino RP5履带机器人 寻线避障DIY套件 电子竞赛 机器人教学
本店售价:¥719.00
Arduino 4WD移动机器人平台 铝合金小车(金色) 电子大赛
本店售价:¥209.00
Arduino 4WD 移动机器人平台 铝合金小车(12V 200R金属电机)电子大赛
本店售价:¥298.00
Arduino 4WD轻量型移动平台 小车 电子设计竞赛 4轮驱动
本店售价:¥198.00
Arduino 越野履带机器人平台 路虎5底盘 电子大赛力荐
本店售价:¥188.00
Arduino-Rover路虎5越野履带机器人寻线避障套件 电子大赛力荐
本店售价:¥749.00
AS-6DOF 铝合金机械臂 6自由度机械手 Arduino机器人制作指南套件
本店售价:¥1530.00
二自由度 RB-421舵机云台 长U型舵机支架 Arduino 机器人关节
本店售价:¥179.80
奥松机器人 4WD铝合金移动小车 Arduino开发平台 编程玩具 新品
本店售价:¥398.00
大谷蓝牙小车BT Car/Android Car手机控制 重力控制小车 安卓操控小车
本店售价:¥198.00
Tamiya履带 轮式 套件 田宫模型 机器人配件 原装进口
本店售价:¥85.00
Arduino 4WD 移动机器人平台 铝合金小车(银色) 电子大赛
本店售价:¥209.00
2WD轻量型移动机器人 Arduino移动平台 程控小车 电子大赛
本店售价:¥149.00
Bioloid Humanoid Robotis Kit 18自由度模块机器人 原装完整版
本店售价:¥9800.00
太阳能机器人 3合1 创意玩具 教育化机器人 机器人教学
本店售价:¥30.00
大瓦力
本店售价:¥25.00
机器人瓦力公仔 WALL-E 12.5cm公仔 玩具总动员 机器人公仔 玩具
本店售价:¥12.00
2自由度舵机云台 HS-311 Arduino 机器人关节 摄像头
本店售价:¥199.00
机器人 i-SOBOT 爱索宝 娱乐/人形机器人 带遥控 保质实体现货
本店售价:¥1999.00
RP5履带车 支撑板 Arduino控制器 驱动器 安装板 变形金刚风格
本店售价:¥49.80
Arduino 越野履带机器人 路虎5 Rover小车 2驱2码盘测速 电子大赛
本店售价:¥236.00
Arduino 越野履带机器人 路虎5 Rover小车 4驱4码盘测速 电子大赛
本店售价:¥284.00
AS-4WD语音识别移动机器人
本店售价:¥2124.00
AS-5DOF 5自由度铝合金机械手 多自由度机械臂 Arduino实验教学平台
本店售价:¥779.00
Arduino 小车 2WD套件D版 UNO R3套件 寻线避障套件 电子竞赛
本店售价:¥1450.00
AS-4WD移动侦测避障机器人 超声波测距 Arduino 机器人入门套件(预售)
本店售价:¥922.00
盈佳电动玩具狗 万向遥控灯光音乐壁障功能
本店售价:¥58.00
二自由度RB-150MG舵机云台 银色长U型舵机支架 Arduino机器人关节
本店售价:¥252.00
DIY拼装蜘蛛机械人 电动爬行蜘蛛 电子宠物机器人 电子益智玩具
本店售价:¥35.00
RQ HUNO机器人 RoboBuilder 新款人形机器人 全新韩国原装进口
本店售价:¥4300.00
二自由度RB-150MG舵机云台 银色短U型舵机支架 Arduino机器人关节
本店售价:¥248.00
Zumo Robot for Arduino 履带机器人 Pololu原装进口 含减速电机
本店售价:¥915.00
Pololu 3pi Robot 轮式机器人 寻线 智能小车 Pololu 原装进口
本店售价:¥1499.00
二自由度RB-150MG舵机云台 金色斜U型舵机支架 Arduino机器人关节
本店售价:¥252.00
二自由度RB-150MG舵机云台 银色斜U型舵机支架 Arduino机器人关节
本店售价:¥252.00
二自由度RB-65PG舵机云台 金色斜U型舵机支架 Arduino机器人关节
本店售价:¥146.00
二自由度RB-65PG舵机云台 银色斜U型舵机支架 Arduino机器人关节
本店售价:¥146.00
二自由度RB-65PG舵机云台 金色长U型舵机支架 Arduino机器人关节
本店售价:¥146.00
二自由度RB-65PG舵机云台 银色长U型舵机支架 Arduino机器人关节
本店售价:¥146.00
二自由度RB-65PG舵机云台 银色短U型舵机支架 Arduino机器人关节
本店售价:¥143.00
二自由度RB-65PG舵机云台 金色短U型舵机支架 Arduino机器人关节
本店售价:¥143.00
【创客学堂】基于Kinect的实例教程及硬件介绍(三)
编辑:Xtm2014-08-04 浏览次数:772
上篇文章我们介绍了SimpleOpenNI开发平台搭建,今天小编继续为大家讲解用kinect绘制深度图与绘制人体躯干实例具体操作过程!
一 、用kinect绘制深度图
Kinect+OpenNI允许用户获得深度图像,一个红外发射头负责发射红外,另一个负责接受,这样的话我们就获得了背影射物体离摄像头有多少个像素点,也就是有多远。
在processing里面每一个工程被称为sketch而不是一般软件的Project因为Processing的程序运行起来更像是画家在纸上画的草图,素描风明显。
为了让深度图在电脑上显示出来,获得用户想要的数据,我们就必须导入OpenNI,目的是导入打包好OpenNI数据,所以 首先导入数据包(库的思想).
--------------------------------------------------------
import SimpleOpenNI.*;
---------------------------------------------------------
接下来我们声明一个全局对象,context来和Kinect来取得数据联系
--------------------------------------------------------
SimpleOpenNI context;
---------------------------------------------------------
接下来我们来看看setup()函数,要知道一个事情,就是setup()函数里面所有的内容只执行一遍,而且只是程序一开始的阶段才被执行。
--------------------------------------------------------
void setup()
{
// 建立新的对象
context = new SimpleOpenNI(this);
// 使能深度影响
context.enableDepth();
// 创建一个这样的尺寸,它可以保证装下深度的一切信息
size(context.depthWidth(), context.depthHeight());
}
---------------------------------------------------------
接下来我们来看一下Draw()里面的 函数,有关于draw()函数,它是无限循环运行的,频率是每秒60次。
-------------------------------------------------------
void draw()
{
//不断更新来自Kinect Camera的数据
context.update();
// 绘制深度图
image(context.depthImage(),0,0);
}
---------------------------------------------------------
Context.update()函数对每一帧的数据都有更新动作
运行sketch 的结果如图所示:
代码解析如下:
import SimpleOpenNI.*;
SimpleOpenNI context;
void setup()
{
// instantiate a new context
context = new SimpleOpenNI(this);
// enable depth image generation
context.enableDepth();
// create a window the size of the depth information
size(context.depthWidth(), context.depthHeight());
}
void draw()
{
// update the camera
context.update();
// draw depth image
image(context.depthImage(),0,0);
}
---------------------------------------------------------------------
如果知道了深度信息,你有什么想法?
这个问题很值得在这里,仔细的思考一下,你打算做点什么?
或者是现在你没有太多想法,但是接下来的案例中我要求你必须有自己的想法,就算不会码代码。
二、 绘制人体躯干
首先呢,先要普及一下知识,有关于3D空间距离计算的知识,
在三D空间里,距离的计算,和我们在高中学得向量计算是一个道理的,下面从2D空间说起:
X1=2 X2=9
直线由两个点构成,坐标如上图已给出.
----------------------------------(直角三角形关系)
--------------------------------(a的坐标距离表示)
---------------------------------(b的坐标距离表示)
--(同样符合三角形边的关系)
--------(过渡到2D空间距离)
关键就是3D空间距离,多加了一个Z坐标
上面那个公式就是3D空间里点之间里的公式。
那么怎么在代码里实现计算3D空间两点间距离。
首先,定义一个新的函数
distances3D( )
void distance3D(PVector point1, PVector point2)
{
}
在函数里面首先我们要添加一些变量来储存x,y 和 z 的值,我们还需要一个变量来储存最终的结果也就是返回值
float diff_x, diff_y, diff_z; // 储存x,y,z的值
float distance; // 来储存最后的返回值(结果也就是距离)
接下来计算两个点之间的x,y,z的差值
diff_x = point1.x - point2.x;
diff_y = point1.y - point2.y;
diff_z = point1.z - point2.z;
之后就是简单的计算
return distance; // return the distance as a float
整理之后的代码就是:
float distance3D(PVector point1, PVector point2
){
float diff_x, diff_y, diff_z;
float distance;
diff_x = point1.x - point2.x;
diff_y = point1.y - point2.y;
diff_z = point1.z - point2.z;
distance = sqrt(pow(diff_x,2)+pow(diff_y,2)+pow(diff_z,2));
return distance;
}
写好程序之后,运行结果就是这个深度图与人体躯干的形态,其中黑色是后加工的,人体颜色也是加工过的。
三、望有所思
看完这个例子千万别无动于衷,这回你一定要有好的想法,比如你想获得键盘映射、操控键盘、获得鼠标映射、控制鼠标、或者是直接获得图形映射和控制图形变化,或许你能写出个好玩的游戏。
这个话题先放一放,贪吃蛇的平台移植会很简单,所以以后我们一定要试一试,最终的结果就是:用手势控制蛇的运动方向从而控制蛇去吃更多的食物。
基础教程这里做一个完结,基础教程完毕。请期待下几期的更新!
用户评价
暂时还没有任何用户评论