http://blog.csdn.net/guoming0000/article/details/7075292
ARdrone1.0的程序对于目前的ArDrone2.0支持不完善,接收不到2.0的图像数据! (2012-8-7)
ARDrone2.0的程序也有了(by Demon_su),附在最后。(2012.10.22)
ARDrone1.0
ARDrone1.0 win32源程序配置
ARDrone是法国制造的无人飞机,是个可以飞的玩具,被称为四轴飞行器。如果你不知道这是什么可以百度看看。由于实验室老师对这个新的事物感兴趣,所以买了此飞机(尽然要2000RMB,Kinect都只要800RMB),让我给弄下windows下的飞机程序,也就是用笔记本控制飞机。这样实验室可以把本来的项目和它结合起来做,这会很有趣。使用SDK中的代码发现错误问题太多,我不知道他们为什么把这么多问题的代码公布出来。
辗转反侧,去找过很多网站,几乎把所有有关PC机的ARDrone控制程序都下下来,但没有发现一个控制飞机运行的。而使用iphone,ipad连接飞机后,飞机的固件自动更新的最新的版本(目前是firmware 1.7.10,SDK是1.8),难道固件版本太新,那些软件都无法识别?皇天不负有心人,终于在csdn上找到一篇博客http://blog.csdn.net/lxiaoxiaot/article/details/6673700
但是按照博客上的离奇古怪的修改方法,我越修改越不淡定,越修改问题越多,由于用的vs2010,怎么修改都有问题。后来kinghuangjin(CSDN博客名)告诉我,他说他也按照博客上方法修改了,但还是无法飞行。他给我好几个个程序,但我依旧无法使用,非常感谢他提供的帮助,修改程序过程异常痛苦。(代码完全看不懂啊,改的没底)。留言给博主,博主回复我,给我新的源码
感谢lxiaoxiaot贡献出他修改后的代码。但,这个代码还是有些问题的。这里我给出我在他基础上的修改的下载链接附在文章最后。为了圆满解决此问题,前前后后用了大概5天时间!
本文分为4部分,一配置,二修正,三其他,四附录。配置部分保证你可以成功编译程序,我想已经列的比较详细了。修正部分是讲的对lxiaoxiaot代码那个地方的修改,以及介绍哪里是飞机控制部分。其他讲的是关于ardrone程序和其他项目结合的一些不成熟解决办法。附录讲的是下载网站和参考网站。
第一部分:配置
如果是用vs2008一样配置,但最好下载lxiaoxiaot的代码再修改。
1. 安装Direct SDK(图1),还有Visual Studio 2010
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6812
2.复制Parrot文件夹到D:盘或者其他盘下(通过附录给的地址下载,解压可出现)
(图2)
http://download.csdn.net/detail/guoming0000/3965482
3.打开D:ParrotExamplesWin32VCProjectsARDrone下的ARDrone.sln
4.修改ArDrone_properties.vsprops(注意有一个文件名一样,但扩展名不一样的文件,你应该知道用vs2010打开,或者任意记事本打开也行)。修改ARDroneLibDir和Win32ClientDir的Value值,根据刚才的Parrot文件夹的存储地址设置(最好不要放在桌面上)。这里如下:
<UserMacro
Name=”ARDroneLibDir”
Value=”D:ParrotARDroneLib”
PerformEnvironmentSet=”true”
/>
<UserMacro
Name=”Win32ClientDir”
Value=”D:ParrotExamplesWin32sdk_demoSources”
/>
关闭vs2010,再打开ArDrone_properties.props(注意扩展名)
<ARDroneLibDir>D:ParrotARDroneLib</ARDroneLibDir>
<Win32ClientDir>D:ParrotExamplesWin32sdk_demoSources</Win32ClientDir>
依照刚才修改,再次修改后,保存,关闭vs2010再打开。(不管有没有必要,这是保险起见)
5.添加包含目录、库目录
先对Win21Client进行操作
(图3)
(图4)
$(DXSDK_DIR)Include
$(ARDroneLibDir)SDLinclude
(此处的ARDroneLibDir是不是很熟悉,就是刚才文件修改添加的,可以点击”宏(M)>>”按钮看看是不是地址正确了)
(图5)
$(ARDroneLibDir)SDLlib
$(DXSDK_DIR)Libx86
(如果你对SDL有些了解,他是简单的开源图像显示项目,这里已经放在文件夹下了,所以你不用下载它了,或者不用理他,它只涉及到显示部分)
再对ArDroneAPI进行同样的操作
6.配置完成,把Win32Client设置为”设为启动项目”进行编译!
之后便是和电脑连接,方法在http://ardrone.parrot.com/parrot-ar-drone/zh/support/update
安装上面过程配置,至于防火墙要不要关闭,反正我是关闭了。(时间仓促也没具体验证关不关要不要紧)。链接成功后,就运程程序。建议在户外空旷地点玩它。(抱个大笔记本 = =)
如果此处有什么问题,自己再改改看看,不行再留言。或者加入Parrot AR.Drone 探讨群:177273140,我在里面,有任何其他问题,群友也会替你解决。
ARDrone1.0 win32 第二部分:修正
我的代码在lxiaoxiaot的基础上修改的,如果你下了他的代码,编译时会有一个问题,以及有个地方需要修改。首先是vp_os_signal_dep.h文件会报错,说找不到pthread.h头文件,百度说这个是linux下的文件,windows自然没有。观察vp_os_signal_dep.h的前几行,很快发现宏定义那块需要改改。我们注释掉#define USE_PTHREAD_FOR_WIN32,把注释中的#define USE_WINDOWS_CONDITION_VARIABLES宏定义打开(就是把”//”去掉)。
然后打开gamepad.cpp,找到C_RESULT open_dx_keyboard(void)函数,把其中一行函数换成fDIKeyboard->SetCooperativeLevel(hDlg,DISCL_BACKGROUND | DISCL_EXCLUSIVE);也就是把本来前台监听键盘事件换成后台监听,这样无论什么时候你按下键盘(自然,你已经运行了程序后),程序也会捕捉到你的按键事件。至于为什么这样改,程序就正确了,我也不知所以然。我觉得有可能是显示窗口一直抢占前台,导致我们按键无法在cmd窗口下按,那么前台捕捉也就没用了。还需要大家自己试试是不是这个原因,对我来说,我是需要后台也能捕捉按键。
程序有好几千行,完全涉及我没弄过的领域,加上本来就不喜欢C语言的繁琐,所以更不想看。找到函数C_RESULT update_dx_keyboard(void),它就是键盘事件的捕捉函数,每20ms通过函数GetDeviceState检查键盘状态一次。关于这个函数,可以仔细研究下。DIK_NUMPAD2这些以DIK_开头的宏,就是键盘对应的数值了。我已经把那些控制意思翻译在ARDrone键盘控制.txt文件中了,这几天风大,在室内,所以有几个命令没有试验过,不知道对错。这个keyboardState变量中存储的就是那些按键的数值数组了,你可以改变它,让他不通过键盘就做一些控制。至于用什么方法,下一个节给出简单想法。
第三部分:其他
既然使用PC,一般都是要把飞机和现有项目结合起来的,总不能买2000的飞机就是玩玩的吧。而其实,飞机也不是很好玩,飞一会电池就没电了。我们实验室原来做的东西时matlab做的,如果需要和这个c/c++程序进行通信,最简单的方法莫过于使用windows的”剪贴板”,这里给出几个函数,matlab下的clipboard()函数
data=’将字符串内容复制到黏贴板’;
str=mat2str(data);
clipboard(‘copy’,data);
%str2=clipboard(‘paste’);
MFC下的GetClipboardData,文件夹Win32TestPure下有他的简单使用方法。使用比较麻烦,自己搜吧。这样就能实现进程间的通信了。然后,你就可以把原来的项目和他结合起来。至于怎么实现,个人有个人的想法吧。我也没到那一步,这里只给出简单的解决建议。
如果有任何问题欢迎留言。(2011-01-10之前,2011-02-20之后。之间时间,比较忙)由于才疏学浅,此文也没有自己验证过,如果有错误的地方欢迎纠正,如果有其他更好的想法欢迎分享。最后祝大家圣诞快乐~
ARDrone1.0第四部分:附录
参考网站:
国内专业的四轴飞行网站:http://www.ourdev.cn/bbs/bbs_list.jsp?bbs_id=1025
官网:http://ardrone.parrot.com/parrot-ar-drone/usa/
lxiaoxiaot的代码(有些,问题需要修改):http://download.csdn.net/detail/lxiaoxiaot/3833619
—————–不加这条分割线,有人都可以下错链接————————————————————–
我的代码(ARDrone源程序,在lxiaoxiao上进行小的修改、c++剪贴板程序,还有此篇文章的word):
http://download.csdn.net/detail/guoming0000/3965482
Direct Keyboard Input:http://dev.gameres.com/Program/Control/Dinput.htm
ARDrone2.0 C#控制和图像显示程序
此代码由Demon_su
下面是运行截图
C#代码下载 (vs2012)
欢迎加入qq群:224061928 进行ARDrone的开发讨论