相关商品

  • AS-6DOF 铝合金机械臂 6自由度 机械手 Arduino实验教学平台
  • Robonova-2 金刚战士 Metal fighter 春晚舞蹈机器人 人形机器人
  • 6WD 铝合金搜救机器人平台 小车 75:1 轮式机器人平台
  • AS-6DOF 铝合金机械臂 6自由度 机械手 Arduino实验教学平台 含32路舵机控制部分
  • Arduino 4WD 移动机器人平台 铝合金小车(黑色) 电子大赛
  • Arduino 4WD 移动机器人平台 铝合金小车电子大赛(12V 100R 金属电机)
  • Arduino RP5履带机器人 寻线避障DIY套件 电子竞赛 机器人教学
  • Arduino 4WD移动机器人平台 铝合金小车(金色) 电子大赛
  • Arduino 4WD 移动机器人平台 铝合金小车(12V 200R金属电机)电子大赛
  • Arduino 4WD轻量型移动平台 小车 电子设计竞赛 4轮驱动
  • Arduino 越野履带机器人平台 路虎5底盘 电子大赛力荐
  • Arduino-Rover路虎5越野履带机器人寻线避障套件 电子大赛力荐
  • AS-6DOF 铝合金机械臂 6自由度机械手 Arduino机器人制作指南套件
  • 二自由度 RB-421舵机云台 长U型舵机支架 Arduino 机器人关节
  • 奥松机器人 4WD铝合金移动小车 Arduino开发平台 编程玩具 新品
  • 大谷蓝牙小车BT Car/Android Car手机控制 重力控制小车 安卓操控小车
  • Tamiya履带 轮式 套件 田宫模型 机器人配件 原装进口
  • Arduino 4WD 移动机器人平台 铝合金小车(银色) 电子大赛
  • 2WD轻量型移动机器人 Arduino移动平台 程控小车 电子大赛
  • Bioloid Humanoid Robotis Kit 18自由度模块机器人 原装完整版
  • 太阳能机器人 3合1 创意玩具 教育化机器人 机器人教学
  • 大瓦力
    大瓦力 本店售价:¥25.00
  • 机器人瓦力公仔 WALL-E 12.5cm公仔 玩具总动员 机器人公仔 玩具
  • 2自由度舵机云台 HS-311 Arduino 机器人关节 摄像头
  • 机器人 i-SOBOT 爱索宝 娱乐/人形机器人 带遥控 保质实体现货
  • RP5履带车 支撑板 Arduino控制器 驱动器 安装板 变形金刚风格
  • Arduino 越野履带机器人 路虎5 Rover小车 2驱2码盘测速 电子大赛
  • Arduino 越野履带机器人 路虎5 Rover小车 4驱4码盘测速 电子大赛
  • AS-4WD语音识别移动机器人
    AS-4WD语音识别移动机器人 本店售价:¥2124.00
  • AS-5DOF 5自由度铝合金机械手 多自由度机械臂 Arduino实验教学平台
  • Arduino 小车 2WD套件D版 UNO R3套件 寻线避障套件 电子竞赛
  • AS-4WD移动侦测避障机器人 超声波测距 Arduino 机器人入门套件(预售)
  • 盈佳电动玩具狗 万向遥控灯光音乐壁障功能
  • 二自由度RB-150MG舵机云台 银色长U型舵机支架 Arduino机器人关节
  • DIY拼装蜘蛛机械人 电动爬行蜘蛛 电子宠物机器人 电子益智玩具
  • RQ HUNO机器人 RoboBuilder  新款人形机器人  全新韩国原装进口
  • 二自由度RB-150MG舵机云台 银色短U型舵机支架 Arduino机器人关节
  • Zumo Robot for Arduino 履带机器人 Pololu原装进口 含减速电机
  • Pololu 3pi Robot 轮式机器人 寻线 智能小车 Pololu 原装进口
  • 二自由度RB-150MG舵机云台 金色斜U型舵机支架 Arduino机器人关节
  • 二自由度RB-150MG舵机云台 银色斜U型舵机支架 Arduino机器人关节
  • 二自由度RB-65PG舵机云台 金色斜U型舵机支架 Arduino机器人关节
  • 二自由度RB-65PG舵机云台 银色斜U型舵机支架 Arduino机器人关节
  • 二自由度RB-65PG舵机云台 金色长U型舵机支架 Arduino机器人关节
  • 二自由度RB-65PG舵机云台 银色长U型舵机支架 Arduino机器人关节
  • 二自由度RB-65PG舵机云台 银色短U型舵机支架 Arduino机器人关节
  • 二自由度RB-65PG舵机云台 金色短U型舵机支架 Arduino机器人关节
  • 当前位置: 首页 > 应用教程 > 【创客学堂】基于Kinect的实例教程及硬件介绍(三)

    【创客学堂】基于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 的结果如图所示: 
    运行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)
    {
    }
     
    在函数里面首先我们要添加一些变量来储存xyz 的值,我们还需要一个变量来储存最终的结果也就是返回值
      float diff_x, diff_y, diff_z;    // 储存x,y,z的值
      float distance;                 // 来储存最后的返回值(结果也就是距离)
     
     接下来计算两个点之间的xyz的差值
     
     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; 
    }
    写好程序之后,运行结果就是这个深度图人体躯干的形态,其中黑色是后加工的,人体颜色也是加工过的。
     运行成功

    三、望有所思

        看完这个例子千万别无动于衷,这回你一定要有好的想法,比如你想获得键盘映射操控键盘获得鼠标映射控制鼠标、或者是直接获得图形映射和控制图形变化,或许你能写出个好玩的游戏。
        这个话题先放一放,贪吃蛇的平台移植会很简单,所以以后我们一定要试一试,最终的结果就是:用手势控制蛇的运动方向从而控制蛇去吃更多的食物。
        基础教程这里做一个完结,基础教程完毕。请期待下几期的更新!
                  基于Kinect的实例教程及硬件介绍(二)            

     

    • 用户评价

    暂时还没有任何用户评论

    总计 0 个记录,共 1 页。 第一页 上一页 下一页 最末页
    用户名: 匿名用户
    E-mail:
    评价等级:
    评论内容:
    验证码:
    captcha

    Hi,大家好,我是小奥!

    欢迎来到奥松机器人的世界!

    需要咨询服务请点小奥哦!

    • 销售咨询: 销售咨询
    • 销售咨询: 销售咨询
    • 技术支持: 技术支持
    • 咨询电话:
      0451-86628691
    Top