麦克纳姆轮机器人运动学分析:机体坐标系与里程计坐标系变换及轮子转角计算
///'机体坐标系到里程计坐标系的变换关系可以表示为一个四维变换矩阵T,其中包括平移和旋转两个变换矩阵://n//n//nT = T_translate * T_rotate//n//n//n其中,平移变换矩阵T_translate可以表示为://n//n//nT_translate = [1 0 0 x] //n [0 1 0 y] //n [0 0 1 z] //n [0 0 0 1]//n//n//n其中,x、y、z分别为机体坐标系原点相对于里程计坐标系原点在x、y、z轴上的平移量。//n//n//n旋转变换矩阵T_rotate可以表示为绕z轴旋转θ角度的旋转矩阵://n//n//nT_rotate = [cosθ -sinθ 0 0] //n [sinθ cosθ 0 0] //n [ 0 0 1 0] //n [ 0 0 0 1]//n//n//n其中,θ为机体坐标系相对于里程计坐标系绕z轴旋转的角度。//n//n//n根据题目描述,机器人底盘先向前移动1s,即机体坐标系在里程计坐标系下的平移量为(2m/s, 0, 0)。然后以π/6 rad/s的角速度逆时针旋转2s,即机体坐标系在里程计坐标系下的旋转角度为(0, 0, π/6*2)。最后以1m/s的速度向右平移3s,即机体坐标系在里程计坐标系下的平移量为(0, -3m/s, 0)。//n//n//n根据上述变换关系,可以计算四个麦克纳姆轮的转角。假设四个麦克纳姆轮分别为A、B、C、D,其中A轮位于机体坐标系的正前方,B轮位于机体坐标系的正右方,C轮位于机体坐标系的正后方,D轮位于机体坐标系的正左方。//n//n//n由于机体坐标系的x轴指向底盘的前方,即机器人前进的方向,所以A轮的转角为机体坐标系在里程计坐标系下的x方向平移量。//n//n//n由于机体坐标系的y轴指向底盘的左侧,即机器人向左的方向,所以B轮的转角为机体坐标系在里程计坐标系下的y方向平移量。//n//n//n由于机体坐标系的x轴指向底盘的后方,即机器人后退的方向,所以C轮的转角为机体坐标系在里程计坐标系下的x方向平移量。//n//n//n由于机体坐标系的y轴指向底盘的右侧,即机器人向右的方向,所以D轮的转角为机体坐标系在里程计坐标系下的y方向平移量。//n//n//n根据上述计算,可以得到四个麦克纳姆轮的转角分别为://n//n//nA = 2m/s//nB = -3m/s//nC = -2m/s//nD = 3m/s//n//n//n以下是C语言代码实现计算过程://n//n//n#include <stdio.h>//n#include <math.h>//n//n#define PI 3.14159265358979323846//n//nint main() {//n double x_translate = 2.0; // 机体坐标系在里程计坐标系下的x方向平移量//n double y_translate = -3.0; // 机体坐标系在里程计坐标系下的y方向平移量//n double z_translate = 0.0; // 机体坐标系在里程计坐标系下的z方向平移量//n double theta_rotate = PI / 6 * 2; // 机体坐标系在里程计坐标系下的绕z轴旋转角度//n//n double A = x_translate; // A轮转角//n double B = y_translate; // B轮转角//n double C = -x_translate; // C轮转角//n double D = -y_translate; // D轮转角//n//n printf(/'A轮转角: %.2f度//n/', A);//n printf(/'B轮转角: %.2f度//n/', B);//n printf(/'C轮转角: %.2f度//n/', C);//n printf(/'D轮转角: %.2f度//n/', D);//n//n return 0;//n}//n//n///
原文地址: https://www.cveoy.top/t/topic/pwCn 著作权归作者所有。请勿转载和采集!