《机器人学一(Robotics(1))》_台大林沛群 第 5 周【机械手臂 轨迹规划】 Quiz 5

news2025/1/12 15:54:38

我又行了!🤣

求解的 位置 可能会有 变动,根据求得的A填写相应值即可。注意看题目。

coursera链接

文章目录

      • 第1题 Cartesian space
        • 求解 题1-3 的 Python 代码
      • 第2题
      • 第3题
      • 第4题 Joint space
        • 求解 题4-6 的 Python 代码
      • 第5题
      • 第6题
        • 其它可参考代码 Python

笛卡尔空间:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

第1题 Cartesian space

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

求解 题1-3 的 Python 代码

import numpy as np 

Δt1 = 2 - 0
Δt2 = 4 - 2
Δt3 = 9 - 4

T = [[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
     [1, Δt1, Δt1**2, Δt1**3, 0, 0, 0, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 1, Δt2, Δt2**2, Δt2**3, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
     [0, 0, 0, 0, 0, 0, 0, 0, 1, Δt3, Δt3**2, Δt3**3],
     [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2*Δt3, 3*Δt3**2],
     [0, 1, 2*Δt1, 3*Δt1**2, 0, -1, 0, 0, 0, 0, 0, 0],
     [0, 0, 2, 6*Δt1, 0, 0, -2, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 1, 2*Δt2, 3*Δt2**2, 0, -1, 0, 0],
     [0, 0, 0, 0, 0, 0, 2, 6*Δt2, 0, 0, -2, 0] ]  ## 需要仔细 检查, 很容易 打错

def getA(θ):
    θ = np.array(θ)
    A = np.dot(np.linalg.inv(T), θ.T)
    A = np.around(A, decimals = 2)  ## 结果 保留 到 小数点 后 两位
    return A 

## X 的导数 为 速度, 初始和末尾的速度均为0
X = [-4, -5, -5, 2, 2, 2, 0, 0, 0, 0, 0, 0]
print('X_A:')
print(getA(X))

## Y 的导数 为 速度, 初始和末尾的速度均为0
Y = [0, 5, 5, 3, 3, -3, 0, 0, 0, 0, 0, 0]
print('\nY_A:')
print(getA(Y))

## θ 
θ = [120, 45, 45, 30, 30, 0, 0, 0, 0, 0, 0, 0]
print('\nθ_A:')
print(getA(θ))

矩阵合并版本:

import numpy as np 

np.set_printoptions(suppress = True)

Δt1 = 2 - 0
Δt2 = 4 - 2
Δt3 = 9 - 4

T = [[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
     [1, Δt1, Δt1**2, Δt1**3, 0, 0, 0, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 1, Δt2, Δt2**2, Δt2**3, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
     [0, 0, 0, 0, 0, 0, 0, 0, 1, Δt3, Δt3**2, Δt3**3],
     [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2*Δt3, 3*Δt3**2],
     [0, 1, 2*Δt1, 3*Δt1**2, 0, -1, 0, 0, 0, 0, 0, 0],
     [0, 0, 2, 6*Δt1, 0, 0, -2, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 1, 2*Δt2, 3*Δt2**2, 0, -1, 0, 0],
     [0, 0, 0, 0, 0, 0, 2, 6*Δt2, 0, 0, -2, 0] ]

def getA(Θ):   ## 这里  直接使用矩阵 
    A = np.dot(np.linalg.inv(T), Θ)
    A = np.around(A, decimals = 2)  ## 结果 保留 到 小数点 后 两位
    return A 

Θ = [[-4, 0, 120],
    [-5, 5, 45],[-5, 5, 45],
    [2, 3, 30],[2, 3, 30],
    [2, -3, 0],
    [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
print('A:')
print(getA(Θ))

在这里插入图片描述

第1题答案: -5//1.44//2.19//-0.58

第2题

在这里插入图片描述

第2题答案: 5//1.67//-2.08//0.37

第3题

在这里插入图片描述
第3题答案: 120//0//-39.18//10.21

第4题 Joint space

在这里插入图片描述

根据这个,需要求解 每个 位姿下的 (θ1,θ2,θ3)
在这里插入图片描述

第4周的PPT:

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

求解 题4-6 的 Python 代码

### 已知  (x, y, θ),求解 (θ1, θ2, θ3)
import numpy as np
import math  ##  atan2(y, x, /)


### 获取 等号左边的 [θ1, θ2, θ3]   矩阵
l1 = 5
l2 = 3
l3 = 1

###  方法一: 通过几何法  求解
def RRR_geometric(x, y, θ):    
    θ2 = np.arccos((x**2 + y**2 - l1**2 - l2**2)/(2*l1*l2))
    ψ = np.arccos((l2**2 - x**2 - y**2 - l1**2)/(-2 * l1 * np.sqrt(x**2 + y**2)))   
    if θ2 < 0:
        θ1 = math.atan2(y, x) +  ψ   ## np.arctan2(y,x) 也可
    else:
        θ1 = math.atan2(y, x) -  ψ
    θ = np.pi * θ / 180  ## 角度 换 弧度
    θ3 = θ - θ1 - θ2
    return [θ1, θ2, θ3]
    
### 方法二: 代数解
def RRR_algebraic(x, y, θ):
    θ2 = np.arccos((x**2 + y**2 - l1**2 - l2**2)/(2*l1*l2))
    
    k1 = l1 + l2 * np.cos(θ2)
    k2 = l2 * np.sin(θ2)
    θ1 = math.atan2(y, x) - math.atan2(k2, k1)  ## np.arctan2(y,x) 也可
    θ = np.pi * θ / 180  ## 角度 换 弧度
    θ3 = θ - θ1 - θ2
    return [θ1, θ2, θ3]

x0, y0, θ0 = -4, 0, 120
x1, y1, θ1 = -5, 5, 45
x2, y2, θ2 = 2, 3, 30
xf, yf, θf = 2, -3, 0

##  选择其中一种方法计算 即可
# 法1:几何法   代入
# θ_3col = [RRR_geometric(x0, y0, θ0),
#          RRR_geometric(x1, y1, θ1),RRR_geometric(x1, y1, θ1),
#          RRR_geometric(x2, y2, θ2),RRR_geometric(x2, y2, θ2),
#          RRR_geometric(xf, yf, θf),
#          [0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0]]   ## 注意 返回 结果那样,这里就不用中括号了
## 法2: 解析解   代入
θ_3col = [RRR_algebraic(x0, y0, θ0),
         RRR_algebraic(x1, y1, θ1),RRR_algebraic(x1, y1, θ1),
         RRR_algebraic(x2, y2, θ2),RRR_algebraic(x2, y2, θ2),
         RRR_algebraic(xf, yf, θf),
         [0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0],[0, 0, 0]] 
# print(θ_3col)
#######################################################
####  求解 A
Δt1 = 2 - 0
Δt2 = 4 - 2
Δt3 = 9 - 4

T = [[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
     [1, Δt1, Δt1**2, Δt1**3, 0, 0, 0, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 1, Δt2, Δt2**2, Δt2**3, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
     [0, 0, 0, 0, 0, 0, 0, 0, 1, Δt3, Δt3**2, Δt3**3],
     [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2*Δt3, 3*Δt3**2],
     [0, 1, 2*Δt1, 3*Δt1**2, 0, -1, 0, 0, 0, 0, 0, 0],
     [0, 0, 2, 6*Δt1, 0, 0, -2, 0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0, 1, 2*Δt2, 3*Δt2**2, 0, -1, 0, 0],
     [0, 0, 0, 0, 0, 0, 2, 6*Δt2, 0, 0, -2, 0] ]

def getA(θ):   ## 这里  直接使用矩阵 
    A = np.dot(np.linalg.inv(T), θ)
    A = np.around(A, decimals = 2)  ## 结果 保留 到 小数点 后 两位
    return A 
    

print('θ_A:')
print(getA(θ_3col)) 

在这里插入图片描述
第4题答案: 1.99//-0.6//-0.22//0.05

第5题

在这里插入图片描述

第5题答案: 2.21//0//-0.83//0.27

第6题

在这里插入图片描述
第6题答案: -2.62//0//0.23//-0.07

其它可参考代码 Python

github链接

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

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

相关文章

leetcode 88:合并两个有序数组 。 双指针解法

题目 算法 双指针 code var merge function(nums1, m, nums2, n) {// 其实就是一个nums1数组从后向前的降序重排&#xff0c;从最后开始&#xff0c;比较nums1有效位置和nums2当前位置数的大小&#xff0c;依次填入&#xff0c;nums2最后若有剩余&#xff0c;则再多一步从后…

9、补充视频

改进后的dijkstra算法 利用小根堆 将小根堆特定位置更改,再改成小根堆 nodeHeap.addOrUpdateOrIgnore(edge.to, edge.weight + distance);//改进后的dijkstra算法 //从head出发,所有head能到达的节点,生成到达每个节点的最小路径记录并返回 public static HashMap<No…

Bytebase 和 GitLab 签署 Technology Partner 技术合作伙伴协议

Bytebase 和 GitLab 签署技术合作伙伴协议&#xff0c;携手为开发者提供流畅的数据库协作开发和管理体验。 GitLab 是世界领先的开源 AI 驱动 DevSecOps 平台&#xff0c;旨在帮助开发者团队更好协作、更高效交付软件。Bytebase 是一款为 DevOps 团队准备的数据库 CI/CD 工具&a…

一文讲解Linux内核内存管理架构

内存管理子系统可能是linux内核中最为复杂的一个子系统&#xff0c;其支持的功能需求众多&#xff0c;如页面映射、页面分配、页面回收、页面交换、冷热页面、紧急页面、页面碎片管理、页面缓存、页面统计等&#xff0c;而且对性能也有很高的要求。本文从内存管理硬件架构、地址…

上海控安携汽车网络安全新研产品出席AUTOSEMO“恒以致远,共创共赢”主题研讨会

8月31日&#xff0c;AUTOSEMO“恒以致远&#xff0c;共创共赢”主题研讨会在天津成功召开。本次大会由中国汽车工业协会软件分会中国汽车基础软件生态标委会&#xff08;简称&#xff1a;AUTOSEMO&#xff09;与天津市西青区人民政府联合主办。现场汇聚了100余位来自产学研政企…

单片机-LED介绍

简介 LED 即发光二极管。它具有单向导电性&#xff0c;通过 5mA 左右电流即可发光 电流 越大&#xff0c;其亮度越强&#xff0c;但若电流过大&#xff0c;会烧毁二极管&#xff0c;一般我们控制在 3 mA-20mA 之间&#xff0c;通常我们会在 LED 管脚上串联一个电阻&#xff0c…

unity 控制Dropdown的Arrow箭头变化

Dropdown打开下拉菜单会以“Template”为模板创建一个Dropdown List&#xff0c;在“Template”上添加一个脚本在Start()中执行下拉框打开时的操作&#xff0c;在OnDestroy()中执行下拉框收起时的操作即可。 效果代码如下用于控制Arrow旋转可以根据自己的想法进行修改&#xff…

雷达有源干扰识别仿真

各类干扰信号 基于数字射频存储(DRFM)技术的雷达干扰系统有三种工作方式&#xff1a;转发方式、应答方式和噪声方式&#xff0c;即&#xff0c;对应有三种干扰类型。 噪声干扰 DRFM干扰系统在噪声工作方式下不但可以产生传统噪声干扰&#xff0c;还可以通过将数字噪声调制到干…

网络空间内生安全数学基础(1)——背景

目录 &#xff08;一&#xff09;内生安全基本定义及实现什么是内生安全理论内生安全理论实现方法动态性异构性冗余性 &#xff08;二&#xff09;安全防御和可靠性问题起源内生安全防御、可靠性保证与香农可靠通信 &#xff08;三&#xff09;总结 &#xff08;一&#xff09;…

C语言sizeof()计算空间大小为8的问题

在练习数据结构过程中&#xff0c;定义指针p&#xff0c;并且申请了10个char类型空间&#xff0c;但在计算p所指空间大小时候&#xff0c;发现了一些奇怪的现象。 #include <stdio.h> #include <stdlib.h>int main(){char s[12];printf("the size of memory …

循迹小车原理介绍和代码示例

目录 循迹小车 1. 循迹模块使用 2. 循迹小车原理 3. 循迹小车开发和调试代码 循迹小车 1. 循迹模块使用 TCRT5000传感器的红外发射二极管不断发射红外线当发射出的红外线没有被反射回来或被反射回来但强度不够大时红外接收管一直处于关断状态&#xff0c;此时模块的输出…

node版本问题

服务器下载下来的vue项目启动出现下列问题 npm ERR! path E:\vueEnv\app\node_modules\node-sass npm ERR! command failed npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node scripts/build.js npm ERR! Building: C:\Program Files\nodejs\node.exe E:\vueEnv\ap…

存储空间压缩6倍 ,多点DMALL零售SaaS场景降本实践

&#x1f9d1;‍&#x1f4bc; 作者简介 冯光普&#xff1a;多点 DMALL 数据库团队负责人&#xff0c;负责数据库稳定性建设与 DB PaaS 平台建设&#xff0c;在多活数据库架构、数据同步方案等方面拥有丰富经验。 杨家鑫&#xff1a;多点高级 DBA&#xff0c;擅长故障分析与性能…

java八股文面试[数据库]——分页查询优化

一般性分页 一般的分页查询使用简单的 limit 子句就可以实现。limit格式如下&#xff1a; SELECT * FROM 表名 LIMIT [offset,] rows 第一个参数指定第一个返回记录行的偏移量&#xff0c;注意从0开始&#xff1b; 第二个参数指定返回记录行的最大数目&#xff1b; 如果只给定…

Nomad 系列-快速上手

系列文章 Nomad 系列文章 Nomad 重要术语 Nomad 安装设置相关术语 agent - 代理。Agent 是在 Server&#xff08;服务器&#xff09; 或 Client&#xff08;客户端&#xff09; 模式下运行的 Nomad 进程。client - 客户端。Nomad 客户端负责运行分配给它的任务。它还向服务器…

JVM----GC(垃圾回收)详解

一、Automatic Garbage Collection&#xff08;垃圾回收&#xff09;简介 Automatic Garbage Collection &#xff08;自动垃圾回收&#xff09;是JVM的一个特性&#xff0c;JVM会启动相关的线程&#xff0c;该线程会轮训检查heap memeory&#xff0c;并确定哪些是未被引用的(…

滚动菜单 flutter

想实现这个功能&#xff1a; 下面的代码可以实现&#xff1a; import package:flutter/material.dart;void main() > runApp(MyApp());class MyApp extends StatelessWidget {static const String _title Flutter Code Sample;overrideWidget build(BuildContext context)…

【MySQL】CRUD (增删改查) 基础

CRUD&#xff08;增删改查&#xff09;基础 一. CRUD二. 新增 &#xff08;Create&#xff09;1. 单行数据 全列插入2. 多行数据 指定列插入 三. 查询&#xff08;Retrieve&#xff09;1. 全列查询2. 指定列查询3. 查询字段为表达式4. 别名5. 去重&#xff1a;DISTINCT6. 排序…

【算法】希尔 (Shell) 排序 详解

希尔排序 详解 希尔排序代码实现 排序&#xff1a; 排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a; 假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#x…

生信豆芽菜-机器学习筛选特征基因

网址&#xff1a;http://www.sxdyc.com/mlscreenfeature 一、使用方法 1、准备数据 第一个文件&#xff1a;特征表达数据 第二个文件&#xff1a;分组信息&#xff0c;第一列为样本名&#xff0c;第二列为患者分组 第三个文件&#xff1a;分析基因名 2、选择机器学习的方…