From 9fad5656968676f295d091ca69afb199cbccc5c8 Mon Sep 17 00:00:00 2001
From: Manuel <gomesnelito@gmail.com>
Date: Wed, 13 Oct 2021 16:01:57 +0100
Subject: [PATCH 01/11] Launch file to test signals independent of the physical
 car

---
 .../modules/signal_panel_recognition.launch     |  6 ------
 physical_bringup/launch/signal_usbcam.launch    | 17 +++++++++++++++++
 .../launch/signal_panel_recognition.launch      |  6 ------
 3 files changed, 17 insertions(+), 12 deletions(-)
 create mode 100644 physical_bringup/launch/signal_usbcam.launch

diff --git a/physical_bringup/launch/modules/signal_panel_recognition.launch b/physical_bringup/launch/modules/signal_panel_recognition.launch
index e7195813..0221c937 100644
--- a/physical_bringup/launch/modules/signal_panel_recognition.launch
+++ b/physical_bringup/launch/modules/signal_panel_recognition.launch
@@ -1,16 +1,10 @@
 <launch>
   <arg name="image_raw_topic" default="/real_camera"/>
-  <arg name="vel_cmd_topic" default="/android_input_vel"/>
-  <arg name="twist_linear_x" default="1"/>
   <arg name="signal_cmd_topic" default="/signal_vel"/>
-  <arg name="twist_cmd_topic" default=""/>
 
   <include file="$(find signal_recognition)/launch/signal_panel_recognition.launch">
-    <arg name="vel_cmd_topic" value="$(arg vel_cmd_topic)"/>
-    <arg name="twist_cmd_topic" value="$(arg twist_cmd_topic)"/>
     <arg name="image_raw_topic" value="$(arg image_raw_topic)"/>
     <arg name="signal_cmd_topic" value="$(arg signal_cmd_topic)"/>
-    <arg name="twist_linear_x" value="$(arg twist_linear_x)"/>
   </include>
 
 </launch>
\ No newline at end of file
diff --git a/physical_bringup/launch/signal_usbcam.launch b/physical_bringup/launch/signal_usbcam.launch
new file mode 100644
index 00000000..05f2829e
--- /dev/null
+++ b/physical_bringup/launch/signal_usbcam.launch
@@ -0,0 +1,17 @@
+<launch>
+    <arg name="camera_topic" default="/real_camera"/>
+    <arg name="int_camera_id" default="2"/>
+    <arg name="signal_cmd_topic" default="/signal_vel"/>
+
+    <include file="$(find physical_bringup)/launch/modules/signal_panel_recognition.launch">
+        <arg name="signal_cmd_topic" value="$(arg signal_cmd_topic)"/>
+        <arg name="image_raw_topic" value="$(arg camera_topic)"/>
+    </include>
+
+    <include file="$(find physical_bringup)/launch/modules/lane_camera.launch">
+        <arg name="camera_topic" value="$(arg camera_topic)"/>
+        <arg name="int_camera_id" value="$(arg int_camera_id)"/>
+    </include>
+
+
+</launch>
diff --git a/signal_recognition/launch/signal_panel_recognition.launch b/signal_recognition/launch/signal_panel_recognition.launch
index 7fd4c9e8..58a78af7 100644
--- a/signal_recognition/launch/signal_panel_recognition.launch
+++ b/signal_recognition/launch/signal_panel_recognition.launch
@@ -1,16 +1,10 @@
 <launch>
   <arg name="image_raw_topic" default="/real_camera"/>
-  <arg name="vel_cmd_topic" default="/android_input_vel"/>
-  <arg name="twist_cmd_topic" default="/vel_cmd"/>
   <arg name="signal_cmd_topic" default="/signal_vel"/>
-  <arg name="twist_linear_x" default="1"/>
 
     <node name="signal_panel_recognition" pkg="signal_recognition" type="signal_panel_recognition.py" output="screen">
-      <param name="vel_cmd_topic" value="$(arg vel_cmd_topic)"/>
       <param name="image_raw_topic" value="$(arg image_raw_topic)"/>
-      <param name="twist_cmd_topic" value="$(arg twist_cmd_topic)"/>
       <param name="signal_cmd_topic" value="$(arg signal_cmd_topic)"/>
-      <param name="twist_linear_x" value="$(arg twist_linear_x)"/>
     </node>
 
 </launch>
\ No newline at end of file

From f1b6f278f5a5c04030074b331a091e812f0dcac0 Mon Sep 17 00:00:00 2001
From: Manuel <gomesnelito@gmail.com>
Date: Wed, 13 Oct 2021 17:42:22 +0100
Subject: [PATCH 02/11] Removing lines of code not used

---
 .../scripts/signal_panel_recognition.py       | 35 +------------------
 1 file changed, 1 insertion(+), 34 deletions(-)

diff --git a/signal_recognition/scripts/signal_panel_recognition.py b/signal_recognition/scripts/signal_panel_recognition.py
index cfd2340e..700457da 100755
--- a/signal_recognition/scripts/signal_panel_recognition.py
+++ b/signal_recognition/scripts/signal_panel_recognition.py
@@ -1,21 +1,13 @@
 #!/usr/bin/env python3
 
 # Imports
-#import argparse
 import cv2
-from csv import writer
-#import copy
 import numpy as np
 import rospy
 from std_msgs.msg import Bool
-from geometry_msgs.msg._Twist import Twist
 from sensor_msgs.msg._Image import Image
 from cv_bridge.core import CvBridge
-from datetime import datetime
-#from tensorflow.keras.models import load_model
 import pathlib
-#import os
-#import string
 
 global img_rbg
 global bridge
@@ -91,22 +83,15 @@ def main():
     begin_img = False
     velbool = False
 
-    #twist = Twist()
 
     # Init Node
     rospy.init_node('ml_driving', anonymous=False)
 
     # Get parameters
-    image_raw_topic = rospy.get_param('~image_raw_topic', '/ackermann_vehicle/camera2/rgb/image_raw') 
-    twist_cmd_topic = rospy.get_param('~twist_cmd_topic', '/cmd_vel')
+    image_raw_topic = rospy.get_param('~image_raw_topic', '/ackermann_vehicle/camera2/rgb/image_raw')
     signal_cmd_topic = rospy.get_param('~signal_cmd_topic', '/signal_vel')
-    twist_linear_x = rospy.get_param('~twist_linear_x', 0.5)
     
     # Create publishers
-    #if twist_cmd_topic!= "":
-        #pubtwist = rospy.Publisher(twist_cmd_topic, Twist, queue_size=10)
-
-    #if vel_cmd_topic!= "":
     pubbool = rospy.Publisher(signal_cmd_topic, Bool, queue_size=10)
 
     # ______________________________________________________________________________
@@ -205,7 +190,6 @@ def main():
     for name in dict_images.keys():
         for key in dict_images[name]['images']:
             dict_images[name]['images'][key] = cv2.GaussianBlur(dict_images[name]['images'][key], (3, 3), 0)
-            #cv2.imshow(name + ' ' + key, dict_images[name]['images'][key])
 
     # ______________________________________________________________________________
 
@@ -244,11 +228,6 @@ def main():
         max_key = ''
 
 
-        ##cv2.imshow('Robot View Processed', resized_)
-        #cv2.imshow('Robot View', img_rbg)
-        #cv2.imshow('Robot View used', frame)
-        #cv2.waitKey(1)
-
         # For each image:
         for name in dict_images.keys():
             for key in dict_images[name]['images']:
@@ -264,7 +243,6 @@ def main():
                     max_name = name
                     max_key = key
 
-        #print (max_res, max_key)
 
         if max_res > detection_threshold:
 
@@ -295,17 +273,6 @@ def main():
             elif max_name == "pStop":
                 velbool = False
 
-        # Send twist or bool
-        #if twist_cmd_topic != "":
-        #    twist.linear.x = vel
-        #    twist.linear.y = 0
-        #    twist.linear.z = 0
-        #    twist.angular.x = 0
-        #    twist.angular.y = 0
-        #    twist.angular.z = 0
-        #    pubtwist.publish(twist)
-
-        #if vel_cmd_topic != "":
         pubbool.publish(velbool)
 
         # Show image

From e33aa4cd0c51a2560c7280f64c3b96a4efa81724 Mon Sep 17 00:00:00 2001
From: Manuel <gomesnelito@gmail.com>
Date: Wed, 13 Oct 2021 18:30:55 +0100
Subject: [PATCH 03/11] Introduced a threshold to only publish on /signal_vel
 after a few consecutive signal detections

---
 .../scripts/signal_panel_recognition.py         | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/signal_recognition/scripts/signal_panel_recognition.py b/signal_recognition/scripts/signal_panel_recognition.py
index 700457da..81ec3bd9 100755
--- a/signal_recognition/scripts/signal_panel_recognition.py
+++ b/signal_recognition/scripts/signal_panel_recognition.py
@@ -82,7 +82,9 @@ def main():
     global begin_img
     begin_img = False
     velbool = False
-
+    count_stop = 0
+    count_start = 0
+    count_max = 5
 
     # Init Node
     rospy.init_node('ml_driving', anonymous=False)
@@ -202,7 +204,7 @@ def main():
                      Image, message_RGB_ReceivedCallback)
 
 
-    rate = rospy.Rate(10)
+    rate = rospy.Rate(30)
 
     while not rospy.is_shutdown():
 
@@ -270,10 +272,19 @@ def main():
             # Defining and publishing the velocity of the car in regards to the signal seen
             if max_name == "pForward":
                 velbool = True
+                count_start = count_start + 1
+                count_stop = 0
             elif max_name == "pStop":
                 velbool = False
+                count_stop = count_stop + 1
+                count_start = 0
+
+            if count_stop >= count_max or count_start >= count_max:
+                pubbool.publish(velbool)
 
-        pubbool.publish(velbool)
+        else:
+            count_stop = 0
+            count_start = 0
 
         # Show image
         cv2.imshow("Frame", img_rbg)

From 14b9e115694fc09a31494fc339655dbf960908c0 Mon Sep 17 00:00:00 2001
From: Manuel <gomesnelito@gmail.com>
Date: Wed, 20 Oct 2021 15:52:10 +0100
Subject: [PATCH 04/11] Removing lines of code not used

---
 .../scripts/signal_panel_recognition.py       | 57 +------------------
 1 file changed, 2 insertions(+), 55 deletions(-)

diff --git a/signal_recognition/scripts/signal_panel_recognition.py b/signal_recognition/scripts/signal_panel_recognition.py
index cfd2340e..045c2f48 100755
--- a/signal_recognition/scripts/signal_panel_recognition.py
+++ b/signal_recognition/scripts/signal_panel_recognition.py
@@ -1,35 +1,18 @@
 #!/usr/bin/env python3
 
 # Imports
-#import argparse
 import cv2
-from csv import writer
-#import copy
 import numpy as np
 import rospy
 from std_msgs.msg import Bool
-from geometry_msgs.msg._Twist import Twist
 from sensor_msgs.msg._Image import Image
 from cv_bridge.core import CvBridge
-from datetime import datetime
-#from tensorflow.keras.models import load_model
 import pathlib
-#import os
-#import string
 
 global img_rbg
 global bridge
 global begin_img
 
-# not used by now
-def preProcess(img):
-    img = cv2.cvtColor(img, cv2.COLOR_RGB2YUV)
-    img = cv2.GaussianBlur(img,  (3, 3), 0)
-    img = cv2.resize(img, (200, 66))
-    img = img/255
-
-    return img
-
 
 def message_RGB_ReceivedCallback(message):
     global img_rbg
@@ -48,7 +31,6 @@ def main():
     # Import Parameters
     scale_import = 0.1  # The scale of the first image, related to the imported one.
     N_red = 2  # Number of piramidizations to apply to each image.
-    factor_red = 0.8
 
     # Font Parameters
     subtitle_offset = -10
@@ -62,13 +44,9 @@ def main():
     line_thickness = 3
 
     # Detection Parameters
-
     scale_cap = 0.4
     detection_threshold = 0.85
 
-    # Initial velocity
-    vel = 0
-
     # ______________________________________________________________________________
 
     # Images to import and Images Info
@@ -91,22 +69,14 @@ def main():
     begin_img = False
     velbool = False
 
-    #twist = Twist()
-
     # Init Node
     rospy.init_node('ml_driving', anonymous=False)
 
     # Get parameters
-    image_raw_topic = rospy.get_param('~image_raw_topic', '/ackermann_vehicle/camera2/rgb/image_raw') 
-    twist_cmd_topic = rospy.get_param('~twist_cmd_topic', '/cmd_vel')
+    image_raw_topic = rospy.get_param('~image_raw_topic', '/ackermann_vehicle/camera2/rgb/image_raw')
     signal_cmd_topic = rospy.get_param('~signal_cmd_topic', '/signal_vel')
-    twist_linear_x = rospy.get_param('~twist_linear_x', 0.5)
     
     # Create publishers
-    #if twist_cmd_topic!= "":
-        #pubtwist = rospy.Publisher(twist_cmd_topic, Twist, queue_size=10)
-
-    #if vel_cmd_topic!= "":
     pubbool = rospy.Publisher(signal_cmd_topic, Bool, queue_size=10)
 
     # ______________________________________________________________________________
@@ -205,7 +175,6 @@ def main():
     for name in dict_images.keys():
         for key in dict_images[name]['images']:
             dict_images[name]['images'][key] = cv2.GaussianBlur(dict_images[name]['images'][key], (3, 3), 0)
-            #cv2.imshow(name + ' ' + key, dict_images[name]['images'][key])
 
     # ______________________________________________________________________________
 
@@ -225,11 +194,8 @@ def main():
         if begin_img == False:
             continue
 
-        #resized_ = preProcess(img_rbg)
-
         width_frame = img_rbg.shape[1]
         height_frame = img_rbg.shape[0]
-        #default_dim = (width_frame, height_frame)
         reduced_dim = (int(width_frame * scale_cap), int(height_frame * scale_cap))
         frame = cv2.resize(img_rbg, reduced_dim)
 
@@ -244,11 +210,6 @@ def main():
         max_key = ''
 
 
-        ##cv2.imshow('Robot View Processed', resized_)
-        #cv2.imshow('Robot View', img_rbg)
-        #cv2.imshow('Robot View used', frame)
-        #cv2.waitKey(1)
-
         # For each image:
         for name in dict_images.keys():
             for key in dict_images[name]['images']:
@@ -264,13 +225,11 @@ def main():
                     max_name = name
                     max_key = key
 
-        #print (max_res, max_key)
 
         if max_res > detection_threshold:
 
             max_width = int(dict_images[max_name]['images'][max_key].shape[1] / scale_cap)
             max_height = int(dict_images[max_name]['images'][max_key].shape[0] / scale_cap)
-            max_dim = (max_width, max_height)
 
             for pt in zip(*max_loc[::-1]):
                 pt = tuple(int(pti / scale_cap) for pti in pt)
@@ -278,8 +237,6 @@ def main():
                             dict_colors.get(dict_images[max_name]['color']), line_thickness)
                 text = 'Detected: ' + max_name + ' ' + max_key + ' > ' + dict_images[max_name]['type'] + ': ' + \
                     dict_images[max_name]['title']
-                
-                #print(text)
 
                 origin = (pt[0], pt[1] + subtitle_offset)
                 origin_2 = (0, height_frame + subtitle_2_offset)
@@ -295,17 +252,7 @@ def main():
             elif max_name == "pStop":
                 velbool = False
 
-        # Send twist or bool
-        #if twist_cmd_topic != "":
-        #    twist.linear.x = vel
-        #    twist.linear.y = 0
-        #    twist.linear.z = 0
-        #    twist.angular.x = 0
-        #    twist.angular.y = 0
-        #    twist.angular.z = 0
-        #    pubtwist.publish(twist)
-
-        #if vel_cmd_topic != "":
+        # Send bool
         pubbool.publish(velbool)
 
         # Show image

From eb4ac437eb5758395bc04b1b6293793991f26556 Mon Sep 17 00:00:00 2001
From: BrunoMonteiro <brunomonteiro98@ua.pt>
Date: Wed, 20 Oct 2021 16:39:57 +0100
Subject: [PATCH 05/11]  changed signal fps from 10 to 30

---
 signal_recognition/scripts/signal_panel_recognition.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/signal_recognition/scripts/signal_panel_recognition.py b/signal_recognition/scripts/signal_panel_recognition.py
index 045c2f48..53e90f3a 100755
--- a/signal_recognition/scripts/signal_panel_recognition.py
+++ b/signal_recognition/scripts/signal_panel_recognition.py
@@ -187,7 +187,7 @@ def main():
                      Image, message_RGB_ReceivedCallback)
 
 
-    rate = rospy.Rate(10)
+    rate = rospy.Rate(30)
 
     while not rospy.is_shutdown():
 

From 237e349dcfae8fc9042bfede08994df4e3cef0af Mon Sep 17 00:00:00 2001
From: Manuel <gomesnelito@gmail.com>
Date: Wed, 20 Oct 2021 18:25:49 +0100
Subject: [PATCH 06/11] hotfixes for launch file without kinects

---
 physical_bringup/launch/modules/driving_cnn1.launch   | 2 +-
 physical_bringup/launch/modules/driving_cnn2a.launch  | 2 +-
 physical_bringup/launch/traxxas_drive1.launch         | 4 ----
 physical_bringup/launch/traxxas_drive2a.launch        | 5 -----
 physical_bringup/launch/traxxas_drive2a_kinect.launch | 5 -----
 5 files changed, 2 insertions(+), 16 deletions(-)

diff --git a/physical_bringup/launch/modules/driving_cnn1.launch b/physical_bringup/launch/modules/driving_cnn1.launch
index b81fce09..744f0291 100644
--- a/physical_bringup/launch/modules/driving_cnn1.launch
+++ b/physical_bringup/launch/modules/driving_cnn1.launch
@@ -4,7 +4,7 @@
   <arg name="twist_cmd_topic" default="/android_input_dir" />
   <arg name="vel_cmd_topic" default="android_input_vel" />
   <arg name="model" default="" />
-  <arg name="signal_cmd_topic" default="/signal_vel"/>
+  <arg name="signal_cmd_topic" default=""/>
   
   <include file="$(find cnn)/launch/driving1.launch">
     <arg name="image_raw_topic" value="$(arg image_raw_topic)" />
diff --git a/physical_bringup/launch/modules/driving_cnn2a.launch b/physical_bringup/launch/modules/driving_cnn2a.launch
index 0d68273e..1c18fdbb 100644
--- a/physical_bringup/launch/modules/driving_cnn2a.launch
+++ b/physical_bringup/launch/modules/driving_cnn2a.launch
@@ -4,7 +4,7 @@
   <arg name="twist_cmd_topic" default="/android_input_dir" />
   <arg name="vel_cmd_topic" default="android_input_vel" />
   <arg name="model" default="" />
-  <arg name="signal_cmd_topic" default="/signal_vel"/>
+  <arg name="signal_cmd_topic" default=""/>
   
   <include file="$(find cnn)/launch/driving2a.launch">
     <arg name="image_raw_topic" value="$(arg image_raw_topic)" />
diff --git a/physical_bringup/launch/traxxas_drive1.launch b/physical_bringup/launch/traxxas_drive1.launch
index c3ed09b0..178c7662 100644
--- a/physical_bringup/launch/traxxas_drive1.launch
+++ b/physical_bringup/launch/traxxas_drive1.launch
@@ -1,14 +1,11 @@
 <launch>
 
     <arg name="model" default="" />
-    <arg name="twist_linear_x" default="1" />
-
     <arg name="twist_dir_topic" default="/android_input_dir"/>
     <arg name="int_dir_topic" default="/pub_dir"/>
     <arg name="int_vel_topic" default="/pub_vel"/>
     <arg name="int_vel_max" default="108"/>
     <arg name="vel_cmd_topic" default="/android_input_vel"/>
-
     <arg name="camera_topic" default="/real_camera"/>
     <arg name="int_camera_id" default="2"/>   
 
@@ -18,7 +15,6 @@
 
         <include file="$(find physical_bringup)/launch/modules/driving_cnn1.launch" >
             <arg name="model" value="$(arg model)"/>
-            <arg name="twist_linear_x" value="$(arg twist_linear_x)"/>
             <arg name="vel_cmd_topic" value="$(arg vel_cmd_topic)"/>
         </include>
 
diff --git a/physical_bringup/launch/traxxas_drive2a.launch b/physical_bringup/launch/traxxas_drive2a.launch
index 5a0e2f35..8fd4622e 100644
--- a/physical_bringup/launch/traxxas_drive2a.launch
+++ b/physical_bringup/launch/traxxas_drive2a.launch
@@ -1,9 +1,6 @@
 <launch>
 
     <arg name="model" default="" />
-    <arg name="float_cmd_topic" default="" />
-    <arg name="twist_linear_x" default="1" />
-
     <arg name="twist_dir_topic" default="/android_input_dir"/>
     <arg name="int_dir_topic" default="/pub_dir"/>
     <arg name="int_vel_topic" default="/pub_vel"/>
@@ -19,8 +16,6 @@
 
         <include file="$(find physical_bringup)/launch/modules/driving_cnn2a.launch" >
             <arg name="model" value="$(arg model)"/>
-            <arg name="float_cmd_topic" value="$(arg float_cmd_topic)"/>
-            <arg name="twist_linear_x" value="$(arg twist_linear_x)"/>
             <arg name="vel_cmd_topic" value="$(arg vel_cmd_topic)"/>
         </include>
 
diff --git a/physical_bringup/launch/traxxas_drive2a_kinect.launch b/physical_bringup/launch/traxxas_drive2a_kinect.launch
index 89a29976..2d75fe55 100644
--- a/physical_bringup/launch/traxxas_drive2a_kinect.launch
+++ b/physical_bringup/launch/traxxas_drive2a_kinect.launch
@@ -1,9 +1,6 @@
 <launch>
 
     <arg name="model" default="" />
-    <arg name="float_cmd_topic" default="" />
-    <arg name="twist_linear_x" default="1" />
-
     <arg name="twist_dir_topic" default="/android_input_dir"/>
     <arg name="int_dir_topic" default="/pub_dir"/>
     <arg name="int_vel_topic" default="/pub_vel"/>
@@ -18,8 +15,6 @@
 
         <include file="$(find physical_bringup)/launch/modules/driving_cnn2a.launch" >
             <arg name="model" value="$(arg model)"/>
-            <arg name="float_cmd_topic" value="$(arg float_cmd_topic)"/>
-            <arg name="twist_linear_x" value="$(arg twist_linear_x)"/>
             <arg name="vel_cmd_topic" value="$(arg vel_cmd_topic)"/>
             <arg name="image_raw_topic" value="$(arg image_raw_topic)"/>
         </include>

From 771569d121b35d78281ef9e2d70ea58452a7e2f7 Mon Sep 17 00:00:00 2001
From: Manuel <gomesnelito@gmail.com>
Date: Wed, 20 Oct 2021 19:03:20 +0100
Subject: [PATCH 07/11] Test creation of csv

---
 .../scripts/signal_panel_recognition.py       | 35 ++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/signal_recognition/scripts/signal_panel_recognition.py b/signal_recognition/scripts/signal_panel_recognition.py
index 53e90f3a..7e421773 100755
--- a/signal_recognition/scripts/signal_panel_recognition.py
+++ b/signal_recognition/scripts/signal_panel_recognition.py
@@ -8,6 +8,10 @@
 from sensor_msgs.msg._Image import Image
 from cv_bridge.core import CvBridge
 import pathlib
+from datetime import datetime
+import pandas as pd
+import signal
+import sys
 
 global img_rbg
 global bridge
@@ -24,8 +28,17 @@ def message_RGB_ReceivedCallback(message):
     begin_img = True
 
 
-def main():
+def signal_handler(sig, frame):
+    global driving_log
+    global log_path
+
+    rospy.loginfo('You pressed Ctrl+C!')
+    driving_log.to_csv(log_path + '/driving_log.csv', mode='a', index=False, header=False)
+    sys.exit(0)
 
+def main():
+    global driving_log
+    global log_path
     # PARAMETERS__________________________________________________________________
 
     # Import Parameters
@@ -79,6 +92,17 @@ def main():
     # Create publishers
     pubbool = rospy.Publisher(signal_cmd_topic, Bool, queue_size=10)
 
+    # Define path for .csv
+    s = str(pathlib.Path(__file__).parent.absolute())
+    log_path = s + '/../log/'
+    rospy.loginfo(log_path)
+
+    # Create pandas dataframe
+    driving_log = pd.DataFrame(columns=['Time', 'Signal', 'Resolution'])
+
+    # set handler on termination
+    signal.signal(signal.SIGINT, signal_handler)
+
     # ______________________________________________________________________________
     
     path = str(pathlib.Path(__file__).parent.absolute())
@@ -226,6 +250,15 @@ def main():
                     max_key = key
 
 
+        # Write log files
+        curr_time = datetime.datetime.now()
+        time_str = str(curr_time.year) + '_' + str(curr_time.month) + '_' + str(curr_time.day) + '__' + str(
+            curr_time.hour) + '_' + str(curr_time.minute) + '_' + str(curr_time.second) + '__' + str(
+            curr_time.microsecond)
+        # add image, angle and velocity to the driving_log pandas
+        row = pd.DataFrame([[time_str, max_name, max_res]], columns=['Time', 'Signal', 'Recognition'])
+        driving_log = driving_log.append(row, ignore_index=True)
+
         if max_res > detection_threshold:
 
             max_width = int(dict_images[max_name]['images'][max_key].shape[1] / scale_cap)

From b4b5e5cc45a89905d32cb0222436a63ad6d30867 Mon Sep 17 00:00:00 2001
From: Manuel <gomesnelito@gmail.com>
Date: Fri, 22 Oct 2021 15:20:19 +0100
Subject: [PATCH 08/11] Creates log file for signal recognition, with the
 signal detected and it's resolution

---
 .../scripts/signal_panel_recognition.py       | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/signal_recognition/scripts/signal_panel_recognition.py b/signal_recognition/scripts/signal_panel_recognition.py
index f0cb1bac..6d47c276 100755
--- a/signal_recognition/scripts/signal_panel_recognition.py
+++ b/signal_recognition/scripts/signal_panel_recognition.py
@@ -30,15 +30,16 @@ def message_RGB_ReceivedCallback(message):
 
 
 def signal_handler(sig, frame):
-    global driving_log
+    global signal_log
     global log_path
 
     rospy.loginfo('You pressed Ctrl+C!')
-    driving_log.to_csv(log_path + '/driving_log.csv', mode='a', index=False, header=False)
+    signal_log.to_csv(log_path + '/signal_log.csv', mode='a', index=False, header=False)
+    print(signal_log)
     sys.exit(0)
 
 def main():
-    global driving_log
+    global signal_log
     global log_path
     # PARAMETERS__________________________________________________________________
 
@@ -99,11 +100,11 @@ def main():
 
     # Define path for .csv
     s = str(pathlib.Path(__file__).parent.absolute())
-    log_path = s + '/../log/'
+    log_path = s + '/log/'
     rospy.loginfo(log_path)
 
     # Create pandas dataframe
-    driving_log = pd.DataFrame(columns=['Time', 'Signal', 'Resolution'])
+    signal_log = pd.DataFrame(columns=['Time', 'Signal', 'Resolution'])
 
     # set handler on termination
     signal.signal(signal.SIGINT, signal_handler)
@@ -256,13 +257,13 @@ def main():
 
 
         # Write log files
-        curr_time = datetime.datetime.now()
+        curr_time = datetime.now()
         time_str = str(curr_time.year) + '_' + str(curr_time.month) + '_' + str(curr_time.day) + '__' + str(
             curr_time.hour) + '_' + str(curr_time.minute) + '_' + str(curr_time.second) + '__' + str(
             curr_time.microsecond)
-        # add image, angle and velocity to the driving_log pandas
-        row = pd.DataFrame([[time_str, max_name, max_res]], columns=['Time', 'Signal', 'Recognition'])
-        driving_log = driving_log.append(row, ignore_index=True)
+        # add image, angle and velocity to the signal_log pandas
+        row = pd.DataFrame([[time_str, max_name, max_res]], columns=['Time', 'Signal', 'Resolution'])
+        signal_log = signal_log.append(row, ignore_index=True)
         
         if max_res > detection_threshold:
 

From 6a08c5293397d6b45a5acdb029f09e4e554cd2bb Mon Sep 17 00:00:00 2001
From: Manuel <gomesnelito@gmail.com>
Date: Fri, 22 Oct 2021 15:38:14 +0100
Subject: [PATCH 09/11] Different names for each log file

---
 signal_recognition/scripts/signal_panel_recognition.py | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/signal_recognition/scripts/signal_panel_recognition.py b/signal_recognition/scripts/signal_panel_recognition.py
index 6d47c276..f5951231 100755
--- a/signal_recognition/scripts/signal_panel_recognition.py
+++ b/signal_recognition/scripts/signal_panel_recognition.py
@@ -34,8 +34,10 @@ def signal_handler(sig, frame):
     global log_path
 
     rospy.loginfo('You pressed Ctrl+C!')
-    signal_log.to_csv(log_path + '/signal_log.csv', mode='a', index=False, header=False)
-    print(signal_log)
+    curr_time = datetime.now()
+    time_str = str(curr_time.year) + '_' + str(curr_time.month) + '_' + str(curr_time.day) + '__' + str(
+        curr_time.hour) + '_' + str(curr_time.minute)
+    signal_log.to_csv(log_path + '/signal_log_' + time_str + '.csv', mode='a', index=False, header=False)
     sys.exit(0)
 
 def main():

From 6e1d29fdacd2ede90e6a035b60525bdff1525951 Mon Sep 17 00:00:00 2001
From: Manuel <gomesnelito@gmail.com>
Date: Wed, 27 Oct 2021 15:01:48 +0100
Subject: [PATCH 10/11] Create new folder for log files and rounded the
 percentages

---
 signal_recognition/scripts/signal_panel_recognition.py | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/signal_recognition/scripts/signal_panel_recognition.py b/signal_recognition/scripts/signal_panel_recognition.py
index f5951231..19e871ec 100755
--- a/signal_recognition/scripts/signal_panel_recognition.py
+++ b/signal_recognition/scripts/signal_panel_recognition.py
@@ -12,6 +12,7 @@
 import pandas as pd
 import signal
 import sys
+import os
 
 
 global img_rbg
@@ -105,6 +106,10 @@ def main():
     log_path = s + '/log/'
     rospy.loginfo(log_path)
 
+    # If the path does not exist, create it
+    if not os.path.exists(log_path):
+        os.makedirs(log_path)
+
     # Create pandas dataframe
     signal_log = pd.DataFrame(columns=['Time', 'Signal', 'Resolution'])
 
@@ -264,7 +269,9 @@ def main():
             curr_time.hour) + '_' + str(curr_time.minute) + '_' + str(curr_time.second) + '__' + str(
             curr_time.microsecond)
         # add image, angle and velocity to the signal_log pandas
-        row = pd.DataFrame([[time_str, max_name, max_res]], columns=['Time', 'Signal', 'Resolution'])
+        max_res_round = round(max_res, 3)
+        print(max_res_round)
+        row = pd.DataFrame([[time_str, max_name, max_res_round]], columns=['Time', 'Signal', 'Resolution'])
         signal_log = signal_log.append(row, ignore_index=True)
         
         if max_res > detection_threshold:

From 3d75f6e92f515b635fd218b425b6c291e4e4bb76 Mon Sep 17 00:00:00 2001
From: BrunoMonteiro <brunomonteiro98@ua.pt>
Date: Wed, 27 Oct 2021 15:46:56 +0100
Subject: [PATCH 11/11] removed vel_cmd_topic from drive1 and drive2

---
 physical_bringup/launch/traxxas_drive_signal1.launch  | 1 -
 physical_bringup/launch/traxxas_drive_signal2a.launch | 1 -
 2 files changed, 2 deletions(-)

diff --git a/physical_bringup/launch/traxxas_drive_signal1.launch b/physical_bringup/launch/traxxas_drive_signal1.launch
index 4970713b..71ec8310 100644
--- a/physical_bringup/launch/traxxas_drive_signal1.launch
+++ b/physical_bringup/launch/traxxas_drive_signal1.launch
@@ -33,7 +33,6 @@
         </include>
 
         <include file="$(find physical_bringup)/launch/modules/signal_panel_recognition.launch">
-            <arg name="vel_cmd_topic" value="$(arg vel_cmd_topic)"/>
             <arg name="signal_cmd_topic" value="$(arg signal_cmd_topic)"/>
             <arg name="image_raw_topic" value="$(arg camera_topic)"/>
         </include>
diff --git a/physical_bringup/launch/traxxas_drive_signal2a.launch b/physical_bringup/launch/traxxas_drive_signal2a.launch
index b66e6e72..4755d451 100644
--- a/physical_bringup/launch/traxxas_drive_signal2a.launch
+++ b/physical_bringup/launch/traxxas_drive_signal2a.launch
@@ -33,7 +33,6 @@
         </include>
 
         <include file="$(find physical_bringup)/launch/modules/signal_panel_recognition.launch">
-            <arg name="vel_cmd_topic" value="$(arg vel_cmd_topic)"/>
             <arg name="signal_cmd_topic" value="$(arg signal_cmd_topic)"/>
             <arg name="image_raw_topic" value="$(arg camera_topic)"/>
         </include>