1.分两个程序①主函数②function函数
2.main
clear;
clc;
%建立机器人模型
% theta d a alpha offset
SL1=Link([0 0 0.180 -pi/2 0 ],'standard');
SL2=Link([0 0 0.600 0 0 ],'standard');
SL3=Link([0 0 0.130 -pi/2 0 ],'standard');
SL4=Link([0 0.630 0 pi/2 0 ],'standard');
SL5=Link([0 0 0 -pi/2 0 ],'standard');
SL6=Link([0 0.1075 0 0 0 ],'standard');
starobot=SerialLink([SL1 SL2 SL3 SL4 SL5 SL6],'name','standard');
stat06=starobot.fkine([0,0,pi/2,0,0,pi/2]) %工具箱正解函数
stamyt06=mystafkine(0,0,pi/2,0,0,pi/2) %手写正解函数
3.function
function [T06]=mystafkine(theta1,theta2,theta3,theta4,theta5,theta6)
SDH=[theta1 0 0.180 -pi/2;
theta2 0 0.600 0;
theta3 0 0.130 -pi/2;
theta4 0.630 0 pi/2;
theta5 0 0 -pi/2;
theta6 0.1075 0 0];
T01=[cos(SDH(1,1)) -sin(SDH(1,1))*cos(SDH(1,4)) sin(SDH(1,1))*sin(SDH(1,4)) SDH(1,3)*cos(SDH(1,1));
sin(SDH(1,1)) cos(SDH(1,1))*cos(SDH(1,4)) -cos(SDH(1,1))*sin(SDH(1,4)) SDH(1,3)*sin(SDH(1,1));
0 sin(SDH(1,4)) cos(SDH(1,4)) SDH(1,2);
0 0 0 1];
T12=[cos(SDH(2,1)) -sin(SDH(2,1))*cos(SDH(2,4)) sin(SDH(2,1))*sin(SDH(2,4)) SDH(2,3)*cos(SDH(2,1));
sin(SDH(2,1)) cos(SDH(2,1))*cos(SDH(2,4)) -cos(SDH(2,1))*sin(SDH(2,4)) SDH(2,3)*sin(SDH(2,1));
0 sin(SDH(2,4)) cos(SDH(2,4)) SDH(2,2);
0 0 0 1];
T23=[cos(SDH(3,1)) -sin(SDH(3,1))*cos(SDH(3,4)) sin(SDH(3,1))*sin(SDH(3,4)) SDH(3,3)*cos(SDH(3,1));
sin(SDH(3,1)) cos(SDH(3,1))*cos(SDH(3,4)) -cos(SDH(3,1))*sin(SDH(3,4)) SDH(3,3)*sin(SDH(3,1));
0 sin(SDH(3,4)) cos(SDH(3,4)) SDH(3,2);
0 0 0 1];
T34=[cos(SDH(4,1)) -sin(SDH(4,1))*cos(SDH(4,4)) sin(SDH(4,1))*sin(SDH(4,4)) SDH(4,3)*cos(SDH(4,1));
sin(SDH(4,1)) cos(SDH(4,1))*cos(SDH(4,4)) -cos(SDH(4,1))*sin(SDH(4,4)) SDH(4,3)*sin(SDH(4,1));
0 sin(SDH(4,4)) cos(SDH(4,4)) SDH(4,2);
0 0 0 1];
T45=[cos(SDH(5,1)) -sin(SDH(5,1))*cos(SDH(5,4)) sin(SDH(5,1))*sin(SDH(5,4)) SDH(5,3)*cos(SDH(5,1));
sin(SDH(5,1)) cos(SDH(5,1))*cos(SDH(5,4)) -cos(SDH(5,1))*sin(SDH(5,4)) SDH(5,3)*sin(SDH(5,1));
0 sin(SDH(5,4)) cos(SDH(5,4)) SDH(5,2);
0 0 0 1];
T56=[cos(SDH(6,1)) -sin(SDH(6,1))*cos(SDH(6,4)) sin(SDH(6,1))*sin(SDH(6,4)) SDH(6,3)*cos(SDH(6,1));
sin(SDH(6,1)) cos(SDH(6,1))*cos(SDH(6,4)) -cos(SDH(6,1))*sin(SDH(6,4)) SDH(6,3)*sin(SDH(6,1));
0 sin(SDH(6,4)) cos(SDH(6,4)) SDH(6,2);
0 0 0 1];
T06=T01*T12*T23*T34*T45*T56;
4.结果
对比robotic toolbox里fkine的结果是一致的。
PS:这个手写的函数仅适用于DH模型。
文章浏览阅读122次。在这里,我还推荐给大家一个实现观察者模式非常好用的框架。API 使用也非常简单,举个例子,先引入maven 依赖包:<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>20.0</version></dependency>创建侦听事件GuavaEvent:publ_基于guavaapi轻松落地观察者设计模式
文章浏览阅读816次。直播涉及到音视频技术,想要深入研究,需要对音频和视频有一定的了解,这里我们只讨论直播中的技术实现,涉及到必要的底层实现或者必要的音视频知识会有一些相关链接或者概念上的阐述。先来看下开启一场直播,中间的流程是怎样的。如图:从上图可以看到,一场直播的流程为:1)手机端视频设备、音频设备采集到音视频数据,2)将采集到的音频数据和视频数据进行编码和封装,3)将封装后的数据通过RTMP协议传输到后端。再经过转码、分发、写入分布式系统等,再经过CDN(content delivery net,)传输给..._h.246
文章浏览阅读3.1k次,点赞15次,收藏35次。聚合函数(aggregate function)针对一组数据行进行运算,并且返回一条结果。GROUP BY 可以将数据分成多个组,针对每个组应用聚合计算。HAVING 子句用于对分组后的结果进行过滤。GROUPING SETS、CUBE、ROLLUP 提高了更高级的分组功能,能够提高多维度的数据分析和汇总功能。_postgresql 分组字段汇总
文章浏览阅读1k次。概述: Web service是一个pin独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。 更多理论知识请自行百度一下。sprinboot集成cxf:新建项目:springboot-webservice,pom...._springboot整合cxf发布web service和客户端调用(用户和密码验证)
文章浏览阅读1.5k次。我们使用SpringBoot来实现文件的上传,本文中的SpringBoot环境和SpringBoot+MyBatis+通用Mapper中的环境基本一致,我们就不再重复造轮子了,而是直接上手这个功能。依赖在SpringBoot+MyBatis+通用Mapper中我们已经引入了Web开发相关的依赖,所以这里就不需要再次引入了。配置我们需要对SpringMVC的文件上传功能进行一些配置,比如MaxFileSize等等属性。 我们使用JavaConfig来进行配置,写一个配置类UploadConfi_@component public class uploadconfig
文章浏览阅读1.7k次。通过package.json来安装node_modules第三方包将package.json文件拷贝到项目,在当前目录打开命令行安装: npm install --productionnpm install --productionnext.js项目中有.gitignore,也记得上传至github中_根据package安装node-modules
文章浏览阅读976次。<引言>在对抗日益激烈、加密手段逐渐成为主流的今天,攻防演练场景中的加密流量也已逐渐成为主流,对加密流量检测的技术变得愈发重要。目前针对攻防演练场景的加密流量检测主要分为解密后检测和不解密检测两大类,传统的解密检测拥有可以直接将加密流量转化为明文后采用完善的传统手段继续检测的优势,但也有诸如性能耗损、隐私泄露以及可以解密的流量有限等缺点,基于上述问题,不解密检测的方法逐渐受到业界重视,本文将从不解密的前提下讨论加密流量检测技术。在上期文章中,我们将攻防演练场景下的加密流量分为入联、横向、_网络攻防演练 与流量分析
文章浏览阅读203次。前言众所周知,移动开发已经来到了后半场,为了能够在众多开发者中脱颖而出,我们需要对某一个领域有深入地研究与心得,对于Android开发者来说,目前,有几个好的细分领域值得我们去建立自己的技术壁垒,如下所示:1、性能优化专家:具备深度性能优化与体系化APM建设的能力。2、架构师:具有丰富的应用架构设计经验与心得,对Android Framework层与热门三方库的实现原理与架构设计了如指掌。3、音视频/图像处理专家:毫无疑问,掌握NDK,深入音视频与图像处理领域能让我们在未来几年大放异彩。4、大前_百度校招薪资
文章浏览阅读1.1k次。文章目录如何获取管理员权限?如何获取管理员权限?在.bat 文件中,最上面添加以下脚本即可@echo offif exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0bcdedit >nulif '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin):UACPrompt%1 start "" msh_"@echo off if exist \"%systemroot%\\syswow64\" path %path%;%windir%\\sysnative;%s"
文章浏览阅读5.3k次。这几天link引入了qt,开发都没问题,但是jenkins上用msbuild总是编译失败,原因是 “Moc’ing xxx文件,系统找不到指定路径” 在jenkins服务器上直接用msbuild也是失败,但是在jenkins服务器上用vs打开项目编译过一次就好了。但是jenkins每次的编译时最好都清理一遍。所以这个问题还是没彻底解决。今天花了些时间研究了一下这个问题,最后发现是少上传了一个文件_下载别人的c++ qt代码ui文件系统找不到指定的路径
文章浏览阅读2k次。1、数组的解构赋值 let c = [b,a,e] = [1,2,3]; 若解构不成立则值为undifiend2、对象的解构赋值 a、变量名和属性名一样 let { name,gender } = {name: 'jwl',gender: 'man'}; b、变量名和属性名不一样,借助第三方的变量 let city = {name: 'bj',co_es6解构数字
文章浏览阅读1k次。题目给定n个矩阵{A1,A2,…,An},其中Ai和A(i+1)(i=1,2,3,…,n-1)是可乘的。矩阵乘法简单来说就是A(mn)和B(np)两个矩阵相乘,结果矩阵C为m*p阶的,且C(ij)就是A的第i行和B的第j行每个数对应相乘再作和的结果。用加括号的方法表示矩阵连乘的次序,不同的计算次序计算量(乘法次数)是不同的,找出一种加括号的方法使得矩阵连乘的计算量最小。问题分析这个问题求矩阵..._最小化矩阵链乘法的计算量