關于二輪差速小車輪速計算和里程計計算
里程計是衡量我們從初始位姿到終點位姿的一個標準,通俗的說,我們要實現機器人的定位與導航,就需要知道機器人行進了多少距離,是往哪個方向行進的 里程計的計算是指以機器人上電時刻為世界坐標系的起點(機器人的航向角是世界坐標系X正方向)開始累積計算任意時刻機器人在世界坐標系下的位姿。通常計算里程計方法是速度積分推算:通過左右電機的編碼器測得機器人的左右輪的速度VL和VR,在一個短的時刻△t內,認為機器人是勻速運動,并且根據上一時刻機器人的航向角計算得出機器人在該時刻內世界坐標系上X和Y軸的增量,然后將增量進行累加處理,關于航向角θ采用的IMU的yaw值。然后根據以上描述即可得到機器人的里程計。
二輪差速是最簡單的一種底盤構型實現方式。
1 逆解
通過設定的v和角度,計算向左右輪發的速度
ROBOT_RADIUS指的是機器人半徑,也就是機器人兩輪間距的一半
// 計算左右輪期望速度 if(RobotV == 0) { leftdata.d = -YawRate * ROBOT_RADIUS; rightdata.d = YawRate * ROBOT_RADIUS; } else if(YawRate == 0) { leftdata.d = RobotV; rightdata.d = RobotV; } else { leftdata.d = YawRate * (r - ROBOT_RADIUS); rightdata.d = YawRate * (r + ROBOT_RADIUS); } `
2 里程計正解
根據左右輪速和角度來計算里程計
//===========================速度計算和Angle獲取 // x方向速度,以及角速度 vx = (rightVelNow.d + leftVelNow.d) / 2.0 / 1000.0; //m/s vth = (rightVelNow.d - leftVelNow.d) / ROBOT_LENGTH ; //rad/s th = angleNow.d*0.01745;//實時角度信息(rad) double dt = (curr_time - last_time_).toSec(); //間隔時間 double delta_x = (vx_ * cos(th_)) * dt; //th_弧度 double delta_y = (vx_ * sin(th_)) * dt; double delta_th = vth_ * dt;` //打印時間間隔調試信息,不用的時候可以關閉 //ROS_INFO("dt:%f\n",dt); //s //里程計累加 x_ += delta_x; y_ += delta_y; //實時角度信息,如果這里不使用IMU,也可以通過這種方式計算得出 th_ += delta_th; //里程計解算積分后角度`
機器人
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。