【Coppeliasim仿真】 坐标系间平滑插补

news2024/12/23 10:15:16

在仿真环境中控制两个参考框架(ReferenceFrame1和ReferenceFrame2)之间进行平滑的插值运动。在两个参考框架之间插值运动的过程中,使用了两种不同的方法,通过设置useMethodNb来选择使用的方法。

方法1使用了旋转轴和角度的计算,然后逐步移动参考框架1到参考框架2的姿态。在每一步,都计算了旋转轴绕着旋转中心旋转一定角度后的新的变换矩阵,并更新了参考框架1的姿态。

方法2则直接使用了sim.interpolateMatrices函数,该函数用于在两个矩阵之间进行插值。在每一步,都计算了两个参考框架之间的插值矩阵,并将其应用于参考框架1,实现了平滑的姿态过渡。

总体来说,该脚本的目的是演示如何在仿真中使用不同的方法控制两个参考框架之间的插值运动,以实现平滑的姿态过渡效果。

-- 引入sim库
sim = require'sim'

-- 线程函数,在仿真中会以线程的方式运行
function sysCall_thread()
    -- 你可以使用两种方法在两个参考框架之间进行插值:

    -- 获取参考框架的句柄
    frame1 = sim.getObject('/ReferenceFrame1')
    frame2 = sim.getObject('/ReferenceFrame2')

    -- 获取参考框架的变换矩阵
    matrix1 = sim.getObjectMatrix(frame1)
    matrix2 = sim.getObjectMatrix(frame2)

    -- 选择使用的方法编号(1或2)
    useMethodNb = 2

    if useMethodNb == 1 then
        -- 方法1
        -- 获取旋转轴和角度
        rotAxis, angle = sim.getRotationAxis(matrix1, matrix2)
        -- 获取参考框架1的位置
        pos1 = sim.getObjectPosition(frame1)
        -- 获取参考框架2的位置
        pos2 = sim.getObjectPosition(frame2)
        -- 计算位置向量
        posVector = {pos2[1] - pos1[1], pos2[2] - pos1[2], pos2[3] - pos1[3]}

        -- 将参考框架1移动到参考框架2,分为200步:
        stepCnt = 200
        dAngle = angle / stepCnt--角度增量
        dPos = {posVector[1] / stepCnt, posVector[2] / stepCnt, posVector[3] / stepCnt}--位置增量
        for i = 1, stepCnt, 1 do
            -- 处理旋转:
			-- matrix1是原始的变换矩阵,表示参考框架1的姿态(包括旋转和平移)。
			-- rotAxis是旋转轴,由sim.getRotationAxis(matrix1, matrix2)获得。
			-- {0, 0, 0}表示旋转轴的旋转中心为参考框架1的原点。
			-- dAngle * i表示旋转的角度,其中dAngle是计算得到的每步的旋转角度,而i表示当前是第几步。
			-- sim.rotateAroundAxis函数的作用是根据给定的旋转轴、旋转中心和旋转角度,计算新的矩阵,即matrixOut。
			-- 这个新的矩阵表示了在参考框架1上绕指定轴旋转了一定角度后的姿态。
            matrixOut = sim.rotateAroundAxis(matrix1, rotAxis, {0, 0, 0}, dAngle * i)
            -- 处理位置:
            matrixOut[4] = pos1[1] + dPos[1] * i
            matrixOut[8] = pos1[2] + dPos[2] * i
            matrixOut[12] = pos1[3] + dPos[3] * i
            -- 将新矩阵应用于参考框架1:
            sim.setObjectMatrix(frame1, matrixOut)
            -- 等待下一仿真步骤:
            sim.step()
        end
    else
        -- 方法2
        -- 将参考框架1移动到参考框架2,分为200步:
        stepCnt = 200
        for i = 1, stepCnt, 1 do
            matrixOut = sim.interpolateMatrices(matrix1, matrix2, i / stepCnt)
            -- 将新矩阵应用于参考框架1:
            sim.setObjectMatrix(frame1, matrixOut)
            -- 等待下一仿真步骤:
            sim.step()
        end
    end
end

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

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

相关文章

如何选择合适的数据库管理工具?Navicat Or DBeaver

写在前面 在阅读本文之前,糖糖给大家准备了Navicat和DBeaver安装包,在公众号内回复“Navicat”或“DBeaver”或"数据库管理工具"来下载。 引言 对于测试而言,在实际工作中往往会用到数据库,那么选择使用哪种类型的数…

SSL加密

小王学习录 今日摘录前言HTTP + SSL = HTTPSSSL加密1. 对称加密2. 非对称加密 + 对称加密3. 证书今日摘录 但愿四海无尘沙,有人卖酒仍卖花。 前言 SSL表示安全套接层,是一个用于保护计算机网络中数据传输安全的协议。SSL通过加密来防止第三方恶意截取并篡改数据。在实际应用…

MySQL数据库干货_30——【精选】JDBC常用操作

JDBC批量添加数据 批量添加数据简介 在JDBC中通过PreparedStatement的对象的addBatch()和executeBatch()方法进行数据的批量插入。 addBatch()把若干SQL语句装载到一起,然后一次性传送到数据库执行,即是批量处理sql数据的。executeBatch()会将装载到一…

【实习】串口通信

modbus介绍 详解Modbus通信协议—清晰易懂 Modbus协议是一个master/slave架构的协议。有一个节点是master节点,其他使用Modbus协议参与通信的节点是slave节点。每一个slave设备都有一个唯一的地址。在串行和MB网络中,只有被指定为主节点的节点可以启动一…

技术分享 | JMeter性能测试实现与分析

导语 JMeter是由著名开源软件巨头Apache组织开发的纯Java的压力测试工具,它即能测试动态服务(WebService),也能测试静态资源,包括Servlet服务、CGI脚本等,还能测试动态语言服务(PHP、Java、ASP…

串口通信

1.1 串口简介 在串口中 用0和1表示高低电平 VCC供电 设备A给设备B供电 如果各自都有供电的模块就不需要连接这个线 GND的连线是为了获取相同的电压基准 因为有时候获得电压各自判断的标准不一样 可能获得不一样的电压 如果想A发送数据给B那么蓝线不需要连接 如果想B发送给A那么…

自学人工智能难吗?

在人工智能风靡全球的时代,越来越多的人对学习人工智能产生了浓厚的兴趣。那么,自学人工智能难吗?今天,我们将为你揭开这个谜团,让你轻松开启智能未来之旅! 一、自学人工智能——不再是难题 过去&#xf…

爬取全国高校数据 (高校名称,高校所在地,高校类型,高校性质,高校特色,高校隶属,学校网站)

爬取全国高校数据 网站: 运行下面代码得到网站. import base64 # 解码 website base64.b64decode(IGh0dHA6Ly9jb2xsZWdlLmdhb2thby5jb20vc2NobGlzdC8.encode(utf-8)) print(website)分析: 我们需要爬取的字段,高校名称,高校所…

阎良区公益创投之“小飞机大梦想” 航模DIY主题活动

创造是人类探索迈出的第一步,科学是开启奇妙世界的金钥匙。为进一步提升“未来星”对科技知识的兴趣,培养他们的科学创新精神,11月16日,阎良区社会组织公益创投——“未来星”助力乡村留守儿童成长计划项目在阎良区聚宝小学开展“…

python+pytest接口自动化测试之接口测试基础

一、接口测试的基本信息 1、常用的两种接口:webservice接口和http api接口   webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,可以用soupui、jmeter等工具进行测试。   http api接口是走http协议,…

Source Insight 安装及使用方法

Source Insight 安装及使用方法 Source Insight 安装及使用方法Source Insight 简介Source Insigth 安装Source Insight 使用方法 Source Insight 安装及使用方法 Source Insight 简介 Source Insight是一款非常流行的程序编辑器和代码浏览器,它主要用于阅读、编写…

C#开发的OpenRA游戏之属性BodyOrientation(6)

C#开发的OpenRA游戏之属性BodyOrientation(6) 在顶层定义里会发现这个属性: ^SpriteActor: BodyOrientation: QuantizeFacingsFromSequence: RenderSprites: SpriteActor是用来定义角色的基本属性,它的第一个属性就是BodyOrientation,这个属性主要用来描述角色的身体的…

Android并发编程与多线程

一、Android线程基础 1.线程和进程 一个进程最少一个线程,进程可以包含多个线程进程在执行过程中拥有独立的内存空间,而线程运行在进程内 2.线程的创建方式 new Thread: 缺点:缺乏统一管理,可能无限制创建线程&…

msvcp140.dll是什么东西以及如何解决其文件缺失问题

当我们在使用Windows电脑的过程中,有时候可能会遇到一些由于系统文件缺失或者损坏而导致的问题。其中,"msvcp140.dll缺失"就是一种常见的错误提示。msvcp140.dll究竟是什么?为什么它会缺失?又该如何解决这个问题呢&…

国民技术Cortex-M0系列单片机IAP升级

考虑到设备部署到现场后有可能需要进行软件升级,之前做过PIC系列单片机的升级,现在想做个国民技术N32G031系列Cortex-M0内核的单片机IAP方案。 因为国民技术系列单片机在很多大程度上都模仿了STM32,所以我想其升级方案极有可能差不多。于是在…

微软宣布计划在 Windows 10 版本 22H2 中引入 AI 助手 Copilot

根据之前的传言,微软宣布计划在 Windows 10 版本 22H2 中引入 AI 助手 Copilot。Copilot 将包含在 Windows 10 家庭版和专业版中。该更新的发布日期尚未公布,但预计将在不久的将来发布。 在一份新闻稿中,微软表示在向 Windows 11 用户提供 Co…

2.Pandas数据预处理

2.1 数据清洗 以titanic数据为例。 df pd.read_csv(titanic.csv) 2.1.1 缺失值 (1)缺失判断 df.isnull() (2)缺失统计 # 列缺失统计 df.isnull().sum(axis0) # 行缺失统计 df.isnull().sum(axis1) # 统计缺失率 df.isnu…

时间序列预测中的4大类8种异常值检测方法(从根源上提高预测精度)

一、本文介绍 本文给大家带来的是时间序列预测中异常值检测,在我们的数据当中有一些异常值(Outliers)是指在数据集中与其他数据点显著不同的数据点。它们可能是一些极端值,与数据集中的大多数数据呈现明显的差异。异常值可能由于…

小红书美妆文案怎么写会火?

美妆护肤品牌如何在众多竞争者中脱颖而出,成为消费者心中的“网红”?答案就在小红书这个国内知名的美妆护肤分享平台上。小红书美妆文案怎么写会火?本文伯乐网络传媒将为你揭秘小红书美妆爆款文案撰写技巧,让你的内容疯狂吸睛&…

Java入门篇 之 多态

本篇碎碎念:个人认为,一切都不是不学习的理由,在如今这个"内卷"的时代,唯有认真学习,掌握知识,才能把握命运 今日份励志文案:你必须拼尽全力,才有资格说运气不好 加油吧,少…