Project

General

Profile

Statistics
| Branch: | Revision:

robobuggy / buggysim / include / buggysim / sim_frame.h @ 08be08ec

History | View | Annotate | Download (3.31 KB)

1
/*
2
 * Copyright (c) 2009, Willow Garage, Inc.
3
 * All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions are met:
7
 *
8
 *     * Redistributions of source code must retain the above copyright
9
 *       notice, this list of conditions and the following disclaimer.
10
 *     * Redistributions in binary form must reproduce the above copyright
11
 *       notice, this list of conditions and the following disclaimer in the
12
 *       documentation and/or other materials provided with the distribution.
13
 *     * Neither the name of the Willow Garage, Inc. nor the names of its
14
 *       contributors may be used to endorse or promote products derived from
15
 *       this software without specific prior written permission.
16
 *
17
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
 * POSSIBILITY OF SUCH DAMAGE.
28
 */
29

    
30
#include <QFrame>
31
#include <QImage>
32
#include <QPainter>
33
#include <QPaintEvent>
34
#include <QTimer>
35
#include <QVector>
36

    
37
// This prevents a MOC error with versions of boost >= 1.48
38
#ifndef Q_MOC_RUN  // See: https://bugreports.qt-project.org/browse/QTBUG-22829
39
# include <ros/ros.h>
40

    
41
# include <std_srvs/Empty.h>
42
# include <buggysim/Spawn.h>
43
# include <buggysim/Kill.h>
44
# include <map>
45

    
46
# include "buggy.h"
47
#endif
48

    
49
namespace buggysim
50
{
51

    
52
   class TurtleFrame : public QFrame
53
   {
54
      Q_OBJECT
55
   public:
56
      TurtleFrame(QWidget* parent = 0, Qt::WindowFlags f = 0);
57
      ~TurtleFrame();
58

    
59
      std::string spawnTurtle(const std::string& name, float x, float y, float angle);
60

    
61
   protected:
62
      void paintEvent(QPaintEvent* event);
63

    
64
   private slots:
65
      void onUpdate();
66

    
67
   private:
68
      void updateTurtles();
69
      void clear();
70
      bool hasTurtle(const std::string& name);
71

    
72
      bool clearCallback(std_srvs::Empty::Request&, std_srvs::Empty::Response&);
73
      bool resetCallback(std_srvs::Empty::Request&, std_srvs::Empty::Response&);
74
      bool spawnCallback(buggysim::Spawn::Request&, buggysim::Spawn::Response&);
75
      bool killCallback(buggysim::Kill::Request&, buggysim::Kill::Response&);
76

    
77
      ros::NodeHandle nh_;
78
      QTimer* update_timer_;
79
      QImage path_image_;
80
      QPainter path_painter_;
81

    
82
      uint64_t frame_count_;
83

    
84
      ros::WallTime last_turtle_update_;
85

    
86
      ros::ServiceServer clear_srv_;
87
      ros::ServiceServer reset_srv_;
88
      ros::ServiceServer spawn_srv_;
89
      ros::ServiceServer kill_srv_;
90

    
91
      typedef std::map<std::string, TurtlePtr> M_Turtle;
92
      M_Turtle turtles_;
93
      uint32_t id_counter_;
94

    
95
      QVector<QImage> turtle_images_;
96

    
97
      float meter_;
98
      float width_in_meters_;
99
      float height_in_meters_;
100
   };
101

    
102
}