From d5282805da34fe1fbf0deeebe22d0714afb3867e Mon Sep 17 00:00:00 2001 From: "GLEN TURNER (8GT6)" <8gt6@queensu.ca> Date: Mon, 1 Jun 2015 12:39:59 -0400 Subject: [PATCH] Added talker.py and ability to bag files --- ProjectFiles/js/ros_scripts.js | 71 +++++++++++++++- data/_2015-06-01-12-38-44.bag | Bin 0 -> 51187 bytes index.html | 147 +++++++++++++++++++++------------ launch/all.launch | 1 + launch/talker.launch | 3 + src/bagger.py | 3 +- src/bagger.py~ | 33 ++++++++ src/talker.py | 20 +++++ src/talker.py~ | 0 9 files changed, 218 insertions(+), 60 deletions(-) create mode 100644 data/_2015-06-01-12-38-44.bag create mode 100644 launch/talker.launch create mode 100755 src/bagger.py~ create mode 100755 src/talker.py create mode 100644 src/talker.py~ diff --git a/ProjectFiles/js/ros_scripts.js b/ProjectFiles/js/ros_scripts.js index 6b5c08b..8de6320 100644 --- a/ProjectFiles/js/ros_scripts.js +++ b/ProjectFiles/js/ros_scripts.js @@ -3,9 +3,11 @@ var ros = new ROSLIB.Ros(); ros.topics = []; ros.nodes = []; -ros.connectioninfo = ['ws://', '192', '168', '0', '100', '9090']; -// ros.connectionName = 'ws://localhost:9090'; +ros.recording = false; + + ros.connectionName = 'ws://192.168.0.100:9090'; + // If there is an error on the backend, an 'error' emit will be emitted. ros.on('error', function(error) { document.getElementById("ConnectionIPForm").className = "form-group has-warning has-feedback"; @@ -47,6 +49,56 @@ ros.on('close', function() { ros.connect(ros.connectionName); +/////////////////////////////////////////////////////////////////////////////////// +// Publishers +/////////////////////////////////////////////////////////////////////////////////// + +function publishBagMessage(bagFilename) +{ + var bagMessage = new ROSLIB.Message({ + data : bagFilename + }) + bagPublisher.publish(bagMessage) +} + +//////////////////////////////////////////////////////////////// +// Topics +//////////////////////////////////////////////////////////////// + +var bagPublisher = new ROSLIB.Topic({ + ros : ros, + name : 'bag_publisher', + messageType : 'std_msgs/String' +}); + +var bagNotifier = new ROSLIB.Topic({ + ros : ros, + name : 'bag_notifier', + messageType : 'std_msgs/String' +}); + +//////////////////////////////////////////////////////////////// +// Subscribers +//////////////////////////////////////////////////////////////// + + +bagNotifier.subscribe(function(message) { + if (message.data === "STARTED") { + document.getElementById("recordButtonText").innerHTML = "Stop" + document.getElementById("recordButton").className = "btn btn-danger" + } else { + document.getElementById("recordButtonText").innerHTML = "Start" + document.getElementById("recordButton").className = "btn btn-primary" + } +}); + + +/////////////////////////////////////////////////////////////////////////////////// +// Functions +/////////////////////////////////////////////////////////////////////////////////// + + + // attept to connect to the ros master from the IP given orgrab it from the form ros.attemptConnection = function(ipAddress) { @@ -113,4 +165,17 @@ function getTime() { console.log("Getting Time..."); console.log(result.time.secs); }); -}; \ No newline at end of file +}; + +function toggleRecording() +{ + document.getElementById("recordButtonText").innerHTML = "Wait" + document.getElementById("recordButton").className = "btn btn-warning" + if (!ros.recording) { + ros.recording = true + publishBagMessage(document.getElementById("recordText").value) + } else { + ros.recording = false + publishBagMessage("STOP") + } +} \ No newline at end of file diff --git a/data/_2015-06-01-12-38-44.bag b/data/_2015-06-01-12-38-44.bag new file mode 100644 index 0000000000000000000000000000000000000000..a81b3f5b75ffbe1222b18983660f12b52e807562 GIT binary patch literal 51187 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 #eNo65fICQpD27^QU%-z+ zkN>?QEYT}|!$o{Q`ad5PA&PFe<3;0(-k>K%h@!{jZV{p&?sXzW#}h?cLya$b8^9EP zMj<+jqViz+^pk;+v_ZH3qYt5P@g{03YiA4jX$RHRP}^9esp+&~nR>jzGPJCvcZHjq zn!=IRNMm!TxhWiLZ3%_Z6sOg^mNGNRc$mVnrblnF3q5gF>+aT@LYm&1Xw{9TP7?dmyXp-*TfqYC73iahNY$l{9op z6%uLFP8oI}5HIt;z^b*&+7vslcae+i2JYqn)fK84x@zgZ%; zhbm7`&d?S1YrZdM*!6Vcx|C@v^d~Axx=$(CbWlD^^{uC;kRgnzrsYlY^}zG#Of#dX zN=~(?8Whs1MaNTgm>C@2Z4n|Uo&Id&oPv?j45edn8>_>HR>+%Fq5G%=%`#LQ^`T?2 z5)fF>34!3c-fSH~V5AUG8-q&t{qTvh83MrGg+s2 zUgG|1cqta8@N!{OU5YTHDwkC3LXsRv*Uwqmt)@=^#3bAxht>ZD%!;0MM0QGoK>$Lv0jR91hwFw<*bVHbFtl0P2qxl+CnHOfBA!P?KFwC|LK?{-fzLAf0CI z1m#uAe7#136yIXxi}Gk_Kpu_78Z{%ThFhZ%&CsG+G@(bMO@kZH#D!^r-qTFY`&QByITF5sAWfSV>!Q!zB#hSEk{S#2W>rP@Y#Z%C?b1X5|W zji^W)F_cE4D1(l0%b=qvgHE6W_O}lFZAe88LN#g9U3T@xx_V`$79kzCZR z+odLxfdlR~d6#cd;vCrhQ0>M=Z*H|4*ED>B?p8_+)5H|B%`F zT$#}%!9hkw??QKa+!-AdR*yQIexzP~E6;z%6dX(g97DUE>47xn&HkZN7=7RPI5N69 SR?r8 - +
@@ -75,9 +75,18 @@
- +
+
+ + + + +
+
@@ -91,87 +100,115 @@
+
- + +
No data recieved yet.
+ +
+ + + +
+ N/A +
+ +
+ +
+ + + +
+ N/A +
+ +
+
-
- -
- N/A -
-
+ - + -
+
-
-
-
-
+
+
- + +
+ + + + + +
+ + + + +
+
-
-
-
- - -
+ +
+
+ +
+
+ ROS Topics +
+
+ +
+ N/A
- - -
-
- -
-
- ROS Topics -
-
- -
- N/A
-
-
-
- ROS Nodes -
-
+
+
+ ROS Nodes +
+
-
- N/A +
+ N/A +
-
+
-
- - + + diff --git a/launch/all.launch b/launch/all.launch index fd379e5..2424b89 100644 --- a/launch/all.launch +++ b/launch/all.launch @@ -1,4 +1,5 @@ + \ No newline at end of file diff --git a/launch/talker.launch b/launch/talker.launch new file mode 100644 index 0000000..c39f905 --- /dev/null +++ b/launch/talker.launch @@ -0,0 +1,3 @@ + + + diff --git a/src/bagger.py b/src/bagger.py index ae7b8d2..58acc4d 100755 --- a/src/bagger.py +++ b/src/bagger.py @@ -23,8 +23,7 @@ class Bagger(object): else: bag_file = os.path.join(self.data_path, msg.data) self.proc = subprocess.Popen(["rosbag", "record", - "kinect2/depth_lowres/points", "kinect2/rgb_lowres/image", - "tf", "imu/data", "-o", bag_file], preexec_fn=os.setsid) + "--all", "-o", bag_file], preexec_fn=os.setsid) self.pub.publish("STARTED") diff --git a/src/bagger.py~ b/src/bagger.py~ new file mode 100755 index 0000000..ae7b8d2 --- /dev/null +++ b/src/bagger.py~ @@ -0,0 +1,33 @@ +#!/usr/bin/env python +import rospy +from std_msgs.msg import String +import rospkg +import subprocess +import os +import signal + +class Bagger(object): + + def __init__(self): + rospy.init_node("bagger", anonymous=True) + rospy.Subscriber("bag_publisher", String, self.callback) + self.pub = rospy.Publisher("bag_notifier", String, queue_size=10) + self.proc = None + rospack = rospkg.RosPack() + self.data_path = os.path.join(rospack.get_path("rosbridge_GUI_example"), "data") + + def callback(self, msg): + if msg.data == "STOP" and self.proc is not None: + os.killpg(self.proc.pid, signal.SIGINT) + self.pub.publish("STOPPED") + else: + bag_file = os.path.join(self.data_path, msg.data) + self.proc = subprocess.Popen(["rosbag", "record", + "kinect2/depth_lowres/points", "kinect2/rgb_lowres/image", + "tf", "imu/data", "-o", bag_file], preexec_fn=os.setsid) + self.pub.publish("STARTED") + + +if __name__ == '__main__': + Bagger() + rospy.spin() diff --git a/src/talker.py b/src/talker.py new file mode 100755 index 0000000..b4bc6f6 --- /dev/null +++ b/src/talker.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python +# license removed for brevity +import rospy +from std_msgs.msg import String + +def talker(): + pub = rospy.Publisher('chatter', String, queue_size=10) + rospy.init_node('talker', anonymous=True) + rate = rospy.Rate(10) # 10hz + while not rospy.is_shutdown(): + hello_str = "hello world %s" % rospy.get_time() + rospy.loginfo(hello_str) + pub.publish(hello_str) + rate.sleep() + +if __name__ == '__main__': + try: + talker() + except rospy.ROSInterruptException: + pass diff --git a/src/talker.py~ b/src/talker.py~ new file mode 100644 index 0000000..e69de29