python机械臂仿真_使用VTK与Python实现机械臂三维模型可视化

三维可视化系统的建立依赖于三维图形平台, 如 OpenGL、VTK、OGRE、OSG等, 传统的方法多采用OpenGL进行底层编程,即对其特有的函数进行定量操作, 需要开发人员熟悉相关函数, 从而造成了开发难度大、 周期长等问题。VTK、 ORGE、OSG等平台使用封装更好的函数简化了开发过程。下面将使用Python与VTK进行机器人上位机监控界面的快速原型开发。

完整的上位机程序需要有三维显示模块、机器人信息监测模块(位置/角度/速度/电量/温度/错误信息...)、通信模块(串口/USB/WIFI/蓝牙...)、控制模块等功能模块。三维显示模块主要用于实时显示机器人的姿态(或位置)信息。比如机器人上肢手臂抬起,程序界面中的虚拟机器人也会同时进行同样的动作。三维显示模块也可以用于对机器人进行控制,实现良好的人机交互。比如在三维图像界面中可以点击拾取机器人某一关节,拖拽部件(肢体)控制真实的机器人完成同样的运动。Aldebaran Robotics的图形化编程软件Choregraphe可以完成上述的一些功能对NAO机器人进行控制。

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy84OTA5NjYvMjAxNzAyLzg5MDk2Ni0yMDE3MDIyNDE2MTkyMjY0OC0xOTE1MTI0ODMwLnBuZw==.jpg

对于简单的模型可以自己编写函数进行创建,但这种方法做出来的模型过于简单不够逼真。因此可以先在SolidWorks、Blender、3DMax、Maya、Rhino等三维设计软件中建立好模型,然后导出为通用的三维文件格式,再使用VTK将其读入并进行渲染。

在SolidWorks等三维设计软件中设计好机器人的大臂(upperarm)和小臂(forearm),然后创建装配体如下图所示。在将装配体导出为STL文件前需要注意几点:

1. 当从外界读入STL类型的模型时,其会按照它内部的坐标位置进行显示,因此它的位置和大小是确定的。为了以后的定位以及移动、旋转等操作的方便,需要先在SolidWorks中创建一个坐标系。如下图所示,坐标系建立在大臂关节中心点。

2. 如果将装配体整体输出为一个STL文件,则导入VTK后无法控制零部件进行相对运动。因此,需要将装配体各可动部件分别导出。

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy84OTA5NjYvMjAxNzAyLzg5MDk2Ni0yMDE3MDIyNDE1NTEyOTgwNC0xMzcwNTU2OTg1LnBuZw==.jpg

在SolidWorks的另存为STL对话框中,点开输出选项卡,如下图所示。注意之前提到的几点:如果勾选“在单一文件中保存装配体的所有零部件”则会将整个装配体导出为一个STL文件,否则就是分别命名的两个STL文件;输出坐标系下拉列表中选择之前创建的坐标系1,并勾选“不要转换STL输出数据到正的坐标空间”。

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy84OTA5NjYvMjAxNzAyLzg5MDk2Ni0yMDE3MDIyNDE1NTc1OTExNi03NzM1NjI2OTEucG5n.jpg

下面的Python代码简单实现了一个2自由度机械臂的三维仿真,可以拖动滑块或按键盘上的方向键控制肩关节或肘关节运动。当然程序还存在一些问题有待完善...

#!/usr/bin/env python

import vtk

import math

from vtk.util.colors import *

filenames = ["upperarm.stl","forearm.stl"]

dt = 1.0 # degree step in rotation

angle = [0, 0] # shoulder and elbow joint angle

renWin = vtk.vtkRenderWindow()

assembly = vtk.vtkAssembly()

slider_shoulder = vtk.vtkSliderRepresentation2D()

slider_elbow = vtk.vtkSliderRepresentation2D()

actor = list() # the list of links

# Customize vtkInteractorStyleTrackballCamera

class MyInteractor(vtk.vtkInteractorStyleTrackballCamera):

def __init__(self,parent=None):

self.AddObserver("CharEvent",self.OnCharEvent)

self.AddObserver("KeyPressEvent",self.OnKeyPressEvent)

# Override the default key operations which currently handle trackball or joystick

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CBCT是计算机体层摄影技术的一种,通常使用多张二维tiff图片重构三维图像。VTK是一个用于三维图像处理和可视化的开源库。下面是使用VTK对多张二维tiff图片进行三维可视化Python代码: ```python import vtk # 设置读取器 reader = vtk.vtkTIFFReader() # 读取多张二维tiff图片 for i in range(1, 101): filename = "image{}.tiff".format(i) reader.SetFileName(filename) reader.Update() # 设置用于显示的数据 input_data = reader.GetOutput() # 创建VTK数据集 image_data = vtk.vtkImageData() image_data.SetDimensions(input_data.GetDimensions()) image_data.SetSpacing(input_data.GetSpacing()) image_data.SetOrigin(input_data.GetOrigin()) image_data.SetScalarTypeToUnsignedChar() image_data.AllocateScalars() # 将二维图像拷贝到VTK数据集中 for z in range(input_data.GetDimensions()[2]): for y in range(input_data.GetDimensions()[1]): for x in range(input_data.GetDimensions()[0]): pixel = input_data.GetScalarComponentAsDouble(x, y, z, 0) image_data.SetScalarComponentFromDouble(x, y, z, 0, pixel) # 创建VTK可视化对象 actor = vtk.vtkImageActor() actor.SetInputData(image_data) # 将可视化对象添加到渲染器 renderer.AddActor(actor) # 创建渲染窗口和交互器 render_window = vtk.vtkRenderWindow() render_window.SetSize(800, 800) render_window.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) # 渲染并开始交互 render_window.Render() interactor.Start() ``` 此代码将多张二维tiff图片读取为VTK数据集,然后创建VTK可视化对象并将其添加到渲染器中。最后创建渲染窗口和交互器,并启动交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值