当前位置: 首页 > news >正文

完全自定义纯代码打造你的wordpress站点侧边栏福州鼓楼区建设局网站

完全自定义纯代码打造你的wordpress站点侧边栏,福州鼓楼区建设局网站,台州seo网站排名,微网站 电脑网站 统一#1024程序员节#xff5c;征文# 往期回顾 前期准备 摄像头bug解决 手搓机械臂 视觉模块的封装 第一问#xff1a; 需要将一颗黑棋#xff0c;放入棋盘中的五号位置。 理想思路#xff1a;依据摄像头#xff0c;依据机械臂及其传感器。建立机械臂的逆运动学方程。然后完…#1024程序员节征文# 往期回顾 前期准备 摄像头bug解决 手搓机械臂 视觉模块的封装 第一问 需要将一颗黑棋放入棋盘中的五号位置。 理想思路依据摄像头依据机械臂及其传感器。建立机械臂的逆运动学方程。然后完成精准定位考虑到手搓机械臂的不稳定性。以及摄像头的精度。 所以本团队不使用上述思路。 实施思路将一个黑色棋子的位置与5号棋子的位置进行绑定。也就是说确定三个舵机的角度即可。 下面附上我们团队的代码 import RPi.GPIO as GPIO import time import cv2 import numpy as np import copyclass ArmControl:def __init__(self):GPIO.setwarnings(False)# 初始化舵机引脚self.servos {base: 16,shoulder: 20,elbow: 21}# 设定每个九宫格位置对应的舵机角度self.position_angles {0: (55, 100, 80), # 初始位置1: (91, 107, 40), # 位置 1: 基座 97°肩部 14°肘部 0°2: (86, 106, 38), # 位置 2: 基座 90°肩部 14°肘部 0°3: (81, 106, 36), # 位置 3: 基座 82°肩部 14°肘部 0°4: (90, 102, 68), # 位置 4: 基座 97°肩部 5°肘部 3°5: (86, 102, 68), # 位置 5: 基座 90°肩部 0°肘部 78°6: (78, 102, 68), # 位置 6: 基座 82°肩部 5°肘部 3°7: (89, 101, 88), # 位置 7: 基座 99°肩部 0°肘部 45°8: (84, 102, 88), # 位置 8: 基座 90°肩部 0°肘部 45°9: (78, 101, 88), # 位置 9: 基座 80°肩部 0°肘部 46°A1: (99, 108, 49), # 取棋子位置 1: 基座 97°肩部 14°肘部 0°B1: (101, 104, 71), # 取棋子位置 1: 基座 97°肩部 14°肘部 0°C1: (100, 104, 87), # 取棋子位置 1: 基座 97°肩部 14°肘部 0°D1: (103, 103, 100), # 取棋子位置 1: 基座 97°肩部 14°肘部 0°A2: (74, 107, 47), # 取棋子位置 2: 基座 97°肩部 14°肘部 0°B2: (70, 104, 73), # 取棋子位置 2: 基座 97°肩部 14°肘部 0°C2: (68, 104, 90), # 取棋子位置 2: 基座 97°肩部 14°肘部 0°D2: (63, 103, 104), # 取棋子位置 2: 基座 97°肩部 14°肘部 0°}# 设置GPIO模式GPIO.setmode(GPIO.BCM)# 设置舵机引脚self.pwm {}self.last_time 0 # 上一次设置时间self.debounce_time 0.5 # 防抖时间秒for servo in self.servos.values():GPIO.setup(servo, GPIO.OUT)self.pwm[servo] GPIO.PWM(servo, 50) # 50Hzself.pwm[servo].start(0)def set_servo_angle(self, pwm, target_angle, speed):将舵机平滑旋转到指定角度并实现防抖逻辑current_time time.time() # 获取当前时间# 防抖逻辑if current_time - self.last_time self.debounce_time:return # 如果距离上次设置时间小于防抖时间则不执行# 计算占空比duty self.angle_to_duty_cycle(target_angle)# 确保占空比在合理范围内if duty 0:duty 0elif duty 12: # 假设最大是180度duty 12pwm.ChangeDutyCycle(duty)time.sleep(speed) # 按速度控制时间延迟pwm.ChangeDutyCycle(0) # 停止PWM信号self.last_time current_time # 更新最后设置时间def move_servo(self, servo_name, angle):指定舵机移动到指定角度self.set_servo_angle(self.pwm[self.servos[servo_name]], angle, 0.5) # 设置速度为0.5秒def move_to_position(self, position):移动机械臂到指定棋盘位置1-9if position in self.position_angles:angles self.position_angles[position] # 获取角度元组self.move_servo(base, angles[0])time.sleep(0.5)# 移动基座self.move_servo(elbow, angles[2])time.sleep(0.5)self.move_servo(shoulder, angles[1]) # 移动肩部# 移动肘部else:print(无效的位置编号)def remove_to_position(self, position):移动机械臂到指定棋盘位置1-9if position in self.position_angles:angles self.position_angles[position] # 获取角度元组self.move_servo(shoulder, angles[1])# 移动基座time.sleep(0.5)self.move_servo(elbow, angles[2])time.sleep(1)self.move_servo(base, angles[0])else:print(无效的位置编号)def angle_to_duty_cycle(self, angle):将角度转换为PWM占空比0到100之间return (angle / 18) 2 # 示例转换具体根据舵机类型调整def cleanup(self):清理GPIO设置for pwm in self.pwm.values():pwm.stop()GPIO.cleanup()class RelayController: # 电磁铁控制def __init__(self, relay_pin,led_pin, debounce_time0.5):初始化继电器控制类:param relay_pin: 继电器连接的 GPIO 引脚:param debounce_time: 控制继电器的状态保持时间秒self.relay_pin relay_pinself.led_pinled_pinself.debounce_time debounce_time# 设置 GPIO 模式为 BCMGPIO.setmode(GPIO.BCM)# 设置引脚为输出模式GPIO.setup(self.relay_pin, GPIO.OUT)GPIO.setup(self.led_pin, GPIO.OUT)def turn_on(self):开启继电器print(继电器开启)GPIO.output(self.relay_pin, GPIO.HIGH) # 继电器开启def turn_off(self):关闭继电器print(继电器关闭)GPIO.output(self.relay_pin, GPIO.LOW) # 继电器关闭# 点亮LED灯1秒GPIO.output(self.led_pin, GPIO.HIGH) # 点亮LEDtime.sleep(1) # 等待1秒GPIO.output(self.led_pin, GPIO.LOW) # 关闭LEDdef run(self):控制继电器的状态try:while True:self.turn_on()time.sleep(self.debounce_time) # 保持状态self.turn_off()time.sleep(self.debounce_time) # 保持状态except KeyboardInterrupt:print(程序终止清理 GPIO 设置)finally:self.cleanup()def cleanup(self):清理 GPIO 设置GPIO.cleanup()def main1():# 初始化舵机控制arm_control ArmControl()relay_controller RelayController(relay_pin17,led_pin12) # 假设继电器连接在 GPIO 17 引脚try:# 初始位置0print(移动到初始位置)arm_control.move_to_position(A1)time.sleep(10) # 延时2秒确保机械臂到达初始位置arm_control.remove_to_position(0)time.sleep(2)arm_control.move_to_position(B1)time.sleep(10) # 延时2秒确保机械臂到达初始位置arm_control.remove_to_position(0)time.sleep(2)arm_control.move_to_position(C1)time.sleep(10) # 延时2秒确保机械臂到达初始位置arm_control.remove_to_position(0)time.sleep(2)arm_control.move_to_position(D1)time.sleep(10) # 延时2秒确保机械臂到达初始位置arm_control.remove_to_position(0)time.sleep(2)arm_control.move_to_position(A2)time.sleep(10) # 延时2秒确保机械臂到达初始位置arm_control.remove_to_position(0)time.sleep(2)arm_control.move_to_position(B2)time.sleep(10) # 延时2秒确保机械臂到达初始位置arm_control.remove_to_position(0)time.sleep(2)arm_control.move_to_position(C2)time.sleep(10) # 延时2秒确保机械臂到达初始位置arm_control.remove_to_position(0)time.sleep(2)arm_control.move_to_position(D2)time.sleep(10) # 延时2秒确保机械臂到达初始位置arm_control.remove_to_position(0)except KeyboardInterrupt:print(操作中断)finally:# 清理GPIO设置arm_control.cleanup()relay_controller.cleanup()if __name__ __main__:main1()
http://www.hkea.cn/news/14300393/

相关文章:

  • 网站站点是什么?如何创建站点?外贸网站分析
  • 合肥网站建设过程固原网站制作
  • 电脑上建设银行网站打不开网站配色 绿色
  • 杭州 企业门户网站建设软文世界官网
  • 免费建网站的谢岗网站仿做
  • 工商银行建设银行招商银行网站小程序开发代理
  • 网站开发需要营销型网站要点
  • 有备案号的网站是公司的吗汕头企业网站
  • 大型的建设工程类考试辅导网站长春网络公司合作
  • 美橙建站五合一建站套餐申请wordpress如何开发手机版
  • 本地做网站绑定域名怎么做网页的超链接
  • 企业建设网站注意事项施工企业在施工过程中发现设计文件和图纸有差错的应当
  • wordpress怎么编辑网站建设网站赚的是什么钱
  • 建设中心小学网站涿州规划建设局网站
  • 济南网站建设与维护php 微信 网站建设
  • 百度爱采购网站网站策划书的撰写流程是什么
  • 公司网站开发软件建设阅读网站的意义
  • 永康市建设局网站怎样申请微信小程序卖货
  • 贵州省城乡与住房建设厅网站深圳网络推广公司推荐
  • 广元网站建设seo优化营销制作设计前台网站模板
  • 网站设计公司排行江苏营销型网站公司
  • 虚拟网站免费注册护理专业主要学什么
  • 厦门网站制作收费长沙营销型网站制
  • 潮州哪里有做网站网络服务包含哪些服务
  • 效果图代做网站p2p网站开发的流程图
  • 潍坊网站建设公司有哪些做货代在上面网站找客户比较多
  • 网站建设合作协议文本网站模版如何使用
  • 网站建设大公司域名备案查询网
  • 宜宾市网站建设虚拟网站建设
  • wordpress仿p站主题互联网应用技术学什么