我正在编写一个程序来使用 C++ 程序控制无人机。我正在使用 AT 命令来控制无人机。我可以通过向端口 5554 发送一个小数据包来接收导航数据。但是程序卡在了无人机起飞功能上:
sprintfAT*REF="%u, x",序列号。
现在我的问题是 x 的值应该是多少?起飞时只需将第八位设置为 1。所以在这种情况下,它的值应该是 11540100。但是我发现了很多例子,其中它的值是 290718208。我试图用这两个值起飞无人机,但无人机没有起飞。应该使用什么值?
我正在编写一个程序来使用 C++ 程序控制无人机。我正在使用 AT 命令来控制无人机。我可以通过向端口 5554 发送一个小数据包来接收导航数据。但是程序卡在了无人机起飞功能上:
sprintfAT*REF="%u, x",序列号。
现在我的问题是 x 的值应该是多少?起飞时只需将第八位设置为 1。所以在这种情况下,它的值应该是 11540100。但是我发现了很多例子,其中它的值是 290718208。我试图用这两个值起飞无人机,但无人机没有起飞。应该使用什么值?
来自 arDrone api 论坛上的 MAPGPS: https ://projects.ardrone.org/boards/1/topics/show/852
设置:AT*CONFIG=1,\"control:altitude_max\",\"2000\"
基本控制
起飞:AT*REF=101,290718208
登陆:AT*REF=102,290717696
悬停:AT*PCMD=201,1,0,0,0,0
当然第一个参数(101,102 等)应该替换为正确的序列号。
来自AR.Drone 开发人员指南的部分AT*REF
:
发送此命令来控制无人机的基本行为。在 SDK 版本 1.5 中,控制位字段中仅使用位 8 和 9。第 18、20、22、24 和 28 位应设置为 1。其他位应设置为 0。
这意味着如果第 8 位和第 9 位为零,您仍在发送(使用 Python):
>>> (1 << 18) | (1 << 20) | (1 << 22) | (1 << 24) | (1 << 28)
290717696
如果您希望无人机起飞,那么您还将第 9 位(不是您在问题中所说的第 8 位)设置为 1 并获得:
>>> (1 << 18) | (1 << 20) | (1 << 22) | (1 << 24) | (1 << 28) | (1 << 9)
290718208
这就是数字 290718208 的来源。