源程序是
/*********************产生观测模型****************************/
void ProRobotics::GenObservations(float sd)
{//Generate observations.假设传感器能观察到机器人周围sd米内的所有特征
Point2f delta; //保存机器人位姿和landmarks的位置差值
float dst;
float theta; //保存特征角,w.r.t robot frame
observations.clear();
for(int i = 0; i < landmarks.size(); i++)
{
delta = landmarks.at(i) - Point2f(realPathpoints.back().x,realPathpoints.back().y);
dst = norm(delta);
if(dst < sd)
{
theta = atan2(delta.y,delta.y) - realPathpoints.back().z;
dst += GenGaussianValue(sigma_r*sigma_r);
theta+= GenGaussianValue(sigma_phi*sigma_phi);
AngleWrap(theta);
observations.push_back(Point3f(dst,theta,i));
}
}
}
编译时提示 for(int i = 0; i < landmarks.size(); i++)警告:/home/congleetea/导航/ProRobotics/prorobotics.cpp:303: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]。这个警告目的是防止一个负的符号型的数据转化为无符号型时,会产生一个不是我们想要的很大的数据,并且,大家都知道signed 和unsigned数据的范围也不同。
这里 for(int i = 0; i < landmarks.size(); i++)中,i是signed integer,landmarks.size()是unsigned。所以提示了comparison between signed and unsigned integer。解决的办法是:
1)将这一句改为 for(vector<Point2f>::size_type i = 0; i < landmarks.size(); i++)这种方法更精确,Point2f是landmarks的数据类型。
size_type是由string类类型和vector类类型定义的类型,用以保存任意string对象或vector对象的长度,标准库类型将size_type定义为unsigned类型。
2)将这一句改为 for(std::size_t i = 0; i < landmarks.size(); i++).
size_t 类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版。它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。在用下标访问元素时,vector使用vector::size_type作为下标类型,而数组下标的正确类型则是size_t。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)