第二次作业
2015-12-13 22:29
225 查看
#include <iostream> #include <math.h> #define PI 3.1415926 using namespace std; class Point { private: Vector2d pos; public: Point(); Point(Vector2d v); Vector2d getPoint(); void setPoint(Vector2d v); }; class Frame{ private: Point origin; double degree; public: Frame(){} Frame(Point orig,double deg){ origin=orig; degree=deg; } Point getPoint(){ return origin; } double getDegree(){ return degree; } }; class Joint{ private: double deg1; double deg2; public: Joint(){} Joint(int a,int b){ deg1=a; deg2=b; } void setDeg1(double rad){ deg1=rad*180/PI; } void setDeg2(double rad){ deg2=rad*180/PI; } double getDeg1(){ return deg1; } double getDeg2(){ return deg2; } }; class Solver{ private: Joint joint; Frame frame; public: Point move(Point p1,Point p2){ double tempx=p1.getX()+p2.getX(); double tempy=p1.getY()+p2.getY(); Point point(tempx,tempy); return point; } Point rotate(Point p,double deg){ double tempx; double tempy; tempx=p.getX()*cos(PI*deg/180)-p.getY()*sin(PI*deg/180); tempy=p.getX()*sin(PI*deg/180)+p.getY()*cos(PI*deg/180); Point point(tempx,tempy); return point; } Point FrameStandardize(Frame fr,Point po){ Point point1=rotate(po,fr.getDegree()); Point point2=move(point1,fr.getPoint()); return point1; } FrameToJoint(Point po,double arm1,double arm2){ double len= sqrt(po.getX()*po.getX()+po.getY()*po.getY()); if(len>=(arm1+arm2)||len<=abs(arm1-arm2)){ cout<<"坐标超范围,机器人无法达到"<<endl; }else{ double rad1=acos((arm1*arm1+len*len-arm2*arm2)/(2*arm1*len)); double rad2=acos((arm1*arm1+arm2*arm2-len*len)/(2*arm1*arm2)); double rad11=atan(po.getY()/po.getX()); double rad22=PI; joint.setDeg1(rad1+rad11); joint.setDeg2(rad2+rad22); cout<<"关节1应转动角度为:"<<joint.getDeg1()<<" 关节2应转动角度为:"<<joint.getDeg2()<<endl; } } FrameReturn(Frame fr){ } JointToFrame(Point po){ } }; class Robot{ private: double arm1; double arm2; double arm1Range; double arm2Range; public: Robot(){} Robot(double a,double b){ arm1=a; arm2=b; } void PTPmove(Frame fr,Point po){ Solver solver; Point point; point=solver.FrameStandardize(fr,po); solver.FrameToJoint(point,arm1,arm2); } }; int main(){ Robot myRobot(4,3); Point origin(0,0); Point origin1(2,3); Point origin2(6,1); Point origin3(5,9); Point point1(-5,1); Point point2(-3,-1); Point point3(4,2); Point point4(3,7); Frame WF(origin,0); Frame TF1(origin1,30); Frame TF2(origin2,60); Frame TF3(origin3,90); myRobot.PTPmove(WF,point1); myRobot.PTPmove(TF1,point2); myRobot.PTPmove(TF2,point3); myRobot.PTPmove(TF3,point4); return 0; }
应用到的类:
Point类用来存储坐标系原点、运动目标点
JointFrame关节坐标系。
Frame世界坐标系和任务坐标系
Solver完成对任务坐标系到关节坐标系的转换
robot机器人类中定义每个机械臂的长度,每个关节的转动角度范围和零点
感觉程序还有好多地方不太对,还需要再思考
相关文章推荐
- Kafka学习之一深度解析
- 【项目管理与构建】Nexus的详细介绍以及安装(四)
- ip首部校验和计算
- 最长有序子序列
- ZOJ 2201 2186 2176
- 用代码如何知道当前正在使用的哪个数据库?
- AngularJS 数组
- 使用CXF开发简单的Web Service-HelloWorld(二)
- Android Circular Progress Button
- WPF应用
- Oracle 数据库 数据文件 表 表空间 用户的关系
- 第三个Sprint冲刺第九天
- 手机小闹钟需求分析
- Web Service简介(一)
- golang中时间包time函数和demo
- APUE fig 1.10示例代码的完善--对提示符及输入回车的优化
- 深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例
- 在微软学到的几个小技能--孙鹏(MIUI初创工程师)
- android studio快捷键大全
- 信息安全系统设计基础第十四周学习总结