From 30b6f8f94be42042acc313a9b942dacc9a2c54da Mon Sep 17 00:00:00 2001 From: "Leigh B. Stoller" Date: Tue, 24 May 2005 18:47:08 +0000 Subject: [PATCH] Have the locpiper save dynamic obstacles (internally) so that when a new client connects, we can dump the current set to the applet. I'm still holding off on putting them into the DB (really do not think this is the right thing to do, but I can be convinced otherwise). Change battery code in the locpiper so that if the data for a robot is more then 10 minutes old, stop sending updates for that robot. For the applet, add a little daemon thread that checks to see if battery updates have stopped, and if so, change the color of the robot to blue (cold and stale). This makes it more clear which robots are working and which are turned off. Fix collision detection code so that we test for the center of a robot overlapping with an obstacle, rather then radius of the area it sweeps (Tim said this was the correct thing to do). --- robots/emc/locpiper.in | 68 +++++++++++++++++++----- robots/tracker/RoboTrack.java | 96 +++++++++++++++++++++++++--------- www/robotrack/robopipe.php3 | 2 +- www/robotrack/tracker.jar | Bin 39320 -> 39671 bytes 4 files changed, 127 insertions(+), 39 deletions(-) diff --git a/robots/emc/locpiper.in b/robots/emc/locpiper.in index a223e4db3..8a6155a12 100644 --- a/robots/emc/locpiper.in +++ b/robots/emc/locpiper.in @@ -18,7 +18,7 @@ use Time::HiRes qw(gettimeofday); sub usage() { print(STDOUT - "Usage: locpiper [-d] [-k] [-n] [-f] pid eid\n" . + "Usage: locpiper [-d] [-v] [-k] [-n] [-f] pid eid\n" . "switches and arguments:\n". "-k - Kill running locpiper for experiment pid/eid (swapout)\n". "-d - Debug mode, turns on lots of output.\n". @@ -28,7 +28,7 @@ sub usage() " - The experiment name (id)\n"); exit(-1); } -my $optlist = "dkfn"; +my $optlist = "dvkfn"; my $debug = 0; my $impotent = 0; my $daemon = 1; @@ -65,6 +65,7 @@ $libdb::DBQUERY_MAXTRIES = 0; my $logfile; my %nodeids = (); # Map vnames to nodeid to avoid lookup later. my %clients = (); +my %obstacles = (); my $PPM = 100.0; # XXX Pixels Per Meter. my $loop_count = 0; my $query_result; @@ -83,6 +84,9 @@ if (! getopts($optlist, \%options)) { if (defined($options{"d"})) { $debug++; } +if (defined($options{"v"})) { + $debug++; +} if (defined($options{"n"})) { $impotent = 1; } @@ -249,7 +253,7 @@ if (!event_subscribe($handle, \&callbackFunc, $tuple)) { # $sock = IO::Socket::INET->new(Listen => 10, LocalAddr => 'localhost', - LocalPort => 9006, + LocalPort => 9005, Reuse => 1, Proto => 'tcp'); fatal("Could not create socket!") @@ -279,8 +283,10 @@ while (1) { # We need to *something* to brand new connections to keep the client # from timing out (happens on my desktop). # - SendBatteryData() - if ($newconn); + if ($newconn) { + SendBatteryData(1); + SendDynObstacles(); + } event_poll_blocking($handle, 1000); @@ -292,7 +298,7 @@ while (1) { # $loop_count++; if ($loop_count > 60) { - SendBatteryData(); + SendBatteryData(0); $loop_count = 0; } } @@ -321,6 +327,7 @@ sub callbackFunc($$$) { if ($objtype eq "TOPOGRAPHY") { my $args = event_notification_get_arguments($handle, $notification); + my @sets = (); my @event = (); my $id; @@ -355,6 +362,16 @@ sub callbackFunc($$$) { if (@event); ForwardEvent("$seconds:$microseconds", $evstr); + + # + # Store the obstacle info for later (to give to new clients) + # + if ($evtype eq "CREATE" || $evtype eq "MODIFY") { + $obstacles{"$id"} = $evstr; + } + elsif ($evtype eq "CLEAR") { + delete($obstacles{"$id"}); + } return; } @@ -469,11 +486,15 @@ sub callbackFunc($$$) { # # Send battery data. # -sub SendBatteryData() +sub SendBatteryData($) { + my ($nostore) = @_; + my $query_result = DBQueryWarn("select r.node_id,n.battery_voltage, ". - " n.battery_percentage ". + " n.battery_percentage, ". + " UNIX_TIMESTAMP(now()) - n.battery_timestamp ". + " as age ". " from reserved as r ". "left join nodes as n on n.node_id=r.node_id ". "where ". @@ -490,21 +511,41 @@ sub SendBatteryData() } $seconds -= $starttime; - while (my ($nodeid,$voltage,$percentage) = + while (my ($nodeid,$voltage,$percentage,$age) = $query_result->fetchrow_array()) { + + # + # If the battery data is more then 10 minutes old, do not + # send it; its most certainly stale and not worth anything. + # + next + if ($age > (10 * 60)); ForwardEvent("$seconds:$microseconds", - "TYPE=NODE,ID=$nodeid,BATV=$voltage,BAT%=$percentage"); + "TYPE=NODE,ID=$nodeid,BATV=$voltage,BAT%=$percentage", + $nostore); } } } +# +# Send dynamic obstacles +# +sub SendDynObstacles() +{ + foreach my $id (keys(%obstacles)) { + my $evstr = $obstacles{"$id"}; + + ForwardEvent("", $evstr, 1); + } +} + # # Send the translated event to all of the clients that are listening. # -sub ForwardEvent($$) +sub ForwardEvent($$;$) { - my ($stamp, $event) = @_; + my ($stamp, $event, $nostore) = @_; print "Forwarding event: '$stamp $event'\n" if ($debug > 1); @@ -522,7 +563,8 @@ sub ForwardEvent($$) # # Now dump it to the file. # - print EVFILE "$stamp $event\n"; + print EVFILE "$stamp $event\n" + if (!defined($nostore) || $nostore == 0); } # diff --git a/robots/tracker/RoboTrack.java b/robots/tracker/RoboTrack.java index e57a7fd1f..577b43f55 100644 --- a/robots/tracker/RoboTrack.java +++ b/robots/tracker/RoboTrack.java @@ -379,7 +379,7 @@ public class RoboTrack extends JApplet { private BufferedImage scalebar_bimg; private class Map extends JPanel implements Runnable { - private Thread thread; + private Thread thread, daemon; public Map() { /* @@ -562,6 +562,11 @@ public class RoboTrack extends JApplet { // Store these as strings for easy display. robbie.battery_voltage = FORMATTER.format(Float.parseFloat(val)); + + // This causes a robot to look alive. + robbie.last_update = System.currentTimeMillis(); + now.setTime(robbie.last_update); + robbie.update_string = TIME_FORMAT.format(now); } else if (key.equals("BAT%")) { // Store these as strings for easy display. @@ -569,9 +574,6 @@ public class RoboTrack extends JApplet { FORMATTER.format(Float.parseFloat(val)); } } - robbie.last_update = System.currentTimeMillis(); - now.setTime(robbie.last_update); - robbie.update_string = TIME_FORMAT.format(now); } /* @@ -713,14 +715,18 @@ public class RoboTrack extends JApplet { if (!robbie.dragging) continue; - // Bounding box. - int rx1 = robbie.drag_x - (robbie.radius); - int ry1 = robbie.drag_y - (robbie.radius); - int rx2 = robbie.drag_x + (robbie.radius); - int ry2 = robbie.drag_y + (robbie.radius); + /* + * Tim says that we only want to look to see if the + * center of the circle the robot sweeps, overlaps + * with an exclusion zone around an obstacle. + */ + int rx1 = robbie.drag_x; + int ry1 = robbie.drag_y; + int rx2 = robbie.drag_x; + int ry2 = robbie.drag_y; - //System.out.println("CheckforObstacles: " + rx1 + "," + - // ry1 + "," + rx2 + "," + ry2); + System.out.println("CheckforObstacles: " + rx1 + "," + + ry1 + "," + rx2 + "," + ry2); /* * Check for overlap of this robot with each obstacle. @@ -760,8 +766,8 @@ public class RoboTrack extends JApplet { int ox2 = obstacle.x2 + OBSTACLE_BUFFER; int oy2 = obstacle.y2 + OBSTACLE_BUFFER; - //System.out.println(" " + ox1 + "," + - // oy1 + "," + ox2 + "," + oy2); + System.out.println(" " + ox1 + "," + + oy1 + "," + ox2 + "," + oy2); if (! (oy2 < ry1 || ry2 < oy1 || @@ -930,13 +936,17 @@ public class RoboTrack extends JApplet { public void drawRobot(Graphics2D g2, int x, int y, double or, String label, - int dot_radius, int which) { + int dot_radius, int which, boolean stale) { /* * An allocated robot is a filled circle. * A destination is an unfilled circle. So is a dragging robot. */ if (which == DRAWROBOT_LOC) { - g2.setColor(Color.green); + if (stale) + g2.setColor(Color.blue); + else + g2.setColor(Color.green); + g2.fillOval(x - dot_radius, y - dot_radius, dot_radius * 2, dot_radius * 2); } @@ -1077,9 +1087,10 @@ public class RoboTrack extends JApplet { int x = robbie.x; int y = robbie.y; + boolean stale = (robbie.last_update == 0); drawRobot(g2, x, y, robbie.or, robbie.pname, - (int) (robbie.size/2), DRAWROBOT_LOC); + (int) (robbie.size/2), DRAWROBOT_LOC, stale); /* * Okay, if the robot has a destination, draw that too @@ -1090,7 +1101,7 @@ public class RoboTrack extends JApplet { int dy = robbie.dy; drawRobot(g2, dx, dy, robbie.dor, robbie.pname, - robbie.size/2, DRAWROBOT_DST); + robbie.size/2, DRAWROBOT_DST, false); /* * And draw a light grey line from source to dest. @@ -1103,7 +1114,7 @@ public class RoboTrack extends JApplet { int dy = robbie.drag_y; drawRobot(g2, dx, dy, robbie.drag_or, robbie.pname, - robbie.size/2, DRAWROBOT_DRAG); + robbie.size/2, DRAWROBOT_DRAG, false); /* * And draw a red line from source to drag. @@ -1133,18 +1144,58 @@ public class RoboTrack extends JApplet { } public void start() { + daemon = new Thread(this); + daemon.start(); thread = new Thread(this); thread.start(); } public synchronized void stop() { thread = null; + daemon = null; } + + public void Daemon() { + Thread me = Thread.currentThread(); + + System.out.println("Daemon Starting"); + while (me == daemon) { + try { + me.sleep(1000); + } + catch (InterruptedException e) + { + break; + } + long now = System.currentTimeMillis(); + Enumeration e = robots.elements(); + + while (e.hasMoreElements()) { + Robot robbie = (Robot)e.nextElement(); + + if (robbie.last_update == 0) + continue; + + if (now - robbie.last_update >= 10000) { + System.out.println(robbie.pname + " has gone stale"); + robbie.last_update = 0; + } + } + repaint(); + maptable.repaint(10); + } + System.out.println("Daemon Stopping"); + } public void run() { Thread me = Thread.currentThread(); String str; - long start_time = System.currentTimeMillis(); + + // See if we are the daemon thread. + if (me == daemon) { + Daemon(); + return; + } if (! shelled) { System.out.println("Opening URL: " + robopipeurl.toString()); @@ -1170,11 +1221,6 @@ public class RoboTrack extends JApplet { try { while (null != ((str = input.readLine()))) { - long now = System.currentTimeMillis(); - long diff = (now - start_time) / 1000; - - //System.out.println("" + diff); - parseEvent(str); repaint(); maptable.repaint(10); @@ -1188,7 +1234,7 @@ public class RoboTrack extends JApplet { break; } try { - thread.sleep(1000); + me.sleep(1000); } catch (InterruptedException e) { diff --git a/www/robotrack/robopipe.php3 b/www/robotrack/robopipe.php3 index 8a59c9e3a..96b0a4cc6 100644 --- a/www/robotrack/robopipe.php3 +++ b/www/robotrack/robopipe.php3 @@ -83,7 +83,7 @@ function SPEWCLEANUP() set_time_limit(0); register_shutdown_function("SPEWCLEANUP"); -$socket = fsockopen("localhost", 9006); +$socket = fsockopen("localhost", 9005); if (!$socket) { TBERROR("Error opening locpiper socket - $errstr",1); } diff --git a/www/robotrack/tracker.jar b/www/robotrack/tracker.jar index 05b78786a522723dcd713f3652a3d4a5f58fa1e3..66f59236c6e15dbfcf53df08b8ab3c34ddfe17b9 100644 GIT binary patch delta 24346 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

{!${g^<0;xhrM;gkG4?J#^gqtV9K31;h!RO5Bx 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 JHtpZn{{e`4(=Gr2 delta 24056 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