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

沈阳做网站哪家最便宜企业没有网站怎样做推广方案

沈阳做网站哪家最便宜,企业没有网站怎样做推广方案,wordpress更改了数据库密码错误,温州网站升级#1024程序员节|征文# 往期回顾 前期准备 摄像头bug解决 手搓机械臂 视觉模块的封装 第一问: 需要将一颗黑棋,放入棋盘中的五号位置。 理想思路:依据摄像头,依据机械臂及其传感器。建立机械臂的逆运动学方程。然后完…

#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-9)"""if 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-9)"""if 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_time=0.5):"""初始化继电器控制类:param relay_pin: 继电器连接的 GPIO 引脚:param debounce_time: 控制继电器的状态保持时间(秒)"""self.relay_pin = relay_pinself.led_pin=led_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_pin=17,led_pin=12)  # 假设继电器连接在 GPIO 17 引脚try:# 初始位置(0)print("移动到初始位置")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.yayakq.cn/news/173689/

相关文章:

  • 网站建设设计图专业
  • 深圳住房建设局网站首页装修公司做网站有用吗
  • 贷款网站平台有哪些网页制作培训网站
  • 做门户网站的营业范围最专业的做音乐网站
  • 旅游网站制作素材百度网盘客户端
  • 找网站建设公司好jsp网站服务建设开题报告
  • wordpress站点语言免费网站建设自带后台管理程序
  • 东莞市官网网站建设报价网站如何提高流量
  • 深圳建立网站公司网站宝安的医院网站建设
  • 公司网站设计与实现的项目建议书尤溪县建设局网站
  • 手机网站建设制作教程视频教程宁波建站价格
  • 企业网站服务器广州电商聚集地
  • 怎么做推广和宣传企业做网站我做的网站在手机里滑动怎么这里卡
  • 鲁谷做网站的公司易语言怎么做网站自动登录
  • 南翔企业网站开发建设学企业网站开发
  • 网站开发算互联网公司吗常德房产网
  • 网站开发商业计划书菠菜导航网站可以做
  • 网站一直维护意味着什么wordpress 建设论坛
  • 电子商务网站建设的整体规划什么是专业建设
  • 青岛网站建设公司在哪江门装修公司排名前十名
  • 教育网站报名怎么给网站做关键词搜索
  • 做个个人网站多少钱网站中的作用
  • 做网站的任务书开发公司与物业公司前期合同
  • 牧星网站建立昆明小程序公司
  • 购物建设网站零基础网站建设教学视频
  • 新媒体包不包括公司网站的建设住房和城乡建设部监理工程师网站
  • 课程网站建设特色深圳 网站建设 销售
  • 论坛型网站 建站wordpress多账号权限
  • vi设计与网站建设招标文件wordpress 手机登陆
  • 3d在线设计网站淘宝做导航网站