在Mark点基础上获取其余点位的原理及公式(PCB点位映射)
我们实现两点定位法,利用标定针提前运动到PCB所有孔位位置点,得到所有点位的位置关系,然后建立PCB点位关系同机器人基坐标系的转换关系,获取工件中其他定位目标的位置。
以下是坐标转换原理
// 坐标转换.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <Eigen/Dense>
#include <Eigen/Core>
#include <iostream>
#include <math.h>
using namespace std;
using namespace Eigen;
double PcbMarkPoint(double Pcb_p1[2], double Pcb_p2[2], double Pcb_p3[2], double Pcb_p4[2], double Pcb_p5[2], double Pcb_p6[2]);
double BasePointTrans(double Base_P1[2], double Base_P2[2]);
int main()
{
//double Pcb_Point1[2] = {49.9 ,37.6 };//点1原始坐标
//double Pcb_Point2[2] = {108.32 ,72.2 };//点2原始坐标
//double Pcb_Point3[2] = { 108.32,37.6 };//点3原始坐标 (12.4,-8.3)
//double Pcb_Point4[2] = { 49.9,72.2 };//点4原始坐标
//double Pcb_Point5[2] = { 108.32,37.6 };//点5原始坐标(8.9,-1.1)
//double Pcb_Point6[2] = { 49.9,72.2 };//点6原始坐标
//double Base_Pcb_Point1[2] = {165.49,80.49 };
//double Base_Pcb_Point2[2] = { 190.81,143.47 };
//螺丝机测试数据
double Pcb_Point1[2] = {446.712 ,89.961 };//点1原始坐标
double Pcb_Point2[2] = {370.682 ,353.767};//点2原始坐标
double Pcb_Point3[2] = {492.400,130.915};//点3原始坐标 (12.4,-8.3)
double Pcb_Point4[2] = { 537.454,171.607 };//点4原始坐标
double Pcb_Point5[2] = { 492.400,130.915 };//点5原始坐标(8.9,-1.1)
double Pcb_Point6[2] = { 537.454,171.607 };//点6原始坐标
double Base_Pcb_Point1[2] = { 446.712 ,89.961 };
double Base_Pcb_Point2[2] = { 370.682 ,353.767 };
PcbMarkPoint(Pcb_Point1, Pcb_Point2, Pcb_Point3, Pcb_Point4, Pcb_Point5, Pcb_Point6);
BasePointTrans(Base_Pcb_Point1, Base_Pcb_Point2);
}
//基准点1转换后的向量
Matrix<double, 4, 1>XR1_1;
//基准点2转换后的向量
Matrix<double, 4, 1>XR2_1;
//点3转换后的向量
Matrix<double, 4, 1>XR3_1;
//点4转换后的向量
Matrix<double, 4, 1>XR4_1;
//点5转换后的向量
Matrix<double, 4, 1>XR5_1;
//点6转换后的向量
Matrix<double, 4, 1>XR6_1;
double PcbMarkPoint(double Pcb_p1[2], double Pcb_p2[2], double Pcb_p3[2], double Pcb_p4[2], double Pcb_p5[2], double Pcb_p6[2])
{
double p1_X = Pcb_p1[0];// 基准点1的横坐标
double p1_Y = Pcb_p1[1];//基准点1的纵坐标
double p2_X = Pcb_p2[0];//基准点2的横坐标
double p2_Y = Pcb_p2[1];//基准点2的纵坐标