From 2a774c4f4f74504ec2e9be3e428c6dce4536930c Mon Sep 17 00:00:00 2001
From: Paul-Winpenny <plw1g21@soton.ac.uk>
Date: Thu, 14 Nov 2024 15:58:58 +0000
Subject: [PATCH] Added the scripts for connecting and handling commands into
 the api_node

---
 .../robobin/build/lib/robobin/api_node.py     |  30 +++-
 .../build/lib/robobin/connection_manager.py   |  67 ++++++++
 .../build/lib/robobin/message_handler.py      |  40 +++++
 ros2/build/robobin/install.log                |   4 +
 .../__pycache__/sitecustomize.cpython-312.pyc | Bin 418 -> 418 bytes
 .../robobin/robobin.egg-info/SOURCES.txt      |   2 +
 .../robobin-0.0.0-py3.12.egg-info/SOURCES.txt |   2 +
 .../__pycache__/api_node.cpython-312.pyc      | Bin 1460 -> 2924 bytes
 .../connection_manager.cpython-312.pyc        | Bin 0 -> 4957 bytes
 .../message_handler.cpython-312.pyc           | Bin 0 -> 2633 bytes
 .../site-packages/robobin/api_node.py         |  30 +++-
 .../robobin/connection_manager.py             |  67 ++++++++
 .../site-packages/robobin/message_handler.py  |  40 +++++
 ros2/log/build_2024-11-14_15-50-09/events.log | 143 ++++++++++++++++++
 .../build_2024-11-14_15-50-09/logger_all.log  | 129 ++++++++++++++++
 .../robobin/command.log                       |   2 +
 .../robobin/stderr.log                        |   0
 .../robobin/stdout.log                        |  28 ++++
 .../robobin/stdout_stderr.log                 |  28 ++++
 .../robobin/streams.log                       |  30 ++++
 ros2/log/build_2024-11-14_15-55-04/events.log | 138 +++++++++++++++++
 .../build_2024-11-14_15-55-04/logger_all.log  | 129 ++++++++++++++++
 .../robobin/command.log                       |   2 +
 .../robobin/stderr.log                        |   1 +
 .../robobin/stdout.log                        |  22 +++
 .../robobin/stdout_stderr.log                 |  23 +++
 .../robobin/streams.log                       |  25 +++
 ros2/log/build_2024-11-14_15-56-14/events.log | 137 +++++++++++++++++
 .../build_2024-11-14_15-56-14/logger_all.log  | 129 ++++++++++++++++
 .../robobin/command.log                       |   2 +
 .../robobin/stderr.log                        |   0
 .../robobin/stdout.log                        |  22 +++
 .../robobin/stdout_stderr.log                 |  22 +++
 .../robobin/streams.log                       |  24 +++
 ros2/log/build_2024-11-14_15-58-20/events.log | 137 +++++++++++++++++
 .../build_2024-11-14_15-58-20/logger_all.log  | 129 ++++++++++++++++
 .../robobin/command.log                       |   2 +
 .../robobin/stderr.log                        |   0
 .../robobin/stdout.log                        |  22 +++
 .../robobin/stdout_stderr.log                 |  22 +++
 .../robobin/streams.log                       |  24 +++
 ros2/log/latest_build                         |   2 +-
 .../src/robobin/robobin/connection_manager.py |   4 +-
 43 files changed, 1652 insertions(+), 8 deletions(-)
 create mode 100644 ros2/build/robobin/build/lib/robobin/connection_manager.py
 create mode 100644 ros2/build/robobin/build/lib/robobin/message_handler.py
 create mode 100644 ros2/install/robobin/lib/python3.12/site-packages/robobin/__pycache__/connection_manager.cpython-312.pyc
 create mode 100644 ros2/install/robobin/lib/python3.12/site-packages/robobin/__pycache__/message_handler.cpython-312.pyc
 create mode 100644 ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py
 create mode 100644 ros2/install/robobin/lib/python3.12/site-packages/robobin/message_handler.py
 create mode 100644 ros2/log/build_2024-11-14_15-50-09/events.log
 create mode 100644 ros2/log/build_2024-11-14_15-50-09/logger_all.log
 create mode 100644 ros2/log/build_2024-11-14_15-50-09/robobin/command.log
 create mode 100644 ros2/log/build_2024-11-14_15-50-09/robobin/stderr.log
 create mode 100644 ros2/log/build_2024-11-14_15-50-09/robobin/stdout.log
 create mode 100644 ros2/log/build_2024-11-14_15-50-09/robobin/stdout_stderr.log
 create mode 100644 ros2/log/build_2024-11-14_15-50-09/robobin/streams.log
 create mode 100644 ros2/log/build_2024-11-14_15-55-04/events.log
 create mode 100644 ros2/log/build_2024-11-14_15-55-04/logger_all.log
 create mode 100644 ros2/log/build_2024-11-14_15-55-04/robobin/command.log
 create mode 100644 ros2/log/build_2024-11-14_15-55-04/robobin/stderr.log
 create mode 100644 ros2/log/build_2024-11-14_15-55-04/robobin/stdout.log
 create mode 100644 ros2/log/build_2024-11-14_15-55-04/robobin/stdout_stderr.log
 create mode 100644 ros2/log/build_2024-11-14_15-55-04/robobin/streams.log
 create mode 100644 ros2/log/build_2024-11-14_15-56-14/events.log
 create mode 100644 ros2/log/build_2024-11-14_15-56-14/logger_all.log
 create mode 100644 ros2/log/build_2024-11-14_15-56-14/robobin/command.log
 create mode 100644 ros2/log/build_2024-11-14_15-56-14/robobin/stderr.log
 create mode 100644 ros2/log/build_2024-11-14_15-56-14/robobin/stdout.log
 create mode 100644 ros2/log/build_2024-11-14_15-56-14/robobin/stdout_stderr.log
 create mode 100644 ros2/log/build_2024-11-14_15-56-14/robobin/streams.log
 create mode 100644 ros2/log/build_2024-11-14_15-58-20/events.log
 create mode 100644 ros2/log/build_2024-11-14_15-58-20/logger_all.log
 create mode 100644 ros2/log/build_2024-11-14_15-58-20/robobin/command.log
 create mode 100644 ros2/log/build_2024-11-14_15-58-20/robobin/stderr.log
 create mode 100644 ros2/log/build_2024-11-14_15-58-20/robobin/stdout.log
 create mode 100644 ros2/log/build_2024-11-14_15-58-20/robobin/stdout_stderr.log
 create mode 100644 ros2/log/build_2024-11-14_15-58-20/robobin/streams.log

diff --git a/ros2/build/robobin/build/lib/robobin/api_node.py b/ros2/build/robobin/build/lib/robobin/api_node.py
index 2a718548..df71bb2f 100644
--- a/ros2/build/robobin/build/lib/robobin/api_node.py
+++ b/ros2/build/robobin/build/lib/robobin/api_node.py
@@ -1,24 +1,48 @@
 # robobin/api_node.py
-
 import rclpy
 from rclpy.node import Node
+from .message_handler import MessageHandler
+from .connection_manager import ConnectionManager
 
 class ApiNode(Node):
     def __init__(self):
         super().__init__('api_node')
         self.get_logger().info("ApiNode has been started.")
 
+        # Initialize handlers
+        self.message_handler = MessageHandler(self)
+        self.connection_manager = ConnectionManager(self)
+
+        # Start connection manager
+        self.connection_manager.start()
+
+    def handle_client_connection(self, client_socket):
+        """Handles incoming TCP client connections."""
+        try:
+            while True:
+                data = client_socket.recv(1024).decode()
+                if not data:
+                    break
+                command, *args = data.split(" ", 1)
+                self.message_handler.handle_message(client_socket, command, args[0] if args else None)
+        finally:
+            client_socket.close()
+            self.get_logger().info("Client disconnected.")
+
+    def shutdown(self):
+        """Stops the connection manager."""
+        self.connection_manager.stop()
+
 def main(args=None):
     rclpy.init(args=args)
     node = ApiNode()
     try:
         rclpy.spin(node)
     except KeyboardInterrupt:
-        pass
+        node.shutdown()
     finally:
         node.destroy_node()
         rclpy.shutdown()
 
 if __name__ == '__main__':
     main()
-
diff --git a/ros2/build/robobin/build/lib/robobin/connection_manager.py b/ros2/build/robobin/build/lib/robobin/connection_manager.py
new file mode 100644
index 00000000..555db1a2
--- /dev/null
+++ b/ros2/build/robobin/build/lib/robobin/connection_manager.py
@@ -0,0 +1,67 @@
+# robobin/connection_manager.py
+import socket
+import threading
+import time
+
+class ConnectionManager:
+    def __init__(self, api_node, udp_ip="255.255.255.255", udp_port=5005, listen_port=5006):
+        self.api_node = api_node
+        self.UDP_IP = udp_ip
+        self.UDP_PORT = udp_port
+        self.LISTEN_PORT = listen_port
+        self.stop_event = threading.Event()
+
+    def start(self):
+        """Starts listening for connections and broadcasting presence."""
+        self.listen_thread = threading.Thread(target=self.listen_for_connections)
+        self.broadcast_thread = threading.Thread(target=self.broadcast_presence)
+        self.listen_thread.start()
+        self.broadcast_thread.start()
+
+    def listen_for_connections(self):
+        """Listens for UDP 'CONNECT' messages and sets up TCP connections."""
+        udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+        udp_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+        udp_sock.bind(('', self.LISTEN_PORT))
+
+        while not self.stop_event.is_set():
+            try:
+                data, addr = udp_sock.recvfrom(1024)
+                if data.decode() == "CONNECT":
+                    print(f"Connection request from {addr}")
+                    tcp_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+                    tcp_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+                    tcp_sock.bind(('', self.LISTEN_PORT))
+                    tcp_sock.listen(1)
+                    client_socket, client_addr = tcp_sock.accept()
+                    print(f"Client connected from {client_addr}")
+                    threading.Thread(target=self.api_node.handle_client_connection, args=(client_socket,)).start()
+            except socket.timeout:
+                continue
+            except OSError:
+                break
+
+        udp_sock.close()
+        print("Stopped listening for connections.")
+
+    def broadcast_presence(self):
+        """Broadcasts presence periodically over UDP."""
+        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+        sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
+
+        while not self.stop_event.is_set():
+            try:
+                location = "(0,0)" #At some point this will be retrieved from navigation node
+                message = f"ROBOBIN_PRESENT {location}".encode()
+                sock.sendto(message, (self.UDP_IP, self.UDP_PORT))
+                print("Broadcasting presence.")
+                time.sleep(5)
+            except OSError:
+                break
+
+        sock.close()
+        print("Stopped broadcasting presence.")
+
+    def stop(self):
+        """Stops the connection manager."""
+        self.stop_event.set()
diff --git a/ros2/build/robobin/build/lib/robobin/message_handler.py b/ros2/build/robobin/build/lib/robobin/message_handler.py
new file mode 100644
index 00000000..46f3ffa3
--- /dev/null
+++ b/ros2/build/robobin/build/lib/robobin/message_handler.py
@@ -0,0 +1,40 @@
+# robobin/message_handler.py
+
+class MessageHandler:
+    def __init__(self, api_node):
+        self.api_node = api_node
+        self.handlers = {
+            "PING": self.handle_ping,
+            "TIME": self.handle_time_request,
+            "MANUALCTRL": self.handle_manual_control
+        }
+
+    def handle_message(self, client_socket, command, data):
+        """Routes the command to the appropriate handler."""
+        handler = self.handlers.get(command, self.handle_unknown_message)
+        handler(client_socket, data)
+
+    def handle_ping(self, client_socket, _):
+        """Responds with a PONG message."""
+        client_socket.sendall(b"PONG")
+
+    def handle_time_request(self, client_socket, _):
+        """Sends the current server time."""
+        client_socket.sendall(time.ctime().encode())
+
+    def handle_manual_control(self, client_socket, message):
+        """Handles manual control commands: W, A, S, D."""
+        directions = {
+            "W": (1, 0, 0),    # Move forward
+            "A": (0, 0, 1),    # Turn left
+            "S": (-1, 0, 0),   # Move backward
+            "D": (0, 0, -1)    # Turn right
+        }
+        response_data = directions.get(message.strip().upper(), (0, 0, 0))
+        response = f"Manual control command received: {response_data}".encode()
+        client_socket.sendall(response)
+        print("Processed manual control command:", response_data)
+
+    def handle_unknown_message(self, client_socket, _):
+        """Handles unknown commands."""
+        client_socket.sendall(b"Unknown command")
diff --git a/ros2/build/robobin/install.log b/ros2/build/robobin/install.log
index 4a9c6445..17bf3e52 100644
--- a/ros2/build/robobin/install.log
+++ b/ros2/build/robobin/install.log
@@ -1,5 +1,9 @@
+/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py
+/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/message_handler.py
 /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/__init__.py
 /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/api_node.py
+/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/__pycache__/connection_manager.cpython-312.pyc
+/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/__pycache__/message_handler.cpython-312.pyc
 /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/__pycache__/__init__.cpython-312.pyc
 /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/__pycache__/api_node.cpython-312.pyc
 /home/paulw/GitLab/robobin/ros2/install/robobin/share/ament_index/resource_index/packages/robobin
diff --git a/ros2/build/robobin/prefix_override/__pycache__/sitecustomize.cpython-312.pyc b/ros2/build/robobin/prefix_override/__pycache__/sitecustomize.cpython-312.pyc
index feaa59dcc0d6bb5de1d7dd8f69eb761726d2f4eb..3323683d40cb9466c99f75e9a12fddcbdca3cf45 100644
GIT binary patch
delta 19
acmZ3)yoj0WG%qg~0|Nttyxc~v8H@lb2Lsgr

delta 19
acmZ3)yoj0WG%qg~0|Ns?hU7-B8H@lcqy!lN

diff --git a/ros2/build/robobin/robobin.egg-info/SOURCES.txt b/ros2/build/robobin/robobin.egg-info/SOURCES.txt
index 5089152f..e3291132 100644
--- a/ros2/build/robobin/robobin.egg-info/SOURCES.txt
+++ b/ros2/build/robobin/robobin.egg-info/SOURCES.txt
@@ -12,6 +12,8 @@ launch/robobin_launch.py
 resource/robobin
 robobin/__init__.py
 robobin/api_node.py
+robobin/connection_manager.py
+robobin/message_handler.py
 test/test_copyright.py
 test/test_flake8.py
 test/test_pep257.py
\ No newline at end of file
diff --git a/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info/SOURCES.txt b/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info/SOURCES.txt
index 5089152f..e3291132 100644
--- a/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info/SOURCES.txt
+++ b/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info/SOURCES.txt
@@ -12,6 +12,8 @@ launch/robobin_launch.py
 resource/robobin
 robobin/__init__.py
 robobin/api_node.py
+robobin/connection_manager.py
+robobin/message_handler.py
 test/test_copyright.py
 test/test_flake8.py
 test/test_pep257.py
\ No newline at end of file
diff --git a/ros2/install/robobin/lib/python3.12/site-packages/robobin/__pycache__/api_node.cpython-312.pyc b/ros2/install/robobin/lib/python3.12/site-packages/robobin/__pycache__/api_node.cpython-312.pyc
index c24bcabaa0cd17ebb87017d4fc47465640523fe0..943f01b7a41502daf8dd2c2bd95725b994203ab3 100644
GIT binary patch
literal 2924
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
Jfkg^zE&!0<S;YVV

delta 646
zcmaDOwuPJTG%qg~0|Nttrl?u^X~v0s5-9-;3=Gp5QW#Pga~PsPG*b>^E>jc}BLfqI
zJ3|U{3quM^D${CakS+#>DCQLQ6xJ5TD3(;#6t-*)28JRICWcg&)evb0MutkpN=8kN
zmmt2MCgUv@zx<TciRZ*z<QNzj+8L%Zq%uS?rZ7Y?bugqcrZBc}L@{?TR4_)d1T$zd
z-C}nv$OLIfW(4VnVvyA!{5ff|31jkPZYFI;mdWN!%9AHB)yi-(FfddJK(*<`$7kkc
zmc+-iGcYg|t4-EqR^z(LVf`6okS6Qo3+$?loRc_2&3Hl5AS)b-_!t-%idbO;8%P2q
z`=f>7I};PD%?Ac1R+}Pzu>9lz4oOCh$yppFlaH{-PX5io&B!y^kX?4N3a0=+Gb2MJ
zLyti@Lj`jrLpkH*{VYmQ6%#o%#c#1B7Nr+!vfpAYO3o>$yu|`?W)bV;3!E}ew|G)g
zi%W{~E93L>Q&Mkn6lau{q~w?9X)+awGB7aQVgU&kGchnQC@6rPdy6GEF*C17mVtqR
z8|2>X$(mf=oV+(Vcs?*Qvhq%D=2ENYbktxzsLJH1&2Uhi5yaMD2C=o(oCKL~am2@i
zOo)%yWc1TyD-r|Q!UcAi9>}gDP+&vC1Y}2%00RTVN(M+EfP(86hfQvNN@-52U6CRK
y0|O`=i;Wl<7(OsFGBSQ<V_@XHE5IQAg@u{XrX%GG12dz|XRgTs+!8FHU<3d!gOC3J

diff --git a/ros2/install/robobin/lib/python3.12/site-packages/robobin/__pycache__/connection_manager.cpython-312.pyc b/ros2/install/robobin/lib/python3.12/site-packages/robobin/__pycache__/connection_manager.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..9659eeaba4fbe3a118b8d92c4beacc2a31180e38
GIT binary patch
literal 4957
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
RaDQj9Wt98GV9N+G9soe`?h*h1

literal 0
HcmV?d00001

diff --git a/ros2/install/robobin/lib/python3.12/site-packages/robobin/__pycache__/message_handler.cpython-312.pyc b/ros2/install/robobin/lib/python3.12/site-packages/robobin/__pycache__/message_handler.cpython-312.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..806baa5803a62460581c71335453296b2e3695ab
GIT binary patch
literal 2633
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
JL6s3=4gl>-S||Vj

literal 0
HcmV?d00001

diff --git a/ros2/install/robobin/lib/python3.12/site-packages/robobin/api_node.py b/ros2/install/robobin/lib/python3.12/site-packages/robobin/api_node.py
index 2a718548..df71bb2f 100644
--- a/ros2/install/robobin/lib/python3.12/site-packages/robobin/api_node.py
+++ b/ros2/install/robobin/lib/python3.12/site-packages/robobin/api_node.py
@@ -1,24 +1,48 @@
 # robobin/api_node.py
-
 import rclpy
 from rclpy.node import Node
+from .message_handler import MessageHandler
+from .connection_manager import ConnectionManager
 
 class ApiNode(Node):
     def __init__(self):
         super().__init__('api_node')
         self.get_logger().info("ApiNode has been started.")
 
+        # Initialize handlers
+        self.message_handler = MessageHandler(self)
+        self.connection_manager = ConnectionManager(self)
+
+        # Start connection manager
+        self.connection_manager.start()
+
+    def handle_client_connection(self, client_socket):
+        """Handles incoming TCP client connections."""
+        try:
+            while True:
+                data = client_socket.recv(1024).decode()
+                if not data:
+                    break
+                command, *args = data.split(" ", 1)
+                self.message_handler.handle_message(client_socket, command, args[0] if args else None)
+        finally:
+            client_socket.close()
+            self.get_logger().info("Client disconnected.")
+
+    def shutdown(self):
+        """Stops the connection manager."""
+        self.connection_manager.stop()
+
 def main(args=None):
     rclpy.init(args=args)
     node = ApiNode()
     try:
         rclpy.spin(node)
     except KeyboardInterrupt:
-        pass
+        node.shutdown()
     finally:
         node.destroy_node()
         rclpy.shutdown()
 
 if __name__ == '__main__':
     main()
-
diff --git a/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py b/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py
new file mode 100644
index 00000000..555db1a2
--- /dev/null
+++ b/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py
@@ -0,0 +1,67 @@
+# robobin/connection_manager.py
+import socket
+import threading
+import time
+
+class ConnectionManager:
+    def __init__(self, api_node, udp_ip="255.255.255.255", udp_port=5005, listen_port=5006):
+        self.api_node = api_node
+        self.UDP_IP = udp_ip
+        self.UDP_PORT = udp_port
+        self.LISTEN_PORT = listen_port
+        self.stop_event = threading.Event()
+
+    def start(self):
+        """Starts listening for connections and broadcasting presence."""
+        self.listen_thread = threading.Thread(target=self.listen_for_connections)
+        self.broadcast_thread = threading.Thread(target=self.broadcast_presence)
+        self.listen_thread.start()
+        self.broadcast_thread.start()
+
+    def listen_for_connections(self):
+        """Listens for UDP 'CONNECT' messages and sets up TCP connections."""
+        udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+        udp_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+        udp_sock.bind(('', self.LISTEN_PORT))
+
+        while not self.stop_event.is_set():
+            try:
+                data, addr = udp_sock.recvfrom(1024)
+                if data.decode() == "CONNECT":
+                    print(f"Connection request from {addr}")
+                    tcp_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+                    tcp_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+                    tcp_sock.bind(('', self.LISTEN_PORT))
+                    tcp_sock.listen(1)
+                    client_socket, client_addr = tcp_sock.accept()
+                    print(f"Client connected from {client_addr}")
+                    threading.Thread(target=self.api_node.handle_client_connection, args=(client_socket,)).start()
+            except socket.timeout:
+                continue
+            except OSError:
+                break
+
+        udp_sock.close()
+        print("Stopped listening for connections.")
+
+    def broadcast_presence(self):
+        """Broadcasts presence periodically over UDP."""
+        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+        sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
+
+        while not self.stop_event.is_set():
+            try:
+                location = "(0,0)" #At some point this will be retrieved from navigation node
+                message = f"ROBOBIN_PRESENT {location}".encode()
+                sock.sendto(message, (self.UDP_IP, self.UDP_PORT))
+                print("Broadcasting presence.")
+                time.sleep(5)
+            except OSError:
+                break
+
+        sock.close()
+        print("Stopped broadcasting presence.")
+
+    def stop(self):
+        """Stops the connection manager."""
+        self.stop_event.set()
diff --git a/ros2/install/robobin/lib/python3.12/site-packages/robobin/message_handler.py b/ros2/install/robobin/lib/python3.12/site-packages/robobin/message_handler.py
new file mode 100644
index 00000000..46f3ffa3
--- /dev/null
+++ b/ros2/install/robobin/lib/python3.12/site-packages/robobin/message_handler.py
@@ -0,0 +1,40 @@
+# robobin/message_handler.py
+
+class MessageHandler:
+    def __init__(self, api_node):
+        self.api_node = api_node
+        self.handlers = {
+            "PING": self.handle_ping,
+            "TIME": self.handle_time_request,
+            "MANUALCTRL": self.handle_manual_control
+        }
+
+    def handle_message(self, client_socket, command, data):
+        """Routes the command to the appropriate handler."""
+        handler = self.handlers.get(command, self.handle_unknown_message)
+        handler(client_socket, data)
+
+    def handle_ping(self, client_socket, _):
+        """Responds with a PONG message."""
+        client_socket.sendall(b"PONG")
+
+    def handle_time_request(self, client_socket, _):
+        """Sends the current server time."""
+        client_socket.sendall(time.ctime().encode())
+
+    def handle_manual_control(self, client_socket, message):
+        """Handles manual control commands: W, A, S, D."""
+        directions = {
+            "W": (1, 0, 0),    # Move forward
+            "A": (0, 0, 1),    # Turn left
+            "S": (-1, 0, 0),   # Move backward
+            "D": (0, 0, -1)    # Turn right
+        }
+        response_data = directions.get(message.strip().upper(), (0, 0, 0))
+        response = f"Manual control command received: {response_data}".encode()
+        client_socket.sendall(response)
+        print("Processed manual control command:", response_data)
+
+    def handle_unknown_message(self, client_socket, _):
+        """Handles unknown commands."""
+        client_socket.sendall(b"Unknown command")
diff --git a/ros2/log/build_2024-11-14_15-50-09/events.log b/ros2/log/build_2024-11-14_15-50-09/events.log
new file mode 100644
index 00000000..37e1acfe
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-50-09/events.log
@@ -0,0 +1,143 @@
+[0.000000] (-) TimerEvent: {}
+[0.001654] (robobin) JobQueued: {'identifier': 'robobin', 'dependencies': OrderedDict()}
+[0.003226] (robobin) JobStarted: {'identifier': 'robobin'}
+[0.098720] (-) TimerEvent: {}
+[0.199890] (-) TimerEvent: {}
+[0.300926] (-) TimerEvent: {}
+[0.402044] (-) TimerEvent: {}
+[0.503069] (-) TimerEvent: {}
+[0.604080] (-) TimerEvent: {}
+[0.705040] (-) TimerEvent: {}
+[0.805903] (-) TimerEvent: {}
+[0.906810] (-) TimerEvent: {}
+[1.007808] (-) TimerEvent: {}
+[1.108763] (-) TimerEvent: {}
+[1.209720] (-) TimerEvent: {}
+[1.310695] (-) TimerEvent: {}
+[1.411628] (-) TimerEvent: {}
+[1.512637] (-) TimerEvent: {}
+[1.613708] (-) TimerEvent: {}
+[1.714888] (-) TimerEvent: {}
+[1.815986] (-) TimerEvent: {}
+[1.917037] (-) TimerEvent: {}
+[2.018065] (-) TimerEvent: {}
+[2.119133] (-) TimerEvent: {}
+[2.220123] (-) TimerEvent: {}
+[2.321124] (-) TimerEvent: {}
+[2.422131] (-) TimerEvent: {}
+[2.523154] (-) TimerEvent: {}
+[2.624086] (-) TimerEvent: {}
+[2.725062] (-) TimerEvent: {}
+[2.825998] (-) TimerEvent: {}
+[2.926895] (-) TimerEvent: {}
+[3.027837] (-) TimerEvent: {}
+[3.128797] (-) TimerEvent: {}
+[3.229741] (-) TimerEvent: {}
+[3.330706] (-) TimerEvent: {}
+[3.431702] (-) TimerEvent: {}
+[3.532687] (-) TimerEvent: {}
+[3.633666] (-) TimerEvent: {}
+[3.734581] (-) TimerEvent: {}
+[3.835579] (-) TimerEvent: {}
+[3.936594] (-) TimerEvent: {}
+[4.037557] (-) TimerEvent: {}
+[4.138628] (-) TimerEvent: {}
+[4.239605] (-) TimerEvent: {}
+[4.340563] (-) TimerEvent: {}
+[4.441560] (-) TimerEvent: {}
+[4.542589] (-) TimerEvent: {}
+[4.643617] (-) TimerEvent: {}
+[4.744674] (-) TimerEvent: {}
+[4.845683] (-) TimerEvent: {}
+[4.946672] (-) TimerEvent: {}
+[5.047643] (-) TimerEvent: {}
+[5.148620] (-) TimerEvent: {}
+[5.249594] (-) TimerEvent: {}
+[5.350558] (-) TimerEvent: {}
+[5.451526] (-) TimerEvent: {}
+[5.552484] (-) TimerEvent: {}
+[5.653401] (-) TimerEvent: {}
+[5.754404] (-) TimerEvent: {}
+[5.855391] (-) TimerEvent: {}
+[5.956344] (-) TimerEvent: {}
+[6.057367] (-) TimerEvent: {}
+[6.158375] (-) TimerEvent: {}
+[6.259566] (-) TimerEvent: {}
+[6.360691] (-) TimerEvent: {}
+[6.461774] (-) TimerEvent: {}
+[6.517788] (robobin) Command: {'cmd': ['/usr/bin/python3', '-W', 'ignore:setup.py install is deprecated', 'setup.py', 'egg_info', '--egg-base', '../../build/robobin', 'build', '--build-base', '/home/paulw/GitLab/robobin/ros2/build/robobin/build', 'install', '--record', '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log', '--single-version-externally-managed', 'install_data'], 'cwd': '/home/paulw/GitLab/robobin/ros2/src/robobin', 'env': {'LESSOPEN': '| /usr/bin/lesspipe %s', 'USER': 'paulw', 'SSH_CLIENT': '192.168.0.20 57325 22', 'XDG_SESSION_TYPE': 'tty', 'SHLVL': '1', 'LD_LIBRARY_PATH': '/opt/ros/jazzy/lib/aarch64-linux-gnu:/opt/ros/jazzy/lib', 'HOME': '/home/paulw', 'OLDPWD': '/home/paulw/GitLab/robobin/ros2/src', 'SSH_TTY': '/dev/pts/0', 'ROS_PYTHON_VERSION': '3', 'DBUS_SESSION_BUS_ADDRESS': 'unix:path=/run/user/1000/bus', 'COLCON_PREFIX_PATH': '/home/paulw/GitLab/robobin/ros2/install', 'ROS_DISTRO': 'jazzy', 'LOGNAME': 'paulw', '_': '/usr/bin/colcon', 'ROS_VERSION': '2', 'XDG_SESSION_CLASS': 'user', 'TERM': 'xterm-256color', 'XDG_SESSION_ID': '5', 'PATH': '/opt/ros/jazzy/bin:/home/paulw/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', 'XDG_RUNTIME_DIR': '/run/user/1000', 'LANG': 'en_US.UTF-8', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:', 'AMENT_PREFIX_PATH': '/home/paulw/GitLab/robobin/ros2/install/robobin:/opt/ros/jazzy', 'SHELL': '/bin/bash', 'LESSCLOSE': '/usr/bin/lesspipe %s %s', 'ROS_AUTOMATIC_DISCOVERY_RANGE': 'SUBNET', 'PWD': '/home/paulw/GitLab/robobin/ros2/build/robobin', 'SSH_CONNECTION': '192.168.0.20 57325 192.168.0.46 22', 'XDG_DATA_DIRS': '/usr/local/share:/usr/share:/var/lib/snapd/desktop', 'PYTHONPATH': '/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:/opt/ros/jazzy/lib/python3.12/site-packages', 'COLCON': '1'}, 'shell': False}
+[6.562141] (-) TimerEvent: {}
+[6.663107] (-) TimerEvent: {}
+[6.764097] (-) TimerEvent: {}
+[6.864987] (-) TimerEvent: {}
+[6.965907] (-) TimerEvent: {}
+[7.066887] (-) TimerEvent: {}
+[7.167917] (-) TimerEvent: {}
+[7.268971] (-) TimerEvent: {}
+[7.369901] (-) TimerEvent: {}
+[7.470871] (-) TimerEvent: {}
+[7.571835] (-) TimerEvent: {}
+[7.672777] (-) TimerEvent: {}
+[7.773720] (-) TimerEvent: {}
+[7.874721] (-) TimerEvent: {}
+[7.975713] (-) TimerEvent: {}
+[8.076716] (-) TimerEvent: {}
+[8.177694] (-) TimerEvent: {}
+[8.278644] (-) TimerEvent: {}
+[8.379672] (-) TimerEvent: {}
+[8.480652] (-) TimerEvent: {}
+[8.581605] (-) TimerEvent: {}
+[8.660352] (robobin) StdoutLine: {'line': b'running egg_info\n'}
+[8.681817] (-) TimerEvent: {}
+[8.782784] (-) TimerEvent: {}
+[8.809299] (robobin) StdoutLine: {'line': b'writing ../../build/robobin/robobin.egg-info/PKG-INFO\n'}
+[8.811392] (robobin) StdoutLine: {'line': b'writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt\n'}
+[8.813196] (robobin) StdoutLine: {'line': b'writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt\n'}
+[8.814728] (robobin) StdoutLine: {'line': b'writing requirements to ../../build/robobin/robobin.egg-info/requires.txt\n'}
+[8.816049] (robobin) StdoutLine: {'line': b'writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt\n'}
+[8.883073] (-) TimerEvent: {}
+[8.984038] (-) TimerEvent: {}
+[9.084985] (-) TimerEvent: {}
+[9.121851] (robobin) StdoutLine: {'line': b"reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'\n"}
+[9.128398] (robobin) StdoutLine: {'line': b"writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'\n"}
+[9.129787] (robobin) StdoutLine: {'line': b'running build\n'}
+[9.131090] (robobin) StdoutLine: {'line': b'running build_py\n'}
+[9.132271] (robobin) StdoutLine: {'line': b'copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin\n'}
+[9.133626] (robobin) StdoutLine: {'line': b'copying robobin/message_handler.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin\n'}
+[9.135661] (robobin) StdoutLine: {'line': b'copying robobin/api_node.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin\n'}
+[9.138331] (robobin) StdoutLine: {'line': b'running install\n'}
+[9.185168] (-) TimerEvent: {}
+[9.196374] (robobin) StdoutLine: {'line': b'running install_lib\n'}
+[9.285374] (-) TimerEvent: {}
+[9.348838] (robobin) StdoutLine: {'line': b'copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin\n'}
+[9.350553] (robobin) StdoutLine: {'line': b'copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/message_handler.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin\n'}
+[9.352702] (robobin) StdoutLine: {'line': b'copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/api_node.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin\n'}
+[9.357573] (robobin) StdoutLine: {'line': b'byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc\n'}
+[9.364443] (robobin) StdoutLine: {'line': b'byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/message_handler.py to message_handler.cpython-312.pyc\n'}
+[9.369647] (robobin) StdoutLine: {'line': b'byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/api_node.py to api_node.cpython-312.pyc\n'}
+[9.374906] (robobin) StdoutLine: {'line': b'running install_data\n'}
+[9.376736] (robobin) StdoutLine: {'line': b'running install_egg_info\n'}
+[9.385604] (-) TimerEvent: {}
+[9.486540] (-) TimerEvent: {}
+[9.538010] (robobin) StdoutLine: {'line': b"removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)\n"}
+[9.541309] (robobin) StdoutLine: {'line': b'Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info\n'}
+[9.551690] (robobin) StdoutLine: {'line': b'running install_scripts\n'}
+[9.586759] (-) TimerEvent: {}
+[9.687726] (-) TimerEvent: {}
+[9.788697] (-) TimerEvent: {}
+[9.889695] (-) TimerEvent: {}
+[9.990679] (-) TimerEvent: {}
+[10.091657] (-) TimerEvent: {}
+[10.192578] (-) TimerEvent: {}
+[10.293507] (-) TimerEvent: {}
+[10.394480] (-) TimerEvent: {}
+[10.495444] (-) TimerEvent: {}
+[10.596430] (-) TimerEvent: {}
+[10.626327] (robobin) StdoutLine: {'line': b'Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin\n'}
+[10.629351] (robobin) StdoutLine: {'line': b"writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'\n"}
+[10.696746] (-) TimerEvent: {}
+[10.798025] (-) TimerEvent: {}
+[10.899173] (-) TimerEvent: {}
+[10.905924] (robobin) CommandEnded: {'returncode': 0}
+[10.986475] (robobin) JobEnded: {'identifier': 'robobin', 'rc': 0}
+[10.992426] (-) EventReactorShutdown: {}
diff --git a/ros2/log/build_2024-11-14_15-50-09/logger_all.log b/ros2/log/build_2024-11-14_15-50-09/logger_all.log
new file mode 100644
index 00000000..2feeadf0
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-50-09/logger_all.log
@@ -0,0 +1,129 @@
+[0.878s] DEBUG:colcon:Command line arguments: ['/usr/bin/colcon', 'build']
+[0.879s] DEBUG:colcon:Parsed command line arguments: Namespace(log_base=None, log_level=None, verb_name='build', build_base='build', install_base='install', merge_install=False, symlink_install=False, test_result_base=None, continue_on_error=False, executor='parallel', parallel_workers=4, event_handlers=None, ignore_user_meta=False, metas=['./colcon.meta'], base_paths=['.'], packages_ignore=None, packages_ignore_regex=None, paths=None, packages_up_to=None, packages_up_to_regex=None, packages_above=None, packages_above_and_dependencies=None, packages_above_depth=None, packages_select_by_dep=None, packages_skip_by_dep=None, packages_skip_up_to=None, packages_select_build_failed=False, packages_skip_build_finished=False, packages_select_test_failures=False, packages_skip_test_passed=False, packages_select=None, packages_skip=None, packages_select_regex=None, packages_skip_regex=None, packages_start=None, packages_end=None, allow_overriding=[], cmake_args=None, cmake_target=None, cmake_target_skip_unavailable=False, cmake_clean_cache=False, cmake_clean_first=False, cmake_force_configure=False, ament_cmake_args=None, catkin_cmake_args=None, catkin_skip_building_tests=False, verb_parser=<colcon_defaults.argument_parser.defaults.DefaultArgumentsDecorator object at 0xffffabccbbf0>, verb_extension=<colcon_core.verb.build.BuildVerb object at 0xffffacf9b320>, main=<bound method BuildVerb.main of <colcon_core.verb.build.BuildVerb object at 0xffffacf9b320>>)
+[1.210s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) check parameters
+[1.210s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) check parameters
+[1.211s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) check parameters
+[1.211s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) check parameters
+[1.211s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) discover
+[1.211s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) discover
+[1.212s] INFO:colcon.colcon_core.package_discovery:Crawling recursively for packages in '/home/paulw/GitLab/robobin/ros2'
+[1.212s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ignore', 'ignore_ament_install']
+[1.213s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore'
+[1.214s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore_ament_install'
+[1.214s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_pkg']
+[1.214s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_pkg'
+[1.215s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_meta']
+[1.215s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_meta'
+[1.215s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ros']
+[1.215s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ros'
+[1.418s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['cmake', 'python']
+[1.419s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'cmake'
+[1.419s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python'
+[1.419s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['python_setup_py']
+[1.420s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python_setup_py'
+[1.421s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extensions ['ignore', 'ignore_ament_install']
+[1.421s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extension 'ignore'
+[1.422s] Level 1:colcon.colcon_core.package_identification:_identify(build) ignored
+[1.423s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extensions ['ignore', 'ignore_ament_install']
+[1.423s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extension 'ignore'
+[1.424s] Level 1:colcon.colcon_core.package_identification:_identify(install) ignored
+[1.425s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extensions ['ignore', 'ignore_ament_install']
+[1.425s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extension 'ignore'
+[1.426s] Level 1:colcon.colcon_core.package_identification:_identify(log) ignored
+[1.426s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['ignore', 'ignore_ament_install']
+[1.427s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'ignore'
+[1.427s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'ignore_ament_install'
+[1.428s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['colcon_pkg']
+[1.428s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'colcon_pkg'
+[1.428s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['colcon_meta']
+[1.428s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'colcon_meta'
+[1.429s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['ros']
+[1.429s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'ros'
+[1.430s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['cmake', 'python']
+[1.430s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'cmake'
+[1.430s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'python'
+[1.431s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['python_setup_py']
+[1.431s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'python_setup_py'
+[1.432s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['ignore', 'ignore_ament_install']
+[1.432s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'ignore'
+[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'ignore_ament_install'
+[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['colcon_pkg']
+[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'colcon_pkg'
+[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['colcon_meta']
+[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'colcon_meta'
+[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['ros']
+[1.435s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'ros'
+[1.460s] DEBUG:colcon.colcon_core.package_identification:Package 'src/robobin' with type 'ros.ament_python' and name 'robobin'
+[1.461s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) using defaults
+[1.461s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) discover
+[1.461s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) using defaults
+[1.462s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) discover
+[1.462s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) using defaults
+[1.594s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) check parameters
+[1.594s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) discover
+[1.608s] DEBUG:colcon.colcon_installed_package_information.package_discovery:Found 1 installed packages in /home/paulw/GitLab/robobin/ros2/install
+[1.621s] DEBUG:colcon.colcon_installed_package_information.package_discovery:Found 192 installed packages in /opt/ros/jazzy
+[1.626s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) using defaults
+[1.906s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_args' from command line to 'None'
+[1.906s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_target' from command line to 'None'
+[1.907s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_target_skip_unavailable' from command line to 'False'
+[1.907s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_clean_cache' from command line to 'False'
+[1.907s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_clean_first' from command line to 'False'
+[1.907s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_force_configure' from command line to 'False'
+[1.907s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'ament_cmake_args' from command line to 'None'
+[1.907s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'catkin_cmake_args' from command line to 'None'
+[1.908s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'catkin_skip_building_tests' from command line to 'False'
+[1.908s] DEBUG:colcon.colcon_core.verb:Building package 'robobin' with the following arguments: {'ament_cmake_args': None, 'build_base': '/home/paulw/GitLab/robobin/ros2/build/robobin', 'catkin_cmake_args': None, 'catkin_skip_building_tests': False, 'cmake_args': None, 'cmake_clean_cache': False, 'cmake_clean_first': False, 'cmake_force_configure': False, 'cmake_target': None, 'cmake_target_skip_unavailable': False, 'install_base': '/home/paulw/GitLab/robobin/ros2/install/robobin', 'merge_install': False, 'path': '/home/paulw/GitLab/robobin/ros2/src/robobin', 'symlink_install': False, 'test_result_base': None}
+[1.909s] INFO:colcon.colcon_core.executor:Executing jobs using 'parallel' executor
+[1.914s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete
+[1.916s] INFO:colcon.colcon_ros.task.ament_python.build:Building ROS package in '/home/paulw/GitLab/robobin/ros2/src/robobin' with build type 'ament_python'
+[1.917s] Level 1:colcon.colcon_core.shell:create_environment_hook('robobin', 'ament_prefix_path')
+[1.933s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_core.shell.bat': Not used on non-Windows systems
+[1.934s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/ament_prefix_path.ps1'
+[1.939s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/ament_prefix_path.dsv'
+[1.942s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/ament_prefix_path.sh'
+[1.948s] INFO:colcon.colcon_core.shell:Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
+[1.948s] DEBUG:colcon.colcon_core.shell:Skip shell extension 'dsv' for command environment
+[3.709s] INFO:colcon.colcon_core.task.python.build:Building Python package in '/home/paulw/GitLab/robobin/ros2/src/robobin'
+[3.710s] INFO:colcon.colcon_core.shell:Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
+[3.711s] DEBUG:colcon.colcon_core.shell:Skip shell extension 'dsv' for command environment
+[8.457s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoking command in '/home/paulw/GitLab/robobin/ros2/src/robobin': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+[12.821s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoked command in '/home/paulw/GitLab/robobin/ros2/src/robobin' returned '0': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+[12.840s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin' for CMake module files
+[12.845s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin' for CMake config files
+[12.852s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/lib'
+[12.853s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/bin'
+[12.854s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/pkgconfig/robobin.pc'
+[12.855s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages'
+[12.856s] Level 1:colcon.colcon_core.shell:create_environment_hook('robobin', 'pythonpath')
+[12.858s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/pythonpath.ps1'
+[12.861s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/pythonpath.dsv'
+[12.864s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/pythonpath.sh'
+[12.869s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/bin'
+[12.869s] Level 1:colcon.colcon_core.environment:create_environment_scripts_only(robobin)
+[12.871s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.ps1'
+[12.877s] INFO:colcon.colcon_core.shell:Creating package descriptor '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.dsv'
+[12.881s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.sh'
+[12.887s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.bash'
+[12.893s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.zsh'
+[12.897s] Level 1:colcon.colcon_core.environment:create_file_with_runtime_dependencies(/home/paulw/GitLab/robobin/ros2/install/robobin/share/colcon-core/packages/robobin)
+[12.900s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:closing loop
+[12.903s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:loop closed
+[12.903s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete finished with '0'
+[12.904s] DEBUG:colcon.colcon_core.event_reactor:joining thread
+[12.942s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.notify_send': Could not find 'notify-send'
+[12.943s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.terminal_notifier': Not used on non-Darwin systems
+[12.943s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.win32': Not used on non-Windows systems
+[12.943s] INFO:colcon.colcon_notification.desktop_notification:Sending desktop notification using 'notify2'
+[12.949s] DEBUG:colcon.colcon_notification.desktop_notification.notify2:Failed to initialize notify2: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications was not provided by any .service files
+[12.950s] DEBUG:colcon.colcon_core.event_reactor:joined thread
+[12.951s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.ps1'
+[12.958s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/paulw/GitLab/robobin/ros2/install/_local_setup_util_ps1.py'
+[12.969s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.ps1'
+[12.975s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.sh'
+[12.980s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/paulw/GitLab/robobin/ros2/install/_local_setup_util_sh.py'
+[12.985s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.sh'
+[12.991s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.bash'
+[12.995s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.bash'
+[13.002s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.zsh'
+[13.007s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.zsh'
diff --git a/ros2/log/build_2024-11-14_15-50-09/robobin/command.log b/ros2/log/build_2024-11-14_15-50-09/robobin/command.log
new file mode 100644
index 00000000..64b7945c
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-50-09/robobin/command.log
@@ -0,0 +1,2 @@
+Invoking command in '/home/paulw/GitLab/robobin/ros2/src/robobin': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+Invoked command in '/home/paulw/GitLab/robobin/ros2/src/robobin' returned '0': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
diff --git a/ros2/log/build_2024-11-14_15-50-09/robobin/stderr.log b/ros2/log/build_2024-11-14_15-50-09/robobin/stderr.log
new file mode 100644
index 00000000..e69de29b
diff --git a/ros2/log/build_2024-11-14_15-50-09/robobin/stdout.log b/ros2/log/build_2024-11-14_15-50-09/robobin/stdout.log
new file mode 100644
index 00000000..613b8003
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-50-09/robobin/stdout.log
@@ -0,0 +1,28 @@
+running egg_info
+writing ../../build/robobin/robobin.egg-info/PKG-INFO
+writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt
+writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt
+writing requirements to ../../build/robobin/robobin.egg-info/requires.txt
+writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt
+reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+running build
+running build_py
+copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+copying robobin/message_handler.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+copying robobin/api_node.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+running install
+running install_lib
+copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/message_handler.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/api_node.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc
+byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/message_handler.py to message_handler.cpython-312.pyc
+byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/api_node.py to api_node.cpython-312.pyc
+running install_data
+running install_egg_info
+removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)
+Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info
+running install_scripts
+Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin
+writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'
diff --git a/ros2/log/build_2024-11-14_15-50-09/robobin/stdout_stderr.log b/ros2/log/build_2024-11-14_15-50-09/robobin/stdout_stderr.log
new file mode 100644
index 00000000..613b8003
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-50-09/robobin/stdout_stderr.log
@@ -0,0 +1,28 @@
+running egg_info
+writing ../../build/robobin/robobin.egg-info/PKG-INFO
+writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt
+writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt
+writing requirements to ../../build/robobin/robobin.egg-info/requires.txt
+writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt
+reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+running build
+running build_py
+copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+copying robobin/message_handler.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+copying robobin/api_node.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+running install
+running install_lib
+copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/message_handler.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/api_node.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc
+byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/message_handler.py to message_handler.cpython-312.pyc
+byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/api_node.py to api_node.cpython-312.pyc
+running install_data
+running install_egg_info
+removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)
+Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info
+running install_scripts
+Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin
+writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'
diff --git a/ros2/log/build_2024-11-14_15-50-09/robobin/streams.log b/ros2/log/build_2024-11-14_15-50-09/robobin/streams.log
new file mode 100644
index 00000000..b8ff9856
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-50-09/robobin/streams.log
@@ -0,0 +1,30 @@
+[6.539s] Invoking command in '/home/paulw/GitLab/robobin/ros2/src/robobin': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+[8.657s] running egg_info
+[8.806s] writing ../../build/robobin/robobin.egg-info/PKG-INFO
+[8.808s] writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt
+[8.810s] writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt
+[8.811s] writing requirements to ../../build/robobin/robobin.egg-info/requires.txt
+[8.813s] writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt
+[9.118s] reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+[9.125s] writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+[9.127s] running build
+[9.128s] running build_py
+[9.129s] copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+[9.130s] copying robobin/message_handler.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+[9.132s] copying robobin/api_node.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+[9.139s] running install
+[9.193s] running install_lib
+[9.346s] copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+[9.347s] copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/message_handler.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+[9.349s] copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/api_node.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+[9.354s] byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc
+[9.361s] byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/message_handler.py to message_handler.cpython-312.pyc
+[9.366s] byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/api_node.py to api_node.cpython-312.pyc
+[9.372s] running install_data
+[9.373s] running install_egg_info
+[9.535s] removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)
+[9.538s] Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info
+[9.548s] running install_scripts
+[10.623s] Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin
+[10.626s] writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'
+[10.903s] Invoked command in '/home/paulw/GitLab/robobin/ros2/src/robobin' returned '0': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
diff --git a/ros2/log/build_2024-11-14_15-55-04/events.log b/ros2/log/build_2024-11-14_15-55-04/events.log
new file mode 100644
index 00000000..39bcf5f2
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-55-04/events.log
@@ -0,0 +1,138 @@
+[0.000000] (-) TimerEvent: {}
+[0.001042] (robobin) JobQueued: {'identifier': 'robobin', 'dependencies': OrderedDict()}
+[0.003617] (robobin) JobStarted: {'identifier': 'robobin'}
+[0.098725] (-) TimerEvent: {}
+[0.199883] (-) TimerEvent: {}
+[0.300908] (-) TimerEvent: {}
+[0.401959] (-) TimerEvent: {}
+[0.503013] (-) TimerEvent: {}
+[0.604061] (-) TimerEvent: {}
+[0.705000] (-) TimerEvent: {}
+[0.805989] (-) TimerEvent: {}
+[0.907044] (-) TimerEvent: {}
+[1.008112] (-) TimerEvent: {}
+[1.109239] (-) TimerEvent: {}
+[1.210146] (-) TimerEvent: {}
+[1.311118] (-) TimerEvent: {}
+[1.412101] (-) TimerEvent: {}
+[1.513055] (-) TimerEvent: {}
+[1.614116] (-) TimerEvent: {}
+[1.715322] (-) TimerEvent: {}
+[1.816389] (-) TimerEvent: {}
+[1.917363] (-) TimerEvent: {}
+[2.018354] (-) TimerEvent: {}
+[2.119356] (-) TimerEvent: {}
+[2.220406] (-) TimerEvent: {}
+[2.321363] (-) TimerEvent: {}
+[2.422284] (-) TimerEvent: {}
+[2.523182] (-) TimerEvent: {}
+[2.624137] (-) TimerEvent: {}
+[2.725255] (-) TimerEvent: {}
+[2.826154] (-) TimerEvent: {}
+[2.927108] (-) TimerEvent: {}
+[3.028051] (-) TimerEvent: {}
+[3.129021] (-) TimerEvent: {}
+[3.229975] (-) TimerEvent: {}
+[3.330943] (-) TimerEvent: {}
+[3.431913] (-) TimerEvent: {}
+[3.532996] (-) TimerEvent: {}
+[3.634058] (-) TimerEvent: {}
+[3.734984] (-) TimerEvent: {}
+[3.835966] (-) TimerEvent: {}
+[3.936921] (-) TimerEvent: {}
+[4.037880] (-) TimerEvent: {}
+[4.138848] (-) TimerEvent: {}
+[4.239771] (-) TimerEvent: {}
+[4.340725] (-) TimerEvent: {}
+[4.441699] (-) TimerEvent: {}
+[4.542674] (-) TimerEvent: {}
+[4.643710] (-) TimerEvent: {}
+[4.744720] (-) TimerEvent: {}
+[4.845688] (-) TimerEvent: {}
+[4.946651] (-) TimerEvent: {}
+[5.047600] (-) TimerEvent: {}
+[5.148580] (-) TimerEvent: {}
+[5.249524] (-) TimerEvent: {}
+[5.350376] (-) TimerEvent: {}
+[5.451329] (-) TimerEvent: {}
+[5.552272] (-) TimerEvent: {}
+[5.653262] (-) TimerEvent: {}
+[5.754161] (-) TimerEvent: {}
+[5.855109] (-) TimerEvent: {}
+[5.956111] (-) TimerEvent: {}
+[6.057142] (-) TimerEvent: {}
+[6.158148] (-) TimerEvent: {}
+[6.259495] (-) TimerEvent: {}
+[6.360616] (-) TimerEvent: {}
+[6.461767] (-) TimerEvent: {}
+[6.521839] (robobin) Command: {'cmd': ['/usr/bin/python3', '-W', 'ignore:setup.py install is deprecated', 'setup.py', 'egg_info', '--egg-base', '../../build/robobin', 'build', '--build-base', '/home/paulw/GitLab/robobin/ros2/build/robobin/build', 'install', '--record', '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log', '--single-version-externally-managed', 'install_data'], 'cwd': '/home/paulw/GitLab/robobin/ros2/src/robobin', 'env': {'LESSOPEN': '| /usr/bin/lesspipe %s', 'USER': 'paulw', 'SSH_CLIENT': '192.168.0.20 57325 22', 'XDG_SESSION_TYPE': 'tty', 'SHLVL': '1', 'LD_LIBRARY_PATH': '/opt/ros/jazzy/lib/aarch64-linux-gnu:/opt/ros/jazzy/lib', 'HOME': '/home/paulw', 'OLDPWD': '/home/paulw/GitLab/robobin/ros2/src', 'SSH_TTY': '/dev/pts/0', 'ROS_PYTHON_VERSION': '3', 'DBUS_SESSION_BUS_ADDRESS': 'unix:path=/run/user/1000/bus', 'COLCON_PREFIX_PATH': '/home/paulw/GitLab/robobin/ros2/install', 'ROS_DISTRO': 'jazzy', 'LOGNAME': 'paulw', '_': '/usr/bin/colcon', 'ROS_VERSION': '2', 'XDG_SESSION_CLASS': 'user', 'TERM': 'xterm-256color', 'XDG_SESSION_ID': '5', 'PATH': '/opt/ros/jazzy/bin:/home/paulw/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', 'XDG_RUNTIME_DIR': '/run/user/1000', 'LANG': 'en_US.UTF-8', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:', 'AMENT_PREFIX_PATH': '/home/paulw/GitLab/robobin/ros2/install/robobin:/opt/ros/jazzy', 'SHELL': '/bin/bash', 'LESSCLOSE': '/usr/bin/lesspipe %s %s', 'ROS_AUTOMATIC_DISCOVERY_RANGE': 'SUBNET', 'PWD': '/home/paulw/GitLab/robobin/ros2/build/robobin', 'SSH_CONNECTION': '192.168.0.20 57325 192.168.0.46 22', 'XDG_DATA_DIRS': '/usr/local/share:/usr/share:/var/lib/snapd/desktop', 'PYTHONPATH': '/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:/opt/ros/jazzy/lib/python3.12/site-packages', 'COLCON': '1'}, 'shell': False}
+[6.562060] (-) TimerEvent: {}
+[6.663178] (-) TimerEvent: {}
+[6.764261] (-) TimerEvent: {}
+[6.865354] (-) TimerEvent: {}
+[6.966398] (-) TimerEvent: {}
+[7.067310] (-) TimerEvent: {}
+[7.168265] (-) TimerEvent: {}
+[7.269180] (-) TimerEvent: {}
+[7.370096] (-) TimerEvent: {}
+[7.471067] (-) TimerEvent: {}
+[7.572036] (-) TimerEvent: {}
+[7.672964] (-) TimerEvent: {}
+[7.773937] (-) TimerEvent: {}
+[7.874969] (-) TimerEvent: {}
+[7.975888] (-) TimerEvent: {}
+[8.076889] (-) TimerEvent: {}
+[8.177877] (-) TimerEvent: {}
+[8.278824] (-) TimerEvent: {}
+[8.379828] (-) TimerEvent: {}
+[8.480850] (-) TimerEvent: {}
+[8.581838] (-) TimerEvent: {}
+[8.657610] (robobin) StdoutLine: {'line': b'running egg_info\n'}
+[8.682059] (-) TimerEvent: {}
+[8.783044] (-) TimerEvent: {}
+[8.806483] (robobin) StdoutLine: {'line': b'writing ../../build/robobin/robobin.egg-info/PKG-INFO\n'}
+[8.808540] (robobin) StdoutLine: {'line': b'writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt\n'}
+[8.810481] (robobin) StdoutLine: {'line': b'writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt\n'}
+[8.812050] (robobin) StdoutLine: {'line': b'writing requirements to ../../build/robobin/robobin.egg-info/requires.txt\n'}
+[8.813446] (robobin) StdoutLine: {'line': b'writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt\n'}
+[8.883343] (-) TimerEvent: {}
+[8.984313] (-) TimerEvent: {}
+[9.085276] (-) TimerEvent: {}
+[9.117031] (robobin) StdoutLine: {'line': b"reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'\n"}
+[9.123773] (robobin) StdoutLine: {'line': b"writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'\n"}
+[9.125183] (robobin) StdoutLine: {'line': b'running build\n'}
+[9.126458] (robobin) StdoutLine: {'line': b'running build_py\n'}
+[9.127556] (robobin) StdoutLine: {'line': b'copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin\n'}
+[9.131252] (robobin) StdoutLine: {'line': b'running install\n'}
+[9.185500] (-) TimerEvent: {}
+[9.187396] (robobin) StdoutLine: {'line': b'running install_lib\n'}
+[9.285693] (-) TimerEvent: {}
+[9.340407] (robobin) StdoutLine: {'line': b'copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin\n'}
+[9.346230] (robobin) StdoutLine: {'line': b'byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc\n'}
+[9.349896] (robobin) StderrLine: {'line': b'Sorry: TabError: inconsistent use of tabs and spaces in indentation (connection_manager.py, line 54)\n'}
+[9.351380] (robobin) StdoutLine: {'line': b'running install_data\n'}
+[9.352986] (robobin) StdoutLine: {'line': b'running install_egg_info\n'}
+[9.385901] (-) TimerEvent: {}
+[9.486869] (-) TimerEvent: {}
+[9.512392] (robobin) StdoutLine: {'line': b"removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)\n"}
+[9.515742] (robobin) StdoutLine: {'line': b'Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info\n'}
+[9.526048] (robobin) StdoutLine: {'line': b'running install_scripts\n'}
+[9.587103] (-) TimerEvent: {}
+[9.688085] (-) TimerEvent: {}
+[9.789095] (-) TimerEvent: {}
+[9.890030] (-) TimerEvent: {}
+[9.990940] (-) TimerEvent: {}
+[10.091935] (-) TimerEvent: {}
+[10.192906] (-) TimerEvent: {}
+[10.293934] (-) TimerEvent: {}
+[10.394936] (-) TimerEvent: {}
+[10.495934] (-) TimerEvent: {}
+[10.596980] (-) TimerEvent: {}
+[10.600525] (robobin) StdoutLine: {'line': b'Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin\n'}
+[10.603637] (robobin) StdoutLine: {'line': b"writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'\n"}
+[10.697369] (-) TimerEvent: {}
+[10.798449] (-) TimerEvent: {}
+[10.879345] (robobin) CommandEnded: {'returncode': 0}
+[10.899657] (-) TimerEvent: {}
+[10.960036] (robobin) JobEnded: {'identifier': 'robobin', 'rc': 0}
+[10.966683] (-) EventReactorShutdown: {}
diff --git a/ros2/log/build_2024-11-14_15-55-04/logger_all.log b/ros2/log/build_2024-11-14_15-55-04/logger_all.log
new file mode 100644
index 00000000..e8a4219a
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-55-04/logger_all.log
@@ -0,0 +1,129 @@
+[0.878s] DEBUG:colcon:Command line arguments: ['/usr/bin/colcon', 'build']
+[0.878s] DEBUG:colcon:Parsed command line arguments: Namespace(log_base=None, log_level=None, verb_name='build', build_base='build', install_base='install', merge_install=False, symlink_install=False, test_result_base=None, continue_on_error=False, executor='parallel', parallel_workers=4, event_handlers=None, ignore_user_meta=False, metas=['./colcon.meta'], base_paths=['.'], packages_ignore=None, packages_ignore_regex=None, paths=None, packages_up_to=None, packages_up_to_regex=None, packages_above=None, packages_above_and_dependencies=None, packages_above_depth=None, packages_select_by_dep=None, packages_skip_by_dep=None, packages_skip_up_to=None, packages_select_build_failed=False, packages_skip_build_finished=False, packages_select_test_failures=False, packages_skip_test_passed=False, packages_select=None, packages_skip=None, packages_select_regex=None, packages_skip_regex=None, packages_start=None, packages_end=None, allow_overriding=[], cmake_args=None, cmake_target=None, cmake_target_skip_unavailable=False, cmake_clean_cache=False, cmake_clean_first=False, cmake_force_configure=False, ament_cmake_args=None, catkin_cmake_args=None, catkin_skip_building_tests=False, verb_parser=<colcon_defaults.argument_parser.defaults.DefaultArgumentsDecorator object at 0xffff8e453e00>, verb_extension=<colcon_core.verb.build.BuildVerb object at 0xffff8e636fc0>, main=<bound method BuildVerb.main of <colcon_core.verb.build.BuildVerb object at 0xffff8e636fc0>>)
+[1.214s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) check parameters
+[1.215s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) check parameters
+[1.215s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) check parameters
+[1.215s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) check parameters
+[1.215s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) discover
+[1.216s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) discover
+[1.216s] INFO:colcon.colcon_core.package_discovery:Crawling recursively for packages in '/home/paulw/GitLab/robobin/ros2'
+[1.217s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ignore', 'ignore_ament_install']
+[1.218s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore'
+[1.218s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore_ament_install'
+[1.219s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_pkg']
+[1.219s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_pkg'
+[1.219s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_meta']
+[1.219s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_meta'
+[1.220s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ros']
+[1.220s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ros'
+[1.426s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['cmake', 'python']
+[1.426s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'cmake'
+[1.426s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python'
+[1.427s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['python_setup_py']
+[1.427s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python_setup_py'
+[1.428s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extensions ['ignore', 'ignore_ament_install']
+[1.429s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extension 'ignore'
+[1.429s] Level 1:colcon.colcon_core.package_identification:_identify(build) ignored
+[1.431s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extensions ['ignore', 'ignore_ament_install']
+[1.431s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extension 'ignore'
+[1.432s] Level 1:colcon.colcon_core.package_identification:_identify(install) ignored
+[1.432s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extensions ['ignore', 'ignore_ament_install']
+[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extension 'ignore'
+[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(log) ignored
+[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['ignore', 'ignore_ament_install']
+[1.435s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'ignore'
+[1.435s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'ignore_ament_install'
+[1.435s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['colcon_pkg']
+[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'colcon_pkg'
+[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['colcon_meta']
+[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'colcon_meta'
+[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['ros']
+[1.437s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'ros'
+[1.437s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['cmake', 'python']
+[1.438s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'cmake'
+[1.438s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'python'
+[1.438s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['python_setup_py']
+[1.438s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'python_setup_py'
+[1.439s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['ignore', 'ignore_ament_install']
+[1.440s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'ignore'
+[1.440s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'ignore_ament_install'
+[1.441s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['colcon_pkg']
+[1.441s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'colcon_pkg'
+[1.441s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['colcon_meta']
+[1.442s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'colcon_meta'
+[1.442s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['ros']
+[1.442s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'ros'
+[1.468s] DEBUG:colcon.colcon_core.package_identification:Package 'src/robobin' with type 'ros.ament_python' and name 'robobin'
+[1.468s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) using defaults
+[1.469s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) discover
+[1.469s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) using defaults
+[1.469s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) discover
+[1.469s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) using defaults
+[1.603s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) check parameters
+[1.603s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) discover
+[1.617s] DEBUG:colcon.colcon_installed_package_information.package_discovery:Found 1 installed packages in /home/paulw/GitLab/robobin/ros2/install
+[1.630s] DEBUG:colcon.colcon_installed_package_information.package_discovery:Found 192 installed packages in /opt/ros/jazzy
+[1.636s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) using defaults
+[1.923s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_args' from command line to 'None'
+[1.924s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_target' from command line to 'None'
+[1.924s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_target_skip_unavailable' from command line to 'False'
+[1.924s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_clean_cache' from command line to 'False'
+[1.924s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_clean_first' from command line to 'False'
+[1.924s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_force_configure' from command line to 'False'
+[1.925s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'ament_cmake_args' from command line to 'None'
+[1.925s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'catkin_cmake_args' from command line to 'None'
+[1.925s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'catkin_skip_building_tests' from command line to 'False'
+[1.925s] DEBUG:colcon.colcon_core.verb:Building package 'robobin' with the following arguments: {'ament_cmake_args': None, 'build_base': '/home/paulw/GitLab/robobin/ros2/build/robobin', 'catkin_cmake_args': None, 'catkin_skip_building_tests': False, 'cmake_args': None, 'cmake_clean_cache': False, 'cmake_clean_first': False, 'cmake_force_configure': False, 'cmake_target': None, 'cmake_target_skip_unavailable': False, 'install_base': '/home/paulw/GitLab/robobin/ros2/install/robobin', 'merge_install': False, 'path': '/home/paulw/GitLab/robobin/ros2/src/robobin', 'symlink_install': False, 'test_result_base': None}
+[1.926s] INFO:colcon.colcon_core.executor:Executing jobs using 'parallel' executor
+[1.932s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete
+[1.934s] INFO:colcon.colcon_ros.task.ament_python.build:Building ROS package in '/home/paulw/GitLab/robobin/ros2/src/robobin' with build type 'ament_python'
+[1.935s] Level 1:colcon.colcon_core.shell:create_environment_hook('robobin', 'ament_prefix_path')
+[1.950s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_core.shell.bat': Not used on non-Windows systems
+[1.952s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/ament_prefix_path.ps1'
+[1.956s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/ament_prefix_path.dsv'
+[1.960s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/ament_prefix_path.sh'
+[1.965s] INFO:colcon.colcon_core.shell:Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
+[1.965s] DEBUG:colcon.colcon_core.shell:Skip shell extension 'dsv' for command environment
+[3.739s] INFO:colcon.colcon_core.task.python.build:Building Python package in '/home/paulw/GitLab/robobin/ros2/src/robobin'
+[3.741s] INFO:colcon.colcon_core.shell:Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
+[3.741s] DEBUG:colcon.colcon_core.shell:Skip shell extension 'dsv' for command environment
+[8.475s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoking command in '/home/paulw/GitLab/robobin/ros2/src/robobin': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+[12.811s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoked command in '/home/paulw/GitLab/robobin/ros2/src/robobin' returned '0': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+[12.830s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin' for CMake module files
+[12.836s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin' for CMake config files
+[12.842s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/lib'
+[12.844s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/bin'
+[12.844s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/pkgconfig/robobin.pc'
+[12.846s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages'
+[12.847s] Level 1:colcon.colcon_core.shell:create_environment_hook('robobin', 'pythonpath')
+[12.848s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/pythonpath.ps1'
+[12.852s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/pythonpath.dsv'
+[12.855s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/pythonpath.sh'
+[12.860s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/bin'
+[12.860s] Level 1:colcon.colcon_core.environment:create_environment_scripts_only(robobin)
+[12.862s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.ps1'
+[12.867s] INFO:colcon.colcon_core.shell:Creating package descriptor '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.dsv'
+[12.872s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.sh'
+[12.877s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.bash'
+[12.884s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.zsh'
+[12.888s] Level 1:colcon.colcon_core.environment:create_file_with_runtime_dependencies(/home/paulw/GitLab/robobin/ros2/install/robobin/share/colcon-core/packages/robobin)
+[12.891s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:closing loop
+[12.893s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:loop closed
+[12.895s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete finished with '0'
+[12.895s] DEBUG:colcon.colcon_core.event_reactor:joining thread
+[12.934s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.notify_send': Could not find 'notify-send'
+[12.935s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.terminal_notifier': Not used on non-Darwin systems
+[12.935s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.win32': Not used on non-Windows systems
+[12.935s] INFO:colcon.colcon_notification.desktop_notification:Sending desktop notification using 'notify2'
+[12.941s] DEBUG:colcon.colcon_notification.desktop_notification.notify2:Failed to initialize notify2: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications was not provided by any .service files
+[12.942s] DEBUG:colcon.colcon_core.event_reactor:joined thread
+[12.943s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.ps1'
+[12.950s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/paulw/GitLab/robobin/ros2/install/_local_setup_util_ps1.py'
+[12.960s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.ps1'
+[12.967s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.sh'
+[12.971s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/paulw/GitLab/robobin/ros2/install/_local_setup_util_sh.py'
+[12.976s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.sh'
+[12.983s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.bash'
+[12.987s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.bash'
+[12.993s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.zsh'
+[12.998s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.zsh'
diff --git a/ros2/log/build_2024-11-14_15-55-04/robobin/command.log b/ros2/log/build_2024-11-14_15-55-04/robobin/command.log
new file mode 100644
index 00000000..64b7945c
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-55-04/robobin/command.log
@@ -0,0 +1,2 @@
+Invoking command in '/home/paulw/GitLab/robobin/ros2/src/robobin': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+Invoked command in '/home/paulw/GitLab/robobin/ros2/src/robobin' returned '0': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
diff --git a/ros2/log/build_2024-11-14_15-55-04/robobin/stderr.log b/ros2/log/build_2024-11-14_15-55-04/robobin/stderr.log
new file mode 100644
index 00000000..9be7b6b1
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-55-04/robobin/stderr.log
@@ -0,0 +1 @@
+Sorry: TabError: inconsistent use of tabs and spaces in indentation (connection_manager.py, line 54)
diff --git a/ros2/log/build_2024-11-14_15-55-04/robobin/stdout.log b/ros2/log/build_2024-11-14_15-55-04/robobin/stdout.log
new file mode 100644
index 00000000..475195e0
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-55-04/robobin/stdout.log
@@ -0,0 +1,22 @@
+running egg_info
+writing ../../build/robobin/robobin.egg-info/PKG-INFO
+writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt
+writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt
+writing requirements to ../../build/robobin/robobin.egg-info/requires.txt
+writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt
+reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+running build
+running build_py
+copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+running install
+running install_lib
+copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc
+running install_data
+running install_egg_info
+removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)
+Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info
+running install_scripts
+Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin
+writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'
diff --git a/ros2/log/build_2024-11-14_15-55-04/robobin/stdout_stderr.log b/ros2/log/build_2024-11-14_15-55-04/robobin/stdout_stderr.log
new file mode 100644
index 00000000..44e861a5
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-55-04/robobin/stdout_stderr.log
@@ -0,0 +1,23 @@
+running egg_info
+writing ../../build/robobin/robobin.egg-info/PKG-INFO
+writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt
+writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt
+writing requirements to ../../build/robobin/robobin.egg-info/requires.txt
+writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt
+reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+running build
+running build_py
+copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+running install
+running install_lib
+copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc
+Sorry: TabError: inconsistent use of tabs and spaces in indentation (connection_manager.py, line 54)
+running install_data
+running install_egg_info
+removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)
+Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info
+running install_scripts
+Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin
+writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'
diff --git a/ros2/log/build_2024-11-14_15-55-04/robobin/streams.log b/ros2/log/build_2024-11-14_15-55-04/robobin/streams.log
new file mode 100644
index 00000000..903cd66e
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-55-04/robobin/streams.log
@@ -0,0 +1,25 @@
+[6.540s] Invoking command in '/home/paulw/GitLab/robobin/ros2/src/robobin': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+[8.655s] running egg_info
+[8.804s] writing ../../build/robobin/robobin.egg-info/PKG-INFO
+[8.806s] writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt
+[8.808s] writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt
+[8.809s] writing requirements to ../../build/robobin/robobin.egg-info/requires.txt
+[8.811s] writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt
+[9.114s] reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+[9.121s] writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+[9.122s] running build
+[9.123s] running build_py
+[9.125s] copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+[9.128s] running install
+[9.184s] running install_lib
+[9.338s] copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+[9.343s] byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc
+[9.347s] Sorry: TabError: inconsistent use of tabs and spaces in indentation (connection_manager.py, line 54)
+[9.348s] running install_data
+[9.350s] running install_egg_info
+[9.509s] removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)
+[9.513s] Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info
+[9.523s] running install_scripts
+[10.598s] Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin
+[10.601s] writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'
+[10.877s] Invoked command in '/home/paulw/GitLab/robobin/ros2/src/robobin' returned '0': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
diff --git a/ros2/log/build_2024-11-14_15-56-14/events.log b/ros2/log/build_2024-11-14_15-56-14/events.log
new file mode 100644
index 00000000..9aa62f09
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-56-14/events.log
@@ -0,0 +1,137 @@
+[0.000000] (-) TimerEvent: {}
+[0.001672] (robobin) JobQueued: {'identifier': 'robobin', 'dependencies': OrderedDict()}
+[0.003184] (robobin) JobStarted: {'identifier': 'robobin'}
+[0.098669] (-) TimerEvent: {}
+[0.199893] (-) TimerEvent: {}
+[0.300982] (-) TimerEvent: {}
+[0.401983] (-) TimerEvent: {}
+[0.502917] (-) TimerEvent: {}
+[0.603917] (-) TimerEvent: {}
+[0.704890] (-) TimerEvent: {}
+[0.805825] (-) TimerEvent: {}
+[0.906685] (-) TimerEvent: {}
+[1.007636] (-) TimerEvent: {}
+[1.108635] (-) TimerEvent: {}
+[1.209621] (-) TimerEvent: {}
+[1.310608] (-) TimerEvent: {}
+[1.411602] (-) TimerEvent: {}
+[1.512562] (-) TimerEvent: {}
+[1.613578] (-) TimerEvent: {}
+[1.714728] (-) TimerEvent: {}
+[1.815908] (-) TimerEvent: {}
+[1.916901] (-) TimerEvent: {}
+[2.017862] (-) TimerEvent: {}
+[2.118876] (-) TimerEvent: {}
+[2.219970] (-) TimerEvent: {}
+[2.320994] (-) TimerEvent: {}
+[2.421968] (-) TimerEvent: {}
+[2.522944] (-) TimerEvent: {}
+[2.623919] (-) TimerEvent: {}
+[2.724901] (-) TimerEvent: {}
+[2.825848] (-) TimerEvent: {}
+[2.926722] (-) TimerEvent: {}
+[3.027682] (-) TimerEvent: {}
+[3.128681] (-) TimerEvent: {}
+[3.229663] (-) TimerEvent: {}
+[3.330649] (-) TimerEvent: {}
+[3.431562] (-) TimerEvent: {}
+[3.532497] (-) TimerEvent: {}
+[3.633514] (-) TimerEvent: {}
+[3.734471] (-) TimerEvent: {}
+[3.835466] (-) TimerEvent: {}
+[3.936460] (-) TimerEvent: {}
+[4.037430] (-) TimerEvent: {}
+[4.138517] (-) TimerEvent: {}
+[4.239490] (-) TimerEvent: {}
+[4.340468] (-) TimerEvent: {}
+[4.441481] (-) TimerEvent: {}
+[4.542558] (-) TimerEvent: {}
+[4.643606] (-) TimerEvent: {}
+[4.744562] (-) TimerEvent: {}
+[4.845526] (-) TimerEvent: {}
+[4.946511] (-) TimerEvent: {}
+[5.047451] (-) TimerEvent: {}
+[5.148483] (-) TimerEvent: {}
+[5.249464] (-) TimerEvent: {}
+[5.350387] (-) TimerEvent: {}
+[5.451356] (-) TimerEvent: {}
+[5.552336] (-) TimerEvent: {}
+[5.653285] (-) TimerEvent: {}
+[5.754274] (-) TimerEvent: {}
+[5.855259] (-) TimerEvent: {}
+[5.956368] (-) TimerEvent: {}
+[6.057405] (-) TimerEvent: {}
+[6.158508] (-) TimerEvent: {}
+[6.259663] (-) TimerEvent: {}
+[6.360906] (-) TimerEvent: {}
+[6.461990] (-) TimerEvent: {}
+[6.513406] (robobin) Command: {'cmd': ['/usr/bin/python3', '-W', 'ignore:setup.py install is deprecated', 'setup.py', 'egg_info', '--egg-base', '../../build/robobin', 'build', '--build-base', '/home/paulw/GitLab/robobin/ros2/build/robobin/build', 'install', '--record', '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log', '--single-version-externally-managed', 'install_data'], 'cwd': '/home/paulw/GitLab/robobin/ros2/src/robobin', 'env': {'LESSOPEN': '| /usr/bin/lesspipe %s', 'USER': 'paulw', 'SSH_CLIENT': '192.168.0.20 57325 22', 'XDG_SESSION_TYPE': 'tty', 'SHLVL': '1', 'LD_LIBRARY_PATH': '/opt/ros/jazzy/lib/aarch64-linux-gnu:/opt/ros/jazzy/lib', 'HOME': '/home/paulw', 'OLDPWD': '/home/paulw/GitLab/robobin/ros2/src', 'SSH_TTY': '/dev/pts/0', 'ROS_PYTHON_VERSION': '3', 'DBUS_SESSION_BUS_ADDRESS': 'unix:path=/run/user/1000/bus', 'COLCON_PREFIX_PATH': '/home/paulw/GitLab/robobin/ros2/install', 'ROS_DISTRO': 'jazzy', 'LOGNAME': 'paulw', '_': '/usr/bin/colcon', 'ROS_VERSION': '2', 'XDG_SESSION_CLASS': 'user', 'TERM': 'xterm-256color', 'XDG_SESSION_ID': '5', 'PATH': '/opt/ros/jazzy/bin:/home/paulw/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', 'XDG_RUNTIME_DIR': '/run/user/1000', 'LANG': 'en_US.UTF-8', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:', 'AMENT_PREFIX_PATH': '/home/paulw/GitLab/robobin/ros2/install/robobin:/opt/ros/jazzy', 'SHELL': '/bin/bash', 'LESSCLOSE': '/usr/bin/lesspipe %s %s', 'ROS_AUTOMATIC_DISCOVERY_RANGE': 'SUBNET', 'PWD': '/home/paulw/GitLab/robobin/ros2/build/robobin', 'SSH_CONNECTION': '192.168.0.20 57325 192.168.0.46 22', 'XDG_DATA_DIRS': '/usr/local/share:/usr/share:/var/lib/snapd/desktop', 'PYTHONPATH': '/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:/opt/ros/jazzy/lib/python3.12/site-packages', 'COLCON': '1'}, 'shell': False}
+[6.562270] (-) TimerEvent: {}
+[6.663309] (-) TimerEvent: {}
+[6.764233] (-) TimerEvent: {}
+[6.865168] (-) TimerEvent: {}
+[6.966189] (-) TimerEvent: {}
+[7.067192] (-) TimerEvent: {}
+[7.168275] (-) TimerEvent: {}
+[7.269294] (-) TimerEvent: {}
+[7.370334] (-) TimerEvent: {}
+[7.471308] (-) TimerEvent: {}
+[7.572305] (-) TimerEvent: {}
+[7.673266] (-) TimerEvent: {}
+[7.774244] (-) TimerEvent: {}
+[7.875206] (-) TimerEvent: {}
+[7.976164] (-) TimerEvent: {}
+[8.077125] (-) TimerEvent: {}
+[8.178081] (-) TimerEvent: {}
+[8.278938] (-) TimerEvent: {}
+[8.379886] (-) TimerEvent: {}
+[8.480842] (-) TimerEvent: {}
+[8.581725] (-) TimerEvent: {}
+[8.646259] (robobin) StdoutLine: {'line': b'running egg_info\n'}
+[8.681932] (-) TimerEvent: {}
+[8.782882] (-) TimerEvent: {}
+[8.794800] (robobin) StdoutLine: {'line': b'writing ../../build/robobin/robobin.egg-info/PKG-INFO\n'}
+[8.796817] (robobin) StdoutLine: {'line': b'writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt\n'}
+[8.798686] (robobin) StdoutLine: {'line': b'writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt\n'}
+[8.800284] (robobin) StdoutLine: {'line': b'writing requirements to ../../build/robobin/robobin.egg-info/requires.txt\n'}
+[8.801643] (robobin) StdoutLine: {'line': b'writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt\n'}
+[8.883116] (-) TimerEvent: {}
+[8.984053] (-) TimerEvent: {}
+[9.084954] (-) TimerEvent: {}
+[9.105146] (robobin) StdoutLine: {'line': b"reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'\n"}
+[9.111950] (robobin) StdoutLine: {'line': b"writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'\n"}
+[9.113267] (robobin) StdoutLine: {'line': b'running build\n'}
+[9.114571] (robobin) StdoutLine: {'line': b'running build_py\n'}
+[9.115723] (robobin) StdoutLine: {'line': b'copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin\n'}
+[9.119323] (robobin) StdoutLine: {'line': b'running install\n'}
+[9.176261] (robobin) StdoutLine: {'line': b'running install_lib\n'}
+[9.185172] (-) TimerEvent: {}
+[9.286126] (-) TimerEvent: {}
+[9.329556] (robobin) StdoutLine: {'line': b'copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin\n'}
+[9.335290] (robobin) StdoutLine: {'line': b'byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc\n'}
+[9.343473] (robobin) StdoutLine: {'line': b'running install_data\n'}
+[9.345168] (robobin) StdoutLine: {'line': b'running install_egg_info\n'}
+[9.386349] (-) TimerEvent: {}
+[9.487393] (-) TimerEvent: {}
+[9.504114] (robobin) StdoutLine: {'line': b"removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)\n"}
+[9.507332] (robobin) StdoutLine: {'line': b'Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info\n'}
+[9.517790] (robobin) StdoutLine: {'line': b'running install_scripts\n'}
+[9.587665] (-) TimerEvent: {}
+[9.688667] (-) TimerEvent: {}
+[9.789657] (-) TimerEvent: {}
+[9.890606] (-) TimerEvent: {}
+[9.991548] (-) TimerEvent: {}
+[10.092541] (-) TimerEvent: {}
+[10.193556] (-) TimerEvent: {}
+[10.294524] (-) TimerEvent: {}
+[10.395538] (-) TimerEvent: {}
+[10.496507] (-) TimerEvent: {}
+[10.589843] (robobin) StdoutLine: {'line': b'Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin\n'}
+[10.592873] (robobin) StdoutLine: {'line': b"writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'\n"}
+[10.596948] (-) TimerEvent: {}
+[10.698086] (-) TimerEvent: {}
+[10.799235] (-) TimerEvent: {}
+[10.868242] (robobin) CommandEnded: {'returncode': 0}
+[10.900036] (-) TimerEvent: {}
+[10.948307] (robobin) JobEnded: {'identifier': 'robobin', 'rc': 0}
+[10.954210] (-) EventReactorShutdown: {}
diff --git a/ros2/log/build_2024-11-14_15-56-14/logger_all.log b/ros2/log/build_2024-11-14_15-56-14/logger_all.log
new file mode 100644
index 00000000..85228dbc
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-56-14/logger_all.log
@@ -0,0 +1,129 @@
+[0.877s] DEBUG:colcon:Command line arguments: ['/usr/bin/colcon', 'build']
+[0.878s] DEBUG:colcon:Parsed command line arguments: Namespace(log_base=None, log_level=None, verb_name='build', build_base='build', install_base='install', merge_install=False, symlink_install=False, test_result_base=None, continue_on_error=False, executor='parallel', parallel_workers=4, event_handlers=None, ignore_user_meta=False, metas=['./colcon.meta'], base_paths=['.'], packages_ignore=None, packages_ignore_regex=None, paths=None, packages_up_to=None, packages_up_to_regex=None, packages_above=None, packages_above_and_dependencies=None, packages_above_depth=None, packages_select_by_dep=None, packages_skip_by_dep=None, packages_skip_up_to=None, packages_select_build_failed=False, packages_skip_build_finished=False, packages_select_test_failures=False, packages_skip_test_passed=False, packages_select=None, packages_skip=None, packages_select_regex=None, packages_skip_regex=None, packages_start=None, packages_end=None, allow_overriding=[], cmake_args=None, cmake_target=None, cmake_target_skip_unavailable=False, cmake_clean_cache=False, cmake_clean_first=False, cmake_force_configure=False, ament_cmake_args=None, catkin_cmake_args=None, catkin_skip_building_tests=False, verb_parser=<colcon_defaults.argument_parser.defaults.DefaultArgumentsDecorator object at 0xffffa2a1baa0>, verb_extension=<colcon_core.verb.build.BuildVerb object at 0xffffa376b560>, main=<bound method BuildVerb.main of <colcon_core.verb.build.BuildVerb object at 0xffffa376b560>>)
+[1.212s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) check parameters
+[1.212s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) check parameters
+[1.213s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) check parameters
+[1.213s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) check parameters
+[1.213s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) discover
+[1.214s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) discover
+[1.214s] INFO:colcon.colcon_core.package_discovery:Crawling recursively for packages in '/home/paulw/GitLab/robobin/ros2'
+[1.215s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ignore', 'ignore_ament_install']
+[1.215s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore'
+[1.216s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore_ament_install'
+[1.216s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_pkg']
+[1.216s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_pkg'
+[1.217s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_meta']
+[1.217s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_meta'
+[1.217s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ros']
+[1.217s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ros'
+[1.423s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['cmake', 'python']
+[1.424s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'cmake'
+[1.424s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python'
+[1.424s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['python_setup_py']
+[1.425s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python_setup_py'
+[1.426s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extensions ['ignore', 'ignore_ament_install']
+[1.426s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extension 'ignore'
+[1.427s] Level 1:colcon.colcon_core.package_identification:_identify(build) ignored
+[1.428s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extensions ['ignore', 'ignore_ament_install']
+[1.428s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extension 'ignore'
+[1.429s] Level 1:colcon.colcon_core.package_identification:_identify(install) ignored
+[1.430s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extensions ['ignore', 'ignore_ament_install']
+[1.430s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extension 'ignore'
+[1.431s] Level 1:colcon.colcon_core.package_identification:_identify(log) ignored
+[1.431s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['ignore', 'ignore_ament_install']
+[1.432s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'ignore'
+[1.432s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'ignore_ament_install'
+[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['colcon_pkg']
+[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'colcon_pkg'
+[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['colcon_meta']
+[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'colcon_meta'
+[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['ros']
+[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'ros'
+[1.435s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['cmake', 'python']
+[1.435s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'cmake'
+[1.435s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'python'
+[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['python_setup_py']
+[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'python_setup_py'
+[1.437s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['ignore', 'ignore_ament_install']
+[1.437s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'ignore'
+[1.438s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'ignore_ament_install'
+[1.438s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['colcon_pkg']
+[1.438s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'colcon_pkg'
+[1.439s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['colcon_meta']
+[1.439s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'colcon_meta'
+[1.439s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['ros']
+[1.440s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'ros'
+[1.466s] DEBUG:colcon.colcon_core.package_identification:Package 'src/robobin' with type 'ros.ament_python' and name 'robobin'
+[1.466s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) using defaults
+[1.467s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) discover
+[1.467s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) using defaults
+[1.467s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) discover
+[1.467s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) using defaults
+[1.600s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) check parameters
+[1.600s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) discover
+[1.614s] DEBUG:colcon.colcon_installed_package_information.package_discovery:Found 1 installed packages in /home/paulw/GitLab/robobin/ros2/install
+[1.628s] DEBUG:colcon.colcon_installed_package_information.package_discovery:Found 192 installed packages in /opt/ros/jazzy
+[1.633s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) using defaults
+[1.912s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_args' from command line to 'None'
+[1.912s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_target' from command line to 'None'
+[1.912s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_target_skip_unavailable' from command line to 'False'
+[1.912s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_clean_cache' from command line to 'False'
+[1.913s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_clean_first' from command line to 'False'
+[1.913s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_force_configure' from command line to 'False'
+[1.913s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'ament_cmake_args' from command line to 'None'
+[1.913s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'catkin_cmake_args' from command line to 'None'
+[1.913s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'catkin_skip_building_tests' from command line to 'False'
+[1.914s] DEBUG:colcon.colcon_core.verb:Building package 'robobin' with the following arguments: {'ament_cmake_args': None, 'build_base': '/home/paulw/GitLab/robobin/ros2/build/robobin', 'catkin_cmake_args': None, 'catkin_skip_building_tests': False, 'cmake_args': None, 'cmake_clean_cache': False, 'cmake_clean_first': False, 'cmake_force_configure': False, 'cmake_target': None, 'cmake_target_skip_unavailable': False, 'install_base': '/home/paulw/GitLab/robobin/ros2/install/robobin', 'merge_install': False, 'path': '/home/paulw/GitLab/robobin/ros2/src/robobin', 'symlink_install': False, 'test_result_base': None}
+[1.914s] INFO:colcon.colcon_core.executor:Executing jobs using 'parallel' executor
+[1.920s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete
+[1.922s] INFO:colcon.colcon_ros.task.ament_python.build:Building ROS package in '/home/paulw/GitLab/robobin/ros2/src/robobin' with build type 'ament_python'
+[1.923s] Level 1:colcon.colcon_core.shell:create_environment_hook('robobin', 'ament_prefix_path')
+[1.938s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_core.shell.bat': Not used on non-Windows systems
+[1.940s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/ament_prefix_path.ps1'
+[1.944s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/ament_prefix_path.dsv'
+[1.948s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/ament_prefix_path.sh'
+[1.953s] INFO:colcon.colcon_core.shell:Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
+[1.954s] DEBUG:colcon.colcon_core.shell:Skip shell extension 'dsv' for command environment
+[3.724s] INFO:colcon.colcon_core.task.python.build:Building Python package in '/home/paulw/GitLab/robobin/ros2/src/robobin'
+[3.726s] INFO:colcon.colcon_core.shell:Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
+[3.726s] DEBUG:colcon.colcon_core.shell:Skip shell extension 'dsv' for command environment
+[8.458s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoking command in '/home/paulw/GitLab/robobin/ros2/src/robobin': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+[12.789s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoked command in '/home/paulw/GitLab/robobin/ros2/src/robobin' returned '0': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+[12.806s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin' for CMake module files
+[12.811s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin' for CMake config files
+[12.818s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/lib'
+[12.820s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/bin'
+[12.821s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/pkgconfig/robobin.pc'
+[12.823s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages'
+[12.824s] Level 1:colcon.colcon_core.shell:create_environment_hook('robobin', 'pythonpath')
+[12.825s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/pythonpath.ps1'
+[12.828s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/pythonpath.dsv'
+[12.831s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/pythonpath.sh'
+[12.836s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/bin'
+[12.837s] Level 1:colcon.colcon_core.environment:create_environment_scripts_only(robobin)
+[12.839s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.ps1'
+[12.844s] INFO:colcon.colcon_core.shell:Creating package descriptor '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.dsv'
+[12.849s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.sh'
+[12.854s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.bash'
+[12.860s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.zsh'
+[12.865s] Level 1:colcon.colcon_core.environment:create_file_with_runtime_dependencies(/home/paulw/GitLab/robobin/ros2/install/robobin/share/colcon-core/packages/robobin)
+[12.868s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:closing loop
+[12.870s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:loop closed
+[12.871s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete finished with '0'
+[12.872s] DEBUG:colcon.colcon_core.event_reactor:joining thread
+[12.909s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.notify_send': Could not find 'notify-send'
+[12.910s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.terminal_notifier': Not used on non-Darwin systems
+[12.911s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.win32': Not used on non-Windows systems
+[12.911s] INFO:colcon.colcon_notification.desktop_notification:Sending desktop notification using 'notify2'
+[12.916s] DEBUG:colcon.colcon_notification.desktop_notification.notify2:Failed to initialize notify2: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications was not provided by any .service files
+[12.917s] DEBUG:colcon.colcon_core.event_reactor:joined thread
+[12.919s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.ps1'
+[12.925s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/paulw/GitLab/robobin/ros2/install/_local_setup_util_ps1.py'
+[12.936s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.ps1'
+[12.942s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.sh'
+[12.946s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/paulw/GitLab/robobin/ros2/install/_local_setup_util_sh.py'
+[12.951s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.sh'
+[12.958s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.bash'
+[12.962s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.bash'
+[12.969s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.zsh'
+[12.974s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.zsh'
diff --git a/ros2/log/build_2024-11-14_15-56-14/robobin/command.log b/ros2/log/build_2024-11-14_15-56-14/robobin/command.log
new file mode 100644
index 00000000..64b7945c
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-56-14/robobin/command.log
@@ -0,0 +1,2 @@
+Invoking command in '/home/paulw/GitLab/robobin/ros2/src/robobin': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+Invoked command in '/home/paulw/GitLab/robobin/ros2/src/robobin' returned '0': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
diff --git a/ros2/log/build_2024-11-14_15-56-14/robobin/stderr.log b/ros2/log/build_2024-11-14_15-56-14/robobin/stderr.log
new file mode 100644
index 00000000..e69de29b
diff --git a/ros2/log/build_2024-11-14_15-56-14/robobin/stdout.log b/ros2/log/build_2024-11-14_15-56-14/robobin/stdout.log
new file mode 100644
index 00000000..475195e0
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-56-14/robobin/stdout.log
@@ -0,0 +1,22 @@
+running egg_info
+writing ../../build/robobin/robobin.egg-info/PKG-INFO
+writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt
+writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt
+writing requirements to ../../build/robobin/robobin.egg-info/requires.txt
+writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt
+reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+running build
+running build_py
+copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+running install
+running install_lib
+copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc
+running install_data
+running install_egg_info
+removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)
+Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info
+running install_scripts
+Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin
+writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'
diff --git a/ros2/log/build_2024-11-14_15-56-14/robobin/stdout_stderr.log b/ros2/log/build_2024-11-14_15-56-14/robobin/stdout_stderr.log
new file mode 100644
index 00000000..475195e0
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-56-14/robobin/stdout_stderr.log
@@ -0,0 +1,22 @@
+running egg_info
+writing ../../build/robobin/robobin.egg-info/PKG-INFO
+writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt
+writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt
+writing requirements to ../../build/robobin/robobin.egg-info/requires.txt
+writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt
+reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+running build
+running build_py
+copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+running install
+running install_lib
+copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc
+running install_data
+running install_egg_info
+removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)
+Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info
+running install_scripts
+Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin
+writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'
diff --git a/ros2/log/build_2024-11-14_15-56-14/robobin/streams.log b/ros2/log/build_2024-11-14_15-56-14/robobin/streams.log
new file mode 100644
index 00000000..0df8a392
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-56-14/robobin/streams.log
@@ -0,0 +1,24 @@
+[6.535s] Invoking command in '/home/paulw/GitLab/robobin/ros2/src/robobin': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+[8.643s] running egg_info
+[8.792s] writing ../../build/robobin/robobin.egg-info/PKG-INFO
+[8.794s] writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt
+[8.795s] writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt
+[8.797s] writing requirements to ../../build/robobin/robobin.egg-info/requires.txt
+[8.798s] writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt
+[9.102s] reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+[9.109s] writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+[9.110s] running build
+[9.111s] running build_py
+[9.112s] copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+[9.116s] running install
+[9.177s] running install_lib
+[9.326s] copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+[9.332s] byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc
+[9.340s] running install_data
+[9.342s] running install_egg_info
+[9.501s] removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)
+[9.504s] Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info
+[9.515s] running install_scripts
+[10.587s] Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin
+[10.590s] writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'
+[10.865s] Invoked command in '/home/paulw/GitLab/robobin/ros2/src/robobin' returned '0': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
diff --git a/ros2/log/build_2024-11-14_15-58-20/events.log b/ros2/log/build_2024-11-14_15-58-20/events.log
new file mode 100644
index 00000000..dc73d76d
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-58-20/events.log
@@ -0,0 +1,137 @@
+[0.000000] (-) TimerEvent: {}
+[0.001090] (robobin) JobQueued: {'identifier': 'robobin', 'dependencies': OrderedDict()}
+[0.003266] (robobin) JobStarted: {'identifier': 'robobin'}
+[0.098743] (-) TimerEvent: {}
+[0.199859] (-) TimerEvent: {}
+[0.300924] (-) TimerEvent: {}
+[0.401947] (-) TimerEvent: {}
+[0.502968] (-) TimerEvent: {}
+[0.604010] (-) TimerEvent: {}
+[0.704957] (-) TimerEvent: {}
+[0.806003] (-) TimerEvent: {}
+[0.906934] (-) TimerEvent: {}
+[1.007920] (-) TimerEvent: {}
+[1.108841] (-) TimerEvent: {}
+[1.209719] (-) TimerEvent: {}
+[1.310675] (-) TimerEvent: {}
+[1.411625] (-) TimerEvent: {}
+[1.512598] (-) TimerEvent: {}
+[1.613636] (-) TimerEvent: {}
+[1.714793] (-) TimerEvent: {}
+[1.815848] (-) TimerEvent: {}
+[1.916858] (-) TimerEvent: {}
+[2.017777] (-) TimerEvent: {}
+[2.118697] (-) TimerEvent: {}
+[2.219689] (-) TimerEvent: {}
+[2.320636] (-) TimerEvent: {}
+[2.421599] (-) TimerEvent: {}
+[2.522506] (-) TimerEvent: {}
+[2.623603] (-) TimerEvent: {}
+[2.724623] (-) TimerEvent: {}
+[2.825496] (-) TimerEvent: {}
+[2.926450] (-) TimerEvent: {}
+[3.027408] (-) TimerEvent: {}
+[3.128339] (-) TimerEvent: {}
+[3.229303] (-) TimerEvent: {}
+[3.330274] (-) TimerEvent: {}
+[3.431181] (-) TimerEvent: {}
+[3.532176] (-) TimerEvent: {}
+[3.633139] (-) TimerEvent: {}
+[3.734079] (-) TimerEvent: {}
+[3.835097] (-) TimerEvent: {}
+[3.936169] (-) TimerEvent: {}
+[4.037130] (-) TimerEvent: {}
+[4.138230] (-) TimerEvent: {}
+[4.239181] (-) TimerEvent: {}
+[4.340099] (-) TimerEvent: {}
+[4.441062] (-) TimerEvent: {}
+[4.542060] (-) TimerEvent: {}
+[4.643057] (-) TimerEvent: {}
+[4.744015] (-) TimerEvent: {}
+[4.845025] (-) TimerEvent: {}
+[4.946022] (-) TimerEvent: {}
+[5.047010] (-) TimerEvent: {}
+[5.148061] (-) TimerEvent: {}
+[5.249034] (-) TimerEvent: {}
+[5.350032] (-) TimerEvent: {}
+[5.451060] (-) TimerEvent: {}
+[5.552044] (-) TimerEvent: {}
+[5.653020] (-) TimerEvent: {}
+[5.753996] (-) TimerEvent: {}
+[5.854995] (-) TimerEvent: {}
+[5.955960] (-) TimerEvent: {}
+[6.056880] (-) TimerEvent: {}
+[6.157969] (-) TimerEvent: {}
+[6.259148] (-) TimerEvent: {}
+[6.360371] (-) TimerEvent: {}
+[6.461652] (-) TimerEvent: {}
+[6.490079] (robobin) Command: {'cmd': ['/usr/bin/python3', '-W', 'ignore:setup.py install is deprecated', 'setup.py', 'egg_info', '--egg-base', '../../build/robobin', 'build', '--build-base', '/home/paulw/GitLab/robobin/ros2/build/robobin/build', 'install', '--record', '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log', '--single-version-externally-managed', 'install_data'], 'cwd': '/home/paulw/GitLab/robobin/ros2/src/robobin', 'env': {'LESSOPEN': '| /usr/bin/lesspipe %s', 'USER': 'paulw', 'SSH_CLIENT': '192.168.0.20 57325 22', 'XDG_SESSION_TYPE': 'tty', 'SHLVL': '1', 'LD_LIBRARY_PATH': '/opt/ros/jazzy/lib/aarch64-linux-gnu:/opt/ros/jazzy/lib', 'HOME': '/home/paulw', 'OLDPWD': '/home/paulw/GitLab/robobin/ros2/src', 'SSH_TTY': '/dev/pts/0', 'ROS_PYTHON_VERSION': '3', 'DBUS_SESSION_BUS_ADDRESS': 'unix:path=/run/user/1000/bus', 'COLCON_PREFIX_PATH': '/home/paulw/GitLab/robobin/ros2/install', 'ROS_DISTRO': 'jazzy', 'LOGNAME': 'paulw', '_': '/usr/bin/colcon', 'ROS_VERSION': '2', 'XDG_SESSION_CLASS': 'user', 'TERM': 'xterm-256color', 'XDG_SESSION_ID': '5', 'PATH': '/opt/ros/jazzy/bin:/home/paulw/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', 'XDG_RUNTIME_DIR': '/run/user/1000', 'LANG': 'en_US.UTF-8', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:', 'AMENT_PREFIX_PATH': '/home/paulw/GitLab/robobin/ros2/install/robobin:/opt/ros/jazzy', 'SHELL': '/bin/bash', 'LESSCLOSE': '/usr/bin/lesspipe %s %s', 'ROS_AUTOMATIC_DISCOVERY_RANGE': 'SUBNET', 'PWD': '/home/paulw/GitLab/robobin/ros2/build/robobin', 'SSH_CONNECTION': '192.168.0.20 57325 192.168.0.46 22', 'XDG_DATA_DIRS': '/usr/local/share:/usr/share:/var/lib/snapd/desktop', 'PYTHONPATH': '/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:/opt/ros/jazzy/lib/python3.12/site-packages', 'COLCON': '1'}, 'shell': False}
+[6.561863] (-) TimerEvent: {}
+[6.662691] (-) TimerEvent: {}
+[6.763660] (-) TimerEvent: {}
+[6.864673] (-) TimerEvent: {}
+[6.965618] (-) TimerEvent: {}
+[7.066507] (-) TimerEvent: {}
+[7.167494] (-) TimerEvent: {}
+[7.268468] (-) TimerEvent: {}
+[7.369444] (-) TimerEvent: {}
+[7.470440] (-) TimerEvent: {}
+[7.571443] (-) TimerEvent: {}
+[7.672419] (-) TimerEvent: {}
+[7.773380] (-) TimerEvent: {}
+[7.874369] (-) TimerEvent: {}
+[7.975336] (-) TimerEvent: {}
+[8.076315] (-) TimerEvent: {}
+[8.177288] (-) TimerEvent: {}
+[8.278258] (-) TimerEvent: {}
+[8.379277] (-) TimerEvent: {}
+[8.480245] (-) TimerEvent: {}
+[8.581215] (-) TimerEvent: {}
+[8.626481] (robobin) StdoutLine: {'line': b'running egg_info\n'}
+[8.681450] (-) TimerEvent: {}
+[8.775186] (robobin) StdoutLine: {'line': b'writing ../../build/robobin/robobin.egg-info/PKG-INFO\n'}
+[8.777301] (robobin) StdoutLine: {'line': b'writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt\n'}
+[8.779125] (robobin) StdoutLine: {'line': b'writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt\n'}
+[8.780679] (robobin) StdoutLine: {'line': b'writing requirements to ../../build/robobin/robobin.egg-info/requires.txt\n'}
+[8.781695] (-) TimerEvent: {}
+[8.782494] (robobin) StdoutLine: {'line': b'writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt\n'}
+[8.881929] (-) TimerEvent: {}
+[8.982912] (-) TimerEvent: {}
+[9.083776] (-) TimerEvent: {}
+[9.086299] (robobin) StdoutLine: {'line': b"reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'\n"}
+[9.093066] (robobin) StdoutLine: {'line': b"writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'\n"}
+[9.094571] (robobin) StdoutLine: {'line': b'running build\n'}
+[9.095698] (robobin) StdoutLine: {'line': b'running build_py\n'}
+[9.096809] (robobin) StdoutLine: {'line': b'copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin\n'}
+[9.100357] (robobin) StdoutLine: {'line': b'running install\n'}
+[9.156765] (robobin) StdoutLine: {'line': b'running install_lib\n'}
+[9.183993] (-) TimerEvent: {}
+[9.284931] (-) TimerEvent: {}
+[9.310650] (robobin) StdoutLine: {'line': b'copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin\n'}
+[9.316379] (robobin) StdoutLine: {'line': b'byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc\n'}
+[9.324655] (robobin) StdoutLine: {'line': b'running install_data\n'}
+[9.326320] (robobin) StdoutLine: {'line': b'running install_egg_info\n'}
+[9.385160] (-) TimerEvent: {}
+[9.486153] (-) TimerEvent: {}
+[9.487031] (robobin) StdoutLine: {'line': b"removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)\n"}
+[9.489935] (robobin) StdoutLine: {'line': b'Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info\n'}
+[9.500140] (robobin) StdoutLine: {'line': b'running install_scripts\n'}
+[9.586376] (-) TimerEvent: {}
+[9.687388] (-) TimerEvent: {}
+[9.788419] (-) TimerEvent: {}
+[9.889391] (-) TimerEvent: {}
+[9.990353] (-) TimerEvent: {}
+[10.091320] (-) TimerEvent: {}
+[10.192277] (-) TimerEvent: {}
+[10.293249] (-) TimerEvent: {}
+[10.394222] (-) TimerEvent: {}
+[10.495201] (-) TimerEvent: {}
+[10.571255] (robobin) StdoutLine: {'line': b'Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin\n'}
+[10.574364] (robobin) StdoutLine: {'line': b"writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'\n"}
+[10.595480] (-) TimerEvent: {}
+[10.696633] (-) TimerEvent: {}
+[10.797735] (-) TimerEvent: {}
+[10.848318] (robobin) CommandEnded: {'returncode': 0}
+[10.899425] (-) TimerEvent: {}
+[10.931164] (robobin) JobEnded: {'identifier': 'robobin', 'rc': 0}
+[10.937101] (-) EventReactorShutdown: {}
diff --git a/ros2/log/build_2024-11-14_15-58-20/logger_all.log b/ros2/log/build_2024-11-14_15-58-20/logger_all.log
new file mode 100644
index 00000000..e90eeaad
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-58-20/logger_all.log
@@ -0,0 +1,129 @@
+[0.876s] DEBUG:colcon:Command line arguments: ['/usr/bin/colcon', 'build']
+[0.877s] DEBUG:colcon:Parsed command line arguments: Namespace(log_base=None, log_level=None, verb_name='build', build_base='build', install_base='install', merge_install=False, symlink_install=False, test_result_base=None, continue_on_error=False, executor='parallel', parallel_workers=4, event_handlers=None, ignore_user_meta=False, metas=['./colcon.meta'], base_paths=['.'], packages_ignore=None, packages_ignore_regex=None, paths=None, packages_up_to=None, packages_up_to_regex=None, packages_above=None, packages_above_and_dependencies=None, packages_above_depth=None, packages_select_by_dep=None, packages_skip_by_dep=None, packages_skip_up_to=None, packages_select_build_failed=False, packages_skip_build_finished=False, packages_select_test_failures=False, packages_skip_test_passed=False, packages_select=None, packages_skip=None, packages_select_regex=None, packages_skip_regex=None, packages_start=None, packages_end=None, allow_overriding=[], cmake_args=None, cmake_target=None, cmake_target_skip_unavailable=False, cmake_clean_cache=False, cmake_clean_first=False, cmake_force_configure=False, ament_cmake_args=None, catkin_cmake_args=None, catkin_skip_building_tests=False, verb_parser=<colcon_defaults.argument_parser.defaults.DefaultArgumentsDecorator object at 0xffff98acbb30>, verb_extension=<colcon_core.verb.build.BuildVerb object at 0xffff98c5af30>, main=<bound method BuildVerb.main of <colcon_core.verb.build.BuildVerb object at 0xffff98c5af30>>)
+[1.210s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) check parameters
+[1.211s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) check parameters
+[1.211s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) check parameters
+[1.212s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) check parameters
+[1.212s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) discover
+[1.212s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) discover
+[1.212s] INFO:colcon.colcon_core.package_discovery:Crawling recursively for packages in '/home/paulw/GitLab/robobin/ros2'
+[1.213s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ignore', 'ignore_ament_install']
+[1.214s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore'
+[1.214s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore_ament_install'
+[1.215s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_pkg']
+[1.215s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_pkg'
+[1.215s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_meta']
+[1.215s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_meta'
+[1.216s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ros']
+[1.216s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ros'
+[1.420s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['cmake', 'python']
+[1.421s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'cmake'
+[1.421s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python'
+[1.421s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['python_setup_py']
+[1.422s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python_setup_py'
+[1.422s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extensions ['ignore', 'ignore_ament_install']
+[1.423s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extension 'ignore'
+[1.424s] Level 1:colcon.colcon_core.package_identification:_identify(build) ignored
+[1.425s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extensions ['ignore', 'ignore_ament_install']
+[1.425s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extension 'ignore'
+[1.426s] Level 1:colcon.colcon_core.package_identification:_identify(install) ignored
+[1.427s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extensions ['ignore', 'ignore_ament_install']
+[1.427s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extension 'ignore'
+[1.427s] Level 1:colcon.colcon_core.package_identification:_identify(log) ignored
+[1.428s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['ignore', 'ignore_ament_install']
+[1.429s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'ignore'
+[1.429s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'ignore_ament_install'
+[1.430s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['colcon_pkg']
+[1.430s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'colcon_pkg'
+[1.430s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['colcon_meta']
+[1.430s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'colcon_meta'
+[1.431s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['ros']
+[1.431s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'ros'
+[1.432s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['cmake', 'python']
+[1.432s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'cmake'
+[1.432s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'python'
+[1.432s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extensions ['python_setup_py']
+[1.433s] Level 1:colcon.colcon_core.package_identification:_identify(src) by extension 'python_setup_py'
+[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['ignore', 'ignore_ament_install']
+[1.434s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'ignore'
+[1.435s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'ignore_ament_install'
+[1.435s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['colcon_pkg']
+[1.435s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'colcon_pkg'
+[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['colcon_meta']
+[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'colcon_meta'
+[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extensions ['ros']
+[1.436s] Level 1:colcon.colcon_core.package_identification:_identify(src/robobin) by extension 'ros'
+[1.462s] DEBUG:colcon.colcon_core.package_identification:Package 'src/robobin' with type 'ros.ament_python' and name 'robobin'
+[1.462s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) using defaults
+[1.463s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) discover
+[1.463s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) using defaults
+[1.463s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) discover
+[1.463s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) using defaults
+[1.595s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) check parameters
+[1.596s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) discover
+[1.610s] DEBUG:colcon.colcon_installed_package_information.package_discovery:Found 1 installed packages in /home/paulw/GitLab/robobin/ros2/install
+[1.623s] DEBUG:colcon.colcon_installed_package_information.package_discovery:Found 192 installed packages in /opt/ros/jazzy
+[1.628s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) using defaults
+[1.907s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_args' from command line to 'None'
+[1.908s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_target' from command line to 'None'
+[1.908s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_target_skip_unavailable' from command line to 'False'
+[1.908s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_clean_cache' from command line to 'False'
+[1.908s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_clean_first' from command line to 'False'
+[1.909s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'cmake_force_configure' from command line to 'False'
+[1.909s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'ament_cmake_args' from command line to 'None'
+[1.909s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'catkin_cmake_args' from command line to 'None'
+[1.909s] Level 5:colcon.colcon_core.verb:set package 'robobin' build argument 'catkin_skip_building_tests' from command line to 'False'
+[1.909s] DEBUG:colcon.colcon_core.verb:Building package 'robobin' with the following arguments: {'ament_cmake_args': None, 'build_base': '/home/paulw/GitLab/robobin/ros2/build/robobin', 'catkin_cmake_args': None, 'catkin_skip_building_tests': False, 'cmake_args': None, 'cmake_clean_cache': False, 'cmake_clean_first': False, 'cmake_force_configure': False, 'cmake_target': None, 'cmake_target_skip_unavailable': False, 'install_base': '/home/paulw/GitLab/robobin/ros2/install/robobin', 'merge_install': False, 'path': '/home/paulw/GitLab/robobin/ros2/src/robobin', 'symlink_install': False, 'test_result_base': None}
+[1.910s] INFO:colcon.colcon_core.executor:Executing jobs using 'parallel' executor
+[1.916s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete
+[1.917s] INFO:colcon.colcon_ros.task.ament_python.build:Building ROS package in '/home/paulw/GitLab/robobin/ros2/src/robobin' with build type 'ament_python'
+[1.919s] Level 1:colcon.colcon_core.shell:create_environment_hook('robobin', 'ament_prefix_path')
+[1.934s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_core.shell.bat': Not used on non-Windows systems
+[1.936s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/ament_prefix_path.ps1'
+[1.940s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/ament_prefix_path.dsv'
+[1.944s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/ament_prefix_path.sh'
+[1.949s] INFO:colcon.colcon_core.shell:Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
+[1.949s] DEBUG:colcon.colcon_core.shell:Skip shell extension 'dsv' for command environment
+[3.712s] INFO:colcon.colcon_core.task.python.build:Building Python package in '/home/paulw/GitLab/robobin/ros2/src/robobin'
+[3.713s] INFO:colcon.colcon_core.shell:Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
+[3.714s] DEBUG:colcon.colcon_core.shell:Skip shell extension 'dsv' for command environment
+[8.428s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoking command in '/home/paulw/GitLab/robobin/ros2/src/robobin': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+[12.764s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoked command in '/home/paulw/GitLab/robobin/ros2/src/robobin' returned '0': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+[12.785s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin' for CMake module files
+[12.790s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin' for CMake config files
+[12.796s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/lib'
+[12.798s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/bin'
+[12.798s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/pkgconfig/robobin.pc'
+[12.800s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages'
+[12.801s] Level 1:colcon.colcon_core.shell:create_environment_hook('robobin', 'pythonpath')
+[12.802s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/pythonpath.ps1'
+[12.806s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/pythonpath.dsv'
+[12.809s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/hook/pythonpath.sh'
+[12.814s] Level 1:colcon.colcon_core.environment:checking '/home/paulw/GitLab/robobin/ros2/install/robobin/bin'
+[12.815s] Level 1:colcon.colcon_core.environment:create_environment_scripts_only(robobin)
+[12.817s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.ps1'
+[12.823s] INFO:colcon.colcon_core.shell:Creating package descriptor '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.dsv'
+[12.827s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.sh'
+[12.832s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.bash'
+[12.839s] INFO:colcon.colcon_core.shell:Creating package script '/home/paulw/GitLab/robobin/ros2/install/robobin/share/robobin/package.zsh'
+[12.843s] Level 1:colcon.colcon_core.environment:create_file_with_runtime_dependencies(/home/paulw/GitLab/robobin/ros2/install/robobin/share/colcon-core/packages/robobin)
+[12.846s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:closing loop
+[12.849s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:loop closed
+[12.850s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete finished with '0'
+[12.851s] DEBUG:colcon.colcon_core.event_reactor:joining thread
+[12.889s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.notify_send': Could not find 'notify-send'
+[12.889s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.terminal_notifier': Not used on non-Darwin systems
+[12.890s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.win32': Not used on non-Windows systems
+[12.890s] INFO:colcon.colcon_notification.desktop_notification:Sending desktop notification using 'notify2'
+[12.896s] DEBUG:colcon.colcon_notification.desktop_notification.notify2:Failed to initialize notify2: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications was not provided by any .service files
+[12.896s] DEBUG:colcon.colcon_core.event_reactor:joined thread
+[12.898s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.ps1'
+[12.904s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/paulw/GitLab/robobin/ros2/install/_local_setup_util_ps1.py'
+[12.914s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.ps1'
+[12.921s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.sh'
+[12.925s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/paulw/GitLab/robobin/ros2/install/_local_setup_util_sh.py'
+[12.930s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.sh'
+[12.937s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.bash'
+[12.940s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.bash'
+[12.947s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/paulw/GitLab/robobin/ros2/install/local_setup.zsh'
+[12.952s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/paulw/GitLab/robobin/ros2/install/setup.zsh'
diff --git a/ros2/log/build_2024-11-14_15-58-20/robobin/command.log b/ros2/log/build_2024-11-14_15-58-20/robobin/command.log
new file mode 100644
index 00000000..64b7945c
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-58-20/robobin/command.log
@@ -0,0 +1,2 @@
+Invoking command in '/home/paulw/GitLab/robobin/ros2/src/robobin': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+Invoked command in '/home/paulw/GitLab/robobin/ros2/src/robobin' returned '0': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
diff --git a/ros2/log/build_2024-11-14_15-58-20/robobin/stderr.log b/ros2/log/build_2024-11-14_15-58-20/robobin/stderr.log
new file mode 100644
index 00000000..e69de29b
diff --git a/ros2/log/build_2024-11-14_15-58-20/robobin/stdout.log b/ros2/log/build_2024-11-14_15-58-20/robobin/stdout.log
new file mode 100644
index 00000000..475195e0
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-58-20/robobin/stdout.log
@@ -0,0 +1,22 @@
+running egg_info
+writing ../../build/robobin/robobin.egg-info/PKG-INFO
+writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt
+writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt
+writing requirements to ../../build/robobin/robobin.egg-info/requires.txt
+writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt
+reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+running build
+running build_py
+copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+running install
+running install_lib
+copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc
+running install_data
+running install_egg_info
+removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)
+Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info
+running install_scripts
+Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin
+writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'
diff --git a/ros2/log/build_2024-11-14_15-58-20/robobin/stdout_stderr.log b/ros2/log/build_2024-11-14_15-58-20/robobin/stdout_stderr.log
new file mode 100644
index 00000000..475195e0
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-58-20/robobin/stdout_stderr.log
@@ -0,0 +1,22 @@
+running egg_info
+writing ../../build/robobin/robobin.egg-info/PKG-INFO
+writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt
+writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt
+writing requirements to ../../build/robobin/robobin.egg-info/requires.txt
+writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt
+reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+running build
+running build_py
+copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+running install
+running install_lib
+copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc
+running install_data
+running install_egg_info
+removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)
+Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info
+running install_scripts
+Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin
+writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'
diff --git a/ros2/log/build_2024-11-14_15-58-20/robobin/streams.log b/ros2/log/build_2024-11-14_15-58-20/robobin/streams.log
new file mode 100644
index 00000000..944cc063
--- /dev/null
+++ b/ros2/log/build_2024-11-14_15-58-20/robobin/streams.log
@@ -0,0 +1,24 @@
+[6.509s] Invoking command in '/home/paulw/GitLab/robobin/ros2/src/robobin': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
+[8.624s] running egg_info
+[8.773s] writing ../../build/robobin/robobin.egg-info/PKG-INFO
+[8.775s] writing dependency_links to ../../build/robobin/robobin.egg-info/dependency_links.txt
+[8.777s] writing entry points to ../../build/robobin/robobin.egg-info/entry_points.txt
+[8.778s] writing requirements to ../../build/robobin/robobin.egg-info/requires.txt
+[8.780s] writing top-level names to ../../build/robobin/robobin.egg-info/top_level.txt
+[9.084s] reading manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+[9.091s] writing manifest file '../../build/robobin/robobin.egg-info/SOURCES.txt'
+[9.092s] running build
+[9.093s] running build_py
+[9.094s] copying robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin
+[9.098s] running install
+[9.158s] running install_lib
+[9.308s] copying /home/paulw/GitLab/robobin/ros2/build/robobin/build/lib/robobin/connection_manager.py -> /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin
+[9.314s] byte-compiling /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin/connection_manager.py to connection_manager.cpython-312.pyc
+[9.322s] running install_data
+[9.324s] running install_egg_info
+[9.485s] removing '/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info' (and everything under it)
+[9.487s] Copying ../../build/robobin/robobin.egg-info to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages/robobin-0.0.0-py3.12.egg-info
+[9.498s] running install_scripts
+[10.569s] Installing api_node script to /home/paulw/GitLab/robobin/ros2/install/robobin/lib/robobin
+[10.572s] writing list of installed files to '/home/paulw/GitLab/robobin/ros2/build/robobin/install.log'
+[10.846s] Invoked command in '/home/paulw/GitLab/robobin/ros2/src/robobin' returned '0': PYTHONPATH=/home/paulw/GitLab/robobin/ros2/build/robobin/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/paulw/GitLab/robobin/ros2/install/robobin/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated setup.py egg_info --egg-base ../../build/robobin build --build-base /home/paulw/GitLab/robobin/ros2/build/robobin/build install --record /home/paulw/GitLab/robobin/ros2/build/robobin/install.log --single-version-externally-managed install_data
diff --git a/ros2/log/latest_build b/ros2/log/latest_build
index f79a0be8..77717729 120000
--- a/ros2/log/latest_build
+++ b/ros2/log/latest_build
@@ -1 +1 @@
-build_2024-11-14_15-38-13
\ No newline at end of file
+build_2024-11-14_15-58-20
\ No newline at end of file
diff --git a/ros2/src/robobin/robobin/connection_manager.py b/ros2/src/robobin/robobin/connection_manager.py
index 64485cbf..555db1a2 100644
--- a/ros2/src/robobin/robobin/connection_manager.py
+++ b/ros2/src/robobin/robobin/connection_manager.py
@@ -51,7 +51,9 @@ class ConnectionManager:
 
         while not self.stop_event.is_set():
             try:
-                sock.sendto(b"ROBOBIN_PRESENT", (self.UDP_IP, self.UDP_PORT))
+                location = "(0,0)" #At some point this will be retrieved from navigation node
+                message = f"ROBOBIN_PRESENT {location}".encode()
+                sock.sendto(message, (self.UDP_IP, self.UDP_PORT))
                 print("Broadcasting presence.")
                 time.sleep(5)
             except OSError:
-- 
GitLab