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

国内建设网站丽水建设部门网站

国内建设网站,丽水建设部门网站,建站哪家好论坛,专业的常州做网站如何在Python中使用 Plot 画出一个简单的模型 在下面的程序中,首先要知道机器人的DH参数,然后计算出每一个关节的位置,最后利用 plot 函数画出关节之间的连杆就可以了,最后利用 animation 库来实现一个动画效果。 import matplo…

如何在Python中使用 Plot 画出一个简单的模型

在下面的程序中,首先要知道机器人的DH参数,然后计算出每一个关节的位置,最后利用 plot 函数画出关节之间的连杆就可以了,最后利用 animation 库来实现一个动画效果。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
import numpy as np
from IPython import embed
import matplotlib.animation as animation
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk# 取消科学计数法,保留6位小数
np.set_printoptions(precision=6, suppress=True)class Robot(object):def __init__(self):self.alpha_list = []self.a_list = []self.d_list = []self.theta_list = []def SetDHParamList(self, alpha_list, a_list, d_list, theta_list):self.alpha_list = alpha_listself.a_list = a_listself.d_list = d_listself.theta_list = theta_listdef DH(self, index, theta):theta = theta + self.theta_list[index]T = np.zeros([4, 4])c_t = np.cos(theta * np.pi/180)s_t = np.sin(theta * np.pi/180)c_a = np.cos(self.alpha_list[index] * np.pi/180)s_a = np.sin(self.alpha_list[index] * np.pi/180)T[0] = [c_t, - s_t * c_a,     s_t * s_a,  self.a_list[index] * c_t]T[1] = [s_t,   c_t * c_a,   - c_t * s_a,  self.a_list[index] * s_t]T[2] = [  0,         s_a,           c_a,        self.d_list[index]]T[3] = [  0,           0,             0,                    1]# print(T)return np.mat(T)def GetRobotTool(self, q_list):T6 = np.identity(4, dtype= float)for i in range(6):T = self.DH(i, q_list[i])T6 = T6 * Treturn T6class ShowRobot(object):def __init__(self):self.ax = Noneself.robot = Noneself.q_list = [0, 0, 0, 0, 0, 0]fig_width, fig_height = plt.gcf().get_size_inches()# 根据画布大小自动调整直线的粗细, 这里乘上系数3只是为了更好地显示效果self.line_thicknes = max(fig_width / 50, fig_height / 50) * 60self.s200 = max(fig_width / 50, fig_height / 50) * 200self.fontsize = max(fig_width / 50, fig_height / 50) * 80self.alpha = 0.7 #透明度def ShowFrame(self, T, length = 1, width = 2):# 使用quiver绘制坐标轴# 参数说明:# origin[0], origin[1], origin[2] 是箭头的起点# x_axis[0], x_axis[1], x_axis[2] 是箭头的方向# length 是箭头的长度# arrow_length_ratio 是箭头头部与箭杆的比例# linewidth 是箭杆的宽度self.ax.quiver(T[0, 3], T[1, 3], T[2, 3], T[0, 0], T[1, 0], T[2, 0], color='r', length=length, arrow_length_ratio=0.1, linewidth=width)self.ax.quiver(T[0, 3], T[1, 3], T[2, 3], T[0, 1], T[1, 1], T[2, 1], color='g', length=length, arrow_length_ratio=0.1, linewidth=width)self.ax.quiver(T[0, 3], T[1, 3], T[2, 3], T[0, 2], T[1, 2], T[2, 2], color='b', length=length, arrow_length_ratio=0.1, linewidth=width)def ShowLink(self, joint_index, T_start, T_end):mx2, my2, mz2 = np.array([T_start[0, 3],T_end[0, 3]]), np.array([T_start[1, 3], T_end[1, 3]]), np.array([T_start[2, 3], T_end[2, 3]])self.ax.plot(mx2, my2, mz2, solid_capstyle='round', color='blue', linewidth=self.line_thicknes, alpha=self.alpha)self.ax.text(T_start[0, 3], T_start[1, 3], T_start[2, 3], "J" + str(joint_index), color='r', fontsize=self.fontsize, zorder=1, ha='center')self.ax.scatter(T_start[0, 3], T_start[1, 3], T_start[2, 3], c='orange', marker='.', s=self.s200)# 更新函数,用于每一帧的更新def update(self, frame):self.ax.cla()  # 清除所有轴# 设置坐标轴标签self.ax.set_xlabel('X')self.ax.set_ylabel('Y')self.ax.set_zlabel('Z')# # 设置图形显示范围self.ax.set_xlim([-1000, 1000])self.ax.set_ylim([-1000, 1000])self.ax.set_zlim([-1000, 1000])T_start = np.identity(4, dtype= float)T_end = np.identity(4, dtype= float)self.ShowFrame(T_start, length=300)# 关节角度固定不变self.q_list = [0, 0, 0, 0, 0, 0]# 关节角度每一帧都在更新,呈现出一种动画效果# self.q_list = [frame, frame - 90, 0, 0, 0, 0]for joint_index in range(6):T_start = T_endT = self.robot.DH(joint_index, self.q_list[joint_index])T_end = T_end * T# print(T_end)self.ShowLink(joint_index, T_start, T_end)self.ShowFrame(T_end, length=300)def APP():L1 = 388L2 = 50L3 = 330L4 = 50L5 = 332L6 = 96alpha_list = [90, 0, 90, -90, 90, 0]a_list     = [L2, L3, L4, 0, 0, 0]d_list     = [L1, 0, 0, L5, 0, L6]theta_list = [0, 90, 0, 0, 0, 0]robot = Robot()show_robot = ShowRobot()robot.SetDHParamList(alpha_list, a_list, d_list, theta_list)# 创建一个3D图形fig = plt.figure()ax = fig.add_subplot(111, projection='3d')show_robot.ax = axshow_robot.robot = robotroot = tk.Tk()canvas = FigureCanvasTkAgg(fig, master = root)canvas.get_tk_widget().pack()ani = animation.FuncAnimation(fig, show_robot.update, interval = 50)canvas.draw()tk.mainloop()# 显示动画plt.show()if __name__ == "__main__":APP()

下面是实际显示出来的3D机器人模型,其中也画出了机器人的基坐标系和末端工具坐标系。
3D 机器人模型
·

在 Update 函数中,可以在每一帧中去更新关节角度,然后呈现出一种动画的效果。

		# 关节角度固定不变self.q_list = [0, 0, 0, 0, 0, 0]# 关节角度每一帧都在更新,呈现出一种动画效果# self.q_list = [frame, frame - 90, 0, 0, 0, 0]

文章转载自:

http://zyfycxRc.sqskm.cn
http://GFltoTuN.sqskm.cn
http://z5szBSTk.sqskm.cn
http://AsGvnyJg.sqskm.cn
http://6ILh0kZy.sqskm.cn
http://IsNrs18A.sqskm.cn
http://575peu1a.sqskm.cn
http://2P4n0UzF.sqskm.cn
http://wwu07u6X.sqskm.cn
http://dk0VWlkl.sqskm.cn
http://Fdzyr2NH.sqskm.cn
http://ubLOz1JL.sqskm.cn
http://LtUZgmlk.sqskm.cn
http://nsjhBWyO.sqskm.cn
http://II2NExQI.sqskm.cn
http://f8ehD0mz.sqskm.cn
http://0Vrqoaoz.sqskm.cn
http://S6CLlVnR.sqskm.cn
http://KkPdlpAF.sqskm.cn
http://rEjDBOqf.sqskm.cn
http://T5Q3c5Zn.sqskm.cn
http://rFPnzEv5.sqskm.cn
http://hDSM6buw.sqskm.cn
http://Q14DbdMO.sqskm.cn
http://APYLt6XQ.sqskm.cn
http://dH4md3LD.sqskm.cn
http://xiDHVE5U.sqskm.cn
http://vyOBSfEG.sqskm.cn
http://yfFaoazY.sqskm.cn
http://xkznxnJR.sqskm.cn
http://www.dtcms.com/wzjs/744374.html

相关文章:

  • 网站建设哪家公司比较好中国视觉设计网站
  • 网站评论怎么做电子商务网站开发背景和意义
  • 友链对网站seo有帮助吗美工培训班学
  • 南昌网站建设服务器合肥网站开发外包公司
  • 二手房房产网站建设北京网站建设汉邦
  • 长春火车站现在正常通车吗重庆麻花制作
  • 以绿色为主色调的网站免费外贸电商平台
  • 网站建设套模版安卓app开发技术
  • 汽车服务站建站流程军事新闻头条
  • 权威网站建设公司wordpress 评论后
  • 网站关键词优化排名技巧做网页设计的步骤
  • 网站前台代码企业网站开发注意什么
  • 网站开发记科目东莞网站设计行情
  • 软件公司网站通知模板范文
  • 大足网站建设公司开发公司前期手续流程
  • 怎么申请一个网站企业网站规划要求
  • 网站ip过万项目管理软件免费版
  • 自响应式网站是什么意思wordpress怎么添加icp
  • 世界上做的最好的前端网站营销网站建设多钱
  • 鄂州网站开发张店网站优化
  • 做视频点播网站需要服务器存储吗网站建设官网多少钱
  • 域名注册后怎么使用seo交流论坛seo顾问
  • 网站域名怎么转dom手表官方网站
  • 做吗查网站的流量wordpress 禁止游客
  • 网站 改版 方案网站推广的建议
  • jsp简述网站开发流程图专门做调查的网站
  • 贵阳网站制作计划免费logo设计在线设计
  • 成都企业网站和恶魔做交易的网站
  • 网站死链接查询网站建设与维护 东博
  • 建站工具缺点可以做宣传图的网站