Чтение внешних данных 2D лазерного сканирования в mrpt

Я пытаюсь прочитать данные лазерного сканирования, а затем использовать его для построения карты
окружающей среды.

Моя проблема в том, что я не понимаю, в каком формате должны быть предоставлены данные для объекта CObservation2DRangeScan.

Я пробовал:

X,Y,X,Y,...
Y,X,Y,X,...
X,X,Y,Y,...
Y,Y,X,X,...

Я записываю данные в файл rawlog, а затем просматриваю их в средстве просмотра rawlog.
Я использовал [1,1], и точка появляется в X = -1 и Y = 0. Это почему?

Вот данные из программы просмотра необработанных журналов

Timestamp (UTC): 2016/06/21,07:22:42.166880
(as time_t): 1466493762.16688
(as TTimestamp): 131109673621668800
Sensor label: ''

Homogeneous matrix for the sensor's 3D pose, relative to robot base:
1.00000 0.00000 0.00000 0.00000
0.00000 1.00000 0.00000 0.00000
0.00000 0.00000 1.00000 0.00000
0.00000 0.00000 0.00000 1.00000(x,y,z,yaw,pitch,roll)
(0.0000,0.0000,0.0000,0.00deg,-0.00deg,0.00deg)
Samples direction: Right->Left
Points in the scan: 2
Estimated sensor 'sigma': 0.010000
Increment in pitch during the scan: 0.000000 deg
Invalid points in the scan: 0
Sensor maximum range: 80.00 m
Sensor field-of-view ("aperture"): 360.0 deg
Raw scan values: [1.000 1.000 ]
Raw valid-scan values: [1 1 ]

Вот код, который я использую:

CSensoryFrame SF;

CActionCollection actionCol;

CPose2D actualOdometryReading(0.0f, 0.0f, DEG2RAD(.0f));

// Prepare the "options" structure:
CActionRobotMovement2D                      actMov;
CActionRobotMovement2D::TMotionModelOptions opts;

opts.modelSelection = CActionRobotMovement2D::mmThrun;
opts.thrunModel.alfa3_trans_trans = 0.10f;

// Create the probability density distribution (PDF) from a 2D odometry reading:
actMov.computeFromOdometry(actualOdometryReading, opts);

actionCol.insert(actMov);

CObservation2DRangeScanPtr myObs = CObservation2DRangeScan::Create();myObs->scan = scan; // = [1,0]
myObs->validRange = vranges; // = [1,1]
myObs->aperture = 2 * M_PI;SF.insert(myObs);

0

Решение

Я не совсем знаком с деталями классов лазерных данных MRPT, но, используя другие робототехнические системы, я могу сказать, что лазерные сканирования обычно представлены в виде набора спектр значения, а не декартовы (х, у) координаты. Действительно, ссылка Говорит, что CObservation2DRangeScan держит

Вектор значений с плавающей запятой со всеми измерениями дальности (в метрах).

И вывод вашей программы показывает:

Raw scan values: [1.000 1.000 ]

два измерения дальности на расстоянии 1 м. Поскольку ваш датчик настроен на 360-градусное поле зрения, первое измерение будет в направлении -180 ° от положения вашего датчика. Ваш датчик направлен в сторону + X, поэтому этот лазерный луч направлен «позади» робота, что дает вам координаты (-1, 0). Второй (и последний) луч измерения направлен в сторону + 180 °, давая те же координаты.

Попробуйте передать в списке 360 измерений диапазона 1 метр, и вы должны увидеть что-то, что соответствует кругу.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]