Matlab 機器人工具箱 例程:運動學+動力學+路徑規劃+可視化

文章目錄

  • 1 創建機器人
  • 2 機器人顯示
  • 3 機器人示教
  • 4 機器人路徑規劃:給定關節角路徑
  • 5 機器人路徑規劃:給定末端位姿,求關節角路徑
  • 6 工作空間可視化
  • 參考鏈接

1 創建機器人

clc;clear;close all;
deg = pi/180;L1= Revolute('d', 0, 'a', 0, 'alpha', 0,'modified', ...'I', [0.1183 -0.0001 0.0001;-0.0001 0.1182 0.0001;0.0001 0.0001 0.0140], ...'r', [0.0002 0.0002 0.1264], ...'m', 5.6431, ...'Jm', 2.2e-4, ...'G', 81, ...'B', 1.48e-3, ...'Tc', [0.395 -0.435], ...'qlim', [-180 180]*deg );L2 = Revolute('d', 0.06, 'a', 0, 'alpha', -pi/2,'modified', ...'I', [0.0723,0.0000,-0.0051;0.0000,0.0784,0.0000;-0.0051,0.0000,0.0169;], ...'r', [-0.0062,0.0001,0.1080], ...'m', 5.0478, ...'Jm', 2.2e-4, ...'G', 121, ...'B', .817e-3, ...'Tc', [0.126 -0.071], ...'qlim', [-105 105]*deg );
L3 = Revolute('d', -0.004, 'a', 0.332, 'alpha', 0, 'modified', ...'I', [0.4263,0.0000,-0.0072;0.0000,0.4334,0.0001;-0.0072,0.0001,0.0191], ...'r', [-0.0131,0.0001,0.2402], ...'m', 5.7542, ...'Jm', 2.2e-4, ...'G', 81, ...'B', 1.38e-3, ...'Tc', [0.132, -0.105], ...'qlim', [-225 45]*deg );L4 = Revolute('d', -0.056, 'a', 0, 'alpha', pi/2, 'modified', ...'I', [0.0821,0.0000,-0.0314;0.0000,0.1257,0.0001;-0.0314,0.0001,0.0451], ...'r', [-0.0850,0.0003,0.1540], ...'m', 3.0870, ...'Jm', 2.2e-4, ...'G', 81, ...'B', 71.2e-6, ...'Tc', [11.2e-3, -16.9e-3], ...'qlim', [-110 110]*deg);
L5 = Revolute('d', 0.050, 'a', 0, 'alpha', -pi/2, 'modified', ...'I', [0.0235,0.0000,-0.0002;0.0000,0.0253,0.0000;-0.0002,0.0000,0.0045], ...'r', [0.0001,0.0002,0.0982], ...'m', 2.0459, ...'Jm', 2.2e-4, ...'G', 81, ...'B', 82.6e-6, ...'Tc', [9.26e-3, -14.5e-3], ...'qlim', [-115 115]*deg );
L6 = Revolute('d', -0.050, 'a', 0, 'alpha', pi/2, 'modified', ...'I', [0.0684,0.0000,0.0001;0.0000,0.0696,-0.0001;0.0001,-0.0001,0.0047], ...'r', [-0.0111,-0.0003,0.1366], ...'m', 2.6317, ...'Jm', 2.2e-4, ...'G', 51, ...'B', 36.7e-6, ...'Tc', [3.96e-3, -10.5e-3], ...'qlim', [-180 180]*deg );
% SerialLink類函數
robot=SerialLink([L1,L2,L3,L4,L5,L6],'name','VIPER7','comment','LL');
% Link類函數,顯示建立機器人DH參數 
robot.display();

輸出:

robot = 
VIPER7:: 6 axis, RRRRRR, modDH, slowRNE                          - LL;                                                           
+---+-----------+-----------+-----------+-----------+-----------+
| j |     theta |         d |         a |     alpha |    offset |
+---+-----------+-----------+-----------+-----------+-----------+
|  1|         q1|          0|          0|          0|          0|
|  2|         q2|       0.06|          0|    -1.5708|          0|
|  3|         q3|     -0.004|      0.332|          0|          0|
|  4|         q4|     -0.056|          0|     1.5708|          0|
|  5|         q5|       0.05|          0|    -1.5708|          0|
|  6|         q6|      -0.05|          0|     1.5708|          0|
+---+-----------+-----------+-----------+-----------+-----------+

2 機器人顯示

%通過手動輸入各個連桿轉角,模型會自動運動到相應位置
theta1=[0 -pi/2 -pi/2 0 0 0];
% SerialLink類函數,顯示機器人圖像
robot.plot(theta1);
title('機器人plot顯示')

在這里插入圖片描述

3 機器人示教

robot.teach();
title('機器人teach示教')

在這里插入圖片描述

4 機器人路徑規劃:給定關節角路徑

% 初始角
theta1=[0 -pi/2 -pi/2 0 0 0];
% 目標關節角
theta2=[-pi/2 0 -pi/4 -pi/3 pi/4 pi/2];
% 時間
t=[0:0.01:2];
% 關節空間路徑規劃
% 相當于具有tpoly插值的mtraj,但是對多軸情況進行了優化,還允許使用額外參數設置初始和最終速度
g=jtraj(theta1,theta2,t);
% 通過可選的輸出參數,獲得隨時間變化的關節速度加速度向量
[q,qd,qdd]=jtraj(theta1,theta2,t);
figure
i=1:6;
%繪制動畫
subplot(2,3,1);
robot.plot(g)
%繪制每個關節位置
subplot(2,3,2);
qplot(q(:,i));
grid on;title('位置');
%繪制每個關節速度
subplot(2,3,3);
qplot(qd(:,i));
grid on;title('速度');
%繪制每個關節加速度
subplot(2,3,4);
qplot(qdd(:,i));
grid on;title('加速度');
% 獲得每個時間點所需要的關節力矩
Q = robot.rne(q,qd,qdd);
%繪制每個關節的力矩
subplot(2,3,5)
qplot(t,Q);
grid on;title('關節力矩');

在這里插入圖片描述

5 機器人路徑規劃:給定末端位姿,求關節角路徑

%% 已知機械臂初始和目標的關節角度,利用五次多項式進行軌跡規劃
T1=transl(0.3,0.1,0);						%根據給定起始點,得到起始點位姿
T2=transl(0,0.3,0.1);						%根據給定終止點,得到終止點位姿
init_ang=robot.ikine(T1);				%根據起始點位姿,得到起始點關節角
targ_ang=robot.ikine(T2);				%根據終止點位姿,得到終止點關節角
step = 20;%軌跡規劃方法
figure
%關節空間軌跡規劃
%五次多項式軌跡,得到關節角度,角速度,角加速度,20為采樣點個數
[q, qd, qdd]=jtraj(init_ang,targ_ang,step); 
grid on
%根據插值,得到末端執行器位姿
T=robot.fkine(q);		
% 
nT=T.T;
%輸出末端軌跡
plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));
title('根據運動學求正解得到目標軌跡');
%動畫演示 
robot.plot(q);	
%robot.plot(q,'trail','b');  %運行后在命令行窗口再復制運行一次,trail軌跡,b藍色

在這里插入圖片描述

%% 求解上述運行過程中的位置、速度、加速度的變化曲線
figure
subplot(3,2,[1,3]); 					%subplot 對畫面分區 三行兩列 占用1到3的位置
plot3(squeeze(nT(1,4,:)),squeeze(nT(2,4,:)),squeeze(nT(3,4,:)));%輸出末端軌跡
robot.plot(q);							%動畫演示subplot(3, 2, 2);
i = 1:6;
plot(q(:,i));
title('位置');
grid on;subplot(3, 2, 4);
i = 1:6;
plot(qd(:,i));
title('速度');
grid on;subplot(3, 2, 6);
i = 1:6;
plot(qdd(:,i));
title('加速度');
grid on;

在這里插入圖片描述

6 工作空間可視化

figure
num = 30000;
p = zeros(num,3);%先聲明0矩陣可加快運行速度
for i=1:numq1 = L1.qlim(1) + rand * (L1.qlim(2) - L1.qlim(1));q2 = L2.qlim(1) + rand * (L2.qlim(2) - L2.qlim(1));q3 = L3.qlim(1) + rand * (L3.qlim(2) - L3.qlim(1));q4 = L4.qlim(1) + rand * (L4.qlim(2) - L4.qlim(1));q5 = L5.qlim(1) + rand * (L5.qlim(2) - L5.qlim(1));q6 = L6.qlim(1) + rand * (L6.qlim(2) - L6.qlim(1));q = [q1 q2 q3 q4 q5 q6];Ts = robot.fkine(q);  % SerialLink.fkine正向運動學, 給一個關節變量,可以求出變換矩陣P(i,:) = transl(Ts);
end
plot3( P(:,1), P(:,2), P(:,3),'b.','markersize',1); %在三維空間內繪制30000個點hold on; %添加新繪圖的時候保留當前繪圖
grid on; %在畫圖的時候添加網格線view([45 45]);
robot.plot([0 0 0 0 0 0]);

在這里插入圖片描述

參考鏈接

Matlab機械臂建模:機器人工具箱的使用&&導入自己的機械臂模型
Matlab機器人工具箱——動力學
MATLAB機器人工具箱學習(一)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718408.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718408.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718408.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Python】快速入門Python一天學完基礎語法

文章目錄 前言1. HelloWorld2. 變量與數據類型2.1 變量2.2 數據類型2.2.1 String 字符串類型2.2.2 基本類型轉換2.2.2 元組2.2.3 字典2.2.4 拆包 2.3 運算2.3.1 雙除號/雙乘號2.3.2 常見運算函數舉例2.3.3 布爾運算 3. 控制流程3.1 if-else 語句3.2 while 循環3.3 for 循環 4. …

子線程如何獲取Request

子線程獲取Request 有時候在進行業務處理時對于一些對于業務不那么重要且對于返回結果無關的情況會開啟一個新的線程進行處理,但是在開啟新線程進行處理時發現無法從RequestContextHolder中獲取到當前的請求,取出來是null 這是因為RequestContextHolder中…

逆變器專題(14)-弱電網下的LCL逆變器控制以及諧振峰問題(1)

相應仿真原件請移步資源下載 LCL濾波器 LCL濾波器因其本身為一個二階系統,其本身就會引發諧振,導致相應諧振頻率處的增益得到放大,進而產生諧波等問題;另一方面,在弱電網下,逆變器會與電網阻抗發生耦合&am…

ARM總結and復習

安裝交叉編譯工具鏈 a. 為什么安裝 因為arm公司的指令集在不斷迭代升級,指令集日益增多,而架構是基于指令集研發的,所以架構不一樣,指令集也不一樣 eg:arm架構使用的是arm指令集 x86架構使用的是x86指令集 而我們日常開發環境中linux的架構…

重載(Overload)和重寫(Override)的區別。重載的方法能否根據返回類型進行區分?

大家好我是蘇麟 , 今天開始又一個專欄開始了(又一個坑 哈哈) . 重載(Overload)和重寫(Override)的區別。重載的方法能否根據返回類型進行區分? 方法的重載和重寫都是實現多態的方式,區別在于前者實現的是編…

Java進階-測試方法

來學習一下軟件測試相關的方法,了解一下黑盒測試和白盒測試,以及后面要用到的JUnit單元測試。JUnit單元測試也屬于白盒測試,這次內容較少且相對簡單。 一、軟件測試方法 1、黑盒測試 不需要寫代碼,給輸入值,看程序…

分付在哪些商戶可以使用消費,微信分付怎么提取出來到余額上面來?

分付是一款信用支付產品,用戶可以使用分付進行線上線下的消費支付。下面是使用分付的一些方法: - 開通分付:在微信中搜索并開通分付服務,按照提示完成實名認證和綁定銀行卡等操作。 - 線上支付:在支持分付的線上商戶…

【Web - 框架 - Vue】隨筆 - 通過CDN的方式使用VUE 2.0和Element UI

通過CDN的方式使用VUE 2.0和Element UI - 快速上手 VUE 網址 https://cdn.bootcdn.net/ajax/libs/vue/2.7.16/vue.js源碼 https://download.csdn.net/download/HIGK_365/88815507測試 代碼 <!DOCTYPE html> <html lang"en"> <head><meta …

『大模型筆記』最大化大語言模型(LLM)的性能(來自OpenAI DevDay 會議)

最大化大語言模型(LLM)的性能(來自OpenAI DevDay 會議) 文章目錄 一. 內容介紹1.1. 優化的兩個方向(上下文優化和LLM優化)1.2. 提示工程:從哪里開始1.3. 檢索增強生成:拓展知識邊界1.4. 微調:專屬定制二. 參考文獻一. 內容介紹 簡述如何以可擴展的方式把大語言模型(LLMs)…

劍指offer》15--二進制中1的個數[C++]

1. 題目描述 輸入一個整數&#xff0c;輸出該數二進制表示中 1 的個數。 2. 解題思路 如果對負數直接右移&#xff0c;會導致最高位一直補1&#xff0c;最終變成0xFFFF死循環。 常規做法&#xff1a; 3. 代碼實現 #include<iostream> #include<vector> using…

Leetcoder Day38| 動態規劃part05 背包問題

1049.最后一塊石頭的重量II 有一堆石頭&#xff0c;每塊石頭的重量都是正整數。 每一回合&#xff0c;從中選出任意兩塊石頭&#xff0c;然后將它們一起粉碎。假設石頭的重量分別為 x 和 y&#xff0c;且 x < y。那么粉碎的可能結果如下&#xff1a; 如果 x y&#xff0c;那…

012集—二維輕量多線段LWpolyline設置凸度bulge——vba實現

本文主要講LightweightPolyline ,即輕量多段線。 ObjectARX 中提供了三種多段線的相關類:AcDbPolyline&#xff08;對應vba中lightweightpolyline&#xff09; 、AcDb2dPolyline (對應vba中polyline)和 AcDb3dPolyline Polyline就是&#xff08;輕量&#xff09;多段線&…

藍牙BLE 5.0、5.1、5.2和5.3區別

隨著科技的不斷發展&#xff0c;藍牙技術也在不斷進步&#xff0c;其中藍牙BLE&#xff08;Bluetooth Low Energy&#xff09;是目前應用廣泛的一種藍牙技術&#xff0c;而BLE 5.0、5.1、5.2和5.3則是其不斷升級的版本。本文將對這四個版本的區別進行詳細的比較。 一、BLE 5.0…

未來趨勢:個人化資源整合將成為主流

隨著科技的發展和社會的進步&#xff0c;我們正步入一個高度個性化和數字化的時代&#xff0c;在這個時代中&#xff0c;資源的整合與分配模式正發生著深刻的變革。本文試圖論證&#xff0c;未來的資源整合將更傾向于個人化&#xff0c;即資源將以更加靈活、定制化的方式流向個…

【mysql技巧】如何在這個mysql語句執行前加個前提,也就是只有表里沒有相同數據才進行添加插入操作

文章目錄 我們正常的mysql插入數據語句加個前提完結 我們正常的mysql插入數據語句 INSERT INTO guild_nakadai.admin_role_permission (role_id, permission_id, type) VALUES ((SELECT id FROM guild_nakadai.admin_roles WHERE name"員工"),(SELECT id FROM guil…

Unity UGUI之Slider基本了解

在Unity中&#xff0c;Slider&#xff08;滑動條&#xff09;是一種常用的用戶界面控件之一&#xff0c;允許用戶通過拖動滑塊來選擇一個數值。常常應用于調節數值&#xff08;如調節音量、亮度、游戲難度等&#xff09;、設置選項等。 以下是Slider的基本信息和用法: 1、創建…

每日OJ題_斐波那契dp①_力扣1137. 第 N 個泰波那契數

目錄 動態規劃dp算法原理 力扣1137. 第 N 個泰波那契數 解析代碼1 解析代碼2 動態規劃dp算法原理 動態規劃&#xff08;Dynamic Programming&#xff09;算法的核心思想是&#xff1a;將大問題劃分為小問題進行解決&#xff0c;從而一步步獲取最優解的處理算法 動態規劃算法…

快速冪(求解原理+例題)

目錄 反復平方法&#xff08;快速冪&#xff09;&#xff1a; 代碼&#xff1a; 例題&#xff1a;快速冪求逆元 作用&#xff1a; 快速求出 的結果。 時間復雜度&#xff1a; O(logk) 如果使用一般做法&#xff0c;從1循環到k&#xff0c;時間復雜度是O(k) 反復平方法&am…

低代碼流程引擎實戰:讓表單字段成為流程節點審批人的得力助手!

在現代企業的日常運營中&#xff0c;流程審批是保障工作高效、規范進行的關鍵環節。隨著企業對于靈活性和高效性的需求不斷增長&#xff0c;傳統的固定審批人設置已無法滿足多變的業務場景。在JVS低代碼中“設置流程節點審批人為表單字段”這一功能&#xff0c;旨在通過動態配置…