小志 发表于 2017-12-10 13:49:02

【制作】打造自己的第一辆体感智能车(基于Arduino与Kinect)

本帖最后由 小志 于 2017-12-10 13:50 编辑

在游戏中学会学习,在学习中学会享受。

这个小项目是之前在学校实验室根据奥松论坛的一篇技术贴做的,已成功运行,现在把相关的资料记录下来,便于日后察阅。

大家也可以动手做一下,还是很有意义的,虽然Kinect停产了,网上还是可以买到的。如果你们实验室有Kinect的话,那就太棒了!你可以省一点钱,毕竟这玩意儿还是小贵的。

体感智能车的原理非常的简单,就是利用Kinect采集人体的姿体信息,然后通过蓝牙串口向Arduino发送字符命令。Arduino通过相应的字符命令控制双H桥电机驱动模块实现小车的前进后退等动作。项目主要用到小车底盘套件、蓝牙、控制器等…


1.Arduino实现串口控制小车

下面按照制作过程为大家介绍如何来弄:

首先你得组装一辆4WD小车,小车是纯金属的外壳比较抗撞不容易损坏,亚克力的也行,视自己情况而定。

安装好小车地盘后再小车地盘内部安装双H桥驱动和电池将控制引脚用3P杜邦线接到Arduino上,连接好电源向Arduino内烧录程序(编译软件为Arduino IDE)。



部分代码如下(PS:代码有点长,文章里就不贴全部的代码了,有需要的小伙伴可以在文章末留言,我通过后台发给你):
#definepinI19      //定义I1接口
   #definepinI28      //定义I2接口
   #definespeedpin 10   //定义EA(PWM调速)接口
   #definepinI34      //定义I3接口
   #definepinI45      //定义I4接口
   #definespeedpin1 6   //定义EB(PWM调速)接口
   #define SPEED    150
   char opt = ' ' ;
void setup()
{       Serial.begin(115200);
pinMode(pinI1,OUTPUT);       //初始化电机控制引脚为输出
pinMode(pinI2,OUTPUT);
pinMode(speedpin,OUTPUT);
pinMode(pinI3,OUTPUT);       //初始化电机控制引脚为输出
pinMode(pinI4,OUTPUT);
pinMode(speedpin1,OUTPUT);
}
void loop()
{·······}
·····
程序下载好后安装蓝牙模块,通过串口助手进行测试,确定字符命令可以控制小车。

2.Kinect与Arduino进行串口通信

下面进行Kinect的代码编写,我采用的是processing软件,使用前需要安装Kinectqu驱动OpenNI_NITE_Installer-win32-0.27和kinect的链接库SimpleOpenNI-0.27,(点击“阅读原文”获取下载地址)。

解压驱动包,首先安装OpenNI,然后安装SensorKinect,最后Sensor全部安装完成以后,重启电脑。将你的Kinect连接上电脑插好电源,可以通过查看控制面板中的设备管理器,检查你的电脑是否已经识别Kinect。



驱动安装完成后下载processing软件双击打开,打开后会在我的文档中出现processing文件夹讲下载的库文件SimpleOpenNI-0.27解压后复制到processing下的libraries下如果没有新建一个即可。重新打开processing就可以进行Kenect的程序编写了。

控制小车的代码如下(部分):
import SimpleOpenNI.*;
SimpleOpenNIkinect;
import processing.serial.*;
Serial port;
·····
void setup()
{
   size(640, 600);   
   ·····
   kinect.enableUser(SimpleOpenNI.SKEL_PROFILE_ALL);   
   myFont = createFont("黑体", 32);
   myStr = "····机器人研究所";
   Str_w = "前进";
   ·····
   Str_x = "停止";
   Str_temp_NO = "未识别";
   Str_temp_Yes = "连接成功";   
   ····
   println(Serial.list());//定义串口
   String portName = Serial.list();
   port = new Serial(this, portName, 115200);//波特率
}
void draw()
{
·····
   kinect.getUsers(userList);
   if (userList.size() > 0)
   {
   int userId = userList.get(0);
   onEndCalibration(userId, true);
   if ( kinect.isTrackingSkeleton(userId))
   {
         ·····         
         kinect.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_RIGHT_HAND,right_hand);
         kinect.convertRealWorldToProjective(right_hip, right_hip);            
         kinect.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_HEAD,head);
         kinect.convertRealWorldToProjective(head, head);         
         ·····
      
      /***************************************************************
      
         ellipse(right_hand.x, right_hand.y, 15, 15);
         ****************************************************************/      
// user-tracking callbacks!
void onNewUser(int userId) {
   println("start pose detection");
   kinect.startPoseDetection("Psi", userId);
}
···············
}

这是Kinect捕捉到的人体火柴人图(从网上找了一张示意图):


程序编写完成后连接蓝牙串口(注意没有串口时程序会报错)这样一个体感智能车就制作完成了,接下来你就可以愉快的玩耍了!

有任何问题欢迎留言交流,开始你的学习之旅吧!

PS:如果你觉得本文对你有一点帮助,点赞、转发,不胜感激。
-- END --

Copyright © 2017 Robotkang. 转载请联系作者






扫码关注公众号:ChinanewsTT

分享科技、生活、技术、人生、个人感悟
同时记录个人成长历程
——
个人博客:http://robotkang.cc

suoma 发表于 2017-12-10 14:27:31

你好,麻烦提供完整代码,[email protected],谢谢

ALEXJJ 发表于 2019-12-10 16:11:28


你好,麻烦提供完整代码,[email protected],谢谢

悠然小调 发表于 2019-12-26 08:32:38

你好,麻烦提供完整代码,[email protected],谢谢
页: [1]
查看完整版本: 【制作】打造自己的第一辆体感智能车(基于Arduino与Kinect)