当前位置: 首页 > news >正文

Matlab机械手碰撞检测应用

本文包含三个部分:

  1. Matlab碰撞检测的实现
  2. URDF文件的制作
  3. 机械手STL文件添加夹爪

一.Matlab碰撞检测的实现

首先上代码

%% 检测在结构环境中机器人是否与物体之间发生碰撞情况,如何避免?
% https://www.mathworks.com/help/robotics/ug/check-for-environmental-collisions-with-manipulators.html
%% 构建环境
% Create two platforms
clc
clear
platform1 = collisionBox(0.5,0.5,0.25);
platform1.Pose = trvec2tform([-1 0 0.2]);
worldCollisionArray = {platform1};
%% 创建figure对象显示环境:可以直接用exampleHelperVisualizeCollisionEnvironment(worldCollisionArray);
ax=gca;
% 显示桌子1并上色
[~, patchObj]=show(platform1,'Parent', ax);
patchObj.FaceColor = [1 0.6 0.9];
axis([-0.8,1,-0.8,1.2,0,1.4])%调整图框范围
view(141,22)%调节视角
hold on
%% 添加机器人模型:可更改为DH方向构建。
robot=importrobot("E:\3D\3D抓取\yaskawaGP12\urdf\yaskawaGP12.urdf");
robot.Gravity=[0 0 -9.81];
robot.DataFormat="column";
%robot = loadrobot("kinovaGen3","DataFormat","column","Gravity",[0 0 -9.81]);
show(robot,homeConfiguration(robot),"Parent",ax, 'Frames','off');startConfig=[3;1;0.8;0;0;pi];%关结空间
endConfig=[3;1;0.2;0;0;pi];
endEffector="link6";
%% 使用梯形速度规划从起点到终点的轨迹【关节空间】
q= trapveltraj([startConfig,endConfig],60,"EndTime",2);hold on
axis([-1.8,1,-1.8,1.2,0,2.2])%调整图框范围
view(141,22)%调节视角
axis on
hold on
title('机器人根据起点和终点位姿直接梯形速度的运动')
for i = 1:2:length(q)show(robot,q(:,i),"PreservePlot",false);%false 不留下重影poseNow = getTransform(robot, q(:,i), endEffector);%正运动学plot3(poseNow(1,4), poseNow(2,4), poseNow(3,4),'b.','MarkerSize',5)drawnow
end%%
% 初始化输出
inCollision = false(length(q),1); %===> zeros(length(q),1)
isConfigInCollision=false(length(q),1);
worldCollisionPairIdx = cell(length(q),1); % 元胞数组,保存与环境碰撞的部件和关节配置的索引
for i = 1:length(q)isConfigInCollision(i) = checkCollision(robot,q(:,i),Exhaustive='on');[inCollision(i),sepDist] = checkCollision(robot,q(:,i),worldCollisionArray,"IgnoreSelfCollision","on","Exhaustive","on");%  sepDist为输出是机器人身体与世界碰撞对象之间的距离--->存储为矩阵[bodyIdx,worldCollisionObjIdx] = find(isnan(sepDist)); % 找到碰撞的部件。距离是空NaN,则发生碰撞worldCollidingPairs = [bodyIdx,worldCollisionObjIdx]; worldCollisionPairIdx{i} = worldCollidingPairs;  %机器人部件索引第一列,环境物体索引第二列
end
isSelfCollision = any(isConfigInCollision);
isTrajectoryInCollision = any(inCollision);
%% 检测到碰撞并可视化构型,第一个和最后一个检测到的碰撞
collidingIdx1 = find(inCollision,1);%第一个:构型索引19
if(collidingIdx1)%collidingIdx2 = find(inCollision,1,"last");%最后一个:构型索引172% Identify the colliding rigid bodies.找到机器人中的碰撞部分collidingBodies1 = worldCollisionPairIdx{collidingIdx1}*[1 0]';%取碰撞的机器人部件第一列的=矩阵乘以[1,0]'%具体看矩阵维度% collidingBodies2 = worldCollisionPairIdx{collidingIdx2}*[1 0]';%  Identify the colliding world bodies.找到环境中的碰撞部分collidingworld1 = worldCollisionPairIdx{collidingIdx1}*[0 1]';%取碰撞的机器人部件第一列的=矩阵乘以[1,0]'%具体看矩阵维度% collidingworld2 = worldCollisionPairIdx{collidingIdx2}*[0 1]';%% 显示环境,并将碰撞进行可视化exampleHelperHighlightCollisionBodies(robot,collidingBodies1 +1,ax);% hold on[~, patchObj]=show(worldCollisionArray{collidingworld1(1)},"Parent"',ax);patchObj.FaceColor = [1 0.8 0];title('发生碰撞的部分构型显示','Color', 'r')
elsetitle('未发生碰撞','Color', 'g')
end

代码中首先创建platform1箱体、robot机器手模型,后根据起点、终点规划轨迹,再图像化显示,然后进入正题判断碰撞,碰撞分自碰撞与外部碰撞;

此功能需要安装Robotics System Toolbox,下载路径:Robotics Toolbox - Peter Corke

下载后双击安装即可。

上面代码的urdf文件可以使用C:\Program Files\MATLAB\R2022a\toolbox\robotics\robotmanip\robotModels\roboturdf内的替代;

注意:loadrobot函数加载的模型文件与importrobot不同,后者需要URDF文件。

此部分可参考博客:Robotics System Toolbox中的机器人运动(6)-碰撞检测-CSDN博客

二.URDF文件制作

此处第一次接触,较艰难

参考博客:特别章节-0.1 SolidWorks导出机械臂的URDF模型各个关节坐标系设置_sw2urdf导入模型如何正确设置坐标系-CSDN博客

Solidworks_to_URDF导出教程 - 知乎

还有SW的安装:SolidWorks 2022 SP5.0 软件下载+安装教程XL

SW还需要安装转URDF插件:sw_urdf_exporter - ROS Wiki,下载后安装即可

补充:

注意图中每一处的选择,JointName内的名称不能与link1相同,JointType内需要选择对应部件,还有机械手是关节型的,link应一级一级展开

然后正常导出即可。

三.机械手STL文件添加夹爪

思路是把导出URDF里的STL文件link6加上夹爪就好,碰撞检测时就可以带夹爪判断了。

修改STL文件废了些时间,实际完全可以用Matlab写一个程序实现

目前用的时Meshlab软件修改,在文件-导入网格,打开对应文件。

右侧部件鼠标右击出现菜单,对部件的平移旋转等需要用矩阵操作,做这个的应该都了解矩阵

这就是操作界面,修改数值然后右下角Apply,注意前三个数值单位是米;

注意机械手上的link6部件不能动,动了其与机械手相对位置就不同了;

这样机械手抓取碰撞检测就完成了,后面还有Matlab导出DLL在C#语言调用的部分,问题不大,有一个Matlab函数返回多个参数需要在函数第一个参数设置返回数量,超过1则返回MWArray[]

RobotCollision matlab = new RobotCollision();
MWArray robot;
public Form1()
{InitializeComponent();robot = matlab.MyLoadRobot(@"E:\3D\3D抓取\yaskawaGP12\urdf\yaskawaGP12.urdf");
}private void button1_Click(object sender, EventArgs e)
{double z = double.Parse(textBox2.Text);MWArray boxSize = (MWNumericArray)new double[] { 0.5, 0.5, 0.25 };MWArray boxPose = (MWNumericArray)new double[] { -1, 0, 0.2 };MWArray box = matlab.GetBox(boxSize, boxPose);MWArray robotPose = new MWNumericArray(6, 2, new double[] { 3, 3, 1, 1, 0.8, z, 0, 0,             0, 0, Math.PI, Math.PI });MWArray result = matlab.RobotCollisionCheck(robot, box, robotPose);textBox1.Text = result.ToString();
}

相关资源下载:【免费】机械手碰撞检测相关资料资源-CSDN文库

相关文章:

Matlab机械手碰撞检测应用

本文包含三个部分: Matlab碰撞检测的实现URDF文件的制作机械手STL文件添加夹爪 一.Matlab碰撞检测的实现 首先上代码 %% 检测在结构环境中机器人是否与物体之间发生碰撞情况,如何避免? % https://www.mathworks.com/help/robotics/ug/che…...

(root) Additional property include:is not allowed

参考:执行docker compose命令出现 Additional property include is not allowed_(root) additional property include is not allowed-CSDN博客 原因是docker-compose的版本太低,下载最新的替换即可。 第一次2.6.x版本改成了2.19.x不够高,所…...

react 18父子组件通信

在React 18中,父子组件之间的通信方式与之前的版本基本相同,主要可以通过以下几种方式实现: 1. Props(属性) 父组件向子组件传递数据: 父组件通过属性(props)向子组件传递数据&am…...

FastReport 加载Load(Stream) 模板内包含换行符不能展示

如下代码 当以FastReport 载入streams时 当模板内包含换行符时会导致不能正常生成pdf System.Xml.XmlDocument newFrxXml new System.Xml.XmlDocument(); newFrxXml.Load(fileName);FastReport.Report report new FastReport.Report();using (var memStream new MemoryStre…...

Maven 中常用的 scope 类型及其解析

在 Maven 中,scope 属性用于指定依赖项的可见性及其在构建生命周期中的用途。不同的 scope 类型能够影响依赖项的编译和运行阶段。以下是 Maven 中常用的 scope 类型及其解析: compile(默认值): 这是默认的作用域。如果…...

vue3:点击子组件进行父子通信

问: 子组件怎么和爷爷组件通信 回答: 在Vue 3中,子组件和爷爷组件之间的通信可以通过事件冒泡和状态管理来实现。你可以使用Vue的事件系统来传递事件,或者使用全局状态管理库如Vuex或Pinia。以下是一个使用事件冒泡的示例&…...

Composo:企业级AI应用的质量守门员

在当今快速发展的科技世界中,人工智能(AI)的应用已渗透到各行各业。然而,随着AI技术的普及,如何确保其可靠性和一致性成为了企业面临的一大挑战。Composo作为一家致力于为企业提供精准AI评估服务的初创公司,通过无代码和API双模式,帮助企业监测大型语言模型(LLM)驱动的…...

Jackson扁平化处理对象

POJO对象 Data public class People {private PeopleInfo peopleInfo;private List<String> peopleIds;private Map<String, String> peopleMap;Datapublic static class PeopleInfo {private String name;private String address;} }JSON序列化处理 直接将对象进…...

Java即时编译器(JIT)的原理及在美团的实践经验

基本功 | Java即时编译器原理解析及实践 - 美团技术团队 这篇文章由美团AI平台/搜索与NLP部的珩智、昊天、薛超撰写&#xff0c;深入介绍了Java即时编译器&#xff08;JIT&#xff09;的原理及在美团的实践经验。 Java执行过程与即时编译器概述 Java执行过程&#xff1a;Java…...

使用 Ollama 在 Windows 环境部署 DeepSeek 大模型实战指南

文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来&#xff0c;大语言模型&#xff08;LLM&#xff09;的应用逐渐成为技术热点&#xff0c;而 DeepSeek 作为国产开…...

算法基础之八大排序

文章目录 概要1. 冒泡排序&#xff08;Bubble Sort&#xff09;2. 选择排序&#xff08;Selection Sort&#xff09;3. 插入排序&#xff08;Insertion Sort&#xff09;4. 希尔排序&#xff08;Shell Sort&#xff09;5. 归并排序&#xff08;Merge Sort&#xff09;6. 快速排…...

使用TensorFlow和Keras构建卷积神经网络:图像分类实战指南

使用TensorFlow和Keras构建卷积神经网络&#xff1a;图像分类实战指南 一、前言&#xff1a;为什么选择CNN进行图像分类&#xff1f; 在人工智能领域&#xff0c;图像分类是计算机视觉的基础任务。传统的机器学习方法需要人工设计特征提取器&#xff0c;而深度学习通过卷积神经…...

音频进阶学习十一——离散傅里叶级数DFS

文章目录 前言一、傅里叶级数1.定义2.周期信号序列3.表达式DFSIDFS参数含义 4.DFS公式解析1&#xff09;右边解析 T T T、 f f f、 ω \omega ω的关系求和公式N的释义求和公式K的释义 e j ( − 2 π k n N ) e^{j(\frac{-2\pi kn}{N})} ej(N−2πkn​)的释义 ∑ n 0 N − 1 e…...

20.<Spring图书管理系统①(登录+添加图书)>

PS&#xff1a;关于接口定义 接口定义&#xff0c;通常由服务器提供方来定义。 1.路径&#xff1a;自己定义 2.参数&#xff1a;根据需求考虑&#xff0c;我们这个接口功能完成需要哪些信息。 3.返回结果&#xff1a;考虑我们能为对方提供什么。站在对方角度考虑。 我们使用到的…...

关于图像锐化的一份介绍

在这篇文章中&#xff0c;我将介绍有关图像锐化有关的知识&#xff0c;具体包括锐化的简单介绍、一阶锐化与二阶锐化等方面内容。 一、锐化 1.1 概念 锐化&#xff08;sharpening&#xff09;就是指将图象中灰度差增大的方法&#xff0c;一次来增强物体的轮廓与边缘。因为发…...

Django开发入门 – 0.Django基本介绍

Django开发入门 – 0.Django基本介绍 A Brief Introduction to django By JacksonML 1. Django简介 1) 什么是Django? 依据其官网的一段解释&#xff1a; Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. …...

多智能体协作架构模式:驱动传统公司向AI智能公司转型

前言 在数字化浪潮的席卷下&#xff0c;传统公司的运营模式正面临着前所未有的挑战。随着市场竞争的日益激烈&#xff0c;客户需求的快速变化以及业务复杂度的不断攀升&#xff0c;传统公司在缺乏 AI 技术支撑的情况下&#xff0c;暴露出诸多痛点。在决策层面&#xff0c;由于…...

CentOS服务器部署Docker+Jenkins持续集成环境

一、准备工作 一台运行 CentOS 的服务器&#xff0c;确保有足够的磁盘空间、内存资源&#xff0c;并且网络连接稳定。建议使用 CentOS 7 或更高版本&#xff0c;本文以 CentOS 7 为例进行讲解。 拥有服务器的 root 权限&#xff0c;因为后续安装软件包、配置环境等操作需要较…...

【prompt实战】AI +OCR技术结合ChatGPT能力项目实践(BOL提单识别提取专家)

本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 1. 需求背景 2. 目标 3. BOL通用处理逻辑…...

【Android】Android开发应用如何开启任务栏消息通知

Android开发应用如何开启任务栏消息通知 1. 获取通知权限2.编写通知工具类3. 进行任务栏消息通知 1. 获取通知权限 在 AndroidManifest.xml 里加上权限配置&#xff0c;如下。 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android…...

上传文件报错:the request was rejected because no multipart boundary was found

后端使用的springboot的MultipartFile上传文件&#xff0c;接口使用apifox调试过没有问题&#xff0c;但前端调接口报错。前端使用了fetch发送formData数据。 the request was rejected because no multipart boundary was found 前端使用的请求头是 multipart/form-data 没有…...

大模型—Dify本地化部署实战

Dify本地化部署实战 系统要求 安装 Dify 之前, 请确保你的机器已满足最低安装要求: CPU >= 2 CoreRAM >= 4 GiB本地部署 开始前先简单介绍下部署Dify需要用到的组件,稍微有点多,但放心,有Docker你怕啥? 关系数据库:postgres缓存:Redis向量数据库:支持weaviate…...

功能架构元模型

功能架构的元模型是对功能架构进行描述和建模的基础框架,它有助于统一不同团队对系统的理解,并为系统的设计和开发提供一致的标准和规范。虽然具体的元模型可能因不同的应用领域和特定需求而有所差异,但一般来说,功能架构的元模型可以涵盖以下几个方面: 组件/模块元模型:…...

常用工具类——Collections集合框架

常用工具类——Collections集合框架 Collections 是 JDK 提供的一个工具类&#xff0c;提供了一系列静态方法&#xff0c;分类来复习&#xff01; 1.排序操作 reverse(List list) :反转顺序shuffle(List list) &#xff1a; 洗牌&#xff0c;将顺序打乱sort(List list) &…...

e2studio开发RA2E1(9)----定时器GPT配置输入捕获

e2studio开发RA2E1.9--定时器GPT配置输入捕获 概述视频教学样品申请硬件准备参考程序源码下载选择计时器时钟源UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()printf输出重定向到串口定时器输入捕获配…...

25/2/7 <机器人基础>雅可比矩阵计算 雅可比伪逆

雅可比矩阵计算 雅可比矩阵的定义 假设我们有一个简单的两个关节的平面机器人臂&#xff0c;其末端执行器的位置可以表示为&#xff1a; 其中&#xff1a; L1​ 和 L2 是机器人臂的长度。θ1​ 和 θ2是关节的角度。 计算雅可比矩阵 雅可比矩阵 JJ 的定义是将关节速度与末…...

网络爬虫js逆向之异步栈跟栈案例

【注意&#xff01;&#xff01;&#xff01;】 前言&#xff1a; 1. 本章主要讲解js逆向之异步栈跟栈的知识&#xff08;通过单步执行调试&#xff09; 2. 使用关键字搜定位加密入口 3. 本专栏通过多篇文章【文字案例】的形式系统化进行描述 4. 本文章全文进行了脱敏处理 5. 详…...

使用Ollama本地部署deepseek

1、下载安装Ollama 前往下载页面 https://ollama.com/download下载好安装包&#xff0c;如同安装软件一样&#xff0c;直接安装即可 win中默认为C盘&#xff0c;如果需要修改到其他盘&#xff0c;查找具体教程 运行list命令&#xff0c;检查是否安装成功 2、修改模型下载的…...

Rust错误处理:从灭火器到核按钮的生存指南

开篇&#xff1a;错误处理的生存哲学 在Rust的平行宇宙里&#xff0c;错误分为两种人格&#xff1a; panic! → 核按钮&#x1f4a3;&#xff08;不可恢复&#xff0c;全系统警报&#xff09;Result → 灭火器&#x1f9ef;&#xff08;可控制&#xff0c;局部处理&#xff0…...

Golang:Go 1.23 版本新特性介绍

流行的编程语言Go已经发布了1.23版本&#xff0c;带来了许多改进、优化和新特性。在Go 1.22发布六个月后&#xff0c;这次更新增强了工具链、运行时和库&#xff0c;同时保持了向后兼容性。 Go 1.23 的新增特性主要包括语言特性、工具链改进、标准库更新等方面&#xff0c;以下…...