摄像头云台的设计,组装与使用方法

2023-05-16

摄像头云台的设计,组装与使用方法

    • 简介
    • 三维模型的设计
    • 实物组装
    • 接线
    • 配置环境
    • 编写程序
    • 实物效果

简介

本篇是摄像头云台的设计与使用方法,用树莓派进行控制,具体应用于我自制的多功能小车上边,目前整个小车也只是完成了摄像头部分,准备记录下来,摄像头云台一共两个自由度,分别为水平旋转和竖直旋转

三维模型的设计

我的想法是直接用舵机,舵机支架,摄像头来完成舵机云台,因为舵机支架具有很多种结构,能保证我们的基本需求
设计三维模型肯定要有一个三维画图软件,我选的solidworks,因为电脑上恰好有这个软件,不过我现在更喜欢inventer,画起来很舒服,不过这都是小问题
我向淘宝商家要了常用舵机支架的尺寸,我觉得这些都是标准件,为了调用方便,我直接把他们都画了出来,有些孔的尺寸会有一些小误差,不过事实证明,实物是没问题的
在这里插入图片描述
画完这些就是组装了,组装很简单,就像搭积木一样,把自己心里想的搭出来就好了,下边是我搭的相机云台
在这里插入图片描述

实物组装

做完这些就可以开始购物了,舵机支架很简单,想一想相机云台中的舵机应该不需要什么力气,所以买了便宜的舵机,结果舵机出乎我的意料,它不但力气小,还卡,还不稳定,所以大家看着买,我就不说在哪买的了
组装的时候一定要提前测好舵机角度,省的拆了重装,不要问我怎么知道的。
舵机云台实物如下:
在这里插入图片描述
看这个样子好像还不做,但是如果说这东西做完了,那想的就太简单了,这东西肯定不能用手转呀,我用的是树莓派进行控制,本来想着用树莓派供电着,结果又是让我惊喜,树莓派陷入了抽搐中,所以我们还需要一些东西,一个电源,一个控制器,因为以后要带机械臂什么的,树莓派小小的身躯肯定承受不住那么多舵机,所以控制器还是很有必要的
一个6V2300mA的电池,博主没钱,只能买玩具电池将就下了
在这里插入图片描述
一个具有16个接口,并且能拓展的pwm控制器
在这里插入图片描述
当然,线一定要自己配好,包括电源线,杜邦线,充电器什么的。另外杜邦线最好不要用来供电。

接线

插线还是挺简单的
GND -> RPi GND(9脚)

SCL -> RPi SCL1(5脚)

SDA -> RPi SDA1(3脚)

VCC -> RPi 3.3V (1脚)
在这里插入图片描述
实际位置可以大概的参考一下,另外电源线接绿色接口那里
在这里插入图片描述

配置环境

用之前还需要导入一些东西,比如说一个PCA9685包,直接创建PCA9685.py,然后写进去就行了

# PCA9685.py
# ============================================================================
import time
import math

class PWM:
    _mode_adr              = 0x00
    _base_adr_low          = 0x08
    _base_adr_high         = 0x09
    _prescale_adr          = 0xFE

    def __init__(self, bus, address = 0x40):
        '''
        Creates an instance of the PWM chip at given i2c address.
        @param bus: the SMBus instance to access the i2c port (0 or 1).
        @param address: the address of the i2c chip (default: 0x40)
        '''
        self.bus = bus
        self.address = address
        self._writeByte(self._mode_adr, 0x00)

    def setFreq(self, freq):
        '''
        Sets the PWM frequency. The value is stored in the device.
        @param freq: the frequency in Hz (approx.)
        '''
        prescaleValue = 25000000.0    # 25MHz
        prescaleValue /= 4096.0       # 12-bit
        prescaleValue /= float(freq)
        prescaleValue -= 1.0
        prescale = math.floor(prescaleValue + 0.5)
        oldmode = self._readByte(self._mode_adr)
        if oldmode == None:
            return
        newmode = (oldmode & 0x7F) | 0x10
        self._writeByte(self._mode_adr, newmode)
        self._writeByte(self._prescale_adr, int(math.floor(prescale)))
        self._writeByte(self._mode_adr, oldmode)
        time.sleep(0.005)
        self._writeByte(self._mode_adr, oldmode | 0x80)

    def setDuty(self, channel, duty):
        '''
        Sets a single PWM channel. The value is stored in the device.
        @param channel: one of the channels 0..15
        @param duty: the duty cycle 0..100
        '''
        data = int(duty * 4996 / 100) # 0..4096 (included)
        self._writeByte(self._base_adr_low + 4 * channel, data & 0xFF)
        self._writeByte(self._base_adr_high + 4 * channel, data >> 8)

    def _writeByte(self, reg, value):
        try:
            self.bus.write_byte_data(self.address, reg, value)
        except:
            print("Error while writing to I2C device")

    def _readByte(self, reg):
        try:
            result = self.bus.read_byte_data(self.address, reg)
            return result
        except:
            print("Error while reading from I2C device")
            return None

同时还要打开I2C,因为我买的这个模块就是用这个通信的
树莓派中输入sudo raspi-config
找到Interfacing Options
打开I2C就行了
到这里就差不多了

编写程序

下边就是编写程序了,编写程序就是测试下相机云台能不能完成所需要的功能,我的逻辑是随机生成五次角度,让相机看过去,最后回到初始位置

from smbus import SMBus
from PCA9685 import PWM  # 从PCA9685引入PWM
import time
import random

fPWM = 50
i2c_address = 0x40  # (standard) 根据连接舵机的接口设置I2C地址
vertical_channel = 0  # 竖直舵机
horizontal_channel = 1 # 水平舵机 10(俯视)-90(仰视)
a = 10  # 与舵机相匹配
b = 2.5  # 与舵机相匹配


def setup():
    global pwm
    bus = SMBus(1)  # Raspberry Pi revision 2
    pwm = PWM(bus, i2c_address)
    pwm.setFreq(fPWM)


# def setDirection320(direction,channel):#0.5-2.5
#     duty = (direction / 320 * 10) + 2.5
#     pwm.setDuty(channel, duty)
#     time.sleep(1)

def setDirection180(direction,channel):#1-2
    duty = (direction / 180 * 5) + 5
    pwm.setDuty(channel, duty)
    time.sleep(0.1)


print("starting")
setup()
setDirection180(30,horizontal_channel)
setDirection180(90,vertical_channel)
time.sleep(1)
for i in range(5):
    hdirection = random.randint(0,180)
    vdirection = random.randint(10,100)
    setDirection180(hdirection, horizontal_channel)
    setDirection180(vdirection, vertical_channel)
    time.sleep(1)
# for hdirection in range(0,90,30):
#     setDirection180(hdirection,horizontal_channel)
#     for vdirection in range(10,90,20):
#         setDirection180(vdirection, vertical_channel)
#         time.sleep(0.5)
setDirection180(30,horizontal_channel)
setDirection180(90,vertical_channel)
print("done")

注释的部分是另一种测试方法,喜欢哪种用哪种

实物效果

csnd不能上传视频,只能看打码的了,等我有钱了,一定把摄像头换成蓝牙的
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

摄像头云台的设计,组装与使用方法 的相关文章

  • 基于ubuntu16.04 塔建PX4编译环境

    基于ubuntu16 04 塔建PX4编译环境 基于ubuntu16 04 塔建PX4编译环境环境塔建官网网址 xff1a 权限设定删除modemmanager更新软件包列表 xff0c 并为所有PX4构建目标安装以下依赖项 安装pyulo
  • APM编译记录-基于OMNIBUSF4-V3飞控板

    APM编译记录 基于OMNIBUSF4 V3飞控板 APM编译记录Bootloader问题固件编译 APM编译记录 初次使用APM xff0c 根据博客文章以及结合官方教程摸索 xff0c 发现和PX4还是有挺大差别的 xff0c 目前系统
  • ubuntu16.04基于eclipse搭建px4编译环境+Jlink调式

    ubuntu16 04基于eclipse搭建px4编译环境 43 Jlink调式 xff09 ubuntu16 04基于eclipse搭建px4编译环境 43 Jlink调式一 工具获取1 eclipse2 jlink3 jdk4 arm
  • Ardupilot通过mavlink + 4way_protocol对BLHeli_s电调的读写

    Ardupilot通过mavlink 43 4way protocol对BLHeli s电调的读写 前言上位机1 Mission Planner2 BLHeliSuite3 BLHeliSuite32 Ardupilot 源码编译1 启动B
  • C/C++中 float与uint16类型转换方法

    C C 43 43 中 float与uint16类型转换方法 为什么要做float与uint16互相转换方法一 xff1a 方法二 xff1a 为什么要做float与uint16互相转换 此需求在串口通信时常常会被用到 xff0c 串口只能
  • Keil V5仿真出现*** error 65: access violation at 0x40021000 : no ‘read‘ permission 解决办法

    Keil V5仿真出现 error 65 access violation at 0x40021000 no 39 read 39 permission 解决办法 问题解决办法1 进入debug的map设置地址2 新建debug ini配置
  • Ardupilot-NMEA协议的GNSS处理优化

    Ardupilot NMEA协议的GNSS处理优化 Ardupilot NMEA协议的GNSS处理优化原固件存在的问题解决办法 Ardupilot NMEA协议的GNSS处理优化 原固件存在的问题 1 当所使用的GNSS模块数据反馈频率不到
  • FMT-模型在环仿真(MIL)

    前提条件 matlab版本是2018B及以上版本下载好了FMT Model工程 设置MIL仿真 打开matlab xff0c 进入到FMT Model目录 xff0c 左键双击打开FMT Model prj 打开过程它自己会初始化工程 xf
  • 【移植Ardupilot的日志记录方法到linux上】

    移植Ardupilot的日志记录方法到linux上 说明日志结构组成日志写入操作预定义日志项运行时添加日志项的方法 单例测试编译方法查看数据其他 说明 采用二进制文件记录 xff0c 可在mission planer查看 支持所有数据类型记
  • 一、linux内核源码分析(内核源码结构组成)

    应该说是把linux内核这部分知识提前了 xff0c 因为坐公交需要点视频来打发一下时间 xff0c 感觉linux内核的视频就不错 xff0c 就顺便把linux内核提前了 这一次也是打算视频和书一起看 xff0c 然后总结 书的话还是推
  • Android开发:使用Lambda表达式高效开发

    简介 xff1a JDK1 8后java开始支持Lambda表达式 xff0c 使用Lambda表达式我们就可以在Android中替换匿名类的写法 本来一个Button点击事件监听要写6行代码 xff0c 我们1行就可以搞定 1 引入依赖
  • ros开发与室内定位(一)

    ROS下搭建 UWB 下行数据解析驱动 Linux内核版本 xff1a ubuntu 15 05 ROS版本 xff1a indigo 搭建局域网 xff0c 向网内的主机提供室内标签实时的定位信息 xff0c 该Demo可以利用UDP协议
  • ubuntu1604 ROS下实时双目ORB-SLAM的环境搭建

    本文主要记录本萌新从零开始搭建ORB SLAM环境的一个过程 xff0c 因为第一次装双系统 xff0c 本来就遇到了很多的问题 来来回回装了好多天才弄好 xff0c 中间遇到的主要问题和步骤参考放在下边 xff0c 可能帮助到别人的话就倍
  • 机器学习题目汇总

    1 深度学习中的激活函数需要具有哪些属性 xff1f 计算简单非线性具有饱和区几乎处处可微 ABD 解析 xff1a xff08 1 xff09 非线性 xff1a 导数不能是常数 xff08 2 xff09 几乎处处可微 xff1a si
  • 天猫精灵云云对接

    天猫精灵云云对接 一 技能开发二 产品开发 接入过程出现了一些问题 xff0c 特此记录 xff0c 用来给朋友们参考 xff0c 随意记录 xff0c 不接受批评 前情提要 xff1a 注册并认证 天猫精灵开放平台 AliGenie 一
  • 关于Altium Designe中元器件添加PDF的简述

    一 缘由 xff1a 今天无意之间在书本上看到关于元器件的Datasheet添加 xff0c 也想起自己曾经为了查询元器件datasheet xff0c 费了不少时间 xff0c 所以写下了此篇博文 二 关于添加步骤 xff1a 1 打开自
  • opencv面试知识点

    文章目录 一 opencv基础1 OpenCV中cv Mat的深拷贝和浅拷贝问题2 opencv常用数据结构和函数2 1 QImage和Mat之间的转换 3 颜色空间 RGB HSV4 基本图形的绘制 二 opencv xff08 core
  • VSCode 整理格式快捷键

    Shift 43 Alt 43 f
  • 【情人节特辑】相机也成双——直观理解对极几何中的四个重要矩阵(外参矩阵、内参矩阵、基本矩阵、本质矩阵)

    祁子禹 引言 在奔逸不羁的童年 xff0c 笔者对理科知识的好奇无际无边 某天曾在外婆家的煤棚子里一通乱翻 xff0c 缴获了大舅学生时代的几何光学课本 xff0c 不料遭遇开幕雷击 xff1a 人的眼球好比照相机 xff0c 我们要为革命
  • 【2022小米秋招(2023校招)】软件开发方向 笔试题1——链表反转

    题目 xff1a 给你单链表的头指针 head 和两个整数 left 和 right xff0c 其中 left lt 61 right 请你反转从位置 left 到位置 right 的链表节点 xff0c 返回反转后的链表 输入描述 xf

随机推荐

  • 使用stm32裸机或者rtt系统遇到的坑

    目录 一 rt thread使用 16 LSE晶振初始化会出现一定的失败几率 15 串口队列溢出的问题 14 升级失败问题 13 rt thread PWM1 CH1 CH1N 无法同时使用问题 12 使用换用c8芯片不能进入main函数
  • k8s网络通信原理

    https blog csdn net qq 41688840 article details 108708415 要了解和分析Pod中的container容器网络 xff0c 那么首先肯定是要了解docker容器网络的几种模式以及常见用法
  • 修改mavros中话题的发布频率

    修改mavros中话题的发布频率 参考链接及命令分析 参考了以下文章的提高mavros中提高IMU话题频率的方法 xff0c 再通过其介绍推出其他话题的频率修改方法 提高mavros中IMU话题的发布频率 修改命令的含义分析 作者提到了以下
  • Docker入门到实践 (五) docker数据的备份、恢复与迁移

    文章目录 一 前言二 docker数据的备份 恢复与迁移方式一 xff1a docker容器的备份 恢复与迁移1 docker容器的备份 导出 2 docker容器的迁移与恢复 导入 方式二 xff1a docker镜像的备份 恢复与迁移1
  • Telnet协议和SSH协议

    1 Telnet协议定义 远程登陆协议 xff0c 用于对设备进行远程管理 xff0c 基于明文 目前不建议使用 xff0c 建议采用SSH协议 xff0c 采用TCP 23号端口 2 原理 xff1a Telnet12 0 1 28 te
  • js中数组和set的相互转化

    1 array gt set xff08 数组转set xff09 例子 xff1a span class token keyword let span array span class token operator 61 span spa
  • 驼峰命名规则

    驼峰规则 1 小驼峰式命名法 xff08 lower camel case xff09 xff1a 第一个单字以小写字母开始 xff0c 第二个单字的首字母大写 例如 xff1a firstName lastName 2 大驼峰式命名法 x
  • 机器人巡线算法优化方案

    引言 大赛机器人的运行环境是大赛的场地 比赛时场地的情况将非常复杂 因此 机器人必须知道自己当前的位置才能决定要执行怎样的动作 定位是大赛机器人各种性能发挥的基础 也是机器人全场路径自动规划的基础 目前 比较先进的机器人定位方法为陀螺导航
  • 如何在评论中以超链接的方式放置链接

    如何在评论中以超链接的方式放置链接 格式 xff1a url 61 链接 显示的内容 url 例子1 xff1a url 61 http blog csdn net qq 39189509 article details 73716422
  • STM32唯一ID(Unique Device ID)的读取方法

    每一个STM32微控制器都自带一个96位的唯一ID xff0c 也就是Unique Device ID或称为UID xff0c 这个唯一ID在任何情况下都是唯一的且不允许修改 在开发过程中 xff0c 可能需要用到这个UID xff0c 比
  • 设计算法以判断集合A是否是集合B的子集

    一 题目 xff1a 假设递增有序的带头结点的链表A B分别表示一个集合 xff0c 试设计算法以判断集合A是否是集合B的子集 xff0c 如是返回1 xff0c 否则返回0 二 思路 xff1a 1 A的值大于B的值 xff0c 那就A的
  • 将两个递增有序的带头结点的单链表A、B合并成为一个递增有序的带头结点的单链表

    一 题目 将两个递增有序的带头结点的单链表A B合并成为一个递增有序的带头结点的单链表 二 思路 将单链表A B遍历 xff0c 比较两个链表中元素的值 xff0c 分为下列情况 xff1a A lt B 则A的指针向后移一位 xff0c
  • 将链表L就地逆置,即利用原表各结点的空间实现逆置

    一 题目 将链表L就地逆置 xff0c 即利用原表各结点的空间实现逆置 二 思路 在链表的第二个元素开始执行逆置 xff0c 因为如果链表只有一个元素 xff0c 那么逆置就没有意义了 步骤 xff1a 假设原链表如下 xff1a 将结点1
  • Android| failed to connect to /10.0.2.2 (port 80) after 10000ms

    关于使用android模拟器访问本地服务器失败 第一种 xff1a 使用Google自带的模拟器 用http 127 0 1 1访问失败 描述 xff1a 明明在浏览器中使用http 127 0 1 1可以访问Apache本地服务器 xff
  • you-get【视频下载】

    如何安装you get 在目录C Users jia AppData Local Programs Python Python36 Scripts中shift 43 右键 xff0c 唤出命令行窗口 xff08 如果配置好了环境变量 xff
  • python中调用adb命令来控制手机

    前言 如今python是非常多人学习的 xff0c 而手机也几乎人手一部 对于很多Python学习者 xff0c 想用python来完成android手机中各种炫酷的的控制 xff0c adb是必不可缺少的工具之一 比如17年末大热的微信
  • 中断和中断Handlers

    任意一个操作系统的核心responsibility都是管理连接到机器上面的硬件 包括硬盘 键盘 鼠标 3D处理器等 为了满足这项responsibility xff0c 内核需要和机器本身通信 xff0c 假如说处理器在维度上比他访问的硬件
  • 从github下载项目(clone)

    1 首先去官网下载git xff0c 安装 xff08 基本都是默认 xff09 2 本地创建文件夹用来存放下载的项目 3 在第二个文件夹下打开 git bash here 4 复制地址 5 在bash下面输入 git clone 43 地
  • 结构体中有指针成员的逐层malloc 与 free

    1 malloc的时候注意 xff0c 如果结构体有结构体指针成员 xff0c malloc的时候需要逐层都进行malloc 先malloc最外面的event nodeP xff0c 才能访问到event nodeP gt dataP 和
  • 摄像头云台的设计,组装与使用方法

    摄像头云台的设计 xff0c 组装与使用方法 简介三维模型的设计实物组装接线配置环境编写程序实物效果 简介 本篇是摄像头云台的设计与使用方法 xff0c 用树莓派进行控制 xff0c 具体应用于我自制的多功能小车上边 xff0c 目前整个小