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

网页游戏网站模板张家口住房和城乡建设部网站

网页游戏网站模板,张家口住房和城乡建设部网站,奥运会网站制作,深圳网站建设哪家最好要点 机器人运动几何和运动学#xff0c;Python短代码简述 ROS2创建包#xff0c;使用C和Python创建以下任务#xff1a;创建发布者和订阅者并使用CMake编译#xff0c;创建ROS2启动文件#xff0c;创建自定义消息和Turtlebot3服务节点#xff0c;使用ROS2组件编译视觉管…要点 机器人运动几何和运动学Python短代码简述 ROS2创建包使用C和Python创建以下任务创建发布者和订阅者并使用CMake编译创建ROS2启动文件创建自定义消息和Turtlebot3服务节点使用ROS2组件编译视觉管道发布图像消息创建并发处理和DDS功能 C实现工业机器人二维和三维逆运动学求解器模板 6自由度ROS2协同机器人机器学习路径规划器Gazebo 模拟ROS2 平衡车多机器人自定义YOLOv8和ROS2视觉检测消息和发布者及订阅者 Python和ROS2Raspberry Pi 4(树莓派) 控制无刷电机 3D图形游戏引擎模拟ROS2 机器人运动几何 几何的目的是描述空间、空间中的物体、它们的属性以及它们之间的关系。 常见的概念是尺寸、距离、位置、角度和尺寸。 常见的物体有点、线、平面、三角形、矩形、其他多边形、圆形、金字塔、长方体、其他多面体、圆柱体和球体。 我们正在寻找的描述是可以在计算机程序中操作的正式描述。 我们需要几何形状来对我们的机器人及其环境进行建模从而定义我们希望不发生的事情。 例如我们希望机器人 move() 和 navigate() 。 我们必须能够以精确的数字方式表达这个目标。 我们还必须对有关机器人和环境的几何信息进行编码以规划和执行机器人的动作。 机器人不应与自身或环境发生碰撞但仍应以有目的的方式与其他物体进行物理交互。 物体由两个几何方面定义形状姿态。 形状的几何要素 线的形状完全由其长度决定即它只有一个参数。圆的形状完全由其半径或直径决定即它也只有一个参数。三角形的形状可以通过多种方式确定所有这些方式都唯一地定义了其形状。所有这些定义都包含三个参数。矩形的形状完全由两个相邻边的长度决定通常称为宽度和长度。圆柱体的形状完全由圆和沿其高度的线即两个参数决定。球体的形状就像圆的形状一样完全由其半径或直径决定。长方体的形状完全由其三边的长度决定换句话说由底部矩形的宽度和长度以及沿其高度的线决定。 物体的姿态完全决定了它的行踪即位置和方向。 每当我们想要指定一个物体的姿态时我们首先考虑的必须是我们想要定位该物体的空间的尺寸。 维度可以定义为指定其中任何点所需的最小数量的值或坐标。 因为机器人技术处理的是物体及其在不同空间中的运动所以保持许多不同的概念会为你省去很多麻烦。 几何表示 在一维空间中位置可以仅由单个数字表示。 对这个数进行基本的数学运算如加法、减法、乘法都有相应的几何意义。 两个数字相加对应于 连接两个距离 将位置移动一定的距离。 理解一维中位置和距离/长度之间的这种模糊性至关重要因为在更高维空间中也是如此甚至更能解释。 a3 b2 cab对于一维几何来说这可能意味着两种截然不同的事物。 我们需要在我们的机器人软件中将这些不同的含义分开。 以下两个代码语义片段执行相同的计算但它们的语义很清晰。 我们正在处理距离 a_to_b_distance 3 b_to_c_distance 2 a_to_c_distance a_to_b_distance b_to_c_distancearm_segment1_length 3 arm_segment2_length 2 overall_arm_length arm_segment1_length arm_segment2_length再次执行相同的计算这无疑是关于计算新位置 pick_up_position 3 pick_up_to_drop_off_distance 2 drop_off_position pick_up_position pick_up_to_drop_off_distance人们容易混淆的原因不仅仅是代表许多不同概念的原始数据类型的问题。当涉及到空间表示时混乱源于位置和距离之间的有效转换 长度长度结果为长度减法相同位置长度产生位置与减法相同位置 - 位置产生长度 添加两个位置没有意义。 始终以保持位置与距离分开的方式命名变量。还有一种可以对距离/长度执行的基本运算标量乘法。 标量只是一个数字。 术语标量乘法源自更高维度的运算其中位置和变换不是单个数字而是向量 - 正如我们将很快讨论的那样。 一维中标量乘法意味着将距离/长度乘以无单位数 a_to_b_dist 3 scaling_factor 0.5 scaled_a_to_b_dist scaling_factor * a_to_b_dist重复一遍此操作仅对距离/长度有意义但对位置无效。 矢量 在 2D 和 3D 空间中我们需要 2 个各自的 3 个数字来描述一个位置。 使用正确的“数据结构”以及对其操作的适当定义使我们能够编写与一维情况非常相似的代码。 为此我们需要的数学工具是欧几里得向量或简称向量。 就我们的目的而言向量是一个有序的元组/数组具有至少加法、减法、标量乘法和长度/幅度/范数作为定义的运算。 请注意加法和减法仅针对相同大小的向量定义即由相同数量的数字组成。 在了解如何使用 numpy 在 Python 中对向量进行运算以及了解向量的数学符号之前我们首先在基本 Python 中实现三种向量运算 import math a_vec [1, 2, 3] b_vec [4, 5, 6] scalar 2 def vector_addition(a, b): # a bif len(a) ! len(b):return Noneres [0] * len(a)for i in range(len(a)):res[i] a[i] b[i]return res def vector_scalar_multiplication(s, a): # s * ares [0] * len(a)for i in range(len(a)):res[i] s * a[i]return res def vector_norm(a):sum 0for val in a:sum pow(val, 2)return math.sqrt(sum) print(vector_addition(a_vec, b_vec)) # prints: [5, 7, 9] print(vector_scalar_multiplication(scalar, a_vec)) # prints: [2, 4, 6] print(vector_norm(a_vec)) # prints: 3.741...虽然我们可以实现自己的向量类包括运算符重载但建议还是使用现有的库实现。 Python 中使用最广泛的向量和矩阵库是 numpy import numpy as npa_vec np.array([1, 2, 3]) b_vec np.array([4, 5, 6])print(a_vec b_vec) # prints: [5, 7, 9] print(scalar * a_vec) # prints: [2, 4, 6] print(np.linalg.norm(a_vec)) # prints: 3.741...让我们简单地看一下向量的数学符号。然后我们使用它们来处理 2D 和 3D 几何体。向量由粗体小写字母表示各个数字由正常字体小写字母表示并根据它们在向量中的位置进行排序。 例如3D 向量可写为 a ( a 1 , a 2 , a 3 ) \mathbf{a}\left(\mathrm{a}_1, \mathrm{a}_2, \mathrm{a}_3\right ) a(a1​,a2​,a3​) 或 a [ a 1 a 2 a 3 ] \mathbf{a}\left[\begin{array}{l}a_1 \\ a_2 \\ a_3\end{array}\right] a ​a1​a2​a3​​ ​ 前者是行向量后者是列向量。 尽管在两种类型之间执行运算或涉及矩阵运算时它们之间的差异可能很重要但我们现在可以忽略这一点。 使用这种表示法向量加法可以写成 c [ c 1 c 2 c 3 ] a b [ a 1 a 2 a 3 ] [ b 1 b 2 b 3 ] [ a 1 b 1 a 2 b 2 a 3 b 3 ] \mathbf{c}\left[\begin{array}{l} c_1 \\ c_2 \\ c_3 \end{array}\right]\mathbf{a}\mathbf{b}\left[\begin{array}{l} a_1 \\ a_2 \\ a_3 \end{array}\right]\left[\begin{array}{l} b_1 \\ b_2 \\ b_3 \end{array}\right]\left[\begin{array}{l} a_1b_1 \\ a_2b_2 \\ a_3b_3 \end{array}\right] c ​c1​c2​c3​​ ​ab ​a1​a2​a3​​ ​ ​b1​b2​b3​​ ​ ​a1​b1​a2​b2​a3​b3​​ ​ 标量乘法为 s ∗ a [ s ∗ a 1 s ∗ a 2 s ∗ a 3 ] s^* \mathbf{a}\left[\begin{array}{c} s^* a_1 \\ s^* a_2 \\ s^* a_3 \end{array}\right] s∗a ​s∗a1​s∗a2​s∗a3​​ ​ 向量范数欧几里得为 ∣ v ∣ ∥ [ v 1 v 2 v 3 ] ∥ v 1 2 v 2 2 v 3 2 |\mathbf{v}|\|\left[\begin{array}{l} v_1 \\ v_2 \\ v_3 \end{array}\right] \|\sqrt{v_1^2v_2^2v_3^2} ∣v∣∥ ​v1​v2​v3​​ ​∥v12​v22​v32​ ​ 在简短介绍了向量、它们的符号和实现之后我们就可以开始使用它们了。 以下代码对应如图所示的几何运算 import numpy as npposition1 np.array([1, 2]) translation1 np.array([3, 1]) position2 position1 translation1position3 np.array([6, 5]) translation2 position3 - position1scalar1 0.5 translation3 scalar1 * translation2可以通过与值 -1 进行标量乘法或通过减法而不是加法来完成平移的反转或反转。 在这方面向量的行为与常规数字类似。 a ( − 1 ) ⋅ a a − a 0 \mathbf{a}(-1) \cdot \mathbf{a}\mathbf{a}-\mathbf{a}\mathbf{0} a(−1)⋅aa−a0 与 1D 情况一样两个位移/平移的加/减会产生位移/平移位置的加/减和平移会产生一个位置两个位置相减产生平移。 矩阵 简单看矩阵只是一个二维数组m×n 矩阵有 m 行和 n 列。 在数学符号粗体中大写字母通常用于矩阵。 矩阵中的各个元素由一个小写字母和两个索引行、列表示。 3×4 矩阵可以写为 A [ a 1 , 1 a 1 , 2 a 1 , 3 a 1 , 4 a 2 , 1 a 2 , 2 a 2 , 3 a 2 , 4 a 3 , 1 a 3 , 2 a 3 , 3 a 3 , 4 ] \mathbf{A}\left[\begin{array}{llll} a_{1,1} a_{1,2} a_{1,3} a_{1,4} \\ a_{2,1} a_{2,2} a_{2,3} a_{2,4} \\ a_{3,1} a_{3,2} a_{3,3} a_{3,4} \end{array}\right] A ​a1,1​a2,1​a3,1​​a1,2​a2,2​a3,2​​a1,3​a2,3​a3,3​​a1,4​a2,4​a3,4​​ ​ 向量是矩阵的特例。它们是只有一行1×n行向量或只有一列m×1列向量的矩阵。 由于索引之一的值始终为 1因此索引的这一部分被删除从而产生我们上面使用的向量表示法。与向量一样加法和减法是按元素执行的。 标量乘法的工作原理也与向量的解释相同。 除了我们已经见过的这些运算之外还有一种新运算矩阵乘法。 兼容大小的矩阵可以相互相乘。这种乘法不是逐个元素进行的。相反矩阵乘法定义如下。给定两个矩阵 A \mathbf{A} A 和 B \mathbf{B} B我们按元素计算结果矩阵 C A B \mathbf{C}\mathbf{A B} CAB 中的每个条目 c i , j c_{i, j} ci,j​​ A 的第 i 行与 B 的第 j 列相乘。表达为函数 def matrix_multiplication(A, B):# The number of columns in matrix A# must be equal the number of rows in matrix Bif len(A[0]) ! len(B):return None# C: Zero initialized matrix of size len(A) x len(B[0]),# i.e. A rows x B columnsC ...for i in range(len(C)): # iterate rows in Cfor j in range(len(C[0])): # iterate columns in Cfor k in range(len(B)): # iterate rows in B ( columns in A)C[i][j] A[i][k] * B[k][j]return C旋转矩阵是沿着定义的旋转轴将向量旋转一定角度的矩阵。这里我们不会从三角学中导出旋转矩阵的条目。 此时您只需知道以下 2×2 旋转矩阵 R ( θ ) \mathbf{R}(\theta) R(θ) 在与 (θ) 相乘时可以正确地将 R ( θ ) \mathbf{R}(\theta) R(θ) 2D 向量旋转 theta (θ) 度。 R ( θ ) [ cos ⁡ ( θ ) − sin ⁡ ( θ ) sin ⁡ ( θ ) cos ⁡ ( θ ) ] \mathbf{R}(\theta)\left[\begin{array}{cc} \cos (\theta) -\sin (\theta) \\ \sin (\theta) \cos (\theta) \end{array}\right] R(θ)[cos(θ)sin(θ)​−sin(θ)cos(θ)​] 让我们使用新获得的知识和 Python 来验证上图c: from math import pi, cos, sin, radians points [np.array([1.5, 0.5]), np.array([1.5, 1.7]), np.array([2.5, 1.5])] theta radians(30) rotation_matrix np.array([[cos(theta), -sin(theta)],[sin(theta), cos(theta)]]) for i in range(len(points)):points[i] rotation_matrix points[i] print(points) # values rounded: [1.0, 1.2], [0.4, 2.2], [1.4, 2.5]可以通过反转旋转矩阵来执行给定旋转的相反操作。给定旋转的相反旋转或逆旋转是旋转回到起始点的旋转。执行旋转然后执行相应的反向旋转与不执行任何旋转相同。用矩阵表示法表示给定旋转矩阵 R \mathbf{R} R 及其逆旋转矩阵 R − 1 \mathbf{R}^{-1} R−1它们相乘的结果是单位矩阵 I \mathbf{I} I​ R R − 1 I \mathbf{R} \mathbf{R}^{-1}\mathbf{I} RR−1I 机器人运动学 在机器人技术中出现在两个主要环境中 轨迹即时间参数化路径描述关节空间和 3D 空间之间关系的运动学方程 速度和加速度 给定起始姿势 P 1 \mathbf{P}_1 P1​、结束姿势 P 2 \mathbf{P}_2 P2​以及起始时间 t 1 t_1 t1​和结束时间 t 2 t_2 t2​我们可以表达速度的计算公式中的 V \mathbf{V} V V P 2 − P 1 t 2 − t 1 \mathbf{V}\frac{\mathbf{P}_2-\mathbf{P}_1}{t_2-t_1} Vt2​−t1​P2​−P1​​ 由于姿势由位置以米为单位和方向以度或弧度为单位组成因此它们之间的移动速度不能用单个数字表示。相反位置和方向是分开处理的。这也导致线速度 v \mathbf{v} v 源自位置变化和角速度 ω \boldsymbol{\omega} ω (omega) 源自方向变化的分离。 参阅一计算思维 参阅二亚图跨际
http://www.pierceye.com/news/842369/

相关文章:

  • 青岛做网站大公司免费的行情网站app网页推荐
  • 产品网站建设多少钱哪些网站做推广效果好
  • 网站开发所需技能外链网
  • 广州做家教的网站临沂哪里有做网站
  • 网站建设介绍会发言稿网站开发主页
  • 做推广赚钱的网站如何制作网站策划书
  • 微信公众号商城网站开发能不能不用虚拟主机建设网站
  • iis 网站目录权限vps网站无法通过ip访问
  • 重庆关键词优化咸阳seo培训
  • 专业网站建设分类标准嘉兴网络项目建站公司
  • 做婚礼网站的公司简介网页打不开怎么办页面无法显示
  • 怎么套用模板做网站白嫖二级域名
  • 网站如何进行备案建立平台的步骤
  • 济南免费网站建设网站用什么软件编写
  • 网站如何注册微信公众平台 类型站长要维护网站
  • 美食类网站模板有的网站为什么打不开怎么回事
  • 平面设计网站导航1万元可以注册公司吗
  • 做网站接口多少钱怎样做旅游网站
  • dw制作旅游网站教程天津市区县档案部门网站建设指导意见
  • 关于网站建设的大学pinthis wordpress
  • 济宁 做网站企业做外贸网站常用术语
  • 国内优秀的设计网站推荐网页设计工作室赚钱吗
  • 商汇通网站广州白云学校网站建设
  • 茶叶企业建设网站php网站开发基础
  • 深圳网站建设 猴王网络地方信息网站源码
  • 微网站后台内容设置erp系统定制
  • 图片点击切换网站模板网站开发 北京外包公司
  • 网站正在建设中 免费东莞手机网站设计公司
  • 旅游网站开发成本包括企业管理控制系统
  • 青浦做网站中美最新局势分析