如何用无线键盘控制树莓派小车

*本文作者:xutiejun,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

网上有很多介绍树莓派小车的控制方案,但是搜索了一圈却发现没有无线键盘的控制方案。挑战未知,才更有趣。

0x01 所需材料

1.树莓派小车。(树莓派小车的安装不是本文重点,如果读者不熟悉小车的安装,请自行搜索。)

2.无线键盘。

0x02 方案

在树莓派系统上搭建两个服务:键盘监听服务和小车转向控制服务。

键盘监听服务主要用于监听键盘的按键,并将按键发送给小车转向控制服务。

小车转向控制服务主要用于驱动小车转向。

说明:本文中小车安装的是raspbian系统,是基于linux内核的debian系统。

按键与小车动作映射关系如下

按键事件

小车动作

方向键上按下

小车前进

方向键上抬起

小车停止

方向键下按下

小车后退

方向键下抬起

小车停止

方向键左按下

小车左转

方向键左抬起

小车停止

方向键右按下

小车右转

方向键右抬起

小车停止

0x03 键盘监听服务设计

首先确定键盘对应的event,可以输入如下命令查询。

cat /proc/bus/input/devices

查询结果如下:

省略 … I: Bus=0003 Vendor=03f0 Product=034a Version=0110 N: Name=”Chicony HP Elite USB Keyboard” P: Phys=usb-0000:00:14.0-5/input1 S: Sysfs=/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.1/0003:03F0:034A.0003/input/input9 U: Uniq= H: Handlers=kbd event6 B: PROP=0 B: EV=1f B: KEY=3f0003007f 0 0 483ffff17aff32d bf54444600000000 1 130f938b17c000 677bfad941dfed 9ed68000004400 10000002 B: REL=40 B: ABS=100000000 B: MSC=10 省略 …

我的设备中键盘对应的是event6(注意:不同设备对应的event号是不同的)。

键盘监听核心代码:

0x04 小车转向控制服务设计

小车转向控制服务采用C++语言和python语言混合编程实现。

python语言程序只用于控制小车的动作:前进、后退、左转、右转、停止。

C++语言程序是整个控制系统的核心,用于控制小车动作的逻辑控制。

用python控制小车动作的代码如下:

控制系统的代码就不粘贴了,只把设计过程中遇到的问题与大家分享下。

控制系统在设计过程中遇到这样一个问题:

如果按键一直按下,当按键抬起时小车不会立刻停止,而是过一下才会停止。

导致问题发生的原因:

由于按键一直按下会有大量的按键请求发送过来,而小车的动作响应要慢于键盘按键响应,会有大量的按键按下请求堆积在处理线程中,而按键抬起请求处于队列最末尾,是最后执行的,所以当按键抬起时小车才不会立刻停止。

修正方案:

按键抬起事件要最优先处理,处理完按键抬起事件后将堆积的按键按下队列清空。

0x05 结束

到此整个小车控制系统就介绍完了。

最后,整套代码已经发到了百度网盘上。

链接: https://pan.baidu.com/s/1sA8t9mCH_TJegjdE5ggXMg 提取码: w3s2

*本文作者:xutiejun,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-10-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏后端技术探索

性能优化模式(纯干货!!)

性能优化涉及面很广。一般而言,性能优化指降低响应时间和提高系统吞吐量两个方面,但在流量高峰时候,性能问题往往会表现为服务可用性下降,所以性能优化也可以包括提高服...

15540
来自专栏企鹅号快讯

PHP 霸主地位被动摇,JIT 是穷途末路后的绝地反击?

关键时刻,第一时间送达! 摘要:PHP 是 Web 开发最常用的语言,自创建以来,PHP 语言经历了许多激烈的改进,其中性能是开发人员在评估新版本时考虑的主要标...

28070
来自专栏程序你好

个人门户系统设计方案

40140
来自专栏24K纯开源

TinyOS和Deluge的安装模拟(一)

介绍       TinyOS是一款嵌入式操作系统,相信做无线传感器网络开发的同志们都不陌生。同类型的系统有不少,但是TinyOS的应用较之其他系统更为广泛。T...

32680
来自专栏林德熙的博客

win10 uwp iot 检测霜设计电路

这篇文章主要译: https://msdn.microsoft.com/magazine/mt694090 有很多都是胡说,随便喷,但我不会理。 https:/...

9310
来自专栏Android群英传

IM开源示例——Seatalk

47930
来自专栏Linux Python 加油站

揭秘Linux工程师一路走来都需要哪些技能

大公司也是从小公司一步步走过来的,而大公司之所以与小公司不同,不在于基础的技术体系不同,而是当数据量达到一定程度后,引发的质变而已。而在思考质变带来的性能问题中...

14040
来自专栏美团技术团队

性能优化模式

摘要 性能优化涉及面很广。一般而言,性能优化指降低响应时间和提高系统吞吐量两个方面,但在流量高峰时候,性能问题往往会表现为服务可用性下降,所以性能优化也可以包括...

45650
来自专栏北京马哥教育

20款开发运维必备的顶级工具

开发运维工具与软件开发领域的最佳实践密切相关,也与必要的规范密切相关。在整个开发生命周期涉及到一大批新旧工具,从规划、编码、测试、发布到监控。本文介绍你应该考...

56060
来自专栏非著名程序员

如何让你的开发效率提升 3 倍?

编程大牛、《Java 编程思想》一书的作者 Bruce Eckel 曾说过:在这个领域做得越多,我越觉得软件开发比任何行业都更接近于写作。

11410

扫码关注云+社区

领取腾讯云代金券