PIPPY
| ||||||||||||||||||||||||||
|
产品介绍
这一款是专门为树莓派设计的开源四足仿生机器狗。扩展板将OLED,舵机电机驱动电路,九轴姿态传感器,电池保护电路等集成在一起,免去你焊接电路的烦恼,支持免卸载充电,无需反复拆卸电池。支持视频监控,视觉巡线,超声波避障,自平衡控制,运动检测,颜色识别等功能。
- 特点
- 板载两节2600mAh 18650电池,支持边充边放
- 板载HY2120 + AO4406A锂电池保护电路,具有防过充、防过放、防过流和短路保护功能
- 板载APW7313稳压芯片,可给树莓派提供稳定的5V电压
- 板载高精度九轴运动姿态监测传感器ICM20948,可实现机器人姿态自平衡
- 板载0.91寸128×32分辨率OLED,实时显示小车IP地址,电量等情况
- 板载AINA219采集芯片,方便实时监控电池电压,充电电流
安装视频
注意:组装时需要先运行程序调节舵机中位再继续组装,切勿直接组装再调节舵机中位,否则有需要重新拆装机器狗
注意:必须使用黑色尼龙螺丝固定摄像头,使用金属螺丝固定会导致短路损坏电子器件。
软件安装
注意:组装视频教程中已经包含了软件安装,如果你已经严格按照组装视频中操作可以跳过此部分。
下载程序
我们产品的所有代码都已经在[GitHub]上开源,你需要将其下载到树莓派中并安装相关依赖库后才可以正常运行。
sudo git clone https://github.com/waveshare/PIPPY.git
输入完成后按 enter ,开始从GitHub下载机器人的程序,这个过程将会持续一段时间,耐心等待下载完成
安装依赖库
在控制台中输入如下代码,运行脚本 setup.py 来安装所需的依赖库
sudo python3 PIPPY/setup.py
按 enter ,接下来的操作都是脚本程序自动完成的,这一过程根据网络环境不同也许会持续几十分钟或几个小时,耐心等待即可。
安装完成后树莓派会自动断开SSH连接并重启,此时如果你使用的是Putty等软件连接的树莓派,会有 Network error:Software caused connection abort 这样的错误提示也是正常,关闭即可。
运行程序
- 树莓派启动后都会自动运行程序,具体来说是重启后都会运行 //home/pi/PIPPY/webServer.py文件。如果OLED屏幕显示了IP地址和WIFI模式等信息则说明自动运行成功。
- 但是如果没有连接树莓派摄像头和扩展板, webServer.py 是不会运行成功的,因为机器人产品的程序需要使用摄像头和扩展板中PCA9685舵机控制芯片,如果不将树莓派安装到驱动板上,当实例化PCA9685的依赖库时会发生通信失败导致程序报错。
- 机器狗会自动在局域网内搭建一个WEB服务器,你可以在同一个局域网内使用其它电脑、手机或平板访问这个WEB页面并控制机器狗。
- 注意控制端和机器狗需要再同一个局域网,如果WIFI工作在STA 模式则控制端需要连接到同一个路由器,如果WIFI工作在 AP 模式则控制端需要连接到机器狗创建的热点(账号:PIPPY 密码:12345678)。
- 你可以打开谷歌浏览器,输入http://<RaspbeeryPi_ip_address>:5000连接到小车,其中RaspbeeryPi_ip_address为OLED上显示的实际IP, 比如:192.168.9.238:5000
- 如果是在手机端打开则显示如下界面
- 如果页面打开失败,可以使用SSH登录到树莓派,使用如下命令结束掉开机自动运行起来的机器人程序以释放资源,否则会出现摄像头初始化失败或端口被占用等问题
sudo killall python3
- 使用如下命令来运行 webServer.py
sudo python3 PIPPY/webServer.py
应用控制
- 机器狗正常运行下打开WEB控制页面会显示如下界面,进入如下界面则可以控制机器狗。
Video
Video 窗口用来显示机器人摄像头所采集到的实时画面
Instruction
Instruction 窗口内有快捷键说明,你可以直接通过操作键盘来控制机器人的常用功能。
W,A,S,D按键分别控制机器狗前进,左转,后退,右转。I,J,K,L控制机器狗分别做抬头,左侧,低头,右侧等动作
Move Control
Move Control 窗口用来控制机器狗的前后左右的基本移动功能。
speed可调节机器狗的运动速度
Arm Control
Arm Control窗口用来控制机器狗的姿态,分别可以做抬头,左侧,低头,右侧等动作。
Hard Ware
Hard Ware 窗口用来显示树莓派的CPU温度、CPU占用率和内存占用率。
FC Control
FC Control 窗口用来控制机器人的颜色锁定功能
- START :开启颜色查找并追踪功能,当此功能开启后,再次点击会关闭此功能。
- COLOR :用来选择索要追踪的颜色。
- 当此功能开启后,机器人会自动锁定摄像头画面内的某一颜色物体,默认是亮黄色,你可以选择需要锁定的颜色,当物体锁定后机器人身上的LED灯会变橙色,由于本机器人的摄像头只能进行俯仰运动,所以颜色追踪功能默认没有增加水平锁定的程序。
Actions
Actions 窗口用来控制机器人的特殊功能:
- MOTION GET : 基于OpencCV的运动检测功能,当摄像头画面内有物体运动时,程序会在Video 窗口内圈出运动的部分。
- AUTO MATIC : 基于超声波的自动避障功能,当机器狗超声波检测到前方有障碍物时,会自动左转避障,如果障碍物的距离过近,机器狗会向后移动避开障碍物。
- KEEP DISTANCE : 基于超声波模块的距离保持功能,当前方障碍物距离较远,机器狗会前进,当前方障碍物距离较近,机器狗会后退,如果障碍物距离适当,机器狗将保持不动。
- TRACK LINE : 开启视觉巡线功能,Video窗口将显示巡线黑白图案,结合CVFL Control窗口实现巡线功能,开启后再按这个按键会关闭视觉巡线功能。
- STEADY : 姿态保持功能,通过九轴运动姿态监测传感器控制自身平衡,保持摄像头水平状态。
Radar Scan Control
Radar Scan Control窗口用来显示超声波检测前方障碍物的距离。
PWM INIT SET
PWM INIT SET窗口用来调节舵机中位数据。
CVFL Control
CVFL Control 窗口用来控制机器人的视觉巡线功能。
- START : 开启视觉巡线功能,开启后再按这个键子会关闭视觉巡线功能。视觉巡线功能开启后,实时视频画面会自动变为二值化后的结果。
- COLOR : 切换寻黑底白线还是寻白底黑线,默认寻黑底白线,点击后寻白底黑线。
- L1 和 L2为调节上下两个横线的位置,此巡线功能分析两个横行的像素点信息来进行巡线。运行时此两横需调节到黑线的位置。
- SP 为调节左右两个竖向的位置,是视觉分析结果应用到转向命令的阈值, 表现为黑线超过此两条竖向则需要转向了,如果黑线再次两条竖向内则直行不需要转向。
SP需要调节到合适的值,SP值越大,误差越大,但是过小的 SP 值会导致机器人无法对准目标方向而停滞不前。
PIPPY机器人API调用方法
为了方便用户对机器人进行二次开发,我们这里提供了PIPPY机器人的API调用方法,你只需要在树莓派的PIPPY内新建一个 py 文件,然后输入以下代码即可控制PIPPY机器人。
例如,我们在树莓派的PIPPY文件夹内新建了一个 simpleTest.py 文件,然后在这个文件内写入以下内容,即可让机器人向前走动10秒钟、停止1秒钟、接着再左转3秒钟。
import PIPPY import time robotCtrl = PIPPY.PIPPY() robotCtrl.start() # 为了避免控制运动的函数造成阻塞,使用多线程来进行控制,这里开 启这个线程 robotCtrl.moveStart(100, 'forward', 'no') # 机器人开始以100的速度向正前方走动 time.sleep(10) # 延迟10s,这段时间内机器人将会保持运动 robotCtrl.moveStop() # 机器人停止走动 time.sleep(1) robotCtrl.moveStart(100, 'no', 'left') # 机器人以100的速度向左转弯 time.sleep(3) robotCtrl.moveStop() # 机器人停止走动
moveStart(speed, direction, turning)
- speed参数为1-100的整数,当数值为1-50之间时,PIPPY为三角步态;当数值为51-100时,PIPPY为对角步态,数值越大速度越快。
- direction参数可以为 'forward' 、 'backward' 或 'no' ,这三个参数分别控制机器人向前行走、向后行走以及无前后行走指令。
- turning参数可以为 'left' 、 'right' 或 'no' ,这三个参数分别控制机器人左转、右转以及无转向指令。
pitchRoll(pInput, rInput)
姿态控制函数,pInput的p代表 Pitch 轴运动;rInput的r代表 Roll 轴的运动,由于每条腿的末端点只能在竖直平面内运动,所以没有 Yaw 轴运动
(转向原理为差速转向,所以并不算 Yaw 轴运动)。
- pInput 与 rInput 的取值范围取决于机器人腿部连杆的尺寸,这些尺寸决定了每条腿上升与下降的活动范围,也就是机器人能保持的最高点与最低点的高度。所以 pInput 与 rInput 的取值范围一般在-7.5到7.5之间。
- 当pInput为正数时,机器人向上看;当pInput为负数时,机器人向下看,pInput的绝对值大小则为俯仰的幅度,绝对值越大,幅度越大。
- 当rInput为为正数时,机器人向左倾斜;当rInput为负数时,机器人向右倾斜,rInput的绝对值越大,倾斜的幅度越大。
本机器狗的自平衡模式就是基于这个函数,将从ICM20948读取的姿态数据经过卡曼滤波后应用给该函数,即可实现机器人的自平衡功能。
stay(heightInput)
机器狗站立高度控制函数,属于pitchRoll()的简化版,
- heightInput 的数值可以为机器人最小高度和最大高度之间的任意数,在60到85之间。这个范围取决于机器人腿部连杆的尺寸。
linkageQ(legNumber, x, y)
全部四条腿的连杆控制函数,Q代表 Quad ,这个是实现机器人运动的基础函数之一,使用该函数我们可以依靠输入坐标点的方式来控制某一条腿末端点的位置。
- legNumber 参数可以为 1 、 2 、 3 或 4 ,用于选择你要控制的腿,左前腿为1,左后腿为2,右前腿为3,右后腿为4。
- x为腿部末端点的前后位置,当x为正数时,该位置靠前,当x为负数时,该位置靠后,当x为0时,末端点位于两个舵机轴连线中点的正下方。
- y为腿部末端点的上下位置,y值一直都为正值,其最小值为60,最大值为85,这取决于机器人腿部连杆的尺寸。
这里需要注意的是,y值为85时,x值范围会严重受限,所以不建议使用机器人的最大高度来行走。
linkageV(servoNumA, servoNumB, x, y)
单独腿的连杆控制函数,这是linkageQ()的底层函数,由于每一条腿都由两个舵机来控制。
这里参数 servoNumA 与参数 servoNumB 分别代表每一条腿的后面(相对于机器人的前进方向)的舵机编号和前面的舵机编号。
舵机具体位置与其对应编号关系如下所示:
左 前进方向右 1 -- -- 4 0 -- -- 5 3 -- -- 6 2 -- -- 7
连杆逆解函数原理
planeLinkageReverse()、planeLinkageDouble()、middlePosGenout()和animateLine()都是连杆逆解相关的函数,更直观的实现方式可以参考LinkageREVERSE.py这个文件,使用同样的原理在电脑中建立的连杆逆解运动仿真。
直接在电脑中双击这个 .py 文件即可运行,前提需要在电脑中安装python3、numpy和matplotlib.
pip3 install numpy pip3 install matplotlib
linkageREVERSE.py中有实现连杆逆解的具体公式,所以这里着重讲逆解原理。
- 连杆逆解大致分为两种,一种有唯一解,一种没有唯一解,PIPPY的结构属于有唯一解的连杆结构,这使得连杆逆解的难度大大降低。
- 首先最简单和最基础的,就是平面双连杆逆解,可以将连杆的初始点与末端点相连接,构成一个三角形,而我们要做的就是获得三角形每个内角的角度,从而获得舵机的摆动角度。
基本公式: 首先定义一个三角形,A、B、C为三角形的三个叫,a、b、c为角A、B、C所对应的边,于是 有 cosC = (a*a + b*b - c*c)/(2*a*b)
- 只要我们将某一条腿的前后两舵机的连杆联立,即可求出两个舵机的摆动角度,从而实现连杆逆解最难的部分,对于某一连杆延长线上面的腿部末端点位置,使用y=kx+b即可求出,三个方程联立后变换,以x、y为已知量,以舵机的角度为未知量,就是我们上面所用到的连杆逆解函数所要实现的功能。
FAQ