前端使用Threejs加载机械臂并控制机械臂跳舞

1. 前言

在我的第一篇博客中,大致讲解了如何使用threejs导入机械臂模型,以及如何让机械臂模型动起来的案例,可以看一下之前的博客前端使用Threejs控制机械臂模型运动

本篇博客主要讲解的是在原来的基础上添加GSAP动画库的应用,可以通过动画,来让机械臂进行指定轨迹位姿的运动

示例图:

示例图

2. 源码分享

  1. 机械臂运动本质上就是指定各个关节的位姿,一共六个关节,也就是一个六个元素的数组,每个位姿都是的区间,所以基本上就可以将三个动画分为不同的位姿数组
    // 动画1轨迹
    const anmation1 = [0, 1.65, -1.72, 0, 0, 0];
    
    // 动画2轨迹
    const anmation2 = [0, -0.88, 1.59, 0, 0, 0];
    
    // 动画3轨迹
    const anmation3 = [-3.14, 0, 0, 0, 0, 0];
    
  2. 应用轨迹: 循环遍历机械臂的每个关节组件,将关节组件的对应位置的角度设置为数组中的对应位置即可,例如关节1的y角度对应的就是数组的第一个元素,将第一个元素应用到关节1的y角度即可实现
     // 循环所有的自定义关节
      handConfig.forEach((item, index) => {
        // 判断是否有rotation属性,如果有就表示这个模型初始值就设置了角度
        if (item.rotation) {
          // 设置这个角度为指定的targetPoint中的点位
          item.rotation[item.activeRotation] = targetPoint[index];
          // 如果没有rotation属性,就表示这个模块初始值也没有角度
        } else {
          // 新建rotation属性
          item.rotation = {};
          // 指定rotation属性
          item.rotation[item.activeRotation] = targetPoint[index];
        }
    
        // 找到要改变角度的机械臂模型零件
        // const obj = handList.find(listItem => listItem.name.includes(item.name));
        let obj = handList.find(item => item.materialLibraries.join('') === index + 1 + '.mtl');
    
        // 自定义过渡的角度值以及角度方向
        let animationObj = {
          // 不限制执行次数
          repeat: -1,
          // 是否原路返回
          yoyo: true,
        };
        animationObj[item.activeRotation] = item.rotation[item.activeRotation];
    
        /**
         * 过渡旋转关节到达指定点位
         * @params {obj} 要设置的模型的rotation
         * @params {duration} 过渡时间
         * @params {target} 目标角度
         */
        gsap.to(obj.rotation, 1, animationObj);
      });
    
  3. gsap的用法: 本篇文章只做简单的介绍,详情请看官方文档GSAP官方文档
    // gsap.to方法的各个参数解释
    gsap.to(目标对象, {
        width: 'auto',
        repeat: 3,
        repeatDelay: 0.5,
        yoyo: true,
        esas: 'back',
        onRepeatParams: [1, '2', 3],
        onRepeat() {
          console.log('重复执行的回调')
          console.log('回调的参数:', arguments)
        },
        onComplete() {
          console.log('动画执行完成')
        },
        onStart() {
          console.log('动画从起始位置开始执行,即repeat会重复触发')
        }
      })
    

3. 总结

以上就是本期分享的全部内容了,关于本篇文章有不太理解的地方欢迎私信,或者之前的threejs导入机械臂并可以指定控制关节角度的这部分没懂的话可以看我之前的博客,写的很详细,需要源码或者模型也可以私信或者加我的wx: wang3209605851

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

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

相关文章

Java 使用sql查询mongodb

在现代应用开发中,关系型数据库和NoSQL数据库各有千秋。MongoDB作为一种流行的NoSQL数据库,以其灵活的文档模型和强大的扩展能力,受到广泛欢迎。然而,有时开发者可能更熟悉SQL查询语法,或者需要在现有系统中复用SQL查询…

STM32——Modbus协议

一、Modbus协议简介: 1.modbus介绍: Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域…

代码随想录训练第十一天|二叉树基础理论、二叉树递归遍历、二叉树迭代遍历、二叉树统一迭代法、LeetCode102.二叉树层序遍历

文章目录 二叉树理论基础二叉树种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树 二叉树存储方式二叉树遍历方式二叉树的定义总结 二叉树的递归遍历思路前序遍历后序遍历中序遍历 二叉树的迭代遍历思路前序遍历(迭代法)中序遍历(迭代法&#…

STM32-Unix时间戳和BKP备份寄存器以及RTC实时时钟

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. Unix时间戳1.1 Unix时间戳简介1.2 UTC/GMT1.3 时间戳转换 2. BKP备份寄存器2.1 BKP简介2.2 BKP基本结构2.3 BKP库函数 3. RTC实时时钟3.1 RTC简介3.2 RTC框图3.3 RTC基本结构3.4 硬件电路3.5 RTC操作注意事项3.6 R…

elementui中日期/时间的禁用处理,使用传值的方式

项目中,经常会用到 在一个学年或者一个学期或者某一个时间段需要做的某件事情,则我们需要在创建这个事件的时候,需要设置一定的时间周期,那这个时间周期就需要给一定的限制处理,避免用户的误操作,优化用户体验 如下:需求为,在选择学年后,学期的设置需要在学年中,且结束时间大…

C#反射基本应用

1、反射 反射是.NET Framework的一个特性,它允许在运行时获取类型的信息以及动态创建对象,调用方法,以及访问字段和属性。 2、代码 using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy…

快速搭建发卡独立站(完全免费)

本文介绍如何使用开源项目,零成本,无需服务器的方式搭建一套自己的数字商品/发卡独立站,不需要任何开发能力,即便是小白用户也能搭建。 感兴趣可直接查看开源项目地址👉 https://github.com/iDataRiver/theme-basic …

【全面介绍下如何使用Zoom视频会议软件!】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

C语言_数据的存储

数据类型介绍 1. 整形家族 //字符存储的时候,存储的是ASCII值,是整型 //char 默认是unsigned char还是signed char标准没有规定,其他类型都默认是signed char,unsigned char,signed char short,unsigned s…

Fast R-CNN(论文阅读)

论文名:Fast R-CNN 论文作者:Ross Girshick 期刊/会议名:ICCV 2015 发表时间:2015-9 ​论文地址:https://arxiv.org/pdf/1504.08083 源码:https://github.com/rbgirshick/fast-rcnn 摘要 这篇论文提出了一…

Mobile ALOHA: 你需不需要一个能做家务的具身智能机器人

相信做机器人的朋友最近一段时间一定被斯坦福华人团队这个Mobile ALOHA的工作深深所震撼,这个工作研究了一个能做饭,收拾衣服,打扫卫生的服务机器人,完成了传统机器人所不能完成的诸多任务,向大家展示了服务机器人的美…

建投数据入选“2024年中国最佳信创企业管理软件厂商”

近日,建投数据凭借国产化自主知识产权、完备的信创资质及信创软硬件环境全栈适配能力,入选第一新声联合天眼查发布的“2024年中国最佳信创厂商系列榜单”细分行业榜之“最佳信创企业管理软件厂商”。 本次最佳信创厂商系列榜单评选,包括综合榜…

阶段三:项目开发---搭建项目前后端系统基础架构:QA:可能遇到的问题及解决方案

任务实现 常见问题1:文件监视程序的系统限制。 1、错误提示:如果在Vue项目中,使用【 npm run serve】运行kongguan_web项目时报以下错误: 2、产生原因:文件监视程序的系统产生了限制,达到了默认的上限&am…

spring-ai 下载不了依赖spring-ai-openai-spring-boot-starter

第1坑:配置第三方仓库不生效, 提示在阿里云仓库没有找到 spring-ai-openai-spring-boot-starter 第2坑:升级jdk17后,springboot项目启动报错 Internal error (java.lang.reflect.InaccessibleObjectException): Unable to make pr…

1.Python学习笔记

一、环境配置 1.Python解释器 把程序员用编程语言编写的程序,翻译成计算机可以执行的机器语言 安装: 双击Python3.7.0-选择自定义安装【Customize installation】-勾选配置环境变量 如果没有勾选配置环境变量,输入python就会提示找不到命令…

Codeforces Round 955 E. Number of k-good subarrays【分治、记忆化】

E. Number of k-good subarrays 题意 定义 b i t ( x ) bit(x) bit(x) 为 x x x 的二进制表示下 1 1 1 的数量 一个数组的子段被称为 k − g o o d k-good k−good 的当且仅当:对于这个子段内的每个数 x x x,都有 b i t ( x ) ≤ k bit(x) \leq k…

阿里通义音频生成大模型 FunAudioLLM 开源!

01 导读 人类对自身的研究和模仿由来已久,在我国2000多年前的《列子汤问》里就描述了有能工巧匠制作出会说话会舞动的类人机器人的故事。声音包含丰富的个体特征及情感情绪信息,对话作为人类最常使用亲切自然的交互模式,是连接人与智能世界…

【Docker系列】Docker 命令行输出格式化指南

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

《昇思25天学习打卡营第12天|onereal》

CycleGAN图像风格迁移互换 模型简介 CycleGAN(Cycle Generative Adversarial Network) 即循环对抗生成网络,来自论文 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 。该模型实现了一种在没有配对示例的情况下学习将图像从源域…

Ubuntu 安装CGAL

一、什么是CGAL CGAL(Computational Geometry Algorithms Library)是一个广泛使用的开源库,主要用于计算几何算法的实现。该库提供了一系列高效、可靠和易于使用的几何算法和数据结构,适用于各种应用领域。以下是 CGAL 的主要功能…