摆动输入连杆夹持机构

1、运动与受力分析

import sympy as sy
import numpy as np
import matplotlib.pyplot as plt
a,a1,b,b1,c,c1,d2,d3,fi,F,L,e= sy.symbols('a,a1,b,b1,c,c1,d2,d3,fi,F,L,e')
'''
A(-d2,0)
D(0,d3)
B(-d2+a*cos(fi),a*sin(fi))
C(-c*cos(pu),d3+c*sin(pu))
B'=(-d2+a*cos(fi+pi),a*sin(fi+pi))
C'=(c1*cos(theta+pi),-d3+c1*sin(theta+pi))'''
A1=2*c*(d3-a*sy.sin(fi))
B1=-2*c*(d2-a*sy.cos(fi))
C1=(d2-a*sy.cos(fi))**2+(d3-a*sy.sin(fi))**2+c**2-b**2
pu=2*sy.atan((-A1+sy.sqrt(A1**2+B1**2-C1**2))/(C1-B1))
delta=sy.atan((d3+c*sy.sin(pu)-a*sy.sin(fi))/(-c*sy.cos(pu)+d2-a*sy.cos(fi)))+sy.pi
A2=2*c1*(d3-a*sy.sin(fi))
B2=-2*c1*(d2+a*sy.cos(fi))
C2=(d2+a*sy.cos(fi))**2+(d3-a*sy.sin(fi))**2+c1**2-b1**2
theta=2*sy.atan((-A2+sy.sqrt(A2**2+B2**2-C2**2))/(C2-B2))
beta=sy.atan((d3-c1*sy.sin(theta)+a*sy.sin(fi))/(-c1*sy.cos(theta)+d2+a*sy.cos(fi)))
F23=F*(L*sy.cos(pu)+e*sy.sin(pu))/(c*sy.sin(delta+pu))
F23I=-F*(L*sy.cos(theta)+e*sy.sin(theta))/(c1*sy.sin(beta-theta))
M=F23*a*sy.sin(delta-fi)-F23I*a*(beta-fi)
pu_c=pu.subs({a:30,b:79.5,b1:79.5,c:120,c1:120,d2:120,d3:74,e:15,L:100})
delta_c=delta.subs({a:30,b:79.5,b1:79.5,c:120,c1:120,d2:120,d3:74,e:15,L:100})
fi_v=10*np.pi/180
xa=-120
ya=0
xb=-120+30*np.cos(fi_v)
yb=30*np.sin(fi_v)
Cx=-c*sy.cos(pu)
Cy=d3+c*sy.sin(pu)
xc=Cx.subs({a:30,b:79.5,b1:79.5,c:120,c1:120,d2:120,d3:74,e:15,L:100,fi:fi_v})
yc=Cy.subs({a:30,b:79.5,b1:79.5,c:120,c1:120,d2:120,d3:74,e:15,L:100,fi:fi_v})
xd=0
yd=74
B1x=-d2+a*sy.cos(fi+sy.pi)
B1y=a*sy.sin(fi+sy.pi)
C1x=c1*sy.cos(theta+sy.pi)
C1y=-d3+c1*sy.sin(theta+sy.pi)
xb1=B1x.subs({a:30,b:79.5,b1:79.5,c:120,c1:120,d2:120,d3:74,e:15,L:100,fi:fi_v})
yb1=B1y.subs({a:30,b:79.5,b1:79.5,c:120,c1:120,d2:120,d3:74,e:15,L:100,fi:fi_v})
xc1=C1x.subs({a:30,b:79.5,b1:79.5,c:120,c1:120,d2:120,d3:74,e:15,L:100,fi:fi_v})
yc1=C1y.subs({a:30,b:79.5,b1:79.5,c:120,c1:120,d2:120,d3:74,e:15,L:100,fi:fi_v})
# sy.plot(pu_c,(fi,0,80*sy.pi/180))
# sy.plot(delta_c,(fi,0,80*sy.pi/180))fig = plt.figure(figsize=(5, 4))
plt.rcParams['xtick.direction'] = 'in'  # 将x周的刻度线方向设置向内
plt.rcParams['ytick.direction'] = 'in'  # 将y轴的刻度方向设置向内
plt.rcParams['axes.unicode_minus']=False
# plt.rcParams['font.family'] = ["Times New Roman"]  # 字体设置为Times NewRoman
plt.rcParams['font.sans-serif'] = ['SimHei']
clist = ['blue', 'red', 'green', 'black', 'darkgreen', 'lime', 'gold', 'purple', 'green', 'cyan', 'salmon', 'grey','mediumvioletred', 'darkkhaki', 'gray', 'darkcyan', 'violet', 'powderblue']
markerlst = ['o', '*', 'x', '>', '<', '^', 'D', 'd', '1', '2', '3', '4', 'o', '*', 'x', '>', '<', '^', 'D', 'd','1', '2', '3', '4', 'o', '*', 'x', '>', '<', '^', 'D', 'd', '1', '2', '3', '4']
linestylelst = ['-', '--', '-.', ':', '-', '--', '-.', ':', '-', '--', '-.', ':', '-', '--', '-.', ':', '-', '--','-.', ':', '-', '--', '-.', ':']
# 圆的基本信息
# 1.圆半径
r = 30
# 2.圆心坐标
a, b = (-120, 0.)
# ==========================================
# 参数方程画圆形
theta = np.arange(0, 2 * np.pi, 0.01)
x = a + r * np.cos(theta)
y = b + r * np.sin(theta)
plt.plot(x, y, c=clist[0])
plt.plot([xa,xb],[ya,yb],c=clist[1])
plt.plot([xb,xc],[yb,yc],c=clist[2])
plt.plot([xc,xd],[yc,yd],c=clist[3])
plt.plot([xd,xd],[-yd,yd],c=clist[4])
plt.plot([xa,xb1],[ya,yb1],c=clist[5])
plt.plot([xb1,xc1],[yb1,yc1],c=clist[6])
plt.plot([xc1,xd],[yc1,-yd],c=clist[7])
plt.show()

2、机构动画 

import sympy as sy
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
a,a1,b,b1,c,c1,d2,d3,fi,F,L,e= sy.symbols('a,a1,b,b1,c,c1,d2,d3,fi,F,L,e')
'''
A(-d2,0)
D(0,d3)
B(-d2+a*cos(fi),a*sin(fi))
C(-c*cos(pu),d3+c*sin(pu))
B'=(-d2+a*cos(fi+pi),a*sin(fi+pi))
C'=(c1*cos(theta+pi),-d3+c1*sin(theta+pi))'''
A1=2*c*(d3-a*sy.sin(fi))
B1=-2*c*(d2-a*sy.cos(fi))
C1=(d2-a*sy.cos(fi))**2+(d3-a*sy.sin(fi))**2+c**2-b**2
pu=2*sy.atan((-A1+sy.sqrt(A1**2+B1**2-C1**2))/(C1-B1))
delta=sy.atan((d3+c*sy.sin(pu)-a*sy.sin(fi))/(-c*sy.cos(pu)+d2-a*sy.cos(fi)))+sy.pi
A2=2*c1*(d3-a*sy.sin(fi))
B2=-2*c1*(d2+a*sy.cos(fi))
C2=(d2+a*sy.cos(fi))**2+(d3-a*sy.sin(fi))**2+c1**2-b1**2
theta=2*sy.atan((-A2+sy.sqrt(A2**2+B2**2-C2**2))/(C2-B2))
beta=sy.atan((d3-c1*sy.sin(theta)+a*sy.sin(fi))/(-c1*sy.cos(theta)+d2+a*sy.cos(fi)))
F23=F*(L*sy.cos(pu)+e*sy.sin(pu))/(c*sy.sin(delta+pu))
F23I=-F*(L*sy.cos(theta)+e*sy.sin(theta))/(c1*sy.sin(beta-theta))
M=F23*a*sy.sin(delta-fi)-F23I*a*(beta-fi)
pu_c=pu.subs({a:30,b:79.5,b1:79.5,c:120,c1:120,d2:120,d3:74,e:15,L:100})
delta_c=delta.subs({a:30,b:79.5,b1:79.5,c:120,c1:120,d2:120,d3:74,e:15,L:100})
Cx = -c * sy.cos(pu)
Cy = d3 + c * sy.sin(pu)
B1x = -d2 + a * sy.cos(fi + sy.pi)
B1y = a * sy.sin(fi + sy.pi)
C1x = c1 * sy.cos(theta + sy.pi)
C1y = -d3 + c1 * sy.sin(theta + sy.pi)
cx = sy.lambdify(fi, Cx.subs({a: 30, b: 79.5, b1: 79.5, c: 120, c1: 120, d2: 120, d3: 74, e: 15, L: 100}), modules='numpy')
cy = sy.lambdify(fi, Cy.subs({a: 30, b: 79.5, b1: 79.5, c: 120, c1: 120, d2: 120, d3: 74, e: 15, L: 100}), modules='numpy')
b1x = sy.lambdify(fi, B1x.subs({a: 30, b: 79.5, b1: 79.5, c: 120, c1: 120, d2: 120, d3: 74, e: 15, L: 100}), modules='numpy')
b1y = sy.lambdify(fi, B1y.subs({a: 30, b: 79.5, b1: 79.5, c: 120, c1: 120, d2: 120, d3: 74, e: 15, L: 100}), modules='numpy')
c1x = sy.lambdify(fi, C1x.subs({a: 30, b: 79.5, b1: 79.5, c: 120, c1: 120, d2: 120, d3: 74, e: 15, L: 100}), modules='numpy')
c1y = sy.lambdify(fi, C1y.subs({a: 30, b: 79.5, b1: 79.5, c: 120, c1: 120, d2: 120, d3: 74, e: 15, L: 100}), modules='numpy')
# sy.plot(pu_c,(fi,0,80*sy.pi/180))
# sy.plot(delta_c,(fi,0,80*sy.pi/180))fig = plt.figure(figsize=(5, 4))
plt.rcParams['xtick.direction'] = 'in'  # 将x周的刻度线方向设置向内
plt.rcParams['ytick.direction'] = 'in'  # 将y轴的刻度方向设置向内
plt.rcParams['axes.unicode_minus']=False
# plt.rcParams['font.family'] = ["Times New Roman"]  # 字体设置为Times NewRoman
plt.rcParams['font.sans-serif'] = ['SimHei']
clist = ['blue', 'red', 'green', 'black', 'darkgreen', 'lime', 'gold', 'purple', 'green', 'cyan', 'salmon', 'grey','mediumvioletred', 'darkkhaki', 'gray', 'darkcyan', 'violet', 'powderblue']
markerlst = ['o', '*', 'x', '>', '<', '^', 'D', 'd', '1', '2', '3', '4', 'o', '*', 'x', '>', '<', '^', 'D', 'd','1', '2', '3', '4', 'o', '*', 'x', '>', '<', '^', 'D', 'd', '1', '2', '3', '4']
linestylelst = ['-', '--', '-.', ':', '-', '--', '-.', ':', '-', '--', '-.', ':', '-', '--', '-.', ':', '-', '--','-.', ':', '-', '--', '-.', ':']# 创建绘图框架
fig, ax = plt.subplots()# 定义每帧图像的处理函数
'''
定义了一个处理函数draw_frame(),该函数根据当前的“帧数”(即第几张图)生成对应的x和y的坐标点
'''
def draw_frame(i):fi_v = i * np.pi / 180xa = -120ya = 0xb = -120 + 30 * np.cos(fi_v)yb = 30 * np.sin(fi_v)xc = cx(fi_v)yc = cy(fi_v)xd = 0yd = 74xb1 = b1x(fi_v)yb1 = b1y(fi_v)xc1 = c1x(fi_v)yc1 = c1y(fi_v)# 绘制图形ax.clear()r = 30# 2.圆心坐标x0, y0 = (-120, 0.)# ==========================================# 参数方程画圆形theta = np.arange(0, 2 * np.pi, 0.01)x = x0 + r * np.cos(theta)y = y0 + r * np.sin(theta)ax.plot(x, y, c=clist[0])ax.plot([xa, xb], [ya, yb], c=clist[1])ax.plot([xb, xc], [yb, yc], c=clist[2])ax.plot([xc, xd], [yc, yd], c=clist[3])ax.plot([xd, xd], [-yd, yd], c=clist[4])ax.plot([xa, xb1], [ya, yb1], c=clist[5])ax.plot([xb1, xc1], [yb1, yc1], c=clist[6])ax.plot([xc1, xd], [yc1, -yd], c=clist[7])ax.axis("equal")# 固定X轴、Y轴的范围ax.set_ylim(ymin=-150, ymax=150)ax.set_xlim(xmin=-160, xmax=10)plt.tight_layout()# 生成动画对象
'''
FuncAnimation()函数生成了一个动画对象anim,该对象会在循环中调用draw_frame()函数,并以50毫秒的时间间隔循环展示100帧图像
'''
anim = FuncAnimation(fig, draw_frame, frames=80, interval=50)
# 使用pillow将动画保存为GIF图片
anim.save('finger.gif', writer='pillow')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/103513.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻松敏捷开发流程之Scrum

Scrum是一种敏捷开发流程&#xff0c;它旨在使软件开发更加高效和灵活。Scrum将软件开发过程分为多个短期、可重复的阶段&#xff0c;称为“Sprint”。每个Sprint通常为两周&#xff0c;旨在完成一部分开发任务。 在Scrum中&#xff0c;有一个明确的角色分工&#xff1a; 产品…

浏览器跨域问题

文章目录 什么是跨域跨域的原理跨域出现的场景跨域的解决 什么是跨域 违背同源策略就是跨域。 同源策略: 网页的url 和 该网页请求的url 的协议、域名、端口必须保持一致。 协议、域名、端口必须保持一致. 同源策略存在的原因: 保护用户隐私和防范网络攻击(https://editor.csd…

用C语言实现牛顿摆控制台动画

题目 用C语言实现牛顿摆动画&#xff0c;模拟小球的运动&#xff0c;如图所示 拆解 通过控制台API定位输出小球运动的只是2边小球&#xff0c;中间小球不运动&#xff0c;只需要固定位置输出左边小球上升下降时&#xff0c;X、Y轴增量一致。右边小球上升下降时&#xff0c;X、…

IDEA中debug调试模拟时显示不全(不显示null)的解决

IDEA中debug调试模拟时显示不全&#xff08;不显示null&#xff09;的解决 1、在IDEA中找到File&#xff08;文件&#xff09;->Settings&#xff08;设置&#xff09; 2、依次找到以下内容进行设置&#xff08;原版、汉化版&#xff09;&#xff1a; 打开Build, Executio…

分页功能实现

大家好 , 我是苏麟 , 今天聊一聊分页功能 . Page分页构造器是mybatisplus包中的一个分页类 . Page分页 引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</ver…

SpringMVC之CRUD------增删改查

目录 前言 配置文件 pom.xml文件 web.xml文件 spring-context.xml spring-mvc.xml spring-MyBatis.xml jdbc.properties数据库配置文件 generatorConfig.xml log4j2日志文件 后台 PageBaen.java PageTag.java 切面类 biz层 定义一个接口 再写一个实现类 …

[Spring] @Configuration注解原理

文章目录 1.Configuration注解介绍1.1 容器注入ConfigurationClassPostProcessor后置处理器1.2 ConfigurationClassPostProcessor介绍 2.ConfigurationClassPostProcessor解析2.1 Parse12.2 Parse22.3 Parse32.4 Parse42.5 Parse5 3.ConfigurationClassParser解析4.Configurati…

形态图像处理

形态图像处理 预备知识 反射、平移结构元 腐蚀和膨胀 腐蚀 将 B 平移&#xff0c;当其原点位于 z 时&#xff0c;其包含在 A 中&#xff0c;则 z 为一个有效的位置&#xff0c;所有有效的z构成了腐蚀之后的结果腐蚀缩小或细化了二值图像中的物体可以将腐蚀看作形态学滤波操…

[docker]笔记-portainer的使用

1、安装完成后输入ip加端口号打开网页&#xff0c;并再相应位置输入初始密码&#xff0c;初始密码自行设置。 2、进入主页后可以看到如下图标&#xff1a; 3、选择docker环境&#xff0c;即可展示目前docker信息 可以看到目前有1个容器&#xff0c;3个卷和4个镜像&#xff0c…

2023高教杯数学建模1:ABC题目+初步想法

2023 ABC题目初步想法 写在最前面A题&#xff1a;定日镜场的优化设计问题1&#xff1a;建模将其抽象为数学公式问题2&#xff1a;固定部分参数&#xff0c;约束条件下的局部最优化问题可尝试方法 问题3&#xff1a;约束条件下的局部最优化问题附录&#xff1a;相关计算公式参考…

56、springboot ------ RESTful服务及RESTful接口设计

★ RESTful服务 RESTful服务是“前后端分离”架构中的主要功能&#xff1a; 后端应用对外暴露RESTful服务&#xff0c;前端应用则通过RESTful服务与后端应用交互。后端应用 RESTful接口 <------------------> 前端★ 基于JSON的RESTful服务 使用RestController注解…

什么是正向代理和反向代理

一、什么是正向代理 正向代理&#xff08;Forward Proxy&#xff09;是一种代理服务器&#xff0c;它位于客户端和服务端之间&#xff0c;代表客户端向其他服务器发送请求。一般使用的场景就是&#xff0c;当客户端无法直接访问某些资源时&#xff0c;可以通过正向代理来访问。…