for (int i=count; i<mcl->count; i++) {
/* draw a circle */
painter->translate(
- (qreal)(parts[i].x / mcl->width * width),
- (qreal)((mcl->height-parts[i].y)
- / mcl->height * height));
+ (qreal)(parts[i].x / PLAYGROUND_WIDTH_M * width),
+ (qreal)((PLAYGROUND_HEIGHT_M-parts[i].y)
+ / PLAYGROUND_HEIGHT_M * height));
col = (int)(parts[i].weight * 128 + 50);
col = (col > 255) ? 255 : col;
painter->setBrush(QColor(col, 40, 40));
painter->drawEllipse(0, 0, 10, 10);
painter->translate(
- -(qreal)(parts[i].x / mcl->width * width),
- -(qreal)((mcl->height-parts[i].y)
- / mcl->height * height));
+ -(qreal)(parts[i].x / PLAYGROUND_WIDTH_M * width),
+ -(qreal)((PLAYGROUND_HEIGHT_M-parts[i].y)
+ / PLAYGROUND_HEIGHT_M * height));
/* draw a line representing the robot's head */
painter->translate(
- (qreal)((parts[i].x / mcl->width * width)+5),
- (qreal)(((mcl->height-parts[i].y)
- / mcl->height * height)+5));
+ (qreal)((parts[i].x / PLAYGROUND_WIDTH_M * width)+5),
+ (qreal)(((PLAYGROUND_HEIGHT_M-parts[i].y)
+ / PLAYGROUND_HEIGHT_M * height)+5));
painter->rotate(RAD2DEG(-parts[i].angle));
painter->drawLine(0, 0, 20, 0);
painter->rotate(RAD2DEG(parts[i].angle));
painter->translate(
- -(qreal)((parts[i].x / mcl->width * width)+5),
- -(qreal)(((mcl->height-parts[i].y)
- / mcl->height * height)+5));
+ -(qreal)((parts[i].x / PLAYGROUND_WIDTH_M * width)+5),
+ -(qreal)(((PLAYGROUND_HEIGHT_M-parts[i].y)
+ / PLAYGROUND_HEIGHT_M * height)+5));
}
}
mclWidthLineEdit = new QLineEdit();
mclHeightLineEdit = new QLineEdit();
+ mclXOffLineEdit = new QLineEdit();
+ mclYOffLineEdit = new QLineEdit();
mclGenDnoiseLineEdit = new QLineEdit();
mclGenAnoiseLineEdit = new QLineEdit();
mclMovDnoiseLineEdit = new QLineEdit();
layout->addWidget(MiscGui::createLabel("width"), 0, 0);
layout->addWidget(MiscGui::createLabel("height"), 1, 0);
- layout->addWidget(MiscGui::createLabel("gen_dnoise"), 2, 0);
- layout->addWidget(MiscGui::createLabel("gen_anoise"), 3, 0);
- layout->addWidget(MiscGui::createLabel("mov_dnoise"), 4, 0);
- layout->addWidget(MiscGui::createLabel("mov_anoise"), 5, 0);
- layout->addWidget(MiscGui::createLabel("beacon_cnt"), 6, 0);
+ layout->addWidget(MiscGui::createLabel("x offset"), 2, 0);
+ layout->addWidget(MiscGui::createLabel("y offset"), 3, 0);
+ layout->addWidget(MiscGui::createLabel("gen_dnoise"), 4, 0);
+ layout->addWidget(MiscGui::createLabel("gen_anoise"), 5, 0);
+ layout->addWidget(MiscGui::createLabel("mov_dnoise"), 6, 0);
+ layout->addWidget(MiscGui::createLabel("mov_anoise"), 7, 0);
layout->addWidget(mclWidthLineEdit, 0, 1);
layout->addWidget(mclHeightLineEdit, 1, 1);
- layout->addWidget(mclGenDnoiseLineEdit, 2, 1);
- layout->addWidget(mclGenAnoiseLineEdit, 3, 1);
- layout->addWidget(mclMovDnoiseLineEdit, 4, 1);
- layout->addWidget(mclMovAnoiseLineEdit, 5, 1);
- layout->addWidget(mclBeaconCount, 6, 1);
+ layout->addWidget(mclXOffLineEdit, 2, 1);
+ layout->addWidget(mclYOffLineEdit, 3, 1);
+ layout->addWidget(mclGenDnoiseLineEdit, 4, 1);
+ layout->addWidget(mclGenAnoiseLineEdit, 5, 1);
+ layout->addWidget(mclMovDnoiseLineEdit, 6, 1);
+ layout->addWidget(mclMovAnoiseLineEdit, 7, 1);
layout->addWidget(MiscGui::createLabel("count"), 0, 2);
layout->addWidget(MiscGui::createLabel("w_min"), 1, 2);
layout->addWidget(MiscGui::createLabel("aeval sigma"), 4, 2);
layout->addWidget(MiscGui::createLabel("maxavdist"), 5, 2);
layout->addWidget(MiscGui::createLabel("maxnoisecycle"), 6, 2);
+ layout->addWidget(MiscGui::createLabel("beacon_cnt"), 7, 2);
layout->addWidget(mclCountLineEdit, 0, 3);
layout->addWidget(mclWMinLineEdit, 1, 3);
layout->addWidget(mclAEvalSigmaLineEdit, 4, 3);
layout->addWidget(mclMaxavdistLineEdit, 5, 3);
layout->addWidget(mclMaxnoisecycleLineEdit, 6, 3);
+ layout->addWidget(mclBeaconCount, 7, 3);
mclWidthLineEdit->setMinimumWidth(50);
mclCountLineEdit->setMinimumWidth(50);
mclWidthLineEdit->setText("3.000");
mclHeightLineEdit->setText("2.100");
+ mclXOffLineEdit->setText("0.000");
+ mclYOffLineEdit->setText("0.000");
mclGenDnoiseLineEdit->setText("0.99");
mclGenAnoiseLineEdit->setText("360");
mclMovDnoiseLineEdit->setText("0.01");
robots[i].mclPart = (struct mcl_particle *)&parts[i];
robots[i].widgetSize = QSize((int)playgroundScene->width(),
(int)playgroundScene->height());
- robots[i].playgroundSize = QSizeF(mcl.width, mcl.height);
+ robots[i].playgroundSize =
+ QSizeF(PLAYGROUND_WIDTH_M, PLAYGROUND_HEIGHT_M);
robots[i].init();
robots[i].setParent(this);
playgroundScene->addItem(&robots[i]);
void SimMcl::generateMeasurement()
{
mcl_thetas theta;
- measPos.x = (double)((qrand()&0xffff)/65535.0*(double)mcl.width);
- measPos.y = (double)((qrand()&0xffff)/65535.0*(double)mcl.height);
+ measPos.x = (double)(mcl.xoff+(qrand()&0xffff)/65535.0*(double)mcl.width);
+ measPos.y = (double)(mcl.yoff+(qrand()&0xffff)/65535.0*(double)mcl.height);
measPos.angle = DEG2RAD((double)((qrand()&0xffff)/65535.0*360));
/* convert generated position to angles between reflectors */
mcl_pos2ang(&measPos, theta, mcl.beacon_cnt, mcl.beacon_color);
void SimMcl::initMcl()
{
/* MCL initialization */
+ mcl.xoff = mclXOffLineEdit->text().toFloat();/* in meters */
+ mcl.yoff = mclYOffLineEdit->text().toFloat();/* in meters */
mcl.width = mclWidthLineEdit->text().toFloat();/* in meters */
mcl.height = mclHeightLineEdit->text().toFloat();/* in meters */
/* the noises */