采用的是思岚的激光雷达A1,由于base的机构设计,需要对雷达进行角度裁剪。rplidar A1的扫描角度的定义如下:
参考博文:https://blog.csdn.net/lu199012/article/details/73457209
我需要的扫描范围是【0,π】,在ROS中,顺时针为负,逆时针为正,裁剪方法:在node.cpp中void publish_scan()函数中添加图中的角度比较的语句即可.
scan_msg.ranges[node_count-1-i] = read_value;
scan_msg.intensities[node_count-1-i] = (float) (nodes[i].sync_quality >> 2);
}
}
// printf("------------scan_msg.ranges.size()=%d\n",scan_msg.ranges.size());//
#if 1
for(int i = 0;i<scan_msg.ranges.size();i++)
{
//if(((scan_msg.angle_min+i*scan_msg.angle_increment) > M_PI)&&((scan_msg.angle_min+i*scan_msg.angle_increment) < M_PI*2))
if(((scan_msg.angle_min+i*scan_msg.angle_increment) > -M_PI)&&((scan_msg.angle_min+i*scan_msg.angle_increment) < 0))
scan_msg.ranges[i]=std::numeric_limits<float>::infinity();
} //add by lcw
#endif
pub->publish(scan_msg);
}
裁剪后slam建图的效果如下,在rviz会显示想要的分割平面,图1显示裁剪后只扫描180°的范围,图2显示裁剪后的建图效果。
下图是裁剪之前slam建图的效果,与上图进行对比。