Python骨架肌体运动学数学模型

🎯要点

🎯运动学矢量计算 | 🎯跳远的运动学计算 | 🎯关节肢体运动最小加加速度模型 | 🎯膝关节和踝关节角度二维运动学计算 | 🎯上下肢体关节连接运动链数学模型 | 🎯刚体连接点速度加速度计算 | 🎯刚体变换二维三维运动学计算 | 🎯奇异值分解算法刚体变换 | 🎯三维运动角速度计算 | 🎯肌体和步态模型

📜Python,R,C++/C#和MATLAB运动学刚体动力学用例

📜Python重力弹弓流体晃动微分方程模型和交直流电阻电容电路

📜Python和R概率统计算法建模评估气象和运动

📜Python流体数据统计模型和浅水渗流平流模型模拟

📜Python自行车六自由度飞行器多连接件非线性运动方程模型

📜Python协作运动机器人刚体力学解耦模型

📜ROS2(Cpp或Python)机器学习路径选择三维模拟平衡车及YOLOv8视觉消息

📜Python | C++ | MATLAB机器人正逆向运动学动力学求解器及算法

📜Python | C# | MATLAB 库卡机器人微分运动学 | 欧拉-拉格朗日动力学 | 混合动力控制

📜C++和Python蚂蚁搬食和蚊虫趋光性和浮标机群行为算法神经网络

📜Python人形机踊跃跨栏举重投篮高维数动作算法模型

📜MATLAB和Python发那科ABB库卡史陶比尔工业机器人模拟示教框架

📜MATLAB雨刮通风空调模糊器和发电厂电力聚变器卷积神经

🍪语言内容分比

在这里插入图片描述
在这里插入图片描述

🍇Python运动学可视化

运动学是力学的一个分支,涉及物体的运动,而不考虑引起运动的力。给定一个描述粒子位置矢量随时间变化的方程,就可以计算各种运动学属性。最重要的是速度和加速度。如果粒子沿直线运动,则运动是直线运动。类似地,沿着弯曲路径行进的粒子也进行曲线运动。

x x x y y y z z z 笛卡尔坐标系定义了粒子在欧几里得空间中的空间位置。方程 1 显示了粒子位置随时间的变化。秒 (s) 是时间单位,米 (m) 是位置单位。
r ⃗ ( t ) = x ( t ) ı ^ + y ( t ) ȷ ^ + z ( t ) k ^ ( 1 ) \vec{r}(t)=x(t) \hat{\imath}+y(t) \hat{\jmath}+z(t) \hat{k}\qquad(1) r (t)=x(t)^+y(t)^+z(t)k^(1)
曲率半径 (rho) 是从粒子 P 到路径 C 的曲率中心的距离。当粒子在空间中移动时,曲率半径会根据描述运动的函数而变化。

速度是由方程 2 表示的位置的一阶导数。速度矢量与粒子的轨迹相切。

v ⃗ ( t ) = d x ( t ) d t ı ^ + d y ( t ) d t ȷ ^ + d z ( t ) d t k ^ ( 2 ) \vec{v}(t)=\frac{d x(t)}{d t} \hat{\imath}+\frac{d y(t)}{d t} \hat{\jmath}+\frac{d z(t)}{d t} \hat{k}\qquad(2) v (t)=dtdx(t)^+dtdy(t)^+dtdz(t)k^(2)
该方向上的单位矢量是单位切矢量,由公式 3 给出。它等于速度矢量除以幅值。

u ^ t = v ⇀ v ( 3 ) \hat{u}_t=\frac{\stackrel{\rightharpoonup}{v}}{v}\qquad(3) u^t=vv(3)
向量有方向和大小。公式 4 显示了如何计算 3 维位置矢量的大小。它可以应用于任何向量并扩展到任意数量的维度。

∥ r ⃗ ∥ = r = x 2 + y 2 + z 2 ( 4 ) \|\vec{r}\|=r=\sqrt{x^2+y^2+z^2}\qquad(4) r =r=x2+y2+z2 (4)
加速度是位置的二阶导数或速度的一阶导数。法向分量和切向分量包括加速度。

  • 切向加速度与速度方向相同。
  • 法向加速度是朝着粒子路径的曲率中心的方向。

方程 5 显示了加速度的两个分量。单位切向加速度矢量和法向加速度矢量是正交单位矢量。因此,它们形成一个称为密切平面的平面。

a ⃗ ( t ) = a t u ^ t ⏟ 切向  + a n u ^ n ⏟ 法向  ( 5 ) \vec{a}(t)=\underbrace{a_t \hat{u}_t}_{\text {切向 }}+\underbrace{a_n \hat{u}_n}_{\text {法向 }}\qquad(5) a (t)=切向  atu^t+法向  anu^n(5)
单位副法向量垂直于密切平面,构成右手正交系。因此,方程 6 给出了单位副法线。
u ^ b = u ^ t × u ^ n = v ⃗ × a ⃗ ∥ v ⃗ × a ⃗ ∥ ( 6 ) \hat{u}_b=\hat{u}_t \times \hat{u}_n=\frac{\vec{v} \times \vec{a}}{\|\vec{v} \times \vec{a}\|}\qquad(6) u^b=u^t×u^n=v ×a v ×a (6)
单位法线指向曲率中心,这意味着曲率中心 C 位于密切平面内。因此,相对于粒子 P,曲率中心 C 由方程 7 给出。
r ⃗ c / p = ρ u ^ n ( 7 ) \vec{r}_{c / p}=\rho \hat{u}_n\qquad(7) r c/p=ρu^n(7)
向量相加给出了 C 的位置向量,如公式 8 所示。
r ⃗ c = r ⃗ + r ⃗ c / p ( 8 ) \vec{r}_c=\vec{r}+\vec{r}_{c / p}\qquad(8) r c=r +r c/p(8)

Python模拟三维运动学

模拟从 0 秒开始,360 秒后结束。以下代码显示了时间线束参数。

t0 = 0
tf = 720
dt = 1
time = np.arange(t0, tf, dt, dtype='float')

方程 9 定义了粒子的位置如何随时间变化,从而定义了轨迹。
r ⃗ ( t ) = sin ⁡ ( 3 t ) ı ^ + cos ⁡ ( t ) ȷ ^ + cos ⁡ ( 2 t ) k ^ ( 9 ) \vec{r}(t)=\sin (3 t) \hat{\imath}+\cos (t) \hat{\jmath}+\cos (2 t) \hat{k}\qquad(9) r (t)=sin(3t)^+cos(t)^+cos(2t)k^(9)
以下显示了该符号运动方程以及速度和加速度导数的声明。还提出了切向加速度方程,它是速度大小的导数。

t = sp.symbols('t')
R = [sp.cos(t), sp.sin(t), t / 5] 
V = vector_derivative(R, t)
A = vector_derivative(V, t)
At = vector_magnitude(V).diff(t)

矢量方程

def vector_derivative(vector, wrt):
    return [component.diff(wrt) for component in vector]


def vector_magnitude(vector):
    magnitude = 0
    for component in vector:
        magnitude += component ** 2
    return magnitude ** (1 / 2)


def unit_vector(from_vector_and_magnitude=None, from_othogonal_vectors=None, from_orthogonal_unit_vectors=None):

    if from_vector_and_magnitude is not None:
        vector_a, magnitude = from_vector_and_magnitude[0], from_vector_and_magnitude[1]
        return [component / magnitude for component in vector_a]

    if from_othogonal_vectors is not None:
        vector_a, vector_b = from_othogonal_vectors[0], from_othogonal_vectors[1]
        vector_normal = np.cross(vector_a, vector_b)
        return unit_vector(from_vector_and_magnitude=(vector_normal, vector_magnitude(vector_normal)))

    if from_orthogonal_unit_vectors is not None:
        u1, u2 = from_orthogonal_unit_vectors[0], from_orthogonal_unit_vectors[1]
        return np.cross(u1, u2)


def evaluate_vector(vector, time_step):

    numerical_vector = [float(component.subs(t, time_step).evalf()) for component in vector]
    magnitude = vector_magnitude(numerical_vector)
    return numerical_vector, magnitude

定义了相关的矢量函数后,就可以开始随时间传播。以下显示了用于运行模拟的代码。

propagation_time_history = []

for ti in time:
    ti_r = d2r(ti)
    r, r_mag = evaluate_vector(R, ti_r)
    v, v_mag = evaluate_vector(V, ti_r)
    v_theta = [r2d(angle) for angle in direction_angles(v, v_mag)]
    a_theta = [r2d(angle) for angle in direction_angles(a, a_mag)]
    ut = unit_vector(from_vector_and_magnitude=(v, v_mag))
    ub = unit_vector(from_othogonal_vectors=(v, a))
    un = unit_vector(from_orthogonal_unit_vectors=(ub, ut))
    at = float(At.subs(t, ti_r).evalf())
    rc = r + (rho * un)
    rc_mag = vector_magnitude(rc)

    iteration_results = {'t': ti, 'rx': r[0], 'ry': r[1], 'rz': r[2], 'r_mag': r_mag,
                         'vx': v[0], 'vy': v[1], 'vz': v[2], 'v_mag': v_mag,
                         'rcx': rc[0], 'rcy': rc[1], 'rcz': rc[2], 'rc_mag': rc_mag, 'rho': rho,
                         'ax': a[0], 'ay': a[1], 'az': a[2], 'a_mag': a_mag, 'an': an, 'at': at,
                         'ubx': ub[0], 'uby': ub[1], 'ubz': ub[2],
                         'utx': ut[0], 'uty': ut[1], 'utz': ut[2],
                         'unx': un[0], 'uny': un[1], 'unz': un[2]}

    propagation_time_history.append(iteration_results)

df = pd.DataFrame(propagation_time_history)

👉参阅&更新:计算思维 | 亚图跨际

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PPTP、L2TP、IPSec、IPS 有什么区别?

随着互联网的发展,保护网络通信的安全越来越重要。PPTP、L2TP、IPSec、IPS是常见的网络安全协议和技术,在保护网络通信安全方面发挥着不同的作用和特点。下面介绍PPTP、L2TP、IPSec、IPS之间的区别。 点对点隧道协议(PPTP)是一种用…

Android列表控件的属性与用法

列表控件的属性与用法 列表控件有Spinner、ListView、RecyclerView、ViewPager等。列表控件的显示一般涉及3个部分:控件、适配器、数据,这三者之间的关系如图1所示。适配器是数据与列表之间的桥梁,适配器中需要将数据中需要显示的属性与列表…

Qt | 绘制直线与 QLineF 类

点击上方"蓝字"关注我们 01、绘制直线 02、Qline和QLineF 【1】QLine 是整型版本,成员函数较少,QLineF 是精度更高的浮点型版本,本文以 QLineF 类 进行讲解。 QLineF 类提供了一个二维向量,使用 QLineF 类绘制直线可以利用该类中的成员函数方便 的对线条的属…

调试的时候如何查看当前程序的变量信息

目录 调试前/后的调试窗口 ​编辑 调试窗口 --- 监视 调试窗口 --- 内存 调试窗口 --- 调用堆栈 调试前/后的调试窗口 调试前的调试窗口: 调试前的调试窗口是没有显示的,只有在调试的时候才会有相对应的调试窗口 调试后的调试窗口&#xff1a…

如何找工作 校招 | 社招 | 秋招 | 春招 | 提前批

马上又秋招了,作者想起以前读书的时候,秋招踩了很多坑,但是第一份工作其实挺重要的。这里写一篇文章,分享一些校招社招的心得。 现在大学的情况是,管就业的人,大都是没有就业的辅导员(笔者见过…

开启新纪元!被AI驱动的游戏世界,提升游戏体验

随着人工智能的高速发展,人工智能逐渐应用到了生活中的方方面面,人工智能在游戏中也有诸多应用,在游戏里领域扮演了相当重要的角色。游戏AI是伴随着电子游戏而出现的,在早期的游戏中就出现了对抗类AI角色,后来逐渐出现…

SpringBoot新手快速入门系列教程十一:基于Docker Compose部署一个最简单分部署服务项目

如果您还对于Docker或者Docker Compose不甚了解,可以劳烦移步到我之前的教程: SpringBoot新手快速入门系列教程九:基于docker容器,部署一个简单的项目 SpringBoot新手快速入门系列教程十:基于Docker Compose&#xf…

职业教育人工智能实验实训室建设应用案例

随着人工智能技术的快速发展,其在职业教育领域的应用逐渐深入。唯众作为一家专注于教育技术领域的企业,积极响应国家关于人工智能教育的政策号召,通过建设人工智能实验实训室,为学生提供了一个实践操作与创新思维相结合的学习平台…

Axure-黑马

Axure-黑马 编辑时间2024/7/12 来源:B站黑马程序员 需求其他根据:visio,墨刀 Axure介绍 Axure RP是美国Axure Software Solution给公司出品的一款快速原型大的软件,一般来说使用者会称他为Axure 应用场景 拉投资使用 给项目团…

加密软件|让数据传输更安全

加密软件在当今数字化时代扮演着至关重要的角色,它们通过先进的加密算法和技术,确保数据在存储、传输和分享过程中的安全性,从而保护个人隐私和企业机密。一、加密软件的基本作用数据加密:加密软件通过应用复杂的加密算法&#xf…

Linux环境下Oracle 11g的离线安装与配置历程

在成功体验了 Windows 版本的Oracle 11g 后,这几天心血来潮,决定再挑战一下Linux 环境下的安装,特别是在考虑到部门内部虚拟机无法联网的情况下,我选择了在CentOS 7上进行离线安装。这次安装之旅,主要参考了下面大佬的…

记录些Redis题集(1)

为什么Redis要有淘汰机制? 淘汰机制的存在是必要的,因为Redis是一种基于内存的数据库,所有数据都存储在内存中。然而,内存资源是有限的。在Redis的配置文件redis.conf中,有一个关键的配置项: # maxmemory…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第二十六章 安装超级终端软件

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

Python | Leetcode Python题解之第229题多数元素II

题目: 题解: class Solution:def majorityElement(self, nums: List[int]) -> List[int]:cnt {}ans []for v in nums:if v in cnt:cnt[v] 1else:cnt[v] 1for item in cnt.keys():if cnt[item] > len(nums)//3:ans.append(item)return ans

Oracle 23ai 中的重要新特性 VECTOR 数据类型

Oracle 23ai 中的 VECTOR 数据类型是 Oracle 数据库在 AI 领域的一个重要新特性,它允许用户以向量的形式存储数据,并在这些向量的基础上进行高效的搜索和分析。以下是对 Oracle 23ai VECTOR 数据类型的详细解析: 参考官方文档地址 https://d…

集成sa-token前后端分离部署配置corsFliter解决跨域失效的真正原因

文章目录 1.前言2.问题复现3.解决方法3.1 方式一:后端修改CorsFilter源码3.2 方式二:前端禁用或移除浏览器referrer-policy引用者策略 4.总结 1.前言 缘由请参看下面这篇文章:sa-token前后端分离解决跨域的正确姿势 https://mp.weixin.qq.co…

【算法】二叉树-迭代法实现前后中序遍历

递归的实现就是:每一次递归调用都会把函数的局部变量,参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,这就是递归为什么可以返回上一层位置的原因 可以用栈实现二叉树的前中后序遍历 1. 前序…

base SAS programming学习笔记(functions)

1.SAS function 分类&#xff1a; 计算描述统计量的函数&#xff1a; 举例如下&#xff1a;avgscoremean(exam1,exam2,exam3) 2.function 基本格式 function-name(argument1,argument2,......<argumentn>&#xff09; argument可以如下&#xff1a;变量名&#xff1b;常…

redis学习(009 实战:黑马点评:缓存穿透、缓存雪崩 、缓存击穿)

黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第40p-第p45的内容 文章目录 缓存穿透解决方案缓存空对象布隆过滤 解决方案实现缓存穿透总结 缓存雪崩解决方案 缓存击穿解决方…

Elasticsearch 更新指定字段

Elasticsearch 更新指定字段 准备条件查询数据更新指定字段更新子级字段 准备条件 以下查询操作都基于索引crm_clue来操作&#xff0c;索引已经建过了&#xff0c;本文主要讲Elasticsearch更新指定字段语句&#xff0c;下面开始写更新语句执行更新啦&#xff01; 查询数据 查…