void SimMcl::initPaintElements()
{
+ struct mcl_robot_pos estimated = { 1.0, 1.0, 0};
mclPainter = new MclPainter(mcl, &displayCount);
+ mclPainter->estimated = estimated;
mclPainter->setSize(610, 425);
mclPainterInitialized = true;
widgetInitialized = false;
estimatedAnglesWidget->animate();
/* update estimated position fields */
- struct mcl_laser_state *estimated = (struct mcl_laser_state*)mcl->estimated;
+ struct mcl_robot_pos estimated = *(struct mcl_robot_pos *)(mcl->estimated);
+ mclPainter->estimated = estimated;
- estPosX->setText(QString("%1").arg(estimated->x, 0, 'f', 3));
- estPosY->setText(QString("%1").arg(estimated->y, 0, 'f', 3));
+ estPosX->setText(QString("%1").arg(estimated.x, 0, 'f', 3));
+ estPosY->setText(QString("%1").arg(estimated.y, 0, 'f', 3));
estPosPhi->setText(QString("%1 (%2 rad)")
- .arg(RAD2DEG(estimated->angle), 0, 'f', 0)
- .arg(estimated->angle, 0, 'f', 2));
+ .arg(RAD2DEG(estimated.angle), 0, 'f', 0)
+ .arg(estimated.angle, 0, 'f', 2));
}
void SimMcl::mclCountChanged(QString text)
struct mcl_robot_odo odo = {deltaU, 0, deltAlfa};
- if (fabs(deltaU) > 0 || fabs(deltAlfa) > 0) {
- QString dbg = QString("du=%1 dphi=%3 ")
- .arg(deltaU, 0, 'f', 3)
- .arg(deltAlfa, 0, 'f', 2);
- WDBG(dbg);
-
- mcl->predict(mcl, &odo);
- }
+ mcl->predict(mcl, &odo);
+// if (fabs(deltaU) > 0 || fabs(deltAlfa) > 0) {
+// QString dbg = QString("du=%1 dphi=%3 ")
+// .arg(deltaU, 0, 'f', 3)
+// .arg(deltAlfa, 0, 'f', 2);
+// WDBG(dbg);
+//
+// }
}
/**********************************************************************
/* MCL laser */
mcl_laser.width = PLAYGROUND_WIDTH_M;
mcl_laser.height = PLAYGROUND_HEIGHT_M;
- mcl_laser.pred_dnoise = 0.003;
- mcl_laser.pred_anoise = 0.03;
- mcl_laser.aeval_sigma = 0.90;
+ mcl_laser.pred_dnoise = 0.03;
+ mcl_laser.pred_anoise = DEG2RAD(5);
+ mcl_laser.aeval_sigma = DEG2RAD(10);
if (mclRedBeaconsRadioButton->isChecked()) {
mcl_laser.beacon_color = BEACON_RED;
void SimMcl::moveParts(double dx, double dy, double dangle)
{
-// int i=0;
-// mcl_thetas theta;
-//
-// mcl.cycle++;
-// /*WDBG(QString("mcl cycle = %1").arg(mcl.cycle));*/
-//
-// /* FIXME */
-// /* normally, the [x,y,angle] are values measured by sensors. In this
-// * example, the values are quantified as the movement without noises*/
-// for (i=0; i<5; i++) {
-// measPos.x += dx;
-// measPos.y += dy;
-// measPos.angle += dangle;
-//
-// measuredPosition[0] = measPos.x;
-// measuredPosition[1] = measPos.y;
-// measuredPosition[2] = measPos.angle;
-//
-// mcl_pos2ang(&measPos, theta, mcl.beacon_cnt, mcl.beacon_color);
-// measuredAngles.count = mcl.beacon_cnt;
-// for (int i=0; i<mcl.beacon_cnt; i++)
-// measuredAngles.val[i] = theta[i];
-// QString dbg = QString("(test) gen. meas.: x=%1 y=%2 head=%3 ")
-// .arg(measPos.x, 0, 'f', 3)
-// .arg(measPos.y, 0, 'f', 3)
-// .arg(RAD2DEG(measPos.angle), 0, 'f', 2);
-//
-// dbg.append(QString(" ["));
-// for (int i=0; i<mcl.beacon_cnt-1; i++)
-// dbg.append(QString("%1 ")
-// .arg(RAD2DEG(theta[i]), 0, 'f', 2));
-// dbg.append(QString("%1")
-// .arg(RAD2DEG(theta[mcl.beacon_cnt-1]), 0, 'f', 2));
-// dbg.append(QString("]"));
-//
-// WDBG(dbg);
-// countMeasuredAnglesFrequency();
-// measuredAnglesWidget->animate();
-//
-// /* MCL */
-// mcl.move(&mcl, dx, dy, dangle);
-// }
-// /* /FIXME */
-// mcl.update(&mcl, mcl.data);
-// mcl.normalize(&mcl);
-// mcl.sort(&mcl);
-// mcl.resample(&mcl);
-//
-// /* update MCL painting */
-// emit updateMclSignal();
+ int j=0;
+ mcl_thetas theta;
+ struct mcl_robot_odo odo = { dx, dy, dangle };
+
+ /*WDBG(QString("mcl cycle = %1").arg(mcl.cycle));*/
+
+ /* FIXME: not working yet */
+ /* FIXME */
+ /* normally, the [x,y,angle] are values measured by sensors. In this
+ * example, the values are quantified as the movement without noises*/
+ for (j=0; j<5; j++) {
+ measPos.x += dx;
+ measPos.y += dy;
+ measPos.angle += dangle;
+
+ measuredPosition[0] = measPos.x;
+ measuredPosition[1] = measPos.y;
+ measuredPosition[2] = measPos.angle;
+
+ mcl_pos2ang(&measPos, theta, BEACON_CNT, mcl_laser.beacon_color);
+ measuredAngles.count = BEACON_CNT;
+ for (int i=0; i<BEACON_CNT; i++)
+ measuredAngles.val[i] = theta[i];
+ QString dbg = QString("(test) gen. meas.: x=%1 y=%2 head=%3 ")
+ .arg(measPos.x, 0, 'f', 3)
+ .arg(measPos.y, 0, 'f', 3)
+ .arg(RAD2DEG(measPos.angle), 0, 'f', 2);
+
+ dbg.append(QString(" ["));
+ for (int i=0; i<BEACON_CNT-1; i++)
+ dbg.append(QString("%1 ")
+ .arg(RAD2DEG(theta[i]), 0, 'f', 2));
+ dbg.append(QString("%1")
+ .arg(RAD2DEG(theta[BEACON_CNT-1]), 0, 'f', 2));
+ dbg.append(QString("]"));
+
+ WDBG(dbg);
+ countMeasuredAnglesFrequency();
+ measuredAnglesWidget->animate();
+
+ /* MCL */
+ mcl->predict(mcl, &odo);
+
+ }
+
+ /* /FIXME */
+ mcl->update(mcl, &measuredAngles);
+ mcl->resample(mcl);
+
+ /* update MCL painting */
+ emit updateMclSignal();
}
void SimMcl::updateMcl()