目前还没有使用 AI,所以现在仅仅是一个遥控小车,而不是智能小车。这个小车的名字叫 monkey。
它是这样的:
车子的前后左右,是通过车轮控制的。这个小车一共有 3 个轮子,2 个马达。马达的转动,靠一个硬件驱动模块来实现。输入 5v 电压,4 个高电平触发,可以让 2 个马达呈现各种转动状态。
orange pi zero 左侧有 26 个 pin,右侧的不知道有什么用,没有找到资料,不知道右侧具体的 pin 都是什么。但是左侧的是这样的:
在这个例子里,使用第 15、19、21、23 号 pin。pin 的名称分别是 pa3、pa15、pa16 和 pa14。
但是在控制 gpio 的时候,算法如下:
(P 后面的字母在字母表(26)中的位置 - 1) * 32 + 后面的数字
PA3 = (1-1)*32+3 = 3
PA15 =(1-1)*32+15 = 15
PA16 = (1-1)*32+16 = 16
PA14 = (1-1)*32+14 = 14
最终,需要在 shell 里写 3、15、16 和 14。
操作 gpio 的 shell 代码如下:
#!/bin/bash
if [ ! -d /sys/class/gpio/gpio$1 ] ;then
echo $1 > /sys/class/gpio/export
fi
echo out > /sys/class/gpio/gpio$1/direction
echo $2 > /sys/class/gpio/gpio$1/value
现在,gpio 的问题解决了,即可通过 ssh 登陆,输入命令实现对小车的控制。
为了方便使用 wifi 控制,可以在 orange pi 上面安装热点。
我的 orange pi zero 安装的是 dietpi 系统。但写这篇文档时,再去 dietpi 官网,发现已经不支持 orange pi 了。
但是 armbian 是支持这一款的。传送门直接下载: https://dl.armbian.com/orangepizero/Ubuntu_bionic_next.7z
开启 wifi 热点后,默认 ip 是 192.168.42.1。因此可以在手机连接热点,通过该 ip 进行访问。
由于该小车上面插了一个 usb 的摄像头。因此需要安装 motion 来做视频采集。
为了加快速度,可设置国内源:
nano /etc/apt/sources.list
设置为:
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ jessie main non-free contrib
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ jessie main non-free contrib
安装 motion
apt install motion
修改 2 处配置:
sudo nano /etc/default/motion
改成
start_motion_daemon = yes
sudo nano /etc/motion/motion.conf
改成
stream_localhost off
现在,通过 192.168.42.1 可以看到视频了。
这时需要写一个网站,通过调用 api 的方式,实现前后左右等动作。而不是每次 ssh 进去输入命令控制小车。
安装 npm
apt install npm
安装 n 模块
npm install n -g
安装稳定版 node
n stable
这个时候,使用 express 写一个简单的网站。我已经写好了,可以直接 clone 进来。
在 root 用户下面 clone 项目:
git clone https://github.com/how-to-make-a-robot/monkey.git
cd monkey
npm install
设置启动项
nano /etc/rc.local
增加如下一行
su root -c "bash /root/monkey/start.sh"
然后重启好了:
reboot
重启后,连接 orangepi 的热点,输入 192.168.42.1:3000,即可体验了。
1 这次演示,故意让每一个动作都只执行很短的时间。要不然一开动,就奔出去好几米。
所以改进的方式,是增加一个减速齿轮。但目前没有。
2 摄像头延时现象严重。小车转弯后,画面停顿一两秒才传过来。而手机和小车距离还不超过 1 尺。
3 电池不给力。我用的是 18650 电池。充好电后,只能玩 20 分钟。是不是 orange pi 太费电了?
我的微信是:cr4fun
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.