无人机PID调节,航模爱好者们需要掌握这些知识

PID调节

几乎每个用于控制某个物理对象的电子设备,都要使用一个被称为PID控制器的控制回路反馈机制,PID即“比例-积分-微分”。为解释它的工作原理,我们举一个四旋翼无人机力图保持水平的过程作为例子。如果有一股突风造成四旋翼无人机向一侧滚转,PID控制器可测量出当前滚转角度与我们期望的零度滚转角的差值。基于这一差值,PID控制器将确定最佳的控制指令并发送给电动机,让四旋翼无人机以最快的速度恢复水平,同时不会发送超调或在水平飞行姿态附加发送震荡。

无人机PID调节,航模爱好者们需要掌握这些知识

PID控制器在飞行控制器的多个方面都有应用,如保持固定的飞行高度,保持指定的GPS位置,等等。PID也用于电子调速器、舵机、稳定云台和许多其他的设备。通常在某一给定的飞行控制器上设定的默许PID参数都能够满足我们的需要,我们并不需要担心PID调节的问题,但随着对飞行控制器的越来越了解,我们可能会更愿意自己调节PID参数,以获得无人机最佳的飞行性能。

无人机PID调节,航模爱好者们需要掌握这些知识

PID调节是有点难度的,但可以通过后面的这几篇文章中获得最基本的了解,实现PID调节的入门。

无人机PID调节,航模爱好者们需要掌握这些知识

PID远远不止这些哦,我们后两篇文章会讲到PID该怎么调节,欢迎学习。希望我讲的这些对你们制作无人机有帮助。

喜欢的朋友记得点击关注哦

树莓派安装servoblaster的方法控制舵机

树莓派安装servoblaster的方法控制舵机

具体来说servoblaster其实是个程序,而不是python的库,所以要先运行servoblaster,然后再运行python程序,当servoblaster运行的时候,你的/dev/目录下面就会出现servoblaster这个东西,就好像软件模拟出了一个设备一样,而你可以通过echo 转动角度 >/dev/servoblaster来个这个它发命令,进而控制舵机。 servoblaster的github上面有很详细的使用说明,用起来非常简单,而且可以同时控制五六个舵机。

原文始发于:树莓派安装servoblaster的方法控制舵机

|

如何构建一个树莓派六足机器人?

这个树莓派六足动力机器人将有一个独立运行的自主模式,避免障碍物和手动模式,还可以通过智能手机进行控制。有兴趣搞起来么?

如何构建一个树莓派六足机器人?

六足步行者概念

这个六足步行者将遵循大多数动物和昆虫使用三脚架步态三脚架的步态如下图所示:

如何构建一个树莓派六足机器人?

图片由NC州立大学提供

六足步行者有很多方法来使用这种步态。我选择了建立一个三个舵机的版本,我得找性价比高的, 某宝上随便搜9g 舵机。然后,我添加了另一个舵机,安装机器人的“眼睛”。

机器人将有三个动作:向前,向后,向右转,然后向左转。任何动作总是涉及将机器人向左或向右倾斜,然后移动通过倾斜举起的腿。下面是运动的图表(腿上的灰色意味着机器人的重量在该腿上)。

如何构建一个树莓派六足机器人?如何构建一个树莓派六足机器人?

如何构建一个树莓派六足机器人?

右转运动基本上是左转运动。

为了能够实现三个舵机设计,需要将前部和相应的后腿连接起来,而第三台舵机倾斜辅助行走。

这个六足步行者可以在两种模式下操作。在第一种模式(自主)中,步行者可以自由漫游。如果检测到障碍物,则向后两步,然后向右转。第二种模式将允许用户使用连接到与机器人相同的网络的任何智能手机来控制六足步行者的移动。

根据我的设计要求,我需要一个控制器,可以

1)同时控制四个舵机

2)从障碍探测传感器读取输入

3)连接到无线控制网络。

实际上,感觉这个东西用Arduino会更容易, 但是, 但是我就是想在树莓派上完成….

这是我设计的框架:

如何构建一个树莓派六足机器人?

所需材料

在决定使用哪个控制器之后,我选择其余的组件。他们来了:

  • 3台Tower Pro SG-5010舵机(用于腿和倾斜)
  • 1台Tower Pro SG-90微型舵机(头部)
  • 1个Raspberry Pi 2(带有USB无线网卡)或Raspberry Pi 3
  • HC-SR04超声波传感器 – 这是检测障碍物的传感器。
  • 9“x 3”亚克力板
  • 1/2“×1/8”铝棒
  • 螺丝和螺母
  • 电池, 舵机应该要独立供电。
  • 我的RPi运行主要靠一个充电宝供电。

构建指令

六足步行者有三个主要部分:身体/平台,腿和头。

建立身体

下面是一个可用于构建Walker主体的示例布局。我用亚克力板作为我的平台。腿的细节如下。

如何构建一个树莓派六足机器人?

建立腿

这是一个腿的布局。我使用了1/2“x 1/8”的铝棒。腿应该足够坚硬,以保持六足步行者的重量。比塑料的轻感觉, 如果你要用3D 打印机打印的话,也可以

如何构建一个树莓派六足机器人?

这是倾斜的腿:

如何构建一个树莓派六足机器人?

安装RPi和头

我在亚克力板上加了一些孔,然后用螺丝和螺母固定好了树莓派。头部由超声波传感器和贴在电路板上的微型舵机组成。我用热胶粘贴超声波传感器到小舵机上:

如何构建一个树莓派六足机器人?

更好的观察腿部动作:

如何构建一个树莓派六足机器人?

连线

以下是我如何连接组件:

倾斜舵机 - > GPIO4右腿 - > GPIO21左腿 - > GPIO6头 - > GPIO26HC-SR04传感器 - > GPIO23HC-SR04 Echo pin - > GPIO24

如何构建一个树莓派六足机器人?

接线切忌不要短路~!!! 

另外,我还添加了一个带有公头和母头的电路板,使接线看起来更清爽一些…(见下文)。

这里是全装配的六足步行者:

如何构建一个树莓派六足机器人?

软件

Pigpio舵机控制

我使用了预装在RPi上的Python来编码walker。您将需要一个名为pigpio的外部库来控制伺服电机。

使用SSH访问您的RPi并发出以下命令来安装pigpio库:

wget abyz.co.uk/rpi/pigpio/pigpio.zip unzip pigpio.zip cd pigpio  sudo make install

Pigpio使用一个称为pigpiod的守护进程,这意味着舵机控制会成为后台进程。在使用pigpio python库之前,您只需发出以下命令即可运行此守护程序:

pigpiod

不这样做会导致在我下面提出的Python代码中的错误。

为了让pigpiod每次运行Raspberry Pi 后自动启动,在终端下可以通过计划任务进行,也可以直接写入/etc/rc.local 开机启动:

sudo crontab -e

然后在结尾处添加以下行:

@reboot /usr/local/bin/pigpiod

用于Raspberry Pi服务器的Apache

接下来,你需要为Raspberry Pi安装Apache的WiFi控制功能:

sudo apt-get install apache2 -y

这将创建一个文件夹/var/www /html /它将包含我们刚刚设置的apache服务器上的所有页面。如果安装成功,您现在可以通过网络浏览器访问您的RPi的IP地址。

有两种方法来实现对WiFi的控制。一种更简单的方法是使用无线路由器,并使用与RPi连接在同一网络上的设备。第二种方法是使RPi成为接入点,就像我的RPi漫游者机器人一样

第一种方法有明显的延迟,特别是如果机器人远离了路由器。第二种方法不需要你有无线路由器,但会消耗你树莓派电源的很多电量。

我在这个项目中使用了第一种方法。

Python程序

下面是hexapod walker的python代码:

#!/usr/bin/python  import RPi.GPIO as GPIO import pigpio import time import sys import os import signal GPIO.setmode(GPIO.BCM') GPIO.setwarnings(False)  tilt = 4 br = 21 bl = 6 trig = 23 echo = 24 head = 26  GPIO.setup(trig, GPIO.OUT) GPIO.setup(echo, GPIO.IN)  pi = pigpio.pi() 
  def backward(): 	pi.set_servo_pulsewidth(tilt, 800)  	time.sleep(0.15) 	pi.set_servo_pulsewidth(bl, 800)   	 	time.sleep(0.15) 	pi.set_servo_pulsewidth(tilt, 2000) 	time.sleep(0.15) 	pi.set_servo_pulsewidth(br, 1800)  	time.sleep(0.15) 	pi.set_servo_pulsewidth(tilt, 1500)  	time.sleep(0.15)  	pi.set_servo_pulsewidth(bl, 1500)    	time.sleep(0.15) 	pi.set_servo_pulsewidth(br, 1500)    	time.sleep(0.15) 	return;

 def forward(): 	pi.set_servo_pulsewidth(tilt, 800)  	time.sleep(0.15) 	pi.set_servo_pulsewidth(bl, 1800)   	 	time.sleep(0.15) 	pi.set_servo_pulsewidth(tilt, 2000) 	time.sleep(0.15) 	pi.set_servo_pulsewidth(br, 800)  	time.sleep(0.15) 	pi.set_servo_pulsewidth(tilt, 1500)  	time.sleep(0.15)  	pi.set_servo_pulsewidth(bl, 1500)    	time.sleep(0.15) 	pi.set_servo_pulsewidth(br, 1500)    	time.sleep(0.15) 	return;

 def left(): 	pi.set_servo_pulsewidth(tilt, 800)  	time.sleep(0.15) 	pi.set_servo_pulsewidth(bl, 1800)   	 	time.sleep(0.15) 	pi.set_servo_pulsewidth(tilt, 2000) 	time.sleep(0.15) 	pi.set_servo_pulsewidth(br, 1800)  	time.sleep(0.15) 	pi.set_servo_pulsewidth(tilt, 1500)  	time.sleep(0.15)  	pi.set_servo_pulsewidth(bl, 1500)    	time.sleep(0.15) 	pi.set_servo_pulsewidth(br, 1500)    	time.sleep(0.15) 	return;

 def right(): 	pi.set_servo_pulsewidth(tilt, 800)  	time.sleep(0.15) 	pi.set_servo_pulsewidth(bl, 800)   	 	time.sleep(0.15) 	pi.set_servo_pulsewidth(tilt, 2000) 	time.sleep(0.15) 	pi.set_servo_pulsewidth(br, 800)  	time.sleep(0.15) 	pi.set_servo_pulsewidth(tilt, 1500)  	time.sleep(0.15)  	pi.set_servo_pulsewidth(bl, 1500)    	time.sleep(0.15) 	pi.set_servo_pulsewidth(br, 1500)    	time.sleep(0.15) 	return;

	 def stop(): 	pi.set_servo_pulsewidth(tilt, 0)  	time.sleep(0.15)  	pi.set_servo_pulsewidth(bl, 0)    	time.sleep(0.15) 	pi.set_servo_pulsewidth(br, 0)    	time.sleep(0.15) 	 	return
  def obstacleDetected(): 	backward() 	backward() 	backward() 	backward() 	backward() 	right() 	right() 	right() 	 	return
  def turnHead(): 	pi.set_servo_pulsewidth(head, 700) 	time.sleep(0.5) 	pi.set_servo_pulsewidth(head, 2100) 	time.sleep(0.5) 	pi.set_servo_pulsewidth(head, 1500) 	time.sleep(0.5)  	return 
  def autoMode(): 	print ('Running in auto mode!')  	turnHead() 	 	time.sleep(0.5) 	GPIO.output(trig, 0) 	time.sleep(0.5) 	 	GPIO.output(trig,1) 	time.sleep(0.00001) 	GPIO.output(trig,0) 	 	while GPIO.input(echo) == 0: 		pulse_start = time.time() 	 	while GPIO.input(echo) == 1: 		pulse_end = time.time()  	pulse_duration = pulse_end - pulse_start 	 	distance = pulse_duration * 17150 	 	distance = round(distance, 2) 	 	if distance > 1 and distance

动手制作机器人,六足机器人DIY

【导读】教程简单,材料容易获取,非常适合入门业余爱好者。动手制作出属于自己的而机器人吧!

 

 设计原型 

【知识】动手制作机器人,六足机器人DIY

 

机器人的制作者也是一个业余的机器人爱好者

为了做出这个东西

自学了单片机,加上自己软件开发的基础

以及结合了过去做模型积累的一些动手经验

 

实际出来的成品是这样子哒~

【知识】动手制作机器人,六足机器人DIY

1

工具与材料

 

1

关节和基础结构的制作材料——PVC线槽

【知识】动手制作机器人,六足机器人DIY

采用PVC线槽的原因是取材容易、价格便宜,一般的五金店都有卖,而且便于加工、强度和重量都合适。

2

2.5g微型舵机

【知识】动手制作机器人,六足机器人DIY

考虑尽可能的缩小体积,所以采用的是2.5g微型舵机,6只脚每只3个关节,总共18个关节,也就是18个舵机。

 

但是小瓦君在这里提醒一下,2.5g的舵机由于舵机力矩不足,导致支撑腿力量不够,静止站立的时候还勉强,但在行走时就经常发生“腿软”现象。建议尝试跟着做的宝宝们换9g的舵机。

3

AVR单片机MEGA16芯片

【知识】动手制作机器人,六足机器人DIY

【知识】动手制作机器人,六足机器人DIY

 

2

基本机械结构

2.1 原始加工件

【知识】动手制作机器人,六足机器人DIY

● 把PVC线槽切成关节的形状。

2.2 大腿横向关节

【知识】动手制作机器人,六足机器人DIY

● 这是6只大腿的横向关节,全部都是一样,应该是两两对称的。

2.3 关节控制的舵机

【知识】动手制作机器人,六足机器人DIY

● 把舵机尝试安装到关节件上。

2.4 完善关节件

【知识】动手制作机器人,六足机器人DIY

● 进一步打磨修饰关节件。

【知识】动手制作机器人,六足机器人DIY

● 完成后的6只大腿的横向关节件。

2.5 安装关节舵机

【知识】动手制作机器人,六足机器人DIY

● 大腿横向关节上的舵机已经装好。其中一个舵机连接主躯干,另一个连接大腿的纵向关节。

2.6 安装主躯干

【知识】动手制作机器人,六足机器人DIY

● 主躯干也是用PVC线槽做的,连接上6只大腿横向关节。

● 关节舵机与躯干是靠舵盘连接的,舵盘是用自攻螺丝固定在躯干上。中间有一个洞是用来给自攻螺丝最后总装时固定嵌入的舵机主轴的。

【知识】动手制作机器人,六足机器人DIY

为了更牢固,并减轻重量,每个舵盘的固定螺丝由2颗大号的自攻螺丝改为4颗1.2mm的带螺母的小机牙螺丝。

 

● 另外,关于大腿纵向关节和小腿关节的图片,其实都差不多,只是形状有不同,但是由于中间忘了拍照了,所以这里就省略掉了。

2.7 完整的机械结构

● 完整组装好的机械结构,有点样子了。

【知识】动手制作机器人,六足机器人DIY

● 主躯干、大腿横向关节、大腿纵向关节、小腿关节,都是PVC线槽做的。18个关节的舵机也全部装好。

● 本来躯干上固定舵机舵盘的螺丝都是螺母在下面的,但是因为选择的螺丝长了一点,往下装会影响底部舵机的旋转,所以改为螺母向上装,虽然是看起来是难看一点。不过后面会在躯干上再装上电路板挡住一点,相对就好一些。

3

基本电路系统

3.1 控制电路

【知识】动手制作机器人,六足机器人DIY

● 控制电路的核心采用AVR单片机的MEGA16芯片,考虑到体积,同时也想有点挑战性,没有直接用现成舵机控制板,而是用核心板准备自己写舵机控制程序。

3.2 电路调试

【知识】动手制作机器人,六足机器人DIY

● 初步完成基本电路的安装,连接电脑烧录程序,进行简单的舵机控制的调试。

● 确定舵机动作幅度所需要的PWM频率时,用到了舵机测试器

● 除了通过USBASP连接电脑之外,电源也暂时是外接的电池组。

3.3 动作调试

● 编好固定动作的程序,烧录到电路上,进行简单的动作调试。

【知识】动手制作机器人,六足机器人DIY

来一个动作“张牙舞爪”。

【知识】动手制作机器人,六足机器人DIY

● 再来一个动作“缩成一团”。

● 以上两个动作都是靠肚子顶住桌面的,还没有实现用脚站立。

 

3.5 站起来

【知识】动手制作机器人,六足机器人DIY

● 接下来是关键的一个动作——从趴着的状态下自行站起来。

● 由于2.5g舵机的力量不足,站起来后还是有点歪歪扭扭的,虽然有点艰难,但终究是站起来了。

【知识】动手制作机器人,六足机器人DIY

● 站起来后的俯视图。

● 舵机的力量确实不足,小腿必须是直的(斜的话撑不起来)。而且虽然站起来了,但是舵机由于力矩偏小,还是有点吱吱的抖动。 这还没有装上电池,希望加上电池的重量后舵机还能顶住。

●所以前面小瓦君才会建议大家换9g的舵机

 

3.6 完善供电

【知识】动手制作机器人,六足机器人DIY

● 本来希望把舵机和单片机的电源完全独立分开,以避免干扰,最后是只用了一个组电池:舵机直接接电池,单片机通过稳压电路连接同一组电池,实践证明中间的稳压电路还是能够很好的实现抗干扰的隔离功能。

● 舵机供电,开始曾经考虑过用2节5号镍氢电池通过一个DC-DC大电流升压板的升压到5V给所有舵机供电,经实验后发现完全行不通——18个舵机需要的电流太大了,最后只能考虑直接用2节3.7V的7号锂电串联起来供电。

【知识】动手制作机器人,六足机器人DIY

● 翻过来,可以看到底部的电池。

● 单片机供电,本来考虑采用一节7号镍氢电池通过一个块微型DC-DC升压板升压到5V,为缩小体积后来也考虑过用3V的CR2032纽扣锂电升压,但实际调试后发现电流也较大一下子就耗光电池了。最后是用一块7805稳压小板直接接到2节锂电上获得5V电压。

3.7 完善电路

【知识】动手制作机器人,六足机器人DIY

● 给电路上加上了几个控制开关(总电源、舵机电源、单片机电源、单片机复位)。

● 接USBASP的10Pin插座也固定在了顶部的线路板上。

【知识】动手制作机器人,六足机器人DIY

● 另外顶部的电路板留了一些位置,准备以后接传感器用的。

【知识】动手制作机器人,六足机器人DIY

● 侧视图,可以看得到屁股后面的带散热片的7805稳压芯片。

3.8 全负荷状态

【知识】动手制作机器人,六足机器人DIY

● 把2节7号的锂电池都装上,在全重状态下,也能简单的站起来。虽然还有一点抖动,但终究是能够独立站起来的。

3.9 继续完善

【知识】动手制作机器人,六足机器人DIY

● 18只舵机,耗电还是比较大的,所以再加装了一块电池的电压监控板,可以实时看到锂电的电压变化情况。

【知识】动手制作机器人,六足机器人DIY

● 与一个香烟盒对比大小。

● 接下来的工作还是在继续调试程序控制动作,最终考虑加上一些传感器并支持用红外或者蓝牙进行遥控!