Ansys柔性体与Adams联合仿真
SW 模型导出
在 SW 中选择对应的单个零件,注意是单个零件(不论是由多少个零件合成的,都算作单个零件)这样方便导入 adams 中替换掉刚性体。将单个零件导出为 Parasolid 格式,之后便可以导入到 ANSYS 中
导入 ANSYS 中
导入模型
打开 WorkBench,选择右侧栏内的模态,双击之后出现左侧项目原理图,右键几何结构即可选择导入模型
生成模型
导入模型之后,再次右键几何结构,即可出现如下窗口,选择 DesignModeler 中编辑几何结构
进入 DesignModeler 之后,在右侧栏中选择导入,生成导入模型即可
检验模型
可在 WorkBench 中右键几何结构,选择 spaceclaim 中编辑几何结构,来检验模型,能生成模型即可,好像这一步用处不大
工程数据设置
在 WorkBench 原理图中,右键工程数据,选择编辑即可进入,这里面是零件所用的材料,也可自定义材料
如图所示,添加了一个新材料——橡胶,点击表格中源的那一项即可出现下面属性大纲,之后双击右侧栏中的项目属性,即可将其添加进来,最后可以上网查找对应的数据填入表格中即可在后续过程中使 ...
Adams 仿真入门
SW 模型装配与导出
模型装配问题
这里使用一个简单的曲柄滑块模型来进行示例,如下图所示为装配好的装配体
注意
对于多个固定在一起的零件,建议是将这几个零件重新存储为一个结构体之后再另存为一个零件,最终生成的所有零件都变成了这个零件中的特征,对应在 Adams 中就可以看到生成的这个零件中包含了多个实体,就是这多个零件,最后记得将这个零件代替这几个零件插入到装配体中。这样可以减少生成的 adams 文件的连接个数(adams 中的连接是两个零件之间的),从而使得仿真运行更快,也更不容易出错
期望在仿真时运动的连接副,就不要在 SW 中完全配合,要能在 SW 中拖动
SW 中绘制模型时,不要使用中文名称,否则导入到 adams 之后会出现文件名称显示错误的问题,到时候不好操作
在 SW 模型中固定的零件,导入到 adams 中之后是属于 ground 的实体,所以如果期望这个结构不固定的话,就不能定义为固定的零件
模型导出问题
模型导出为 adams 文件需要使用 SOLIDWORKS Motions 这个插件,而且需要使用运动算例,步骤如下
点击运动算例
选择 Motion ...
VS2022 配置 casadi 求解 NMPC 问题
前言
最近在研究 NMPC 时,找到了 casadi 这个求解库,本来是在 ros+gazebo 平台上搭建的,但是最终的运行效果不太好,所以就打算先使用自己比较熟悉的 webots+vs 平台上进行测试,之后再移植过去
部署优化求解工具 casadi
下载 ipopt 的 vs2022 预编译程序
在 ipopt 的 github 官方仓库中找到 vs2022 的预编译版本,就是基于 vs2022 已经编译好的,不需要自行编译。可以直接选择较新的版本,记得要选择后面带有 msvs2022 的压缩包
下载 casadi 的源码
在 casadi 的 github 官方仓库中找到适合的版本,下载对应的 Source Code 压缩包即可
编译
由于下载的 ipopt 不需要编译,所以就只需要编译 casadi 即可。把上述的 ipopt 和 casadi 的源码放到一个不会被删掉的地方,建议是有一个比较统一存放 C++ 依赖库的地方,如下图所示
然后在 casadi 的目录下新建一个 install 目录下,并且在 casadi 目录下新建一个 run.bat 文件,这个文件中需要 ...
超前和滞后补偿器
拉普拉斯变换
拉普拉斯变换
一个定义在区间 [0,∞)[0,\infty)[0,∞) 的函数 f(t)f(t)f(t) ,它对应的拉普拉斯变换 F(s)F(s)F(s) 定义为
F(s)=∫0∞f(t)e−stdtF(s)=\int_0^{\infty}f(t)e^{-st}dt
F(s)=∫0∞f(t)e−stdt
F(s)F(s)F(s) 称为 f(t)f(t)f(t) 的象函数,而 f(t)f(t)f(t) 称为 F(t)F(t)F(t) 的原函数,这个变换过程通常记作 F(s)=L[f(t)]F(s)=\mathcal{L}[f(t)]F(s)=L[f(t)]
拉普拉斯逆变换
拉普拉斯逆变换就是已知上述的 F(s)F(s)F(s) 求解 f(t)f(t)f(t) 的过程,公式如下
f(t)=12πj∫β−j∞β+j∞F(s)estdsf(t)=\frac{1}{2\pi j}\int_{\beta-j\infty}^{\beta+j\infty}F(s)e^{st}ds
f(t)=2πj1∫β−j∞β+j∞F(s)estds
记作 f(t)=L−1[F(s)]f(t)= ...
机器学习-非监督学习
非监督学习是指在没有标签或输出变量指导的情况下,算法自行从数据中学习模式、结构和关系的过程。这种学习方式不需要预先定义好的类别或标签,而是让模型自主地从数据中探索潜在的模式和规律,但是结果往往难以解释和评估,因为发现的模式可能不易理解
聚类
聚类算法是数据挖掘中的概念,指的是按照某个特定的标准把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象相似性尽可能大,同时不在同一个簇内的对象之间的差异尽可能大
样本的距离度量
对于样本之间的距离函数 dist(xi,xj)dist(x_i,x_j)dist(xi,xj) 应该满足一定的性质:
非负性 dist(xi,xj)≥0dist(x_i,x_j)\geq0dist(xi,xj)≥0
同一性 dist(xi,xj)=0dist(x_i,x_j)=0dist(xi,xj)=0 当且仅当 xi=xjx_i=x_jxi=xj
对称性 dist(xi,xj)=dist(xj,xi)dist(x_i,x_j)=dist(x_j,x_i)dist(xi,xj)=dist(xj,xi)
直通性 dist(xi,xj)≤d ...
概率分布
前言
概率分布(probability distribution)是给出事件发生的概率的函数,它是一种通过样本空间(sample space)和事件的概率描述随机事件的方式,下面有一些需要了解到的概念
边缘分布
假设有一个和两个变量相关的概率分布 p(x,y)p(x,y)p(x,y) ,关于其中一个特定变量的边缘分布则为给定其他变量的条件概率分布如下
p(x)=∑yp(x,y)=∑yp(x∣y)p(y)p(x)=\sum_yp(x,y)=\sum_yp(x\vert y)p(y)
p(x)=y∑p(x,y)=y∑p(x∣y)p(y)
偏度
偏度(Skewness)衡量数据分布的对称性,计算公式如下
Skewness=E[(x−μ)3]σ3Skewness=\frac{E[(x-\mu)^3]}{\sigma^3}
Skewness=σ3E[(x−μ)3]
μ\muμ 是均值
σ\sigmaσ 是标准差
EEE 是期望值
Skewness=0Skewness=0Skewness=0 分布对称
Skewness>0Skewness>0Skewness>0 分布 ...
机器学习—监督学习
前言
监督学习是利用一组已知类别的样本(即已标注的训练数据)来调整分类器(或模型)的参数,使其达到所要求的性能。在监督学习中,每个训练样本都包含一个输入对象(如向量、图像、文本等)和一个期望的输出值(也称为标签或监督信号)。模型通过学习这些输入输出对之间的关系,从而能够对新的、未标注的数据进行预测或分类
监督学习的原理基于模型对输入数据的学习过程。通常一个监督学习算法会使用某种数学模型(如神经网络、决策树、支持向量机等)来拟合训练数据。通过调整模型的参数,使其在训练数据上达到最佳性能(如最小化损失函数),从而能够对新的数据进行准确的预测或分类
统计检验
均值检验(T 检验)
T 检验的原理是通过计算 T 统计量来比较两个样本均值之间的差异是否超出了随机误差范围,从而判断差异是否显著。它基于样本数据,通过计算 T 统计量和对应的P值,来判断两组数据的均值是否存在显著差异
T 检验类型
单一样本:用于检验一个样本的均值是否与一个已知的总体均值存在显著差异
μ=∑nxinxˉ=∑kxiks=∑(xi−xˉ)n−1T=xˉ−μsn\mu=\frac{\sum^n x_i}{n}\\\b ...
机器人轨迹规划
三次多项式插值轨迹
三次多项式
位置表达式
q(t)=k0+k1t+k2t2+k3t3q(t)=k_0+k_1t+k_2t^2+k_3t^3
q(t)=k0+k1t+k2t2+k3t3
速度表达式
q˙(t)=k1+2k2t+3k3t2\dot{q}(t)=k_1+2k_2t+3k_3t^2
q˙(t)=k1+2k2t+3k3t2
加速度表达式
q¨(t)=2k2+6k3t\ddot{q}(t)=2k_2+6k_3t
q¨(t)=2k2+6k3t
其中 k0∼k3k_0\sim k_3k0∼k3 是未知系数
计算
给定起始和结束的位置,速度和轨迹的时间,可以构造出如下几个方程
q(t0)=q0q(t1)=q1q˙(t0)=q˙0q˙(t1)=q˙1t1−t0=Tq(t_0)=q_0\\q(t_1)=q_1\\\dot{q}(t_0)=\dot{q}_0\\\dot{q}(t_1)=\dot{q}_1\\t_1-t_0=T
q(t0)=q0q(t1)=q1q˙(t0)=q˙0q˙(t1)=q˙1t1−t0=T
假设初始时间 t0t_ ...
利用tensorflow.keras搭建神经网络
前言
介绍
在无数深度学习的框架中,Keras 是为人类设计的 API,它提供一致且简单的 API,它将常见用例所需的用户操作数量降至最低,并且在用户错误时提供清晰和可操作的反馈
Keras 与底层深度学习语言(特别是 TensorFlow)集成在一起,所以它可以让用户实现任何可以用基础语言编写的东西
安装
首先是安装 Python,然后安装对应的包即可
1pip install tensorflow
神经网络
神经元模型
神经元模型是组成神经网络的最基本单位,它起初来源于人体,模仿人体的神经元,功能也与人体的神经元一致,得到信号的输入,经过数据处理,然后给出一个结果作为输出或者作为下一个神经元的输入
神经元可以单方向的传输信号,一个神经元有多个树突,只有一个轴突,轴突尾端有多个轴突末梢给其他多个神经元传递信息
一个简化的神经元模型如下,是一个包含输入,输出与计算的模型。输入对应着神经元的树突,计算对应着细胞核,而输出对应着轴突。连接是神经元中最重要的东西,每一个连接上都有一个权重,一个神经网络的训练算法就是让权重的值调整到最佳,以使得整个网络的预测效果最好
123456789101 ...
Spline
Bezier Curves
Lerp
由两个点组成的 Bezier Curve,定义表达式如下
P(t)=(1−t)P0+tP1P(t)=(1-t)P_0+tP_1
P(t)=(1−t)P0+tP1
Quadratic Bezier Curve
由三个点组成的 Bezier Curve。该曲线中,每两个相邻点之间通过 Lerp 连接,得到中间点,而中间点经过 Lerp 处理之后可以得到最终的位置点
P(t)=(1−t)((1−t)P0+tP1)+t((1−t)P1+tP2)P(t)=(1−t)2P0+2t(1−t)P1+t2P2P(t)=(1-t)((1-t)P_0+tP_1)+t((1-t)P_1+tP_2)\\P(t)=(1-t)^2P_0+2t(1-t)P_1+t^2P_2
P(t)=(1−t)((1−t)P0+tP1)+t((1−t)P1+tP2)P(t)=(1−t)2P0+2t(1−t)P1+t2P2
Cubix Bezier Curve
由四个点组成的 Bezier Curve。同上述 Quadratic Bezier Curve 类似,定义表达式如下
P ...