我有一个特定的运动学作为一个更复杂的机器的一部分,需要计算一些非常困难(更不可能)的物理参数,用我可以使用的仪器以适当的精度进行测量
[运动学]
首先看它是一个简单1
的自由度臂(黑色),它可以围绕x
轴旋转.它有一个重量,迫使它一直向上,直到它达到机械终点(角度a0
)或一些半径的管(蓝色)r0
.手臂旋转中心位于y0
.管可以移动到任何y(t)
高度.
[用法]
这用于测量管的半径以进行进一步处理.可以计算半径(通过基本测角仪),这导致图像底部的方程.常数a0,y0,z0
非常难以测量(它在复杂的机械内部),因此距离的测量精度是最小值0.1 mm
和角度0.1 deg
,甚至是有问题的.
[校准]
所以我决定尝试从机器本身完成的一组测量中计算这些参数(自动校准).所以我有已知半径的校准管r0
.所有绿色参数都可以作为常量处理.现在我沿着y
轴定位管子以尽可能多地覆盖手臂的角度.遗憾的是,该范围仅为20 degrees
(对于当前的机器设置)记住测量a(t)
的预设y(t)
...作为n
点数据集.这给了我n
超越方程组.从此我尝试/猜测a0,y0,z0
记住最佳解决方案的"所有"可能性(最接近r0
)
[近似a0,y0,z0]
近似是基于这类矿井:
//---------------------------------------------------------------------------
class approx
{
public:
double a,aa,a0,a1,da,*e,e0;
int i,n;
bool done,stop;
approx() { a=0.0; aa=0.0; a0=0.0; a1=1.0; da=0.1; e=NULL; e0=NULL; i=0; n=5; done=true; }
approx(approx& a) { *this=a; …
Run Code Online (Sandbox Code Playgroud)