一、问题背景
三舵轮AGV旋转后起步瞬间加速到(1m/s)车头摆动过大,容易报机器人脱线;
突然加速是不正常因素导致的,这样容易导致撞车
二、以下是寻找问题思路
2.1通过日志形式获取实时的动态数据,绘制成excel表格,最后以折线图的形式呈现出来,直观方便。
补充:打印日志格式
整数形式:id,%d,
小数形式:%.4f,
保留一位小数:theta,%0.1f,
Log_Info("auto,run_arrived1,id,%d,%.4f,%.4f,%.4f",vehicle_forward_ctrl.current_id,vehicle_forward_ctrl.pos_x,vehicle_forward_ctrl.pos_y,vehicle_forward_ctrl.pos_theta);
InPlaceFlag = 1;//抵达目标点
2.2突然加速,获取行走时刻数据
轨迹跟踪
查看程序和结合数据得到突变量
锁定是目标X变化导致的
2.3目标X是由这车体坐标系转换更改的
RobotPos PosGlobalToRobot(RobotPos _current_pos, const RobotPos _target_pos, uint8_t run_mode)
_global_ex = _target_pos.x - _current_pos.x;
_global_ey = _target_pos.y - _current_pos.y;
//90-0-1
//90-1-0
_result.x = _global_ex * cosf(_current_pos.theta) + _global_ey * sinf(_current_pos.theta);
_result.y =-_global_ex * sinf(_current_pos.theta) + _global_ey * cosf(_current_pos.theta);
//***监控坐标转化数据****//
if(++print_cnt_test1 > 100)
{
print_cnt_test1=0;
Log_Info("PosGlobalToRobot,res.x,%.4f,res.y,%.4f,res.theta,%.4fglobal_ex,%.4f,global_ey,%.4f,target.x%.4f,target.y,%.4f,current.x,%.4f,current.y,%.4f",
_result.x,
_result.y,
_result.theta,
_global_ex,
_global_ey,
_target_pos.x,
_target_pos.y,
_current_pos.x,
_current_pos.y
);
}
//*******************//
return _result;
由以上代码块可以看出入口参数是SLAM实时获取的X,Y,theta;结果参数获取目标参数,现在计算后的目标参数有问题;
通过打日志分析得出,target_y数值有问题,
结合小车行驶轨迹,路线
数据表显示位置变化
分析到这锁定坐标突然变化导致的
三、由坐标突变怀疑是否是调度下发的路线坐标出现问题,具体抓出调度路径信息
3.1打印出处->更新调度下发的行走命令->关键字sch,road,index搜索获取
关键字:sch,cmd,type
3.2继续追查日志发现在一个周期内,起始坐标位置变了
矛盾处地方
3.3最后分析得出一个周期内插补的坐标被改掉了
得出vehicle_forward_ctrl.pos_y哪个地方改这个变量,
得出是这里改变的,暂时屏蔽,至此问题找到出处