使用舵机打造摄像机云台,你也能吗?

使用舵机打造摄像机云台,你也能吗?_58汽车

本教程展示了如何为智能小车安装树莓派摄像头,并通过Flask框架实现实时视频流传输。进而,详细介绍了使用SG90舵机打造摄像机云台的方法,包括舵机的工作原理、占空比与转角的校准过程。最后,提供了同时控制两个舵机以实现摄像机水平和垂直转动的Python脚本,让你的智能小车“视野”更灵活。

完成智能小车的制作之后,还差一项非常重要的工作,那就是摄像头。没有摄像头的小车,跟普通的遥控玩具车没什么区别。我们要给小车装上眼睛,让它可以到我们想要去的地方,传回我们想要看到的画面。给小车安装摄像头的方式非常简单,在树莓派主板上装上摄像头就可以了。推荐树莓派的官方摄像头,它是这个样子的。

在关机状态下,将软排线插入到树莓派的CAMERA接口上,开机。运行树莓派配置工具来激活摄像头模块:

移动光标至菜单中的”EnableCamera(启用摄像头)”,将其设为Enable(启用状态)。完成之后重启树莓派。

在重启完树莓派后,我们就可以使用PiCam了。要用它来拍摄照片的话,可以从命令行运行raspistill:

这句命令将在2000ms后拍摄一张照片,然后保存为pic.jpg。找到这个文件,看看拍摄效果如何。

使用普通的USB摄像头也可以,但前提是你能够搞的定它的驱动。

此时,我们只是能够使用摄像头拍照。如何能使摄像头传输实时视频信号,并能够通过客户端访问呢?

使用Flask框架发布PythonWeb服务,用户可以获得实时视频流数据。

首先要做的是在你的树莓派上安装Flask。之前已经讨论过如何安装Flask了,在此不再赘述。

由于此项目涉及到比较多的文件,我们要建立一个工作目录。

切换到我们之前创建的myPiCar文件夹,使他成为当前工作目录。

现在,在这个文件夹上,我们将创建两个子文件夹:静态的CSS、最终的JavaScript文件以及HTML文件的模板。转到你的新创建的文件夹。

创建2个新的子文件夹:

最终的目录“树”,如下所示:

下面,我们在创建好的的环境下,用PythonWeb服务器应用程序来流式传输视频。

下载MiguelGrinberg的树莓派相机软件包camera_pi.py并将其保存在创建的目录myPiCar上。这是我们项目的核心,Miguel的安装包相当的不错。

现在,使用Flask,让我们调整原始的Miguel的web服务器应用程序(app.py),创建一个特定的python脚本来渲染我们的视频。我们可以命名为appCam.py。

以上脚本将你的摄像机视频流式传输到index.html页面上,在templates目录下新建index.html文件,写入以下内容:

index.html最重要的一行是:

视频将会在这里“反馈”到我们的网页上。

在静态目录中需包含style.css文件,这是网页正常显示所必须的样式文件。到目前为止,我们的文件树结构如下。

所有文件都可以从我的GitHub仓库下载获得:myPiCar。

现在,在终端上运行python脚本:

使用你的网络中的任何浏览器,输入http://树莓派的IP地址:端口号/,例如http://192.168.1.78:8000,就可以看到视频信号了。如果你使用树莓派本身的浏览器,也可以输入http://0.0.0.0:8000。

不出意外的话,摄像头实时画面已经出现在你的浏览器中了。

可是,此时它是固定不动的。显然,这样的功能是完全不够的。

我们需要摄像头能够上下左右转动,就像球形摄像机一样。这时,我们要打造摄像机云台。

我们使用性价比超高的SG90舵机来打造摄像机云台。

舵机就是可以自由指定转角的伺服马达。在舵机内部,有一个周期20ms,脉宽1.5ms的基准脉冲,它对应于一个基准电压;为了控制舵机,我们输入一个周期也为20ms,一定占空比的控制脉冲,这个脉冲经过调制芯片的处理成为一个偏置电压,舵机内部首先通过比较偏执电压和基准电压差值的正负来进行正相或反相转动,同时舵机内部带有平衡电位器,内部齿轮转动的同时会带动电位器变化,电位器会逐渐减小电压差,当电机转到指定角度时电压差值刚好为0,舵机停止转动。归结起来,要控制舵机转到指定角度,就给它输入指定占空比的脉冲波。

舵机的转角范围是0-180度,脉宽范围是0.5ms~2.5ms。对应的控制关系是这样的:

脉宽(ms)占空比(%)转角(°)———–0.52.501.05451.57.5902.0101352.512.5180

这一数据可能跟舵机的实际数据有误差,在使用之前,我们需要先校准一下。

舵机有三根引出的线,红线是电源线,可以接5V输入;棕线是地线,接树莓派GND引脚;橙线是信号线,也是我们唯一需要输入控制信号的线,接任何一个GPIO引脚。

理论上说,在规定范围内,输入信号给多少占空比,必须有个一确定的角度与他对应。在使用之前,我们需要测试一下占空比和角度的对应关系。打开树莓派终端,输入一下命令进入python环境:

之后,一行一行输入一下代码:

现在,你可以输入不同的占空比值,观察舵机的运动。让我们从2%开始,看看会发生什么(我们观察舵机从“零位”开始):

我项目的情况是,当我将占空比改为3%时,舵机进入零位。我观察到舵机停留在同一位置,开始以大于3%的占空比移动。所以,3%是我的初始位置(o°)。同样的情况发生在10%,我的舵机超过这个数值,最终达到13%。所以对于这个舵机,最终结果是:0°==>占空比3%90°==>占空比8%180°==>占空比13%完成测试后,必须停止PWM并清理GPIO:

实际测试过程中,你的数据可能有所不同。

摄像机有水平和垂直两个方向需要转动,因此需要两个舵机才能满足要求。

“平板”舵机将“水平”移动摄像机(“方位角”),而“仰角”舵机将“垂直”移动摄像机(仰角)。

双舵机需要组合才能使用,你可以自己组装,但是可能需要一些辅助配件。更方便的方式是直接在某宝上选购已经组装好之后的双舵机云台,如下图。

下面,创建一个Python脚本来同时控制两个舵机。

脚本执行时,必须输入参数,平移角度和倾斜角度。例如:

上述命令将使“水平/倾斜”平台在“方位角”(水平角)上定位120度,在“仰角”(倾斜角)方向上定位为45°。请注意,如果未输入任何参数,则默认平移和倾斜角度均为90°。

现在,自由转动你的摄像机吧。

完整代码地址GitHub

系列目录:

《手把手教你打造智能小车(0)-写在前面的话》

《手把手教你打造智能小车(1)-树莓派及其使用配置》

《手把手教你打造智能小车(2)-点亮LED灯》

《手把手教你打造智能小车(3)-小车跑起来》

《手把手教你打造智能小车(4)-使用传感器自动避障》

《手把手教你打造智能小车(5)-使用舵机打造摄像机云台》

以上内容由58汽车提供。如有任何买车、用车、养车、玩车相关问题,欢迎在下方表单填写您的信息,我们将第一时间与您联系,为您提供快捷、实用、全面的解决方案。

原创文章,作者:58汽车,如若转载,请注明出处:https://car.58.com/7013703/