【制作】打造自己的第一辆体感智能车(基于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
你好,麻烦提供完整代码,[email protected],谢谢
你好,麻烦提供完整代码,[email protected],谢谢 你好,麻烦提供完整代码,[email protected],谢谢
页:
[1]