在使用ROS中,会存在需要从本地读取坐标的情况,例如move_base的导航点坐标、PCL的点云坐标等。如何读取坐标并在程序中使用,这里简单记录:
txt中记录的数据格式对下文的处理有一定影响,假设这里读取的是二维坐标点,txt文本中每一行存放两个数值,第一个为x坐标,另外一个为y方向坐标。如果三维的话后面增加z方向坐标。中间用空格分开。
这里简单一点就设置了四个点。
C++读取txt文本其实也不算难,稍微查一下资料基本也能找到,网上的代码形形色色,能理解就行。这里就简单的写一下我个人使用的代码:
void AreaPoint::addpeak()
{
ifstream fin;
fin.open("/home/你的路径/point.txt");
string linestr;
Vec2f temp;
while (getline(fin, linestr))
{
std::stringstream ss(linestr);
ss >> temp[0];
ss >> temp[1];
areapeak.push_back(temp);
}
fin.close();
}
areapeak是全局变量定义在public中,这是一个vector< Vec2f >格式的变量,里面正好可以存储一系列的二维坐标点,如果用于别的处理这里也可以改成别的格式,例如pointcloud等。剩下的都在该函数中处理即可。
使用之前的Mark函数即可在rviz中显示从txt中加载的点构成的封闭区域
可以看出这是一个4X4的矩形,跟最开始写在txt文件中的顶点是相对应的。
关于在ROS中或者在C++中调用txt文件的情况还是挺多的,需要注意的是读取是数据的处理问题,在txt文件的读取过程中只要将对应的数据存储到对应的容器中就行,以便于我们后期处理。
这个小实验的代码在:
https://download.csdn.net/download/YiYeZhiNian/86404800?spm=1001.2014.3001.5501