机械手运动仿真实验报告

机械手运动仿真实验报告

2023年6月22日发(作者:)

精品文档

机械手运动仿真实验报告

一、 机械手结构组成(简图)

① 为机械手底座 ②为机械臂1

③为机械臂2 ④为机械臂3

a、b、c为转动副,机械臂实现3自由度运动

二、 机械手运动学方程推导

绘图框及转动副夹角:

绘图框大小为400X400

转动副a:anglea

转动副b:angleb

转动副c:anglec

机械手运动范围:

机械臂1长度50,机械臂2长度100,机械臂3长度50。三个关节可实现360度旋转。故机械臂运动范围为以半径为200的圆内。

机械手底座:

X:(150,200)

Y:(250,200)

机械臂1:

1欢迎下载 精品文档

X1:(200,200)

Y1:((200+ 50 * cos(anglea*3.1415926/180)), (200-50 * sin(anglea*3.1415926/180)))

机械臂2:

X2:((200+ 50 * cos(anglea*3.1415926/180)), (200-50* sin(anglea*3.1415926/180)))

Y2:((200 + 50 * cos(anglea*3.1415926/180)+100 * cos(angleb*3.1415926/180)), (200

- 50 * sin

(anglea*3.1415926/180)-100* sin(angleb*3.1415926/180)))

机械臂3:

X3:((200 + 50 * cos(anglea*3.1415926/180)+100 * cos(angleb*3.1415926/180)), (200

- 50 * sin

(angLea*3.1415926/180)-100* sin(angleb*3.1415926/180)))

Y3:( (200 + 50 * cos(anglea*3.1415926/180)+100 * cos(angleb*3.1415926/180)+50 *

cos(anglec

*3.1415926/180)), (200 - 50 * sin(anglea*3.1415926/180)-100*

sin(angleb*3.1415926/180)-50

* sin(anglec*3.1415926/180)))

三、 机械手运动仿真程序编写(关键函数代码)

pWnd->Invalidate();

pWnd->UpdateWindow() ;

pDC->Rectangle(0,0,400,400);

DrawRobotBase();

DrawRobotMemberBar1(m_fanglea);

DrawRobotMemberBar2(m_fanglea, m_fangleb);

DrawRobotMemberBar3(m_fanglea, m_fangleb, m_fanglec);

//绘制底座及其颜色代码

void CDrawRobotDlg::DrawRobotBase()

{

CPen SuiyiPen;

Pen(PS_SOLID,Wide,RGB(hong, lv, lan));

CPen *oldPen;

oldPen = pDC->SelectObject(&SuiyiPen);

pDC->MoveTo(150,200);

pDC->LineTo(250,200);

pDC->SelectObject(oldPen);

DeleteObject(SuiyiPen) ;

}

//绘制杆1

2欢迎下载 精品文档

void CDrawRobotDlg::DrawRobotMemberBar1(float anglea)

{

pDC->MoveTo(200,200);

pDC->LineTo(int(200+ 50 * cos(anglea*3.1415926/180)),int(200-50 * sin

(anglea*3.1415926/180)));

}

//绘制杆2

void CDrawRobotDlg::DrawRobotMemberBar2(float anglea,float angleb)

{

pDC->MoveTo(int(200+ 50 * cos(anglea*3.1415926/180)),int(200-50* sin

(anglea*3.1415926/180)));

pDC->LineTo(int(200 + 50 * cos(anglea*3.1415926/180)+100 *

cos(angleb

*3.1415926/180)),int(200 - 50 * sin(anglea*3.1415926/180)-100*

sin(angleb

*3.1415926/180)));

}

//绘制杆3

void CDrawRobotDlg::DrawRobotMemberBar3(float anglea, float angleb,

float anglec)

{

pDC->MoveTo(int(200 + 50 * cos(anglea*3.1415926/180)+100 *

cos(angleb

*3.1415926/180)),int(200 - 50 * sin(anglea*3.1415926/180)-100*

sin(angleb

*3.1415926/180)));

pDC->LineTo(int(200 + 50 * cos(anglea*3.1415926/180)+100 *

cos(angleb

*3.1415926/180)+50 * cos(anglec*3.1415926/180)),int(200 - 50 *

sin(anglea

*3.1415926/180)-100* sin(angleb*3.1415926/180)-50*

sin(anglec*3.1415926

/180)));

}

//转动副a加减角度按钮代码

void CDrawRobotDlg:: OnButton 1()

{

m_fanglea = m_fanglea + 1 ;

UpdateData(FALSE);

3欢迎下载 精品文档

Invalidate(FALSE) ;

}

void CDrawRobotDlg::OnButton2()

{

m_fanglea = m_fanglea - 1 ;

UpdateData(FALSE);

Invalidate(FALSE) ;

}

//转动副b加减角度按钮代码

void CDrawRobotDlg::OnButton3()

{

m_fangleb = m_fangleb + 1 ;

UpdateData(FALSE);

Invalidate(FALSE) ;

}

void CDrawRobotDlg::OnButton4()

{

m_fangleb = m_fangleb - 1 ;

UpdateData(FALSE);

Invalidate(FALSE) ;

}

//转动副c加减角度按钮代码

void CDrawRobotDlg::OnButton5()

{

m_fanglec = m_fanglec + 1 ;

UpdateData(FALSE);

Invalidate(FALSE) ;

}

void CDrawRobotDlg::OnButton6()

{

m_fanglec = m_fanglec - 1 ;

UpdateData(FALSE);

Invalidate(FALSE) ;

}

//机械臂1启动按钮代码

void CDrawRobotDlg::OnButton7()

{

AfxBeginThread(MoveThreada, this) ;

4欢迎下载。

精品文档

}

//机械臂2启动按钮代码

void CDrawRobotDlg::OnButton8()

{

AfxBeginThread(MoveThreadb, this) ;

}

//机械臂3启动按钮代码

void CDrawRobotDlg::OnButton9()

{

AfxBeginThread(MoveThreadc, this) ;

}

//机械臂1旋转代码

UINT CDrawRobotDlg::MoveThreada(void *parama)

{

CDrawRobotDlg *pDlga = (CDrawRobotDlg*)parama ;

while(1)

{

pDlga->m_fanglea = pDlga->m_fanglea + 1 ;

pDlga->Invalidate(FALSE) ;

Sleep(100) ;

}

return 0 ;

}

//机械臂2旋转代码

UINT CDrawRobotDlg::MoveThreadb(void *paramb)

{

CDrawRobotDlg *pDlgb = (CDrawRobotDlg*)paramb ;

while(1)

{

pDlgb->m_fangleb = pDlgb->m_fangleb + 1 ;

pDlgb->Invalidate(FALSE) ;

Sleep(100) ;

}

return 0 ;

}

//机械臂3旋转代码

UINT CDrawRobotDlg::MoveThreadc(void *paramc)

{

CDrawRobotDlg *pDlgc = (CDrawRobotDlg*)paramc ;

5欢迎下载 精品文档

while(1)

{

pDlgc->m_fanglec = pDlgc->m_fanglec + 1 ;

pDlgc->Invalidate(FALSE) ;

Sleep(100) ;

}

return 0 ;

}

//更新按钮代码

void CDrawRobotDlg::OnButtonRefresh0()

{

UpdateData(TRUE);

Invalidate(FALSE) ;

}

四、 软件界面截图与说明

界面左边为演示界面,右边为数据输入界面及运行按钮。

绿色框:三自由度机械手运动仿真演示界面

红色框:机械臂定位输入框及启动按钮

黄色框:底座颜色及粗细输入框

蓝色框:系统刷新及关闭按钮

6欢迎下载 精品文档

五、 感悟

通过本次实验,我学会了在运动学方程分析的基础之上,采用VC6.0编写多自由度机械手运动仿真程序,通过机械手有关的结构尺寸进行参数化,建立机械手运动学方程,确定机械手运动范围。

在编写运动仿真程序代码的过程中,不仅温习自己的所学知识,还培养了自己严谨的态度,极大的启发了设计创新思维,调动学习积极性。同时也让我看到了自己的不足之处,以后还需要更勤奋的学习,注重实际的运用。

7欢迎下载 精品文档

欢迎您的下载,

资料仅供参考!

致力为企业和个人提供合同协议,策划案计划书,学习资料等等

打造全网一站式需求

8欢迎下载。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1687430224a9423.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信