Rasberry Pi Tank Robot Car Starter Kit Lesson 3: Web Video Camera

视频遥控功能

该工能通过webiopi实现远程遥控,通过mjpg-streamer软件实时显示摄像头拍摄图片。部分浏览器可能不能正常显示,建议使用谷歌浏览器或火狐浏览器。在进行以下操作之前需要将raspberry
pi连接上wifi.通过putty或直接接到显示器上进行以下操作。

step 1.下载并解压软件包

cd ~

sudo apt-get install rpi.gpio -y

mkdir osoyoo-robot/cam-robot

cd osoyoo-robot/cam-robot

wget http://osoyoo.com/driver/WebIOPi-0.7.1.tar.gz

wget http://osoyoo.com/driver/mjpg-streamer.tar.gz

wget http://osoyoo.com/driver/robot.tar.gz

tar -xzvf WebIOPi-0.7.1.tar.gz

tar -xzvf mjpg-streamer.tar.gz

tar -xzvf robot.tar.gz

step2.安装webiopi

webiopi是一个可控制树莓派GPIO的web框架,该框架面向物联网IoT开发,该项目托管于google,并可在sourceforge上下载到源代码。webiopi支持REST
Server,CoAP server,并提供python库和javascript库。

A.下载补丁

cd ~/osoyoo-robot/cam-robot/WebIOPi-0.7.1/

wget http://osoyoo.com/driver/webiopi-pi2bplus.patch

B.运行补丁

patch -p1 -i webiopi-pi2bplus.patch

C.编译安装webiopi

sudo ./setup.sh

D.验证是否安装成功

webiopi -h

如果安装成功会有如下所示输出;如果不成功请重复上面步骤

sudo webiopi [-h] [-c config] [-l log] [-s script] [-d] [port]

Options:
-h, –help Display this help
-c, –config file Load config from file
-l, –log file Log to file
-s, –script file Load script from file
-d, –debug Enable DEBUG

Arguments:
port Port to bind the HTTP Server

E.运行webiopi

sudo webiopi -d -c /etc/webiopi/config

然后在电脑端或者手机端打开网页浏览器,在地址栏内输入树莓派ip地址,端口号8000。例如:http://192.168.1.16:8000(根据实际情况填入)。在登录网站时,需要输入账号和密码,默认的账号和密码分别是:webiopi和raspberry。如果进入WebIOPi
Main Menu页面,说明环境配置成功了:

终端按下 Ctrl + C再按Ctrl + Z 可以结束进程。

step3.安装mjpg-streamer

MJPG-streamer是一个优秀的开源project,它可以通过HTTP的方式访问linux上面的兼容摄像头,从而做到远程视频传输的效果。在本项目中,我们用MJPG-streamer传输小车摄像头图像,根据图像控制小车运动。

如果是使用CSI接口的摄像头,需要进行如下步骤

A.打开摄像头接口

sudo raspi-config

选择Enable Camera。

B.在/etc/modules文件中添加一行bcm2835-v4l2,否则/dev下没有设备节点

sudo nano /etc/modules

加上:

bcm2835-v4l2(v4l2中的l是小写字母l,不是数字1)

保存退出,并重启Pi

如果使用USB接口摄像头可以跳过上面两步

安装依赖库

cd ~

sudo apt-get update

sudo apt-get install libv4l-dev libjpeg8-dev -y

sudo apt-get install subversion -y

编译安装mjpg-streamer

cd ~/osoyoo-robot/cam-robot/mjpg-streamer

在Pi3上要编译通过需要修改配置

cd plugins/input_uvc

sudo nano input_uvc.c (若安装了vim可以输入: sudo vim input_uvc.c)

找到

int width=640, height=480, fps=5, format=V4L2_PIX_FMT_MJPEG

将V4L2_PIX_FMT_MJPEG 改成 V4L2_PIX_FMT_YUYV,保存退出

cd ~/osoyoo-robot/cam-robot/mjpg-streamer

make all

插上摄像头测试mjpg-streamer,命令行输入: ls /dev/video* 查找设备文件,如果摄像头工作正常,会输出设备文件,如图所示。

(这里我接了一个CSI和USB摄像头,所以有两个设备文件)如果没有输出设备文件,请确认摄像头是否是好的,以及上面的配置是否正确。

开启mjpg-streamer

sudo ./start.sh

然后在浏览器地址栏内输入树莓派ip地址,端口号8899,注意这里的端口号是8899,和之前的端口号(8000)是不同的。页面会显示关于M-JPEG streamer的信息。点击Stream会实时显示摄像头拍摄的内容。

按下 Ctrl + C 可以结束进程。

获取raspberry pi IP地址

ifconfig wlan0

修改webiopi默认设置

sudo nano /etc/webiopi/config

A.修改webiopi运行时调用的脚本路径

[SCRIPTS]
# Load custom scripts syntax :
# name = sourcefile
#each sourcefile may have setup, loop and destroy functions and macros

#myscript = /home/pi/WebIOPi-0.7.1/examples/scripts/macros/script.py

myscript = /home/pi/osoyoo-robot/cam-robot/robot/script.py

B.修改服务器访问webiopi时候调用HTML文件路径

# Use doc-root to change default HTML and resource files location
#doc-root = /home/pi/WebIOPi-0.7.1/examples/servo-control

doc-root = /home/pi/osoyoo-robot/cam-robot/robot

C.添加PCA9685地址

[DEVICES]
# Device configuration syntax:
# name = device [args…]
# name : used in the URL mapping
#device : device name
#args : (optional) see device driver doc
#If enabled, devices configured here are mapped on REST API /device/name
#Devices are also accessible in custom scripts using deviceInstance(name)
#See device driver doc for methods and URI scheme available

# Raspberry native UART on GPIO, uncomment to enable
# Don’t forget to remove console on ttyAMA0 in /boot/cmdline.txt
# And also disable getty on ttyAMA0 in /etc/inittab
#serial0 = Serial device:ttyAMA0 baudrate:9600

# USB serial adapters
#usb0 = Serial device:ttyUSB0 baudrate:9600
#usb1 = Serial device:ttyACM0 baudrate:9600

#temp0 = TMP102
#temp1 = TMP102 slave:0x49
#temp2 = DS18B20
#temp3 = DS18B20 slave:28-0000049bc218

#bmp = BMP085

#gpio0 = PCF8574
#gpio1 = PCF8574 slave:0x21

#light0 = TSL2561T
#light1 = TSL2561T slave:0b0101001

#gpio0 = MCP23017
#gpio1 = MCP23017 slave:0x21
#gpio2 = MCP23017 slave:0x22

pwm0 = PCA9685 slave:0x40

#pwm1 = PCA9685 slave:0x41

#adc0 = MCP3008
#adc1 = MCP3008 chip:1 vref:5
#dac1 = MCP4922 chip:1

打开一个终端

cd ~/osoyoo-robot/cam-robot/mjpg-streamer

sudo ./start.sh

再打开一个终端

sudo webiopi -d -c /etc/webiopi/config

如果报错请确认两点:

A.上面配置是否正确

B.PCA9685是否供上电了,如没有电,因为软件读取不到IIC设备,会报错。

然后在安装APP ,在APP中Robot IP选项和Video URL选项填入树莓派的IP地址保存,再在主页面点击Off就可以看到图像并控制小车了。