add slam_gmapping
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
#include "qslamandnavwidget.h"
|
||||
#include <stdio.h>
|
||||
using namespace GMapping;
|
||||
|
||||
|
||||
QSLAMandNavWidget::QSLAMandNavWidget( QWidget * parent, const char * name, WFlags f)
|
||||
: QMapPainter(parent, name, f), dumper("slamandnav", 1){
|
||||
robotPose=IntPoint(0,0);
|
||||
robotHeading=0;
|
||||
slamRestart=false;
|
||||
slamFinished=false;
|
||||
enableMotion=false;
|
||||
startWalker=false;
|
||||
trajectorySent=false;
|
||||
goHome=false;
|
||||
wantsQuit=false;
|
||||
printHelp=false;
|
||||
saveGoalPoints=false;
|
||||
writeImages=false;
|
||||
drawRobot=true;
|
||||
}
|
||||
|
||||
QSLAMandNavWidget::~QSLAMandNavWidget(){}
|
||||
|
||||
|
||||
void QSLAMandNavWidget::mousePressEvent ( QMouseEvent * e ){
|
||||
QPoint p=e->pos();
|
||||
int mx=p.x();
|
||||
int my=height()-p.y();
|
||||
if ( e->state()&Qt::ShiftButton && e->button()==Qt::LeftButton) {
|
||||
if (trajectorySent)
|
||||
trajectoryPoints.clear();
|
||||
e->accept();
|
||||
IntPoint p=IntPoint(mx, my);
|
||||
trajectoryPoints.push_back(p);
|
||||
trajectorySent=false;
|
||||
}
|
||||
}
|
||||
|
||||
void QSLAMandNavWidget::keyPressEvent ( QKeyEvent * e ){
|
||||
if (e->key()==Qt::Key_Delete){
|
||||
e->accept();
|
||||
if (!trajectoryPoints.empty())
|
||||
trajectoryPoints.pop_back();
|
||||
}
|
||||
if (e->key()==Qt::Key_S){
|
||||
e->accept();
|
||||
enableMotion=!enableMotion;
|
||||
}
|
||||
if (e->key()==Qt::Key_W){
|
||||
e->accept();
|
||||
startWalker=!startWalker;
|
||||
}
|
||||
if (e->key()==Qt::Key_G){
|
||||
e->accept();
|
||||
slamRestart=true;
|
||||
}
|
||||
if (e->key()==Qt::Key_T){
|
||||
e->accept();
|
||||
trajectorySent=true;
|
||||
}
|
||||
if (e->key()==Qt::Key_R){
|
||||
e->accept();
|
||||
goHome=true;
|
||||
}
|
||||
if (e->key()==Qt::Key_C){
|
||||
e->accept();
|
||||
slamFinished=true;
|
||||
|
||||
}
|
||||
if (e->key()==Qt::Key_Q){
|
||||
e->accept();
|
||||
wantsQuit=true;
|
||||
|
||||
}
|
||||
if (e->key()==Qt::Key_H){
|
||||
e->accept();
|
||||
printHelp=true;
|
||||
//BABSI
|
||||
//insert the help here
|
||||
}
|
||||
if (e->key()==Qt::Key_Y){
|
||||
e->accept();
|
||||
saveGoalPoints=true;
|
||||
//BABSI
|
||||
//insert the help here
|
||||
}
|
||||
if (e->key()==Qt::Key_D){
|
||||
e->accept();
|
||||
drawRobot=!drawRobot;
|
||||
//BABSI
|
||||
//insert the help here
|
||||
}
|
||||
}
|
||||
|
||||
void QSLAMandNavWidget::paintEvent ( QPaintEvent * ){
|
||||
QPixmap pixmap(*m_pixmap);
|
||||
QPainter painter(&pixmap);
|
||||
if (trajectorySent)
|
||||
painter.setPen(Qt::red);
|
||||
bool first=true;
|
||||
int oldx=0, oldy=0;
|
||||
//paint the path
|
||||
for (std::list<IntPoint>::const_iterator it=trajectoryPoints.begin(); it!=trajectoryPoints.end(); it++){
|
||||
int x=it->x;
|
||||
int y=height()-it->y;
|
||||
if (! first)
|
||||
painter.drawLine(oldx, oldy, x,y);
|
||||
oldx=x;
|
||||
oldy=y;
|
||||
first=false;
|
||||
}
|
||||
|
||||
//paint the robot
|
||||
if (drawRobot){
|
||||
painter.setPen(Qt::black);
|
||||
int rx=robotPose.x;
|
||||
int ry=height()-robotPose.y;
|
||||
int robotSize=6;
|
||||
painter.drawLine(rx, ry,
|
||||
rx+(int)(robotSize*cos(robotHeading)), ry-(int)(robotSize*sin(robotHeading)));
|
||||
painter.drawEllipse(rx-robotSize, ry-robotSize, 2*robotSize, 2*robotSize);
|
||||
}
|
||||
if (writeImages){
|
||||
dumper.dump(pixmap);
|
||||
}
|
||||
bitBlt(this,0,0,&pixmap,0,0,pixmap.width(),pixmap.height(),CopyROP);
|
||||
}
|
||||
Reference in New Issue
Block a user