【Homework】【1--3】Learning resources for DQ Robotics in MATLAB

news2024/12/29 1:13:33

Learning resources for DQ Robotics in MATLAB

Lesson 1

在这里插入图片描述

代码


% Step 2: Define the real numbers a1 and a2
a1 = 123;
a2 = 321;

% Step 3: Calculate and display a3 = a1 + a2
a3 = a1 + a2;
disp(['a3 (a1 + a2) = ', num2str(a3)])

% Step 4: Calculate and display a3 = a1 * a2
a3 = a1 * a2;
disp(['a3 (a1 * a2) = ', num2str(a3)])

% Step 5: Calculate and display a3 = a1 / a2
a3 = a1 / a2;
disp(['a3 (a1 / a2) = ', num2str(a3)])

% Step 6: Define the real numbers theta1 and theta2
theta1 = pi / 12;
theta2 = 3 * pi;

% Step 7: Calculate and display a3 = cos(theta1 + theta2)
a3 = cos(theta1 + theta2);
disp(['a3 (cos(theta1 + theta2)) = ', num2str(a3)])

% Step 8: Calculate and display a3 = cos^2(theta1 + theta2) + sin^2(theta1 + theta2)
a3 = cos(theta1 + theta2)^2 + sin(theta1 + theta2)^2;
disp(['a3 (cos^2(theta1 + theta2) + sin^2(theta1 + theta2)) = ', num2str(a3)])

% Step 9: Calculate and display a3 = exp(a1) + log(a2)
a3 = exp(a1) + log(a2);
disp(['a3 (exp(a1) + log(a2)) = ', num2str(a3)])

% Step 10: Display the base of the natural logarithm, e, with 15 significant digits
format long
e_value = exp(1);
disp(['The base of the natural logarithm, e = ', num2str(e_value, 15)])


结果

a3 (a1 + a2) = 444
a3 (a1 * a2) = 39483
a3 (a1 / a2) = 0.38318
a3 (cos(theta1 + theta2)) = -0.96593
a3 (cos^2(theta1 + theta2) + sin^2(theta1 + theta2)) = 1
a3 (exp(a1) + log(a2)) = 2.619517318749063e+53
The base of the natural logarithm, e = 2.71828182845905

Lesson 2

在这里插入图片描述

代码

% quaternion_basics_homework.m
clear all;
include_namespace_dq

% 1. Display message
disp('Starting quaternion basics homework');

% 2. Store r1 as a rotation of π/8 about the x-axis
phi1 = pi / 8;
r1 = cos(phi1 / 2) + i_*sin(phi1 / 2)

% 3. Store r2 as a rotation of π/16 about the y-axis
phi2 = pi / 16;
r2 = cos(phi2 / 2) + j_*sin(phi2 / 2)

% 4. Store r3 as a rotation of π/32 about the z-axis
phi3 = pi / 32;
r3 = cos(phi3 / 2) + k_*sin(phi3 / 2)

% 5. Calculate the sequential rotation and store in r4
r4 = r1 * r2 * r3

% Plot r4
figure;
plot(r4);
title('Sequential Rotation Result (r4)');

% 6. Find the reverse rotation of r4 and store in r5
r5 = conj(r4)

% Plot r5
figure;
plot(r5);
title('Reverse Rotation (r5)');

% 7. Rotate r5 by 360 degrees about the x-axis and store in r6
phi4 = 2 * pi;  % 360 degrees in radians
r6 = cos(phi4 / 2) + i_*sin(phi4 / 2);
disp('Rotation of r5 by 360 degrees about the x-axis (r6):');
r6 = r5 * r6


% Plot r5 and r6 to confirm they represent the same rotation
figure;
subplot(1, 2, 1);
plot(r5);
title('Rotation r5');

subplot(1, 2, 2);
plot(r6);
title('Rotation r6');


结果

Starting quaternion basics homework
r1 =
0.98079 + 0.19509i
r2 =
0.99518 + 0.098017j
r3 =
0.9988 + 0.049068k
r4 =
0.97395 + 0.19863i + 0.086491j + 0.066992k
在这里插入图片描述

r5 =
0.97395 - 0.19863i - 0.086491j - 0.066992k 在这里插入图片描述

Rotation of r5 by 360 degrees about the x-axis (r6):
r6 =
- 0.97395 + 0.19863i + 0.086491j + 0.066992k 在这里插入图片描述

手写作业

在这里插入图片描述

题目 1

问题:四元数乘法的通用形式是什么?将 h 1 = a 1 + b 1 i ^ + c 1 j ^ + d 1 k ^ h_1 = a_1 + b_1\hat{i} + c_1\hat{j} + d_1\hat{k} h1=a1+b1i^+c1j^+d1k^ h 2 = a 2 + b 2 i ^ + c 2 j ^ + d 2 k ^ h_2 = a_2 + b_2\hat{i} + c_2\hat{j} + d_2\hat{k} h2=a2+b2i^+c2j^+d2k^相乘,找到结果 h 3 = a 3 + b 3 i ^ + c 3 j ^ + d 3 k ^ h_3 = a_3 + b_3\hat{i} + c_3\hat{j} + d_3\hat{k} h3=a3+b3i^+c3j^+d3k^的形式。

解答
四元数乘法的通用公式是基于以下规则:

  • i ^ 2 = j ^ 2 = k ^ 2 = − 1 \hat{i}^2 = \hat{j}^2 = \hat{k}^2 = -1 i^2=j^2=k^2=1
  • i ^ j ^ = k ^ \hat{i}\hat{j} = \hat{k} i^j^=k^, j ^ k ^ = i ^ \hat{j}\hat{k} = \hat{i} j^k^=i^, k ^ i ^ = j ^ \hat{k}\hat{i} = \hat{j} k^i^=j^
  • j ^ i ^ = − k ^ \hat{j}\hat{i} = -\hat{k} j^i^=k^, k ^ j ^ = − i ^ \hat{k}\hat{j} = -\hat{i} k^j^=i^, i ^ k ^ = − j ^ \hat{i}\hat{k} = -\hat{j} i^k^=j^

h 1 h_1 h1 h 2 h_2 h2相乘得到 h 3 = h 1 ⋅ h 2 h_3 = h_1 \cdot h_2 h3=h1h2,结果可以通过展开每一项并应用以上乘法规则计算。

h 3 = ( a 1 a 2 − b 1 b 2 − c 1 c 2 − d 1 d 2 ) + ( a 1 b 2 + b 1 a 2 + c 1 d 2 − d 1 c 2 ) i ^ + ( a 1 c 2 − b 1 d 2 + c 1 a 2 + d 1 b 2 ) j ^ + ( a 1 d 2 + b 1 c 2 − c 1 b 2 + d 1 a 2 ) k ^ h_3 = (a_1a_2 - b_1b_2 - c_1c_2 - d_1d_2) + (a_1b_2 + b_1a_2 + c_1d_2 - d_1c_2)\hat{i} + (a_1c_2 - b_1d_2 + c_1a_2 + d_1b_2)\hat{j} + (a_1d_2 + b_1c_2 - c_1b_2 + d_1a_2)\hat{k} h3=(a1a2b1b2c1c2d1d2)+(a1b2+b1a2+c1d2d1c2)i^+(a1c2b1d2+c1a2+d1b2)j^+(a1d2+b1c2c1b2+d1a2)k^

题目 2

问题:四元数范数的通用形式是什么?简化 h 1 h 1 ∗ \sqrt{h_1 h_1^*} h1h1

解答
四元数 h 1 = a 1 + b 1 i ^ + c 1 j ^ + d 1 k ^ h_1 = a_1 + b_1\hat{i} + c_1\hat{j} + d_1\hat{k} h1=a1+b1i^+c1j^+d1k^的范数定义为:

∥ h 1 ∥ = h 1 h 1 ∗ \| h_1 \| = \sqrt{h_1 h_1^*} h1=h1h1

其中 h 1 ∗ = a 1 − b 1 i ^ − c 1 j ^ − d 1 k ^ h_1^* = a_1 - b_1\hat{i} - c_1\hat{j} - d_1\hat{k} h1=a1b1i^c1j^d1k^ h 1 h_1 h1的共轭。

计算 h 1 h 1 ∗ h_1 h_1^* h1h1

h 1 h 1 ∗ = ( a 1 + b 1 i ^ + c 1 j ^ + d 1 k ^ ) ( a 1 − b 1 i ^ − c 1 j ^ − d 1 k ^ ) = a 1 2 + b 1 2 + c 1 2 + d 1 2 h_1 h_1^* = (a_1 + b_1\hat{i} + c_1\hat{j} + d_1\hat{k})(a_1 - b_1\hat{i} - c_1\hat{j} - d_1\hat{k}) = a_1^2 + b_1^2 + c_1^2 + d_1^2 h1h1=(a1+b1i^+c1j^+d1k^)(a1b1i^c1j^d1k^)=a12+b12+c12+d12

因此,四元数的范数为:
∥ h 1 ∥ = a 1 2 + b 1 2 + c 1 2 + d 1 2 \| h_1 \| = \sqrt{a_1^2 + b_1^2 + c_1^2 + d_1^2} h1=a12+b12+c12+d12

题目 3

问题:证明每个单位四元数 r = cos ⁡ ( φ 2 ) + v sin ⁡ ( φ 2 ) r = \cos\left(\frac{\varphi}{2}\right) + \mathbf{v}\sin\left(\frac{\varphi}{2}\right) r=cos(2φ)+vsin(2φ)都具有单位范数。

解答
单位四元数的定义是具有单位范数的四元数。设 r = cos ⁡ ( φ 2 ) + v sin ⁡ ( φ 2 ) r = \cos\left(\frac{\varphi}{2}\right) + \mathbf{v}\sin\left(\frac{\varphi}{2}\right) r=cos(2φ)+vsin(2φ),其中 v \mathbf{v} v是一个单位向量(即 ∥ v ∥ = 1 \| \mathbf{v} \| = 1 v=1)。

四元数 r r r的范数是其实部和虚部平方和的平方根。在这里,我们需要将 r r r写成实部和虚部的形式,然后计算它们的平方和。

对于四元数 r = cos ⁡ ( φ 2 ) + v sin ⁡ ( φ 2 ) r = \cos\left(\frac{\varphi}{2}\right) + \mathbf{v} \sin\left(\frac{\varphi}{2}\right) r=cos(2φ)+vsin(2φ),其实部为 cos ⁡ ( φ 2 ) \cos\left(\frac{\varphi}{2}\right) cos(2φ),虚部为 v sin ⁡ ( φ 2 ) \mathbf{v} \sin\left(\frac{\varphi}{2}\right) vsin(2φ)

为了计算四元数的范数 ∥ r ∥ \|r\| r,我们取实部和虚部的平方和的平方根:

∥ r ∥ = ( cos ⁡ ( φ 2 ) ) 2 + ( sin ⁡ ( φ 2 ) ∥ v ∥ ) 2 \|r\| = \sqrt{\left(\cos\left(\frac{\varphi}{2}\right)\right)^2 + \left(\sin\left(\frac{\varphi}{2}\right) \|\mathbf{v}\|\right)^2} r=(cos(2φ))2+(sin(2φ)v)2

其中:

  • cos ⁡ ( φ 2 ) \cos\left(\frac{\varphi}{2}\right) cos(2φ)是实部。
  • sin ⁡ ( φ 2 ) ∥ v ∥ \sin\left(\frac{\varphi}{2}\right) \|\mathbf{v}\| sin(2φ)v是虚部的大小。

因为 v \mathbf{v} v是单位向量,意味着 ∥ v ∥ = 1 \|\mathbf{v}\| = 1 v=1,代入上式可得:

∥ r ∥ = cos ⁡ 2 ( φ 2 ) + sin ⁡ 2 ( φ 2 ) \|r\| = \sqrt{\cos^2\left(\frac{\varphi}{2}\right) + \sin^2\left(\frac{\varphi}{2}\right)} r=cos2(2φ)+sin2(2φ)

利用三角恒等式 cos ⁡ 2 x + sin ⁡ 2 x = 1 \cos^2 x + \sin^2 x = 1 cos2x+sin2x=1,进一步简化得到:

∥ r ∥ = 1 = 1 \|r\| = \sqrt{1} = 1 r=1 =1

因此,每个单位四元数确实具有单位范数。

Lesson 3

在这里插入图片描述
在这里插入图片描述

代码

% dual_quaternion_basics_homework_part1.m
clear all;
close all;
include_namespace_dq

% 1. Store x_1 representing a translation of 1 meter along the x-axis,
%    followed by a rotation of π/8 about the z-axis.
t1 = i_; % Translation of 1 meter along the x-axis
r1 = cos(pi/16) + k_*sin(pi/16); % Rotation of π/8 about the z-axis
x_1 = r1 + 0.5 * E_ * t1 * r1

% 2. Store x_2 representing a translation of -1 meter along the z-axis,
%    followed by a rotation of -π/2 about the x-axis.
t2 = -k_; % Translation of -1 meter along the z-axis
r2 = cos(-pi/4) + i_*sin(-pi/4); % Rotation of -π/2 about the x-axis
x_2 = r2 + 0.5 * E_ * t2 * r2

% 3. Calculate the sequential rotation of the neutral reference frame,
%    first applying x_0 = 1, then x_1, followed by x_2.
x_0 = DQ(1); % Neutral reference frame
disp('Sequential rotation result (x_3):');
x_3 = x_0 * x_1 * x_2 % Sequential rotation

% Plot x_3
figure;
plot(x_3);
title('Sequential rotation result x_3');

% 4. Obtain the rotation part of x_3 without using rotation()
disp('Rotation part of x_3 (without using rotation()):');
rotation_part_x3 = x_3 - E_ * D(x_3)
rotation_part_x3_2 = P(x_3)

% 5. Obtain the translation part of x_3 without using translation()
disp('Translation part of x_3 (without using translation()):');
translation_part_x3 = 2 * D(x_3) * conj(rotation_part_x3)

% 6. Obtain the pose transformation of a rotation of π/8 about the z-axis,
%    followed by a translation of 1 meter along the x-axis, and store it in x_4
t41 = 0;
r41 = cos(pi/16) + k_*sin(pi/16); % Rotation of π/8 about the z-axis
x41 = r41 + E_ * 0.5 * t41 * r41;

t42 = i_; % Translation of 1 meter along the x-axis
r42 = 1;
x42 = r42 + E_ * 0.5 * t42 * r42;
x_4 = x41 * x42

% Check if x_4 is equal to x_1
% If different, explain the reason
if ~(x_4 == x_1)
    disp('x_4 and x_1 are different because the order of rotation and translation affects the final pose.');
end

结果

x_1 = 
         (0.98079 + 0.19509k) + E*(0.49039i - 0.097545j)
x_2 = 
         (0.70711 - 0.70711i) + E*(0.35355j - 0.35355k)
Sequential rotation result (x_3):
x_3 = 
         (0.69352 - 0.69352i - 0.13795j + 0.13795k) + E*(0.41573 + 0.27779i + 0.27779j - 0.41573k)

在这里插入图片描述

Rotation part of x_3 (without using rotation()):
rotation_part_x3 = 
         0.69352 - 0.69352i - 0.13795j + 0.13795k
rotation_part_x3_2 = 
         0.69352 - 0.69352i - 0.13795j + 0.13795k
Translation part of x_3 (without using translation()):
translation_part_x3 = 
         1i - 1k
x_4 = 
         (0.98079 + 0.19509k) + E*(0.49039i + 0.097545j)
x_4 and x_1 are different because the order of rotation and translation affects the final pose.

x ‾ 4 \underline{x}_4 x4 x ‾ 1 \underline{x}_1 x1不同的原因在于旋转和平移的顺序影响了最终的姿态变换结果。

在三维空间中,旋转和平移是非交换的操作,也就是说,先进行旋转然后平移,与先平移然后旋转,通常会得到不同的结果。因为在三维空间中,旋转会改变坐标系的方向,进而影响随后的平移方向。

只有在特定情况下会得到相同的结果,包括:

  1. 旋转角度为零

    • 如果旋转角度为零,则没有实际的旋转效果,平移的方向不会受到影响。因此,不论平移和旋转的顺序,最终的结果都是相同的。
  2. 旋转轴与平移方向平行

    • 如果旋转是绕某个轴(例如 x x x轴)进行,而平移也是沿该轴的方向(即 x x x轴方向),那么旋转不会改变平移的方向。因此,无论先平移再旋转还是先旋转再平移,结果都会相同。
  3. 平移向量为零

    • 如果平移量为零,则没有实际的平移效果。这种情况下,无论先旋转还是先平移,最终位置都相同。

单位对偶四元数的公式是先平移后旋转
在这里插入图片描述

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

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

相关文章

「Mac畅玩鸿蒙与硬件24」UI互动应用篇1 - 灯光控制小项目

本篇将带领你实现一个互动性十足的灯光控制小项目,用户可以通过点击按钮来控制灯光的开关。该项目将涉及状态管理、动态图片加载以及按钮交互,是学习鸿蒙应用开发的重要基础。 关键词 UI互动应用状态管理动态图片加载用户交互 一、功能说明 在这个灯光…

雷池社区版 7.1.0 LTS 发布了

LTS(Long Term Support,长期支持版本)是软件开发中的一个概念,表示该版本将获得较长时间的支持和更新,通常包含稳定性、性能改进和安全修复,但不包含频繁的新特性更新。 作为最受欢迎的社区waf&#xff0c…

七.numpy模块

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。 NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant…

RK3568平台开发系列讲解(内存篇)Linux 内存优化

🚀返回专栏总目录 文章目录 一、如何正确采集 Linux 内存可用空间二、系统内存优化参考步骤2.1、优化 Linux Kernel module 所占用的内存空间2.3、将 Wi-Fi built-in kernel2.4、优化 Linux 文件系统所占用的内存空间2.5、上层优化2.6、客户定制优化2.6.1、对具体客户的具体产…

Caffeine 手动策略缓存 put() 方法源码解析

BoundedLocalManualCache put() 方法源码解析 先看一下BoundedLocalManualCache的类图 com.github.benmanes.caffeine.cache.BoundedLocalCache中定义的BoundedLocalManualCache静态内部类。 static class BoundedLocalManualCache<K, V> implements LocalManualCache&…

猎板PCB2到10层数的科技进阶与应用解析

1. 单层板&#xff08;Single-sided PCB&#xff09; 定义&#xff1a;单层板是最基本的PCB类型&#xff0c;导线只出现在其中一面&#xff0c;因此被称为单面板。限制&#xff1a;由于只有一面可以布线&#xff0c;设计线路上有许多限制&#xff0c;不适合复杂电路。应用&…

Dinky中配置Flink集群

需要启动yarn-session 进程&#xff0c;在集群服务器 cd /pwd//flink/bin yarn-session -d 启动成功后可以在yarn的资源管理队列进行查看 启动成功后会给出&#xff1a;JobManager Web Interface 在dinky中进行配置&#xff1a; 集群配置 Hadoop 配置&#xff1a; H…

asp.net+uniapp养老助餐管理系统 微信小程序

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 以往流浪猫狗的救助网站相关信息的管理&#xff0c;都是工作人员手工统计。这种方式不但时效性低&#xff0c;而且需要查…

《Ooga》进不去游戏解决方法

Ooga如果遇到进不去游戏的情况&#xff0c;玩家可以采取很多种方法进行解决&#xff0c;其中包括检查设备配置与网络连接&#xff0c;验证游戏文件完整性以及清理游戏缓存。 Ooga进不去游戏怎么办 检查设备配置 确保电脑的配置达到了游戏的最低要求&#xff0c;如果配置不足&…

Kubernetes——part8-2 k8s集群存储解决方案 GlusterFS

一、存储解决方案介绍 1.1 GlusterFS GlusterFS是一个开源的分布式文件系统具有强大的横向扩展能力通过扩展能够支持数PB存储容量和处理数千客户端GlusterFS借助TCP/IP或InfiniBandRDMA网络将物理分布的存储资源聚集在一起&#xff0c;使用单一全局命名空间来管理数据。 1.2…

Kafka 之顺序消息

前言&#xff1a; 在分布式消息系统中&#xff0c;消息的顺序性是一个重要的问题&#xff0c;也是一个常见的业务场景&#xff0c;那 Kafka 作为一个高性能的分布式消息中间件&#xff0c;又是如何实现顺序消息的呢&#xff1f;本篇我们将对 Kafka 的顺序消息展开讨论。 Kafk…

js WebAPI黑马笔记(万字速通)

此笔记来自于黑马程序员&#xff0c;pink老师yyds 复习&#xff1a; splice() 方法用于添加或删除数组中的元素。 注意&#xff1a; 这种方法会改变原始数组。 删除数组&#xff1a; splice(起始位置&#xff0c; 删除的个数) 比如&#xff1a;1 let arr [red, green, b…

C 学习(5)

哈哈哈哈哈&#xff0c;终于想起来了&#xff01;贴一下主要的参考&#xff1a; 基本语法 - 《阮一峰《C 语言教程》》 - 书栈网 BookStack 内容写的比较浅显有疏漏&#xff0c;如果看不明白&#xff0c;再结合一下百度。 注释 C 语言的注释有两种表示方法。 第一种方法是…

redis7学习笔记

文章目录 1. 简介1.1 功能介绍1.1.1 分布式缓存1.1.2 内存存储和持久化(RDBAOF)1.1.3 高可用架构搭配1.1.4 缓存穿透、击穿、雪崩1.1.5 分布式锁1.1.6 队列 1.2 数据类型StringListHashSetZSetGEOHyperLogLogBitmapBitfieldStream 2. 命令2.1 通用命令copydeldumpexistsexpire …

【设计模式系列】建造者模式(十)

目录 一、什么是建造者模式 二、建造者模式的角色 三、建造者模式的典型应用 四、建造者模式在StringBuilder中的应用 五、典型建造者模式的案例 一、什么是建造者模式 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;用于构建复杂对…

用vite创建项目

一. vite vue2 1. 全局安装 create-vite npm install -g create-vite 2. 创建项目 进入你想要创建项目的文件夹下 打开 CMD 用 JavaScript create-vite my-vue2-project --template vue 若用 TypeScript 则 create-vite my-vue2-project --template vue-ts 这里的 …

JVM结构图

JVM&#xff08;Java虚拟机&#xff09;是Java编程语言的核心组件之一&#xff0c;负责将Java字节码翻译成机器码并执行。JVM由多个子系统组成&#xff0c;包括类加载子系统、运行时数据区、执行引擎、Java本地接口和本地方法库。 类加载子系统&#xff08;Class Loading Subsy…

WordPress伪静态设置

为什么要设置WordPress伪静态&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;中&#xff0c;静态URL通常被认为更易于搜索引擎爬虫抓取和索引&#xff0c;有助于提高网站的搜索引擎排名。 WordPress伪静态设置方法主要依赖于服务器环境&#xff0c;以下是针对不同服务器…

【黑盒测试】等价类划分法及实例

本文主要介绍黑盒测试之等价类划分法&#xff0c;如什么是等价类划分法&#xff0c;以及如何划分&#xff0c;设计等价类表。以及关于三角形案例的等价类划分法。 文章目录 一、什么是等价类划分法 二、划分等价类和列出等价类表 三、确定等价类的原则 四、建立等价类表 …

宠物领养救助管理软件有哪些功能 佳易王宠物领养救助管理系统使用操作教程

一、概述 佳易王宠物领养救助管理系统V16.0&#xff0c;集宠物信息登记、查询&#xff0c;宠物领养登记、查询&#xff0c; 宠物领养预约管理、货品进出库库存管理于一体的综合管理系统软件。 概述&#xff1a; 佳易王宠物领养救助管理系统V16.0&#xff0c;集宠物信息登记…