Project

General

Profile

Revision f09d002e

IDf09d002e49f709a5570f26d99d61ed92580b17a7
Parent e10d9dd5
Child b333d404

Added by Hui Jun Tay about 11 years ago

behaviors now overwrite teleop (see comments in scout.cpp for details)

View differences:

scout/scoutsim/src/scout.cpp
66 66
          , sonar_visual_on(false)
67 67
          , sonar_on(true)
68 68
          , ignore_behavior(false)
69
          , current_teleop_scout("")
70 69
          , node (nh)
71 70
          , scout_image(scout_image)
72 71
          , pos(pos)
......
120 119
        sonar_stop_r = 23;
121 120
        sonar_direction = 1;
122 121
        sonar_tick_time = ros::Duration(scoutsim::SONAR_HALF_SPIN_TIME / 24.0);
122
        
123
        // Init latch
124
        teleop_latch = 0;
123 125
    }
124 126

  
125 127
    float Scout::absolute_to_mps(int absolute_speed)
......
137 139
        last_command_time = ros::WallTime::now();
138 140

  
139 141
        //ignore non-teleop commands if commands if teleop is ON
140
        if (node.getNamespace() != current_teleop_scout || msg->teleop_ON)
142
        //if (node.getNamespace() != current_teleop_scout || msg->teleop_ON)
143
        //{
144

  
145
        //latch value indicates number of uninterrupted teleop messages
146
        //before teleop latch shifts again
147
        if (!(msg->teleop_ON) && teleop_latch < 3)
148
        {
149
            teleop_latch++;
150
        }
151

  
152
        if (!(msg->teleop_ON) || teleop_latch ==0)
141 153
        {
142 154
            if(msg->fl_set)
143 155
            {
......
155 167
            {
156 168
                motor_br_speed = absolute_to_mps(msg->br_speed);
157 169
            }
170
        }        
171

  
172
        //if a teleop message comes through, decrease the latch
173
        //latch code works on the assumption there will be more behavior messages
174
        //than teleop messages
175
        if (msg->teleop_ON && teleop_latch>0)
176
        {
177
            teleop_latch--;
158 178
        }
179
        //}
159 180

  
160 181
    }
161 182

  
......
405 426
                                        const wxImage& walls_image,
406 427
                                        wxColour background_color,
407 428
                                        wxColour sonar_color,
408
                                        world_state state, 
409
                                        string teleop_scoutname)
429
                                        world_state state)
410 430
    {
411 431
        // Assume that the two motors on the same side will be set to
412 432
        // roughly the same speed. Does not account for slip conditions
......
419 439
        float ang_dist = SIM_TIME_REFRESH_RATE * (r_speed - l_speed) / SCOUT_WIDTH;
420 440

  
421 441
        //store currently teleop'd scoutname
422
        std::stringstream ss;
423
        ss << "/" << teleop_scoutname;
424
        current_teleop_scout = ss.str();
442
        //std::stringstream ss;
443
        //ss << "/" << teleop_scoutname;
444
        //current_teleop_scout = ss.str();
425 445

  
426 446
        Vector2 old_pos = pos;
427 447

  
scout/scoutsim/src/scout.h
118 118
                                         const wxImage& walls_image,
119 119
                                         wxColour background_color,
120 120
                                         wxColour sonar_color,
121
                                         world_state state,std::string teleop_scoutname);
121
                                         world_state state);
122 122
            void paint(wxDC& dc);
123 123
            void set_sonar_visual(bool on);
124 124

  
......
151 151
            int old_back_dx;
152 152
            int old_back_dy;
153 153
            bool isFront;
154
            
155
            int teleop_latch;
154 156

  
155 157
	        wxBitmap *path_bitmap;
156 158
	        bool sonar_visual_on;
157 159
            bool sonar_on;
158 160
            bool ignore_behavior;
159 161
            
160
            std::string current_teleop_scout;
162
            //std::string current_teleop_scout;
161 163

  
162 164
            ros::NodeHandle node;
163 165

  
scout/scoutsim/src/sim_frame.cpp
549 549

  
550 550
    void SimFrame::updateScouts()
551 551
    {
552
        std::string teleop_out = "";
553 552

  
554 553
        if (last_scout_update.isZero())
555 554
        {
......
570 569
        for (; it != end; ++it)
571 570
        {
572 571

  
573
        //default to scout1
574
        if (teleop_type != TELEOP_OFF)
575
        {
576
            teleop_out = teleop_scoutname;
577
        }
578

  
579 572
            it->second->update(SIM_TIME_REFRESH_RATE,
580 573
                               path_dc, sonar_dc,
581 574
                               path_image, lines_image, walls_image,
582 575
                               path_dc.GetBackground().GetColour(),
583 576
                               sonar_dc.GetBackground().GetColour(),
584
                               state,teleop_out);
577
                               state);
585 578
        }
586 579

  
587 580
        for (unsigned int i = 0; i < ghost_scouts.size(); ++i)

Also available in: Unified diff