Редактирование: Manipulator model

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 12: Строка 12:
 
Current task is development of fencer's hand model. That means to create mathematical model, that finds the position of a hand and comes to this position from any previous position with visualization on C# language, using parameters (changes of angles in joints and coordinates of a shoulder)
 
Current task is development of fencer's hand model. That means to create mathematical model, that finds the position of a hand and comes to this position from any previous position with visualization on C# language, using parameters (changes of angles in joints and coordinates of a shoulder)
  
==Some information about modelling==
+
==Some information about programm==
  
 
===Degrees of freedom===
 
===Degrees of freedom===
[[Файл:Hand_bones.jpg|150px|left]]
 
 
This model has 9 degrees of freedom:<br>
 
This model has 9 degrees of freedom:<br>
 
2 — translation movement of a shoulder (front/back; up/down)<br>
 
2 — translation movement of a shoulder (front/back; up/down)<br>
Строка 24: Строка 23:
  
 
===Hand rotation===
 
===Hand rotation===
[[Файл:Vector_rotation.png|250px|right]]
+
[[Файл:Vector_rotation.png|400px|right]]
In order to rotate any 3D object we should rotate related vector.<br>
 
But how to rotate vector?<br>
 
This programm uses quaternions for vector rotation.
 
====Quaternions====
 
Usually quaternions are defined as a number system that extends the complex numbers to 4D space. In a simplier way we can define quaternions as 4 numbers with specific operations and properties.<br>
 
<math>Q = (w,x,y,z) = w + xi + yj + zk</math> , where i,j,k satisfies <br>
 
<math>i^2 = j^2 = k^2 = ijk = -1</math><br>
 
====Useful formulas====
 
[[Файл:Droid_confus.jpg|150px|left]]
 
We are going to use quaternion written as<br>
 
<math>Q = [w,v]</math> - where <math>w</math> - scalar and <math>v</math> - vector <br>
 
In these terms we have rotation quaternion<br>
 
<math>Q = \left[ \cos \left( \frac{\alpha}{2} \right), \sin \left( \frac{\alpha}{2} \right)v  \right]</math><br>
 
This is the quaternion that rotates round vector <math>v</math> on angle <math>\alpha</math><br>
 
<math>Q* = [w, -v]</math> - conjugated quaternion<br>
 
<math>norm(Q) = \sqrt{w^2 + x^2 + y^2 +z^2}</math> - norm of quaternion<br>
 
<math>Q^{-1} = \frac{Q*}{norm(Q)}</math> - reverse quaternion<br>
 
<math>QQ' = [ ww' - v \cdot v', v \times v' + wv' + w' v]</math> - quaternion multiplication <br>
 
====Rotate vector====
 
[[Файл:HowTo.gif|100px|right]]
 
In order to rotate the vector <math>r</math> we need to go through the following steps:<br>
 
'''1) Cast vector to quaternion''' It's easy to make quaternion of vector. Just add zero to the scalar part and your vector to the vector part of quaternion<br>
 
<math>R = [0,r]</math><br>
 
'''2) Multiply''' <br>
 
<math>R' = Q R Q^{-1}</math><br>
 
Now we have quaternion <math>R</math> rotated.<br>
 
'''3)Cast back''' After all we should cast quaternion <math>R'</math> to vector <math>r'</math>. It's as easy as first cast, just forget about scalar part. Vector part of <math>R'</math> is ours <math>r'</math> vector.<br>
 
====Rotation====
 
[[Файл:Rotation_hand.jpg|100px|right]]
 
OK! We already can rotate any vector around any on any angle (but not bigger than 180deg)! <br>
 
But it's not enough. We want to get motion and it should be smooth. So we need to go through many points between each position. There is a problem that appears if we try to rotate vector around two axis at the same time. Rotations are not additive, so we can't just rotate on a small angle each step. The solution is simple, we need to rotate vector on bigger angle on each step from the initial position.
 
 
 
==About program interface in C#==
 
Because program doesn't have help yet, I should give some information about it's interface.<br>
 
I'll tell about each tab:
 
===Graph===
 
This tab is responsible for visualization of movement. There are some keys working on this tab:<br>
 
Up/Down – rotation around horizontal axis<br>
 
Left/Right – rotation around vertical axis<br>
 
Ctrl + Up/Down/Left/Right – faster rotation<br>
 
+/- (OemPlus/OemMinus) –Zoom<br>
 
<gallery widths=550px heights=300px perrow = 1>
 
Файл:Graph_Tab_0.jpg‎
 
</gallery>
 
 
 
===Settings===
 
This one is responsible for customization of model appearance. You can change model color and opacity, quality and speed of basis rotation.
 
<gallery widths=300px heights=200px perrow = 2>
 
Файл:Settings_Tab_1.jpg‎
 
Файл:Settings_Tab_2.jpg‎
 
</gallery>
 
===3D Graphics realization===
 
Program interface is developed by using special library WPF (Windows Presentation Foundation) and Microsoft Visual Studio's built-in  XAML redactor.<br>
 
 
 
*What is WPF:<br>
 
“The Windows Presentation Foundation is Microsoft’s next generation UI framework to create applications with a rich user experience. It is part of the .NET framework 3.0 and higher.
 
WPF combines application UIs, 2D graphics, 3D graphics, documents and multimedia into one single framework. Its vector based rendering engine uses hardware acceleration of modern graphic cards. This makes the UI faster, scalable and resolution independent. etc.”<br>
 
 
 
*Viewport3D element:<br>
 
[[Файл:Scene_viewport.jpg|200px|right]]
 
Graphics contents in 3-D WPF application is encapsulated in Viewport3D element, which can be placed on two-dimensional element such as program window. Graphics system identifies Viewport3D as two-dimensional visual element such as many in WPF. Viewport3D function as preview window of  three-dimensional scene. More precisely it is projection of 3-D scene on plane (screen).<br>
 
 
 
[[Файл:Triangulation.jpg|200px|left]]
 
*Drawing 3D objects
 
Drawing of objects is done by triangulation, that means that we need to build it of triangles.
 
Notice that back side of triangles is transparent as default.
 
<br><br><br>
 
 
 
==Cross-platform version for Linux Ubuntu==
 
===Strange crazy idea===
 
[[Файл:Linux_penguin.jpg|100px|right]]
 
[[Файл:Ubuntu_logo.png|80px|right]]
 
The number of Linux OS users is increasing so I came to idea of making this program portable for this OS. But I faced an immense problem: Wine & mono doesn't support WPF graphics. That were really bad news, which meant that I wont be able to run this program on Linux. And finally after scrolling about some hundred pages I thought: "I can't port C# program with WPF to Linux, but I want it to work there, so Let's rewrite it in C++ with QT and OpenGL!" This idea is crazy enough to be good i think.
 
===First steps===
 
The first thing I should do was to find a good cross-platform IDE which I will use, because I don't like compiling project from the terminal. Finally I installed QT Creator IDE and started studying it, by the way trying to writing something that resembles program interface...
 
 
 
==Maybe this can be used==
 
This program in future can be used as a package for modelling manipulators. They are very similar to hand, so the idea is the same.<br>
 
<gallery widths=300px heights=200px perrow = 3>
 
Файл:Manipulator_1.jpg‎
 
Файл:Manipulator_2.jpg‎
 
Файл:Manipulator_3.jpg‎
 
</gallery>
 
 
 
==Last Features==
 
[[Файл:DONE.jpg|130px|right]]
 
'''ver_1.0.0.33:'''
 
*Saving Graph settings to the binary file
 
*Rotation of hand parts
 
*Using quaternions instead of rotation tensors
 
*Rotation optimization
 
 
 
==Future Features==
 
[[Файл:Coming_soon.gif|130px|right]]
 
'''Under development...'''
 
*Optimization of calculations related to rotation
 
*Switching to post-processing visualization instead of visualization and calculation at the same time
 
*Preparing the code for development of different manipulators
 
*Development of interface for user defined manipulators and movement
 
==Last, sometimes stable version==
 
[[Файл:KTULHU.png|150px|left]]
 
First run of the program may ask you to create file with default settings, just click 'OK' and it'll run<br>
 
===ver_1.0.0.33:===
 
Click "Simulate" to see the model default movement.<br>
 
[[Медиа:Hand_Model_x86.zip|Hand_Model_x86.zip]]<br>
 
[[Медиа:Hand_Model_x64.zip|Hand_Model_x64.zip]]<br>
 
 
 
==Change log==
 
'''ver_1.0.0.34:'''
 
*Quaternion optimization + bugfix
 
*Improved triangulation quality
 
*Added simple Help
 
*Fixed bug in rotation of spheres
 
'''ver_1.0.0.33:'''
 
*Saving Graph settings to the binary file
 
*Rotation of hand parts
 
*Using quaternions instead of rotation tensors
 
*Rotation optimization
 
 
 
== See also ==
 
 
 
[[Проект "Фехтование"|project "Fencing"]]<br>
 
[[ТМ|Department for Theoretical Mechanics]]
 
 
 
==Links==
 
[http://wat.gamedev.ru/articles/quaternions  LINK] - some information about quaternions (RU)<br>
 
[http://www.wpftutorial.net/IntroductionTo3D.html  LINK] - about 3D graphics in WPF (EN)<br>
 
 
 
 
 
[[Category: Студенческие проекты]]
 
Вам запрещено изменять защиту статьи. Edit Создать редактором

Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии Public Domain (см. Department of Theoretical and Applied Mechanics:Авторские права). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!

To protect the wiki against automated edit spam, we kindly ask you to solve the following CAPTCHA:

Отменить | Справка по редактированию  (в новом окне)
Источник — «http://tm.spbstu.ru/Manipulator_model»