实时控制软件设计 第二次作业 myRobot
#include<iostream>
#include <Eigen/Dense>
#include <math.h>
#include <vector>
using namespace std;
using namespace Eigen;
using Eigen::MatrixXd;
const double Dk=3.1415926/; //定义Frame(二维笛卡尔坐标系)类
class Frame{
private:
double Ox;
double Oy;//Frame对象在WF(世界坐标系)下的原点坐标
double Angle;//方位角(弧度制)
public:
Frame();
Frame(double ox,double oy,double an);
MatrixXd CalPose();//获得齐次位姿矩阵
};
Frame::Frame() {
Ox=;Oy=;Angle=;
}
Frame::Frame(double ox,double oy,double an){
Ox=ox;Oy=oy;Angle=an*Dk;//输入为角度制
}
MatrixXd Frame::CalPose(){
MatrixXd Pose(,);
Pose(,)=cos(Angle);Pose(,)=-sin(Angle);Pose(,)=Ox;
Pose(,)=sin(Angle);Pose(,)=cos(Angle);Pose(,)=Oy;
Pose(,)=;Pose(,)=;Pose(,)=;
return Pose;
}//由原点和方位角计算位姿矩阵
//Frame定义结束 //定义Solver(运动学求解器)类
class Solver{
private:
vector<Frame> frameVec;
public:
MatrixXd CalTheta(double l1,double l2,Frame frame,double px,double py);//运动学反解
void addFrame(Frame frame);//添加任务框
void deleteFrame(); //移除任务框
};
MatrixXd Solver::CalTheta(double l1,double l2,Frame frame,double px,double py) {
MatrixXd P_task(,),P_world(,),T(,);
P_task(,)=px;P_task(,)=py;P_task(,)=;
P_world=frame.CalPose()*P_task;
T(,)=acos((px*px+py*py-l1*l1-l2*l2)//l1/l2);//取0°到180°
double beta=atan2(py,px);
double lp=sqrt(px*px+py*py);//端点模值
double fea=acos((lp*lp+l1*l1-l2*l2)//l1/lp);
T(,)=beta-fea;
return T;
}
void Solver::addFrame(Frame frame) {
frameVec.push_back(frame);
}
void Solver::deleteFrame() {
frameVec.pop_back();
}
//Solver类定义结束 //定义Robot类
class Robot{
public:
double L1;
double L2;//臂长
double theta1;
double theta2;//SCARA关节变量 (弧度角) Robot();
Robot(double l1,double l2,double t1,double t2);
Vector2d getTerminal();//手臂末端的世界坐标(笛卡尔坐标) ,正运动学计算
void ShowState();//状态显示
void PTPmove(Frame frame,double px,double py);//点到点运动 };
Robot::Robot() {
L1=;L2=;theta1=;theta2=;
};
Robot::Robot(double l1,double l2,double t1,double t2){
L1=l1;L2=l2;theta1=t1*Dk;theta2=t2*Dk;//输入为角度制角
}
Vector2d Robot::getTerminal() {
double Tx,Ty;
Tx=L1*cos(theta1)+L2*cos(theta1+theta2);
Ty=L1*sin(theta1)+L2*sin(theta1+theta2);
Vector2d T(Tx,Ty);
return T;
}
void Robot::ShowState(){
cout<<"theta1="<<theta1/Dk<<endl<<"theta2="<<theta2/Dk<<endl;
}
void Robot::PTPmove(Frame frame,double px,double py){
Solver solver;
MatrixXd T(,);
T=solver. CalTheta(L1,L2,frame,px,py);
theta1=T(,);theta2=T(,);
}
//Robot定义结束 int main(){
Robot myRobot(,,,);//构造Robot对象
Frame TF1(,,),TF2(-,,),TF3(0.5,1.5,);//定义任务坐标系
myRobot.ShowState();
myRobot.PTPmove(TF1,,);
myRobot.ShowState();
myRobot.PTPmove(TF2,,);
myRobot.ShowState();
return ;
}
实时控制软件设计 第二次作业 myRobot的更多相关文章
- 实时控制软件设计第一周作业-汽车ABS软件系统案例分析
汽车ABS软件系统案例分析 ABS 通过控制作用于车轮制动分泵上的制动管路压力,使汽车在紧急刹车时车轮不会抱死,这样就能使汽车在紧急制动时仍能保持较好的方向稳定性. ABS系统一般是在普通制动系统基础 ...
- 《实时控制软件设计》之Github提交作业步骤
在掌握GIT/GITHUB基本操作后,接下来把第一次的编程作业提交到 https://github.com/RTCSD15/HOMEWORK1 ,把第二次的编程作业提交到https://github. ...
- 实时控制软件设计作业_01——汽车ABS系统分析
制动防抱死系统(antilock brake system)简称ABS.作用就是在汽车制动时,自动控制制动器制动力的大小,使车轮不被抱死,处于边滚边滑(滑移率在20%左右)的状态,以保证车轮与地面的附 ...
- 《实时控制软件设计》第一周作业 欧梓峰 U201317662 (更新)
CNC 插补计算程序分析 前言:插补(Interpolation),即机床数控系统依照一定方法确定刀具运动轨迹的过程.一般是已知起点坐标.终点坐标和轨迹,由数控插补计算程序实时的算出各个中间的坐标来拟 ...
- 实时控制软件设计 第一次作业 Draw
#include <iostream> #include <cstring> #include <math.h> #include <Eigen/Dense& ...
- 《实时控制软件设计》之Automation Studio开发环境
Automation Studio是贝加莱公司的控制软件开发平台,软件可运行在贝加莱的基于PC的控制器上,基于Automation Studio我们可构建一个完整的控制软件构建.测试和仿真运行平台.本 ...
- 《实时控制软件设计》Git 基本操作练习
根据老师提供的教程 对 数据库创建.提交文件.创建分支.删除分支.合并分支.冲突处理等操作进行了练习 得到log文件如下: yanbin-guo@yanbinguo MINGW64 /Git (mas ...
- OO--第三单元规格化设计 博客作业
OO--第三单元规格化设计 博客作业 前言 第三单元,我们以JML为基础,先后完成了 PathContainer -> Graph -> RailwaySystem 这是一个递进的过程,代 ...
- 2017-2018-1 20179205《Linux内核原理与设计》第二周作业
<Linux内核原理与分析>第二周作业 本周视频学习情况: 通过孟老师的视频教程,大致对风诺依曼体系结构有了一个初步的认识,视频从硬件角度和程序员角度对CPU和Main Memory(内存 ...
随机推荐
- wmic 命令的一个汇总,功能很强大
获得系统版本信息wmic datafile where Name='c:\\windows\\explorer.exe' get Manufacturer,Version,Filename 获得系统进 ...
- C#webform LinQ
LinQ的高级查询: 模糊查 con.Car.Where(r=>r.Name.Contains(cname)).ToList(); 以..开头 con.car.Where(r => r.n ...
- CoreOS Linux引入了Kubernetes kubelet
CoreOS Linux引入了Kubernetes kubelet 作者:Kelsey Hightower 2015年8月14日 这周我们在 CoreOS Linux 的 alpha 开发版集成了 k ...
- C#关于winforms窗体大小、边框、移动、动画等属性
1.窗体的边框设置为无: 2.把窗体高度调整为25,发现跑的时候总在40左右,这时需要改改属性, 把MinimumSize(0, 0)改成不为0的,最好改成和自己想要一样的大小, 最大高宽也应该这么调 ...
- 编译OpenJDK的笔记
1. ERROR: You seem to not have installed ALSA 0.9.1 or higher. 不需要从ALSA官网下载alsa-dev和alsa-drive, ubu ...
- Java设计模式 工厂模式概念解析
定义:工厂模式专门负责将大量有共同接口的类实例化.工厂模式可以动态决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类. 三种形态: 简单工厂模式:又称静态工厂方法 工厂方法模式:又称多态性工厂模 ...
- PHP注册审核做法
1.注册页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- ReportingService报表入门
今天我们来学习一下ReportingService报表的制作. ReportingService是微软提供的一个制作报表的工具,它集成在Microsoft Visual Studio中. 启动Visu ...
- ZTE and TP-Link RomPager - DoS Exploit
#!/usr/bin/env python # -*- coding: utf-8 -*- # Exploit Title: ZTE and TP-Link RomPager DoS Exploit ...
- win8.1安装Matlab7.0的兼容问题
Matlab7.0安装完成后打开就立即关闭,此时右键点击MATLAB7.0快捷方式-"用图形处理器运行"-"更改默认图形处理器",将"集成图形&qu ...