摆动输入连杆夹持机构

news2025/2/27 3:47:55

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 / 180
    xa = -120
    ya = 0
    xb = -120 + 30 * np.cos(fi_v)
    yb = 30 * np.sin(fi_v)

    xc = cx(fi_v)
    yc = cy(fi_v)
    xd = 0
    yd = 74

    xb1 = 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.coloradmin.cn/o/990530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

K8S原理架构与实战教程

文章目录 一、背景1.1 物理机时代、虚拟机时代、容器化时代1.2 容器编排的需要 二、K8S架构2.2 Worker节点 三、核心概念3.1 Pod3.2 Deployment3.3 Service3.4 Volume3.5 Namespace 四、K8S安装五、kubectl常用命令六、K8S实战6.1 水平扩容6.2 自动装箱6.2.1 节点污点6.2.2 Pod…

Java多线程(二)线程安全

线程安全 线程安全&#xff08;风险&#xff09; 线程不安全的原因&#xff1a; 解决线程不安全&#xff1a; synchronized 内存刷新 可重入 volatile 关键字 wait 和 notify wait&#xff08;&#xff09; notify &#xff08;&#xff09; wait与sleep的区别&…

C# OpenVino Yolov8 Seg 分割

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp;namespace OpenVino_Yolov8_Demo {public…

30天入门Python(基础篇)——第2天:Python安装(保姆级)与IDE的认识与选择+详细安装教程

文章目录 专栏导读上一节课回顾1、Python解释器的安装查看各个版本的Python解释器①、ok,双击安装②、这里我们选择【自定义】安装&#xff0c; 下面的【将Python添加在环境变量】大家一定要打个勾③、点击【Next】进行下一步④、这里不建议安装在C盘, 点击【Browse】我在F盘创…

『SpringBoot 源码分析』run() 方法执行流程:(3)刷新应用上下文-处理 @ComponentScan 注解

『SpringBoot 源码分析』run() 方法执行流程&#xff1a;&#xff08;3&#xff09;刷新应用上下文-处理 ComponentScan 注解 基于 2.2.9.RELEASE问题&#xff1a;当方法进行了注释标记之后&#xff0c;springboot 又是怎么注入到容器中并创建类呢&#xff1f; 首先创建测试主…

linux--进程--system与popen函数

1.system #include <stdlib.h>int system(const char *command); 返回值&#xff1a; 成功&#xff0c;则返回进程的状态值&#xff1b;不能源码execl函数&#xff0c;返回127&#xff1b;失败返回-1&#xff1b; 不能成功运行分析文章&#xff1a;linux下system函数详…

Java网络编程(二)Socket 套接字(TCP和UDP),以及TCP的回显

Socket 套接字 我们软件工作者&#xff0c;着重编写的是应用层的代码&#xff0c;但是发送这个数据&#xff0c;我们就需要将应用层传输到传输层&#xff0c;也就意味着我们需要调用应用层的API&#xff0c;统称为 Socket API。 套接字的分类&#xff1a; 流套接字&#xff…

2023数学建模国赛B题完整论文来啦!(含一二问求解代码及三四问仿真模拟代码)

大家好呀&#xff0c;从昨天发布赛题一直到现在&#xff0c;总算完成了全国大学生数学建模竞赛B题完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 说实话团队通宵一直到现在做…

汇川PLC学习Day1:跑马灯程序编写

汇川PLC学习Day1&#xff1a;跑马灯程序编写 一、 软件安装 进入官网下载软件 二、 使用帮助 三、 新建工程与功能代码实现 CtrlN 寻找内带输出模块的CPU并设置好工程名字与保存路径&#xff0c;语言选择想熟悉的类型 工程建立后&#xff0c;PLC_PRG即为用户编写程序文件…

【疑难杂症】解决 git 文件夹不显示绿色图标和红色图标的问题

目录 一、问题描述 二、问题解决前提 【2.1】首先保证电脑本机上有TortoiseGit这个软件 【2.2】TortoiseGit下载官网 【2.3】根据自己电脑位数进行下载&#xff0c;这里下载的是64位 【2.4】下载好之后&#xff0c;一路next进行安装&#xff0c;配置自己的邮箱和用户名 …

uni-app:重置表单数据

效果 代码 <template><form><input type"text" v-model"inputValue" placeholder"请输入信息"/><input type"text" v-model"inputValue1" placeholder"请输入信息"/><input type&quo…

用Python登录账户

1 问题 如何利用python登录账户&#xff1f; 2 方法 账户和密码存放在文件夹中从文件夹中读取并比较密码密文验证三次后&#xff0c;如不成功则锁定用户 通过。。。。。。。。等证明提出的方法是有效的&#xff0c;能够解决开头提出的问题。 代码清单 1 import osimport getpas…

FGO:使用chaIdea获取抽卡数据(mitmproxy抓包)

需求描述 最近逛贴吧看到好多master贴出自己的抽卡概率截图&#xff0c;本非洲杂鱼master也对自己的脸黑程度产生了好奇&#xff08;曾经15单芭娜娜池子1五星&#xff0c;6单道满池子1五星&#xff0c;梅莉池子330抽1五星&#xff0c;最近的芭娜娜复刻又330抽1五星&#xff09…

流程图用什么软件做比较好?这几个实用软件了解下

流程图用什么软件做比较好&#xff1f;流程图的制作对于企业管理、项目管理、产品设计等领域都非常重要。制作流程图可以帮助我们更好地理解事物之间的关系和流程&#xff0c;从而规划和组织工作。因此&#xff0c;选择一个合适的流程图软件是非常必要的。下面就给大家介绍几种…

C++中使用R“()“标记符书写多行字符串

在C#中使用表示的字符串能够跨越数行。用于在C#中写JS或SQL代码比较方便。 string sqlInsert "INSERT INTO tb_param(protocol, slave, number, ptype, pid, name, format) VALUES(2, 24, 0, 1, 1, a04005, .3);INSERT INTO tb_param(protocol, slave, number, ptype, …

day52(补)

300.最长递增子序列 力扣题目链接(opens new window) 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2…

ZFS了解

存储数据的管理通常涉及两个方面:对一个或多个块存储设备(如硬盘驱动器和SD卡)进行物理卷管理&#xff0c;并将它们组织成操作系统所看到的逻辑块设备(通常涉及卷管理器、RAID控制器、阵列管理器或合适的设备驱动程序)&#xff0c;以及对存储在这些逻辑块设备(文件系统或其他数…

使用 System.exit() 来优雅地终止 Spring Boot 项目

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; 使用 System.exit() 来优雅地终止 Spring Boot 项目 ⏱️ 创作时间&am…

智安网络|面临日益增长的安全威胁:云安全和零信任架构的重要性

随着云计算技术的快速发展和广泛应用&#xff0c;云安全和零信任架构变得愈发重要。在数字化时代&#xff0c;云计算技术得到了广泛的应用和推广。企业和组织借助云服务提供商的强大能力&#xff0c;实现了高效、灵活和可扩展的IT基础设施。然而&#xff0c;随着云环境的快速发…

java设计模式,简单工厂和抽象工厂有什么区别?

java设计模式&#xff0c;简单工厂和抽象工厂有什么区别&#xff1f; 简单工厂模式&#xff1a; 这个模式本身很简单而且使用在业务较简单的情况下。一般用于小项目或者具体产品很少扩展的情况&#xff08;这样工厂类才不用经常更改&#xff09;。 它由三种角色组成&#xf…